




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、DSP-BIOS使用入門從環境說到搭建第一個工程請注意,此文默認讀者已經對DSP及CCS V3.3環境有一定的了解了,知道cmd文件的配置,知道新建工程,編譯并連接仿真器下載!如果你對這些還都不熟悉,請先熟悉這些!當然,最好要有操作系統的基本概念任務、調度、中斷!第一個問題:DSP/BIOS(好吧,我們一般這樣寫)是什么?是TI公司專門為DSP開發的嵌入式實時操作系統,既然是TI公司為自己的DSP開發的官方的,當然性能是杠杠的了(當然,我還在入門,這點也是道聽途說,沒有實際體會)。既然說到實時操作系統,那還有哪些嵌入式實時操作系統呢?Linux是嗎不是,VxWorks是,哦,還有一個小的開源系
2、統uCOS II也是。問題二:要使用DSP/BIOS,需要安裝什么環境呢?本文為CCS v3.3,默認就安裝上DSP/BIOS,版本為V5.31.2(可以通過Help->About.菜單查看版本)。當然,如果需要其它版本(可以同時安裝多個版本),可以到TI官網下載,鏈接:http:/software-請注意:DSP處理器型號、CCS版本、DSP/BIOS版本之間存在兼容性,請注意選擇!下載后安裝到CCS所在目錄,通過Help->About.中的Manager選擇使用的BIOS版本!本文使用的是CCS V3.3默認的DSP/BIOS版本,即V5.31.2。無特殊說明,本文的例子運行在
3、TI的CCS 3.3軟件仿真模式下,仿真環境配置如下(使用C6713處理器仿真):問題三:如何建立第一個BIOS工程?先建立一個普通工程,Project->New.,如下:File->New->DSP/BIOS Configuration.新建DSP/BIOS配置文件,保存一下,配置文件的后綴為*.tcf.將配置文件和由配置文件自動生成的cmd文件添加到工程,新建一個main.c文件,把main.c添加到工程(總是忘記這個然后還到處找問題),寫個最簡單的代碼吧,int main(void) return 0;編譯一下工程,此時出現錯誤提示:js: "./bios_f
4、irst.tcf", line 11: Heaps are enabled, but the segment for DSP/BIOS Objects (MEM.BIOSOBJSEG) is not set correctly. Please create a heap in one of your data segments and set MEM.BIOSOBJSEG to it.沒關系,在下一小節將看到怎么去掉該錯誤!DSP/BIOS的配置方法系統配置在Global Setting上右鍵屬性,設置DSP目標板時鐘,CLKOUT時鐘以及大小端模式。關于Call User Init
5、 Function選項,默認是打開的,如果連接有實體目標板,則最好在此處設置用戶初始化PLL及EMIF等的代碼的函數(有關PLL初始化話的代碼參考其它C6713的工程)。否則軟件仿真模式下,則去掉該選項能在運行時避免不少錯誤。接下來配置SDRAM及堆大小,現在可以重新編譯一下工程了,恭喜恭喜,編譯成功!之前提示的堆錯誤就在這里解決的!現在,就需要根據需求對SDRAM的存儲空間進行劃分(就是以前沒使用操作系統時要寫cmd文件一樣,這里的劃分將自動生成或修改cmd文件)。使用DSP/BIOS很方便,在MEM上右鍵Insert MEM就可插入分區了!這部分功能對應到cmd上就是類似于cmd中MEMO
6、RY的功能,MEMORY BOOT_RAM: o=00000000h,l=00000400h IRAM : o=00000400h,l=0003FC00h /* CE2: SDRM 256Mbit */ SDRAM: o = 80000000h,l=01000000h /* 128Mbit */ GB_MEM: o = 81000000h,l=01000000h /* 128Mbit */ /* Flash */ FLASH_BOOT : o=90000000h,l=00000400h FLASH_REST : o=90000400h,l=000FFB00h LOG的配置LOG功能說白了就是用
7、來實現printf的,STS用來捕獲任意對象的計數值。在LOG上右鍵Insert LOG,插入一個trace的打印對象,在main.c中編寫如下代碼,#include "bios_firstcfg.h" / DSP/BIOS自動生成,可以在工程下找到,包含了對trace的聲明以及相關頭文件的包含int main(void) LOG_enable(&trace); LOG_printf(&trace, "Hello DSP/BIOS %d.", 0); return 0; 編譯通過后裝載程序,打開菜單DSP/BIOS->Message
8、 Log,運行程序效果如圖,注意,上面的程序中是通過LOG_printf函數而非printf打印消息的,其它的有關LOG的函數還有,LOG_disable. Disable the system log.LOG_enable. Enable the system log.LOG_error. Write a user error event to the system log.LOG_event. Append unformatted message to message log.LOG_event5. Append 5-argument unformatted message to log.
9、LOG_message. Write a user message event to the system log.LOG_printf. Append formatted message to message log.LOG_printf4. Append 4-argument formatted message to log.LOG_reset. Reset the system log.好了,這是我們學習DSP/BIOS遇到的第1個模塊(Module)LOG模塊。其實DSP/BIOS中還有很多模塊,參考TI文檔SPRU430S:TMS320C6000 DSP/BIOS 5.x Appli
10、cation Programming Interface (API) Reference Guide任務模塊的配置操作系統最基本的就是任務,我們先來看看任務!新建兩個任務,右鍵屬性設置任務函數名,如圖,對TSK_task1做相同的配置,請注意,其中的Task function要在C函數前加下劃線!在main函數中添加兩個任務的代碼,void func_task0(void) / 對應剛才的_func_task0 static Uint16 TSK0 = 0; while (1) / 任務一般都有死循環,只執行一次的任務意義不大 LOG_printf(&trace, "TSK0
11、=%u", TSK0+); TSK_yield(); void func_task1(void) / 對應剛才的_func_task1 static Uint16 TSK1 = 0; while (1) LOG_printf(&trace, "TSK1=%u", TSK1+); TSK_yield(); 重新編譯裝載,運行后在Message Log窗口下看到的效果如下:操作系統的任務都是死循環的結構,要實現任務調度必須要讓每個任務有空閑的時間,不妨把上面代碼中的TSK_yield()注釋掉,重新編譯裝載運行,此時程序會一直在func_task0中執行。TS
12、K_yield在這里的作用就是如果有相同優先級的任務,則調度到同優先級的其它任務執行!TSK模塊的屬性有很多,除了設置函數名外,還可以設置優先級、輸入參數等!調度函數也有很多,另一個常用的是使用睡眠調度函數TSK_sleep,其使用如下:void func_task(void) while(1) / 處理代碼 TSK_sleep(100); / 100表示系統時鐘計數 軟中斷SWI模塊的配置中斷具有比任何任務都高的優先級,而其中硬件中斷(HWI)又比軟件中斷(SWI)優先級更高。軟中斷郵箱不是信號中的消息郵箱,但機制類似,上面的值為軟中斷郵箱的復位值!一旦軟中斷郵箱的值達到0時,觸發軟件中斷,
13、觸發后一次執行完成(除非被硬件中斷打斷),執行完后軟中斷郵箱恢復到復位值!由于是一次執行完成,因此與任務不同,軟中斷中絕不會有死循環(否則就一直執行軟中斷,任務就別執行了)!接下來完成軟中斷函數中的內容:task1每執行2次,觸發一次軟中斷,軟中斷計數值+1。void func_task1(void) / 對應剛才的_func_task1 static Uint16 TSK1 = 0; while (1) LOG_printf(&trace, "TSK1=%u", TSK1+); SWI_dec(&ADC_swi); / 軟中斷郵箱計數值遞減 TSK_yie
14、ld(); void swi_adc(void) static Uint16 adc_cnt = 0; LOG_printf(&trace, "SWI_ADC=%u", adc_cnt+); / 一次執行完后,郵箱值恢復為初始值2SWI_dec()函數用于修改軟中斷郵箱的計數值,其它對軟中斷郵箱操作的函數還包括:void SWI_or(swi, mask); / 郵箱值與mask進行或操作,當值為0時觸發軟中斷SWI_Handle swi; /* SWI object handle*/Uns mask; /* value to be ORed */void SWI_
15、andn(swi, mask); / 郵箱值與mask進行與非操作,當值為0時觸發軟中斷SWI_Handle swi; /* SWI object handle*/Uns mask /* inverse value to be ANDed */void SWI_inc(swi); / Increment SWIs mailbox value and post the SWISWI_Handle swi; /* SWI object handle*/void SWI_dec(swi); / Decrement SWIs mailbox value and post if mailbox beco
16、mes 0SWI_Handle swi; /* SWI object handle*/6000系列的DSP軟中斷郵箱為32位,2000系列為16位。下面是從劉鑫茂的DSP/BIOS講座PPT中截取的軟中斷郵箱函數的對比圖及操作時郵箱值的變化過程圖:信號量SEM模塊的配置信號量分互斥信號量和計數信號量,互斥信號量只有兩種狀態:可用于不可用,計數信號量通過設置一個計數值,如果計數值大于0,則任務請求該信號量時不被阻塞。編寫程序:現在是任務執行2次進一次軟中斷,這里將信號量初始值設為1,task0中使用SEM_pend等待信號量,task0執行1次就進入等待狀態,再過一次,進入軟中斷,軟中斷中使用S
17、EM_post發布信號量,信號量值增1,task0收到信號量后從等待狀態返回,繼續執行!status = SEM_pend(sem, timeout);SEM_Handle sem; /* semaphore object handle */Uns timeout; /* return after this many system clock ticks */返回值:Bool status; /* TRUE if successful, FALSE if timeout */如果timeout=0表示不等待繼續執行,SYS_FOREVER表示一直等待直到信號量的值大于0。SEM_post()函
18、數相對簡單,不贅述。輸入輸出實時數據交換模塊配置不知注意到沒有,軟件仿真模式下,使用Load裝載程序時總會彈出如下的警告框,這就是RTDX模塊沒有配置的問題,在輸入輸出的RTDX模塊上右鍵屬性,配置如下,配置好后,重新編譯,Load時就不會再彈出那警告框了!總結一下:其實,就讓上文看到的一樣,DSP/BIOS的模塊還有很多,上面只是挑了幾個比較常用的說了說,就光信號同步那一大塊就還有消息郵箱、消息隊列等,所謂舉一反三,這些模塊的功能及函數定義,或者想了解更多關于DSP/BIOS知識,都可以從下面的手冊上找到:SPRU430S: TMS320C6000 DSP/BIOS 5.x Applicat
19、ion Programming Interface (API) Reference GuideSPRU423F: TMS320 DSP BIOS User GuideSPRU616A: DSP-BIOS Driver Developer's Guide除此之外,要想靈活的使用DSP/BIOS,畢竟它是一個操作系統,熟悉操作系統的基本概念很重要,如果學習或使用過uCOS ii或Linux這些去學習DSP/BIOS就小菜一碟了!DSP/BIOS工程的啟動順序初始化DSP:DSP/BIOS程序從C/C+環境入口c_int00開始運行。對于C6000平臺,在c_int00開始處,系統棧指針(B
20、15)和全局頁指針(B14)被分別設置在堆棧斷的末尾和.bss斷的開始。控制寄存器AMR、IER、CSR等被初始化;初始化.bss段:當堆棧被設置完成后,初始化任務被調用,利用.cinit的記錄對.bss斷的變量進行初始化;調用BIOS_init初始化用到的各個模塊:BIOS_init調用MOD_init對配置用到的各個模塊進行初始化,包括HWI_init、HST_init、IDL_init等;處理.pinit表:.pinit表包含一些指向初始化函數的指針,對C+程序,全局對象類的創建也在此時完成;調用用戶程序的main函數:用戶main函數可以是C/C+函數或者匯編語言函數,對于匯編函數,使
21、用_main的函數名。由于此時的硬件、軟件中斷還沒有被使能,所以在用戶主函數的初始化中需要注意,可以使能單獨的中斷屏蔽位,但是不能調用類似HWI_enable的接口來使能全局中斷;調用BIOS_start啟動DSP/BIOS:BIOS_start在用戶main函數退出后被調用,它負責使能使用的各個模塊并調用MOD_startup啟動每個模塊。包括CLK_startup、PIP_startup、SWI_startup、HWI_startup等。當TSK管理模塊在配置中被使用時,TSK_startup被執行,并且BIOS_start將不會結束返回;執行idle循環:有兩種方式進入idle循環。當TSK管理模塊使能時,任務調度器運行的TSK_idle任務調用IDL_loop在其它任務空閑時進入idle循環;當T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目投標開發協議書
- 高價買房認購協議書
- 酒店房屋轉租協議書
- 車輛維修風險協議書
- 進駐健康驛站協議書
- 銷售人員駐點協議書
- 裝修合同定金協議書
- 銀行發卡服務協議書
- 養殖雞合伙合同協議書
- 乒乓球館會員卡協議書
- 獸醫傳染病學PDF
- 軟件生存周期過程控制程序
- 鋼制列管式固定管板換熱器結構設計手冊
- 注塑車間平面規劃圖OK
- 幼兒園中班音樂《小雨沙沙》微課件
- 西鐵計202119號 中國鐵路西安局集團有限公司關于印發《西安局集團公司地方涉鐵工程建設管理辦法》的通知2021-01-25
- 光伏發電項目試驗計劃
- 2023年全國青少年航天知識大賽題庫
- 《一棵小桃樹》閱讀
- 髖臼及股骨骨缺損的分型及評價-課件
- 上海市華師大二附中2022-2023高二下學期期中政治試卷
評論
0/150
提交評論