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