專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

基于TMS320F28335DSP的FLASH燒寫方法

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年01月22日   【字體:

想把一個原來是燒寫到DSP的片內(nèi)RAM的程序修改成是燒寫到DSP片內(nèi)FLASH的程序,不僅僅是修改一個cmd文件就結束了,還需要做其他幾個步驟

第一步:把28335_RAM_lnk.cmd這個從project中移除,用右鍵選擇28335_RAM_lnk.cmd然后選delate。如下圖1,然后出現(xiàn)對話框,點YES,如圖2。 

 

 

 

 

第二步:右鍵選擇project名稱,然后選add file to project,如下圖3,然后出現(xiàn)瀏覽框,在\Code of TMS320F28335 CCS4\v120\DSP2833x_common\cmd這個子文件夾下,選擇F28335.cmd,點OK,至此可以在project的文件列表內(nèi)看到F28335.cmd被添加到project中。 

 

 

第三步:在main()函數(shù)中添加如下語句 

MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); 

 InitFlash(); 

上述兩句話添加在InitPieVectTable();這句的下面的一行。 

添加語句的時候,注意不要添加錯了,每一個字母都要正確,括號也要用英文括號。 

第四步:添加DSP2833x_MemCopy.c這個文件到project中,右鍵選擇project名稱,然后選add file to project,然后出現(xiàn)瀏覽框,找到\Code of TMS320F28335 CCS4\v120\DSP2833x_common\source文件夾中的DSP2833x_MemCopy.c這個文件,然后點OK。 

第五步:編譯,點rebuild,編譯至少要保證沒有ERROR,否則請檢查一下 

 

 

在第三步操作的地方是不是有錯誤。 

需要注意的是:不是RAM中運行正確的程序,就在FLASH中運行也一定正確。這是因為同樣的程序在DSPRAM中運行消耗的時間要遠遠短于在FLASH中運行的時間 

比如,有一個中斷函數(shù)cpu_timer_isr10ms(),這個函數(shù)每隔10msCPU定時器1產(chǎn)生中斷觸發(fā),自動跳轉(zhuǎn)進入執(zhí)行一次。這個cpu_timer_isr1ms()內(nèi)部包括三個子函數(shù)依次是adc_sanple(),pwm_update()gpio_toggle() 

如下 

cpu_timer_isr1ms() 

adc_sanple(); 

pwm_update(); 

gpio_toggle(); 

其中假設adc_sanple()這個子函數(shù)在RAM中的執(zhí)行時間是1ms,pwm_update()這個子函數(shù)在RAM中的執(zhí)行時間是2msgpio_toggle()這個子函數(shù)在RAM中的執(zhí)行時間是3ms,那么1+2+3=6<10,所以完全沒有問題,在RAM中上面這些程序都可以運行很好。 

但是,如果把上面這些程序放到FLASH中運行,很有可能adc_sanple()這個子函數(shù)在FLASH中的執(zhí)行時間是3mspwm_update()這個子函數(shù)在FLASH中的執(zhí)行時間是7ms,這是因為同樣的程序在DSPRAM中運行消耗的時間要遠遠短于在FLASH中運行的時間。這樣前兩個函數(shù)就把10ms都用掉了,根本輪不上gpio_toggle()這個子函數(shù)被執(zhí)行,就被DSP強制終止了,所以很多時候根本就看不到gpio_toggle()的現(xiàn)象。 

關閉窗口

相關文章