No source available for "0x0" 出現這種問題的處理方法

DSP28x_usDelay()

程序爲了實現精確的定時,使用了一個用匯編編寫的延時函數DSP28x_usDelay(),該函數在文件DSP281x_usDelay.asm中,細節請閱讀該文件。爲了調用該函數,在Main.c中做了如下聲明:

extern void DSP28x_usDelay(Uint32 time);

該函數的定時仍然不夠精確,因此在文件DSP281x_Examples.h中做了如下的宏定義修正:

#define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L)

函數DSP28x_usDelay(Uint32 time)要想非常精確,必須在SARAM中運行,因此需要在運行時將其調入SARAM中。爲此,需要做如下工作:

首先,在DSP281x_usDelay.asm中使用

.sect "ramfuncs"

將該段代碼定義到段“ramfuncs”中,段ramfuncs的位置在編譯時指定,實際上由F2812.cmd文件中的如下語句來指定:



ramfuncs LOAD = FLASHD, PAGE = 0,

RUN = RAML0, PAGE = 1,

LOAD_START(_RamfuncsLoadStart),

LOAD_END(_RamfuncsLoadEnd),

RUN_START(_RamfuncsRunStart)



第1行表示該段的裝載在PAGA0的FLASHD中(PAGA0和FLASHD的分段請見F2812.cmd文件,後文將有詳解);

第2行表示該段的運行地址在PAGE1的RAML0中(PAGA1和RAML0的分段請見F2812.cmd文件,後文將有詳解);

LOAD_ START(_RamfuncsLoadStart)令編譯器創建了一個變量RamfuncsLoadStart,http://tiyubisai.com/video_news/news_135561.html該變量指向段ramfuncs的裝載地址的首地址(LOAD_ START爲編譯僞指令,請見CCS的幫助文檔);

LOAD_ START(_RamfuncsLoadEnd)令編譯器創建了一個變量RamfuncsLoadEnd,該變量指向段ramfuncs的裝載地址的末地址(LOAD_ END爲編譯僞指令,請見CCS的幫助文檔);

LOAD_ START(_RamfuncsRunStart)令編譯器創建了一個變量RamfuncsRunStart,該變量指向段ramfuncs的運行地址的首地址(LOAD_ START爲編譯僞指令,請見CCS的幫助文檔);

從第1和2行可以看出,段ramfuncs中的函數DSP28x_usDelay()的裝載地址和運行地址是不同的,本程序中裝載在Flash的塊FLASHD中,而在SARAM L0中運行,這只是目標,實際運行時DSP並會自動將Flash中的代碼拷貝到SARAM中,因此需要手動添加代碼來完成。

在C函數中,爲了使用變量RamfuncsLoadStart、RamfuncsLoadEnd和RamfuncsRunStart,必須先聲明,本工程在文件DSP281x_GlobalPrototypes.h中做了如下聲明:

extern Uint16 RamfuncsLoadStart;

extern Uint16 RamfuncsLoadEnd;

extern Uint16 RamfuncsRunStart;

然後就可以使用了。在Main.c中,使用MemCopy()函數將段ramfuncs中的函數DSP28x_usDelay()的代碼從裝載地址RamfuncsLoadStart—RamfuncsLoadEnd拷貝到RamfuncsRunStart開始的SARAM空間中。之後在程序運行時,只要調用DSP28x_usDelay()函數,都會自動地指向SARAM中相應的函數入口地址,這一點是自動完成的。MemCopy()函數原型在MemCopy.c中,在DSP281x_GlobalPrototypes.h聲明。

注意:即使這樣,定時仍然可能不精確,因爲可能有中斷打斷DSP28x_usDelay()的運行,所以在調用之前要關中斷。

http://blog.csdn.net/xiaoxiongli/article/details/49619399
http://blog.csdn.net/xiaoxiongli/


發佈了79 篇原創文章 · 獲贊 23 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章