arm9200的中断问题。
我使用at91rm9200扩展DM9000,使用PA25作为DM9000的中断线,之前使用PA3做中断线,DM9000工作正常,但因为PA3是SPI的故障模式检测线,会导致我的SPI设备工作异常,现将其改为PA25,但怎么也不能中断,读DM9000的设备ID和申请中断都是正确的,可就是进不了中断程序,代码如下:
static int dmfe_open(struct net_device *dev)
{
board_info_t * db = (board_info_t *)dev->priv;
DMFE_DBUG(0, "dmfe_open", 0);
//IRQ5中断初始化
AT91_SYS->PIOA_PDR = AT91C_PIO_PA25; //disable PA25 IO mode
AT91_SYS->PIOA_BSR = AT91C_PIO_PA25; //set peripheral b function, IRQ2
AT91_SYS->PMC_PCER = 1<<AT91C_ID_IRQ2; //enable IRQ2 clock
AT91_SYS->AIC_SMR[AT91C_ID_IRQ2] = 0x60; //IRQ2 (上升沿)positive edge interrupt, level 0
AT91_SYS->AIC_ICCR = 1<<AT91C_ID_IRQ2; // 中断清除命令寄存器 ack IRQ2
if(request_irq(AT91C_ID_IRQ2,&dmfe_interrupt,SA_INTERRUPT,dev->name,dev))
return -EAGAIN;
AT91_SYS->AIC_IECR = 1<<AT91C_ID_IRQ2; //enable IRQ2
// Initilize DM910X board
dmfe_init_dm9000(dev); //初始化DM9000
// Init driver variable
db->dbug_cnt = 0;
db->runt_length_counter = 0;
db->long_length_counter = 0;
db->reset_counter = 0;
// set and active a timer process
init_timer(&db->timer); //初始化定时器
db->timer.expires = DMFE_TIMER_WUT * 2;
db->timer.data = (unsigned long)dev;
db->timer.function = &dmfe_timer; //定时子程序
add_timer(&db->timer);
netif_start_queue(dev);
return 0;
}
大家帮我看看可能有什么问题呢,同样的代码将其换成PA3(对应IRQ5)是可以的,是不是可能和我的PA26有关系呢,我的PA26之前是做干别的用,接到了74HC245的输入上,是做基本输出用的,我现在把它配置成中断用,可就是不成功,是什么原因呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
printk直接比较寄存器配置吧
[ 本帖最后由 Roemer 于 2009-3-10 19:07 编辑 ]