把燒寫到RAM程式修改成燒寫到FLASH的方法
首先,希望大家明白一點,想把一個原來是燒寫到DSP的片內RAM的程式修改成是燒寫到DSP片內FLASH的程式,不僅僅是修改一個cmd檔案就結束了,還需要做其他幾個步驟,這里我重點強調一下,
第一步:把28335_RAM_lnk.cmd這個從project中移除,用右鍵選擇28335_RAM_lnk.cmd然后選delate,
第二步:右鍵選擇project名稱,然后選add file to
project,然后出現瀏覽框,在\Code of TMS320F28335
CCS4\v120\DSP2833x_common\cmd這個子檔案夾下,選擇F28335.cmd,點OK,至此可以在project的檔案串列內看到F28335.cmd被添加到project中,
第三步:在main()函式中添加如下陳述句
MemCopy(&RamfuncsLoadStart,
&RamfuncsLoadEnd, &RamfuncsRunStart); InitFlash();
上述兩句話添加在InitPieVectTable();這句的下面的一行,
添加陳述句的時候,注意不要添加錯了,每一個字母都要正確,括號也要用英文括號,
第四步:添加DSP2833x_MemCopy.c這個檔案到project中,右鍵選擇project名稱,然后選add file to
project,然后出現瀏覽框,找到\Code of TMS320F28335
CCS4\v120\DSP2833x_common\source檔案夾中的DSP2833x_MemCopy.c這個檔案,然后點OK,
第五步:編譯,點rebuild,編譯至少要保證沒有ERROR,否則請檢查一下
在第三步操作的地方是不是有錯誤,
其次,我再強調一下,不是RAM中運行正確的程式,就在FLASH中運行也一定正確,希望大家糾正一下以前的錯誤觀念,據我了解,很多買家朋友都會有上面的理解誤區,這是因為同樣的程式在DSP的RAM中運行消耗的時間要遠遠短于在FLASH中運行的時間,
我下面就給大家舉個例子,有一個中斷函式cpu_timer_isr10ms(),這個函式每隔10ms由CPU定時器1產生中斷觸發,自動跳轉進入執行一次,這個cpu_timer_isr1ms()內部包括三個子函式依次是adc_sanple(),pwm_update(),gpio_toggle()
如下
cpu_timer_isr1ms()
{
adc_sanple();
pwm_update();
gpio_toggle();
}
其中假設adc_sanple()這個子函式在RAM中的執行時間是1ms,pwm_update()這個子函式在RAM中的執行時間是2ms,gpio_toggle()這個子函式在RAM中的執行時間是3ms,那么1+2+3=6<10,所以完全沒有問題,在RAM中上面這些程式都可以運行很好,
但是,如果把上面這些程式放到FLASH中運行,很有可能adc_sanple()這個子函式在FLASH中的執行時間是3ms,pwm_update()這個子函式在FLASH中的執行時間是7ms,這是因為同樣的程式在DSP的RAM中運行消耗的時間要遠遠短于在FLASH中運行的時間,這樣前兩個函式就把10ms都用掉了,根本輪不上gpio_toggle()這個子函式被執行,就被DSP強制終止了,所以買家朋友就看不到gpio_toggle()的現象,于是很多買家就以為是DSP開發板出了什么問題,其實完全是自己程式出了問題,
三、DSP燒寫片內FLASH常見問題和解決方法
下面講解固化燒寫DSP的FLASH程式時候常見的困難,一般就是三種情況 1、
DSP的Boot mode 模式選擇不正確
這種錯誤的現象是可以正常Load program程式到DSP的FLASH,按照我的教程操作燒寫程式到RAM和FLASH都是沒有問題的,都可以正常燒寫,也不會報錯,但是掉電后重啟,DSP沒有反應,所謂的沒有反應就是說,本來寫的程式是讓GPIO輸出高電平,掉電后,DSP的GPIO沒有相應的輸出高電平,
這個錯誤,而且還有一個很關鍵的現象,就是說,燒寫程式到DSP的FLASH后,不拔掉DSP仿真器,像教程中說的那樣,點RUN,DSP的FLASH程式可以正確的運行,顯現正常的現象,
如果你的現象符號上面的特點,那么就很有可能是“DSP的Boot mode 模式選擇不正確”導致的錯誤,如何改正這個錯誤呢?
如果是購買的本店的TMS320F28335開發板,正確的設定從FLASH啟動的Boot mode就把DSP開發板上的撥碼開關都撥到ON的位置即可,其實這點我已經在光碟中用txt檔案強調了一下,這里我再強調一下,而且即便是你把DSP程式下載到DSP片內RAM中運行,也把撥碼開關打到ON的位置,
DSP開發板上的撥碼開關都撥到ON的位置的本質含義是:將F28335的GPIO84、GPIO85、GPIO86、GPIO87這四個引腳用1k到10k之間電阻上拉到3.3V,這樣就是選擇了從DSP內部FLASH處boot程式這個Bood mode,
2、
ccxml檔案設定處的芯片型號和開發板上的DSP型號不一致
舉個例子,實際的DSP是TMS320F2808,ccxml檔案選擇的芯片型號是TMS320C2808,這個是錯誤的,
再舉例子,實際的DSP型號是TMS320F28335,ccxml檔案選擇的芯片型號是TMS320F28334,這個也是錯誤的,
在這樣錯誤的時候,是可以成功的Connect的,但是無法正常固化程式到DSP的FLASH,
3、
把本來應該是Load program到RAM的out檔案誤以為是可以固化到DSP的FLASH中的
可以Load program到RAM的Out檔案和可以固化(燒寫)到FLASH的out檔案,內容是不同的,不能張冠李戴,
在本店DSP開發板配套的例程代碼檔案夾Code of
TMS320F28335 CCS4中,只有FLASH這個子檔案夾中的debug檔案夾下的out是可以Load program到DSP的片內FLASH的,其他的如果不做修改,那么都是默認燒寫到DSP的片內RAM中的
四、最后的一招
如果你已經把前面的第二章、第三章兩個章節的內容都操作了,但是仍然不正確,那么就用這“最后的一招”,就是在我的FLASH例程程式基礎上,移植你自己撰寫的程式,并且強烈推薦一點點的移植,這樣一邊移植,一邊編譯,一邊load到FLASH中去看現象,來檢查哪里出問題了,因為我的FLASH例程是肯定正確的,如果你把程式移植到我的FLASH例程中,仍然出現程式在FLASH中不運行的現象,那么100%是你程式寫的不對了,我建議一點點的移植的目的,就是這樣比較容易檢查到程式哪里出錯誤了,
至此我就把DSP燒寫片內FLASH常見的問題和相應的解決方法講解完畢,
以上是轉載微博的以為大佬之手,給和我一樣需要幫助的小白,,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/187533.html
標籤:其他
上一篇:CC2530 定時器應用
