。2)并行自舉引導(dǎo)
這種方式是比較常用的一種,外部存儲(chǔ)器的字寬為8位或16位。在自舉引導(dǎo)時(shí),通過(guò)外部并行接口總線(xiàn)將這些代碼從數(shù)據(jù)存儲(chǔ)空間傳送到程序存儲(chǔ)空間,而且可以重新設(shè)置SWWSR及BSCR寄存器的內(nèi)容。并行自舉引導(dǎo)方式首先從地址為0FFFFH的I/O口讀取自舉表首地址的內(nèi)容,如果此內(nèi)容不符合8位或16位的引導(dǎo)方式,就從地址為0FFFFH的數(shù)據(jù)存儲(chǔ)器讀取,進(jìn)行8位或16位并行自舉引導(dǎo)。所以,在燒寫(xiě)Flash數(shù)據(jù)的同時(shí),也要在0FFFFH燒入自舉表的首地址。引導(dǎo)流程如圖2所示。(3)建立自舉表
自舉表內(nèi)容不僅包括欲加載的各段代碼,而且包括各段代碼長(zhǎng)度、各代碼段存放的目標(biāo)地址、程序入口地址等信息。若要完成自舉引導(dǎo)功能,必須建立正確的自舉表。自舉表可以由hex500格式轉(zhuǎn)換器自動(dòng)生成;也可以手動(dòng)建立自舉表,就是把被燒寫(xiě)的程序直接放在燒寫(xiě)程序中,根據(jù)被燒寫(xiě)程序的相關(guān)信息手動(dòng)建立自舉表。
3 C5410 燒寫(xiě)Flash和并行自舉引導(dǎo)
下面通過(guò)一個(gè)Flash燒寫(xiě)實(shí)例,介紹怎樣將用戶(hù)程序燒寫(xiě)進(jìn)Flash,以及怎樣手動(dòng)建立自舉表,并且脫離仿真器以并行自舉引導(dǎo)方式使用戶(hù)程序獨(dú)立運(yùn)行。被燒寫(xiě)和燒寫(xiě)程序如下: .title “FLASH” .mmregs SWCR .set 002BH TEMP .set 0060H .data .sect ".BOOT" .label BOOTTABLE ; 自舉表開(kāi)始 .word 10AAH ; 16位自舉標(biāo)記 .word 7FFFH ; 7個(gè)等待周期(SWWSR) .word 0F000H ; 塊轉(zhuǎn)換寄存器(BSCR) .word 0000h ; 程序入口XPC .word 0200h ; 程序入口地址(MAIN_START) .word LOADEND - LOADSTART ; 程序塊長(zhǎng)度(0116H) .word 0000h ; 存放目標(biāo)XPC .word 0100h ; 存放目標(biāo)地址 LOADSTART: ;中斷向量表開(kāi)始地址 .copy “vector.asm”;復(fù)位處跳轉(zhuǎn)MAIN_START MAIN_START: ;被燒寫(xiě)的主程序 STM #0F7h,SP STM #012Ch,PMST ;IPTR=01(中斷向量指針為100,指向目標(biāo)地址),MP/MC=0,OVLY=1,AVIS=0,DROM=1, CLKOFF=1 LOOPF:RSBX XF ;XF置低 CALL DELAY ;延時(shí) SSBX XF ;XF置高 CALL DELAY B LOOPF DELAY:PSHM AR6 STM #0090H,AR6 DELAY_LOOP: RPT #0FF0h NOP BANZ DELAY_LOOP,*AR6- POPM AR6 RET LOADEND ; 被燒寫(xiě)的程序結(jié)束 .space 20h .mmregs .label FINDTABLE .word 8000h .text ERASE_WRITE_Flash: ;燒寫(xiě)程序開(kāi)始 STM #0FFA0H,PMST STM #07FFFH,SWWSR STM #0FFFFH,SWCR _RESETFlash ; Flash復(fù)位 _ERASEFlash ;擦除Flash WRIFlashSTART: ;開(kāi)始編程Flash SSBX SXM RSBX OVM _RESETFLASH ; Flash復(fù)位 STM #8000H,AR0 ;Flash起始地址8000H STM BOOTTABLE,AR5 ;被燒寫(xiě)的源地址(自舉 ;表首地址) STM #( LOADEND- BOOTTABLE),AR4 ; 寫(xiě)入011E個(gè)字 WRI_RPT _WRITEFlash *AR0,*AR5 ;調(diào)入編程宏 LD *AR0+,A LD *AR5+,A ;完成AR0和AR5地址自動(dòng)加1 BANZ WRI_RPT,*AR4- STM #0FFFFH,AR0; AR0指向數(shù)據(jù)空間的FFFF ;地址 STM FINDTABLE,AR5 _WRITEFlash *AR0,*AR5 ; 向數(shù)據(jù)空間的FFFF ;地址寫(xiě)入自舉表的首地址8000H ENDD: NOP B ENDD .end
被燒寫(xiě)的主程序是從MAIN_START開(kāi)始,一直到LOADEND。程序的主要功能是不斷改變XF引腳的狀態(tài)。LOADSTART是中斷向量文件(vector.asm)的開(kāi)始,在中斷復(fù)位(RESET)處放入一條跳轉(zhuǎn)到MAIN_START指令(BD MAIN_START)。ERASE_WRITE_FLASH是燒寫(xiě)程序的開(kāi)始,只要程序指針( PC)指向ERASE_WRITE_FLASH,開(kāi)始運(yùn)行就可以完成對(duì)Flash的燒寫(xiě)操作。從自舉表首地址BOOTTABLE (0F8H)到LOADEND(0216H)存放的數(shù)據(jù)就是要寫(xiě)入Flash的內(nèi)容,從LOADSTART到LOADEND的數(shù)據(jù)是DSP自舉程序從Flash搬運(yùn)到片內(nèi)RAM的程序,具體如下: 00F8H: BOOTTABLE ; 自舉表開(kāi)始 0100H: LOADSTART ;中斷向量表首地址 0100H: RESET :BD MAIN_START ... ;中斷向量表的內(nèi)容 0178H: RESERVED 0200H: MAIN_START ... ;主程序 0216H: LOADEND 被燒寫(xiě)的程序只需一個(gè)段,根據(jù)以上信息就可以完成自舉表的內(nèi)容,如表3所列。整個(gè)并行自舉引導(dǎo)過(guò)程為:C5410上電復(fù)位后,判斷MP/MC=0 處于微計(jì)算機(jī)工作方式,從片內(nèi)ROM的0FF80H處執(zhí)行中斷向量表的分支轉(zhuǎn)移指令(BD 0F800H),使程序跳轉(zhuǎn)至0F800H處執(zhí)行自舉引導(dǎo)程序。自舉引導(dǎo)程序完成初始化后,讀取數(shù)據(jù)空間的0FFFFH地址的內(nèi)容,找到自舉表首地址8000H,從8000H處開(kāi)始讀取內(nèi)容。首先,是16位自舉標(biāo)記(10AA)。然后分別是寄存器SWWSR及BSCR的內(nèi)容,程序入口地址、代碼段長(zhǎng)度、存放代碼段的目標(biāo)地址等信息。最后,根據(jù)這些信息把Flash的8008H到811EH的程序搬運(yùn)到片內(nèi)RAM的100H開(kāi)始的地址中,跳轉(zhuǎn)至片內(nèi)RAM 100H、即PC為100H、XPC為0,開(kāi)始執(zhí)行用戶(hù)程序,完成用戶(hù)程序的并行自舉過(guò)程。
結(jié)語(yǔ)
把程序燒寫(xiě)入Flash后,復(fù)位C5410,使其處于微計(jì)算機(jī)工作方式;使用示波器測(cè)試XF引腳,觀察程序運(yùn)行正確與否。通過(guò)上述方法可完成C5410對(duì)Am29LV200B Flash 的燒寫(xiě),很好地實(shí)現(xiàn)了C5410上電后的用戶(hù)程序自舉引導(dǎo)功能。 參考文獻(xiàn) 1 TMS320VC5410 Bootloader SPRA609A Copyright (c) TI, 2000-04 2 Am29LV200B Copyright (c) 2002 Advanced Micro Devices, 2002-04-12 3 張雄偉, 曹鐵勇. DSP芯片的原理與開(kāi)發(fā)應(yīng)用. 北京:電子工業(yè)出版社, 2001 |