DM3730 x-loader 分析 一
x-loader采用廣州英碼DM3730開發(fā)板 \x-loader\board\omap3stalker.c
先把這幾個(gè)宏定義弄明白,在以后的代碼中多次用到
?
#define __raw_readl(a)?(*(volatile unsigned int *)(a)) ? ? ? ? ?/*讀出寄存器里值*/
#define __raw_writel(v, a)?(*(volatile unsigned int *)(a) = (v)) ?/*把a(bǔ)寫入v這個(gè)地址*/
#define __raw_readw(a)?(*(volatile unsigned short *)(a))
#define __raw_writew(v, a)?(*(volatile unsigned short *)(a) = (v))
以上面這個(gè)為例展開宏
mode = __raw_readl(CONTROL_STATUS) & (DEVICE_MASK);
? ? ? ? ? ?=?__raw_readl(OMAP34XX_CTRL_BASE + 0x2F0) & (DEVICE_MASK);
? ? ? ? ? ?=__raw_readl(OMAP34XX_L4_IO_BASE+0x2000 + 0x2F0) & (DEVICE_MASK);
? ? ? ? ??=__raw_readl(0x48000000+0x2000?+ 0x2F0) & (DEVICE_MASK);
? ? ? ? ? =__raw_readl(0x480022F0) & (BIT8|BIT9|BIT10);
? ? ? ? ? =__raw_readl(0x480022F0) & (1<<8|1<<9|1<<10);
? ? ? ? ? =(*(volatile unsigned int *)(0x480022F0))?& (000001110000000);/*取出0x480022F0地址中的值,&0b000001110000000,相當(dāng)于到第8,9,10位的值不變,其它清0*/
return mode >>= 8?/*把上面得到的mode右移8位,得到低3位的值*/
0x480022F0 地址對應(yīng)ds中 ?CONTROL_STATUS 寄存器 在2587頁,可以看到8 9 10位是設(shè)備類型
? ? ? ? ?
這個(gè)函數(shù)也是類似上面的宏展開后
mode=(*(volatile unsigned int *)(0x480022F0))?& (000000000001111);/*取出0x480022F0地址中的值,&0b000000000001111,相當(dāng)于到第低4位的值不變,其它清0,第0-4位正好對應(yīng)SYSBOOT*/
下面代碼(129-170)判斷mode值,確定系統(tǒng)啟動(dòng)順序。
以下代碼(171-344)基本都是用同樣方法,取出相應(yīng)寄存器里的值判斷cpu 類型,cpu ID,cpu系列型號,cpu版本信息,打印出cpu相關(guān)信息
對應(yīng)英碼開發(fā)板啟動(dòng)信息,可以看到OMAP36XX/37XX-GP ES2.1
總結(jié)
以上是生活随笔為你收集整理的DM3730 x-loader 分析 一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 进程间通信——剪切板
- 下一篇: 用OpenCV和OCR识别图片中的表格数