请教9200的gpio中断驱动
在2.6.13内核中想用9200的PB18用作中断源,
代码如下:
AT91_SYS->PMC_PCER = 1 << AT91C_ID_PIOB;
sys->AIC_SMR[AT91C_ID_PIOB] = AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE;
sys->AIC_IECR = 1 << AT91C_ID_PIOB;
sys->PIOB_ODR |= AT91C_PIO_PB18;
sys->PIOB_IER |= AT91C_PIO_PB18;
retv = request_irq(AT91C_ID_PIOB, int_rtc_interrupt, SA_SHIRQ, "INT_RTC", NULL);
if( request_irq(AT91C_ID_PIOB, int_rtc_interrupt, 0, "INT_RTC", NULL))
{
printk(KERN_ERR "request INT RTC ERROR!");
return -1;
}
编译后装载驱动模块,一直申请不了中断,是不是内核配置的问题,困惑中,请教各位。
insmod ../ds1390drv/ds1390drv.ko
Using ../ds1390drv/ds1390drv.ko
request INT RTC ERROR!insmod: cannot insert `../ds1390drv/ds1390drv.ko': Operation not permitted (-1): Operation not permitted
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
retv = request_irq(AT91C_ID_PIOB, int_rtc_interrupt, SA_SHIRQ, "INT_RTC", NULL);
if( request_irq(AT91C_ID_PIOB, int_rtc_interrupt, 0, "INT_RTC", NULL))
1、请问有了上面那句,这个是干嘛的?
2、请问if( request_irq(AT91C_ID_PIOB, int_rtc_interrupt, 0,,中“0”是干嘛的,
request_irq部分代码如下
…………
if (irq >= NR_IRQS || !irq_desc[irq].valid || !handler ||
(irq_flags & SA_SHIRQ && !dev_id))
return -EINVAL;
…………
是不是这样比较好
if(!retv) {
.......
}
[ 本帖最后由 .kaka 于 2008-12-1 21:53 编辑 ]
楼上的,上面的那一句代码是多余的,应该是注释掉的,
改成下面的
retv = request_irq(AT91C_ID_PIOB, int_rtc_interrupt, SA_INTERRUPT, "INT_RTC", NULL);
if (!retv) {
printk(KERN_ERR "request PIOB_IRQ ERROR!\n");
return retv;
}
[root@(none) ds1390app]$cat /proc/interrupts
CPU0
1: 144104 AT91RM9200 Timer Tick, at91_serial
10: 1132 at91rm9200_mci
11: 0 at91_udc
18: 1 tc1
24: 14648 eth0
58: 0 at91rm9200_mci
93: 1 eth0
Err: 0
cat /proc/interrupt 还是看不到IO中断
if (request_irq(No, &_isr, SA_SHIRQ, "RTC", NULL) < 0) {
printk(" request_irq error!\r\n");
return -EAGAIN;
}
确认一下你的No对不对吧,贴一下函数运行后的反馈~
就是这个样子~
对,确认一下注册的中断号是否正确。
按照楼上的,我把中断号定位AT91C_ID_TC1(18)或者AT91_ID_UHP(23)都可以,设为AT91C_ID_PIOB(3)就不行,装载模块报错:
Using ds1390drv.ko
request PIOB_IRQ ERROR!
insmod: cannot insert `ds1390drv.ko': Resource temporarily unavailable (-1): Resource temporarily unavailable
是不是用9200的io作为中断还有什么讲究?
[ 本帖最后由 dreamice 于 2008-12-3 20:07 编辑 ]
这个讲究,我估计你得分析一下芯片手册了
费了半天劲,找到规律了,PB29的irq号是93,我要的PB18就是82了,后来发现,IO的中断号由32开始,PA PB PC PD 类推应该是这样的吧,多谢楼上2位!
呵呵,恭喜。
这个东西,你真得看芯片手册,单纯的去看其它代码来改动的话,很可能就不能跑