新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于PCI總線的DSP系統(tǒng)應(yīng)用程序的更新

基于PCI總線的DSP系統(tǒng)應(yīng)用程序的更新

作者: 時間:2013-06-15 來源:網(wǎng)絡(luò) 收藏

1.2 C6416 操作原理
C6416的操作可以設(shè)置為:
主模式寫:DSP主設(shè)備通過接口寫數(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存儲空間的PCI控制狀態(tài)寄存器。前兩類寄存器只能被外部主機(jī)訪問,DSP從機(jī)是不能訪問的;而最后一類寄存器,DSP從機(jī)是可以訪問的,并利用其來完成PCI通信的控制和操作。
PCI配置寄存器包含標(biāo)準(zhǔn)的PCI配置信息,包括設(shè)備標(biāo)識,供應(yīng)商標(biāo)識,版本等信息,其可以在上電復(fù)位時自動訪問E2PROM進(jìn)行加載或上電復(fù)位時可以通過默認(rèn)值初始化。
PCI I/O寄存器可以被主機(jī)用來對從機(jī)進(jìn)行操作和狀態(tài)監(jiān)控。主機(jī)通過base2存儲空間來訪問該類寄存器。該空間大小為16 B,有三個寄存器:主機(jī)狀態(tài)寄存器(HSR),主機(jī)-DSP控制寄存器(HDSR)和DSP頁寄存器(DSPP)。
1.2.2 C6416 PCI存儲器映射
PCI端口通過3種基址寄存器可以完全訪問DSP的存儲器映射。
Base0:4 MB的可預(yù)存取空間,通過設(shè)置DSP頁寄存器映射來對應(yīng)所有DSP存儲空間,如圖3所示??梢岳斫鉃?,一個4 MB大小的存儲窗口,來遍歷整個DSP的存儲映射區(qū),而DSP頁寄存器的值則決定了這個4 MB存儲窗的起始地址。如圖4所示。

本文引用地址:http://butianyuan.cn/article/148014.htm

c1.jpg


Base1:8 MB的非預(yù)取址映射。其訪問起始地址固定,為0x01800000,該存儲空間映射為DSP片內(nèi)寄存器。如圖5所示。

c.JPG


Base2:PCI 16 B I/O寄存器,上已介紹。
上電后PCI主機(jī)將遍歷整個PCI總線,建立一棵PCI總線樹,然后對每個PCI總線樹上的結(jié)點(diǎn)(設(shè)備)進(jìn)行上述3個基地址的分配。利用這3個基地址,PCI主機(jī)即可以訪問PCI總線上的從設(shè)備的全部存儲空間。
1.2.3 PCI中斷
如果設(shè)置了PCIIEN對應(yīng)的中斷使能位,當(dāng)對應(yīng)的中斷源產(chǎn)生,DSP將進(jìn)入中斷狀態(tài)。所有的中斷事件對應(yīng)于一個CPU中斷:DSPINT。可以通過PCIIS中斷源寄存器來判斷產(chǎn)生中斷的中斷源。
1.2.4 PCI引導(dǎo)
PCI接口支持從PCI總線引導(dǎo)DSP啟動。當(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è)置來配置DSP上電邏輯選擇PCI引導(dǎo)模式。

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



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉