一、簡介
TI的達芬奇架構嵌入式應用處理器使用DSP與ARM結合的非對稱多核結構,當然現在也有管腳全兼容的單核。本文要介紹的就是其中的一款低功耗處理器OMAP L138。
OMAP L138包括一個主頻300M的ARM9處理器內核和一個300M的C6748DSP內核(均是32位處理器)。此外還有大量外設在此不做說明,與通用的ARM與DSP內核相比有如下一些不同點:
1.內存映射,該處理器的外設與內存統一編址,DSP與ARM共享4G內存空間。但其中有一部分DSP僅可見(如DSP的數據指令緩存),一部分ARM僅可見(如ARM的內部RAM),其余的兩者都可以訪問,具體的請參考其芯片資料。
推薦閱讀:基於OMAP-L138電路板的U-Boot移植 http://www.linuxidc.com/Linux/2011-05/36019.htm
2.中斷,與通用的DSP與ARM相比,達芬奇架構並沒有在這兩個核中增加用於雙核通信及相互控制的指令(也許是本人沒發現吧!如果你發現相關的說明,請發個email告訴我,謝謝!),然而卻增加兩個核之間的中斷,共計7個。當雙核需要進行通信時,首先把數據放在雙方可以訪問的內存上,然後給對方一個中斷,對方在中斷中接收傳遞過來的數據,以此實現雙方的通信,個人認為這就是DSP Link實現的基本原理吧:)
3.能源與休眠配置模塊(PSC),這個模塊主要負責整個系統的能源管理,可以使能或者休眠ARM核,DSP核以及大部分外設ARM核與DSP核的相互控制主要就依賴這個模塊。
對於OMAPL138,上電時默認的是ARM核被禁止,DSP核被使能。說以開機時是DSP核先啟動,然後是DSP的ROM Bootloader做一些初始化後使能ARM核後,ARM核才開始運行。不同的達芬奇處理器是不同的,比如OMAPL137就是反過來的,網上資料魚龍混雜,弄不清楚的話就去看PSC模塊中的ARM和DSP核的默認值就可以了。
二、啟動過程
1.開機上電,用戶在BOOT 管腳上配置的啟動方式被鎖定采樣到SYSCFG模塊的BOOTCFG寄存器,從而確定可處理器的啟動方式。
2.PSC模塊中的啟動默認值是:ARM核休眠,DSP核使能。所以這時候DSP啟動,DSP從片內DSP L2 ROM處讀取指令執行。這裡有TI已經固化的僅DSP核可以訪問的ROM Bloader,簡稱DSP RBL。
3.DSP的RBL做一些簡單的初始化後,就通過PSC模塊使能ARM核,休眠自己。然後ARM就開從片內的RAM Local ROM處讀取指令並執行,這裡面有TI已經固化好的ARM ROM Bootloader,簡稱ARM RBL。
4.ARM的RBL做一些初始化後,根據BOOTCFG寄存器的設定,從指定的地方讀取用於啟動U-Boot的Bootloader,即U-Boot BootLoader,簡稱UBL。UBL可以放在Nandflash,或者通過串口下載等方式取得。值得說明的是,這裡的UBL是(AIS Application Image Script )格式,而不是通常的BIN格式。
5.當ARM RBL讀取到UBL後就根據AIS格式中的命令初始化、加載並運行UBL。然後就是UBL加載運行U-Boot,U-Boot根據啟動參數啟動Linux,Linux根據啟動參數加載根文件系統。
6.這時ARM核上的Linux就運行起來了,但DSP還處於休眠狀態。在Linux經過一系列初始化後會執行跟文件系統中/etc/profile的指令。我們在這裡添加插入DSP Link內核模塊的命令,就會在/dev目錄下產生一個叫dsplink的設備文件。這個DSP Link內核模塊就是通過前面所說的中斷和PSC設定就可以完成與DSP的通信與控制。
7. 然後再執行我們自己的ARM端程序,在ARM端程序中使用DSP Link的庫函數來訪問dsplink設備,從而在用戶空間實現對DSP核的控制與通信。在我們寫的ARM端程序中使用DSP Link庫函數加載DSP端的應用程序到內存,使用DSP Link的PROC函數啟動DSP核。然後ARM核和DSP核就都各自獨立運行起來了,通過DSP Link來進行通信。