1.dsp reset後執行的起始位址是多少?
0x3fffc0
2.**器燒寫程式的步驟是?
根據cmd檔案把程式燒到指定位置,然後執行。
3.dsp的flash啟動過程是什麼?
首先硬體配置gpio84~87上拉為1,即處於flash啟動過程。當dsp復位後,會從復位向量0x3fffc0處取得復位向量,並跳轉到initboot處開始執行,initboot會讀gpio84~87的值發現全為1判斷為flash啟動方式。然後會跳到0x33fff6處執行。在ccs5.2工程的cmd檔案中有如下**:
memory
sections
{...
codestart : > begin page = 0
即表示把codestart段放到0x33fff6位置處,檔案「dsp2833x_codestartbranch.asm」中有codestart段的定義,實際上codestart段只是包含了乙個跳轉指令,是程式跳轉到_c_int00處,_c_int00在boot.asm in rts library中有定義,_c_int00的**最終會呼叫c的main函式,之後就是main函式的執行。
4.f28335如何燒寫**到flash中並執行?
首先使用新增c:\ti\controlsuite\device_support\f2833x\v133\dsp2833x_common\cmd\f28335.cmd。此檔案即為配置**到flash中的ti官方配置檔案。
然後參考c:\ti\controlsuite\device_support\f2833x\v133\dsp2833x_examples_ccsv4\flash_f28335。新增以下**:
memcopy(&ramfuncsloadstart, &ramfuncsloadend, &ramfuncsrunstart);將一些在記憶體中執行的**從flash複製到記憶體中,然後程式才能正常執行。
5.寫好的**再ram中能正常執行但是燒寫到flash中後,函式dsp28x_usdelay()不能正常執行為什麼?
因為在dsp2833x_usdelay.asm中有.sect "ramfuncs",即把該函式定義在段"ramfuncs"中, 而此段需要在記憶體中執行,故需要使用函式
memcopy(&ramfuncsloadstart, &ramfuncsloadend, &ramfuncsrunstart);將ramfuncs段複製到記憶體中然後執行。只算以這樣設計是因為函式dsp28x_usdelay()精準執行對執行速度有要求故必須放在段"ramfuncs"中。參考:
6.cmd中以下**如何解釋?
ramfuncs : load = flashd,
run = raml0,
load_start(_ramfuncsloadstart),
load_end(_ramfuncsloadend),
run_start(_ramfuncsrunstart),
page = 0
第1行表示該段的裝載在paga0的flashd中
第2行表示該段的執行位址在page0的raml0中
load_ start(_ramfuncsloadstart)令編譯器建立了乙個變數ramfuncsloadstart,該變數指向段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,必須先宣告,本工程在檔案dsp2833x_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中,dsp2833x_globalprototypes.h宣告。
7.如何將乙個函式放到ram中執行?
參考ti公司標頭檔案中自帶initflash函式,這些函式會以code_section申明。如:
#pragma code_section(initflash, "ramfuncs");
TMS320F28335入門(五)ADC學習
c28335片上有乙個12位的a d轉換器 其前端為2個8選1多路切換器 2路同時取樣保持器 三者共同構成的16路模擬通道輸入 模擬量輸入範圍 0 3v 模擬通道的切換由硬體控制,並將各個通道的轉換順序存入16個結果暫存器中 其轉換率 在25mhz的adc時鐘下為80ns 具有自動排序功能 轉換結果...
TMS320F28335的時鐘介紹
tms320f28335的時鐘介紹 tms320f28335上有乙個基於pll電路的片上時鐘模組,為cpu及外設提供時鐘有兩種方式 一種是用外部的時鐘源,將其連線到x1引腳上或者xclkin引腳上,x2接地 另一種是使用振盪器產生時鐘,用30mhz的晶體和兩個20pf的電容組成的電路分別連線到x1和...
TMS320F28335的時鐘介紹
tms320f28335的時鐘介紹 tms320f28335上有乙個基於pll電路的片上時鐘模組,為cpu及外設提供時鐘有兩種方式 一種是用外部的時鐘源,將其連線到x1引腳上或者xclkin引腳上,x2接地 另一種是使用振盪器產生時鐘,用30mhz的晶體和兩個20pf的電容組成的電路分別連線到x1和...