基于PCI 總線的DSP 系統(tǒng)應(yīng)用程序的更新
Base1:8 MB的非預(yù)取址映射。其訪問(wèn)起始地址固定,為0×01800000,該存儲(chǔ)空間映射為DSP 片內(nèi)寄存器。如圖5所示。
Base2:PCI 16 B I/O 寄存器,上已介紹。
上電后PCI 主機(jī)將遍歷整個(gè)PCI 總線,建立一棵PCI總線樹(shù),然后對(duì)每個(gè)PCI總線樹(shù)上的結(jié)點(diǎn)(設(shè)備)進(jìn)行上述3 個(gè)基地址的分配。利用這3 個(gè)基地址,PCI主機(jī)即可以訪問(wèn)PCI總線上的從設(shè)備的全部存儲(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.可以通過(guò)PCIIS中斷源寄存器來(lái)判斷產(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ī)可以盡可能的通過(guò)PCI初始化DSP內(nèi)存。當(dāng)PCI主機(jī)完成所需要的初始化工作,則向I/O寄存器HDCR.DSPINT位寫(xiě)1,使DSP 核退出復(fù)位。DSP 則從地址0 處開(kāi)始運(yùn)行。值得注意是的是,當(dāng)C6416 使用PCI 引導(dǎo)方式時(shí),需要通過(guò)硬件設(shè)置來(lái)配置DSP 上電邏輯選擇PCI引導(dǎo)模式。
2 利用PCI 總線來(lái)更新系統(tǒng)軟件的設(shè)計(jì)
2.1 應(yīng)用程序的數(shù)據(jù)格式生成
通過(guò)DSP的開(kāi)發(fā)平臺(tái)CCS,可以把編寫(xiě)的應(yīng)用程序編譯、鏈接成。out文件。該文件包含了應(yīng)用程序的各個(gè)段的數(shù)據(jù),如text段,cinit段,const段,switch段等。這些段是CCS的編譯器把所寫(xiě)的C語(yǔ)言編譯成匯編語(yǔ)言,然后生成COFF目標(biāo)文件,再鏈接實(shí)時(shí)動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)生成DSP 核可執(zhí)行的COFF 文件,提供給C6416 使用。
但是該文件不可直接被FLASH 識(shí)別,同時(shí)也不可被C語(yǔ)言所識(shí)別。
CCS 提供了一個(gè)實(shí)用工具h(yuǎn)ex6x.exe 來(lái)完成。out 文件的轉(zhuǎn)換[7-8].該工具可以把。out文件的COFF數(shù)據(jù)格式轉(zhuǎn)換成16 進(jìn)制的ASCII 碼數(shù)據(jù)格式文件。hex.然后利用TI 公司提供的hex2aray.exe 工具,把生成的。hex 文件轉(zhuǎn)換成C語(yǔ)言能夠識(shí)別的數(shù)據(jù)數(shù)組格式文件。h.
hex6x.exe 工具的使用可以直接在Windows 的cmd中調(diào)用命令。如下:
hex6x -a -o firm.hex filename.out
也可以創(chuàng)建一個(gè)命令文件來(lái)存放命令行操作和輸入、輸出文件命,以被hex6x.exe所調(diào)用。
filename.out.
-a
-o firm.hex
生成的。hex 文件都是以ASCII 格式所保存。利用hex2aray.exe工具則可以完成ASCII碼到16進(jìn)制數(shù)據(jù)的轉(zhuǎn)換。利用該工具生成的。h文件把所有數(shù)據(jù)段的數(shù)據(jù)順次存放在一個(gè)數(shù)組中,這樣則可以被C語(yǔ)言所訪問(wèn)。
本設(shè)計(jì)中在CCS生成。out的文件夾中,加入了上述兩個(gè)工具,然后創(chuàng)建了一個(gè)命令文件c6416_test.cmd,來(lái)輸入hex6x.exe 所需要的命令行;創(chuàng)建了一個(gè)批處理文件c6416_test.bat,來(lái)綜合調(diào)用兩個(gè)工具,代碼如下:
hex6x c6416_test.cmd
hex2aray -i c6416_test.hex -o c6416_test.h
2.2 PCI上電直接加載應(yīng)用程序到DSP存儲(chǔ)空間
對(duì)于PCI總線上的從DSP設(shè)備,如果沒(méi)有片內(nèi)或片外FLASH,則PCI主機(jī)在上電時(shí)可以直接把從DSP設(shè)備的應(yīng)用程序數(shù)據(jù)寫(xiě)到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,電子盤等)。
首先通過(guò)調(diào)試編譯DSP的應(yīng)用程序,完成所有功能需求,生成C6416 可執(zhí)行的。out 文件;然后利用上述工具,生成。out 文件所對(duì)應(yīng)的。h 文件,該文件中數(shù)組的內(nèi)容,則是應(yīng)用程序的二進(jìn)制代碼數(shù)據(jù);接著通過(guò)硬件管腳電平控制,來(lái)使DSP 處于PCI 引導(dǎo)方式,并利用DSPPCI從寫(xiě)模式,在系統(tǒng)上電后,主機(jī)把。h中的數(shù)據(jù)傳輸?shù)街付ǖ腃6416程序存儲(chǔ)空間;最后向I/O 寄存器HDCR.
DSPINT位寫(xiě)1,使DSP核退出復(fù)位,C6416則從0地址開(kāi)始運(yùn)行。
上述流程中有一個(gè)關(guān)鍵問(wèn)題,就是在進(jìn)行PCI數(shù)據(jù)傳輸時(shí),存放數(shù)據(jù)的地址如何確定。這些地址表示的是應(yīng)用程序各個(gè)數(shù)據(jù)段、代碼段在C6416中運(yùn)行時(shí)所存放的位置,其由應(yīng)用程序中的。cmd 文件指明。在應(yīng)用程序。out生成后,可以查看。map文件來(lái)清楚的獲知各個(gè)段的存放地址??梢杂谩ap 文件來(lái)明確主機(jī)PCI數(shù)據(jù)發(fā)送的具體地址,手動(dòng)輸入各個(gè)段存放的起始地址。然而,此方法主要用于程序調(diào)試和測(cè)試,當(dāng)應(yīng)用程序發(fā)生變化,主機(jī)的PCI傳輸程序也需要變化;此外如果使用了DSP/BIOS,.out文件會(huì)包含很多的代碼段、數(shù)據(jù)段,手動(dòng)輸入將是一個(gè)很繁瑣的工作。hex6x.exe工具有一個(gè)命令boot,利用該命令生成的數(shù)據(jù)包含了系統(tǒng)程序的入口地址c_int00 和各個(gè)段的起始地址、段的長(zhǎng)度。利用這些信息,可以很方便的使用程序把各個(gè)段的數(shù)據(jù)寫(xiě)入到指定的C6416存儲(chǔ)空間中,避免了繁瑣的手動(dòng)輸入操作。由于當(dāng)DSP退出復(fù)位后,PC指針是從0地址開(kāi)始運(yùn)行,如果數(shù)據(jù)段和代碼段是存放在片外RAM時(shí),則需要在0 地址存放一段指針跳轉(zhuǎn)語(yǔ)句,使PC 指針跳轉(zhuǎn)到片外RAM,繼續(xù)運(yùn)行。
2.3 利用PCI總線完成從DSP設(shè)備外圍FLASH應(yīng)用程序的更新
更多的嵌入式設(shè)備中,從DSP 設(shè)備都接有外圍的FLASH 等ROM 設(shè)備,用來(lái)存放DSP 運(yùn)行的應(yīng)用程序。
這樣一方面可以減少PCI主機(jī)存儲(chǔ)空間的壓力,同時(shí)可以提高從機(jī)的啟動(dòng)速度。
2.3.1 C6416的FLASH啟動(dòng)方式
C6416 的啟動(dòng)方式是由硬件邏輯來(lái)決定,通過(guò)EMIFB 地址總線上的BEA[19:18]兩個(gè)管腳的上拉、下拉來(lái)決定引導(dǎo)配置。[0,1]:主機(jī)引導(dǎo)(HPI 或PCI);[1,0]:EMIFB 8bit 寬FLASH引導(dǎo)。
當(dāng)選擇FLASH 啟動(dòng)時(shí),C6416的引導(dǎo)邏輯決定了,從FLASH 的0 地址開(kāi)始,將會(huì)拷貝1 KB 的數(shù)據(jù)到C6416 片內(nèi)RAM 的0~1 KB 位置,然后C6416 的PC 指針將從片內(nèi)RAM的0地址開(kāi)始運(yùn)行。那么對(duì)于所要啟動(dòng)的應(yīng)用程序的大小一般都是大于1 KB,因此可以利用二級(jí)引導(dǎo)來(lái)完成C6416 的程序加載。所謂二級(jí)引導(dǎo),是指在應(yīng)用程序的工程中,寫(xiě)一段bootload程序,該程序主要完成EMIF接口的配置,和應(yīng)用程序從FLASH向C6416存儲(chǔ)器搬移的工作。程序應(yīng)當(dāng)利用。cmd文件,來(lái)為bootload代碼分配存儲(chǔ)空間,其空間地址范圍應(yīng)該是0~1 KB.同時(shí)燒寫(xiě)bootload 到FLASH 時(shí),應(yīng)當(dāng)燒寫(xiě)到0~1 KB的空間范圍內(nèi)。當(dāng)系統(tǒng)上電,F(xiàn)LASH 中的0~1 KB數(shù)據(jù)自動(dòng)搬移到C6416片內(nèi)RAM 0~1 KB,然后PC指針從0開(kāi)始運(yùn)行,此時(shí)EMIFA 和EMIFB將被配置,允許C6416可以訪問(wèn)片外RAM和片外FLASH;然后完成從FLASH 到存儲(chǔ)器(片內(nèi)或片外RAM)的代碼段、數(shù)據(jù)段數(shù)據(jù)搬移;最后設(shè)置PC指針跳轉(zhuǎn)到應(yīng)用程序的入口地址c_int00 來(lái)初始化C 語(yǔ)言環(huán)境,從而開(kāi)始運(yùn)行應(yīng)用程序。Bootload程序應(yīng)該用匯編來(lái)完成,因?yàn)樗窃贑語(yǔ)言環(huán)境初始化之前被執(zhí)行,此時(shí)C6416是不識(shí)別C語(yǔ)言的語(yǔ)言符號(hào)的。
評(píng)論