熱度 2|
DSP28335— DELAY_US總結 在很多程序中都會調用延時程序DELAY_US(A),在文件DSP2833x_Examples.h中有如下宏定義: #define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L) 在仿真調試的情況下運行程序,延時是較準確的,但是當把程序燒寫到flash里運行時,如果程序上不做修改,就會很容易發現延時的時間比你設置的要長(通過延時控制LED燈閃爍,很直觀)。這是因為,DSP訪問flash時需要等待時間的,而訪問RAM時幾乎是零等待,所以在使用DELAY_US(A)時要想延時時間準確必須使其在RAM里運行,在程序上需做如下修改: 1、在DSP2833x_usDelay.asm中,有如下代碼:
.global __DSP28x_usDelay 其中.sect "ramfuncs"語句的作用就是就把用匯編寫的函數DSP28x_usDelay定位在ramfuncs段。
2、在工程中添加源文件DSP2833x_MemCopy.c,該文件中的函數void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr),實現把你想復制的代碼從裝載地址RamfuncsLoadStart—RamfuncsLoadEnd拷貝到RamfuncsRunStart開始的SARAM空間中。
3、在文件DSP2833x_SysCtrl.c開頭,通過偽指令定義一個代碼段,注意位置一定要放在函數前面(如下圖所示)。 4、在main函數中要調用MemCopy函數,注意該函數放置的位置。
6、注意在頭文件DSP2833x_GlobalPrototypes.h 別忘做如下聲明: |