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