FBTC程序編寫_第1頁
FBTC程序編寫_第2頁
FBTC程序編寫_第3頁
FBTC程序編寫_第4頁
FBTC程序編寫_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、基于DM642的FBTC程序的編寫1、 引言在嵌入式系統(tǒng)開發(fā)過程中,把編寫好的應用程序燒寫進目標板的Flash以實現(xiàn)系統(tǒng)的上電自舉是非常重要的一個環(huán)節(jié)。對于嵌入式DSP系統(tǒng),我們常使用FlashBurn System來對Flash進行燒寫。FlashBurn System由兩部分組成,分別是FlashBurn應用軟件(application)和FBTC(FlashBurn Target Component)程序(program)。FlashBrun的工作原理如圖1所示:圖1FlashBurn應用軟件提供用戶操作界面,把FBTC程序通過ccs和JTAG仿真器下載到DSP目標板中,由FBTC程序對

2、FLASH存儲空間進行操作和管理,并把用戶程序下載到FLASH存儲器中。由此可見,F(xiàn)lashBurn應用軟件就相當于廠房里的各種機器設備,而FBTC程序則是生產(chǎn)和操作規(guī)程。從某種意義來說FlashBurn是硬件,而FBTC是軟件,在相同的FlashBurn里應用不同的FBTC會得到完全不一樣的效果。事實上,當CCS、DSP目標板、仿真器、FlashBurn或FLASH芯片的型號不一樣時,F(xiàn)BTC程序就應做相應的改變,以成功地將用戶程序燒寫到FLASH中。本文試著將這些改變剖析一下。二、需要說明的問題本文使用的各種工具有CCS3.3、DM642EVM開發(fā)板、XDS560 JTAG 仿真器、Fla

3、shburn 2.80,需要燒寫的FLASH芯片是AMD公司的AM29LV033C。該FLASH的容量是4Mbytes(0X400000),在DM642上對應的存儲空間位于CE1 EMIF,其首地址是0X90000000。該款FLASH芯片的datasheet如圖2: 圖2從上圖可知:1)向flash的任意位置寫入序列0xAA, 0x55, 0x80, 0xAA, 0x55, 0x10,表示擦出該位置的數(shù)據(jù);2)寫入0xf0表示將flash設置為讀模式;3)序列0xAA, 0x55, 0xA0后加上一字節(jié)的數(shù)據(jù)表式將該數(shù)據(jù)寫入到flash的某一位置上。本文所舉的例子是在FBTC6416程序的基

4、礎上修改而成的,該程序所在的文件可以在FlashBurn的安裝文件中找到。之所以選擇TEB6416,是因為它和DM642屬于同一個ISA(Instruction Set Architecture)家族。三、得到FBTC642的步驟。(1)將FBTC6416文件夾復制到你自己的工作區(qū)域,將文件名和文件中所有的6416改成642。用記事本打開.pjt文件,將里面的TEB6416改成DM642,將ProjectDir=C:ccFlashBurnpitvobFlashBurnersrcFBTCTEB6416引號里內(nèi)容改成你現(xiàn)在的工程文件所在的路徑。保存后,在ccs里打開該工程文件,將build opt

5、ion 設置為Full Debug和 No Optimization后編譯,鏈接。(2)修改FLASH的起始地址和大小。在文件dm642.h中:將“#define FLASH_SIZE0x80000” 改成“#define FLASH_SIZE 0x40000”將“#define FLASH_START 0x64000000”改成“#define FLASH_START 0x90000000”將“#define CE1_8 0xffffff03”改成 “#define CE1_8 0xF3A88E02”將 “#define CE1_320xffffff23”改成 “#define CE1_32

6、 0xF3A88E22”(3)FLASH的尋址。FlashBurn把flash image 當做是從下標為0開始的一個字節(jié)流,F(xiàn)BTC程序要做的就是把這一字節(jié)流和實際地址一一對應起來,這一任務由FBurnCmd.c里的相關函數(shù)實現(xiàn),另外還需要編寫一個新的函數(shù)SetFlashPage()來設置FPGA的頁寄存器。即在FBurnCmd.c里添加如下代碼:void SetFlashPage(FLASH_IMAGE_INDEX_TYPE index) PTR_SIZED_INT addr = (u32)GetFlashBase() + index; *FLASH_PAGE = (addr & 0x38

7、0000) 19;(4)把FLASH設置為讀狀態(tài)。這一功能由函數(shù)ResetFlash()實現(xiàn)。根據(jù)FLASH的datasheet,其代碼應為:void ResetFlash() volatile FLASH_DATA_TYPE* volatile flashaddr; flashaddr = GetFlashAddr(0); /* Dont care what address is used */ *flashaddr = 0xF0;這里不用修改。(5)從FLASH中讀取數(shù)據(jù)這一功能由函數(shù)GetNextFlashAddr,GetFlashVal(), SendFlashBufToHost()聯(lián)

8、合實現(xiàn),第一個函數(shù)負責尋址,第二個負責取數(shù),第三個負責傳數(shù)。在文件FBurnCmd.c中:函數(shù)GetFlashVal()改成, u8 GetFlashVal(unsigned long addr)*FLASH_PAGE = (u8)(u32)addr & 0x380000) 19);return *(volatile u8 *)(addr & 0xffc7ffff);(6)擦除FLASH此功能由函數(shù)EraseFlash()實現(xiàn),由此型號的FLASH可知,其參考代碼如下:void EraseFlash(void) volatile FLASH_DATA_TYPE* volatile pBase

9、= GetFlashBase(); /* Code to erase AMD29LV033C */ *pBase = 0xAA; *pBase = 0x55; *pBase = 0x80; *pBase = 0xAA; *pBase = 0x55; *pBase = 0x10; CheckFlashErase(); ResetFlash(); return;(7)寫FLASH此功能由函數(shù)BurnFlash()完成,參考代碼如下:void BurnFlash(FLASH_IMAGE_INDEX_TYPE index, MSG_DATA_TYPE *data, u32 nBytes) u16 ti

10、meout; u8 c; volatile FLASH_DATA_TYPE* volatile flashaddr; FLASH_IMAGE_INDEX_TYPE i = index; volatile FLASH_DATA_TYPE* volatile pBase = GetFlashBase();#if DBPRINT printf(Burning %x bytes of flash at %xn, nBytes, flashaddr);#endif while(nBytes-) flashaddr = GetFlashAddr(i); SetFlashPage(i); *pBase =

11、0xAA; *pBase = 0x55; *pBase = 0xA0; /* Write a byte */ *flashaddr = *data; /* Spin here until programming completes */ c = *data+; timeout = 0; do timeout += 1; while(*flashaddr != c & timeout (u16)0xffff) ; i+; ResetFlash();對于不同型號的FLASH,*pBase對應的值不同,對于不同的開發(fā)板就看是否有分頁。這些修改完成之后,就可以將整個工程進行編譯、連接,得到的FBTC642.o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論