新聞中心

EEPW首頁(yè) > 網(wǎng)絡(luò)與存儲(chǔ) > 設(shè)計(jì)應(yīng)用 > TMS320VC33外部FLASH在系統(tǒng)編程與并行自舉引導(dǎo)技術(shù)

TMS320VC33外部FLASH在系統(tǒng)編程與并行自舉引導(dǎo)技術(shù)

作者: 時(shí)間:2008-02-23 來(lái)源: 收藏

  l TMS320C5402片外存儲(chǔ)空間的優(yōu)化設(shè)計(jì)

本文引用地址:http://2s4d.com/article/79144.htm

  C5402的存儲(chǔ)空間可達(dá)192 k×16 b。64 k程序空間,64 k數(shù)據(jù)空間,64 k 1/O空間。C5402片內(nèi)具有4 k×1 6 b的ROM和16 k×16 b的RAM。片內(nèi)POM和RAM可以根據(jù)PMST寄存器中的DROM,OVLY來(lái)靈活設(shè)置,使其映像在程序空間和數(shù)據(jù)空問(wèn)。程序空間和數(shù)據(jù)空間未被映像的部分和64 k的1/O空間全部在片外,用片外存儲(chǔ)器來(lái)補(bǔ)充。在實(shí)際的應(yīng)用中,應(yīng)該根據(jù)程序量的大小來(lái)選擇作為片外空間的存儲(chǔ)芯片的容量,以免造成不必要的浪費(fèi),本文選擇IS6lLV256l 6AL(256 k×16 b)作為程序存儲(chǔ)器的片外存儲(chǔ)芯片.SST39LF200A(128 k×16 b)的FLASH作為數(shù)據(jù)存儲(chǔ)器的片外存儲(chǔ)芯片,以實(shí)現(xiàn)自舉家載,使C5402自成獨(dú)立系統(tǒng),圖l為硬件連接圖。

  

 

  IS61LV256l 6AL的工作電壓為3~3.6 V.可以直接與TMS320C5402接口連接,而不必再使用電壓接口芯片進(jìn)行轉(zhuǎn)接,使硬件電路更為簡(jiǎn)單。Am29LV200B是AMD公司生產(chǎn)的FLASH存儲(chǔ)器.其主要特點(diǎn)有:3 V單電源供電.可使內(nèi)部產(chǎn)生高電壓進(jìn)行編程和擦除操作;支持JE-DEC單電源FLASH存儲(chǔ)器標(biāo)準(zhǔn);只需向其命令寄存器寫(xiě)入標(biāo)準(zhǔn)的微處理器指令.具體編程、擦除操作由內(nèi)部嵌入算法實(shí)現(xiàn),并且可以通過(guò)查詢(xún)特定的引腳或數(shù)據(jù)線(xiàn)監(jiān)控操作是否完成;可以對(duì)任一扇區(qū)進(jìn)行瀆、寫(xiě)或擦除操作,而不影響其他部分的數(shù)據(jù)。

  在訪(fǎng)問(wèn)存儲(chǔ)空間時(shí),當(dāng)?shù)刂仿湓谄瑑?nèi)存儲(chǔ)區(qū)域內(nèi),自動(dòng)對(duì)這些區(qū)域進(jìn)行訪(fǎng)問(wèn);當(dāng)?shù)刂仿湓谄鈪^(qū)域,自動(dòng)訪(fǎng)問(wèn)外部存儲(chǔ)器。使用片內(nèi)存儲(chǔ)器有3個(gè)優(yōu)點(diǎn):高速執(zhí)行(不需要等待)、低殲銷(xiāo)、低功耗、所以應(yīng)盡量使用片內(nèi)存儲(chǔ)器。

  2 TMS320C5402的Bootload設(shè)計(jì)

  在T1公司的DSP芯片出廠(chǎng)時(shí),片內(nèi)ROM中固化有引導(dǎo)裝載程序Bootloa&dr,其主要功能就是將外部的程序裝載到片內(nèi)RAM中運(yùn)行,以提高系統(tǒng)的運(yùn)行速度。TMS320VC5402的Bootloader程序位于片內(nèi)RoM的0F800H~OFBFFH空間。當(dāng)系統(tǒng)上電時(shí),DSp將檢查外部引腳MP/MC的狀態(tài),如果該引腳為高電平,則DSP按微處理器模式啟動(dòng),從片外OFlF80H地址處開(kāi)始執(zhí)行程序;如果該引腳為低電平,則DSP按微計(jì)算機(jī)模式啟動(dòng),系統(tǒng)從片內(nèi)OFF80H地址處開(kāi)始執(zhí)行程序,片內(nèi)OFF80H~OFFFF是固化的中斷矢量表,此處有一條跳轉(zhuǎn)指令。因此,如果系統(tǒng)上電時(shí)MP/MC的狀態(tài)為低電平,DSP復(fù)位后將從FF80H處跳轉(zhuǎn)到F800H開(kāi)始執(zhí)行Bootloadel'自動(dòng)裝載程序。在裝載程序之前,先自動(dòng)進(jìn)行如下初始化工作:INTM一1(使中斷無(wú)效),OVLY=1(內(nèi)部RAM映像程序/數(shù)據(jù)存儲(chǔ)器),對(duì)程序和數(shù)據(jù)區(qū)均設(shè)置7個(gè)等待狀態(tài)等。然后,選擇有效的自舉方式進(jìn)行自舉加載程序。

  2.1選擇自舉方式

  Bootloader能提供許多種引導(dǎo)方式以適配不同的系統(tǒng)設(shè)備,包括2種并行總線(xiàn)方式、串口方式以及主機(jī)口方式(HPI),還可以支持8 b和16 b的模式,具有很強(qiáng)的系統(tǒng)靈活性。在判斷前面的引導(dǎo)方式無(wú)效后,Bootloader會(huì)進(jìn)入并行引導(dǎo)裝載模式,Bootloader首先讀取地址為OFFFFH的I/O空間單元,并將該單元的值作為引導(dǎo)表的首地址。在數(shù)據(jù)地址空間中讀取引導(dǎo)表的第一個(gè)字,來(lái)判斷是8 b引導(dǎo)模式還是16 b引導(dǎo)模式。在本設(shè)計(jì)中,引導(dǎo)表的首地址是存放在數(shù)據(jù)存儲(chǔ)器0FFFF單元,Bootloader從I/O地址空間中讀取的引導(dǎo)表首地址所對(duì)應(yīng)的引導(dǎo)表中得不到正確的引導(dǎo)信息,于是Bootloader會(huì)自動(dòng)轉(zhuǎn)向數(shù)據(jù)空間,從數(shù)據(jù)空間的OFFFFH地址再去讀一個(gè)字作為引導(dǎo)表首地址,進(jìn)而再?gòu)囊龑?dǎo)表首地址讀取一個(gè)字。如果該字為10AAH,則立即進(jìn)入16 b引導(dǎo)模式;否則,將按8 b方式處理:從OFFFFH讀取一字節(jié)作為引導(dǎo)表首地址的低字節(jié),從0FFFEH讀取一字節(jié)作為引導(dǎo)首地址的高字節(jié),再?gòu)囊龑?dǎo)表首地址讀取一個(gè)值,如果低字節(jié)為08H,則再讀引導(dǎo)表的下一個(gè)值,如果為AAH,則說(shuō)明外部存儲(chǔ)器是8 b寬度,進(jìn)入8 b引導(dǎo)裝載模式。由于在本設(shè)計(jì)中采用16 b引導(dǎo)模式,Bootloader不會(huì)進(jìn)入8 b模式和后面的串行口引導(dǎo)方式。其選擇流程圖如圖2所示。

  

 

  

 

  2.2 FLASH的數(shù)據(jù)組織

  自舉表內(nèi)容包括Boot表頭和欲加載的應(yīng)用程序代碼。Boot表頭包括欲加載的應(yīng)用程序代碼長(zhǎng)度、代碼段存放的目標(biāo)地址、程序入口地址等信息。若要完成自舉引導(dǎo)功能,必須建立正確的自舉表,如表1所示。自舉表可以由hex500格式轉(zhuǎn)換器自動(dòng)生成;也可以手動(dòng)建立自舉表,就是把被燒寫(xiě)的程序直接放在燒寫(xiě)程序中,根據(jù)被燒寫(xiě)程序的相關(guān)信息手動(dòng)建立自舉表。

  手動(dòng)建立自舉表的關(guān)鍵是設(shè)計(jì)Boot表頭,下面是一個(gè)表頭的設(shè)計(jì)實(shí)例,設(shè)程序代碼長(zhǎng)度為0150H,運(yùn)行地址和存放地址都為0200H。

  BOOT.HEADER:

  .WORD 0X10AA ;數(shù)據(jù)寬度16 b

  .WORD 0X7FFF ;SWWSR

  .WORD OXF800 ;BSCR

  .WORD OX0000 ;程序人口XPC

  .WORD 0X0200 ;程序入口地址

  .WORD OX0150 ;程序段長(zhǎng)度

  .WORD 0X0000 ;存放目標(biāo)XPC

  .WORD OX0200 ;存放目標(biāo)地址

  手動(dòng)建立自舉表的過(guò)程為:連接好DSP開(kāi)發(fā)系統(tǒng),運(yùn)行CCS軟件;將欲加載程序在CCS上運(yùn)行生存.out文件,并復(fù)制;選用16 b FLASH存儲(chǔ)器,生成Boot表頭;將要寫(xiě)入存儲(chǔ)器的數(shù)據(jù)存放在cform.dat文件中。然后就可以利用擦寫(xiě)程序?qū)form.dat文件中的數(shù)據(jù)在線(xiàn)寫(xiě)到FLASH的8000H FFFFH地址段(首地址為8000H)。

  2.3 在線(xiàn)擦寫(xiě)FLASH程序

  ;先將FLAsH讀寫(xiě)跳線(xiàn)設(shè)置為寫(xiě)方式

  ;*****FLASH_ erase_ wr.asm******

  .mmregs

  .global-C int00,start,F(xiàn)LASHWR,F(xiàn)LASHERASE

  FLASHMEMl .set 0xd555

  FLASHMEM2 .set 0xaaaa

  .data

  WORDBEGIN:

  .copy "cform.dat"

  WORDEND:

  .text

  _c_int00:B start

  NOP

  NOP

  start:

  STM #0,STO

  STM #0100001101011 11 1b,STl

  NOP

  RSBX SXM

  STM #0010000000100100b,PMST

  NOP

  STM #0aoh,SP

  NOP

  NOP

  STM #7fffh,SWWSR

  NOP

  STM #0,CLKMD

  NOP

  NOP

  STM #17ffh.CLKMD

  NOP

  RPT #255

  NOP

  NOP

  MAIN:

  CALL FLASHERASE

  STM #WORDBEGIN,ARO

  STM #0x8000,Arl

  LD #WORDEND,A

  AND #0xffff,A

  LDM ARO,B

  AND #0xffff,B

  SUB B,A

  NOP

  STLM A,AR2

  STM #8000h,AR3

  NOP

  WRRPT:

  NOP

  LD *AR0+,B

  CALL FLASHWR

  NOP

  BANZ WRRPT,*AR2一

  NOP

  WRFFFF:

  STM #0xffff,Arl

  LD #0x8000,B

  CALL FLASHwr

  NOP

  NOP

  B Mainend

  FLAsHERAsE: ;FLASH擦除程序

  NOP

  LD #0xaa,A

  STL A。*(FLASHMEMl)

  NOP

  NOP

  LD#0x55,A

  STL A,*(FLASHMEM2)

  NOP

  NOP

  LD #0x80,A

  STL A,*(FLASHMEMl)

  NOP

  NOP

  LD #0xaa,A

  STL

  NOP

  NOP

  LD

  STL

  NOP

  NOP

  A,*(FLASHMEMl)

  #Ox55,A

  A,*(FLASHMEM2)

  LD #OxlO,A

  STL A,*(FLASHMEMl)

  NOP

  NOP

  NOP

  RET

  FLAsHwR: ;FLAsH擦除程序

  STM #Ox7fff,SWWSR

  NOP

  NOP

  LD #Oxaa,A

  STL A,*(FLASHMEMl)

  NOP

  NOP

  LD #Ox55,A

  NOP

  NOP

  STL A,*(FLASHMEM2)

  NOP

  NOP

  NOP

  LD#OxaO,A

  NOP

  NOP

  STL A,*(FLASHMEMl)

  NOP

  NOP

  NOP

  STL B,*AR3+

  NOP

  NOP

  NOP

  NOP

  NOP

  STM Ox7 000。SWWSR

  RET

  MAINEND:

  End

  3 結(jié) 語(yǔ)

  利用上述方法將程序燒寫(xiě)入FIASH后,復(fù)位TMS320C5402,使其處于微計(jì)算機(jī)工作方式;將FLASH讀寫(xiě)跳線(xiàn)設(shè)置為讀方式。系統(tǒng)重新加電后,在CCS中觀(guān)察數(shù)據(jù)存儲(chǔ)器空間,其中FLASH所占的空間的內(nèi)容與cform.dat文件的內(nèi)容應(yīng)一致。



關(guān)鍵詞: TMS320VC33

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉