DSP2812啟動過程WORD_第1頁
DSP2812啟動過程WORD_第2頁
DSP2812啟動過程WORD_第3頁
DSP2812啟動過程WORD_第4頁
DSP2812啟動過程WORD_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、文檔可能無法思考全面,請瀏覽后下載! 2812的內(nèi)部Flash啟動過程2812的內(nèi)部flash啟動過程2812從內(nèi)部flash啟動的詳細流程說明:a) 程序硬件復(fù)位或者軟件復(fù)位b) 判斷mp/mc是否為0c) 為0則從boot rom啟動,否則從外部啟動d) 到boot rom的0x3F FFC0處取出復(fù)位向量,跳到boot函數(shù)e) 采集IO管腳狀態(tài),f) 根據(jù)IO狀態(tài)選擇boot方式g) 如果是flash,程序退出boot函數(shù),跳轉(zhuǎn)到0x3F 7FF6h) 取出跳轉(zhuǎn)指令,跳轉(zhuǎn)到自己的指定地址或者C初始化的入口_C_INT00處i) 在C初始化的入口_C_INT00對一些變量,堆棧和寄存器進行

2、必要的設(shè)置,該函數(shù)在c的庫函數(shù)內(nèi)j) 進入main函數(shù)從上電到我們的主函數(shù)運行之間這段時間里2812到底做了些什么?2812是怎樣引導(dǎo)程序運行的?下面敘述其啟動過程。 在2812中引腳XMP/MC,當(dāng)該引腳的為高電平時表示是微處理器模式(microprocessor),為低電平時表示微機算計模式(microcomputer),當(dāng)為微處理器模式時,2812內(nèi)部的bootrom被禁止,通過zone7(0x3F C000)從外部調(diào)引導(dǎo)程序啟動。2812復(fù)位以后,其復(fù)位向量是固定的0x3FFFC0,如果為微處理器模式,那么復(fù)位后的復(fù)位向量指向的外部的地址,即0x3FFFC0是zone7處的地址,若為微

3、機算計模式,那么0x3FFFC0指向的是2812的片內(nèi)FLASH的地址。下面就以微機算計模式加以說明其過程。 上電復(fù)位后,復(fù)位向量是指向片內(nèi)Flash的0x3F FFC0,2812有一塊flash地址從0x3F F000-0x3F FFFF在出廠時已經(jīng)固化好了引導(dǎo)程序。在0x3F FFC0處是一條跳轉(zhuǎn)指令,跳到iniboot(地址0x3F FC00)函數(shù)處執(zhí)行iniboot代碼,該iniboot代碼就是TI在dsp出廠時固化在flash中的。InitBoot assembly Routine將選擇SelectBootMode function啟動模式函數(shù)。這個函數(shù)由GPIO 引腳的狀態(tài)決定啟動

4、類型。引導(dǎo)模式選擇GPIOF4GPIOF12GPIOF3GPIOF2(SCITXDA)(MDXA)(SPISTEA)(SPICLK)PUNo PUNo PUNo PUMode Selected1XXX跳轉(zhuǎn)到地址為0x3F7FF6的Flash,用戶必須在這里編寫分支語句優(yōu)先于復(fù)位,以按需要重新定位代碼的執(zhí)行.01XX調(diào)用SPI_Boot 以從外部的EEPROM載入24 / 280011調(diào)用SCI_Boot 以從SCI-A載入0010J跳轉(zhuǎn)到 H0 SARAM 0x3F 80000001跳轉(zhuǎn)到OTP地址 0x3D 78000000調(diào)用Parallel_Boot從GPIO 端口B載入一旦啟動結(jié)束,選

5、擇啟動模式函數(shù)返回一入口地址給InitBoot函數(shù)。入口地址是退出bootloader之后代碼開始執(zhí)行的起始點。InitBoot接著將會調(diào)用ExitBoot子程序,把CPU寄存器的狀態(tài)恢復(fù)到復(fù)位狀態(tài)。比如flash boot模式,那么initboot執(zhí)行完后跳轉(zhuǎn)到0x3F 7FF6處(codestart處),此位置剛好在128位(CSM)密碼位置之前,你要在0x3F 7FF6處放置跳轉(zhuǎn)指令,以跳轉(zhuǎn)到你要去的地方,比如是boot loader或應(yīng)用代碼,通常的跳轉(zhuǎn)去處是_c_int00。在0x3F 7FF6 處放置跳轉(zhuǎn)指令的方法如下(DSP281x_CodeStartBranch.asm中):.

6、sect codestartcode_start: .if WD_DISABLE = 1 LB wd_disable ;Branch to watchdog disable code .else LB _c_int00 ;Branch to start of boot.asm in RTS library .endif .if WD_DISABLE = 1 .textwd_disable: SETC OBJMODE EALLOW MOVZ DP, #7029h6 MOV 7029h, #0068h EDIS LB _c_int00 .endif.endMEMERY Page 0: .RAML0

7、 : origin = 0x008000, length = 0x001000 /* on-chip RAM block L0 */ OTP : origin = 0x3D7800, length = 0x000400 /* on-chip OTP */ FLASHD : origin = 0x3F0000, length = 0x002000 /* on-chip FLASH */ FLASHC : origin = 0x3F2000, length = 0x002000 /* on-chip FLASH */ FLASHA : origin = 0x3F6000, length = 0x0

8、01F80 /* on-chip FLASH */ CSM_RSVD : origin = 0x3F7F80, length = 0x000076 BEGIN : origin = 0x3F7FF6, length = 0x000002 .SECTIONS . /* Allocate program areas: */ .cinit : FLASHA PAGE = 0 .pinit : FLASHA, PAGE = 0 .text : FLASHC PAGE = 0 codestart : BEGIN PAGE = 0 ramfuncs : LOAD = FLASHD, RUN = RAML0

9、, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), PAGE = 0 csmpasswds : CSM_PWL PAGE = 0 csm_rsvd : CSM_RSVD PAGE = 0 /* Allocate uninitalized data sections: */ .stack : RAMM0 PAGE = 1 .ebss : RAML1 PAGE = 1 .esysmem : RAML1 PAGE = 1 /* For SDFlash to progra

10、m these, they must be allocated to page 0 */ .econst : FLASHA PAGE = 0 .switch : FLASHA PAGE = 0 . 上面代碼執(zhí)行后跳到C初始化的入口_c_int00(0x3F6000) ,在C初始化的入口,_c_int00對一些變量,堆棧和寄存器進行必要的設(shè)置,這個函數(shù)在運行支持庫(rts.lib)中,_c_int00函數(shù)為建立C運行環(huán)境,需完成以下工作:a. 為系統(tǒng)堆棧產(chǎn)生.stack塊,并初始化堆棧指針;b. 從.cinit塊將初始化數(shù)據(jù)拷貝到.bss塊中相應(yīng)的變量;c. 對寄存器進行必要的配置,調(diào)用main

11、函數(shù)開始運行C程序;沒有過多的資料介紹_c_int00這塊,無法知道它的具體功能實現(xiàn)以及怎樣跳轉(zhuǎn)到主函數(shù)的,用戶可以對c_int00函數(shù)進行修改,但修改后的函數(shù)必須完成以上任務(wù)。TMS320F2812 flash運行時的啟動過程2812啟動過程與2407所用的傳統(tǒng)單片機的Vectors啟動模式不同,且仿真運行與脫離仿真器運行時差別較大,所以一開始比較難理解。其啟動過程可以分為Flash啟動、SPI_Boot、SCI_Boot、H0_Boot、Parallel_Boot等幾種模式,而最常用的就是內(nèi)部Flash運行,也就是將程序編譯好后通過JTAG口將程序 xx.out文件下載到芯片內(nèi)部falsh

12、中運行,所以此處就這種運行方式的啟動過程作一說明。圖1 2812內(nèi)部地址圖首先要搞清楚的就是2812的內(nèi)部地址,如圖1所示,(1)為放中斷向量表的RAM,中斷向量表在初始化中由用戶完成設(shè)置;(2)為放程序的Flash,其中最底的128Bits(8Words)存放Password用;(3)為BootRom,即專門為DSP啟動所設(shè)立的一塊ROM,其中內(nèi)容為廠家固化。由圖2可以更清晰地看到BootRom的內(nèi)容,其中0x3F F0000x3F FC00 放置的是IQmath庫中用到的函數(shù)表,0x3F FC000x3F FFC0放置的是Bootloader functions,最底部分放置的是Vecto

13、rTable。內(nèi)部Flash運行的啟動過程如圖3所示:圖2 2812內(nèi)部BootRom地址圖圖3 2812內(nèi)部Flash啟動過程a)程序硬件復(fù)位或者軟件復(fù)位 b)判斷mp/mc是否為0,微計算機模式(為1,當(dāng)為微處理器模式時,2812內(nèi)部的bootrom被禁止,通過zone7從外部調(diào)引導(dǎo)程序啟動。) c)為0則從boot rom啟動,否則從外部啟動(0x3F FC00) d)到boot rom的0x3F FC00處取出復(fù)位向量,跳到boot函數(shù):2812有一塊flash地址從0x3F F000-0x3F FFFF在出廠時ti已經(jīng)固化好了引導(dǎo)程序iniboot:Iniboot函數(shù)判斷幾個GPIO

14、引腳來判斷使用哪一種引導(dǎo)模式,比如flash boot模式,檢測SPICLKA,SCITXA,GPIO34的電平,當(dāng)都為高電平時表明是片內(nèi)flash boot模式,那么initboot執(zhí)行完后跳轉(zhuǎn)到0x3F 7FF6處) e)采集io管腳狀態(tài),確定啟動模式。2812提供幾種啟動模式: SCITXDA(GPIOF4) MDXA(GPIOF12) SPISTEA(GPIOF3) SPICLK(GPIOF2) 1 x x x FLASH啟動 0 1 x x SPI啟動 0 0 1 1 SCI啟動 0 0 0 0 PARALLEL啟動 f)根據(jù)io狀態(tài)選擇boot方式 g)如果是flash,程序退出b

15、oot函數(shù),跳轉(zhuǎn)到0x3F 7FF6(codestart) h)取出跳轉(zhuǎn)指令,跳轉(zhuǎn)到自己的指定地址或者C初始化的入口_C_INT00(0x3F6000)處(DSP281x_CodeStartBranch.asm中) i)在C初始化的入口_C_INT00對一些變量,堆棧和寄存器進行必要的設(shè)置,該函數(shù)在c的庫函數(shù)內(nèi)(RTS Library) j)進入main函數(shù)(0x3F658E)注:1根據(jù)INTER NET上別人的資料,以及針對程序的推敲,總結(jié)如上。 2地址均為我程序?qū)嶋H觀測到的值,和網(wǎng)上別人所言有出入。如:有言boot rom地址為0x3F FFC0,iniboot(起始地址0x3F FB50

16、)。dsp2812燒寫經(jīng)驗總結(jié) 收藏 1、一般不用你換GEL.LIB文件,用原來的就可以.2、換完FLASH的CMD后,不要燒寫,看下.MAP文件,主要是看 0X3F 7FF8處有沒有燒內(nèi)容.如果有別燒,改,直到這處沒有燒入內(nèi)容. 一般網(wǎng)上的都可以用,只要沒有在此出燒入內(nèi)容3、如果沒有燒入其他的內(nèi)容,則可以燒了.燒完后,RESET CPU 看是不是到 0X3F FFC0處,如果不是,看 是不是你的MP/MC=0了,并且是不是FLASH啟動模式,即所有4個腳都是高(只要第一個腳是高就可以,即 1XXX)4、如果RESET CPU 是到 0X3F FFC0處,即可以斷電,并且拔掉與板子相連的仿真器

17、接口(注意拔電腦上的USB不好使),然后上電,自動運行.注意:其中遇到的問題:燒寫時說 初始化RAM,和尋找BOOT.ASM都不用管_如果說是 NOT AN execuTivefile ,則在PROJECT_BULIT OPTION_LINK_OUT MODLE _absolute file最重要是可以斷電,并且拔掉與板子相連的仿真器接口(注意拔電腦上的USB不好使),然后上電,自動運行.我遇到的是這些,我用以上方法解決了,但不知道為什么,所以大家都說說經(jīng)驗,讓新手燒走彎路,少LOCK28122812從內(nèi)部flash啟動的過程 a)程序硬件復(fù)位或者軟件復(fù)位 b)判斷mp/mc是否為0,微計算機

18、模式(為1,當(dāng)為微處理器模式時,2812內(nèi)部的bootrom被禁止,通過zone7從外部調(diào)引導(dǎo)程序啟動。) c)為0則從boot rom啟動,否則從外部啟動(0x3F FC00) d) 到boot rom的0x3F FC00處取出復(fù)位向量,跳到boot函數(shù):2812有一塊flash地址從0x3F F000-0x3F FFFF在出廠時ti已經(jīng)固化好了引導(dǎo)程序iniboot:Iniboot函數(shù)判斷幾個GPIO引腳來判斷使用哪一種引導(dǎo)模式,比如flash boot模式,檢測SPICLKA,SCITXA,GPIO34的電平,當(dāng)都為高電平時表明是片內(nèi)flash boot模式,那么initboot執(zhí)行完后

19、跳轉(zhuǎn)到0x3F 7FF6處) e)采集io管腳狀態(tài),確定啟動模式。2812提供幾種啟動模式 SCITXDA(GPIOF4) MDXA(GPIOF12) SPISTEA(GPIOF3) SPICLK(GPIOF2) 1 x x x FLASH啟動 0 1 x x SPI啟動 0 0 1 1 SCI啟動 0 0 0 0 PARALLEL啟動 f)根據(jù)io狀態(tài)選擇boot方式 g)如果是flash,程序退出boot函數(shù),跳轉(zhuǎn)到0x3F 7FF6(codestart) h)取出跳轉(zhuǎn)指令,跳轉(zhuǎn)到自己的指定地址或者C初始化的入口_C_INT00(0x3F6000)處(DSP281x_CodeStartBr

20、anch.asm中) i)在C初始化的入口_C_INT00對一些變量,堆棧和寄存器進行必要的設(shè)置,該函數(shù)在c的庫函數(shù)內(nèi)(RTS Library)j)進入main函數(shù)(0x3F658E)2812上電引導(dǎo)過程從上電到我們的主函數(shù)運行之間這段時間里2812到底做了些什么?2812是怎樣引導(dǎo)程序運行的?下面敘述其啟動過程。 在2812中引腳XMP/MC,當(dāng)該引腳的為高電平時表示是微處理器模式(microprocessor),為低電平時表示微機算計模式(microcomputer),當(dāng)為微處理器模式時,2812內(nèi)部的bootrom背禁止,通過zone7從外部調(diào)引導(dǎo)程序啟動。2812復(fù)位以后,其復(fù)位向量是

21、固定的0x3F FFC0,如果為為處理器模式,那么復(fù)位后的復(fù)位向量指向的外部的地址,即0x3F FFC0是zone7處的地址,若為微機算計模式,那么0x3F FFC0指向的是2812的片內(nèi)FLASH的地址。下面就以微機算計模式加以說明其過程。 上電復(fù)位后,復(fù)位向量是指向片內(nèi)Flash的0x3F FFC0,2812有一塊flash地址從0x3F F000-0x3F FFFF在出廠時已經(jīng)固化好了引導(dǎo)程序。在0x3F FFC0處是一條跳轉(zhuǎn)指令,跳到iniboot(地址0x3F FB50)函數(shù)處執(zhí)行iniboot代碼,該iniboot代碼就是ti在dsp出廠時固化在flash中的。Iniboot函數(shù)判

22、斷幾個GPIO引腳來判斷使用哪一種引導(dǎo)模式,比如flash boot模式,檢測SPICLKA,SCITXA,GPIO34的電平,當(dāng)都為高電平時表明是片內(nèi)flash boot模式,那么initboot執(zhí)行完后跳轉(zhuǎn)到0x3F 7FF6處,此位置剛好在128位(CSM)密碼位置之前,你要在0x3F 7FF6處紡織跳轉(zhuǎn)指令,以跳轉(zhuǎn)到你要去的地方,比如是boot loader或應(yīng)用代碼。在0x3F 7FF6 處放置跳轉(zhuǎn)指令的方法如下:.sect codestartcode_start: .if WD_DISABLE = 1 LB wd_disable ;Branch to watchdog disabl

23、e code .else LB _c_int00 ;Branch to start of boot.asm in RTS library .endif .if WD_DISABLE = 1 .textwd_disable: SETC OBJMODE EALLOW MOVZ DP, #7029h6 MOV 7029h, #0068h EDIS LB _c_int00 .endif.endMEMERY Page 0: . Start:origin = 0x3F 7FF6,length = 0x000002 . SECTIONS . Codestart : Start page 0 . 上面的代碼執(zhí)

24、行后跳到_c_int00處執(zhí)行,_c_int00執(zhí)行結(jié)束時調(diào)用用戶的主程序main,則后續(xù)就是你自己的程序的執(zhí)行了。本文來自CSDN博客,轉(zhuǎn)載請標明出處:新手小記:F2812燒寫問題的解決過程說在前面的話:由于是新手,今天解決的這個問題對于高手可能簡單得有點可笑,但這個解決過程我想還是值得分享一下的,謝謝進入該帖子的朋友。-問題描述:我用的是DEC2812,ccs3.3將仿真調(diào)試好的程序換了網(wǎng)上提供的標準flash.cmd和.lib文件后,重新編譯生成燒寫用的.out文件。但是在燒寫過程中提示:Warning: This program contains initialized RAM dat

25、a.It may run successfully under Code Composer Studiobut not as a standalone system because of this. Ifyour Flash program requires initialized data in RAM,you will need to write Flash code to initialize RAM memory.Erase/Program/Verify Operation succeeded-解決過程:1. 首先在論壇里找了半天,碰到這個問題的人還真不少,都說是.cmd文件的問題:“

26、這個問題是cmd中有程序?qū)懺诹薘AM中,看看改到Flash就可以了”。但是沒有具體的方法。我用的FLASH.cmd是網(wǎng)上下載的TI標準版,看了半天沒發(fā)現(xiàn)什么異常,只好查自己的程序,了解自己把一些變量初始化是放在main()之外,作為全局變量處理的。未必這些就是所謂“寫在RAM”的數(shù)據(jù)?因此我把這些變量初始化統(tǒng)統(tǒng)移到main()里面了。這下更慘,編譯都報錯了:declaration may not appear after executable statement in block第1步失敗!2. 由于在編譯期間還有如下報警,但是并不影響.out文件的生成,我就認為是這個報警導(dǎo)致燒寫過程中的問題

27、。 C:CCStudio_v3.3MyProjectssci_testflashFLASH.cmd, line 82: warning: (.const) not found warning: load address of uninitialized section .const ignored于是自己寫了個很短的串口通信程序,仿真通過后,用FLASH.cmd編譯,還是出現(xiàn)上述報警。不管了燒下去再說,發(fā)現(xiàn)一切正常,板子復(fù)位后可獨立運行??磥磉@個編譯報警似乎并不影響程序運行。3. 在google上用initialize RAM memory搜索,發(fā)現(xiàn)有個哥們的blog記載了同樣錯誤,他沒搭理,

28、直接復(fù)位運行,說是沒有問題。于是大喜,不管那么多,有報警也l燒寫進去再說。結(jié)果發(fā)現(xiàn)斷電復(fù)位讓程序單獨運行,通信根本不通。未必板子沒有跑起來?由于手上無示波器,立即在程序里加了定時器中斷,反復(fù)點亮目標板上的小燈,用來表征程序運行。再編譯,燒寫,期間報警照舊。斷電復(fù)位后,發(fā)現(xiàn)燈在閃爍,大喜,立即建立通信,結(jié)果燈不閃了,通信不通,程序顯然死掉了。反復(fù)進行了幾次,都是一樣的現(xiàn)象。很郁悶,只好又上網(wǎng)到處問,碰到同樣燒寫報警的人是多,但都說是.cmd文件的問題,又沒有具體的方法。4.看來還是.cmd文件的問題,在壇子里面搜索“.cmd”關(guān)鍵字的帖子,一篇篇翻看。突然發(fā)現(xiàn)一篇有關(guān).switch定義的帖子,突

29、然想起我的通信程序就是switch語句構(gòu)成。進去一看發(fā)現(xiàn)里面貼出的.cmd文件和我的不同。多了好幾項定義,其中就包括.switch。另外.const的定義也不一樣,直接定義到FLASHA中,不像我的標準版,又是loadFLASHA又是runRAML0L1,還有一堆_const_run,(.const)什么的。于是照著帖子修改我的FLASH.cmd,該加的加,.const的一堆語句都刪掉,直接定義到FLASHA。一編譯,居然又報錯了:說是我的rts2800_fl040914.lib里面的_const_run之類沒有定義。暈,剛剛才在.cmd中刪掉的,換了個.lib還是同樣報錯。暈了。真是越改麻煩

30、越多了。5.好了,直奔主題。最后又重新加載標準的FLASH.cmd,畢竟這個版本還是能生成.out文件的。想了半天,可能問題還是.switch定義上。第2.節(jié)中,我編的串口通信小程序的確也用了switch語句,但是數(shù)量很少,所以在.cmd中沒有.switch的定義,也能正常燒寫。正式的程序switch語句多,里面還有常量。于是硬著頭皮只在標準的FLASH.cmd中加了.switch定義。編譯, (.const) not found報警依舊;燒寫,居然順利通過!于是斷電復(fù)位,板子獨立運行,指示燈閃爍?,F(xiàn)在關(guān)鍵看通信,隨著串口調(diào)試助手上發(fā)送鍵的按下,我緊張到極點,瞬間,數(shù)據(jù)接收區(qū)顯示到接收到數(shù)據(jù)!

31、成功! 首先說下,我接觸2812也不久,遇到的問題只知道弄好了,但不知道原因,但我想把我說遇到的,清楚的說下,對新手有幫助。下面是正題:先說我遇到的一:正常的燒寫不用你換GEL.LIB文件,用原來的就可以.二:換完FLASH的CMD后,不要燒寫,看下.MAP文件,主要是看 0X3F 7FF8處有沒有燒內(nèi)容.如果有別燒,改,直到這處沒有燒入內(nèi)容. 一般網(wǎng)上的都可以用,只要沒有在此出燒入內(nèi)容三:如果沒有燒入其他的內(nèi)容,則可以燒了.燒完后,RESET CPU 看是不是到 0X3F FFC0處,如果不是,看 是不是你的MP/MC=0了,并且是不是FLASH啟動模式,即所有4個腳都是高(只要第一個腳是高

32、就可以,即 1XXX)四:如果RESET CPU 是到 0X3F FFC0處,即可以斷電,并且拔掉與板子相連的仿真器接口(注意拔電腦上的USB不好使),然后上電,自動運行.注意:其中遇到的問題:燒寫時說 初始化RAM,和尋找BOOT.ASM都不用管_如果說是 NOT AN execuTivefile ,則在PROJECT_BULIT OPTION_LINK_OUT MODLE _absolute file最重要是可以斷電,并且拔掉與板子相連的仿真器接口(注意拔電腦上的USB不好使),然后上電,自動運行.我遇到的是這些,我用以上方法解決了,但不知道為什么,所以大家都說說經(jīng)驗,讓新手燒走彎路,少L

33、OCK28122812從內(nèi)部flash啟動的過程a)程序硬件復(fù)位或者軟件復(fù)位 b)判斷mp/mc是否為0,微計算機模式(為1,當(dāng)為微處理器模式時,2812內(nèi)部的bootrom被禁止,通過zone7從外部調(diào)引導(dǎo)程序啟動。) c)為0則從boot rom啟動,否則從外部啟動(0x3F FC00) d) 到boot rom的0x3F FC00處取出復(fù)位向量,跳到boot函數(shù):2812有一塊flash地址從0x3F F000-0x3F FFFF在出廠時ti已經(jīng)固化好了引導(dǎo)程序iniboot:Iniboot函數(shù)判斷幾個GPIO引腳來判斷使用哪一種引導(dǎo)模式,比如flash boot模式,檢測SPICLKA

34、,SCITXA,GPIO34的電平,當(dāng)都為高電平時表明是片內(nèi)flash boot模式,那么initboot執(zhí)行完后跳轉(zhuǎn)到0x3F 7FF6處) e)采集io管腳狀態(tài),確定啟動模式。2812提供幾種啟動模式SCITXDA(GPIOF4) MDXA(GPIOF12) SPISTEA(GPIOF3) SPICLK(GPIOF2) 1 x x x FLASH啟動 0 1 x x SPI啟動 0 0 1 1 SCI啟動 0 0 0 0 PARALLEL啟動 f)根據(jù)io狀態(tài)選擇boot方式 g)如果是flash,程序退出boot函數(shù),跳轉(zhuǎn)到0x3F 7FF6(codestart) h)取出跳轉(zhuǎn)指令,跳轉(zhuǎn)

35、到自己的指定地址或者C初始化的入口_C_INT00(0x3F6000)處(DSP281x_CodeStartBranch.asm中) i)在C初始化的入口_C_INT00對一些變量,堆棧和寄存器進行必要的設(shè)置,該函數(shù)在c的庫函數(shù)內(nèi)(RTS Library) j)進入main函數(shù)(0x3F658E)2812上電引導(dǎo)過程從上電到我們的主函數(shù)運行之間這段時間里2812到底做了些什么?2812是怎樣引導(dǎo)程序運行的?下面敘述其啟動過程。 在2812中引腳XMP/MC,當(dāng)該引腳的為高電平時表示是微處理器模式(microprocessor),為低電平時表示微機算計模式(microcomputer),當(dāng)為微處

36、理器模式時,2812內(nèi)部的bootrom背禁止,通過zone7從外部調(diào)引導(dǎo)程序啟動。2812復(fù)位以后,其復(fù)位向量是固定的0x3F FFC0,如果為為處理器模式,那么復(fù)位后的復(fù)位向量指向的外部的地址,即0x3F FFC0是zone7處的地址,若為微機算計模式,那么0x3F FFC0指向的是2812的片內(nèi)FLASH的地址。下面就以微機算計模式加以說明其過程。 上電復(fù)位后,復(fù)位向量是指向片內(nèi)Flash的0x3F FFC0,2812有一塊flash地址從0x3F F000-0x3F FFFF在出廠時已經(jīng)固化好了引導(dǎo)程序。在0x3F FFC0處是一條跳轉(zhuǎn)指令,跳到iniboot(地址0x3F FB50)

37、函數(shù)處執(zhí)行iniboot代碼,該iniboot代碼就是ti在dsp出廠時固化在flash中的。Iniboot函數(shù)判斷幾個GPIO引腳來判斷使用哪一種引導(dǎo)模式,比如flash boot模式,檢測SPICLKA,SCITXA,GPIO34的電平,當(dāng)都為高電平時表明是片內(nèi)flash boot模式,那么initboot執(zhí)行完后跳轉(zhuǎn)到0x3F 7FF6處,此位置剛好在128位(CSM)密碼位置之前,你要在0x3F 7FF6處紡織跳轉(zhuǎn)指令,以跳轉(zhuǎn)到你要去的地方,比如是boot loader或應(yīng)用代碼。在0x3F 7FF6 處放置跳轉(zhuǎn)指令的方法如下:.sect codestartcode_start: .i

38、f WD_DISABLE = 1 LB wd_disable ;Branch to watchdog disable code .else LB _c_int00 ;Branch to start of boot.asm in RTS library .endif .if WD_DISABLE = 1 .textwd_disable: SETC OBJMODE EALLOW MOVZ DP, #7029h6 MOV 7029h, #0068h EDIS LB _c_int00 .endif.endMEMERY Page 0: . Start:origin = 0x3F 7FF6,length

39、= 0x000002 . SECTIONS . Codestart : Start page 0 . 上面的代碼執(zhí)行后跳到_c_int00處執(zhí)行,我對_c_int00的形成及具體情況不清楚,請知道的補充,_c_int00執(zhí)行結(jié)束時調(diào)用用戶的主程序main,則后續(xù)就是你自己的程序的執(zhí)行了。以下是具體編程要做的準備工作:一、準備工作(一勞永逸,模塊化編程?。?. 注冊為TI 成員TI公司提供的技術(shù)資料都需要會員的身份才可以下載,為了你工作的方便,建議你如果需要TI器件的技術(shù)資料,就趕快注冊為TI的成員吧!2. 獲得TMS320F2812的所有技術(shù)資料為了快速的獲得某個器件相關(guān)的技術(shù)資料,你可以在上

40、圖的“Enter Part Number”中輸入具體的器件型號,比如我們輸入“TMS320F2812”,點擊“GO”后,就可以獲得TMS320F2812的所有技術(shù)資料,包括數(shù)據(jù)手冊、產(chǎn)品信息、價格/封裝/樣片、質(zhì)量與無鉛數(shù)據(jù)報告、技術(shù)文檔、用戶指南、參考設(shè)計、開發(fā)工具與軟件、相關(guān)產(chǎn)品等等。應(yīng)有盡有,你想得到的TI都有,你沒有想到的TI也為你準備好了!建議將上面能夠下載下來的資料統(tǒng)統(tǒng)下載下來!有空的時候拿來研究一下,保證有好處!在“Tools & Software”這一欄里TI給出了與TMS320F2812相關(guān)的算法,大部分是免費的!除了電機算法只給出了庫函數(shù),其他基本上給出了庫函數(shù)和底層程序代

41、碼,并且TI給出的底層程序大部分是匯編編寫的,所以代碼運行效率是非常高的!3. 安裝TI的算法在“Tools & Software”這一欄里將下載到的TI頭文件和外設(shè)使用例子C281x C/C+ Header Files and Peripheral Examples解壓縮并且按照默認路徑安裝后,我們可以在C:tidcsc28dsp281xv100找到TMS320F2812頭文件。對于TI給出的大部分關(guān)于28x的算法,都可以在C:tidcs找到。在C:tidcsc28dsp281xv100中包含4個文件夾和一個readme。 在具體編程前需要了解各個文件夾中的每個文件的具體用途,要知道“什么時

42、候用哪個文件,為什么要用這個文件!接下來將對編程時使用較多的文件做一個說明:1) C:tidcsc28dsp281xv100doc中包含一個PDF文檔,此文檔是有關(guān)頭文件使用的說明,建議有空多看一下!2) C:tidcsc28dsp281xv100DSP281x_commoncmd中包含4個CMD文件,用來定義片上和片外空間,每個CMD用途不一樣,在后面的編程中具體討論。3) C:tidcsc28dsp281xv100DSP281x_commoninclude中包含4個頭文件,其中DSP281x_DefaultIsr聲明了所有281x的中斷服務(wù)函數(shù),比如聲明定時器0中斷函數(shù):interrupt void TINT0_ISR(void);DSP281x_Examples.h調(diào)用了一個軟件延時函數(shù),一般用得較少;DSP281x_GlobalPrototypes.h為全局函數(shù)原型,例

溫馨提示

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

評論

0/150

提交評論