您的位置 首页 软件

PIC16位单片机CAN(5)中止

CAN数据的接收使用中断来处理。ECAN模块会产生三种不同中断,每种中断都具有自己的中断向量、中断允许控制位、中断状态标志和中断优先级…

CAN数据的接纳运用中止来处理。ECAN 模块会发生三种不同中止,每种中止都具有自己的中止向量、中止答应操控位、中止状况标志和中止优先级操控位。这些中止是:

? CiTX——ECAN 发送数据恳求
? CiRX——ECAN 接纳数据安排妥当

? Ci——ECAN 事情中止

详细这三种中止的含义就不说了,看手册就行了。我运用的是事情中止也便是当成功接纳报文并装入一个接纳缓冲区 (报文缓冲区 0 至 31)时发生中止。

中止算是比较简单的,看一下初始化代码:

/* Enable ECAN1 Interrupt */
void Interrupt_Init(void)
{
INTCON2bits.GIE = 1;//使能大局中止
INTCON1bits.NSTDIS = 0;//使能中止嵌套
IPC8bits.C1IP=6;//ECAN1 事情中止优先级 6
IFS2bits.C1IF=0;//ECAN1 事情中止标志状况位
IEC2bits.C1IE = 1;//ECAN1 事情中止答应位
// C1INTEbits.TBIE = 1;
C1INTEbits.RBIE = 1;//接纳缓冲区中止答应位
}
再看中止处理函数代码:
void __attribute__((__interrupt__,no_auto_psv))_C1Interrupt (void)
{
IFS2bits.C1IF = 0; // clear interrupt flag ECAN1 事情中止标志状况位
if(C1INTFbits.TBIF)
{
C1INTFbits.TBIF = 0;
}
if(C1INTFbits.RBIF)//接纳缓冲区中止标志位
{
// read the message
if(C1RXFUL1bits.RXFUL1==1)//接纳缓冲区 n 满位
{
// rx_ecan1message.buffer=1;
C1RXFUL1bits.RXFUL1=0;
}
// rxECAN1(&rx_ecan1message);
C1INTFbits.RBIF = 0;//接纳缓冲区中止标志位清0
Nop();
Nop();
}
}
中止处理函数的写法能够参阅文档的第六章,中止的示例代码。_C1Interrupt代表是CAN1事情中止,这个称号有必要看编译器的阐明文档,在头文件里可能是找不到的。MPLAB?XC16 C COMPILER USER’S GUIDE 里边的第十一章便是说的中止向量的称号写法。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/272439.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部