王怡林
(光電控制技術(shù)重點(diǎn)實(shí)驗(yàn)室,河南 洛陽 471009)
摘要:針對(duì)雙DSP共享Flash進(jìn)行程序加載引導(dǎo)的復(fù)雜問題,對(duì)基于TMS320C6414和ADSP2187的雙DSP程序加載引導(dǎo)方法進(jìn)行了研究與設(shè)計(jì)。其中TMS320C6414作為主處理器,ADSP2187作為協(xié)處理器,共享的Flash芯片連接在TMS320C6414的EMIFB接口上,TMS320C6414通過EMFIA接口與ADSP2187的IDMA接口連接。系統(tǒng)上電后,TMS320C6414首先從Flash芯片讀出主處理程序并完成自身加載和引導(dǎo),然后讀出協(xié)處理程序,發(fā)送給ADSP2187并協(xié)助其完成加載和引導(dǎo)。
關(guān)鍵詞:TMS320C6414;ADSP2187;共享Flash;加載;引導(dǎo)
中圖分類號(hào):TP368文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.16747720.2016.23.009
引用格式:王怡林. 雙DSP共享Flash程序加載引導(dǎo)設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2016,35(23):31-34.
0引言
在紅外目標(biāo)跟蹤領(lǐng)域,隨著算法復(fù)雜度的提升,運(yùn)算量增長速度非常驚人,這使傳統(tǒng)的單DSP處理系統(tǒng)難以負(fù)荷, 因而對(duì)復(fù)雜的信號(hào)處理算法進(jìn)行分塊并在硬件系統(tǒng)上采取多DSP 并行處理的方法勢(shì)在必行[1]。某信息處理平臺(tái)是某光電跟蹤裝置的核心,為滿足系統(tǒng)要求,該平臺(tái)以TMS320C6414和ADSP2187兩型DSP芯片為核心進(jìn)行設(shè)計(jì)?;隗w積、成本等限制,需兩個(gè)DSP共用一片F(xiàn)lash完成程序存儲(chǔ),并在上電時(shí)順利完成兩個(gè)DSP程序的加載和引導(dǎo)。本文針對(duì)這一要求進(jìn)行研究,設(shè)計(jì)了一種兩個(gè)DSP共享Flash的程序加載引導(dǎo)方法。
1系統(tǒng)方案設(shè)計(jì)
TMS320C6414是TI公司推出的一款32位定點(diǎn)數(shù)字處理器,采用超長指令字結(jié)構(gòu),一個(gè)周期可同時(shí)執(zhí)行8條指令,主頻最高達(dá)600 MHz[2],內(nèi)部包括64個(gè)用于配置的32位寄存器,還有6個(gè)計(jì)算單元(ALU),2個(gè)乘法器。接口方面具備2個(gè)外部存儲(chǔ)接口,3個(gè)多通道緩沖串行接口, 1個(gè)主機(jī)接口和通用I/O接口等,還具備EDMA功能。
ADSP2187是ADI公司的ADSP系列的定點(diǎn)數(shù)字信號(hào)處理器[3],內(nèi)含3個(gè)相互獨(dú)立的計(jì)算單元,即ALU、MAC和桶形移位器。除此之外,還有1個(gè)程序控制器(PC),1個(gè)可編程的定時(shí)器,2個(gè)數(shù)據(jù)地址產(chǎn)生器,以及32 K×24 bit的程序存儲(chǔ)空間和32 K×16 bit的數(shù)據(jù)存儲(chǔ)空間。對(duì)外接口方面包括1個(gè)可編程的Flash I/O,2個(gè)串口,1個(gè)16 bit的內(nèi)部DMA接口以及1 B DMA接口(BDMA)。
基于兩個(gè)處理器的特點(diǎn),本設(shè)計(jì)將Flash芯片連接在TMS320C6414上,程序的加載和引導(dǎo)由TMS320C6414主導(dǎo)完成。首先對(duì)TMS320C6414 的啟動(dòng)模式進(jìn)行配置。TMS320C6414 的啟動(dòng)模式由其上電時(shí)的EMIFB接口地址總線中的BEA[15:14](BOOTMODE[1:0])的連接電平?jīng)Q定, 在復(fù)位期間檢測(cè)這兩位的高低電平來決定TMS320C6414的引導(dǎo)模式。本設(shè)計(jì)將TMS320C6414的引導(dǎo)模式配置成使用默認(rèn)的8位ROM時(shí)序。TMS320C6414完成自身的程序引導(dǎo)后,通過IDMA接口向ADSP2187發(fā)送其程序并控制對(duì)方完成引導(dǎo)[4]。兩個(gè)處理器及存儲(chǔ)器連接關(guān)系如圖1所示。
2接口電路設(shè)計(jì)
要通過TMS320C6414來完成ADSP2187的程序加載和引導(dǎo),首先要使兩者之間建立通信連接,由于兩個(gè)處理器架構(gòu)以及對(duì)外接口的不同,需要對(duì)兩個(gè)處理器的通信接口進(jìn)行匹配性設(shè)計(jì),以滿足數(shù)據(jù)傳輸需求。
TMS320C6414的對(duì)外通信接口主要有兩個(gè)EMIF接口、兩個(gè)McBSP接口、一個(gè)HPI接口以及通用I/O等其他接口。ADSP2187主要的對(duì)外數(shù)據(jù)通信接口是IDMA接口,且可通過IDMA完成程序加載和引導(dǎo)。根據(jù)這兩個(gè)處理器接口的特點(diǎn),基于EMIFA接口和IDMA接口來進(jìn)行兩個(gè)處理器的數(shù)據(jù)通信接口電路設(shè)計(jì)。
EMIF接口全稱為外部存儲(chǔ)器接口(External Memory Interface),是C6000系列DSP主要的外部存儲(chǔ)器擴(kuò)展接口,最高數(shù)據(jù)吞吐率可達(dá)1 200 MB/s??梢耘c目前幾乎所有的存儲(chǔ)器類型直接連接,包括SBSRAM、SDRAM、SRAM、FIFO等以及其他可以共享內(nèi)部存儲(chǔ)空間的設(shè)備。
相比C6000系列其他DSP型號(hào),TMS320C6414的EMIFA接口具有以下特點(diǎn):
(1)總線寬度達(dá)64 bit。
?。?)接口時(shí)鐘可以基于其輸入時(shí)鐘在片內(nèi)產(chǎn)生,有3種方案:1/6×CPU時(shí)鐘、1/4×CPU時(shí)鐘和外部輸入時(shí)鐘。
?。?)具有一個(gè)可編程同步存儲(chǔ)器控制器。
?。?)具備PDT信號(hào),可支持外部設(shè)備之間的數(shù)據(jù)傳輸。
ADSP2187的IDMA接口實(shí)質(zhì)上是一個(gè)并行的I/O接口,當(dāng)ADSP2187作為從機(jī)時(shí),主機(jī)可通過該接口讀/寫ADSP2187內(nèi)部的存儲(chǔ)器和寄存器。IDMA接口具有復(fù)用的16 bit數(shù)據(jù)/地址總線,支持對(duì)其內(nèi)部16 bit數(shù)據(jù)存儲(chǔ)器和24 bit程序存儲(chǔ)器的訪問,對(duì)IDMA的訪問是完全異步的。
IDMA接口的控制信號(hào)包括選擇信號(hào)(IS#)、讀取信號(hào)(IRD#)、寫入信號(hào)(IWR#)和地址鎖存信號(hào)(IAL#)。當(dāng)選擇信號(hào)和地址鎖存信號(hào)有效時(shí),ADSP2187將總線上的數(shù)據(jù)當(dāng)做地址寫入IDMA控制寄存器,當(dāng)選擇信號(hào)和讀取信號(hào)有效時(shí),ADSP2187將控制寄存器內(nèi)地址所指存儲(chǔ)單元的內(nèi)容輸出到總線上,此過程構(gòu)成一個(gè)完整的IDMA接口讀取操作。寫入操作和讀取操作的地址傳輸方式一致,完成地址傳輸后,將選擇信號(hào)和寫入信號(hào)置為有效,待寫入數(shù)據(jù)發(fā)送到總線上,ADSP2187將總線上的數(shù)據(jù)寫入IDMA控制寄存器內(nèi)地址所指存儲(chǔ)單元。
本設(shè)計(jì)將EMIFA的CE2空間設(shè)成16 bit異步接口,數(shù)據(jù)總線ED15:0與IDMA總線IAD15:0對(duì)應(yīng)連接,EMIFA地址總線EA6和EA7求異或后再與片選信號(hào)CE2求或后作為IDMA接口的選擇信號(hào)(IS#),EA6求非后與EA7、CE2以及EMIFA的讀取信號(hào)ARW共4個(gè)信號(hào)一起求與作為IDMA接口的讀取信號(hào)(IRD#)輸入, EA6求非后與EA7、CE2以及EMIFA寫入信號(hào)AWE共4個(gè)信號(hào)一起求作為IDMA接口的寫入信號(hào)(IWR#)輸入, EA7和EA6求非、ARE非、AEW非、CE2非共5個(gè)信號(hào)求與后作為地址鎖存信號(hào)(IAL#)輸入。CPLD具有編程靈活等優(yōu)點(diǎn)[5],本設(shè)計(jì)中采用CPLD完成譯碼。ADSP2187的IDMA接口輸入信號(hào)運(yùn)算關(guān)系如下:
在TMS320C6414看來,ADSP2187控制寄存器的映射地址是0xA000 00A0,數(shù)據(jù)寄存器的映射地址是0xA000 0050。
值得說明的是,僅僅完成相關(guān)信號(hào)的譯碼和地址映射還不夠,還需要對(duì)EMIFA和IDMA進(jìn)行時(shí)序匹配。對(duì)于IDMA來說,有短周期和長周期兩種讀/寫方式選擇,后者需要主機(jī)檢測(cè)IACK信號(hào)的狀態(tài)來判斷IDMA是否準(zhǔn)備好。本設(shè)計(jì)選用短周期讀/寫操作,其寫入操作的時(shí)序圖如圖2所示。
本設(shè)計(jì)中,EMIFA時(shí)鐘設(shè)置為1/6×CPU時(shí)鐘,CPU時(shí)鐘為480 MHz,則EMIFA時(shí)鐘為120 MHz。EMIFA接口CE2空間的時(shí)序由寄存器CE2CTL控制,主要包括建立時(shí)間、處罰時(shí)間、保持時(shí)間三項(xiàng)參數(shù)設(shè)置,三項(xiàng)參數(shù)均以時(shí)鐘周期數(shù)來表示。
根據(jù)圖2中IDMA接口的時(shí)序要求,建立時(shí)間、觸發(fā)時(shí)間和保持時(shí)間的總和應(yīng)大于tIWP,換算后3項(xiàng)參數(shù)的和應(yīng)大于等于2,同時(shí)保持時(shí)間應(yīng)大于tIDH,將CE2CTL相應(yīng)參數(shù)設(shè)為1即可。
TMS320C6414向ADSP2187寫入數(shù)據(jù)的流程為:先向地址0xA000 00A0寫存儲(chǔ)地址,然后向0xA000 0050寫入待寫數(shù)據(jù)即可完成寫操作。讀操作的時(shí)序匹配方法和流程與寫操作相似,不再詳述。
3TMS320C6414加載引導(dǎo)方法
當(dāng)光電跟蹤裝置上電后,TMS320C6414 進(jìn)入復(fù)位狀態(tài),完成復(fù)位后, 其只能先將1 KB大小的程序代碼自動(dòng)加載到內(nèi)部RAM。通常情況下,光電跟蹤裝置的信息處理程序規(guī)模遠(yuǎn)遠(yuǎn)大于1 KB,為了完成整個(gè)程序的加載和引導(dǎo),必須編寫一段程序搬移代碼來將整個(gè)信息處理程序搬運(yùn)到內(nèi)部RAM,并且搬移低代碼的大小不能超過1 KB,按照TMS320C6414用戶手冊(cè)的要求,須用匯編語言完成,搬移程序在完成了信息處理程序的搬運(yùn)后,須將PC指針指向信息處理程序的入口,自此信息處理程序才能開始運(yùn)行,進(jìn)而完成目標(biāo)識(shí)別和跟蹤任務(wù)。完整的搬移程序的代碼及注釋如下:
…………;
//相關(guān)寄存器初始化工作結(jié)束
S_R .setb4
D_R .seta4
//將程序長度、RAM首地址、Flash首地址的存儲(chǔ)首地址拷貝進(jìn)寄存器A3
mvklcopy_table, A3
mvkhcopy_table, A3
//程序加載開始
copy_section_top:
ldw *A3++, B0//將程序長度加載到B0
ldw *A3++, A4//將運(yùn)行首地址加載A4
ldw *A3++, B4//將程序在Flash中的首地址加載到B4
nop 2
?。?b0]bcopy_done//判斷拷貝是否完成
nop5
shr B0,2,B1//將B0除以4后加載到B1
//開始進(jìn)行程序加載
copy_loop:
ldw*S_R++,B5
|| mvB1, A1//待拷貝長度加載進(jìn)A1
|| subB1, 1, B1//長度減1
//將程序從Flash讀入B5
?。跙1]ldw*S_R++,B5
||[B1]subB1, 1, B1
//將B5中的程序加載到RAM中
stw B5,*D_R++
||sub A1, 1, A1
[A1]stwB5,*D_R++
||[A1]subA1, 1, A1
?。跙1]bcopy_loop//判斷是否完成加載
nop5
//跳轉(zhuǎn)到開始處進(jìn)行下一段的加載
bcopy_section_top
nop5
//加載完成,對(duì)相應(yīng)的寄存器進(jìn)行設(shè)置
copy_done:
mvkl0x01840000,A4
mvkl0x0300,B4
mvkh0x01840000,A4
mvkh0x0300,B4
stw B4,*A4
nop 5
mvkl .S2 _c_int00, B0
mvkh .S2 _c_int00, B0
B.S2 B0
nop 5
//各段長度、RAM首地址、Flash首地址設(shè)置
copy_table:
; .text//代碼段長度
.word 0x00029220
.word 0x00000400
.word 0x64010400
; .cinit//變量段
.word 0x00002dcc
.word 0x000460e0
.word 0x64039620
.word 0x0//所有段結(jié)束標(biāo)志
4ADSP2187加載引導(dǎo)方法
ADSP2187支持從片外ROM和IDMA接口引導(dǎo)兩種方式,非常方便用戶設(shè)計(jì)系統(tǒng)的需要[6]。本文所述信息處理機(jī)采用從IDMA接口引導(dǎo)的方式實(shí)現(xiàn)預(yù)處理程序的加載引導(dǎo),ADSP2187上電后,從IDMA接口接收主處理器TMS320C6414傳輸?shù)某绦虿?zhí)行。
ADSP2187函數(shù)根據(jù)在存儲(chǔ)器中所處的位置分為函數(shù)段、數(shù)據(jù)段,函數(shù)段和數(shù)據(jù)段又根據(jù)所處的OVERLAY頁面再分為不同的段[7]。每段前3個(gè)數(shù)據(jù)標(biāo)示了該段的數(shù)據(jù)長度、該段在存儲(chǔ)區(qū)域的首地址和該段所處的頁面。該段數(shù)據(jù)處于函數(shù)區(qū)還是數(shù)據(jù)區(qū)由首地址的14位標(biāo)示。
TMS320C6414首先對(duì)ADSP2187進(jìn)行復(fù)位操作,然后從Flash中讀取該段數(shù)據(jù)的函數(shù)區(qū)字節(jié)數(shù)、函數(shù)區(qū)首地址和函數(shù)段所處的頁面,再從Flash中搬移1 B,通過IDMA口寫到ADSP2187的函數(shù)區(qū),寫完后再從該函數(shù)區(qū)地址讀出數(shù)據(jù)并與所寫的數(shù)據(jù)進(jìn)行比較,如果不相等則重新寫該地址和校對(duì),循環(huán)TryCycle次退出;如果相等,則進(jìn)行下一個(gè)字節(jié)的傳輸,直到該段數(shù)據(jù)全部傳輸?shù)紸DSP2187中。同樣地,TMS320C6414再把其余數(shù)據(jù)通過IDMA口傳輸?shù)紸DSP2187中,最后在ADSP2187的0地址寫數(shù)啟動(dòng)ADSP2187運(yùn)行,并以此判斷整個(gè)循環(huán)的結(jié)束。因?yàn)锳DSP2187函數(shù)區(qū)數(shù)據(jù)為24 bit,因此對(duì)函數(shù)區(qū)數(shù)據(jù)讀寫時(shí)需要同時(shí)讀取2 B數(shù)據(jù)。
對(duì)ADSP2187芯片IDMA接口的讀寫,通過對(duì)IDMA的控制寄存器和OVERLAY寄存器的操作來實(shí)現(xiàn)。寄存器各位定義如圖3、圖4所示。
對(duì)ADSP2187IDMA口的操作需要先對(duì)IDMA口控制寄存器和OVERLAY寄存器進(jìn)行配置,說明需要讀取的數(shù)據(jù)是程序區(qū)還是數(shù)據(jù)區(qū)、在哪個(gè)頁面中、地址為多少,然后對(duì)總線進(jìn)行讀寫操作,從而實(shí)現(xiàn)對(duì)ADSP2187內(nèi)部存儲(chǔ)區(qū)的讀寫。
得益于接口電路的作用,TMS320C6414可以通過對(duì)地址0x03200000的操作來實(shí)現(xiàn)對(duì)IDMA控制寄存器和OVERLAY寄存器的配置,當(dāng)寫到該地址的數(shù)據(jù)最高位為1時(shí),對(duì)OVERLAY寄存器進(jìn)行操作,為0時(shí)則對(duì)控制寄存器進(jìn)行操作;可以通過對(duì)地址0x03100000的讀寫實(shí)現(xiàn)對(duì)數(shù)據(jù)總線的讀寫。ADSP2187的程序加載引導(dǎo)邏輯流程如圖5所示。
5結(jié)論
本設(shè)計(jì)實(shí)現(xiàn)了TMS320C6414和ADSP2187兩個(gè)DSP芯片共享Flash的程序引導(dǎo)加載,該設(shè)計(jì)已成功應(yīng)用于某光電跟蹤裝置上,較好地完成了信息處理程序的加載和引導(dǎo),工作穩(wěn)定可靠。本文設(shè)計(jì)方法為將來其他多DSP共享Flash的信息處理機(jī)設(shè)計(jì)提供了參考,有著重要的實(shí)際意義。
參考文獻(xiàn)
[1] 李宏,李偉,李蒙,等.基于多DSP的紅外目標(biāo)跟蹤系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 電子技術(shù)應(yīng)用,2006,32(8):59-61.
?。?] 楊明,趙曉博,狄衛(wèi)國,等.基于TMS320C6414的大容量存儲(chǔ)器擴(kuò)展設(shè)計(jì)[J]. 自動(dòng)化技術(shù)與應(yīng)用,2008(6):103-105.
?。?] 王冬,李登科.基于雙DSP的信息處理機(jī)設(shè)計(jì)[J].國外電子測(cè)量技術(shù),2013,32(6):89-92.
[4] 趙熠,景德勝.一種基于雙處理器的信息處理平臺(tái)的設(shè)計(jì)[J].電子技術(shù)設(shè)計(jì)與應(yīng)用,2015(6):86-87.
?。?] 陳誠,陳曉平,王識(shí)君.基于DSP+CPLD的電動(dòng)舵機(jī)控制系統(tǒng)的設(shè)計(jì)[J]. 電子技術(shù)應(yīng)用,2015,41(4):84-86.
?。?] 陳勇,賈明永,董德新,等.ADSP2187L在某光電跟蹤裝置中的應(yīng)用[J].航空兵器,2004(4):22-24.
?。?] 梁楷.ADSP218X的IDMA接口設(shè)計(jì)[J].網(wǎng)絡(luò)財(cái)富,2010(21):183.