DSP/BIOS程式啟動順序

來源:互聯網
上載者:User

標籤:顯示   ios應用程式   基於   writer   期望   有關   pip   ++   自動   

基於TI的DSP晶片的應用程式分為兩種:一般應用程式;DSP/BIOS應用程式。

為簡化編程,TI提供了一套C的編程介面,它以API和宏的形式封裝了TI的所有硬體模組,這套介面統稱DSP/BIOS。DSP/BIOS包含以下模組:

System(包含MEM,SYS對象)

Instrumentation(包含LOG,STS對象)

Scheduling(包含CLK,PRD,HWI,SWI等等對象)

Synchronization(包含SEM,MBX,QUE等等對象)

Input/Output(包含RTDX,HST等等對象),Chip Support Library(包含DMA,GPIO等等對象)。

DSP/BIOS程式啟動順序  :

1)       初始化DSP。DSP/BIOS程式從入口c_int00開始。複位後,複位中斷向量將程式指標自動引導到c_init00。系統堆棧指標SP設定成指向.stack段的結尾,狀態寄存器st0和st1也被初始化。

2)       從.cinit段的記錄來初始化.bss段,堆棧指標建立後,初始化程式使用.cinit段的記錄來初始化全域變數。

3)       調用BIOS_init初始化DSP/BIOS的各個模組。BIOS_init執行基本的模組初始化,然後調用MOD_init宏分別初始化每個使用的模組。例如,HWI_init初始化有關硬體中斷的寄存器,建立ISTP和中斷選擇寄存器,清除IFR中斷標誌寄存器,設定IER中斷使能寄存器;HST_init初始化主機介面I/O通道介面,如果使用了RTDX,則HST_init將IER中對應RTDX硬體中斷的相應位置置1;IDL_init初始化空閑迴圈的指令計數,主要來校正CPU負荷圖來顯示CPU的負擔。

4)       處理.pinit表。.pinit表包含了初始化函數的指標,對於C++程式,全域C++對象的建構函式會在pinit的處理中執行。

5)       調用使用者主程式main函數。在所有的DSP/BIOS模組初始化後,硬體中斷和軟體中斷均為使能,此時應用程式可以添加代碼初始化各種外設。在初始化過程中,必須保持禁止各種中斷。

6)       調用BIOS_start啟動DSP/BIOS。和其他函數一樣,BIOS_Start函數也是由組態工具產生的,該函數包含在programcfg.snn檔案中。BIOS_start負責使能DSP/BIOS模組並為每一個使用的模組調用MOD_startup宏使其開始工作。例如,CLK_startup設定PRD寄存器,使能IR寄存器中對應CLK管理器中所選時鐘的位置1,然後啟動時鐘;SWI_startup設定軟體中斷,TSK_startup使能所有任務線程。HWI_startup設定CSR寄存器中的GIE位,使能硬體中斷;PIP_startup為每個PIP對象調用notifywriter函數。如果組態工具中TSK管理器是使能的,那麼BIOS_startup不會返回。

7)       執行空閑迴圈。調用IDL_loop引導程式進入DSP/BIOS空閑迴圈,此時硬體和軟體中斷可以中止空閑迴圈的執行。空閑迴圈控制DSP和主機的通道,空閑迴圈時主機和DSP系統之間可以進行資料通訊。 

在DSP/BIOS應用程式中,main()函數用於實現使用者的初始化操作,片內/片外外設的配置,以及使能單獨的硬體中斷等,然而,main()函數並不屬於DSP/BIOS的任何線程類型,它僅僅是一個匆匆過客,在作完使用者期望的初始化之後,也就壽終正寢了。

值得注意的一點是,應用程式在執行main函數時,並不是所有的DSP/BIOS API函數都可以調用,其間有著相應的先後關係,這是因為,main函數啟動的時候,DSP/BIOS並沒有完成最終的初始化,因此,main函數對於DSP/BIOS 有些API函數的調用是受限的。

從DSP啟動的過程來看,DSP/BIOS的初始化是分為兩大階段的,一個是位於main函數前面的BIOS_init中,一個是在main函數後面的BIOS_start中。

BIOS_init所主要完成的是MEM模組的初始化工作,而BIOS_start負責的是使能全域中斷、配置和啟動定時器、開啟線程調度、啟動DSP/BIOS線程等。因此,在main函數中,可以調用實現動態儲存裝置器分配的函數:MEM_alloc、MEM_free;以及動態建立對象的API 函數:XXX_create、XXX_delete等。對於“假設硬體中斷和定時器都已經使能的API”、或者可能引起阻塞的API函數都不可以在main函數中調用,例如CLK_gethtim、CLK_getltime、HWI_enable、HWI_disable、SWI_enable、SWI_diaable、TSK_disable、TSK_enable、SEM_pend、MBX_pend等。特別需注意的是,main函數中一定不能存在無限迴圈,否則整個DSP/BIOS程式將癱瘓。

但是對於使DSP/BIOS線程就緒的調度函數卻允許在main函數中調用,例如SEM_post、SWI_post等,其實質還是在等BIOS_start進行完所有的初始化後再執行如上的調度操作。

因此可以明白一點的是,main函數穿插在BIOS的初始化過程中,為人工幹預DSP/BIOS的啟動提供了機會,使得BIOS的運作更具“個人化”。其間CPU的控制權從DSP/BIOS提交給使用者,然後在返回給DSP/BIOS。

DSP/BIOS程式啟動順序

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.