文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)02-0019-04
OMAPL138雙核處理器是由TI推出的雙核處理器,內(nèi)部包含ARM和DSP兩個(gè)內(nèi)核,,已經(jīng)廣泛應(yīng)用于對(duì)講機(jī)等低功耗產(chǎn)品中,。目前,OMAPL138雙核處理器的自啟動(dòng)通常采用AIS轉(zhuǎn)換器和串口下載程序的方式實(shí)現(xiàn),,這種實(shí)現(xiàn)方式需要實(shí)現(xiàn)串口接收并燒寫AIS轉(zhuǎn)換器轉(zhuǎn)換出來的應(yīng)用程序二進(jìn)制文件,,整個(gè)實(shí)現(xiàn)比較復(fù)雜。本文介紹了一種基于NOR Flash自舉引導(dǎo)啟動(dòng)實(shí)現(xiàn)OMAPL138自啟動(dòng)的方案,,實(shí)現(xiàn)簡(jiǎn)單,,易于掌握。詳細(xì)分析了OMAPL138雙核系統(tǒng)的啟動(dòng)流程和實(shí)現(xiàn)方法,,對(duì)于OMAPL138系統(tǒng)應(yīng)用具有很強(qiáng)的參考價(jià)值,。
1 OMAPL138雙核系統(tǒng)NOR Flash自舉啟動(dòng)原理
OMAPL138內(nèi)部包含ARM和DSP雙核,要實(shí)現(xiàn)OMA-PL138雙核系統(tǒng)的自舉啟動(dòng),,就需要實(shí)現(xiàn)ARM和DSP雙核啟動(dòng),。
本設(shè)計(jì)采用ARM喚醒DSP的引導(dǎo)啟動(dòng)OMAPL138雙核系統(tǒng),,這種方式需要實(shí)現(xiàn)ARM核bootloader引導(dǎo)程序和ARM,、DSP應(yīng)用程序段的燒寫程序的編寫。OMAPL138程序代碼段在NOR Flash中的地址映射如圖1所示,,其中,,bootloader代碼段存放在OMAPL138的共享內(nèi)存空間,共享內(nèi)存空間位于0x80000000起始地址處,,而且bootloader程序代碼段不能超過16 KB,,16 KB是NOR Flash引導(dǎo)啟動(dòng)方式自動(dòng)拷貝程序代碼段的最大范圍;ARM應(yīng)用程序代碼段和DSP應(yīng)用程序代碼段首先都存放在OMAPL138的DDR RAM空間中,,DDR的起始地址為0xC0000000,, ARM應(yīng)用程序和DSP應(yīng)用程序必須存放在DDR中的不同地址空間;最后,,ARM中斷向量表存放在ARM_LOCAL_RAM地址空間,,位于0xFFFF0000處,。
基于ARM初始化OMAPL138的bootloader主要完成以下幾項(xiàng)工作:
(1)初始化ARM超級(jí)模式下的堆棧;
(2)OMAPL138的初始化,;
(3)從NOR Flash中拷貝ARM和DSP的應(yīng)用程序到對(duì)應(yīng)的DDR地址空間,;
(4)喚醒DSP;
(5)在main函數(shù)中調(diào)用跳轉(zhuǎn)到ARM應(yīng)用程序入口地址執(zhí)行程序,。
首先,,bootloader初始化ARM超級(jí)模式下的堆棧,因?yàn)樵诔?jí)模式下可以訪問OMAPL138的所有寄存器,,包括特權(quán)模式下才能訪問的寄存器,,使得ARM系統(tǒng)具備初始化OMAPL138系統(tǒng)條件;其次,,OMAPL138的初始化主要包含PSC電源管理模塊初始化,、PLL時(shí)鐘管理模塊初始化、DDR的初始化和EMIFA初始化等,,這些主要是OMAPL138的gel文件中的初始化工作,;接下來就是初始化ARM超級(jí)模式下的堆棧起始地址和大小,然后就是拷貝ARM和DSP的應(yīng)用程序到對(duì)應(yīng)的DDR地址空間,,這時(shí)DSP已經(jīng)具備了所有啟動(dòng)的環(huán)境,,可以直接喚醒DSP;最后,,在main函數(shù)中直接放一個(gè)跳轉(zhuǎn)指令(*(void(*)(void))0xC0000000)(),,實(shí)現(xiàn)由bootloader到ARM應(yīng)用程序的切換。至此,,ARM和DSP應(yīng)用程序都實(shí)現(xiàn)啟動(dòng)運(yùn)行了,。
最后就是所有程序燒寫的實(shí)現(xiàn)。程序燒寫是獨(dú)立于bootloader,、ARM和DSP應(yīng)用程序的一個(gè)應(yīng)用程序,,主要功能是將bootloader程序、ARM應(yīng)用程序和DSP應(yīng)用程序燒寫到NOR Flash對(duì)應(yīng)的地址空間中去,。燒寫程序代碼主要是NOR Flash讀寫程序,,代碼量不大,可以直接放在OMAPL138共享內(nèi)存中,,但是不能與bootloader代碼空間重疊,。
2 系統(tǒng)設(shè)計(jì)
2.1 bootloader設(shè)計(jì)
2.1.1 bootloader啟動(dòng)流程
首先,bootloader被燒寫到NOR Flash中起始地址位置處,, OMAPL138內(nèi)部固化的一段代碼在上電之后運(yùn)行,,會(huì)自動(dòng)將16 KB的NOR Flash起始地址(0x60000000)處代碼復(fù)制到OMAPL138的share RAM共享內(nèi)存起始地址處(0x80000000),其中,,0x60000000~0x60000004這32 bit存放的是系統(tǒng)固化代碼配置字,,可以配置拷貝數(shù)據(jù)大小,、boot啟動(dòng)方式和訪問數(shù)據(jù)寬度,這里boot啟動(dòng)選擇拷貝數(shù)據(jù)大小為16 bit寬,、Legacy NOR boot模式和16 KB數(shù)據(jù)復(fù)制寬度,在拷貝完數(shù)據(jù)之后,,系統(tǒng)會(huì)自動(dòng)跳轉(zhuǎn)到0x80000004處執(zhí)行。在0x80000004地址處存放的是一個(gè)跳轉(zhuǎn)指令BL_bootload_init,,使得系統(tǒng)固化的啟動(dòng)代碼在跳轉(zhuǎn)到0x80000004地址處開始執(zhí)行的第一個(gè)指令就是跳轉(zhuǎn)到bootloader初始化地址處執(zhí)行,。
bootloader啟動(dòng)流程如圖2所示。bootloader起始地址存放的是_bootload_init,。首先,,該函數(shù)更改CPSR的模式控制位和中斷控制位,使ARM處于超級(jí)模式下工作,,這是因?yàn)槌?jí)模式可以直接訪問ARM的硬件資源,,而且擁有與用戶模式一樣的寄存器,而用戶模式不能直接訪問特權(quán)模式下的寄存器,;其次,,關(guān)閉FIQ和IRQ中斷使能,初始化超級(jí)模式的堆棧,;在超級(jí)模式堆棧初始化完成之后,,通過BL _OMAPL138_CPU_
Init指令跳轉(zhuǎn)到OMAPL138的系統(tǒng)初始化函數(shù)中去處理,由于在超級(jí)模式下調(diào)用該函數(shù),,所以O(shè)MAPL138_CPU_Init()可以直接訪問OMAPL138所有的系統(tǒng)配置寄存器SYS_CFG_
Reg,,OMAPL138_CPU_Init()需要完成PSC電源管理模塊初始化、PLL時(shí)鐘管理模塊初始化,、DDR的初始化和EMIFA初始化等,,這些初始化工作是為ARM和DSP應(yīng)用程序運(yùn)行提供基本的最小化系統(tǒng);在OMAPL138初始化完成之后,,DDR和EMIFA都已初始化,,可以將NOR Flash中的ARM和DSP應(yīng)用程序拷貝到DDR中,至此,,DSP應(yīng)用程序已經(jīng)存放在DDR中,,并且已經(jīng)具備了DSP運(yùn)行的所有環(huán)境,。接下來即可喚醒DSP,。喚醒時(shí)需要往系統(tǒng)寄存器HOST1CFG中寫入DSP喚醒初始地址,即DSP應(yīng)用程序的起始地址,。DSP喚醒就相當(dāng)于對(duì)DSP做了一次軟復(fù)位,,DSP在喚醒之后直接跳到復(fù)位異常地址處運(yùn)行,DSP復(fù)位異常地址存放的是_c_int00函數(shù),,該函數(shù)是DSP的系統(tǒng)庫函數(shù),,由該函數(shù)初始化DSP運(yùn)行的C語言環(huán)境,,并跳轉(zhuǎn)到DSP主函數(shù)中運(yùn)行。至此bootloader基本工作已經(jīng)完成,,可以直接通過調(diào)用函數(shù)(*(void(*)(void))0xC0000000)()跳轉(zhuǎn)到ARM應(yīng)用程序?qū)?yīng)的起始地址處開始運(yùn)行ARM應(yīng)用程序[1-3],。
2.1.2 ARM應(yīng)用程序的初始化
ARM初始化流程如圖3所示。首先,,初始化ARM的各個(gè)異常對(duì)應(yīng)的堆棧,,這段代碼是ARM應(yīng)用程序的初始化代碼,一般存放在ARM應(yīng)用程序代碼段的起始地址處,,這樣便于bootloader直接跳轉(zhuǎn)到ARM初始化開始地址處執(zhí)行ARM初始化,;其次,在ARM異常堆棧初始化完成之后,,需要執(zhí)行LDR PC,_c_int00,,這個(gè)指令是調(diào)用_c_int00函數(shù),這是ARM的一個(gè)庫函數(shù),,完成ARM運(yùn)行時(shí)需要的C語言環(huán)境初始化等,,并且在這個(gè)函數(shù)開始處就直接將模式切換成用戶模式,完成了用戶模式堆棧的初始化,,在這個(gè)函數(shù)最后直接跳轉(zhuǎn)到ARM的main函數(shù)中執(zhí)行ARM的實(shí)際應(yīng)用程序,。ARM初始化還必須把ARM的中斷向量表初始化映射到0xFFFF0000地址處,這是OMAPL138默認(rèn)的ARM中斷向量表存放地址空間,,可以通過cmd文件直接配置,。至此,ARM應(yīng)用程序也開始運(yùn)行了[4],。
2.1.3 bootloader.cmd和nor_cfg_word.asm的編寫
nor_cfg_word.asm文件是一個(gè)匯編文件,,用來實(shí)現(xiàn)對(duì)NOR Flash自動(dòng)拷貝bootloader程序大小的配置以及實(shí)現(xiàn)到bootloader初始化程序_bootload_init的跳轉(zhuǎn)。該文件直接由bootloader.cmd配置存放在0x80000000地址處,,并且bootloader.cmd文件緊跟著將bootloader.asm啟動(dòng)文件的匯編代碼存放在nor_cfg_word.asm文件之后,。這兩個(gè)文件被燒寫到NOR Flash的起始地址空間,并最終通過系統(tǒng)上電啟動(dòng)自動(dòng)將nor_cfg_word.asm配置文件和bootloader.asm啟動(dòng)文件同時(shí)復(fù)制到0x80000000共享內(nèi)存share RAM并自動(dòng)開始運(yùn)行,。
如圖4所示,,在nor_cfg_word.asm文件中第一個(gè)指令必須是.word 0x00000F01,用來實(shí)現(xiàn)對(duì)NOR Flash自舉引導(dǎo)復(fù)制程序段的配置,,選擇為16 KB復(fù)制,、Legacy NOR boot和16 bit寬度訪問,緊跟在配置字之后的是一個(gè)跳轉(zhuǎn)指令BL _bootload_init,,該指令存放在0x80000004地址處,,因?yàn)橄到y(tǒng)上電之后自動(dòng)跳轉(zhuǎn)到0x80000004地址處執(zhí)行程序,即執(zhí)行BL _bootload_init,,_bootload_init是bootloader.asm啟動(dòng)文件第一個(gè)指令對(duì)應(yīng)的地址,,從而實(shí)現(xiàn)了到bootloader初始化程序的跳轉(zhuǎn),。
2.2 OMAPL138自舉啟動(dòng)流程
整個(gè)OMAPL138自舉啟動(dòng)流程如圖5所示。在Nor_cfg_word中配置NOR Flash的訪問數(shù)據(jù)寬度,、訪問模式和自動(dòng)搬運(yùn)數(shù)據(jù)塊大小,,在系統(tǒng)上電之后,就會(huì)自動(dòng)讀取Nor_cfg_word配置,,從NOR Flash中搬運(yùn)16 KB數(shù)據(jù)到OMAPL138的共享內(nèi)存share RAM中,,然后自動(dòng)跳轉(zhuǎn)到share RAM的地址0x80000004中執(zhí)行。在這里存放的是bootloader代碼第一條指令B _bootload_init,,然后執(zhí)行這條指令,,由_bootload_init完成OMAPL138的系統(tǒng)初始化、超級(jí)模式堆棧初始化,、ARM和DSP應(yīng)用程序的拷貝和喚醒DSP,,整個(gè)初始化過程在ARM的超級(jí)模式下完成。bootloader最后存放一條指令直接跳轉(zhuǎn)到ARM應(yīng)用程序初始化地址處,,開始執(zhí)行ARM應(yīng)用程序,。ARM應(yīng)用程序的初始化主要是初始化各種ARM異常堆棧,ARM應(yīng)用程序的初始化最后調(diào)用ARM庫函數(shù)自帶的初始化C語言環(huán)境函數(shù)_c_int00,,并由該函數(shù)自動(dòng)跳轉(zhuǎn)到ARM應(yīng)用程序的主函數(shù)中執(zhí)行,,整個(gè)ARM自舉啟動(dòng)完成。DSP在被bootloader喚醒之后直接跳到系統(tǒng)寄存器HOST1CFG中寫入的地址處開始執(zhí)行,。這個(gè)DSP開始執(zhí)行的地址處存放的是DSP自帶的庫函數(shù)_c_int00,,這個(gè)函數(shù)會(huì)初始化DSP運(yùn)行所需要的環(huán)境,并跳轉(zhuǎn)到DSP應(yīng)用程序主函數(shù)中執(zhí)行DSP應(yīng)用程序,。至此,,OMAPL138雙核系統(tǒng)就同時(shí)啟動(dòng)運(yùn)行了[5-6]。
2.3 NOR Flash燒寫代碼工程設(shè)計(jì)
在bootloader代碼,、ARM和DSP應(yīng)用程序代碼下載到對(duì)應(yīng)的地址空間之后,,這些代碼必須燒寫到NOR Flash指定地址空間。其中,,配置代碼段和bootloader必須存放在NOR Flash起始地址處,,這些工作由燒寫代碼工程完成。在OMAPL138的共享內(nèi)存share RAM中,,bootloader和配置代碼段占用16 KB空間,,剩下的代碼空間可以作為燒寫代碼工程使用空間,這樣就可以使得燒寫代碼完全獨(dú)立于其他已經(jīng)燒寫在內(nèi)存中的代碼,。在整個(gè)代碼燒寫過程中,,下載到OMAPL138內(nèi)存中的bootloader,、ARM和DSP應(yīng)用程序都不能運(yùn)行,,因?yàn)閎ootloader代碼中有對(duì)DDR的重新初始化過程,,這個(gè)過程使得系統(tǒng)脫離了OMAPL138的gel文件初始化,而燒寫程序代碼是依賴gel文件的初始化環(huán)境運(yùn)行的,。所以,,為了避免代碼運(yùn)行過程中對(duì)燒寫代碼工程的影響,需要燒寫的代碼在下載后不可運(yùn)行,,燒寫代碼過程不能斷電,,在燒寫完成之后,掉電再開始重新上電,,燒寫的bootloader即開始自舉引導(dǎo)啟動(dòng)OMAL138,。
3 仿真結(jié)果與分析
仿真結(jié)果如圖6所示。首先,,ARM和DSP應(yīng)用程序中都初始化了串口UART2,,用來打印ARM與DSP雙核通信信息,然后ARM應(yīng)用程序通過配置系統(tǒng)寄存器CHIPSIG中的SYSCFG_CHIPINT3向DSP發(fā)送系統(tǒng)中斷,。DSP應(yīng)用程序通過配置系統(tǒng)寄存器CHIPSIG中的SYSCFG_CHIPINT1向ARM發(fā)送系統(tǒng)中斷,在ARM和DSP雙方通信的各自中斷處理程序中,,都首先通過串口UART2打印接收到的中斷信息,,然后延時(shí)一段時(shí)間,以使ARM和DSP雙核不會(huì)同時(shí)占用UART2資源,,在延時(shí)之后各自都會(huì)向?qū)Ψ桨l(fā)送中斷,。圖5中輸出的信息就是在硬件板燒寫完程序后上電串口UART2輸出的打印信息。由于ARM和DSP雙核不斷地向?qū)Ψ桨l(fā)送中斷,,因此不斷地向串口輸出信息,,仿真結(jié)果中發(fā)送字節(jié)數(shù)為0,接收字節(jié)數(shù)為158 437,,這是接收的雙核通信輸出信息,,整個(gè)仿真結(jié)果可靠,充分證明了OMAPL138雙核系統(tǒng)被成功引導(dǎo)啟動(dòng),。
針對(duì)傳統(tǒng)的基于AIS和串口實(shí)現(xiàn)OMAPL138雙核系統(tǒng)自啟動(dòng)處理復(fù)雜的問題,,提出了基于NOF Flash的bootloader二次引導(dǎo)實(shí)現(xiàn)OMAPL138雙核自啟動(dòng)的方案。在該方案中,,分析了基于ARM核的bootloader實(shí)現(xiàn)流程和處理內(nèi)容,,解決了bootloader中ARM核系統(tǒng)的初始化,并基于ARM核實(shí)現(xiàn)了OMAPL138系統(tǒng)的初始化以及ARM和DSP應(yīng)用程序的復(fù)制,,最終通過ARM核喚醒了DSP核,,并成功跳轉(zhuǎn)到ARM應(yīng)用程序中執(zhí)行,實(shí)現(xiàn)了OMAPL138的雙核運(yùn)行。整個(gè)方案實(shí)現(xiàn)了bootloader,、ARM和DSP應(yīng)用程序及燒寫所有程序代碼工程都相互獨(dú)立運(yùn)行,、互不干擾,針對(duì)每個(gè)工程項(xiàng)目的cmd文件進(jìn)行了詳細(xì)分析和介紹,,對(duì)于整個(gè)bootloader啟動(dòng)流程做了詳細(xì)的說明,,整個(gè)過程清晰、可靠,。實(shí)驗(yàn)結(jié)果表明,,該方案可以實(shí)現(xiàn)OMAPL138的自舉啟動(dòng)。
參考文獻(xiàn)
[1] 劉遠(yuǎn)峰,,陳志華.一種新的基于TMS320C6000 DSP的Flash引導(dǎo)自啟動(dòng)方法[J].電視技術(shù),,2011,21(35):54-57.
[2] 王潔,,蘇東林,,姜鐵華.基于TMS320C6000系列DSP的二次Bootl oader研究[J].電子工程師,2005,,8(31):53-55.
[3] 劉濤,,倪江生,王丹丹.基于DSP的Flash自啟動(dòng)設(shè)計(jì)[J].儀表技術(shù),,2009(9):44-45.
[4] 王鵬,,簡(jiǎn)秦勤,范俊鋒.基于TMS320C6000 DSP及DSP/BIOS系統(tǒng)的Flash引導(dǎo)自啟動(dòng)設(shè)計(jì)[J].電子元器件應(yīng)用,,2012,,12(14):35-39.
[5] 余同正,徐龍祥.基于雙DSP的磁軸承數(shù)字控制器容錯(cuò)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,,2005,,31(1):27-29.
[6] 郭唐仕,尹華杰,,陳錦云.基于雙DSP低電壓大電流交換器的模糊PID控制[J].電子技術(shù)應(yīng)用,,2003,29(5):79-81.