sja1000 中断_SJA1000的错误中断处理
SJA1000的错误处理好似还是比较复杂的的啦,下面是我自己的一些理解,有不对之处还请各位大虾多多指点啊!
SJA1000的错误有:
仲裁丢失;
数据溢出;
总线错误;
错误状态有:
错误主动(Error Active)
错误被动 (Error Passive)
总线关闭;
错误中断:
总线错误中断;
仲裁丢失中断;
错误消极中断;
数据溢出中断;
错误报警中断;
涉及到的寄存器:
状态寄存器(SR);
中断寄存器(IR);
中断使能寄存器(EIR);
仲裁丢失捕捉寄存器(ALC);
错误代码捕捉寄存器(ECC);
错误报警限制寄存器(EWLR);
TX错误计数寄存器(TXERR);
RX错误计数寄存器(RXERR);
处理中断当然是从中断寄存器说起了;
中断寄存器:只说和错误有关的位啦;
IR.7:BEI
总线错误中断;
当CAN控制器检测到总线错误且中断使能寄存器(EIR)中的BEIE被置位时此位被置位
当前的错误代码可以通过错误代码捕捉寄存器(ECC)获得;其中可以分为:
位错误;
格式错误;
填充错误;
其它错误;
IR.6:ALI
仲裁丢失中断;
当CAN控制器丢失仲裁,变为接收器和中断使能寄存器的ALIE为被置位时,此位被置位
当前仲裁丢失的位置可以通过读仲裁丢失捕捉寄存器(ALC)获得;
IR.5:EPI 错误消极中断;
当CAN控制器到达错误消极状态(Error
Passive)(至少一个错误计数器超过协议规定
的值127)或从错误消极状态(Error
Passive)又进入错误活动状态(Error Active)
以及中断寄存器的EPIE位被置位时此位被置1
IR.3:DOI 数据溢出中断;
数据溢出状态位(状态寄存器的SR.1位
DOS)有0-1 跳变且中断寄存器的DOIE位被置
位时此位被置1
IR.2 EI 错误报警中断;
错误状态位(状态寄存器的SR.6位
ES)和总线状态位(状态寄存器的SR.7位 BS)的
改变和中断寄存器的EIE位被置位时此位被置1
影响错误状态位的有:
1,错误计数器至少有一个错误计数器满
2,超过错误报警限制寄存器(EWLR)设置的值时错误状态位被置位;报警中断。EWLR 硬
件复位后的默认值是96
3,当发送错误计数器超过限制255 总线状态位被置为1
总线关闭
4,进入总线关闭后,再次进入错误主动状态(Error Active)时,
也会产生中断;
再说一下错误状态:
1,当TX错误计数寄存器和RX错误计数寄存器中有一个计数大于127时,则就进入错误被动状态(Error Passive)
2, 当TX错误计数寄存器和RX错误计数寄存器两个计数都小于127时,则就进入错误主动状态(Error Active)
2, 总线关闭状态,当TX错误计数寄存器超过限制255 总线状态位被置为1 总线关闭;
从上面来看错误报警中断(EI)是由多个中断源产生的,所以其处理也最为复杂;我只对总线关闭进行了处理,其它的未做处理;下面的图有助于大家理解:
下面是我写的程序:
void can_signal(void)
{
unsigned char data
can_irq;
unsigned char data temp;
x_wdgtime();
can_irq =
InterruptReg;
if(can_irq&ALI_Bit){ //
仲裁丢失位
++al_counter;
temp=ArbLostCapReg; // 读仲裁丢失寄存器
alc_current=temp&0x1F; // 获得当前仲裁丢失的位置
}
if(can_irq & BEI_Bit){ // 总线错误中断
temp=ErrCodeCapReg;
buse_current=temp&0x3F;
temp=temp&0xD0; // 获得总线错误的类型
switch (temp) {
case 0x00: ++bite_counter;
case 0x40: ++forme_counter;
case 0x80: ++stuffe_counter;
case 0xd0: ++othere_counter;
}
}
if(can_irq & EPI_Bit){ //
消极错误中断,
// 接收或发送错误计数超过127时,错误状态变为被动错误
if((RxErrCountReg>127)||(TxErrCountReg>127))
errstatus_current=ERR_PASSIVE;
// 接收或发送错误计数回到小于127时,错误状态变为主动错误
if((RxErrCountReg<127)&&(TxErrCountReg<127))
errstatus_current=ERR_ACTIVE;
}
if(can_irq & DOI_Bit){ //
data overflow
CommandReg = (CDO_Bit|RRB_Bit);
return;
}
if(can_irq&EI_Bit){ //
错误报警中断, 这里只对总线关闭错误做处理
if(StatusReg&BS_Bit){ // 检测状态寄存器的总线状态位
++busoff_counter;
ModeControlReg = 0x00;
return;
}
}
if(can_irq & RI_Bit){ // 接收数据中断
if(StatusReg & DOS_Bit){
CommandReg = (CDO_Bit|RRB_Bit);
return;
}
can_readmsg();
return;
}
return;
}
有不对的还请大家指出来哦!
sja1000 中断_SJA1000的错误中断处理相关推荐
- sja1000 中断_SJA1000程序
给你提供一些思路 1.sja1000初始化 2.发送子程序 3.中断方式接收 下面是一些程序段 你参考下(已用于产品) /**********SJA1000初始化***********// void ...
- sja1000 中断_SJA1000中断接收为什么接收中断不能被触发,不能进入中断接收子函数?看资料,里面说会自动触发中断的。...
1.sja1000的int引脚你先不连接 sja1000通电后 (纯粹通电不运行程序) 你测试一下int 是否为高? 如果是高正常. 2.sja1000的int引脚你先不连接 运行程序 ...
- sja1000 中断_CAN总线 SJA1000中断
背景: 最近一直在使用C8051F340 + SJA1000来实现CAN通信,就SJA1000部分做个记录. 正文: 整个系统结构拓扑图如下: 两路CAN,C8051F340作为CPU,处理CAN与U ...
- 专题2-通过按键玩中断\第1课-中断处理流程深度剖析-lesson1
中断概念 1.中断生命周期 串口先产生一个事件,该事件传送到中断控制器里面,中断控制器会进行相应过滤,能通过过滤,那么就交给CPU去处理. 2.中断源 2440芯片手册 6410芯片手册 3.中断过滤 ...
- sja1000 中断_[转载]SJA1000的错误中断处理
SJA1000的错误处理好似还是比较复杂的的啦,下面是我自己的一些理解,有不对之处还请各位大虾多多指点啊! SJA1000的错误有: 仲裁丢失: 数据溢出: 总线错误: 错误状态有: 错误主动(Err ...
- GNU ARM汇编--(五)中断汇编之嵌套中断处理
在上篇<GNU ARM汇编--(四)中断汇编之非嵌套中断处理>中分析了最简单的中断处理的写法,再看TQ2440启动代码中的中断向量表的写法就一目了然了.今天抽时间对嵌套中断处理的学习做下整 ...
- sja1000 中断_SJA1000PeliCAN模式下自收发问题
/*************************************************************************MCU:ATmega16MCLK:内部震荡8M熔丝位 ...
- sja1000 中断_关于单片机+SJA1000接收中断C语言编程的问题
采用at89S52+sja1000的模块.一个节点发送,一个节点接收.可以确定发送节点能正确工作.但是接受节点无法接收到报文,接受节点采用中断0,程序如下voidCAN_RXD(void)interr ...
- ARM通用中断控制器GIC之中断处理简介
在阅读本章之前,可以参考笔者之前关于GIC的一些描述: ARM通用中断控制器GIC(generic Interrupt Controller)简介 ARM架构Generic Interrupt Con ...
最新文章
- Linux下利用rsync实现多服务器文件同步
- 微信小程序 - this.triggerEvent()
- dp application in paper (c#)
- 多线程之 CreateThread与_beginthreadex本质区别
- layui富文本编译器添加图片
- 计算机应用板块还有行情吗,今日股市行情资金收评:计算机应用板块资金流出居前...
- YBTOJ:单词频率(AC自动机)
- linux内核调度 0号进程,Linux内核源代码情景分析---第四章 进程与进程调度
- OK6410-A编译u-boot时遇到的问题及解决
- http发送16进制报文_图解HTTP 第三章HTTP报文内的HTTP信息
- 谢谢有你【我与51CTO一“七”成长】
- 组概念_【收藏】学习质谱一定要知道的6组概念
- 一款保险系统架构设计图
- IOT:基于oblog的应用
- 无线通信中存在的远近效应、多普勒效应、多径效应以及其应对策略
- android全平台基于ffmpeg解码本地MP4视频推流到RTMP服务器
- APP消息智能推送有什么特点
- 抖音播放量突然被限流降权是什么原因
- PATA 1093 有几个PAT
- 共地问题的干扰用滤波器也难于解决.
热门文章
- 大数据学习(十三)hive正则表达式
- 代码实现:圣诞树效果(易懂,必会)/用html实现圣诞树效果
- 百度之星2018初赛游记
- 电脑字体突然变细了:macOS Mojave 在非Retina屏幕下字体太细了怎么办
- 2021-12-08:扑克牌中的红桃J和梅花Q找不到了,为了利用剩下的牌做游戏,小明设计了新的游戏规则: 1) A,2,3,4....10,J,Q,K分别对应1到13这些数字,大小王对应0; 2) 游
- NGBOSS转型在即:COTS初露锋芒
- 清闲的工作与温水煮青蛙;-)
- GameFramework框架个人笔记汇总
- 详解Windows系统中如何释放C盘空间(转)
- python爬虫能赚钱吗-个人利用Python爬虫技术怎么挣钱-10万被动收入