摘要: 當(dāng)需要更新DSP業(yè)務(wù)系統(tǒng)的應(yīng)用軟件時(shí),為了避免利用仿真器所帶來的不便和硬件損壞,采用了PCI總線技術(shù)來取代仿真器,完成系統(tǒng)應(yīng)用程序的更新;針對(duì)帶有外圍FLASH的DSP系統(tǒng),設(shè)計(jì)了一整套DSP外圍FLASH啟動(dòng)流程和應(yīng)用程序的PCI更新方法;通過實(shí)驗(yàn)證明,DSP業(yè)務(wù)系統(tǒng)可以通過上位機(jī)利用PCI總線完成DSP外圍FLASH的應(yīng)用程序的更新,同時(shí)在DSP上電啟動(dòng)時(shí),也可以根據(jù)上位機(jī)的命令,選擇貯存在FLASH中不同的應(yīng)用程序加載運(yùn)行。
關(guān)鍵詞: DSP業(yè)務(wù)系統(tǒng); PCI; FLASH自舉; 二級(jí)引導(dǎo)
中圖分類號(hào): TN710?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2013)06?0113?05
在DSP嵌入式業(yè)務(wù)系統(tǒng)設(shè)備中,一般采用片外FLASH自舉方式來實(shí)現(xiàn)DSP端應(yīng)用程序的加載和啟動(dòng)[1]。 當(dāng)DSP業(yè)務(wù)系統(tǒng)需要更新應(yīng)用程序時(shí),則可通過仿真器連接JTAG口來控制DSP,完成DSP外圍FLASH的應(yīng)用程序更新。然而,對(duì)于成型、交貨的設(shè)備產(chǎn)品,DSP業(yè)務(wù)系統(tǒng)板上一般不會(huì)留有JTAG口,或在機(jī)箱中很難插拔仿真器;另一方面,對(duì)已交貨產(chǎn)品經(jīng)常插拔仿真器,會(huì)對(duì)硬件設(shè)備有所損傷,使設(shè)備硬件處于非控狀態(tài)。
如果系統(tǒng)設(shè)計(jì)使用了PCI作為系統(tǒng)通信總線,則可以通過PCI來完成DSP業(yè)務(wù)系統(tǒng)應(yīng)用程序的更新和加載。本設(shè)計(jì)以TI公司TMS320C6416T(簡(jiǎn)稱C6416)芯片為例,來說明通過PCI總線來更新DSP系統(tǒng)應(yīng)用程序的過程;同時(shí)本文也設(shè)計(jì)了一種C6416的上電啟動(dòng)方式。
1 C6416的PCI特性
1.1 C6416 PCI傳輸機(jī)理
從圖1可看出,PCI和EMIF接口都是通過EDMA傳輸控制器來與L2存儲(chǔ)器/Cache聯(lián)系的。EDMA傳輸控制寄存器主要用來控制L2存儲(chǔ)器和設(shè)備外圍間的數(shù)據(jù)通信,包括傳輸請(qǐng)求隊(duì)列、地址產(chǎn)生器等[3];而通道控制器是用戶可編程部分,用戶可以設(shè)置相應(yīng)的寄存器,方便的設(shè)置數(shù)據(jù)傳輸方式(一維、二維)、事件觸發(fā)選擇、傳輸通道選擇等。
1.2 C6416 PCI操作原理
C6416的PCI操作可以設(shè)置為:
主模式寫:DSP主設(shè)備通過PCI接口寫數(shù)據(jù)到外部PCI從設(shè)備。
主模式讀:DSP主設(shè)備通過PCI接口從外部PCI從設(shè)備讀數(shù)據(jù)。
從模式寫:外部PCI主設(shè)備通過PCI接口寫數(shù)據(jù)到DSP從設(shè)備。
從模式讀:外部PCI主設(shè)備通過PCI接口從DSP從設(shè)備讀數(shù)據(jù)。
1.2.1 C6416 PCI寄存器
PCI接口有以下3種寄存器:PCI配置寄存器,PCI I/O寄存器和映射在DSP存儲(chǔ)空間的PCI控制狀態(tài)寄存器。前兩類寄存器只能被外部主機(jī)訪問,DSP從機(jī)是不能訪問的;而最后一類寄存器,DSP從機(jī)是可以訪問的,并利用其來完成PCI通信的控制和操作。
PCI配置寄存器包含標(biāo)準(zhǔn)的PCI配置信息,包括設(shè)備標(biāo)識(shí),供應(yīng)商標(biāo)識(shí),版本等信息,其可以在上電復(fù)位時(shí)自動(dòng)訪問E2PROM進(jìn)行加載或上電復(fù)位時(shí)可以通過默認(rèn)值初始化。
PCI I/O寄存器可以被主機(jī)用來對(duì)從機(jī)進(jìn)行操作和狀態(tài)監(jiān)控。主機(jī)通過base2存儲(chǔ)空間來訪問該類寄存器。該空間大小為16 B,有三個(gè)寄存器:主機(jī)狀態(tài)寄存器(HSR),主機(jī)?DSP控制寄存器(HDSR)和DSP頁(yè)寄存器(DSPP)。
1.2.2 C6416 PCI存儲(chǔ)器映射
PCI端口通過3種基址寄存器可以完全訪問DSP的存儲(chǔ)器映射。
1.2.3 PCI中斷
如果設(shè)置了PCIIEN對(duì)應(yīng)的中斷使能位,當(dāng)對(duì)應(yīng)的中斷源產(chǎn)生,DSP將進(jìn)入中斷狀態(tài)。所有的中斷事件對(duì)應(yīng)于一個(gè)CPU中斷:DSPINT。可以通過PCIIS中斷源寄存器來判斷產(chǎn)生中斷的中斷源。
1.2.4 PCI引導(dǎo)
PCI接口支持從PCI總線引導(dǎo)DSP啟動(dòng)。當(dāng)其他設(shè)備從復(fù)位狀態(tài)喚醒后,CPU被復(fù)位。在此期間,PCI主機(jī)可以盡可能的通過PCI初始化DSP內(nèi)存。當(dāng)PCI主機(jī)完成所需要的初始化工作,則向I/O寄存器HDCR.DSPINT位寫1,使DSP核退出復(fù)位。DSP則從地址0處開始運(yùn)行。值得注意是的是,當(dāng)C6416使用PCI引導(dǎo)方式時(shí),需要通過硬件設(shè)置來配置DSP上電邏輯選擇PCI引導(dǎo)模式。
2 利用PCI總線來更新系統(tǒng)軟件的設(shè)計(jì)
2.2 PCI上電直接加載應(yīng)用程序到DSP存儲(chǔ)空間
對(duì)于PCI總線上的從DSP設(shè)備,如果沒有片內(nèi)或片外FLASH,則PCI主機(jī)在上電時(shí)可以直接把從DSP設(shè)備的應(yīng)用程序數(shù)據(jù)寫到DSP的片內(nèi)RAM或片外RAM,然后指定DSP PC指針運(yùn)行的起始地址。而從DSP設(shè)備應(yīng)用程序的數(shù)據(jù)應(yīng)當(dāng)存放在PCI主機(jī)的系統(tǒng)存儲(chǔ)設(shè)備中(如片外FLASH,電子盤等)。
首先通過調(diào)試編譯DSP的應(yīng)用程序,完成所有功能需求,生成C6416可執(zhí)行的.out文件;然后利用上述工具,生成.out文件所對(duì)應(yīng)的.h文件,該文件中數(shù)組的內(nèi)容,則是應(yīng)用程序的二進(jìn)制代碼數(shù)據(jù);接著通過硬件管腳電平控制,來使DSP處于PCI引導(dǎo)方式,并利用DSP PCI從寫模式,在系統(tǒng)上電后,主機(jī)把.h中的數(shù)據(jù)傳輸?shù)街付ǖ腃6416程序存儲(chǔ)空間;最后向I/O寄存器HDCR.DSPINT位寫1,使DSP核退出復(fù)位,C6416則從0地址開始運(yùn)行。
2.3 利用PCI總線完成從DSP設(shè)備外圍FLASH應(yīng)用程序的更新
更多的嵌入式設(shè)備中,從DSP設(shè)備都接有外圍的FLASH等ROM設(shè)備,用來存放DSP運(yùn)行的應(yīng)用程序。這樣一方面可以減少PCI主機(jī)存儲(chǔ)空間的壓力,同時(shí)可以提高從機(jī)的啟動(dòng)速度。
2.3.1 C6416的FLASH啟動(dòng)方式
2.3.2 C6416從機(jī)的啟動(dòng)模式設(shè)計(jì)
第一步:當(dāng)C6416上電后,首先自動(dòng)完成A搬移操作,“Bootload程序”將被搬移到C6416片內(nèi)RAM的0起始地址,后開始運(yùn)行該段代碼,該段代碼是利用匯編語(yǔ)言編寫,其在C語(yǔ)言庫(kù)初始化前被執(zhí)行;
第二步:“Bootload程序”的運(yùn)行將會(huì)配置C6416的EMIF寄存器,使能片外SDRAM,同時(shí)使B搬移操作完成:“程序選擇搬移代碼”將被搬移到C6416片內(nèi)RAM,并從程序入口地址開始執(zhí)行該代碼段;
第三步:“程序選擇搬移代碼”的執(zhí)行將對(duì)業(yè)務(wù)代碼進(jìn)行選擇,查看需要加載“業(yè)務(wù)代碼1”還是“業(yè)務(wù)代碼2”,把選擇的業(yè)務(wù)代碼搬移到片外SDRAM中,完成C搬移操作或D搬移操作,然后從程序入口地址開運(yùn)行,從而被選中的業(yè)務(wù)代碼將被執(zhí)行。
2.3.3 利用PCI總線更新FLASH中的業(yè)務(wù)代碼
3 結(jié) 語(yǔ)
本文介紹的利用PCI總線更新DSP業(yè)務(wù)系統(tǒng)應(yīng)用程序的設(shè)計(jì),完全擺脫了JTAG口的制約,利用具有高速數(shù)據(jù)通信特性的PCI總線,針對(duì)包含外圍FLASH和不包含外圍FLASH的DSP業(yè)務(wù)系統(tǒng),實(shí)現(xiàn)了應(yīng)用程序的更新。
特別對(duì)于含有外圍FLASH的DSP業(yè)務(wù)系統(tǒng),本文設(shè)計(jì)的DSP啟動(dòng)方式和FLASH應(yīng)用程序更新流程,能高效地完成應(yīng)用程序的更新,同時(shí)實(shí)現(xiàn)了DSP啟動(dòng)時(shí)應(yīng)用程序加載的選擇。
參考文獻(xiàn)
[1] 蒲中奇,張偉,施克仁,等.TI TMS320C6000 系列DSP的BOOTLOAD程序設(shè)計(jì)[J].工業(yè)儀表與自動(dòng)化裝置,2004(6):52?54.
[2] 卞紅雨.TMS320C6000系列DSP的CPU與外設(shè)[M].北京:清華大學(xué)出版社,2007.
[3] Texas Instruments. TMS320C6000 DSP peripheral component interconnect (PCI) reference guide [M]. USA: Texas Instruments, 2007.
[4] 于鳳芹.TMS320C6000 DSP結(jié)構(gòu)原理與硬件設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2008.
[5] 季昱.DSP嵌入式應(yīng)用系統(tǒng)開發(fā)典型實(shí)例[M].2版.北京:中國(guó)電力出版社,2007.
[6] 田黎育.TMS320C6000系列DSP編程工具與指南[M].北京:清華大學(xué)出版社,2006.
[7] DANIEL Kimberly, GANGADHAR Shivashankar, MOCK George, et al. Creating a second?level bootloader for FLASH bootloading on TMS320C6000 platform with code composer studio [R]. USA: Texas Instruments, 2006.
[8] 翟麗杰.TI TMS320C6000 系列DSP的自啟動(dòng)設(shè)計(jì)[J].河南科技,2012,30(7):913?916.
[9] 劉濤,倪江生,王丹丹.基于DSP的FLASH自啟動(dòng)設(shè)計(jì)[J].儀表技術(shù),2009(9):44?48.
[10] 張謙,李世杰,李紅波.TMS320C6000系列DSP可選擇引導(dǎo)加載方式的設(shè)計(jì)與實(shí)現(xiàn)[J].電子測(cè)量技術(shù),2009,32(7):20?24.