雙核DSP片TMS320VC5421的并行引導方案
關(guān)鍵詞:TMS320VC5421;Bootloader;并行引導;Boot表;FLASH;CPLD
1 引言
TMS320VC5421?1、2?(以下簡(jiǎn)稱(chēng)VC5421)是TI公司推出的一款雙核定點(diǎn)DSP芯片,它擁有兩個(gè)DSP子系統,每個(gè)子系統都有一個(gè)DSP核,并且均有獨立的數據和程序存儲空間,可以進(jìn)行兩核之間的通信,并且兩個(gè)子系統共享一套片外總線(xiàn)。此外,每個(gè)子系統各自擁有2k 16bit字的片內ROM,并存儲有Bootloader程序。當DSP芯片上電或復位時(shí),兩個(gè)DSP核可分別啟動(dòng)自身獨立的Bootloader程序,以實(shí)現用戶(hù)程序的上電自舉。
雙核DSP自啟動(dòng)和單核DSP自啟動(dòng)的實(shí)現方法有較大的差別,這一點(diǎn)在DSP系統設計中需要特別注意。本文對雙核DSP芯片VC5421的引導模式進(jìn)行了深入的分析和研究,給出了使用16位并行引導模式進(jìn)行雙核DSP引導的實(shí)現方案。
2 TMS320VC5421的Boot模式
VC5421可提供16位并行引導、8位并行引導和串行EEPROM引導等三種Boot模式來(lái)實(shí)現用戶(hù)程序的上電自舉。
其中16位并行引導模式是通過(guò)片外存儲器接口(EMIF)以DMA方式將代碼從16-bit字寬的片外數據存儲器搬移到片內程序存儲空間;
8位并行引導模式則是通過(guò)片外存儲器接口(EMIF)以DMA方式將代碼從8-bit字寬的片外數據存儲器搬移到片內的程序存儲空間;
而串行EEPROM引導模式主要是通過(guò)多通道緩沖串口2(McBSP 2)從主設備中搬移代碼并實(shí)現上電自舉。
和54系列中其它芯片不同的是,VC5421片內ROM中的Bootloader程序并不支持HPI、并行I/O和標準串口模式的自啟動(dòng)方式。在其所支持的三種boot模式中,16位并行引導模式是最常用的。本文對這種模式進(jìn)行了深入分析,給出了使用該模式進(jìn)行雙核DSP程序引導的方案,并通過(guò)實(shí)驗驗證了該方案的正確性。
2.1 并行引導模式的選擇
VC5421的兩個(gè)DSP核在DSP芯片上電或復位時(shí),到底以哪種模式實(shí)現上電自舉,主要由兩個(gè)核的公共引腳XIO和各自的GPIO0/ROMEN、GPIO1引腳決定。當XIO為0(低電平)時(shí),將不從ROM引導,也就是說(shuō),將不使用VC5421片內ROM中的Bootloader程序實(shí)現上電引導,而是用HPI模式實(shí)現上電自舉;當XIO為1(高電平),GPIO0/ROMEN為0時(shí),將使用片外存儲器中用戶(hù)自己編寫(xiě)的Bootloader程序實(shí)現上電自舉;當XIO為1? GPIO/ROMEN為1? GPIO1為0或1時(shí),將分別使用并行或者串行引導模式實(shí)現上電自舉。因此,在實(shí)施相應的上電自舉前,必須將引腳狀態(tài)設置正確,以保證Bootloader程序按預定的模式執行。Bootloader模式的選擇流程見(jiàn)圖1。
當Bootloader程序檢測到并行引導模式時(shí),程序將以DMA方式從片外數據存儲區的0000h單元取出模式選擇字(BSW)來(lái)進(jìn)一步?jīng)Q定是8位還是16位的并行引導模式。10AAh意味著(zhù)選擇了16位并行引導模式,而如果選擇8位并行引導模式,取出的兩個(gè)字節將是08h和AAh。之后,程序將按照Boot表進(jìn)行加載。圖2是并行引導模式的選擇流程。
2.2 16位并行引導模式的Boot表
Bootloader程序要搬移的代碼必須組織成一定的格式,這就是Boot表。16位并行引導模式的Boot表如表1所列。
表1 16位并行導模式Boot表
DMA外部數據存儲地址 | 數 據 內 容 | 含 義 |
0000h | 10AAh | 16位并行引導標志 |
0001h | 7FFFh | SWWSR |
0002h | F000h | BSCR |
0003h | 0000h | 程序入門(mén)XPC |
0004h | 5000h | 程序入口地址 |
0005h | 002Ch | 代碼長(cháng)度 |
0006h | 0000h | 目的XPC |
0007h | 5000h | 目的地址 |
0008h | 7761h | 程序代碼 |
…… | …… | 程序代碼 |
…… | …… | 程序代碼 |
0034h | 0000h | Boot表結束 |
此外,需要注意的是,由于在多數程序中都有跳轉指令或循環(huán)指令,所以,Boot表中的程序入口地址必須和程序的cmd文件中分配的地址保持一致,也就是說(shuō),當在CCS中進(jìn)行調試時(shí),如果程序Load到5000h,Boot表中的程序入口地址就應該是5000h。
2.3 Boot表的生成
Boot表可由hex500格式轉換工具生成,也可以自己編寫(xiě)一個(gè)文件格式轉換程序來(lái)把.out文件轉換成所需的文件格式。本設計通過(guò)編寫(xiě)一個(gè)C++程序來(lái)將.out文件轉換成.hex文件,然后再在文件的開(kāi)始處增加相應的標志位和寄存器設置字,從而形成完整的Boot表。
3 VC5421片外總線(xiàn)沖突的解決方案
由于VC5421是雙核DSP,每個(gè)核有各自的存儲空間和Bootloader程序,但兩核共享一套片外總線(xiàn)和一個(gè)XIO引腳。這樣,當兩核的復位引腳A_RS和B_RS同時(shí)收到復位低電平信號時(shí),將同時(shí)申請片外總線(xiàn)的控制權。這就造成了申請片外總線(xiàn)的沖突。而且Bootloader程序總是檢查該核有沒(méi)有片外總線(xiàn)的控制權,如果沒(méi)有,將循環(huán)檢查直到取得片外總線(xiàn)的控制權。為了避免這種情況的發(fā)生,應該以合理的順序給兩個(gè)核上電。
由于VC5421中A核帶有用來(lái)控制時(shí)鐘頻率的鎖相環(huán)電路,所以應該先對A核進(jìn)行復位,再啟動(dòng)A核,然后利用A核的用戶(hù)程序來(lái)控制B核的復位,以實(shí)現兩個(gè)核的啟動(dòng)。
根據系統需要,本設計使用Altera公司的CPLD芯片來(lái)產(chǎn)生各種控制信號。其電路連接示意圖如圖3所示。A核的復位信號A_RS由CPLD芯片直接給出,并在系統上電或復位的同時(shí)對A核進(jìn)行復位。而B核的復位信號B_RS則通過(guò)CPLD映射到DSP的I/O空間0000h地址單元的第6位:B核復位控制位(在系統復位后值為0)如圖4所示。在A核啟動(dòng)后,通過(guò)用戶(hù)程序寫(xiě)B_RS位可為B核提供復位信號。
4 VC5421的并行引導自啟動(dòng)操作
4.1 用戶(hù)程序的搬移
兩個(gè)DSP核要完成各自的功能,執行的用戶(hù)程序是不盡相同的,而且A核的用戶(hù)程序還要控制B核的復位,因此兩個(gè)DSP核的Boot表內容是不同的。由DMA方式內部存儲器圖可知,程序空間的第0頁(yè)和第1頁(yè)屬于A核,第2頁(yè)和第3頁(yè)屬于B核。因此,需要注意的是,當Bootloader程序搬移用戶(hù)程序時(shí),A核的用戶(hù)程序要被搬移到內部程序空間的第0頁(yè)上,而B核的用戶(hù)程序則要被搬移到第2頁(yè)上。于是B核Boot表中的程序入口XPC和目的XPC應被設置成0002h。
4.2 Boot表的放置
本系統用4Mbit(256k16)FLASH器件SST39VF400A作為片外數據存儲器。頁(yè)選信號由DSP通過(guò)CPLD給出,并且映射到DSP中I/O空間的0000h地址單元的低5位(系統復位后5位均為0,即第0頁(yè))。如圖4所示。另外,此地址單元的第5位(CFG位)是控制FLASH映射的配置位。當CFG為0時(shí),FLASH被映射到DMA片外數據空間的0000h,此時(shí),Bootloader程序可以以DMA方式從FLASH中搬移數據并進(jìn)行自啟動(dòng);當CFG為1時(shí),FLASH被映射到CPU片外數據空間的8000h,在這種情況下,可以通過(guò)程序向FLASH中燒寫(xiě)數據。因此,這一位在系統上電或復位后將被設置成0,以使A核能夠順利啟動(dòng)。
由于兩個(gè)DSP核的Boot表內容不同,故應視Boot表的大小,將兩個(gè)Boot表放到FLASH的不同頁(yè)上,以便對兩個(gè)核分別實(shí)行引導。本設計將A核的Boot表放到第0頁(yè),將B核的Boot表放到第1頁(yè)。
圖5
如圖5所示,在GPIO控制寄存器(地址3Ch)中,XIO_GRANT位為1代表相應的DSP核取得了片外總線(xiàn)的控制權;而在還沒(méi)有取得控制權(XIO_GRANT位為0)但在申請片外總線(xiàn)的控制權時(shí),相應的XIO_REQ位應置為1;CORE_SEL位用于表示程序在哪個(gè)核上運行,當在CPU A上運行時(shí),讀A核的GPIO控制寄存器的CORE_SEL位將返回到“0”,而當同一個(gè)程序在CPU B上運行時(shí),讀B核的GPIO控制寄存器的CORE_SEL位將返回到“1”。有關(guān)GPIO控制寄存器的其它相關(guān)位,設計時(shí)可查閱有關(guān)的參考文獻?1?。
4.4 FLASH的燒寫(xiě)
筆者根據SST39VF400A的資料編寫(xiě)了一個(gè)DSP程序,該程序可同時(shí)將A核的Boot表燒寫(xiě)到FLASH的第0頁(yè),而將B核的Boot表燒寫(xiě)到第1頁(yè)。
在系統上電或復位后,A核首先運行它的Boot-loader程序(此時(shí)FLASH的第0頁(yè)映射到DMA片外數據空間的0000h地址單元),A核啟動(dòng)后執行用戶(hù)程序。用戶(hù)程序首先將頁(yè)選設置成第1頁(yè),這樣,FLASH的第一頁(yè)將被映射到DMA片外數據空間的0000h;然后,A核釋放片外總線(xiàn)控制權,并給B核發(fā)出復位信號,此時(shí)由于只有B核復位,且A核已釋放片外總線(xiàn)的控制權,因此,B核將申請到片外總線(xiàn)控制權,同時(shí)執行Bootloader程序的啟動(dòng)以完成整個(gè)DSP引導。完整的啟動(dòng)過(guò)程流程圖如圖6所示,下面是A核的啟動(dòng)測試程序代碼:
mmregs
titlc ″testLEDA″
global begin
text
?.............
begin? stm #0x000,0x0061 ;設置頁(yè)選信號
portw ox0061,00h
call wait
andm #0xffcf,3ch ;釋放片外總線(xiàn)
call wait ; 控制權
stm #0x0041?0x0061 ;給B核復位信號
portw 0x0061,00h
call wait
stm #0x0001,0x0061
portw 0x0061,00h
flash: rsbs 1,xf ;發(fā)光二極管亮
call wait
ssbx 1,xf ;發(fā)光二極管滅
call wait
b flash
;----Subroutine to wait for some time----
wait: stm #80,ar6
loop0: stm #30000,ar7-
loop1: nop
banz loop1,*ar7-
banz loop0,*ar6-
ret
5 實(shí)驗驗證
本設計中,在DSP的A_XF和B_XF腳上連接兩個(gè)發(fā)光二極管,同時(shí)使被加載的用戶(hù)程序通過(guò)循環(huán)來(lái)設置/清除這兩個(gè)引腳以使兩個(gè)發(fā)光二極管以不同的頻率閃爍,以此來(lái)驗證用戶(hù)程序是否成功加載。系統上電后,兩個(gè)發(fā)光二極管先后以不同的頻率開(kāi)始閃爍,說(shuō)明DSP的A核、B核均成功地實(shí)現了上電自舉。
評論