天天被操天天被操综合网,亚洲黄色一区二区三区性色,国产成人精品日本亚洲11,欧美zozo另类特级,www.黄片视频在线播放,啪啪网站永久免费看,特别一级a免费大片视频网站

現(xiàn)在位置:范文先生網(wǎng)>理工論文>電子通信論文>TMS320C5410燒寫Flash實(shí)現(xiàn)并行自舉引導(dǎo)

TMS320C5410燒寫Flash實(shí)現(xiàn)并行自舉引導(dǎo)

時(shí)間:2023-02-21 00:14:01 電子通信論文 我要投稿
  • 相關(guān)推薦

TMS320C5410燒寫Flash實(shí)現(xiàn)并行自舉引導(dǎo)

  摘要:介紹在TMS320C5410環(huán)境下對(duì)Am29LV200BFlash存儲(chǔ)器進(jìn)行程序燒寫,并且實(shí)現(xiàn)了TMS320C5410上電后用戶程序并行自舉引導(dǎo)。
  關(guān)鍵詞:Am29LV200BFlashDSP并行自舉引導(dǎo)自舉表
  
  Flash是一種可在線進(jìn)行電擦寫,掉電后信息不丟失的存儲(chǔ)器。它具有低功耗、大容量、擦寫速度快等特點(diǎn),并且內(nèi)部嵌入算法完成對(duì)芯片的操作,因而在數(shù)字信號(hào)處理系統(tǒng)中得到了廣泛的應(yīng)用。本文通過一個(gè)完整的實(shí)例,介紹Am29LV200BFlash存儲(chǔ)器的燒寫方法,實(shí)現(xiàn)TMS320C5410(以下簡稱C5410)上電后用戶程序的并行自舉引導(dǎo)。
  
  1Am29LV200BFlash存儲(chǔ)器
  
  1.1Flash存儲(chǔ)器簡介
  
  Am29LV200B是AMD公司生產(chǎn)的Flash存儲(chǔ)器,其主要特點(diǎn)有:3V單電源供電,可使內(nèi)部產(chǎn)生高電壓進(jìn)行編程和擦除操作;支持JEDEC單電源Flash存儲(chǔ)器標(biāo)準(zhǔn);只需向其命令寄存器寫入標(biāo)準(zhǔn)的微處理器指令,具體編程、擦除操作由內(nèi)部嵌入的算法實(shí)現(xiàn),并且可以通過查詢特定的引腳或數(shù)據(jù)線監(jiān)控操作是否完成;可以對(duì)任一扇區(qū)進(jìn)行讀、寫或擦除操作,而不影響其它部分的數(shù)據(jù)。本文中128K×16位Am29LV200BFlash映射為C5410的片外數(shù)據(jù)存儲(chǔ)空間,地址為:0x8000~0xFFFF,數(shù)據(jù)總線16位,用于16位方式的并行引導(dǎo)裝載。128K的FlashROM用32K地址分四頁進(jìn)行訪問,上電加載程序時(shí)使用FlashROM的第3頁。
  
  1.2Flash存儲(chǔ)器的操作命令
  
  向Flash存儲(chǔ)器的特定寄存器寫入地址和數(shù)據(jù)命令,就可對(duì)Flash存儲(chǔ)器編程,但要按一定的順序操作,否則就會(huì)導(dǎo)致Flash存儲(chǔ)器復(fù)位。由于編程指令不能使"0"寫為"1",只能使"1"變?yōu)?0",而擦除命令可使"0"變?yōu)?1",所以正確順序是先擦除,后編程。下面就介紹幾個(gè)常用的操作命令:編程命令、擦除命令、讀數(shù)據(jù)命令、復(fù)位命令。
  
 、倬幊堂睢T撁钕騀lash的指定地址中寫入數(shù)據(jù),需要四個(gè)總線周期,前兩個(gè)是解鎖周期,第三個(gè)是建立編程命令,最后一個(gè)周期完成向編程地址中寫入編程數(shù)據(jù),如表1所列。
  
  表1編程命令
  
  周期1(解鎖)2(解鎖)3(建立)4(編程)地址0x5550x2AA0x555pa(編程地址)數(shù)據(jù)0xAA0x550xA0pa(編程數(shù)據(jù))
  由于向每個(gè)編程地址寫入數(shù)據(jù)都需要四個(gè)周期,所以在循環(huán)寫Flash時(shí)使用宏比較簡單。FlashROM的首地址為0x8000,故偏移地址0x555對(duì)應(yīng)物理地址就為0x8555。編程程序如下:
  
  _WRITECOMMAND.macropa,pd;單一周期編程的寫命
  
 。涣詈,pa是編程地址,pd是編程數(shù)據(jù)
  
  PSHMAR1
  
  STMpa,AR1;AR1指向編程地址
  
  LDpd,A
  
  STLA,*AR1;把編程數(shù)據(jù)放入AR1的編程地址中
  
  RPT#12
  
  NOP
  
  POPMAR1
  
  .endm
  
  _WRITEFlash.macropar,pdr;編程宏,par是編程地址寄存
  
 。黄,pdr是存放編程數(shù)據(jù)的寄存器
  
  _WRITECOMMAND#8555H,#0AAH;周期1(解鎖)
  
  _WRITECOMMAND#82AAH,#055H;周期2(解鎖)
  
  _WRITECOMMAND#8555H,#0A0H;周期3(建立)
  
  LDpdr,A;周期4(編程)
  
  STLA,par;把pdr寄存器中數(shù)據(jù)放入par
  
 ;寄存器的地址中
  
  RPT#12
  
  NOP
  
  _JUDGEpar,pdr;檢測編程是否正確,見Flash
  
 。坏牟僮鳈z測
  
  .endm
  
  _WRITECOMMAND是實(shí)現(xiàn)一個(gè)周期編程的寫命令宏,而_WRITEFlash是完成對(duì)指定地址編程的四個(gè)完整周期。
  
  表2擦除命令
  
  周期1(解鎖)2(解鎖)3(建立)4(解鎖)5(解鎖)6(片擦除)6(扇區(qū)擦除)地址0x5550x2AA0x5550x5550x2AA0x555SA(扇區(qū)地址)數(shù)據(jù)0xAA0x550x800xAA0x550x100x30
 、诓脸睢T撁钣衅脸蜕葏^(qū)擦除兩種,都需要6個(gè)總線周期,前兩個(gè)解鎖周期,第三個(gè)建立周期,四、五兩個(gè)解鎖周期,最后是片擦除或扇區(qū)擦除周期,如表2所列。一旦執(zhí)行編程或擦除命令后,就啟動(dòng)Flash的內(nèi)部編程或擦除算法,自動(dòng)完成編程或擦除操作。擦除程序如下:
  
  _ERASEFlash.macro;擦除宏
  
  _WRITECOMMAND#8555H,#0AAH;周期1(解鎖)
  
  _WRITECOMMAND#82AAH,#055H;周期2(解鎖)
  
  _WRITECOMMAND#8555H,#080H;周期3(建立)
  
  _WRITECOMMAND#8555H,#0AAH;周期4(解鎖)
  
  _WRITECOMMAND#82AAH,#055H;周期5(解鎖)
  
  _WRITECOMMAND#8555H,#010H;周期6(片擦除)
  
  STM#8555H,AR3
  
  LD#010H,A
  
  STLA,*AR5
  
  _JUDGE*AR3,*AR5;檢測是擦除結(jié)束,見Flash的
  
 ;操作檢測
  
  .endm
  
  ③讀數(shù)據(jù)命令。上電或內(nèi)部編程、擦除操作結(jié)束后就進(jìn)入讀數(shù)據(jù)狀態(tài),寫入要讀取的地址即可讀出該地址的數(shù)據(jù)。
  
 、軓(fù)位命令。它使存儲(chǔ)器復(fù)位,進(jìn)入讀數(shù)據(jù)狀態(tài),向任何一個(gè)地址寫入數(shù)據(jù)0xF0就能使Flash存儲(chǔ)器復(fù)位。在進(jìn)行編程、擦除之前,都應(yīng)先復(fù)位,在編程或擦除等正常操作中出現(xiàn)錯(cuò)誤時(shí)也要復(fù)位。復(fù)位程序如下:
  
  _RESETFlash.macro
  
  _WRITECOMMAND#8001H,#0F0H
  
  ;向8001H寫入0F0H使Flash復(fù)位
  
  RPT#12
  
  NOP
  
  .endm
  
  1.3Flash的操作檢測
  
  Flash內(nèi)部的編程或擦除算法可自動(dòng)完成編程或擦除操作,但我們必須了解其內(nèi)部的操作檢測機(jī)制,以便知道操作是否完成或正確。常用檢測的狀態(tài)位有:跳變位(DQ6)、超時(shí)標(biāo)志位(DQ5)、數(shù)據(jù)查詢位(DQ7)和Ready/Busy引腳(RY/)。檢測的方法有三種。第一種是判斷引腳RY/的狀態(tài),在編程、擦除或擦除掛起操作過程中,RY/引腳一直為"0",操作完成后變?yōu)?1"。第二種是檢測跳變位DQ6,在編程或擦除時(shí)對(duì)任何地址進(jìn)行連續(xù)的讀均引起DQ6連續(xù)跳變,直至操作結(jié)束才停止跳變。最后一種是使用數(shù)據(jù)線的DQ7、DQ5:DQ7位在編程或擦除過程中輸出的數(shù)是寫入該位數(shù)據(jù)的反碼,當(dāng)操作完成時(shí)輸出才變?yōu)閷懭朐撐坏臄?shù)據(jù);DQ5的狀態(tài)為"1"時(shí)表示操作超時(shí),此時(shí)應(yīng)再讀一次DQ7的狀態(tài),若DQ7輸出仍不是寫入的數(shù)據(jù),則操作失敗,復(fù)位Flash,其流程如圖1所示。
  
  檢測程序如下:
  
  _JUDGE.macropar,pdr;檢測宏程序。par是編程地址寄存
  
  ;器,pdr是存放編程數(shù)據(jù)的寄存器
  
  _JUDGEBEGIN?:PSHMAR1
  
  LDpdr,B;獲取寫入的數(shù)據(jù)
  
  AND#00FFh,B;取被寫入數(shù)據(jù)的DQ7~DQ0
  
  LDpar,A;讀被燒寫地址的數(shù)據(jù)
  
  AND#00FFh,A;取DQ7~DQ0
  
  STLA,TEMP;保存
  
  LDA,-7,A;讀DQ7狀態(tài)
  
  XORB,-7,A;是否是反碼?
  
  BC_JUDGESUCCESS?,AEQ
  
  ;DQ7不是反碼而是寫入數(shù)據(jù)表示操作成功
  
  BITFTEMP,#20h
  
  BC_JUDGEBEGIN?,ntc
  
  ;DQ5=1表示操作超時(shí)
  
  LDpar,A;再讀被燒寫地址的數(shù)據(jù)
  
  AND#00FFh,A
  
  LDA,-7,A
  
  XORB,-7,A
  
  BC_JUDGESUCCESS?,AEQ
  
  ;DQ7不是寫入數(shù)據(jù),表示操作失敗
  
  _JUDGEERRO?
  
  _RESETFlash;復(fù)位Flash
  
  _JUDGESUCCESS?
  
  POPMAR1
  
  .endm
  
  2C5410的自舉引導(dǎo)
  
  脫離仿真器獨(dú)立運(yùn)行程序一般有兩種方式:一種是上電后用戶程序直接在Flash存儲(chǔ)器中運(yùn)行,這種運(yùn)行速度比較慢;另一種是上電或復(fù)位后將用戶程序從Flash存儲(chǔ)器引導(dǎo)到高速數(shù)據(jù)存儲(chǔ)器中運(yùn)行,此方法最常用,可以較低的成本實(shí)現(xiàn)高速的運(yùn)行。為了實(shí)現(xiàn)這個(gè)過程就必須運(yùn)用DSP自舉引導(dǎo)功能。
  
  (1)自舉引導(dǎo)
  
  C5410上電復(fù)位后,首先檢查MP/MC狀態(tài):如果為高電平,說明DSP處于微處理器工作方式,即從外部程序存儲(chǔ)器0FF80H地址開始執(zhí)行用戶程序;若為低電平,說明DSP被設(shè)置為微計(jì)算機(jī)工作方式,從片內(nèi)ROM的0FF80H地址開始執(zhí)行程序。0FF80H地址存放的是中斷向量表,它實(shí)為一條分支轉(zhuǎn)移指令(BD0F800H),使程序跳轉(zhuǎn)至0F800H執(zhí)行自舉引導(dǎo)程序(Bootloader)。Bootloader是固化在DSP芯片內(nèi)ROM中的一段程序代碼,其功能是將用戶程序從外部加載至片內(nèi)RAM或擴(kuò)展的RAM中,使其高速運(yùn)行。在搬運(yùn)程序之前,Bootloader首先完成初始化工作:使中斷無效,內(nèi)部RAM映射到程序/數(shù)據(jù)區(qū)(OVLY=1),對(duì)程序和數(shù)據(jù)區(qū)均設(shè)置7個(gè)等待狀態(tài)等。C5410有以下幾種自舉引導(dǎo)方式:主機(jī)接口HPI、并行口(8/16位)、標(biāo)準(zhǔn)串行口(MCBSP0是16位引導(dǎo)模式,MCBSP2是8位引導(dǎo)模式)以及I/O口(8/16位)自舉引導(dǎo)方式。
  
  (2)并行自舉引導(dǎo)
  
  這種方式是比較常用的一種,外部存儲(chǔ)器的字寬為8位或16位。在自舉引導(dǎo)時(shí),通過外部并行接口總線將這些代碼從數(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)。所以,在燒寫Flash數(shù)據(jù)的同時(shí),也要在0FFFFH燒入自舉表的首地址。引導(dǎo)流程如圖2所示。
  
 。3)建立自舉表
  
  自舉表內(nèi)容不僅包括欲加載的各段代碼,而且包括各段代碼長度、各代碼段存放的目標(biāo)地址、程序入口地址等信息。若要完成自舉引導(dǎo)功能,必須建立正確的自舉表。自舉表可以由hex500格式轉(zhuǎn)換器自動(dòng)生成;也可以手動(dòng)建立自舉表,就是把被燒寫的程序直接放在燒寫程序中,根據(jù)被燒寫程序的相關(guān)信息手動(dòng)建立自舉表。
  
  3C5410燒寫Flash和并行自舉引導(dǎo)
  
  下面通過一個(gè)Flash燒寫實(shí)例,介紹怎樣將用戶程序燒寫進(jìn)Flash,以及怎樣手動(dòng)建立自舉表,并且脫離仿真器以并行自舉引導(dǎo)方式使用戶程序獨(dú)立運(yùn)行。被燒寫和燒寫程序如下:
  
  .title"FLASH"
  
  .mmregs
  
  SWCR.set002BH
  
  TEMP.set0060H
  
  .data
  
  .sect".BOOT"
  
  .labelBOOTTABLE;自舉表開始
  
  .word10AAH;16位自舉標(biāo)記
  
  .word7FFFH;7個(gè)等待周期(SWWSR)
  
  .word0F000H;塊轉(zhuǎn)換寄存器(BSCR)
  
  .word0000h;程序入口XPC
  
  .word0200h;程序入口地址(MAIN_START)
  
  .wordLOADEND-LOADSTART
  
  ;程序塊長度(0116H)
  
  .word0000h;存放目標(biāo)XPC
  
  .word0100h;存放目標(biāo)地址
  
  LOADSTART:;中斷向量表開始地址
  
  .copy"vector.asm";復(fù)位處跳轉(zhuǎn)MAIN_START
  
  MAIN_START:;被燒寫的主程序
  
  STM#0F7h,SP
  
  STM#012Ch,PMST
  
  ;IPTR=01(中斷向量指針為100,指向目標(biāo)地址),MP/MC=0,OVLY=1,AVIS=0,DROM=1,CLKOFF=1
  
  LOOPF:RSBXXF;XF置低
  
  CALLDELAY;延時(shí)
  
  SSBXXF;XF置高
  
  CALLDELAY
  
  BLOOPF
  
  DELAY:PSHMAR6
  
  STM#0090H,AR6
  
  DELAY_LOOP:
  
  RPT#0FF0h
  
  NOP
  
  BANZDELAY_LOOP,*AR6-
  
  POPMAR6
  
  RET
  
  LOADEND;被燒寫的程序結(jié)束
  
  .space20h
  
  .mmregs
  
  .labelFINDTABLE
  
  .word8000h
  
  .text
  
  ERASE_WRITE_Flash:;燒寫程序開始
  
  STM#0FFA0H,PMST
  
  STM#07FFFH,SWWSR
  
  STM#0FFFFH,SWCR
  
  _RESETFlash;Flash復(fù)位
  
  _ERASEFlash;擦除Flash
  
  WRIFlashSTART:;開始編程Flash
  
  SSBXSXM
  
  RSBXOVM
  
  _RESETFLASH;Flash復(fù)位
  
  STM#8000H,AR0;Flash起始地址8000H
  
  STMBOOTTABLE,AR5;被燒寫的源地址(自舉
  
 ;表首地址)
  
  STM#(LOADEND-BOOTTABLE),AR4
  
  ;寫入011E個(gè)字
  
  WRI_RPT
  
  _WRITEFlash*AR0,*AR5;調(diào)入編程宏
  
  LD*AR0+,A
  
  LD*AR5+,A;完成AR0和AR5地址自動(dòng)加1
  
  BANZWRI_RPT,*AR4-
  
  STM#0FFFFH,AR0;AR0指向數(shù)據(jù)空間的FFFF
  
  ;地址
  
  STMFINDTABLE,AR5
  
  _WRITEFlash*AR0,*AR5;向數(shù)據(jù)空間的FFFF
  
  ;地址寫入自舉表的首地址8000H
  
  ENDD:NOP
  
  BENDD
  
  .end
  
  被燒寫的主程序是從MAIN_START開始,一直到LOADEND。程序的主要功能是不斷改變XF引腳的狀態(tài)。LOADSTART是中斷向量文件(vector.asm)的開始,在中斷復(fù)位(RESET)處放入一條跳轉(zhuǎn)到MAIN_START指令(BDMAIN_START)。ERASE_WRITE_FLASH是燒寫程序的開始,只要程序指針(PC)指向ERASE_WRITE_FLASH,開始運(yùn)行就可以完成對(duì)Flash的燒寫操作。從自舉表首地址BOOTTABLE(0F8H)到LOADEND(0216H)存放的數(shù)據(jù)就是要寫入Flash的內(nèi)容,從LOADSTART到LOADEND的數(shù)據(jù)是DSP自舉程序從Flash搬運(yùn)到片內(nèi)RAM的程序,具體如下:
  
  00F8H:BOOTTABLE;自舉表開始
  
  0100H:LOADSTART;中斷向量表首地址
  
  0100H:RESET:BDMAIN_START
  
  ...;中斷向量表的內(nèi)容
  
  0178H:RESERVED
  
  0200H:MAIN_START
  
  ...;主程序
  
  0216H:LOADEND
  
  被燒寫的程序只需一個(gè)段,根據(jù)以上信息就可以完成自舉表的內(nèi)容,如表3所列。
  
  表1自舉表
  
  數(shù)據(jù)區(qū)地址內(nèi)容含義8000H10AA16位自舉標(biāo)記8001H7FFFSWWSR8002HF000BSCR8003H0000程序入口XPC8004H0200程序入口地址8005H0123程序段長度8006H0000存放目標(biāo)XPC8007H0100存放目標(biāo)地址8008HF273程序代碼18009H0200程序代碼2………………811DHFC00程序代碼811EH0000結(jié)束………………FFFFH8000自舉表存放首地址
  整個(gè)并行自舉引導(dǎo)過程為:C5410上電復(fù)位后,判斷MP/MC=0處于微計(jì)算機(jī)工作方式,從片內(nèi)ROM的0FF80H處執(zhí)行中斷向量表的分支轉(zhuǎn)移指令(BD0F800H),使程序跳轉(zhuǎn)至0F800H處執(zhí)行自舉引導(dǎo)程序。自舉引導(dǎo)程序完成初始化后,讀取數(shù)據(jù)空間的0FFFFH地址的內(nèi)容,找到自舉表首地址8000H,從8000H處開始讀取內(nèi)容。首先,是16位自舉標(biāo)記(10AA)。然后分別是寄存器SWWSR及BSCR的內(nèi)容,程序入口地址、代碼段長度、存放代碼段的目標(biāo)地址等信息。最后,根據(jù)這些信息把Flash的8008H到811EH的程序搬運(yùn)到片內(nèi)RAM的100H開始的地址中,跳轉(zhuǎn)至片內(nèi)RAM100H、即PC為100H、XPC為0,開始執(zhí)行用戶程序,完成用戶程序的并行自舉過程。
  
  結(jié)語
  
  把程序燒寫入Flash后,復(fù)位C5410,使其處于微計(jì)算機(jī)工作方式;使用示波器測試XF引腳,觀察程序運(yùn)行正確與否。通過上述方法可完成C5410對(duì)Am29LV200BFlash的燒寫,很好地實(shí)現(xiàn)了C5410上電后的用戶程序自舉引導(dǎo)功能。
  
  
  
  

【TMS320C5410燒寫Flash實(shí)現(xiàn)并行自舉引導(dǎo)】相關(guān)文章:

TMS320VC5416并行自舉的巧妙實(shí)現(xiàn)08-06

DSP外掛Flash在系統(tǒng)編程及并行引導(dǎo)裝載方法08-06

DSP+FLASH引導(dǎo)裝載系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)08-06

TMS320C6x DSP的FLASH引導(dǎo)方法研究與實(shí)現(xiàn)08-06

HPI自舉在TMS320VC5402芯片上的實(shí)現(xiàn)08-06

在DSP處理器上并行實(shí)現(xiàn)ATR算法08-06

利用Flash實(shí)現(xiàn)DSP對(duì)多個(gè)程序有選擇的加載08-06

TMS320VC5402外部并行引導(dǎo)裝載方法的研究08-06

TMS320VC5402的并行引導(dǎo)裝載方案的研究與設(shè)計(jì)08-06