??? 摘? 要: 詳細(xì)分析了TI公司TMS320C40和TMS320VC5402兩類DSP芯片的系統(tǒng)引導(dǎo)特點(diǎn)。在了解機(jī)理的基礎(chǔ)上,敘述了工程設(shè)計(jì)中創(chuàng)建系統(tǒng)引導(dǎo)表的具體步驟,給出了創(chuàng)建步驟中所需的鏈接文件范例,并進(jìn)行了說明。?
??? 關(guān)鍵詞: TMS320C40? TMS320VC5402? 系統(tǒng)引導(dǎo)? 引導(dǎo)表?
?
目前,DSP芯片正逐漸應(yīng)用到電子設(shè)計(jì)中,其中應(yīng)用最廣泛的是 TI 公司生產(chǎn)的DSP系列產(chǎn)品。筆者在工程項(xiàng)目的開發(fā)中,對(duì)TMS320C40和TMS320VC5402(以下簡稱C40和C5402)進(jìn)行了系統(tǒng)的研究,并成功的實(shí)現(xiàn)了DSP的脫機(jī)運(yùn)行。本文希望通過對(duì)C40和C5402兩種芯片系統(tǒng)引導(dǎo)的描述使大家了解設(shè)計(jì)DSP系統(tǒng)引導(dǎo)的步驟,能夠利用DSP設(shè)計(jì)自己的設(shè)備。?
1 C40和C5402的系統(tǒng)引導(dǎo)機(jī)理?
??? TI公司的每一種DSP產(chǎn)品,都為用戶設(shè)計(jì)了多種系統(tǒng)的引導(dǎo)方式,如串口、并行加載" title="加載">加載、HPI加載等。C40和C5402的引導(dǎo)方式如表1所示。?
?

?
在工程中,使用最廣泛的是EEPROM并行加載方式。它又分為8位數(shù)據(jù)寬度和16位數(shù)據(jù)寬度兩種,筆者采用的是8位數(shù)據(jù)寬度的并行加載方式。需要注意的是C40的數(shù)據(jù)總線寬度是32位,引導(dǎo)表中數(shù)據(jù)存放的原則是低字節(jié)在低地址。C5402的數(shù)據(jù)寬度是16位,引導(dǎo)表中數(shù)據(jù)的存放原則是高字節(jié)在低地址。?
1.1 C40的并行引導(dǎo)模式?
C40加電時(shí),芯片檢測到ROMAN引腳為高電平" title="高電平">高電平,進(jìn)入微處理器模式。再檢測IIOF3~I(xiàn)IOF0引腳電平,決定系統(tǒng)的引導(dǎo)方式和選擇并行引導(dǎo)的始地址。執(zhí)行程序引導(dǎo)程序時(shí),程序和數(shù)據(jù)存取等待時(shí)間可以設(shè)置為最長7個(gè)等待周期。若軟件延時(shí)不夠用,則需要輔助硬件延時(shí)等待。程序引導(dǎo)完畢后,會(huì)在IACK引腳產(chǎn)生脈沖,使引腳可以作為中斷引腳使用并轉(zhuǎn)入到程序的入口地址開始執(zhí)行程序。?
C40由中斷引腳的電平?jīng)Q定系統(tǒng)引導(dǎo)后的程序執(zhí)行地址,或決定是否由通訊口進(jìn)行程序的加載。采用 0030 0000H 作為主程序的入口地址,即將一片28C256地址設(shè)計(jì)為0030 0000H~0030 7FFFH。在系統(tǒng)引導(dǎo)時(shí),需維持IIOF3~I(xiàn)IOF0四個(gè)引腳電平為1101。?
下面以IIOF2引腳和IIOF1引腳為例,敘述一下系統(tǒng)引導(dǎo)前后的中斷引腳的處理過程。圖1電路是IIOF2引腳的外圍處理電路。在系統(tǒng)加電時(shí),D31A的/PRE=0、/CLR=1,置位端有效,所以Q=1、/IIOF2=1。加電完畢后,/PRE=1、/CLR=1,此時(shí)無/IACK信號(hào),Q=1、/IIOF2=1,C40開始程序的加載工作。當(dāng)C40程序加載完畢時(shí),IACK引腳會(huì)產(chǎn)生一個(gè)脈沖,Q=D=0,/IIOF2=/INT2。C40會(huì)轉(zhuǎn)入程序的入口地址執(zhí)行程序,此時(shí)D觸發(fā)器電路的工作已經(jīng)完畢,C40此時(shí)可以處理中斷信號(hào)。圖2電路是IIOF1引腳的外圍處理電路。系統(tǒng)引導(dǎo)時(shí),要求/IIOF1引腳電平為低電平。
?

?
1.2 C5402并行引導(dǎo)模式?
C5402加電時(shí),如果芯片檢測到MP/MC引腳電平為低電平,系統(tǒng)從0FF80H開始執(zhí)行代碼。此處有一個(gè)分支指令(廠家編程設(shè)置的),可以跳轉(zhuǎn)到引導(dǎo)程序的開始地址(0F800H)。這個(gè)程序可以在引導(dǎo)之前設(shè)置CPU狀態(tài)寄存器的初始值。中斷被全局禁止,OVLY設(shè)置為1,程序和數(shù)據(jù)存取等待時(shí)間被設(shè)置為7個(gè)等待周期,外部內(nèi)存塊被設(shè)置為4K的WORDS(16BIT),然后開始程序的引導(dǎo)。?
當(dāng)C5402檢測到INT2引腳為高電平、INT3引腳為高電平,即兩個(gè)引腳都無效時(shí),C5402會(huì)轉(zhuǎn)到并行引導(dǎo)方式。并行引導(dǎo)方式是通過擴(kuò)展的內(nèi)存接口從數(shù)據(jù)地址空間讀取所需的引導(dǎo)表,再將代碼傳送到程序存儲(chǔ)區(qū)。并行引導(dǎo)既支持8位的數(shù)據(jù)寬度,也支持16位的數(shù)據(jù)寬度。軟件可編程等待寄存器(SWWSR)和塊切換控制寄存器(BSCR)都可以在這兩種模式中得到設(shè)置。?
C5402數(shù)據(jù)存儲(chǔ)區(qū)、程序存儲(chǔ)區(qū)和I/O地址空間,用/DS、/PS和/IS三個(gè)引腳信號(hào)區(qū)分。系統(tǒng)的引導(dǎo)表設(shè)在數(shù)據(jù)存儲(chǔ)區(qū),考慮到C5402內(nèi)部只有16K×16的雙存取RAM(DRAM),因此用于程序加載的EEPROM (EEPROM中存放的是系統(tǒng)的引導(dǎo)表)可考慮使用28LV256。如果在設(shè)計(jì)中,使28LV256(+3.3V供電)占用系統(tǒng)的數(shù)據(jù)空間地址為8000H?觸0FFFFH,那么,C5402在系統(tǒng)引導(dǎo)時(shí)需從系統(tǒng)的數(shù)據(jù)地址0FFFEH和0FFFFH得到引導(dǎo)表的起始地址8000H。在設(shè)計(jì)系統(tǒng)引導(dǎo)表時(shí)要注意這兩個(gè)單元的內(nèi)容。如果設(shè)計(jì)EEPROM的首地址(系統(tǒng)引導(dǎo)表的首地址)為0C000H,那么數(shù)據(jù)地址0FFFEH和0FFFFH兩個(gè)單元要存放C0和00H,也就是引導(dǎo)表的首地址。在設(shè)計(jì)中也可以使用其它EEPROM或FLASH,如29LE010(128K×8BIT),但要正確配置它在系統(tǒng)中的地址。引導(dǎo)表的首地址(即EEPROM的在系統(tǒng)中的首地址)是通過系統(tǒng)數(shù)據(jù)地址0FFFEH和0FFFFH決定的,可以是08000H~0FFFDH之間的任意地址,但要保證能夠存儲(chǔ)系統(tǒng)引導(dǎo)表。?
2 建立系統(tǒng)引導(dǎo)表的步驟?
??? 程序經(jīng)過仿真器仿真無誤以后,就要建立引導(dǎo)表,使系統(tǒng)能夠脫機(jī)運(yùn)行。下面介紹建立系統(tǒng)引導(dǎo)表的步驟:?
(1)編譯文件。編寫完程序代碼以后,對(duì)源程序進(jìn)行編譯,生成.obj 文件,對(duì)于C5402,編譯時(shí)要采用-V548的編譯描述符。?
(2)鏈接文件,將.obj文件生成.out文件。.out文件中應(yīng)包括初始化的段落。如.text,.const,.cinint等。以上兩步在仿真時(shí),也需要執(zhí)行,以便得到仿真用的.out文件。?
(3)使用數(shù)制轉(zhuǎn)換工具" title="轉(zhuǎn)換工具">轉(zhuǎn)換工具生成.HEX文件或.BIN文件,C40使用的數(shù)制轉(zhuǎn)換工具為hex30.exe,C5402使用數(shù)制轉(zhuǎn)換工具為hex500.exe。根據(jù)所需的系統(tǒng)引導(dǎo)模式為數(shù)制轉(zhuǎn)換工具編寫命令文件,命令文件的編寫很重要,下面分別例舉了C40和C5402系統(tǒng)引導(dǎo)的兩個(gè)CMD命令文件。?
例1:C40系統(tǒng)引導(dǎo)的CMD文件?
myfile.out?????????? ?? /*要進(jìn)行轉(zhuǎn)化的COFF文件名*/?
-i?????????????????? ?? /*建立INTEL十六進(jìn)制文件的輸出*/?
-image ???????????????? /*產(chǎn)生ROM所指示的內(nèi)存映射*/?
-o n_t_fcom.hex?????? /*輸出的文件名*/?
-map n_t_hex.map???? /*輸出的 MAP文件名*/?
-romwidth 8?????????? /EEPROM 的數(shù)據(jù)寬度*/?
-cg 000000000H?????? /*全局?jǐn)?shù)據(jù)總線控制字*/?
-cl 3e3fbfd0H?????? ??? /*本地?cái)?shù)據(jù)總線控制字*/?
-datawidth 32???????? ? /*數(shù)據(jù)寬度*/?
-memwidth 8???????? ??? /*存儲(chǔ)器的寬度*/?
-boot???????????????? /*將所有的輸入文件創(chuàng)建引導(dǎo)表*/?
-bootorg 0000H? ?? /*EPROM的0000H,系統(tǒng)的0030 0000H*/?
-ivtp 00700000H ? ? /*IVTP指針的初始值*/?
-tvtp 00000000H???? /*TVTP指針的初始值*/?
-iack 0300000H????? ??? /*IACK指令的響應(yīng)地址*/?
-e? 00704000H?????? /*程序的開始執(zhí)行地址*/?
ROMS??????????????? /*ROM的映射范圍*/?
{?
EPROM: org = 00300000h,len = 8000H?
}?
??? 例2:C5402系統(tǒng)引導(dǎo)CMD命令文件?
Myfile.out????? ??? /*要進(jìn)行轉(zhuǎn)化的COFF文件名*/?
-e 0300H?????? /*程序運(yùn)行的入口點(diǎn)*/?
-i???????????? /*建立INTEL 十六進(jìn)制文件的輸出*/?
-boot????????? /*將所有的輸入文件創(chuàng)建引導(dǎo)表*/?
-bootorg? 0000H /*EPROM中引導(dǎo)表的始地址*/?
-memwidth 8??? /*EEPROM的數(shù)據(jù)寬度是8位*/?
-o myfile.hex?? ??? /*輸出的文件名*/?
??? 下面給出操作符的幾點(diǎn)說明:?
(1)-bootorg 指定引導(dǎo)表的地址,注意這里使用的是0000H,.HEX文件的始地址就是0000H。在C40中,EEPROM28C256的0000H地址單元,在系統(tǒng)中地址是0030 0000H。若改為-bootorg 0030 0000H,在用燒錄" title="燒錄">燒錄器打開.HEX文件時(shí),可以看到起始地址是0030 0000H,若將.HEX文件燒到EEPROM中,需要修改燒錄芯片的起始地址,比較麻煩。但你可以將.HEX文件轉(zhuǎn)化為.BIN文件,則地址就不必修改。?
(2)輸出文件的格式?
??? -a? ??? 輸出ASCII碼的十六進(jìn)制文件?
??? -I?? ?? 輸出INTEL十六進(jìn)制文件?
??? -m1 ??? 輸出Motorola的S1數(shù)據(jù)格式文件?
??? -m2???? 輸出Motorola的S2數(shù)據(jù)格式文件?
??? -m3???? 輸出Motorola的S3數(shù)據(jù)格式文件?
??? -t? ??? 輸出TI的數(shù)據(jù)格式文件 ?
??? -x? ??? 輸出Tektronix 數(shù)據(jù)格式文件?
(3)檢查.HEX文件正確與否,可以查看MAP映射文件,在.MAP文件里列出了.HEX文件中的一些具體配置。如 32BIT數(shù)據(jù)位的排放順序,即4個(gè)字節(jié)的排放順序;系統(tǒng)引導(dǎo)表的參數(shù):引導(dǎo)表的首地址、程序入口點(diǎn)、各個(gè)寄存器的初始值等;源程序中各段的起始地址、大小以及寬度等信息。對(duì)照它,就可以確定內(nèi)存資源是否得到了合理的配置和有無地址沖突。?
??? 以下是C40 MAP文件的舉例:?
*********************************************?
TMS320C3x/4x Hex Converter????? Version 5.00?
*********************************************?
?
Fri Jun? 8 09:47:33 2001?
INPUT FILE NAME:
OUTPUT FORMAT:?? Intel?
?
PHYSICAL MEMORY PARAMETERS?
?? Default data width:??? ? 32?
?? Default memory width:? ? 8 (LS-->MS)?
?? Default output width:? ? 8?
?
BOOT LOADER PARAMETERS?
?? Table Address:?????????? ???? 00300000,PAGE 0?
?? Entry Point:???????????????????? 00704000?
?? Global Memory Configuration:???????? 00000000?
?? Local Memory Configuration:? ??????????? 3e3fbfd0?
?? Interrupt Vector Table Pointer (IVTP):?? 00700000?
?? Trap Vector Table Pointer (TVTP):??? ??? 00000000?
?? IACK Location:????????????????????? 00300000?
?
OUTPUT TRANSLATION MAP?
-------------------------------------?
00300000..00307fff? Page=0? Memory Width=8 ROM Width=8 ″EPROM″?
-------------------------------------?
? OUTPUT FILES: n_t_fcom.hex [b0..b7]?
?
? CONTENTS: 00300000..003013ff BOOT TABLE?
? ? ???intvect:dest=00700000 size=00000040 width=00000004?
?????? .text:dest=00704000 size=0000048a width=00000004?
?????? .data:dest=00705000 size=00000026 width=00000004?
??? 003004f0..00307fff? FILL = 00000000?
??? (4)燒錄芯片。C40可以直接將生成的INTEL格式的.HEX 文件燒到28LV256中?;?qū)⑹M(jìn)制的文件用hexbin.exe轉(zhuǎn)化為二進(jìn)制的.BIN文件,再燒錄到芯片中。對(duì)于C5402,還需要手動(dòng)添加EEPROM在系統(tǒng)中的起始地址。如果采用28LV256(32K×8BIT),引導(dǎo)表的首地址為8000H,那么生成的.HEX文件用芯片燒錄器" title="燒錄器">燒錄器加載到燒錄器軟件的內(nèi)存后,手動(dòng)修改28LV256的7FFEH和7FFFH單元(即系統(tǒng)的FFFEH和FFFFH單元)為80和00H,再燒到芯片中。?
以上步驟的操作都是在DOS環(huán)境中執(zhí)行的。新版本的DSP開發(fā)軟件可以在WINDOWS環(huán)境中使用,其原理是一樣的,這里不再贅述。?
源程序數(shù)據(jù)的存儲(chǔ)格式(8位并行裝載)如表2所示,當(dāng)燒錄時(shí)可以對(duì)比一下。?
?

?
本文詳細(xì)介紹了C4X和C54XX兩類DSP芯片系統(tǒng)引導(dǎo)的詳細(xì)設(shè)計(jì)步驟,其它型號(hào)的DSP也大同小異,如C3X與C4X類似。筆者希望通過共享系統(tǒng)引導(dǎo)的經(jīng)驗(yàn),使系統(tǒng)引導(dǎo)不再成為DSP設(shè)計(jì)中的最大障礙,從而加速DSP的推廣和應(yīng)用。?
參考文獻(xiàn)?
1 TMS320C4X General-PurposeApplications.Texas Instruments Inc, 1999年5月?
2 TMS320C4x User’s Guide. Texas Instruments Inc,1999年5月?
3 TMS320C54x Assembly Language Tools User’s Guide.Texas Instruments Inc,1998年10月?
4 TMS320C54x DSP CPU and Peripherals. Texas Instruments Inc,1999年4月?
