利用MSP430實(shí)現(xiàn)Blackfin DSP的程序引導(dǎo)
Blackfin處理器是ADI公司與Intel公司于2003年4月聯(lián)合推出的一系列DSP產(chǎn)品,主要面向嵌入式音頻、視頻和通信等領(lǐng)域,除了具有強(qiáng)大的信號(hào)處理性能和理想的電源效率,還集成了32位的RISC精簡(jiǎn)指令集。ADSP-BF533是目前Blackfin系列數(shù)字信號(hào)處理器中性能最高的一款,具有600MHz的主頻,雙16位的MAC(乘加器)和兩個(gè)40位的ALU(算術(shù)邏輯單元),4個(gè)8位的視頻處理單元,8個(gè)算術(shù)寄存器,10個(gè)地址尋址單元。DSP集成了148K字節(jié)的片內(nèi)RAM,并具有豐富的外部接口,如SDRAM、通用并行數(shù)據(jù)口、SPI、PPI、同步和異步串口等。
MSP430F149是工業(yè)級(jí)閃存型16位RISC MCU,具有功耗極低、片上資源豐富等特點(diǎn),同樣非常適合掌上設(shè)備使用。
本系統(tǒng)為軟件無(wú)線電掌上設(shè)備平臺(tái),采用了BF533+MSP430F149的雙處理器模式:B F533主要完成寬帶擴(kuò)頻信號(hào)的快速捕獲跟蹤和解碼功能;MSP430完成的功能包括USB控制器接口、射頻控制和DSP引導(dǎo)、監(jiān)控等,如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)簡(jiǎn)圖
MSP430通過(guò)USB控制器同PC機(jī)建立通信,整個(gè)系統(tǒng)作為一個(gè)USB設(shè)備被PC機(jī)訪問(wèn)。天線接收射頻信號(hào)進(jìn)行直接下變頻,經(jīng)AD轉(zhuǎn)換后進(jìn)入BF533。DSP程序存放在MSP430F149片內(nèi)FLASH ROM中。
MSP430F149和BF533通過(guò)SPI總線連接,在解決DSP程序引導(dǎo)問(wèn)題的同時(shí),也實(shí)現(xiàn)了DSP的實(shí)時(shí)監(jiān)控。
Blackfin 應(yīng)用程序引導(dǎo)過(guò)程
開(kāi)發(fā)Blackfin 應(yīng)用程序的一般過(guò)程如圖2所示。
圖2 Blackfin 引導(dǎo)文件生成過(guò)程
DSP應(yīng)用程序編寫(xiě)和調(diào)試通常在ADI公司的集成開(kāi)發(fā)環(huán)境VisualDSP++下完成。在軟件設(shè)計(jì)階段,可使用硬件仿真器Summit ICE通過(guò)JTAG(邊界掃描測(cè)試接口)同目標(biāo)處理器連接進(jìn)行調(diào)試開(kāi)發(fā)。VisualDSP++會(huì)將用戶(hù)應(yīng)用程序代碼編譯生成DSP可執(zhí)行文件(.DXE),并通過(guò)JTAG口裝入目標(biāo)處理器的內(nèi)存。 在設(shè)計(jì)獨(dú)立的目標(biāo)系統(tǒng)時(shí),必須考慮用戶(hù)程序的引導(dǎo)方式和相應(yīng)的外部存儲(chǔ)器,通過(guò)VisualDSP++產(chǎn)生與存儲(chǔ)器類(lèi)型相應(yīng)的引導(dǎo)文件(.LDR),將引導(dǎo)文件燒錄到外部存儲(chǔ)器中。最后,通過(guò)某種引導(dǎo)模式將引導(dǎo)文件裝載到DSP內(nèi)存并執(zhí)行。
BF533內(nèi)部有一段固化的引導(dǎo)程序(Boot ROM),見(jiàn)圖3。硬件復(fù)位后進(jìn)入引導(dǎo)進(jìn)程,執(zhí)行存放在Boot ROM中的引導(dǎo)程序。首先,通過(guò)對(duì)兩個(gè)專(zhuān)用引導(dǎo)模式選擇引腳BMODE[1:0]的采樣,決定BF533將以何種方式裝載用戶(hù)應(yīng)用程序代碼/數(shù)據(jù)。然后,按照用戶(hù)選擇的格式引導(dǎo)應(yīng)用程序并執(zhí)行。
圖3 Blackfin應(yīng)用程序引導(dǎo)過(guò)程[!--empirenews.page--]
BF533共有4種程序引導(dǎo)模式,表1顯示了引腳BMODE[1:0]的值和引導(dǎo)模式的關(guān)系。
對(duì)任何一種模式,引導(dǎo)程序會(huì)根據(jù)模式引腳選擇的外部程序存儲(chǔ)器的類(lèi)型,先讀出一個(gè)10個(gè)字節(jié)的文件頭(Header)。文件頭由4個(gè)字節(jié)的目的地址、4個(gè)字節(jié)的傳輸數(shù)據(jù)數(shù)量(字節(jié)數(shù))和2個(gè)字節(jié)的控制標(biāo)志組成。如果用戶(hù)程序或數(shù)據(jù)需要放在DSP內(nèi)存的不同地址塊,可以采用分塊引導(dǎo)的方式來(lái)進(jìn)行數(shù)據(jù)加載,每個(gè)塊(Block)用不同的文件頭描述。一旦所有的塊裝載完畢,處理器將結(jié)束引導(dǎo)進(jìn)程,并從L1指令存儲(chǔ)器的起始地址(0xFFA00000)開(kāi)始執(zhí)行放在這里的用戶(hù)代碼。文件頭中控制標(biāo)志描述了塊的一些屬性。圖4是引導(dǎo)時(shí)的數(shù)據(jù)流和文件頭格式。
圖4 BF533的引導(dǎo)數(shù)據(jù)流和文件頭格式
SPI引導(dǎo)時(shí)序
SPI總線由三條信號(hào)線組成:串行時(shí)鐘(SCLK)、串行數(shù)據(jù)輸出(SDO)、串行數(shù)據(jù)輸入(SDI)。SPI總線可以實(shí)現(xiàn)多個(gè)SPI設(shè)備互相連接。提供SPI串行時(shí)鐘的SPI設(shè)備為SPI主機(jī)或主設(shè)備(Master),其他設(shè)備為SPI從機(jī)或從設(shè)備(Slave)。將各個(gè)設(shè)備的串行時(shí)鐘引腳接在一起,主設(shè)備的數(shù)據(jù)輸出接從設(shè)備的數(shù)據(jù)輸入MOSI(Master Out Slave In),從設(shè)備的數(shù)據(jù)輸入接主設(shè)備的數(shù)據(jù)輸出MISO(Master In Slave Out)。
由于MSP430和BF533的SPI口均可軟件配置為主或從設(shè)備,因此通過(guò)同樣的連接方法既可使BF533為主機(jī),又可使MSP430為主機(jī)。
程序引導(dǎo)時(shí),BF533是主機(jī),串行時(shí)鐘由BF533提供,監(jiān)控過(guò)程中MSP430是主機(jī),通過(guò)SPI口控制BF533,與引導(dǎo)時(shí)相比,硬件連接沒(méi)有改變,只是MSP430和BF533各提供一個(gè)通用IO引腳用作握手信號(hào),用來(lái)避免MSP430在DSP忙時(shí)中斷DSP。
在本系統(tǒng)中,BF533引導(dǎo)模式設(shè)為從16位串行SPI存儲(chǔ)器引導(dǎo)。BF533上電或硬件復(fù)位后,SPI接口默認(rèn)為主模式,并提供頻率為500KHz的串行時(shí)鐘。引導(dǎo)時(shí)序最初的幾個(gè)周期是:從第一個(gè)SPI時(shí)鐘周期開(kāi)始,BF533在MOSI引腳上產(chǎn)生讀SPI的串行EEPROM命令字節(jié),其值為0x03。這個(gè)值對(duì)于SPI串行EEPROM而言,是讀存儲(chǔ)器命令。存儲(chǔ)器應(yīng)從下一個(gè)時(shí)鐘節(jié)拍開(kāi)始將存儲(chǔ)器內(nèi)數(shù)據(jù)串行送到BF533的MISO引腳上。由圖4可知,首先送出的應(yīng)該是塊1的目的地址信息0xFFA00000。讀出這個(gè)值之后,DSP內(nèi)部會(huì)對(duì)該值進(jìn)行判斷,如果目的地址不是DSP內(nèi)存區(qū)域內(nèi)的有效地址,BF533將重復(fù)發(fā)送讀SPI EEPROM命令字節(jié)并判斷地址有效性這一過(guò)程。如果讀入的地址有效,將會(huì)啟動(dòng)讀存儲(chǔ)器時(shí)序,再發(fā)送一個(gè)讀SPI 串行EEPROM命令字節(jié):先讀入文件頭,再讀入引導(dǎo)內(nèi)容。
設(shè)計(jì)中應(yīng)特別考慮MSP430軟件以確保由MSP430F149的SPI接口產(chǎn)生的引導(dǎo)時(shí)序和從EEPROM引導(dǎo)時(shí)的時(shí)序相同。根據(jù)筆者開(kāi)發(fā)經(jīng)驗(yàn),BF53x系列正式版本具有相同的SPI引導(dǎo)時(shí)序,但測(cè)試版本芯片的SPI時(shí)序與正式版有所差異。
DSP實(shí)時(shí)監(jiān)控與程序在線升級(jí)
在DSP程序運(yùn)行的過(guò)程中,通常我們需要知道它的運(yùn)行狀況。因此需要建立一種機(jī)制用來(lái)實(shí)現(xiàn)對(duì)DSP內(nèi)存區(qū)域的實(shí)時(shí)讀寫(xiě)操作,即完成程序的實(shí)時(shí)監(jiān)控。
在BF533應(yīng)用程序設(shè)計(jì)中,設(shè)置BF533的SPI口為從模式。在引導(dǎo)完成之后,設(shè)置MSP430的SPI口為主模式,而引導(dǎo)進(jìn)去的BF533用戶(hù)應(yīng)用程序開(kāi)始執(zhí)行,從而在MSP430和BF533之間建立了主從的SPI通信。
此外,MSP430通過(guò)USB接口器件PDIUSBD12連接到PC機(jī)。監(jiān)控命令由PC機(jī)或鍵盤(pán)操作發(fā)起,MSP430響應(yīng)PC機(jī)通過(guò)USB總線下發(fā)的命令或鍵盤(pán)命令,再根據(jù)命令類(lèi)型進(jìn)行操作。監(jiān)控命令分為兩類(lèi):
(1)PC機(jī)或鍵盤(pán)對(duì)MSP430的控制命令。命令通過(guò)USB總線或鍵盤(pán)傳到MSP430,MSP430響應(yīng)命令并執(zhí)行相應(yīng)操作。此類(lèi)命令包括:升級(jí)DSP程序、下載數(shù)據(jù)到FLASH、外圍控制等。
(2)PC機(jī)或鍵盤(pán)對(duì)DSP的控制命令。這類(lèi)命令可由PC機(jī)通過(guò)USB總線或鍵盤(pán)操作下達(dá)到MSP430,也可由MSP430直接發(fā)起,命令接受方是DSP。此類(lèi)命令主要有兩個(gè):讀DSP內(nèi)存區(qū)域和寫(xiě)DSP內(nèi)存區(qū)域。命令由命令包和數(shù)據(jù)包組成,讀命令包主要包括命令代碼、目的地址、讀出長(zhǎng)度以及校驗(yàn)字。在發(fā)出讀命令包后,如果收到DSP正確的響應(yīng),就發(fā)出跟讀出長(zhǎng)度相應(yīng)的數(shù)據(jù)包,每發(fā)一個(gè)數(shù)據(jù)包就將收到DSP返回的一包數(shù)據(jù)。寫(xiě)命令包主要包括命令代碼、目的地址、寫(xiě)入長(zhǎng)度以及校驗(yàn)字。在發(fā)出寫(xiě)命令包后,如果收到DSP的正確響應(yīng),就將欲寫(xiě)的數(shù)據(jù)打包送出,如果寫(xiě)入成功,就會(huì)收到DSP的正確響應(yīng)。
MSP430具有60K字節(jié)的片上FLASH程序存儲(chǔ)器,除了自身程序占用的程序空間,還可空出約48K字節(jié)的空間。本系統(tǒng)中,這部分空閑空間用來(lái)存放待引導(dǎo)的DSP程序。MSP430的FLASH存儲(chǔ)器具有分段擦除和編程功能,最小擦除單位是512(0x200)字節(jié)。其FLASH ROM除了可以用專(zhuān)門(mén)的開(kāi)發(fā)工具進(jìn)行編程操作外,還可以自編程實(shí)現(xiàn)DSP程序的在線升級(jí)。
結(jié)語(yǔ)
通過(guò)MSP430F149直接對(duì)ADSP-BF533進(jìn)行程序引導(dǎo)和實(shí)時(shí)監(jiān)控,與通常使用串行EEPROM引導(dǎo)相比,避免了燒寫(xiě)EEPROM這一中間過(guò)程,減少了電路復(fù)雜度。在同樣的電路連接上既實(shí)現(xiàn)了引導(dǎo)功能,又實(shí)現(xiàn)了監(jiān)控功能。此外,通過(guò)MSP430靈活的軟件編程,還使系統(tǒng)具有引導(dǎo)時(shí)機(jī)可靈活掌握、DSP程序可在線升級(jí)等特點(diǎn)。