首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

ucos中加入FIQ处理函数,该怎么处理

2012-02-24 
ucos中加入FIQ处理函数我用的是mini2440提供的ucos代码,我想在ucos中加入FIQ处理函数。在2440init.s做了一

ucos中加入FIQ处理函数
我用的是mini2440提供的ucos代码,
我想在ucos中加入FIQ处理函数。
在2440init.s做了一些修改,
异常向量表中FIQ的跳转修改为
b FIQ_HANDLE
跳转到
  IMPORT Handler_FIQ
FIQ_HANDLE
  stmfd sp!,{r0-r3,lr}
  mrs r3,spsr
  stmfd sp!,{r3}
  bl Handler_FIQ
  ldmfd sp!,{r3}
  msr spsr_cxsf,r3
  ldmfd sp!,{r0-r3,pc}^

Handler_FIQ是FIQ的处理函数,但运行后,当产生FIQ中断,程序死了。

void Handler_FIQ(void)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
  OS_CPU_SR cpu_sr;
  #endif
  OS_ENTER_CRITICAL();
  beep(1);
  delay(100);
  beep(0);

  rEINTPEND = rEINTPEND;
  rSRCPND =rINTPND;
  rINTPND = rINTPND;
  OS_EXIT_CRITICAL();
}

为什么会这样?
我应该怎么做?

[解决办法]
初步看,可能是清中断的地方有问题:

FIQ中断产生后,INTPND不会置位的。
所以下面这样写是不会清除中断的
rSRCPND =rINTPND;
没有清中断,当恢复中断后,立马又进入FIQ处理程序,相当于死循环一样了。

热点排行