​

         最近在PICF18的平台上熟悉J1939的协议,第一个例子算是调试完了,使用的最简单的polling模式来实现的。但是如果想要让J1939的协议栈处理的能力更好,实时性更好且设计更加简单一些,需要使用中断。

         这样,我需要的中断是CAN通信的收发功能。

         看一下相关的文档:

446_PIC18F系列MCU的中断实现_中断处理

         正好,我用到的两个MCU兼容性上基本上是一致的,中断的用法看上去没有太大的差异。

         状态的判断寄存器如下:

446_PIC18F系列MCU的中断实现_中断处理_02

                  而中断使能的寄存器如下:

446_PIC18F系列MCU的中断实现_寄存器_03

         以上只是部分。

446_PIC18F系列MCU的中断实现_寄存器_04

         中断优先级的配置部分如上,只有高低两个优先级。

446_PIC18F系列MCU的中断实现_寄存器_05

         相应BUFFER的中断使能也有一个专门的寄存器,这一系列的配置跟我接触的比较多的PPC平台其实也是差不多的。

         接下来,看看这个例子中相关代码:

446_PIC18F系列MCU的中断实现_协议栈_06

         这里是中断的使能处理。

446_PIC18F系列MCU的中断实现_协议栈_07

         看起来,这里是有5个BUFFER的中断处理。

446_PIC18F系列MCU的中断实现_寄存器_08

         这是中断的处理,上面是汇编的处理向量定义,调用下面的中断ISR程序。之后,处理1939的中断ISR服务。

446_PIC18F系列MCU的中断实现_寄存器_09

         处理的类别分别是收发和错误。

         为什么接收只有一个中断呢?

446_PIC18F系列MCU的中断实现_寄存器_10

         其实,这里的代码说得清楚,开启了FIFO模式。

         上面差不多是ECAN的使用方式,差不多的驱动基础已经了解了。后面,可以深入了解一下协议栈本身的功能。