![TMS320F28xx DSP中內(nèi)部Flash的應(yīng)用研究_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/2/c02818e4-3e79-4be4-88c5-deb6e07e0eb6/c02818e4-3e79-4be4-88c5-deb6e07e0eb61.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、tms320f28xx dsp中內(nèi)部flash的應(yīng)用研究tms320f28xx 片內(nèi)有128 k×16 bit字的flash、兩塊4 k x16bit字的單周期拜訪ram(saram)lo和l1、一塊8 kxl6 bit字的單周期拜訪ram(saram)ho、兩塊1 kxl6 bit字的單周期拜訪ram(saram)m0和m1。因?yàn)榇鎯?chǔ)器種類多、容量大,所以從系統(tǒng)的高度來(lái)配置各個(gè)存儲(chǔ)器必需有合適的辦法,而這些辦法普通都與片內(nèi)flash有關(guān)。另外,tms320f28xx dsp片內(nèi)有定時(shí)器模塊(wdt)、引導(dǎo)rom(rom bootloader)模塊、代碼平安模塊(csm),要合理地用
2、法這些模塊為囫圇系統(tǒng)服務(wù),必然也要用到flash。由此可以看出,flash的地位和作用比較顯著所以本文就flash的幾種使用作了討論。2 從flash拷貝段到ram21拷貝中斷向量在tms320f28xx器件中,外設(shè)擴(kuò)展中斷(pie)模塊管理中斷哀求。上電時(shí),全部中斷向量必需位于非易失性存儲(chǔ)器(如 flash)中,但是要把中斷向量拷貝到pievect ram中,這是用戶代碼中器件初始化程序的一部分。 pievect ram是一個(gè)特定的ram塊,它在當(dāng)前tms320f28xx器件中是一個(gè)256×16的塊在數(shù)據(jù)空間中的起始地址為 ox000d00。把中斷向量銜接到flash,然后在運(yùn)行時(shí)
3、把中斷向量拷貝到pievect ram中,有許多辦法可以實(shí)現(xiàn)。一個(gè)辦法是創(chuàng)建包含函數(shù)指針的常量c結(jié)構(gòu)體,該結(jié)構(gòu)體包括128個(gè)32-bit向量。假如用法dsp281x或者 dsp280x外設(shè)的結(jié)構(gòu)體這個(gè)結(jié)構(gòu)體叫做pievecttableinit,它已經(jīng)在dsp281x_pievectc或者 dsp280x_pievect.c創(chuàng)建(參看ti提供的例程)。由于這個(gè)結(jié)構(gòu)體用法const類型關(guān)鍵詞,所以它將會(huì)被編譯器放置在.econst段中。運(yùn)行時(shí)只需要把這個(gè)結(jié)構(gòu)體拷貝到pievect ram中。c編譯器運(yùn)行時(shí)支持庫(kù)包含名為memcpy的存儲(chǔ)器拷貝函數(shù),該函數(shù)可以被用來(lái)完成拷貝任務(wù),其使用如下所示:以上
4、這個(gè)例子為pie ram起始地址用法的硬編碼地址(hard coded address),明確指定為0x000d00。但是硬編碼地址并不是較好的編程方式,用戶可以用法data_section命令創(chuàng)建一個(gè)非初始化的假變量(dummy variable),并把這個(gè)變量銜接到pie ram然后用這個(gè)假變量的名字來(lái)代替硬編碼地址。例如,當(dāng)用法dsp281x或者dsp280x外設(shè)結(jié)構(gòu)體時(shí),創(chuàng)建一個(gè)名為pievecttable的非初始化結(jié)構(gòu)體,并把該結(jié)構(gòu)體銜接到pievect ram。前面例子中的memcpy()函數(shù)可以被替換為:memcpy(&pievecttable,&pievectt
5、ableinit,256);注重拷貝長(zhǎng)度是256個(gè)16-bit字對(duì)應(yīng)為128個(gè)32-bit字。22初始化flash控制寄存器flash控制寄存器fopt、fpwr、:fstdby-wait、factivewait、fbankwait、 fotpwait的初始化代碼不能從flash存儲(chǔ)器當(dāng)中運(yùn)行否則就會(huì)有不行預(yù)料的結(jié)果浮現(xiàn)。所以,flash控制寄存器的初始化函數(shù)在運(yùn)行時(shí)必需從 flash(它的裝載地址)拷貝到ram(它的運(yùn)行地址)。flash控制寄存器由code security module(csm)庇護(hù)。假如csm被庇護(hù)起來(lái)了,那么必需從被庇護(hù)的ram(例如:l0或者l1 saram)運(yùn)行f
6、lash控制寄存器的初始化代碼,否則flash控制寄存器的初始化代碼無(wú)法拜訪flash控制寄存器。要注重的是,當(dāng)器件復(fù)位的時(shí)候 csm普通都是被庇護(hù)起來(lái)的,雖然用法假密碼0xffff時(shí)rom bootload-er會(huì)把它解鎖。c編譯器的code_section命令可以用來(lái)為flash控制寄存器的初始化函數(shù)創(chuàng)建自立的可銜接段。例如:假定flash控制寄存器的配置在c函數(shù)initflash()中實(shí)現(xiàn),并且想把這個(gè)函數(shù)放置在名為secureramfuncs的可銜接段當(dāng)中。下列的c代碼例程顯示了 code_section指令在flash存儲(chǔ)器配置中的正確使用:secureramfuncs段可以用法用戶
7、銜接指令文件(.cmd)舉行銜接。這個(gè)段需要自立的裝載和運(yùn)行地址。另外,還想讓生成一些全局符號(hào),這些全局符號(hào)可以用來(lái)打算裝載地址、運(yùn)行地址、段長(zhǎng)度。在實(shí)現(xiàn)把這個(gè)段從裝載地址拷貝到它的運(yùn)行地址時(shí)需要這些信息。用戶銜接指令文件如下所示:在這個(gè)例子中,假定存儲(chǔ)器flash和secure_ram都已經(jīng)在用戶銜接指令文件中的memory段中定義。這些存儲(chǔ)器的page標(biāo)識(shí)符要與它們的存儲(chǔ)器定義相匹配。在上面的例程中假定兩個(gè)存儲(chǔ)空間都已經(jīng)在page 0(程序存儲(chǔ)空間)中聲明過(guò)了。run_start、load_start、load_end命令將生成全局符號(hào),這些全局符號(hào)有特定的名稱,對(duì)應(yīng)著相應(yīng)的地址。最后,這
8、個(gè)段必需在運(yùn)行時(shí)從flash拷貝到ram,可以用到編譯器運(yùn)行支持庫(kù)里面的函數(shù) memcpy()。23性能最優(yōu)化常數(shù)是那些用的const類型關(guān)鍵詞聲明的數(shù)據(jù)結(jié)構(gòu)。編譯器把全部的常數(shù)放置在.econst段中(假定為大存儲(chǔ)模式)。當(dāng)前tms320f28xx器件上的特別管道(special pipelining)提高flash上運(yùn)行代碼的性能時(shí)每次拜訪位于片上flash中的數(shù)據(jù)常數(shù)會(huì)占用許多周期。特殊是在150 mhz tms320f281x dsp上flash等待狀態(tài)要達(dá)到5個(gè)周期100 mhz tms320f280x dsp達(dá)到3個(gè)周期。所以,拜訪片上ram中的常數(shù)與常數(shù)表則成為沉重的負(fù)擔(dān)。然而,
9、分立式系統(tǒng)要求全部的初始化數(shù)據(jù)(如常數(shù))最初都是位于非易失性存儲(chǔ)器中,所以,必需為想拜訪的ram中的常數(shù)建立自立的裝載和運(yùn)行地址在運(yùn)行時(shí)把這些常數(shù)從片上flash中拷貝到ram中。這里介紹兩種不同的實(shí)現(xiàn)辦法。辦法一:在ram中運(yùn)行全部的常數(shù)陣列。這種辦法是為囫圇.econst段指定自立的裝載和運(yùn)行地址。其益處是簡(jiǎn)單用法,而壞處是ram的用法量十分大(可能惟獨(dú)少量常數(shù)需要迅速拜訪,但是用這種辦法全部的常數(shù)都位于ram)。在用戶銜接指令文件中容易地為囫圇.econst段指定自立的裝載和運(yùn)行地址,然后在運(yùn)行時(shí)通過(guò)拷貝囫圇.econst段的方式往工程中添加代碼。例如:辦法二:在ram中運(yùn)行特定的常數(shù)陣
10、列。這種辦法是在運(yùn)行時(shí)有挑選性地從flash拷貝常數(shù)到ram。與辦法一相像,這個(gè)流程能夠完成預(yù)期功能,不同點(diǎn)是惟獨(dú)在命名段中被挑選了的常數(shù)才會(huì)被拷貝到ram中(而不是把全部的常數(shù)都拷貝到ram 中)。假定想創(chuàng)建在ram中運(yùn)行的5個(gè)字的常數(shù)陣列,并命名為table。data_section命令用來(lái)把table放置在名為ramconsts的用戶自定義段中。相應(yīng)的c源程序如下所示:用法用戶銜接指令文件銜接ramconsts段,裝載到flash而從ram中運(yùn)行,生成全局符號(hào)來(lái)協(xié)助存儲(chǔ)器拷貝。用戶銜接指令文件如下所示:最后,在運(yùn)行時(shí)必需把table從裝載地址拷貝到運(yùn)行地址:3 csm密碼的編程tms32
11、0f28xx器件上的代碼平安模塊csm提供了庇護(hù),防止非法的程序拷貝。在當(dāng)前的tms320f28xx器件中,囫圇 flash、otp存儲(chǔ)器,lo和l1都被csm庇護(hù)(flash配置寄存器同樣被庇護(hù))。當(dāng)器件被庇護(hù)的時(shí)候,惟獨(dú)從被庇護(hù)的存儲(chǔ)空間運(yùn)行的代碼可以拜訪(讀或?qū)?其他被庇護(hù)存儲(chǔ)空間中的數(shù)據(jù)。從非庇護(hù)的存儲(chǔ)空間運(yùn)行的代碼不行以拜訪被庇護(hù)存儲(chǔ)空間中的數(shù)據(jù)。csm用法128-bit密碼組成8個(gè)單獨(dú)的16-bit字。在當(dāng)前的tms320f28xx器件上,這些密碼被存儲(chǔ)在flash 的最高8個(gè)字中(如地址:ox3f7ff8-ox3f7fff)。在開(kāi)發(fā)過(guò)程中,建議在密碼位置放入假密碼0xffff。用
12、法假密碼時(shí),對(duì)csm解庇護(hù)只需假讀密碼位置。把假密碼放在密碼位置是很簡(jiǎn)單的由于在flash編程過(guò)程中flash被清除后這些位置的狀態(tài)將會(huì)是0xffff。用戶只需要在自己的代碼工程中避開(kāi)銜接任何段到密碼地址,密碼將保持為oxffff。在開(kāi)發(fā)完成以后可能想把真正的密碼放在密碼位置中。另外,為了正確地庇護(hù)csm模塊,當(dāng)前tms320f28xx器件上的csm 模塊需要編寫值ox0000到flash的地址0x3f7f80-ox3f7ff5。完成這兩個(gè)任務(wù)的最容易的辦法是用少量匯編語(yǔ)言舉行編程。下面是一個(gè)匯編代碼例子,這個(gè)例子指定了想要的密碼值,并且把它們放在一個(gè)名為pass-words的初始化段中。另外
13、創(chuàng)建了一個(gè)名為csm_rsvd的初始化段,這個(gè)段的值所有是0x0000并且這個(gè)段有適當(dāng)?shù)拈L(zhǎng)度以適合地址ox3f7f80-0x3f7ff5。注重,這個(gè)例子顯示的是假密碼值0xffff用戶可以用自己的密碼代替這些假密碼。在這里必需警告用戶:不要把8個(gè)密碼的值所有設(shè)為ox0000,這樣做會(huì)永遠(yuǎn)地鎖定csm模塊!passwords和csb_rsvd段要由用戶銜接指令文件放置在存儲(chǔ)器中。下面的例子適用于當(dāng)前tms320f28xx器件(對(duì)于其他器件,請(qǐng)參考器件數(shù)據(jù)手冊(cè)以確定密碼和csm保留位置的地址)。4 在dsp復(fù)位以后從flash運(yùn)行代碼tms320f28xx具有引導(dǎo)rom(rom bootloade
14、r),器件復(fù)位以后rom bootloader能把代碼運(yùn)行轉(zhuǎn)到flash中。當(dāng)引導(dǎo)模式挑選引腳被配置為"跳轉(zhuǎn)到flash"時(shí)rom bootloader將跳轉(zhuǎn)到flash中位于地址ox3f7ff6處的命令。用戶需要在這個(gè)地址上支配一條命令,這條命令跳轉(zhuǎn)到用戶代碼。因?yàn)閏sm密碼從地址ox3f7ff8開(kāi)頭,所以剛好有2個(gè)字可用于存放這個(gè)跳轉(zhuǎn)命令。并非巧合的是,長(zhǎng)跳轉(zhuǎn)命令(在匯編代碼中為lb)剛好占用2個(gè)字。普通狀況下,跳轉(zhuǎn)命令將會(huì)跳轉(zhuǎn)到c編譯器運(yùn)行支持庫(kù)中c環(huán)境初始化程序的起始位置。這個(gè)程序的人口標(biāo)號(hào)是_c_int00。在這個(gè)程序沒(méi)有運(yùn)行的時(shí)候c代碼就不能運(yùn)行。同樣地,有時(shí)候
15、在開(kāi)頭運(yùn)行用戶的c應(yīng)用程序之前需要執(zhí)行少量的匯編代碼(例如:禁止看門狗時(shí)鐘外設(shè))。這樣,跳轉(zhuǎn)命令需要跳轉(zhuǎn)到用戶匯編代碼的起始位置,需要在flash中正確定位跳轉(zhuǎn)命令。能達(dá)到這個(gè)目的的最容易的辦法是用法匯編代碼。在下面的例子中創(chuàng)建了一個(gè)名為codestart的已命名初始化段這個(gè)段包含了一個(gè)長(zhǎng)跳轉(zhuǎn)可以跳轉(zhuǎn)到c環(huán)境初始化程序。需要用用戶銜接指令文件把codestart段放置在存儲(chǔ)器中。用戶須在用戶銜接指令文件memory部分的page 0上定義一個(gè)名為begin_flash的存儲(chǔ)器塊。codestart段將被銜接到這個(gè)存儲(chǔ)器塊。下面的例子針對(duì)當(dāng)前tms320f28xx器件對(duì)于其他的器件,參考相應(yīng)的數(shù)
16、據(jù)手冊(cè)以確認(rèn)flash目標(biāo)地址的引導(dǎo)。5 c環(huán)境引導(dǎo)時(shí)禁止看門狗計(jì)時(shí)c編譯器運(yùn)行時(shí)支持庫(kù)中的c環(huán)境初始化函數(shù)是_c_int00,它完成全局和靜態(tài)變量的初始化。包括為每個(gè)初始化全局變量把數(shù)據(jù)從.cinit段(位于片上flash存儲(chǔ)器)拷貝到.ebss段(位于ram)。例如,當(dāng)一個(gè)全局變量在源代碼中聲明為:int x="5""5"被放置在初始化段.cinit,而符號(hào)"x"被放置在ebss段。然后,_c_int00程序在運(yùn)行時(shí)把"5"拷貝到"x"的位置。當(dāng)軟件中有初始化全局和靜態(tài)變量的大量數(shù)值時(shí)。在c
17、環(huán)境引導(dǎo)程序完成并且調(diào)用main()(這里看門狗可以被配置或被禁止)函數(shù)之前看門狗定時(shí)器會(huì)超時(shí)。在代碼開(kāi)發(fā)的過(guò)程中,這個(gè)問(wèn)題可能不會(huì)在ram中顯現(xiàn)出來(lái),由于從cinit段拷貝的數(shù)據(jù)被銜接到ram后會(huì)十分迅速地運(yùn)行。然而,當(dāng)cinit段銜接到內(nèi)部flash時(shí)??截惷總€(gè)數(shù)據(jù)將會(huì)耗費(fèi)大量的周期。由于內(nèi)部flash存儲(chǔ)器缺省為最大等待狀態(tài)(等待狀態(tài)僅在用戶代碼運(yùn)行到 main()后才會(huì)被配置)。另外。代碼從flash中實(shí)現(xiàn)數(shù)據(jù)拷貝這又會(huì)增強(qiáng)完成數(shù)據(jù)拷貝需要的時(shí)光(代碼取指和數(shù)據(jù)讀絕對(duì)會(huì)拜訪flash)??撮T狗超時(shí)周期缺省到盡可能的最小值結(jié)合這么一個(gè)事實(shí),看門狗超時(shí)變成真切的可能性。有一個(gè)容易的辦法用法
18、ccs來(lái)檢測(cè)看門狗超時(shí),步驟如下:(1)為已經(jīng)寫入flash的代碼裝載符號(hào)(單擊fileload symbolsload symbols only)(2)復(fù)位dsp(單擊debugreset cpu)。(3)重新開(kāi)頭dsp(單擊debugrestart)。假如bootloader被設(shè)置為"jump to flash"那么無(wú)需舉行這一步。(4)運(yùn)行到main()(單擊debuggo_main)。假如沒(méi)有到達(dá)main(),那么在c環(huán)境初始化程序完成之前看門狗很有可能已經(jīng)溢出。解決看門狗超時(shí)問(wèn)題最容易的方法就是在開(kāi)頭c環(huán)境初始化程序之前禁止看門狗。在main()到達(dá)之后重新使能看門狗,并且開(kāi)頭正常的代碼
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度二手推土機(jī)交易合同范本大全
- 2025年度轉(zhuǎn)學(xué)保障合同(體育類院校轉(zhuǎn)學(xué)保障)
- 2025年度擔(dān)保風(fēng)險(xiǎn)控制合同樣板
- 二零二五版中英文公路運(yùn)輸合同全文預(yù)覽與2024年法規(guī)對(duì)照
- 2025年度電影劇本審核保密協(xié)議
- 二零二五版車輛租賃與救援服務(wù)合作協(xié)議
- 2025地產(chǎn)開(kāi)盤季銷售代理服務(wù)合同
- 2025年度智能交通系統(tǒng)車位租賃管理服務(wù)合同范本
- 宗教場(chǎng)所施工協(xié)議模板
- 中暑知識(shí)詳解
- 投資居間協(xié)議合同模板
- 多重耐藥菌的預(yù)防及護(hù)理課件
- 抽水蓄能電站課件
- GB/T 25052-2024連續(xù)熱浸鍍層鋼板和鋼帶尺寸、外形、重量及允許偏差
- 河北科大項(xiàng)目實(shí)施計(jì)劃書
- 消防設(shè)施操作和維護(hù)保養(yǎng)規(guī)程
- -精益與智能工廠三年規(guī)劃
- 2024年高素質(zhì)農(nóng)民職業(yè)技能大賽(農(nóng)業(yè)經(jīng)理人)賽項(xiàng)考試題庫(kù)-下(多選、判斷題)
- 中小學(xué)校園安全教育主題班會(huì)課件:筑牢安全紅線、守護(hù)校園平安
- 高空作業(yè)考試題(帶答案)
- 北師大版數(shù)學(xué)八年級(jí)上冊(cè)1.1探索勾股定理 同步練習(xí)【基礎(chǔ)版】(附答案解析)
評(píng)論
0/150
提交評(píng)論