<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > TMS320VC54系列EPROM的加載實(shí)現(xiàn)

          TMS320VC54系列EPROM的加載實(shí)現(xiàn)

          作者: 時(shí)間:2006-05-07 來(lái)源:網(wǎng)絡(luò) 收藏

          摘要:文中介紹了TMS320VC5000系列的各種加載方法。并結(jié)合實(shí)例,著重介紹了其中C5402的EPROM加載方式和實(shí)現(xiàn)過(guò)程,提出了實(shí)際中應(yīng)注意的問(wèn)題。另外,也對(duì)8位EPROM加載過(guò)程及自舉表作了詳細(xì)的介紹。

          本文引用地址:http://www.ex-cimer.com/article/242321.htm

          關(guān)鍵詞:器() 程序加載 TMS320VC54 自舉表

          芯片(器)已成為人們?nèi)找骊P(guān)注并得到迅速發(fā)展的具有前關(guān)沿技術(shù)的一種集成電路,而且已得到越來(lái)越廣泛的應(yīng)用。TI公司推出的5000系列DSP具有高性能、低功耗等優(yōu)良性能,一推出就得到了用戶的歡迎。5000系列DSP被廣泛應(yīng)用于電信、雷達(dá)、儀器儀表、圖像處理等許多方面。其應(yīng)用范圍的廣泛性決定了必須有靈活多樣的加載方式與之相適應(yīng)。正因?yàn)槿绱耍募虞d方式也較單片機(jī)的加載要復(fù)雜的多。為了能讓讀者對(duì)DSP的各種加載方法有個(gè)初步的了解和今后應(yīng)用的方便,本文立足實(shí)際經(jīng)驗(yàn),簡(jiǎn)單介紹了各種加載方法,并較為詳細(xì)地介紹了EPROM并行加載方法及應(yīng)注意的問(wèn)題。

          1 DSP的各種加載方式

          C5000系列可提供的加載方式有以下幾種:

          ●主機(jī)端口(HPI)加載

          程序的執(zhí)行代碼由主機(jī)通過(guò)主機(jī)接口(HPI)加載到DSP的片內(nèi)存儲(chǔ)器;

          ●并行加載

          加載程序通過(guò)外部并行總線從數(shù)據(jù)空間讀取自舉表,自舉表內(nèi)包含有程序代碼部分、每部分代碼的目的地址、加載成功后程序的執(zhí)行地址以及其它一些配置信息;

          ●標(biāo)準(zhǔn)串口加載

          加載程序通過(guò)多通道緩沖串口(McBSP)來(lái)接收自舉表,并根據(jù)自舉表中的信息來(lái)加載代碼。McBSP0支持16位的串行接收方式,McBSP1支持8位的串行接收方式;

          ●8位或16位I/O加載

          加載程序通過(guò)使用異步握手協(xié)議從I/O的OH口讀取自舉表;

          ●8位串口EEPROM加載

          加載程序從一個(gè)連接到McBSP1的串行EEPROM來(lái)接收數(shù)據(jù)。

          2 C5000的加載過(guò)程

          C5000系列加載程序已固化在ROM內(nèi)。在硬件復(fù)位期間,如果DSP的MP引腳為高是平,系統(tǒng)就從外部程序存儲(chǔ)器FF80H執(zhí)行用戶程序;若MP為低電平,系統(tǒng)則從片內(nèi)ROM的FF80H開始執(zhí)行程序,同時(shí)選擇加載方式。C5000的具體加載過(guò)程如下:

          (1)首先,在自舉加載前對(duì)其進(jìn)行初始化,其中包括:使中斷無(wú)效(INTM=1),內(nèi)部RAM映射到程序/數(shù)據(jù)區(qū)(OVLY=1),對(duì)程序和數(shù)據(jù)區(qū)均設(shè)置七個(gè)等待狀態(tài)等。

          (2)檢查INT2,決定是否從HPI中載。主機(jī)接口(HPI)是利用INT2進(jìn)行自舉加載的。如果沒有INT2信號(hào),說(shuō)明不是HPI加載。

          (3)檢查INT3決定是否進(jìn)行串行EEPROM加載。如果DSP檢測(cè)到INT3信號(hào),則進(jìn)行串行EEPROM加載,否則轉(zhuǎn)到(4)。

          (4)從I/O空間的FFFFH處讀取源地址,如果是有效的地址,則進(jìn)行并行加載;否則從數(shù)據(jù)空間的FFFFH處讀取源地址,如果地址有效,也可進(jìn)行并行加載;若兩種情況都不是則轉(zhuǎn)到(5)。

          (5)初始化串口,置XF為低。若McBSP1接收到一個(gè)數(shù)據(jù),先檢查是否是有效的關(guān)鍵字,若是則通過(guò)McBSP1進(jìn)行串口加載,否則檢查McBSP0,其過(guò)程與McBSP1相同。

          (6)檢測(cè)BID引腳是否為低,若為低再檢查是否為有效的關(guān)鍵字,若是則進(jìn)行I/O加載,否則檢測(cè)是否是有效的入口點(diǎn),若是,則轉(zhuǎn)入入口點(diǎn),若都不是則跳到(5)。

          下面通過(guò)一個(gè)具體的例子來(lái)詳細(xì)介紹一下EPROM并行加載過(guò)程,DSP選用TMS320VC5402(5402提供4k 16bit的掩模ROM),EPROM選用27C256。

          由TMS320V5402和27C256所構(gòu)成的程序加載電路如圖1所示。圖中74LVC245的作用是將27C256輸出的TTL電平轉(zhuǎn)換成TMS320VC5402能接收的電平。它還對(duì)DSP起到保護(hù)作用。若去掉274LVXC245,則會(huì)燒壞5402。

          27C256的輸出使能控制線(OE)用來(lái)控制器件的有效或無(wú)效(雙側(cè)相互隔離)。

          74LS08將27C256的地址定為8000H~FFFFH。LVC245的DIR端接DSP的R/W端。27C256垢CS端接74LS08的譯碼輸出,OE端接低電平信號(hào)。在這種加載方式中,EPROM是作為TMS320VC5402的片外數(shù)據(jù)區(qū),用戶程序是通過(guò)片內(nèi)固化的加載程序讀入到片內(nèi)程序區(qū)來(lái)完成加載的。

          3 8位EPROM加載過(guò)程

          當(dāng)檢測(cè)到不是串行EEPROM加載時(shí),加載程序則轉(zhuǎn)入并行加載方式。此時(shí)加載程序從并口(外部存儲(chǔ)器)傳輸代碼到程序空間,支持8位和16位加載。另外,程序也可自動(dòng)配置SWWSR(軟件等待狀態(tài)寄存器)和BSCR(分區(qū)轉(zhuǎn)換控寄存器),使之與不同加載方式相適應(yīng),從而使DSP能與不同速率的EPROM相連接。考慮到高速器件與低速器件的匹配問(wèn)題,加載程序使用默認(rèn)的七個(gè)等待周期。

          加載程序能從I/O空間的0FFFFH和數(shù)據(jù)空間的0FFFFH處獲取代碼的首地址。通常,從數(shù)據(jù)空間獲取代碼的首地址較方便。因?yàn)樵跀?shù)據(jù)空間不需要另擴(kuò)I/O空間,同時(shí)又可增加電路改動(dòng)的靈活性。對(duì)5402來(lái)說(shuō),自舉表可以位于4000H~FFFFH處的任何位置。圖2詳細(xì)描述了EPROM加載過(guò)程。

          應(yīng)當(dāng)注意的是:如果不用并行加載方式,D0必須通過(guò)一個(gè)小的上拉電阻置為高電平,以此來(lái)避免加載程序從數(shù)據(jù)空間讀到0AAH關(guān)鍵字。另外,加載程序事先并不知道存儲(chǔ)器的寬度,所以它要同時(shí)檢查存儲(chǔ)器的低位(0FFFFH)和高位(0FFFFH)以獲取正確的源地址。

          4 自舉表

          自舉表的頭部是關(guān)鍵字(08AA或10AA),加載程序就是根據(jù)它來(lái)判斷是16位還是8位加載方式;接著的兩個(gè)字是SWWSR和BSCR的值;第四和第五個(gè)字程序代碼的入口點(diǎn)(即加載以后程序執(zhí)行的首地址);接著是第一段代碼的長(zhǎng)度以及它的目的地址;緊跟著是另一段代碼;依此類推,最后是0000H,這是自舉表的結(jié)束標(biāo)志。表1為自舉表的結(jié)構(gòu)。

          表1 自舉表的結(jié)構(gòu)圖

          08AAh or 10AAh
          Initialize value of SWWSR 16
          Initizlixe value of BSCR 16
          Entry point (XPC)7
          Entry point(PC)16
          Size of first section 16
          Destination of first section (XPC)7
          Destination of first section (PC)16
          Code word(1)16
          Code word(N)16
          Size of last section 16
          Destination of last section(XPC)7
          Destination of section (PC)16
          Code word(1)16
           
          Code word(N)16
          0000h

          筆者將結(jié)合實(shí)例,介紹一下自舉表的建立。

          假設(shè)用戶編制的源程序文件為radar.asm,鏈連器命令文件為radar.cmd,生成的COFF文件為radar.out,最后生成的INTEL的十六進(jìn)制文件為radar.hex,用戶可以通過(guò)EPROM編程器將它燒錄到EPROM中。

          (1)首先,使用編譯器對(duì)應(yīng)用程序進(jìn)行編譯。值得注意的是必須在編譯器的命令行上加-V548選項(xiàng),若遺忘了這個(gè)選項(xiàng),以后HEX轉(zhuǎn)換工具將會(huì)產(chǎn)生C54早期版本的自舉表,而不提供任何錯(cuò)誤與警告信息。這個(gè)錯(cuò)誤極其隱蔽,務(wù)必注意。

          例:asm500radar.asm-1-s-x-v548

          (2)第二步,對(duì)第一步產(chǎn)生的目標(biāo)文件進(jìn)行鏈接。在鏈接過(guò)程中,鏈接器將各個(gè)目標(biāo)文件合并,并完成以下工作:

          ●將各個(gè)段配置到目標(biāo)系統(tǒng)的存儲(chǔ)器;

          ●對(duì)各個(gè)符號(hào)和段進(jìn)行重新定位,并給它們指定一個(gè)最終的地址;

          ●解決輸入文件之間未定義的外部引用。

          例:Lnk500 radar.cmd-o radar.out

          (3)最后,運(yùn)行HEX代碼轉(zhuǎn)換工產(chǎn)生自舉表。十六進(jìn)制轉(zhuǎn)換程序可以很方便的將COFF目標(biāo)文件轉(zhuǎn)換成TI,INTEL,MOTOROLA或TEKTRONIX公司的目標(biāo)文件格式。轉(zhuǎn)換后生成的文件下載到EPROM編程器。

          例:Hex500 radar.out -I - o radar.hex - memwidth 8 -romwidth 8 -boot -bootorg 0x0000

          注意:為了保證加載的成功率,用戶編制的程序代碼前面應(yīng)加上對(duì)DSP的各個(gè)狀態(tài)寄存器進(jìn)行初始的程序段。



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();