文獻標識碼: A
文章編號: 0258-7998(2013)05-0025-04
目前,嵌入式系統(tǒng)中的雙核處理器系統(tǒng)在功耗,、散熱,、控制計算能力等方面具有單核系統(tǒng)無法比擬的優(yōu)勢,所以在嵌入式發(fā)展趨勢中占據(jù)了主導地位,??紤]到ARM處理器流水結構和DSP處理器強大的數(shù)據(jù)處理能力,采用ARM+DSP結合的非對稱雙核架構[1],,既能夠保持算法的靈活性,,又能提供強大的處理能力。本文所介紹的BootLoader正是基于ARM+DSP兩個處理器,。ARM負責外圍接口,、外圍存儲設備及子處理器(DSP)的配置和控制,DSP則負責算法加速,。這樣DSP的算法代碼作為ARM端OS文件系統(tǒng)的一個文件存在,,通過應用程序進行DSP程序的下載和DSP芯片的控制[2]。
目前關于嵌入式處理器BootLoader實現(xiàn)的文獻很多,,但大多都僅限于對單核處理器的某個方面進行介紹和研究,,如介紹怎樣進行重映射[3]、進行存儲器的初始化[4]等,,因此本文在這些方面只做簡單介紹,,而詳細介紹非對稱雙核架構系統(tǒng)自啟動過程中的關鍵部分并對具體環(huán)境中的不同技術方案進行對比分析。
在嵌入式系統(tǒng)中,,BootLoader指系統(tǒng)上電或復位之后在操作系統(tǒng)內核運行之前要執(zhí)行的代碼,,其功能是對以處理器內核為主的系統(tǒng)硬件和軟件運行環(huán)境進行必要的初始化,,初始化完成后跳轉到用戶程序,。本文基于C6A8168的ARM+DSP雙核系統(tǒng)研究并實現(xiàn)了BootLoader,其上電啟動時系統(tǒng)默認為:ARM核被使能,,DSP核被禁止,,所以只有通過程序先啟動ARM核,然后通過其應用代碼再使能DSP電源域把DSP設置為復位狀態(tài),,對DSP核進行最小的初始化以使其可以被喚醒,,系統(tǒng)開始ARM核初始化。ARM核啟動完成后再解除DSP復位狀態(tài)使DSP啟動并進入啟動路徑開始向量初始化,。BootLoader的詳細過程如圖1所示,。
1 啟動模式配置
C6A8168開機上電或復位時,,BOOT管腳上配置的啟動模式被鎖定到系統(tǒng)配置模塊中的BOOTCFG寄存器,從而可以確定處理器的啟動方式,。啟動配置引腳的不同還將決定存儲設備片選總線,、等待使能及數(shù)據(jù)和地址的復用情況等,本芯片支持包括NOR Flash,、NAND Flash,、SD、EMAC,、UART等多種啟動模式,。在本系統(tǒng)中,BootLoader采用系統(tǒng)默認的NAND Flash boot,,對于NAND Flash基本是由ARM訪問,。DSP的算法代碼作為AEM端OS文件系統(tǒng)的一個文件存在,通過應用程序進行DSP程序的下載和DSP芯片的控制,,外部RAM空間即DDR存儲區(qū)是ARM和DSP共享的,,在設計和實現(xiàn)BootLoader時需要把ARM和DSP使用的內存從物理上嚴格分開,并預留一部分用于雙核系統(tǒng)的交互,。
C6A8168啟動模式與以往的不同在于,,芯片在啟動時根據(jù)啟動引腳的配置按順序自動搜尋啟動設備表中的設備以搜尋可以執(zhí)行的啟動鏡像。找到鏡像后將其拷貝到目標RAM,,再通過重映射機制把RAM映射為零地址,,系統(tǒng)上電或者復位時就可以從RAM中的BootLoader開始執(zhí)行[4]。啟動設備表包括片內存儲器表和片外存儲器表兩部分,。部分有代表性的啟動設備順序表如圖2所示,。
2 雙核處理器啟動準備
C6A8168啟動并不是雙核同時啟動,系統(tǒng)上電或復位時默認的芯片啟動配置是ARM核使能,,DSP禁能,。關閉看門狗和其他所有中斷是為BootLoader的成功執(zhí)行做準備??撮T狗本來的作用是防止程序無限制地運行而造成死循環(huán),,但是如果在超過規(guī)定的時間不給看門狗電路清零,看門狗計數(shù)器就會溢出從而引起看門狗中斷,,造成系統(tǒng)的復位[5],。考慮到看門狗此特征和啟動過程中有可能會發(fā)生中斷或循環(huán)復位而影響啟動,,看門計數(shù)器和中斷在啟動時要關閉,。
在關閉中斷和看門狗之后ARM核初始化開始前需要使能DSP電源域使DSP進入到Reset模式。這個過程包括對DSP的一些最簡單的初始化,例如分配一個能使DSP喚醒的最小的時鐘等,。
3 ARM核初始化
本文將重點闡述作為雙核系統(tǒng)主處理器的ARM處理器自啟動過程與單核ARM處理器自啟動的異同點,。
3.1 中斷向量表
雙核處理器中ARM核中斷向量表與單核類似,其最大差距在于,,通常的中斷向量表只有一個,,但在ARM+DSP雙核系統(tǒng)中是先設置ARM處理器的中斷向量表,待ARM核初始化完成后再喚醒DSP核,,DSP核被釋放后進行啟動時,,對應有DSP核的中斷向量表。中斷向量表詳細寫法不再詳細贅述,,本文著重詳細介紹向量表中兩個方案,,如表1所示。
這兩個方案各有優(yōu)缺點,,在調試過程中經(jīng)過對兩個方案的對比和分析,,依據(jù)TD-LTE射頻一致性測試儀表系統(tǒng)的具體特性和應用要求選擇了第一個方案,原因有二,。其一,,B指令再被復制時沒有LDR簡單,這里所說的復制是指搬運異常向量表,。由于B指令在搬運過程中常常出錯,,所以穩(wěn)定性不夠。其二,,B指令的跳轉范圍小于32 MB,,如果異常中斷處理程序起始地址大于32 MB,則不適合使用B指令,,而LDR指令雖然只能跳轉到PC 4 KB范圍之內,,但在LDR指令不遠處用DCD指令定義一個字,這個字里面存放最終異常服務程序的地址就可以實現(xiàn)4 GB全范圍跳轉[4],。
在綜合考慮TD-LTE射頻一致性測試儀系統(tǒng)需求及其對穩(wěn)定性的特殊要求,,本BootLoader采用第一種方案。
3.2 堆棧的初始化
堆棧的初始化是和ARM處理器運行模式對應的,,由于ARM處理器有七種運行模式,,各個模式都需處理各自相關的調用、中斷等,,所以必須為每一種模式提供獨立的堆??臻g,在需要改變處理器為其他模式時就需要通過各處理器模式對應的堆棧指針來修改各模式對應的堆棧指針(SP),。在堆棧設置時需要注意,如果切換到User模式,則不能再從操作狀態(tài)寄存器CPSR回到其他模式,,可能會對接下來的程序執(zhí)行造成影響,。由于堆棧大小、位置及其初始化方式與單核ARM處理器的BootLoader并無區(qū)別,,故不再贅述,。
需要注意的是,堆棧初始化的順序會決定系統(tǒng)在初始化完成后所處的處理器模式,,即最后初始化哪種模式的堆棧系統(tǒng)就將運行在哪種模式,。
3.3 時鐘初始化
時鐘的初始化是在雙核系統(tǒng)中的PRCM(Power,Reset,,Clocking Management)模塊中進行,。PRCM模塊負責對系統(tǒng)的電源域、復位和時鐘進行管理,,在BootLoader中只需對時鐘管理進行初始化即可,。在鎖相環(huán)初始化完成后再使能系統(tǒng)各功能模塊時鐘就完成了對該模塊的初始化。在C6A8168中內嵌有4個PLL(Main,,Audio,,Video,DDR)以為系統(tǒng)各個不同的部分提供不同時鐘[6],。其中各PLL初始化過程相似,。時鐘的產(chǎn)生途徑如圖3所示。
由圖3可知,,時鐘初始化共需配置3個主要結構:多相位PLL,、時鐘合成器和PRCM模塊。時鐘合成器的個數(shù)由SYSCLK個數(shù)來決定,,這樣就可以根據(jù)系統(tǒng)需要為各模塊提供不同的時鐘,。多相位鎖相環(huán)把輸入的參考時鐘與N分頻相乘后與K相位值一起輸出給PLLCLK合成器,該合成器會根據(jù)多相位PLL輸入和輸入?yún)?shù)FREQ_N2根據(jù)公式fs=fvco×k/FREQ[6]輸出PLLCLK時鐘給PRCM模塊作進一步的分頻,,其中FREQ_N2是一個由4位整數(shù)和24位小數(shù)組成的參數(shù)[5],。除了幾個特殊的鎖相環(huán)以外,大部分鎖相環(huán)在系統(tǒng)復位或者上電后都處于旁路(bypass)模式,,在這種模式中參考時鐘繞過PLL直接輸出到系統(tǒng)具體模塊或者經(jīng)PRCM分頻后再輸出,。需要注意的是,在把時鐘提供給系統(tǒng)模塊前需要一個等待時間以使PLL輸出達到穩(wěn)定狀態(tài),,其中除了audio PLL需要等待8 ?滋s外,,其他鎖相環(huán)都只需要等待5μs。
對PLL初始化時,,必須保證PLL是在旁路模式,,否則初始化無效。經(jīng)過測試發(fā)現(xiàn)PLL上電啟動后默認為斷電模式,所以在進入旁路模式后要使PLL退出斷電模式,,再根據(jù)系統(tǒng)各模塊時鐘對上文提到的各個參數(shù)進行配置,,配置完成后必須使PLL為非旁路模式才能使能時鐘。
3.4 應用程序執(zhí)行環(huán)境的初始化
所謂應用程序執(zhí)行環(huán)境的初始化就是完成從NAND Flash 到RAM的必要的數(shù)據(jù)傳輸和內容清零,。系統(tǒng)上電之后即從地址0開始取得第一條指令,,所以0地址必須在上電時就存放可執(zhí)行的正確代碼。由于本系統(tǒng)采用NAND Flash 啟動模式,,地址0的地方應該是NAND Flash,,因此上電時系統(tǒng)會通過硬件機制把NAND Flash 中block0的前8個page的數(shù)據(jù)自動加載到SRAM,剩余的數(shù)據(jù)搬移需要在BootLoader中實現(xiàn),。啟動路徑完成數(shù)據(jù)拷貝后會跑到由目標文件定義的入口點,,可以根據(jù)map文件在指令文件中通過--entry_point制定新的入口地址。
4 DSP核喚醒啟動
ARM處理器啟動完后,,由于其初始化后大部分系統(tǒng)相關功能已初始化,,DSP核作為輔處理器其啟動相較于ARM核要簡單很多。ARM處理器啟動完成后DSP處理器處于默認的復位狀態(tài),,必須把主處理器(ARM)模式改為管理模式才能使DSP處理器從復位狀態(tài)中退出,。當系統(tǒng)處于調試模式時,通過.GEL文件中DSP核喚醒函數(shù)使處理器退出Reset狀態(tài)后連接DSP核就可以進入該核的啟動流程,。當系統(tǒng)處于自啟動模式時,,需主處理器ARM進入到管理模式,在后續(xù)的初始化操作進行之前還必須把DSP相關BootLoader放在特定的啟動地址處才能喚醒輔處理器,這一過程是由ARM處理器負責完成的,。
DSP核的BootLoader組成上與ARM核中的BootLoader基本相似,,只是部分公用模塊有區(qū)別,不同的模塊如PLL和中斷向量表寫法也都大同小異,,其啟動流程與ARM核類似,,所以在此不再詳細描述。
在TD-LTE雙核系統(tǒng)中通過測試板測試兩個時鐘以驗證雙核系統(tǒng)啟動是否成功,。第一個測試點為該系統(tǒng)中PLL時鐘Main5,,按需要其時鐘頻率應該配置為125 MHz,之所以會選擇該測試點是由于Main5時鐘代表ARM核配置時鐘與相關地址總線讀寫成功與否[6],。第二個為DDR時鐘頻率,,由于DDR時鐘初始化與DSP核啟動相關,所以該時鐘的正確性將直接決定DSP的啟動是否成功,。通過芯片外延測試點由示波器測試得到頻率波形圖,,如圖4、圖5所示,。
圖4中所測時鐘頻率與系統(tǒng)理論值基本相符,,圖5中,,在芯片外延測試點引腳拉高時向DDR中寫1 MB數(shù)據(jù),拉低后馬上拉高,,通過示波器觀察寫數(shù)據(jù)需要20.10 ms,,由此可得DDR時鐘頻率為400 MHz,,與系統(tǒng)理論值一樣,。兩測試點與理論值的一致既反應了時鐘配置方法的正確性,也說明了系統(tǒng)啟動成功(BootLoader正確性),。
根據(jù)TD-LTE系統(tǒng)需求和ARM+DSP嵌入式系統(tǒng)的特點,,本文設計并實現(xiàn)了綜合硬件和軟件兩個方面的BootLoader,在雙核非對稱架構系統(tǒng)的自啟動中有較高的參考價值,。以上啟動過程已經(jīng)通過程序實現(xiàn)并在Code Composer Studio 5.2中順利經(jīng)過編譯調試和測試板驗證,,所得結果均與理論值一致。本BootLoader在保證具有較強穩(wěn)定性的前提下滿足了國家重大科技專項“TD-LTE射頻一致性測試儀表”對包括硬件和軟件在內的系統(tǒng)需求并已成功應用在其中,。
參考文獻
[1] 蔣建春,,曾索華,岑明.一種基于異構雙核處理器的嵌入式操作系統(tǒng)構架設計[J].計算機應用,,2008,,28(10):2686-2689.
[2] 何永泰.ARM單片機啟動代碼研究[J].微處理機,2008(3):88-90.
[3] Peng Li,,Yu Lu,,Wei Hongxing.Realization of embedded multimedia system based on dual-core processor OMAP5910[J].Computational Engineering in Systems Applications (CESA),2008(4):101-105.
[4] SINGH G,,BIPIN K,,DHAWAN R.Optimizing the boot time of Android on embedded system[C].2011 IEEE 15th International Symposium on Consumer Electronics,Greater Noida,,India,,June,2011:503-508.
[5] 杜春雷.ARM體系結構與編程[M].北京:清華大學出版社,,2003.
[6] TI公司.TMS320C6A816x C6-Integra DSP+ARM processors user′s manual[R].2011.