TMS320F28035使用學(xué)習(xí)系列分享(四)程序燒錄配置
1.燒寫至RAM
?????????定時(shí)器程序配置好后,不妨設(shè)置一個(gè)累加變量 CpuTimer0.InterruptCount++(官方例程的變量),用來關(guān)注變量的變化。
????????采用RAM燒寫,就在工程設(shè)置(Properties)->常規(guī)(General)->CMD文件(Linker commend file)中選擇 28035_RAM_Ink.cmd

????????燒寫例程后,會(huì)進(jìn)入調(diào)試界面,選中變量CpuTimer0.InterruptCount,右鍵添加觀察變量(Watch Expression),變量就會(huì)顯示在窗口中了。


????????點(diǎn)擊運(yùn)行按鈕,程序就開始運(yùn)行啦。

????????在變量觀察欄中點(diǎn)擊持續(xù)更新(Continuous?Refrensh),就可以觀察到數(shù)值的改變。


2.燒寫至Flash
????????程序內(nèi)容龐大后,一般都要燒寫至Flash,而且DSP程序燒寫至RAM掉電后不會(huì)保存??偠灾绦蜃罱K都要燒寫至Flash中。
????????我們先在(Properties)->常規(guī)(General)->CMD文件(Linker commend file)中選擇?F28035.cmd

????????進(jìn)行下載,C2000系列DSP通常有8個(gè)Flash扇區(qū),下載前會(huì)分別擦除。下載后運(yùn)行操作效果同上。

3.關(guān)于Delay定時(shí)函數(shù)燒寫至Flash
????????程序中有時(shí)往往也會(huì)使用到延時(shí)函數(shù)DELAY_US()函數(shù)來完成定時(shí)效果,該函數(shù)定義在DSP2803x_Examples.h中,函數(shù)文件為DSP2803x_usDelay.asm。若直接燒寫至Flash中會(huì)出現(xiàn)一點(diǎn)問題,首先會(huì)出現(xiàn)一個(gè)警告

? ? ? ? 運(yùn)行過程代碼量小的時(shí)候基本正常,但是代碼變多后就有問題了,程序很容易卡死。

? ? ? ? 這是因?yàn)槌绦蛟赗AM中運(yùn)行速度很快,而在Flash中運(yùn)行需要一段時(shí)間,導(dǎo)致運(yùn)行出錯(cuò)。因此我們需要對(duì)Flash運(yùn)行環(huán)境進(jìn)行初始化。
????????解決辦法如下:
????????操作配置文件:
????????DSP2803x_MemCopy.c
????????DSP2803x_SysCtrl.c
????????DSP2803x_usDelay.asm
????????調(diào)用的函數(shù)? ??
????????MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr)
????????InitFlash()
????????DELAY_US(A)
????????其中MemCopy()在DSP2803x_MemCopy.c中,InitFlash()在DSP2803x_SysCtrl.c中。
????????步驟:
????????(1)在路工程徑下添加DSP2803x_MemCopy.c
????????(2)在main函數(shù)初始化時(shí)調(diào)用函數(shù)
????????????MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
????????????InitFlash();
????????(3)在F28035.cmd文件?SECTIONS?中添加
????????????ramfuncs? ? ? ? ?: > RAML0? ? ? ?PAGE = 0
????????這樣分配是因?yàn)樵贒SP2803x_usDelay.asm中,該函數(shù)被分配在ramfuncs段

????????這一步的目的就是指定把ramfuncs放在RAM中運(yùn)行,這樣就解決了程序在Flash中卡死和編譯警告的問題。

????????