搜索

[应用相关] 单片机中断响应流程

[复制链接]
978|2
手机看帖
扫描二维码
随时随地手机跟帖
hoop|  楼主 | 2021-9-11 10:20 | 显示全部楼层 |阅读模式
单片机中断响应流程
中断通常被用来执行一些紧急任务,在单片机的应用开发中至关重要。
那通常中断应该如何使用以及中断是怎么被一步一步的响应的呢?本文以AT32的USART1接收完成中断为例,进行一个简单的说明
中断应用三要素
1)外设中断使能
  通过调用USART_INTConfig(USART1, USART_INT_RDNE, ENABLE);来完成
2)NVIC中断使能
  NVIC_InitType NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  注意要进行NVIC分组配置:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
3)中断服务函数
  void USART1_IRQHandler(void)
  {
    if(USART_GetFlagStatus(USART1, USART_FLAG_RDNE) != RESET)
    {
      usart1_index1 = USART_ReceiveData(USART1);
      usart1_rdne_interrupt_index1++;
    }
  }
中断响应步骤
A.当USART1接收到一笔数据后,其会立即置位接收数据寄存器非空标志(RDNE)
B.由于使能了USART1的接收完成中断,故RDNE标志的置位会同步置位USART1对应的NVIC pending位
C.由于使能了USART1的NVIC中断,故其pending位的置位就会跟随指令跳转,将会实际跳转到中断函数内执行
D.代码实际跳转到中断函数内后,硬件会制动清除USART1对应的NVIC pending位
E.中断函数内通过USART_ReceiveData命令读USART1数据寄存器来清除RDNE标志
F.退出中断服务函数,等待下一次标志置位响应中断

注意事项
1)中断函数内的if(USART_GetFlagStatus(USART1, USART_FLAG_RDNE) != RESET)用以区分同一中断向量下的不同中断源,通常不可少。比如USART1的中断源除RDNE外,还有包括TDE、IDLEF等;
2)如果中断函数内不执行清中断标志的动作的话,那在退出中断函数时,因中断标志保持置位,其又会重复从中断响应步骤中的B处开始执行;
3)中断标志的清除需要时间,为避免标志未被真正清除就退出中断服务函数,进而引发中断连续响应的问题,通常清标志命令不在中断函数的末尾执行;
4)如果需要实时的响应中断,代码必须确保未执行__disable_irq();命令(此为内核指令)
5)如果不期望中断函数被实时响应,比如低功耗唤醒状态下期望待时钟恢复后再响应中断时,就可以在进低功耗前调用__disable_irq();禁止中断的实时响应(此时中断会被记录挂起),并在之后期望中断响应的时刻执行__enable_irq();(此时之前挂起的中断会被立即响应)

使用特权

评论回复
guijial511| | 2021-9-12 12:22 | 显示全部楼层
讲解详细,点个赞。

使用特权

评论回复
joyall| | 2021-9-17 10:29 | 显示全部楼层
讲解详细,点个赞。

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 火星国务卿 得到打赏 ¥425.00
  • 2 yanzhengxin1 得到打赏 ¥350.00
  • 3 gaoyang9992006 得到打赏 ¥265.00
  • 4 Gavin3389 得到打赏 ¥225.00
  • 5 13426257085 得到打赏 ¥200.00
  • 6 呐咯密密 得到打赏 ¥185.00
  • 7 qbwww 得到打赏 ¥160.00
  • 8 两只袜子 得到打赏 ¥155.00
  • 9 yangjiaxu 得到打赏 ¥155.00
  • 10 elephant00 得到打赏 ¥150.00
在线客服 快速回复 返回顶部 返回列表