这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » FIQ 以FIQ方式响应外部中断时出现的错误

共2条 1/1 1 跳转至

FIQ 以FIQ方式响应外部中断时出现的错误

院士
2006-09-17 18:14:16     打赏
FIQ 以FIQ方式响应外部中断时出现的错误



关键词: 方式     响应     外部     中断     出现     错误    

院士
2006-12-22 22:43:00     打赏
2楼
问 我要对外部输入脉冲计数,使用外部中断3(EINT3),为了提高响应速度,使用FIQ方式。为此,计数测试函数稍作修改为:
void Test_Counter(void)
{
counter = 0;/* 初始值为零 */

MAKE_EINT3_SELECT();/* 设置PG3引脚对应功能分别为外部中断输入EINT3 */

/*****************修改了以下两句,原来rINTCON = 5;rINTMOD = 0***************/
rINTCON = 4;/* 不使用向量模式,使能IRQ中断,允许FIQ中断 */
           
rINTMOD = BIT_EINT3;/* 外部中断EINT3即计数器占用的中断使用FIQ模式,其它为IRQ中断 */
/********************************************************************/

rEXTINT = 0x22222222;/* 外部中断控制器寄存器,设置为下降沿触发 */

rINTMSK = ~(BIT_GLOBAL|BIT_EINT3);/* 开全局中断和外部中断3 */

pISR_EINT3 = (unsigned int)Eint3Isr;

        Uart_Printf("
[Eint3 Test]
");
      Uart_Printf("Check Counter Output
");
      Uart_Printf("To exit Counter test , Press any key!!!
");
      Uart_Printf("The input pulse has occured:
");
    
      Uart_Getch();
                    
      rINTMSK |= BIT_GLOBAL;/* 关中断 */
    
      Uart_Printf("
The counters is %d
",counter);
    
}


另外,原程序44binit.s文件中,没有给FIQ分配堆栈,即FIQStack # 0,我将它修改为FIQStack # 256,同时将44binit.s文

件中,    ^ (_ISR_STARTADDRESS-0x500)改为    ^ (_ISR_STARTADDRESS-0x600),这样HandleReset等向量的地址不会改变。可是

,这样修改后,当外部接入脉冲时,出现Dabort exception!!!错误。提示信息如下:

[Eint3 Test]
Check Counter Output
To exit Counter test , Press any key!!!
The input pulse has occured:
Dabort exception!!!


请问,这是什么问题啊?该如何修改或者说如何编写FIQ中断响应程序呢?
谢谢 1: re

刚才又试了一下,代码和上午的一样,结果发现不出现数据访问异常了,但是程序直接复位了,奇怪
FIQ中断应该怎么编写呢? 2: re
哪位高手给讲一讲使用FIQ中断和IRQ中断,程序编写上有哪些区别吧。
谢谢

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]