版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、一、28335的啟動介紹TI支持很多種方式的boot,內(nèi)部的ram(saram),flash,sci,但無論哪種啟動都遵循下面的流程:而該流程中的reset,initboot,call selectbootmode, read i/o state, call boot loader這些步驟都是固化在芯片內(nèi)的程序自己執(zhí)行的,也就是說這些代碼在出廠的時(shí)候已經(jīng)在TI的芯片內(nèi)。(我們寫的程序是從codestart出開始的,其代碼在DSP2833x_CodeStartBranch.asm內(nèi),其指定位置在CMD文件內(nèi)定義。下載到flash中時(shí)是在0x3f7ff6處,因?yàn)閺?fù)位的時(shí)候指向的0x3fffc0,先
2、執(zhí)行固化的bootloader再跳轉(zhuǎn)到0x3f7ff6。下載到RAM中時(shí)是在0處。因?yàn)椴恍鑸?zhí)行bootloader。)在28335中是一段的8k*16的read-only的memory,地址位于0x3fe000-0x3fffff,見下圖:根據(jù)上面的流程圖,詳細(xì)的解釋一下流程:1.在3fffc0到3fffff其實(shí)是放了中斷向量表的地方:系統(tǒng)一開機(jī)當(dāng)然是處于reset中斷,因此直接跳至reset的地方執(zhí)行(0x3fffc0)。而這個(gè)地方的兩個(gè)字節(jié)只是放了一條指令,就是跳至initboot函數(shù),也就是3ff34c的地址執(zhí)行bootloader。.reset與reset是不同的,一個(gè)在memory,一
3、個(gè)在sections中。.reset只包含一個(gè)32位的中斷矢量,指向?qū)崟r(shí)支持庫rts2800_ml.lib中的C編譯器導(dǎo)引函數(shù),即_c_int00子程序。通常我們不用此塊,而是另外創(chuàng)建分支指令指向開始代碼。如4中介紹。2.在3ff34c的bootloader的程序,這里主要有initboot,和SelectBootMode,以及一些外設(shè)引導(dǎo)的函數(shù)。SeleteBootMode根據(jù)芯片的硬件或軟件設(shè)置來判斷芯片該去哪里尋找程序入口,直接目的是如何找到main,然后執(zhí)行應(yīng)用程序。bootloader操作中會去檢測外部GPIO口的狀態(tài),從而判斷是哪種方式的啟動:3.然后根據(jù)相應(yīng)的啟動方式跳至相應(yīng)的入
4、口地址:比如FLASH啟動就是0x33fff6, 內(nèi)部SARAM啟動就是0x0。4.而這里的入口地址就是cmd文件中定義的begin段。因此對于flash啟動和ram啟動,begin的定義是不同的,在flash啟動時(shí)begin就是0x33fff6,而ram啟動begin就是0x0.這個(gè)2個(gè)字的區(qū)間也就是放了我們程序最初執(zhí)行的第一條指令(通常是code_start).一條長跳轉(zhuǎn)指令LB剛好占兩個(gè)字節(jié)。bootloader執(zhí)行完畢之后會跳到0x3f7ff6處,而codestart被放置到了BEGIN處。故即是執(zhí)行DSP2833x_CodeStartBranch.asm代碼。codestart包含一
5、條長跳轉(zhuǎn)指令,指向?qū)崟r(shí)支持庫rts2800_ml.lib中的C編譯器導(dǎo)引函數(shù),即_c_int00子程序。不同的是:如果系統(tǒng)的程序(.text)放在系統(tǒng)內(nèi)部RAM中仿真運(yùn)行,則本塊應(yīng)放入片內(nèi)RAM中,如地址單元0x3F8000;如果是固化程序進(jìn)FLASH,則.codestart應(yīng)定位與FLASH中的其實(shí)地址為0x3F7FF6中。(一條長跳轉(zhuǎn)指令占2個(gè)字)。ramfuncs作用是程序的搬移。loadallocation(強(qiáng)制地址或存儲空間名稱)同allocation:定義輸出段將會被裝載到哪里。run= allocation(強(qiáng)制地址或存儲空間名稱)同allocation:定義輸出段將會在哪里運(yùn)行
6、。另:CMD文件中只出現(xiàn)一個(gè)關(guān)鍵字load或run時(shí),表示兩者的地址時(shí)表示兩者的地址時(shí)重合的。LOAD_START(_RamfuncsLoadStart)令編譯器創(chuàng)建了一個(gè)變量RamfuncsLoadStart,該變量指向段ramfuncs的裝載地址的首地址(LOAD_ START為編譯偽指令,請見CCS的幫助文檔);LOAD_START(_RamfuncsLoadEnd)令編譯器創(chuàng)建了一個(gè)變量RamfuncsLoadEnd,該變量指向段ramfuncs的裝載地址的末地址(LOAD_ END為編譯偽指令,請見CCS的幫助文檔);RUN_START(_RamfuncsRunStart)令編譯器創(chuàng)
7、建了一個(gè)變量RamfuncsRunStart,該變量指向段ramfuncs的運(yùn)行地址的首地址(LOAD_ START為編譯偽指令,請見CCS的幫助文檔);或通過這個(gè)方式可以把一些程序放入指定的位置。(放置的位置與執(zhí)行時(shí)的位置不同時(shí),如下載到flash中,但是運(yùn)行時(shí)要在RAM中運(yùn)行)學(xué)習(xí)一款處理器芯片,搞明白芯片的運(yùn)行過程,特別是程序的啟動階段,對于更好的應(yīng)用芯片很有幫助。對F28335來講,它提供的方式很多。首先F28335中有片內(nèi)flash,可以將程序存儲在這里;其次,F(xiàn)28335也提供了bootloader功能;最后,F(xiàn)28335還具有片上OTP,用戶可以在這里設(shè)定自己的啟動方式。在283
8、35的TI提供的例程中,程序的起始位置是code_start,在這里先禁止看門狗,然后再跳轉(zhuǎn)到c_int00處運(yùn)行;而在一般的C工程中,這個(gè)起始位置一般是c_int00;這個(gè)起始位置在編譯選項(xiàng)(build options)中設(shè)定,在C環(huán)境建立之前將看門狗禁止,使得程序更可靠。查閱到“DSP2833x_CodeStartBranch.asm”中的說明,如下:For these examples, code_start is thefirst code that is executed after exiting the boot ROM code.The codestart section in
9、 the linker cmd fileis used to physically place this code at the correct memory location. Thissection should be placed at the location the BOOT ROM will re-direct the codeto.For example, for boot to FLASH thiscode will be located at 0x3f7ff6.In addition, the example DSP2833x projectsare setup such t
10、hat the codegen entry point is also set to the code_startlabel. This is done by linker option -e in the project build options. When thedebugger loads the code,it will automatically set the PC to the entrypoint address indicated by the -e linker option.In this case the debugger is simplyassigning the
11、 PC, it is not the same as a full reset of the device.從上面的說明,可以看到,在仿真模式下忽略了啟動模式的選擇,而是讓仿真器直接將程序的起始地址賦給PC的。特別對這個(gè)程序來講,由于在C環(huán)境之前,還禁止了看門狗,程序的起始地址是code_start。但是這里有一點(diǎn)還應(yīng)注意,在仿真模式下,模擬的是將程序引導(dǎo)到M0SARAM中,所以在CMD文件中,將code_start硬件定位到了M0 SARAM的起始位置處,如果固化程序的話,需要更改code_start的位置,將其放在對應(yīng)方式的位置處。二、我們最常用到的主要有兩種引導(dǎo)模式:一種是boottoR
12、AM,即跳到0x000000的RAM中,去開始執(zhí)行指令,主要針對程序加載在RAM的仿真模式;另外一種是boottoFlash,則跳到0x3F7FF6中去開始執(zhí)行代碼。相應(yīng)的,程序會在這兩個(gè)入口地址0x000000,0x3F7FF6放一條跳轉(zhuǎn)指令,在codestart.asm源文件中,原因是在Flash的入口地址處只有兩個(gè)單元的空間,后面是CSM模塊,所以需要跳轉(zhuǎn);而在RAM中之所以也需要跳轉(zhuǎn),主要是因?yàn)樵谔D(zhuǎn)到main之前,需要執(zhí)行一小段代碼_c_int00,該代碼會使用0x000003之后的一段RAM,如果代碼放在那里,在執(zhí)行_c_int00之后會損壞代碼。下載到RAM中的時(shí)候CMD文件有上
13、面的兩句,codestart是在文件“DSP2833x_CodeStartBranch.asm”中有定義,實(shí)際上codestart段只是包含了一個(gè)跳轉(zhuǎn)指令,是程序跳轉(zhuǎn)到_c_int00處,_c_int00在boot.asm in RTS library中有定義,_c_int00的代碼最終會調(diào)用c的main函數(shù),之后就是main函數(shù)的執(zhí)行。下載到flash中的時(shí)候CMD文件有上面的兩句。(而復(fù)位的時(shí)候指向的是0x3fffc0)另外就是一些外設(shè)引導(dǎo)模式,如SCI引導(dǎo)以及SPI引導(dǎo)等,像我們常使用的C2PROG軟件就支持SCI引導(dǎo),然后通過串口下載程序。三、c_int00介紹_c_int00 is
14、branch to start of boot.asm in RTS libray /翻譯為中文就是:_c_int00是rts2800_ml.lib的入口地址;_c_int00是C初始化代碼的入口地址在你用C編程的時(shí)候,DSP需要執(zhí)行一段C運(yùn)行支持庫代碼以完成C運(yùn)行環(huán)境的初始化,_c_int00就是這段初始化代碼的入口地址,_c_int00函數(shù)在運(yùn)行支持庫(rts,runtime-support library)中。連接器會將這個(gè)函數(shù)的入口地址放置在復(fù)位中斷向量處,使其可以在初始化時(shí)被調(diào)用。c_int0函數(shù)進(jìn)行以下工作以建立C運(yùn)行環(huán)境:為系統(tǒng)堆棧產(chǎn)生.stack塊,并初始化堆棧指針。從.cin
15、it塊將初始化數(shù)據(jù)拷貝到.bss塊中相應(yīng)的變量。執(zhí)行完初始化代碼后,就跳轉(zhuǎn)到main函數(shù),開始運(yùn)行C程序;rts2800.lib:C/C+運(yùn)行支持庫;rts2800_ml.lib C/C+大內(nèi)存模式運(yùn)行支持庫.rts2800_ml.lib中有大量浮點(diǎn)運(yùn)算處理的函數(shù)而rts2800.lib沒有在指針的訪問空間上有區(qū)別,rts2800.lib中庫函數(shù)的指針為near,故不能訪問3Fxxxx,rts2800_ml.lib可以訪問(大小內(nèi)存模式故名思議就是可以訪問的內(nèi)存的大小有區(qū)別,小內(nèi)存模式只能訪問低64k地址,也就是16位地址線)四、2812的啟動步驟(可參照理解28335)下面是2812的fla
16、sh啟動流程,可參照學(xué)習(xí)28335的啟動2812從內(nèi)部flash啟動的詳細(xì)流程說明:(a)上電復(fù)位(b)判斷是否從flash啟動(c)復(fù)位向量是指向片內(nèi)Flash的0x3FFFC0,2812有一塊flash地址從0x3FF000-0x3FFFFF在出廠時(shí)已經(jīng)固化好了引導(dǎo)程序。在0x3FFFC0處是一條跳轉(zhuǎn)指令,跳到iniboot(地址0x3FFC00)函數(shù)處執(zhí)行iniboot代碼,該iniboot代碼就是TI在dsp出廠時(shí)固化在flash中的(d)InitBootassemblyRoutine將選擇SelectBootModefunction啟動模式函數(shù)。這個(gè)函數(shù)由GPIO引腳的狀態(tài)決定啟動類型。一旦啟動結(jié)束,選擇啟動模式函數(shù)返回一入口地址給InitBoot函數(shù)。入口地址是退出bootloader之后代碼開始執(zhí)行的起始點(diǎn)。InitBoot接著將會調(diào)用ExitBoot子程序,把C
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 年會活動總結(jié)范文15篇
- 法治社會+學(xué)案 高中政治統(tǒng)編版必修三政治與法治
- 初級會計(jì)實(shí)務(wù)-《初級會計(jì)實(shí)務(wù)》預(yù)測試卷263
- 初級會計(jì)經(jīng)濟(jì)法基礎(chǔ)-初級會計(jì)《經(jīng)濟(jì)法基礎(chǔ)》模考試卷110
- 二氧化硅殼層微膠囊的制備及其復(fù)合材料自潤滑性能研究
- 2025版稅務(wù)代理與合規(guī)服務(wù)合同范本9篇
- 二零二五年度產(chǎn)品發(fā)布會舞臺租賃與現(xiàn)場直播合同3篇
- 2025版陶佳離婚案子女撫養(yǎng)權(quán)及財(cái)產(chǎn)分配方案3篇
- 二零二五年度基礎(chǔ)設(shè)施投資擔(dān)保協(xié)議書3篇
- 二零二五年度個(gè)人房屋租賃合同范本全新版4篇
- 肖像繪畫市場發(fā)展現(xiàn)狀調(diào)查及供需格局分析預(yù)測報(bào)告
- 國家公務(wù)員考試(面試)試題及解答參考(2024年)
- 《阻燃材料與技術(shù)》課件 第6講 阻燃纖維及織物
- 2021-2022學(xué)年遼寧省重點(diǎn)高中協(xié)作校高一上學(xué)期期末語文試題
- 同等學(xué)力英語申碩考試詞匯(第六版大綱)電子版
- 人教版五年級上冊遞等式計(jì)算100道及答案
- 墓地個(gè)人協(xié)議合同模板
- 2024年部編版初中語文各年級教師用書七年級(上冊)
- 2024年新課標(biāo)全國Ⅰ卷語文高考真題試卷(含答案)
- 湖南省退休人員節(jié)日慰問政策
- QB/T 5998-2024 寵物尿墊(褲)(正式版)
評論
0/150
提交評論