帶自舉功能的DSP外設(shè)擴(kuò)展模塊設(shè)計
摘要:TMS320VC54x系列DSP(Digital Signal processor)沒有AD、DA等常用外設(shè)且缺少程序存儲器,故其應(yīng)用系統(tǒng)通常需進(jìn)行外設(shè)擴(kuò)展模塊與自舉模塊設(shè)計,針對傳統(tǒng)解決方案將兩個模塊分別實(shí)現(xiàn)存在擴(kuò)展器件多、系統(tǒng)集成度不高等問題,本文提出了一種帶自舉功能的DSP外設(shè)擴(kuò)展模塊。該模塊通過將C8051F330單片機(jī)作為唯一的外擴(kuò)芯片,利用其片內(nèi)FLASH存儲DSP自單程序代碼,并采用其片上AD、DA實(shí)現(xiàn)DSP的外設(shè)擴(kuò)展。實(shí)驗(yàn)表明本文提出的DSP外設(shè)擴(kuò)展模塊合理可行。
TMS320VC54x系列DSP由于具有快速運(yùn)算能力,其指令執(zhí)行速度最高可達(dá)160 MIPS,因此在消費(fèi)電子、通信等領(lǐng)域應(yīng)用廣泛。但此系列DSP片上沒有AD、DA等工業(yè)常用外設(shè),常需要對其進(jìn)行外設(shè)擴(kuò)展模塊設(shè)計,另外,此系列DSP也沒有FLASH、EEPROM等便于改寫的片內(nèi)程序存儲器,掉電后不能保存用戶程序代碼,因此還需要對其擴(kuò)展自舉模塊。文獻(xiàn)給出了不同的DSP外設(shè)擴(kuò)展模塊設(shè)計方案,而文獻(xiàn)則給出了不同的DSP自舉模塊設(shè)計方案,上述將外設(shè)擴(kuò)展模塊與自舉模塊分別實(shí)現(xiàn)的設(shè)計方案,存在外擴(kuò)器件較多、集成度不高、成本較高等問題。為此,文中提出了一種帶自舉功能的DSP外設(shè)擴(kuò)展模塊,該模塊僅用外擴(kuò)一個芯片,就能一體實(shí)現(xiàn)DSP的外設(shè)擴(kuò)展與自舉,具有擴(kuò)展器件少、系統(tǒng)集成度高、穩(wěn)定性好、成本較低等特點(diǎn)。
1 方案設(shè)計
文中提出的DSP外設(shè)擴(kuò)展模塊,借助C8051F330豐富的片上外設(shè)資源對DSP實(shí)現(xiàn)10位AD、DA擴(kuò)展,同時利用C8051F330片內(nèi)FLASH存儲DSP用戶程序代碼,并用標(biāo)準(zhǔn)串行總線實(shí)現(xiàn)自舉,模塊原理框圖如圖1所示。圖1中虛線框部分為本文設(shè)計的DSP外設(shè)擴(kuò)展模塊,其中C8051F330是本模塊的唯一外擴(kuò)芯片。一方面,目標(biāo)板中的DSP通過將其片上McBSP0配置為SPI工作模式,實(shí)現(xiàn)控制C8051F330片上的AD采樣數(shù)據(jù)或DA形成模擬波形,從而完成對DSP的AD、DA外設(shè)擴(kuò)展。上述SPI通信中,TMS320VC5416為主設(shè)備,C8051F330為從設(shè)備。另外,考慮到只有SPI主設(shè)備才能啟動數(shù)據(jù)傳輸,為了將SPI從設(shè)備的AD采樣數(shù)據(jù)第一時間傳輸給SPI主設(shè)備,SPI從設(shè)備通過I/O引腳觸發(fā)SPI主設(shè)備的外部中斷,從而使SPI主設(shè)備啟動SPI通信。另一方面,利用C8051F330片內(nèi)FLASH的剩余空間(從0x0BB7到0x1FF)存儲DSP程序代碼,同時,利用5個I/O引腳模擬DSP的標(biāo)準(zhǔn)串行自舉接口,從而實(shí)現(xiàn)DSP的標(biāo)準(zhǔn)串行自舉模塊設(shè)計。DSP有多種自舉模式,標(biāo)準(zhǔn)串行自舉模式占用的DSP硬件資源最少,故本文模塊選用了標(biāo)準(zhǔn)串行自舉模式。但在此模式下,自舉模塊必須與DSP的McBSP0接口相連,為了進(jìn)一步減少對DSP硬件資源的占用,本文將C8051F330的SPI接口與5個I/O引腳模擬的標(biāo)準(zhǔn)串行自舉接口復(fù)用DSP的McBSP0接口。
2 硬件設(shè)計
文中提出的DSP外設(shè)擴(kuò)展模塊硬件主要包括如下幾部分:自舉模塊,SPI通信模塊,外設(shè)擴(kuò)展模塊以及C8051F330最小系統(tǒng)模塊,考慮到介紹C8051F330最小系統(tǒng)的文獻(xiàn)較多,此處不再贅述,這里主要給出其他模塊的硬件連接關(guān)系,如圖2所示。
圖2虛線框1為自舉模塊(標(biāo)準(zhǔn)串行自舉方式)引腳連接關(guān)系,其中與標(biāo)準(zhǔn)串行自舉直接相關(guān)的DSP引腳為接收時鐘信號(BCLKR0),多通道緩沖接收引腳(BDR0),幀同步接收信號(BFSR0),因?yàn)镈SP與單片機(jī)啟動不同步,因此需要設(shè)置RS引腳在單片機(jī)上電后對DSP進(jìn)行復(fù)位,設(shè)置XF引腳在DSP準(zhǔn)備好后觸發(fā)單片機(jī)的INT0啟動自舉操作。另外,DSP的自舉方式有多種,且標(biāo)準(zhǔn)串行自舉模式比較靠后,所以必須在硬件上對DSP的INT2、INT3和BIO引腳進(jìn)行上拉保護(hù),從而確保DSP上電后,其片上Bootloader進(jìn)入標(biāo)準(zhǔn)串行自舉方式。圖2虛線框2給出了SPI通信模塊中DSP與單片機(jī)對應(yīng)引腳連接關(guān)系,本文采用4線主從方式實(shí)現(xiàn)SPI通信,DSP的BCKLX0為時鐘控制引腳,BFSX0為片選引腳,為了最大限度節(jié)省DSP硬件資源,自舉模塊和SPI通信模塊中的BDR0引腳進(jìn)行了復(fù)用。為使主從設(shè)備更好地進(jìn)行通信,SPI通信過程中設(shè)置了主從握手函數(shù),P16為握手中斷控制引腳。圖2虛線框3說明了外設(shè)擴(kuò)展模塊引腳連接關(guān)系,外設(shè)擴(kuò)展模塊介紹了AD、DA及參考電壓硬件設(shè)置,P17引腳為AD波形輸入端,實(shí)驗(yàn)時配置為模擬輸入,開漏輸出。P01引腳為DA的波形輸出端,P00引腳為參考電壓接入引腳,配置為模擬輸入,開漏輸出,AD采樣必須設(shè)置電壓基準(zhǔn),C8051F330的電壓基準(zhǔn)可以被配置為外部電壓基準(zhǔn)、內(nèi)部電壓基準(zhǔn)或電源電壓VDD,為了使硬件設(shè)計更加簡單,本文選用內(nèi)部電壓基準(zhǔn)。
3 軟件設(shè)計
DSP外設(shè)擴(kuò)展模塊軟件設(shè)計分為兩部分:代碼轉(zhuǎn)換程序設(shè)計和C8051F330單片機(jī)程序設(shè)計。代碼轉(zhuǎn)換程序是為了將用戶在DSP開發(fā)軟件CCS下編譯生成的.out文件(一種公共目標(biāo)文件格式,包含了許多冗余信息)去除冗余信息,變?yōu)槿坑杏玫腄SP自舉文件格式,具體過程參見文獻(xiàn)。下面詳細(xì)介紹單片機(jī)程序的具體內(nèi)容。
C8051F330單片機(jī)程序包括四部分:DSP與單片機(jī)之間的通信協(xié)議、兩次初始化程序、自舉程序及片上外設(shè)驅(qū)動程序。C8051F330單片機(jī)程序主流程圖如圖3所示,圖3中,單片機(jī)系統(tǒng)上電后,程序便開始運(yùn)行,首先要禁止看門狗,防止程序跑飛,因DSP啟動速度比C8051F330快,故自舉前,先要初始化單片機(jī)端口并復(fù)位DSP,等待DSP的XF引腳觸發(fā)P07中斷后啟動自舉操作。自舉完成后,就要利用C8051F330單片機(jī)的片上AD、DA對DSP進(jìn)行外設(shè)擴(kuò)展,DSP的外設(shè)擴(kuò)展是建立在SPI通信基礎(chǔ)上的,通信前,需要對單片機(jī)進(jìn)行第二次初始化,避免引腳沖突。通信過程中,單片機(jī)與DSP需要通過SPI_handshaking()函數(shù)進(jìn)行握手,握手成功后,單片機(jī)便可通過SPI通道讀取DSP發(fā)送的AD命令或DA命令進(jìn)行AD DA擴(kuò)展。
3.1 DSP與單片機(jī)之間通信協(xié)議
為了使DSP和單片機(jī)進(jìn)行良好的通信,本文設(shè)置了SPI通信協(xié)議,具體如圖4所示,下面對此協(xié)議的制定作簡要介紹。協(xié)議中一幀數(shù)據(jù)包括4個字節(jié):第一字節(jié)為起始標(biāo)志字節(jié),值為0xC5,對應(yīng)的二進(jìn)制數(shù)為11000011,起始標(biāo)志字節(jié)在數(shù)據(jù)傳輸中發(fā)揮著巨大作用,它標(biāo)志著傳輸數(shù)據(jù)是否有意義;第二字節(jié)為命令字節(jié),DSP在數(shù)據(jù)傳輸過程中處于兩種命令狀態(tài),如果第二字節(jié)的6—7位值為01,則DSP處于AD命令狀態(tài),6—7位為10則DSP處于DA命令狀態(tài);第三、四字節(jié)分別裝載的是10位AD、DA高、低8位數(shù)據(jù)。
3.2 兩次初始化程序設(shè)計
單片機(jī)需要進(jìn)行兩次初始化,第一次初始化是在自舉之前,包括端口初始化、時鐘初始化和中斷初始化,第二次初始化是在自舉之后,在第一次初始化的基礎(chǔ)上還需進(jìn)行SPI初始化、AD初始化、DA初始化,兩次初始化期間,時鐘只能初始化一次,否則單片機(jī)初始化不會成功。時鐘初始化時被配置為24.5 MHz。之所以要對單片機(jī)進(jìn)行兩次初始化是因?yàn)樽耘e和SPI通信過程中,DSP的McBSP0接口進(jìn)行了復(fù)用,而且這樣設(shè)計可以節(jié)省更多的硬件資源,降低設(shè)計成本。下面主要介紹下AD、DA和SPI初始化過程。AD初始化如下所示:
AMXOP =0x0F://P17引腳為AD輸入端
AMXON =0x11://單端工作方式
ADCOCF =0x00;//右對齊
ADCOCN =0x80;//使能ADC
DA初始化如下所示:IDAOCN=0xF2;//使能DA
SPI初始化如下所示:SPIOCN=0x05;//使能SPI
SPIOCKR=0x5;//SPIO時鐘速率為1.8432 MHz
3.3 自舉程序設(shè)計
標(biāo)準(zhǔn)串行自舉邏輯時序圖如圖5所示,圖5指出模擬標(biāo)準(zhǔn)串行自舉只需3個I/O引腳,但本文卻用5個I/O口,其中另設(shè)了XF和RS引腳。因?yàn)镈SP啟動速度與單片機(jī)不同步,因此需設(shè)置RS引腳讓單片機(jī)上電后對DSP進(jìn)行復(fù)位,設(shè)置XF引腳讓DSP觸發(fā)單片機(jī)的外部中斷INT0,啟動自舉模塊。圖5中的邏輯時序圖說明為保證DSP正常運(yùn)行,以下條件必須滿足:傳輸每個字節(jié)數(shù)據(jù)需至少保證40個DSP時鐘周期的延時時間,單片機(jī)時鐘(BCLKR0)不可超過DSP時鐘頻率的1/2。發(fā)送幀同步信號之前應(yīng)先發(fā)送2個時鐘信號,幀同步信號置高期間發(fā)送1.5個時鐘,幀同步信號置底后開始按位發(fā)送數(shù)據(jù),一字節(jié)數(shù)據(jù)發(fā)送完成后再發(fā)送兩個時鐘信號。
3.4 片上外設(shè)驅(qū)動程序設(shè)計
片上外設(shè)驅(qū)動程序包括SPI通信驅(qū)動程序、AD與DA驅(qū)動程序。SPI通信是DSP外設(shè)擴(kuò)展模塊的軟件基礎(chǔ),通信前,單片機(jī)先拉低DPS_INT0觸發(fā)DSP的外部中斷INT0,再讀取一個無意義的SPI數(shù)據(jù)和DSP進(jìn)行握手,握手成功后,主從設(shè)備便可通過SPI通道互相寫數(shù)據(jù)或讀取對方發(fā)送dat[]中的數(shù)據(jù)。SPI通信讀函數(shù)驅(qū)動程序如下所示,程序中SPIODAT為SPI0數(shù)據(jù)寄存器,C8051F330在SPI通信中通過讀SPIODAT來讀取接收緩沖器中的數(shù)據(jù)。
SPI通信讀函數(shù)驅(qū)動程序:
C8051F330內(nèi)部AD有6種轉(zhuǎn)換啟動方式,本文采用寫‘1’ 到ADCOCN的ADOBUSY位,向ADOBUSY寫‘1’方式提供了用軟件控制ADCO轉(zhuǎn)換的能力。ADOBUSY位在轉(zhuǎn)換期間被置‘1’,轉(zhuǎn)換結(jié)束后賦‘0’。單片機(jī)初始化完成,給C8051F330的P17端口輸入正弦波(由于實(shí)驗(yàn)設(shè)備仍需完
善,正弦波頻率限制在0~20 Hz,幅值限制在0~3.3 V)進(jìn)行AD采樣,本文采用查詢方式進(jìn)行AD采樣,使用AD中斷標(biāo)志(ADOINT)來不斷查詢AD轉(zhuǎn)換是否完成。當(dāng)ADOINT位為邏輯‘1’時,AD數(shù)據(jù)寄存器(ADCOH:ADCOL)中的轉(zhuǎn)換結(jié)果有效。采樣完后,單片機(jī)通過SPI通道將采樣值傳送給DSP,DSP通過SPI_READ0函數(shù)從SPI讀取采樣數(shù)據(jù)。C8051F330片內(nèi)DA為電流模式數(shù)/模轉(zhuǎn)換器(IDAC)。IDAC的最大輸出電流可以有3種不同的設(shè)置:0.5 mA、1mA和2 mA,此程序中設(shè)置為2 mA。DA轉(zhuǎn)換時,DSP通過SPI_WRITE()函數(shù)將需要進(jìn)行DA的數(shù)據(jù)寫給單片機(jī),最終單片機(jī)再將DSP發(fā)來的數(shù)據(jù)進(jìn)行DA處理,AD采樣驅(qū)動程序如下所示:
4 實(shí)驗(yàn)
為驗(yàn)證本文設(shè)計模塊的可行性,下面以TMS320VC5416目標(biāo)板為例,設(shè)計了如下兩個實(shí)驗(yàn):一、16位標(biāo)準(zhǔn)串行自舉實(shí)驗(yàn);二、片上AD與DA擴(kuò)展實(shí)驗(yàn)。
實(shí)驗(yàn)一:16位標(biāo)準(zhǔn)串行自舉實(shí)驗(yàn)
實(shí)驗(yàn)一是為了驗(yàn)證C8051F330單片機(jī)可否成功實(shí)現(xiàn)TMS320VC5416處理器的16位標(biāo)準(zhǔn)串行自舉。為了使實(shí)驗(yàn)結(jié)果便于觀察,本文用CCS編寫了液晶顯示程序,顯示內(nèi)容為“基于C8051F330的DSP自舉模塊液晶顯示自舉測試等”。由上文可知,須將編寫程序代碼在CCS軟件下編譯生成.out文件,再將.out文件去除冗余信息,變?yōu)槿坑杏玫腄SP程序代碼,移植到C8051F330單片機(jī)中才能使用,結(jié)合所編寫的自舉程序上電運(yùn)行后可得到如圖6所示結(jié)果,從圖6中可以觀察到DSP完全可以脫離仿真器,從C8051F330單片機(jī)讀取DSP用戶程序,以上結(jié)果說明自舉模塊設(shè)計合理可行。
實(shí)驗(yàn)二:AD與DA擴(kuò)展實(shí)驗(yàn)
實(shí)驗(yàn)二是為了驗(yàn)證在完全脫離DSP仿真器的情況下,利用C8051F330片上AD、DA對TMS320VC5416進(jìn)行片上外設(shè)擴(kuò)展的可行性。實(shí)驗(yàn)中由TMS320VC5416控制C8051F330片上的AD、DA采樣數(shù)據(jù)或形成模擬波形,為了使實(shí)驗(yàn)結(jié)果便于觀察,用示波器對AD采樣前的波行與DA重構(gòu)波形進(jìn)行雙通道跟蹤,實(shí)驗(yàn)時,通過DSP試驗(yàn)箱給單片機(jī)的P17口接入頻率為20 Hz、最大幅值為1.31 V的正弦波,如圖7中黃色波形所示。單片機(jī)的P01端口為DA輸出端,C8051F330的DA輸出為電流輸出,因?yàn)橐檬静ㄆ黠@示DA輸出波形,所以需在P01端口接入電阻,將電流輸出轉(zhuǎn)換為電壓輸出,DA輸出波形如圖7中藍(lán)色波形所示。觀察示波器波形,可看到DA重構(gòu)波形與AD采樣前的波形吻合。以上結(jié)果說明,該模塊設(shè)計的利用C8 051F330片上外設(shè)資源對TMS320VC5416處理器進(jìn)行AD與DA擴(kuò)展是合理可行的。
5 結(jié)束語
文中提出了一種帶自舉功能的DSP外設(shè)擴(kuò)展模塊,該模塊利用C8051F330的片內(nèi)FLASH存儲DSP用戶程序,并利用5個I/O引腳模擬的標(biāo)準(zhǔn)串行總線實(shí)現(xiàn)DSP自舉,從而以一種占用DSP硬件資源最少的方式解決了DSP掉電后不能保存用戶程序的問題;利用C8051F330的片上外設(shè)資源對DSP進(jìn)行10位AD、DA外設(shè)擴(kuò)展,同時C8051F330的SPI接口同標(biāo)準(zhǔn)串行自舉接口復(fù)用DSP的McBSP0接口,從而在實(shí)現(xiàn)DSP外設(shè)擴(kuò)展的同時,最大限度地節(jié)省了DSP的硬件資源。該模塊用一塊單片機(jī)一體實(shí)現(xiàn)DSP外設(shè)擴(kuò)展及自舉,具有擴(kuò)展器件少、集成度高、系統(tǒng)穩(wěn)定性好、成本低廉等優(yōu)點(diǎn)。另外,C8051F330的FLASH內(nèi)存為8K字節(jié),除去單片機(jī)程序,可存儲5K字節(jié)左右的DSP程序,因此該模塊可廣泛用于程序代碼不超過5K字節(jié)的DSP系統(tǒng)中。