CAN--CAN中断的使用

一,

       bxCAN占用4个专用的中断向量。通过设置CAN中断允许寄存器(CAN_INTENR),每个中断源都可以单独允许和禁用。

分别为发送中断、FIFO_0 中断、FIFO_1 中断、错误及状态变化中断。

    函数名:

           1, 发送中断:USB_HP_CAN1_TX_IRQHandler(为什么前面带USB:因为CAN过滤器和USB共用了512SRAM)

           发送中断由发送邮箱变空事件产生,中断产生后,查询寄存器 CAN_TSTATR 的 RQCP0、RQCP1 和RQCP2 位来判断是哪个邮箱变空事件产生

           2,FIFO_0 中断:FIFO0 中断由接收新报文、接收邮箱变满和溢出事件产生,中断产生后,查询寄存器 CAN_RFIFO0的 FMP0、FULL0 和 FOVER0

          位来判断是哪个邮箱变空事件产生。

            FIFO_0 中断可由以下事件产生(即接收到一个新报文,FIFO_0满,FIFO_0溢出):

          3,FIFO_1 中断:FIFO1 中断由接收新报文、接收邮箱变满和溢出事件产生,中断产生后,查询寄存器 CAN_RFIFO1的 FMP1、FULL1 和 FOVER1

          位来判断是哪个邮箱变空事件产生。

          同上面的FIFO_0

         4,错误及状态变化中断:错误及状态变化中断由出错、唤醒和睡眠事件产生。

 

现在主要介绍接收中断:

      1,初始化中断相关结构体

      2,接收函数相关设置(由于上面用的FIFO1,所以我们这里接收也用FIFO1)

       

      3,编写中断服务函数(这里标志我们用到了上面所说的接收到了新报文

       

注意:我们一般会习惯性的将第一个红框中的标志给传到第二个函数中给清除掉,实际在这里是错误的,我们查看这个清除函数里面实际并没有这个参数。

但当我们查看CAN_Receive()这个函数时里面有对RFIFO0寄存器置一的操作。而对这个寄存器置一就会清除相应标志位,所以只要在中断中调用了这

个函数也就没必要特意清除这个标志位了。

 

 

 

  

 

 

 

 

 







 

          

 

 

 

 

posted @ 2023-10-07 17:20  WCH_CH32  阅读(1255)  评论(0编辑  收藏  举报