[技术问答] 清理中断标识什么时候清理合适?

[复制链接]
 楼主| 21mengnan 发表于 2019-12-30 23:44 | 显示全部楼层 |阅读模式
  1. void TMR0_IRQHandler(void)
  2. {
  3.     static uint32_t u32Sec = 1;

  4.     printf("%d sec\n", u32Sec++);

  5.     /* clear timer interrupt flag */
  6.     TIMER_ClearIntFlag(TIMER0);
  7. }
比如这个例子中,先处理了任务,然后才清理了那个定时器中断标识。

  1. void GPIOP0P1_IRQHandler(void)
  2. {
  3.     /* To check if P1.3 interrupt occurred */
  4.     if(GPIO_GET_INT_FLAG(P1, BIT3))
  5.     {
  6.         GPIO_CLR_INT_FLAG(P1, BIT3);
  7.         printf("P1.3 INT occurred.\n");
  8.     }
  9.     else
  10.     {
  11.         /* Un-expected interrupt. Just clear all PORT0, PORT1 interrupts */
  12.         P0->ISRC = P0->ISRC;
  13.         P1->ISRC = P1->ISRC;
  14.         printf("Un-expected interrupts.\n");
  15.     }
  16. }
这个例子中是先确认中断标识对不对再清理,之后干其他事情。
 楼主| 21mengnan 发表于 2019-12-30 23:44 | 显示全部楼层
是不是在中断函数中,任意位置清理中断标识都行呢?
mintspring 发表于 2019-12-31 00:02 | 显示全部楼层
所以任何时候清理这个都行的,只要结束后保证被清理就行。一般建议最后清理。
jasontu 发表于 2019-12-31 07:46 | 显示全部楼层
看个人操作中断习惯。
如果中断向量有开多个中断源,需要多个判断,处理再清。
中断向量有只有一个中断源,可以直接清。

ayb_ice 发表于 2019-12-31 10:57 | 显示全部楼层
这也取决于需求

比如不想那么灵敏,先处理,再清除
但如果不能丢失中断,先清除,再处理(清除后可以立马再次有效,退出中断后又立马进入中断了)
天灵灵地灵灵 发表于 2019-12-31 11:46 | 显示全部楼层
因为只要退出后再执行就行了,所以肯定要先紧着要紧事办事了。最后再清。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

87

主题

1140

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

87

主题

1140

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部