x-loader采用广州英码DM3730开发板 \x-loader\board\omap3stalker.c
先把这几个宏定义弄明白,在以后的代码中多次用到
#define __raw_readl(a) (*(volatile unsigned int *)(a)) /*读出寄存器里值*/
#define __raw_writel(v, a) (*(volatile unsigned int *)(a) = (v)) /*把a写入v这个地址*/
#define __raw_readw(a) (*(volatile unsigned short *)(a))
#define __raw_writew(v, a) (*(volatile unsigned short *)(a) = (v))
以上面这个为例展开宏
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,相当于到第8,9,10位的值不变,其它清0*/
return mode >>= 8 /*把上面得到的mode右移8位,得到低3位的值*/
0x480022F0 地址对应ds中 CONTROL_STATUS 寄存器 在2587页,可以看到8 9 10位是设备类型
这个函数也是类似上面的宏展开后
mode=(*(volatile unsigned int *)(0x480022F0)) & (000000000001111);/*取出0x480022F0地址中的值,&0b000000000001111,相当于到第低4位的值不变,其它清0,第0-4位正好对应SYSBOOT*/
下面代码(129-170)判断mode值,确定系统启动顺序。
以下代码(171-344)基本都是用同样方法,取出相应寄存器里的值判断cpu 类型,cpu ID,cpu系列型号,cpu版本信息,打印出cpu相关信息
对应英码开发板启动信息,可以看到OMAP36XX/37XX-GP ES2.1