您的位置:首页 > 其它

DM3730 x-loader 分析 五

2015-05-30 16:18 281 查看
我们来做一个实验,实验目的是在x-loader中点亮LED灯,因此先分析x-loader\include\asm\arch-omap3\gpio.h,在实验中会用到这里面的函数。

下面是gpio.h源码:



43-50行:/*定义gpio_bank 类型的变量数组gpio_bank_34xx[6],宏替换后可写成如下

static struct gpio_bank gpio_bank_34xx[6] = {

{ (void *)0x48310000, 4 }, /*(void *)0x48310000 把0x48310000强制转换成地址,这样C语言才能识别*/

{ (void *)0x49050000, 4 },

{ (void *)0x49052000, 4 },

{ (void *)0x49054000, 4 },

{ (void *)0x49056000, 4 },

{ (void *)0x49058000, 4 },};

struct gpio_bank {

void *base;

int method; }; /*gpio_bank 结构体定义*/

在sprugn4r.pdf P3500找到地址对应含义,DM3730中gpio0~gpio192分成6个组。



52行:/*定义gpio_bank类型指针gpio_bank,并指向gpio_bank_34xx[6] 数组的第一个元素*/

54行:/*定义get_gpio_bank(int gpio)函数,它的返回值是gpio_bank类型的指针(地址),也就是指向
gpio_bank_34xx[6]数组里面的某个元素地址*/

56行:/*gpio右移5位,实际是gpio除以32,得到gpio组值,返回组地址*/

89-62行:/* get_gpio_index(int gpio)行数目的得到gpio组内编号,例如gpio171=10101011 & 11111=0d1011,整好等于11,对应ds P3489,gpio171 = GPIO6【11】*/

64-81行:/*check_gpio(int gpio)函数,判断gpio是否在0-192之间,是返回0,不是报错返回-1。*/



84-89行:void *reg = bank->base; /*定义指针reg,reg=(*bank).base*/

u32 l; /*unsigned int I*/

switch (bank->method) /* switch (4) */

case METHOD_GPIO_24XX:
/* case 4: */

reg += OMAP24XX_GPIO_OE;/* reg = reg + 0x0034 ,0x0034正好是GPIO_OE寄存器的偏移地址,
运行后reg指向gpio1-6某个组的GPIO_OE寄存器地址*/

94-100行:/*读出gpio1-6某个组的GPIO_OE寄存器里面的值赋给I,如果is_input=1,I的某位值制1,否则I的某位清零*/

以上分析_set_gpio_direction(struct gpio_bank *bank, int gpio, int is_input)这个函数,通过传递

gpio组地址,gpio组内编号,设置输入输出1或者0,配置GPIO_OE寄存器,GPIO_OE寄存器含义如下:


102-110行:/*omap_set_gpio_direction(int gpio, int is_input)这个函数是实际要用到的配置gpio输入输出函数*/

108行:/*bank指向gpio_bank_34xx[6]数组里面的某个元素地址*/

109行:_set_gpio_direction(bank, get_gpio_index(gpio), is_input)/*函数参数传递*/

以上分析完如何设置相应gpio输入输出GPIO_OE寄存器

112-142行:同样操作GPIO_SETDATAOUT和GPIO_CLEARDATAOUT寄存器,根据输入的gpio,得到gpio组编号以及组内编号,对应寄存

器里相应位置写入0或者1.







143-161行:/*操作GPIO_DATAIN寄存器,设置输入并读取相应gpio的值*/

159-160行:/*GPIO_DATAIN寄存器中相应gpio位置的值保留*/



下面我们把代码添加到omap3stalker.c文件中,323行和325-332行



运行信息如下:打印出 my gpio out end

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: