ARM 驱动一些小结

1.各子系统都是由各部分组合而成,使用前,记得把内核那部分编译进内核。

2. 平台设备驱动

struct platform_device led_dev= {
.name  = "s3c2410-led",
.id  = -1,
.num_resources = ARRAY_SIZE(led_resource),
.resource  = led_resource,
.dev              = {
.release = led_release,        //这个函数即使为空,也必须写,因为内核会调用,如果没有,卸载时会出错。
}
};


void led_release(struct device *dev)  //即便为空,也要定义
{
;
}


3.内核定时器

init_timer(&keyboard_timer);
keyboard_timer.expires = jiffies + 5;
keyboard_timer.function = keyboard_timer_func;
add_timer(&keyboard_timer);          //在加载之后,很短时间就会运行,并跳入定时器处理函数,此时,内核处理函数的指针,要注意是否为空


static void keyboard_timer_func(unsigned long data)
{
int key_val,i,col_value = -1;

if(!cur_pin)//判断是否为空
{
printk("leave timer!\n");
return 0;
}

key_val = s3c2410_gpio_getpin(cur_pin->pin);
if(key_val == 1)
。。。。。

}



4.输入子系统:

input_event(keyboard_input, EV_KEY, key_value, 2);  //如果不判断按下按上,要写2,否则不能向上发送
input_sync(keyboard_input);   //同步信号,不能少

 

5.i2c子系统:

由于I2C 用八位传地址,其中最后一位是方向位(读/写),所以实际地址为七位,内核也是用这七位左移得到八位真地址,

所以如果一个I2C设备物理地址是0xa0 (1010 0000),  构建地址是要写成 0x50 (0101 0000),即右移一位

因为内核到时候会左移一位,得到真地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值