免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2423 | 回复: 2
打印 上一主题 下一主题

ARM收到中断死机 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-14 22:14 |只看该作者 |倒序浏览
我用的ARM是atmel公司的9200,ARM920T内核,开发环境是ADS1.2

以前写好了程序中断接收正常,前段时间再试发现收不到中断或者提示收到伪中断,搞了两天没结果后我把伪中断向量也指向了需要的中断服务程序,这样倒是可以进入中断服务程序了,不过新的问题又出现了,连续接收几个中断后(有时候一两个,有时候可以接收几十个)程序就死掉了。这是什么原因导致的啊?有没有什么解决的好办法?多谢各位大侠指点,感激不尽!
(同样的程序,在开发板上跑的时候记不需要将伪中断向量指向中断服务程序就可以正常接收中断。)
中断初始化代码
  1. AT91C_BASE_PIOB->PIO_PDR |= AT91C_PIO_PB29;
  2.         AT91C_BASE_PIOB->PIO_ASR |= AT91C_PB29_IRQ0;
  3.         AT91F_PMC_EnablePeriphClock((AT91PS_PMC) AT91C_BASE_PMC, AT91C_ID_IRQ0);
  4.         AT91F_AIC_ConfigureIt(
  5.                 AT91C_BASE_AIC,
  6.                 AT91C_ID_IRQ0,
  7.                 AT91C_AIC_PRIOR_HIGHEST,
  8.                 AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE,
  9.                 AT91F_ASM_IRQ0_Handler
  10.                 );
  11.         AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_IRQ0);
复制代码

中断服务函数代码
   
  1. command = *(VXI_REG_E);
  2.         dataLow = command & 0x00FF;
  3.         dataHigh = (command >> 8) & 0x00FF;       
  4.         AT91F_AIC_ClearIt(AT91C_BASE_AIC,AT91C_ID_IRQ0);
复制代码

[ 本帖最后由 yjz98 于 2009-7-14 22:19 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-07-15 12:16 |只看该作者
在中断函数中添加一些打印,看看死到了哪里

论坛徽章:
0
3 [报告]
发表于 2009-07-15 22:38 |只看该作者

回复 #2 emmoblin 的帖子

网上查了查都说中断服务函数应尽量简单些,所以对其进行了啦修改,修改的代码为:
     command = *(VXI_REG_E);
        //有对一标志置为,在外部检测到置为后再分解出command的高低字节   
        AT91F_AIC_ClearIt(AT91C_BASE_AIC,AT91C_ID_IRQ0);

情况依旧,收到几个中断后就死掉了,pc指针指向0x10,表示数据丢失。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP