6678多核載入啟動實現主要是通過0核完成。
具體實現是dsp上電通過i2c, spi, emif等介面將應用程式載入到核心0執行,然後在核心0執行**裡實現另外7個核的啟動位址指定和傳送ipc中斷喚醒其餘7核。
啟動實現詳見如下:
1、暫存器定義
// corepac0-7 ipc 觸發暫存器(ipcgrx)
#define ipcgr_0_regs (*((volatile unsigned int *)(0x02620240)))
#define ipcgr_1_regs (*((volatile unsigned int *)(0x02620244)))
#define ipcgr_2_regs (*((volatile unsigned int *)(0x02620248)))
#define ipcgr_3_regs (*((volatile unsigned int *)(0x0262024c)))
#define ipcgr_4_regs (*((volatile unsigned int *)(0x02620250)))
#define ipcgr_5_regs (*((volatile unsigned int *)(0x02620254)))
#define ipcgr_6_regs (*((volatile unsigned int *)(0x02620258)))
#define ipcgr_7_regs (*((volatile unsigned int *)(0x0262025c)))
// 核0~核7 魔術位址(l2位址後4位元組)
#define core_0_magic_addr (*((volatile unsigned int *)(0x1087fffc)))
#define core_1_magic_addr (*((volatile unsigned int *)(0x1187fffc)))
#define core_2_magic_addr (*((volatile unsigned int *)(0x1287fffc)))
#define core_3_magic_addr (*((volatile unsigned int *)(0x1387fffc)))
#define core_4_magic_addr (*((volatile unsigned int *)(0x1487fffc)))
#define core_5_magic_addr (*((volatile unsigned int *)(0x1587fffc)))
#define core_6_magic_addr (*((volatile unsigned int *)(0x1687fffc)))
#define core_7_magic_addr (*((volatile unsigned int *)(0x1787fffc)))
// 暫存器鎖
#define kick0 (*((volatile unsigned int *)(0x02620038)))
#define kick1 (*((volatile unsigned int *)(0x0262003c)))
#define kick0_unlock (0x83e70b13)
#define kick1_unlock (0x95a4f1e0)
#define kick_lock (0x1)
2、獲取入口位址
該例項實現多核啟動用的是乙個公用工程,所以啟動入口位址只有乙個。若是多個工程,則各核啟動入口位址不同,具體是看自己如何定義記憶體分配。
如口位址如何獲取?在編譯後工程debug目錄下。**.map檔案有指定,如下圖
官方指定啟動入口位址為_c_int00,也可自定義指定位址,具體實現在工程裡新建乙個 **.cmd檔案,內容如下:
-heap 0x8000
-stack 0x20000
memory
sections
3、載入各核啟動位址,並傳送ipc中斷
//指定起始位址,在.cmd檔案內定義
extern
unsigned
int_c_int00
(void);
extern
unsigned
int far bootmagic;
void()
4、各核啟動後向指定位址寫入資料,便於檢視各核是否已經啟動。你也可以通過串列埠列印實現。
#define uireg(x) (*((volatile unsigned int *)(x)))
void
load_core_start_test
(unsigned
char corenum)
}
5、主程式入口
int
main()
else
bios_start()
;/* does not return */
return(0);}
6、通過**器載入初始化0核,並將工程載入到0核
6.1、初始化核0如下圖
6.2、載入工程到核0如下圖
7、執行工程
7.1、執行工程之前寫位址為初始化後隨機預設資料,如下圖
7.2、執行後為各個核啟動後向指定位址所寫資料,如下圖
7.3、檢視各核停靠位址
通過**器檢視各核執行停靠位址,也可以知道各核是否啟動。
C6678多核DSP CMD檔案介紹
cmd檔案編寫 cmd 鏈結器配置檔案,存放鏈結器的配置資訊,cmd檔案使開發者可以通過自己定義的儲存器模組來配置系統儲存器,說白點也就是cmd是用來分配rom和ram空間用的,告訴鏈結程式怎樣計算位址和分配空間。memory命令 描述系統實際的硬體資源 section命令 描述 段 如何定位 其中...
多核DSP C6678 SRIO藉口除錯筆記
首先,感謝ti論壇提供的srio程式範例,但是其硬體平台是evm板,更多的只能用於loopback測試,但是可以在其基礎上修改。1.初始化dsp的srio,主要是對serdes進行配置,然後是lane和speed的配置,最後需要等待fpga的link建立,我們在建立時候碰到一點困難,每次建立並不都是...
C6678多核應用的cache小測試
c6678多核之間在msmc中互動資料,缺省會用到l1d cache 資料一致性問題是很令人困擾的。小測試驗證了關於l1d cache 的linesize 是64byte 初始化 if dnum 0 然後在多核同步中斷程式中 test if dnum 0 else 如此測試條件下,兩個資料始終相差0...