TMS320F28335學習筆記 啟動過程

2021-06-10 00:23:03 字數 2790 閱讀 2620

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和...