CAN控制器 SJA1000中断
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位被置位时此位被置1IR.3:DOI 数据溢出中断;数据溢出状态位(状态寄存器的SR.1位 DOS)有0-1 跳变且中断寄存器的DOIE位被置位时此位被置1IR.2 EI 错误报警中断;错误状态位(状态寄存器的SR.6位 ES)和总线状态位(状态寄存器的SR.7位 BS)的改变和中断寄存器的EIE位被置位时此位被置1影响错误状态位的有:1,错误计数器⾄少有⼀个错误计数器满2,超过错误报警限制寄存器(EWLR)设置的值时错误状态位被置位;报警中断。
我的CAN总线SJA1000调试经历
我的CAN总线SJA1000调试经历展开全文我的 CAN总线 SJA1000调试经历前几天学校实验室赶活,调试了SJA1000的CAN总线驱动,我所做的平台是在Intel PXA270的ARM处理器上面进行控制的,通过读写总线的方式进行控制的,期间对着SJA1000的databook查找了很多,期间调试时也走了不少的弯路,现在把调试心得一些经验在这里讲讲。
由于以前对CAN的驱动接触比较少,只是了解过它的物理特性和用途,所以下手点就是从databook这块着手的,于是先调试CAN的初始化配置,首先是通过CPU能够读写SJA1000的寄存器了,然后我从网上下了一个基于Linux内核的CAN驱动代码,往里一直添加,但最后发现这套代码写得太复杂了,可能本身自己对SJA1000的寄存器设置也不是很了解,没办法,看了大半天的databook,终于有些头绪想清楚该是怎样去控制了,从ZLG网站中下了一个BASIC模式下的参考例程,我看了一下,然后SJA的寄存器详细看了看(由于开始的时候比较忙,所以直到这个时候才算是仔细看了看SJA的内部,至于CAN 的基础协议我是根本没有看,这给我后面带来了极大的麻烦)。
然后就参考ZLG的程序开始写SJA的测试程序,那个程序写的很大,也比较完整,因为我想快点把CAN打通,于是弄了一个一千多行的程序,以前我的调试程序一般都很小的。
写好程序之后就开始测试,首先测试的是测试寄存器,然后一步步测试下去,在BASIC模式下所有的寄存器都正常,但是在发送的时候是总是不正常,启动发送之后就一直在发送,状态寄存器的标志位一直处在发送的状态下,然后就是报总线错误,不知道是怎么会事情,很郁闷,上网上的BBS看了一下。
其他人告诉我单个CAN节点发送是成功不了的,如果没有收到接受CAN 节点的应答,发送节点就会一直发送,直到超出错误计数器的允许值使得总线关闭。
这下我终于明白是怎么回事了,同时在精华区发现在peli模式下有ECC(错误寄存器),可以跟踪错误,于是开始改成用PeliCAN模式操作过程。
CAN通信控制器SJA1000
1 错误;
0 正常; 1 发送;SJA1000正在发送一个报文 0 空闲;没有报文在发送中 1 接收;SJA1000正在接收一个报文 0 空闲;没有报文在接收中
中断寄存器(IR)
1、中断寄存器用作中断源的识别;
2、当寄存器的一位或多位被置位时 ,/INT引脚有效 (低),引起中断;
3、中断寄存器对微控制器来说是只读存储器;
位 地址过滤
7
6
5
4
3
2
1
0
10
标识符字节1 ID.10 ID.9 ID.8 ID.7 ID.6 ID.5 ID.4 ID.3
描述符
11
标识符字节2 ID.2 ID.1 ID.0 RTR DLC.3 DLC.2 DLC.1 DLC.0
12
TX数据1
13
TX数据2
14
TX数据3
15
TX数据4
数据
16
TX数据5
1 出现;一个报文将被发送 0 空缺;无动作
位
符号
名称
值
CMR.7
-
CMR.6
-
CMR.5
-
-
- 保留
-
- 保留
-
- 保留
功
能
状态寄存器(SR)
状态寄存器的内容反映SJA1000的状态。状态寄存器对微 控制器来说是只读存储器。提供给用户以查询的方式来处理数据 传输。 各个位的功能如下:
位 SR.3 SR.2
ir1ti发送中断11发送缓冲器状态从逻辑00至逻辑11跳变释放总线且跳变释放总线且发送中断使能位被置为逻辑11使能时此位被置位表示发送完成使能时此位被置位表示发送完成00微控制器的任何读访问可自动清除此位ir0ri接收中断11当接收fifo不空且接收中断使能位被置为逻辑11使能时此位被置位表示有数据待接收00微控制器的任何读访问可自动清除此位位符号名称值功能ir7保留ir6保留ir5保留ir4iwui唤醒中断11退出睡眠模式时此位被置位00微控制器的任何读访问可自动清除此位ir3doi数据溢出中断数据溢出中断11当数据溢出中断使能被置为逻辑11使能时一旦数据溢出状态位使能时一旦数据溢出状态位001跃变此位即被置位跃变此位即被置位00微控制器的任何读访问可自动清除此位发送缓冲区用来存储微控制器要发送的一个报文
SJA1000说明
SJA1000--独立CAN控制器
概述
SJA1000是一款独立的控制器,用于汽车和一般工业环境中的控制器局域网络(CAN)。
它是PHILIPS半导体PCA82C200 CAN控制器(BasicCAN)的替代产品。
而且,它增加了一种新的工作模式(PeliCAN),这种模式支持具有很多新特性的CAN 2.0B协议。
特性
和PCA82C200独立CAN控制器引脚兼容;
和PCA82C200独立CAN控制器电气兼容;
PCA82C200模式(即默认的BasicCAN模式);
扩展的接收缓冲器(64字节、先进先出FIFO);
和CAN2.0B协议兼容(PCA82C200兼容模式中的
无源扩展帧);
同时支持11位和29位识别码;
位速率可达1Mbits/s;
PeliCAN模式扩展功能:
--可读/写访问的错误计数器
--可编程的错误报警限制
--最近一次错误代码寄存器
--对每一个CAN总线错误的中断
--具体控制位控制的仲裁丢失中断
--单次发送(无重发)
--只听模式(无应答、无主动的出错标志)
--支持热插拔(软件实现的位速率检测)
--验收滤波器扩展(4字节代码,4字节屏蔽)
--自身信息接收(自接收请求)
24MHz时钟频率;
对不同微处理器的接口;
可编程的CAN输出驱动器配置;
增强的环境温度范围(-40-+125℃)。
sja1000 can 驱动程序演示实验
SJA1000 CAN驱动程序演示实验一.实验目的本驱动程序展示了如何在Small RTOS中编写SJA1000 的驱动程序。
通过调用CAN 程序库SJA1000_PEI.LIB 的基本函数,实现实验板上CAN 节点的初始化以及CAN 节点数据收发测试。
二.实验设备及器件PC 机一台DP-51PROC 单片机综合仿真实验仪一台CAN PARK 模块一台CAN 连接线一根三.实验步骤1、将CAN-bus PARK 插入到A6 区中,用导线连接A6 区的P1_IO2 到A2 区的P1 0,连接A6 区的P1_CS1 到A2 区的A15。
2、使用导线把A2 区的P16 和P17 分别于D5 区的SCL 和SDA 相连。
使用导线把D 5区的/RST 与VCC 相连。
3、由于本程序使用中断方式响应SJA1000 中断,故将A5 区的P1_INT 接到A2 区的INT0。
4、利用CAN 连接线将两台已经安装了CAN-Bus 模块的DP-51PROC 连接起来,以组成简单的CAN 网络实现CAN 的接收和发送。
5、本驱动程序已经将输出文件路径设置为“E:\Temp”,用户可自行更改输出文件路径。
将路径“E:\Temp”中的CAN. hex 文件下载到两台DP-51PROC 中运行。
四.实验参考程序主要部分/*******************************************************描述:独立的CAN 控制器SJA1000PeliCAN 在small rtos 中的应用示例*文件名: PELIRTOS.c*应用语言: KEIL C51*应用系统: small rtos*版本: V1.0*广州周立功单片机发展有限公司保留所有的版权****************************************************/#define _TIME_MODULE_H#define _SERIAL_H/********************************************************** 导入头文件******************************************************/#include "INCLUDES.h"#include "Sja1000_peli.h"sfr IPH=0xb7;sbit RESET_PIN=P1^0;// 验收代码/屏蔽寄存器的内容(4+4)uint8 xdata Send_CAN_Filter[8]={0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0xff};// 帧信息和标示码(1+4)分别对应TX,TX1,TX2,TX3,TX4uint8 xdata Send_CAN_Info_ID[3]={0xc7,0x0A,0x0B};uint8 xdata Recv_CAN_Info_ID[3];// 待发送数据(8)uint8 xdataSend_CAN_Data[13]={0xc7,0x0A,0x0B,0x04,0x05,0x06,0x07,0x08,0x07,0x0 8,0x07,0x08,0x08};uint8 xdata Recv_CAN_Data[14];uint8 xdata time_Counter=0;uint8 xdata BTR0,BTR1;uint16 xdata *p;uint8 xdata disp_buf[8];void CAN_Send(void);void display(void);void CAN_Rcv(void);void TimeSum(void);void Delay_ms(uint8 j);void SJA1000_Config_Normal(void);void Init(void){CKCON=1; //应用6clockTMOD = (TMOD & 0XF0) | 0X01;TCON=TCON|0x04; //MCU 的INT1 下降沿触发,INT0 电平触发TH0 = (65536 - (11059200 / 12) / 100) / 256;TL0 = (65536 - (11059200 / 12) / 100) % 256;TR0 = 1;ET0 = 1;TF0 = 0;}/************************************************************** ****函数名称:void CAN_Init(void)**功能描述:复位SJA1000,并设置其工作在正常模式************************************************************** ***/void CAN_Init(void){RESET_PIN=0; //将SJA1000 的复位线与P1.0 相连接Delay_ms(1);RESET_PIN=1; //控制P1.0 来实现SJA1000 的复位SJA_CS_Point=&CAN_SJA_BaseAdr;SJA1000_Config_Normal();WriteSJAReg(REG_CAN_IER,RIE_BIT); //使能SJA1000 接收中断EX0=1;}/************************************************************** ** 函数原型: void Delay_ms(uchar j)** 功能描述: 该函数用于不精确的延时。
SJA1000程序
SJA1000程序给你提供一些思路1、sja1000初始化2、发送子程序3、中断方式接收下面是一些程序段你参考下(已用于产品)/**********SJA1000初始化***********//void Init_SJA1000(void){uchar state;uchar ACRR[4]={0XAA,0XFF,0X22,0X11};// 接收代码寄存器uchar AMRR[4]={0xff,0xff,0xff,0xff};// 接收屏蔽寄存器//uchar AMRR[4]={0x00,0x00,0xff,0xff};// 接收屏蔽寄存器do// 使用do--while语句确保进入复位模式{MODR = 0x09; // 设置MOD.0=1--进入复位模式,以便设置相应的寄存器state = MODR;}while( !(state & 0x01) );// 对SJA1000部分寄存器进行初始化设置CDR = 0x88; // CDR为时钟分频器,CDR.3=1--时钟关闭, CDR.7=0---basic CAN, CDR.7=1---Peli CANBTR0 = 0x04;//0x31; // 总线定时寄存器0 ;总线波特率设定BTR1 = 0x1c;//0x1c; // 总线定时寄存器1 ;总线波特率设定IER = 0x01; // IER.0=1--接收中断使能;IER.1=0--关闭发送中断使能OCR = 0xaa; // 配置输出控制寄存器CMR = 0x04; // 释放接收缓冲器ACR0 = ACRR[0];// 初始化接收代码寄存器ACR1 = ACRR[1];ACR2 = ACRR[2];ACR3 = ACRR[3];AMR0 = AMRR[0];// 初始化接收屏蔽寄存器AMR1 = AMRR[1];AMR2 = AMRR[2];AMR3 = AMRR[3];do// 使用do--while语句确保退出复位模式{MODR = 0x08; //MOD.3=0--双滤波器模式state = MODR;}while( state & 0x01 );}////////////////////////////////////////**********CAN发送数据到CAN-Bus***********//void CAN_TXD(void){uchar state;//初始化标示码头信息TX_buffer[0] = 0x88; //.7=0--扩展帧;.6=0--数据帧; .0-.3=100--数据长度为8字节// TX_buffer[1] = 0xFF; //本帧信息的ID//TX_buffer[2] = 0xFF;TX_buffer[3] = 0xFF;TX_buffer[4] = 0xFF;do //查询SJA1000是否处于接收状态,当SJA1000不处于接收状态时才可继续执行{state = SR; //SR为SJA1000的状态寄存器}while( state & 0x10 ); //SR.4=1 正在接收,等待do //查询SJA1000是否处于发送完毕状态{state = SR;}while(!(state & 0x08)); //SR.3=0,发送请求未处理完,等待直到SR.3=1do //查询发送缓冲器状态{state = SR;}while(!(state & 0x04)); //SR.2=0,发送缓冲器被锁。
CAN中断位介绍
SJA1000在CAN总线系统节点的应用摘要:介绍CAN总线控制器SJA1000;给出其在CAN总线系统节点中的应用方法、节点电路原理图及初始化程序;针对用户SJA1000容易出现的问题进行了解说。
关键词:CAN总线SJA1000 节点单片机CAN 总线是德国Bosch公司20世纪80年代初,为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发一种串行数据通信协议。
1993年11月,ISO正式颁布了道路交通运载工具,进行数据信息交换用的高速通信控制局部网(CAN)的国际标准(ISO11898)。
PHILIPS、Intel、MOTOROLA等公司出品了很多支持CAN协议的集成芯片,如82526、SJA1000、68HC05X4/X16/X32和具有片内CAN的电磁兼容微控制器P8XCE598、16位微控制器87C196CA/CB等。
下面介绍PHILIPS半导体公司推出的CAN总线控制器SJA1000,并给出其应用实例。
1 CAN总线控制器SJA1000芯片介绍SJA1000是一种独立的CAN总线控制器。
PHILIPS半导体公司将它作为PCA82C200 CAN 控制器(Basic CAN)的替代产品。
SJA1000增加了一种新的工作模式(Peli CAN),这种模式支持具有很多新特性的CAN 2.0B协议。
1.1 SJA1000引脚介绍图1是SJA1000引脚图。
SJA1000具有28个引脚,下面对部分引脚进行介绍。
MODE:模式选择输入,1(高电平)=Intel模式;0(低电平)=Motorola模式。
TX0、TX1:从CAN输出驱动器0,1输出到物理总线上。
RX0、RX1:从物理CAN总线输入到SJA1000的输入比较器。
INT:中断输出,用于中断微控制器。
INT在内部中断寄存器各位都置位时,低电平有效。
INT是开漏输出。
CLKOUT:SJA1000产生的提供给微控制器的时钟输出信号,时钟信号来源于内部振荡器且通过编程驱动,时钟控制寄存器的时钟关闭位可禁止该引脚。
3.7 SJA1000中断
SJA1000中断处理流程
目 录
概述
SJA1000中断事件
SJA1000中断处理流程
接收中断
SJA1000使用64字节的FIFO来保存收到的CAN报文,当接收FIFO 中包含有效报文且RIE位置1,产生接收中断。
接收中断的处理
RIE RI
1
1 0
MCU 报文3 报文2 报文1 接收FIFO
若FIFO中还有未读取的CAN 报文,则接收中断将继续有效。
3.7 SJA1000中断
目 录
概述
SJA1000中断事件
SJA1000中断处理流程
SJA1000的中断管理
SJA1000共有8种中断事件,使用了2个寄存器来管理中断:
中断寄存器(IR) 中断寄存器用来指示产生的中断事件,当中断寄存器中任意位置1时INT 引脚变为低电平(中断输出)。
中断使能寄存器(IER)
Bit7 Bit6 Bit5 Bit4 Bit3
BEI ALI EPI WUI DOI
BEIE ALIE EPIE WUIE DOIE
Bit2
Bit1 Bit0
RI
TI RI
EIE
TIE RIE
错误报警,错误状体位和总线状态位 的改变
发送中断 接收中断,接收FIFO不空
目 录
概述
SJA1000中断事件
总线错误 仲裁丢失 BEIE置位 ALIE置位 总线错误中断(BEI) 仲裁丢失中断(ALI)
CAN-bus协议有完善的错误处理机制和自动重发功能,这两种中断都不需要MCU处理。 EPIE置位 进入或退出错误被动状态 错误消极中断(EPI) 错误状态和总线状态发生改变 EIE置位 错误报警中断(EI) 总线唤醒中断(WUI)
CAN控制器SJA1000中文资料
广州周立功单片机发展有限公司 Tel 020 38730976 38730977 Fax:38730925
器 RXB 13 个字节 作为接收 FIFO RXFIFO 长 64 字节 的一个窗口 可被 CPU 访问 CPU 在此 FIFO 的支持下 可以在处理信息的时候接收其它信息 6.1.4 验收滤波器 ACF 验收滤波器把它其中的数据和接收的识别码的内容相比较 以决定是否接收信息 在纯粹的接收测试中
6.2 CAN 控制器的详细说明 SJA1000 在软件和引脚上都是与它的前一款 PCA82C200 独立控制器兼容的 在此基础上它增加了很 多新的功能 为了实现软件兼容 SJA1000 增加修改了两种模式 y BasicCAN 模式 与 PCA82C200 兼容 y PeliCAN 模式 扩展特性 工作模式通过时钟分频寄存器中的 CAN 模式位来选择 复位默认模式是 Basic CAN 模式 6.2.1 与 PCA82C200 兼容性 在 Basic CAN 模式中 SJA1000 模仿 PCA82C200 独立控制器所有已知的寄存器 在 6.2.1.1 到 6.2.1.4 节中所描述的特性不同于 PCA82C200 这主要是为了软件上的兼容性 6.2.1.1 同步模式 在 SJA1000 的控制寄存器中没有 SYNC 位 在 PCA82C200 中是 CR.6 位 同步只有在 CAN 总线上 弱势-支配 控制 的转换时才有可能发生 写这一位是没有任何影响的 为了与现有软件兼容 读取 这一位时是可以把以前写入的值读出的 对触发电路无影响 6.2.1.2 时钟分频寄存器 时钟分频寄存器用来选择 CAN 工作模式 Basic CAN /Peli CAN 它使用从 PCA82C200 保留下来的 一位 象在 PCA82C200 中一样 写一个 0-7 之间的值 就将进入 Basic CAN 模式 默认状态是 12 分频 的 Motorola 模式和 2 分频的 Intel 模式 保留的另一位补充了一些附加的功能 CBP 位 见表 49 的置位 使内部 RX 输入比较器旁路 这样在使用外部传送电路时可以减少内部延时 6.2.1.3 接收缓冲器 PCA82C200 中双接收缓冲器的概念被 Peli CAN 中的接收 FIFO 所代替 这对软件除了会增加数据溢出 的可能性之外 不会产生应用上的影响 在数据溢出之前 缓冲器可以接收两条以上信息 最多 64 字节 6.2.1.4 CAN 2.0B SJA1000 被设计为全面支持 CAN 2.0B 协议 这就意味着在处理扩展帧信息的同时 扩展振荡器的误 差被修正了 在 Basic CAN 模式下只可以发送和接收标准帧信息 11 字节长的识别码 如果此时检测到 CAN 总线上有扩展帧的信息 如果信息正确 也会被允许且给出一个确认信号 但没有接收中断产生 6.2.2 Basic CAN 和 Peli CAN 模式的区别 在 Peli CAN 模式下 SJA1000 有一个含很多新功能的重组寄存器 SJA1000 包含了设计在 PCA82C200 中的所有位及一些新功能位 Peli CAN 模式支持 CAN 2.0B 协议规定的所有功能 29 字节的识别码 SJA1000 的主要新功能
SJA1000简介2010
SJA1000简介2010-3-17 5:57:00PCA82C250提供对总线的差动发送和对CAN控制器的差动接收功能,也增大了通信距离,提高了系统的瞬间抗干扰能力,保护总线,降低射频干扰(RF I),实现了热防护等功能。
发送子程序负责节点报文的发送,由CAN控制器SJA 1000独立完成,将命令寄存器里的发送请求标志置位,即可发送SJA1000发送缓冲区中的报文。
CAN总线及CAN控制器SJA1000简介CAN总线最初是德国Bosch公司在1986 年为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种支持分布式实时控制系统的串行数据通讯总线。
CAN总线与其它通信网的显著不同之处在于:(1)报文传送中不包含目标地址,它是以全网广播为基础,各接收站根据报文中反映数据性质的标识符过滤报文,该收的收下,不收的弃用。
其好处是可线上网下网、即插即用和多站接收。
(2)特别强化了对数据安全性的关注,满足控制系统及其它较高数据要求的系统需求。
另外CAN总线采用短帧结构,借助接收滤波的多地址帧传送,受干扰概率低,每帧信息都有CRC校验及其它检错措施。
响应远程数据请求,配置灵活,具有全系统的数据相容性。
节点数主要取决于总线驱动电路,目前最多可达110个节点。
CAN总线符合ISO11898标准,通信速率高,最大传输速率可达1Mb it/S,最大传输距离为10km,传输介质可为双绞线。
基于CAN总线以上的特点,把它应用于系统分布比较分散且需要在同一总线上挂接多个节点的场合是非常适合的。
目前广泛流行的CAN总线器件有两大类:一类是独立的CAN控制器,如PhilipS公司的PCA82C200,SJA1000及Intel82256/82257等;另一类是带有在片CAN的微控制器,如P8XC582等。
其中Philips公司的PCA82C200是符合CAN 2. 0A协议的总线控制器,SJA1000是它的替代产品,它是应用于汽车和一般工业环境的独立CAN总线控制器。
项目二 汽车CAN总线技术基本原理(任务四SJA1000CAN控制器及其应用)
0
接收中断使能 1
0
功能
使能 禁止 使能 禁止 使能 禁止 使能 禁止 使能 禁止 使能 禁止 使能 使能 使能 禁止
Peli_RXD: PUSH ACC PUSH PSW CLR EA ;//关CPU中断
RE6: MOV DPTR,#SJA_IR MOVX A,@DPTR ANL A,#01H CJNE A,#00H,RE7;接收中断 SJMP RE8
IR.3 DOS 溢出中 1 置位
断
复位
IR.2 EI 错误报 1 置位
警中断 0 复位
IR.1 TI 发送中 1 置位
断
0 复位
IR.0 RI 接收中 1 置位
断
0 复位
Peli_RXD: PUSH ACC PUSH PSW CLR EA ;//关CPU中断
RE6: MOV DPTR,#SJA_IR MOVX A,@DPTR ANL A,#01H CJNE A,#00H,RE7;接收中断 SJMP RE8
----
状态
----
3(IR) 中断
---
中断
---
4(IER) 中断使能
中断使能 中断使能 中断使能
5
保留(00H) ---
保留(00H) ---
6(BTR0) 总线定时0
---
总线定时0 总线定时0
7(BTR0) 总线定时1
---
总线定时1 总线定时1
8(OCR) 输出控制
---
输出控制 输出控制
接收缓存器 标识符RTR,DLC 字节1-8 时钟驱动器
10 11 12-19
20 21 22-29 31
7
6
测试方 同步 式
周立功CAN控制器SJA1000的控制模块BCAN
状态
SR.4 SR.3
SR.2
SR.1
SR.0
IR.7
IR.6
IR.5
IR.4 中断
IR.3
IR.2
IR.1
IR.0 验收代码 AC.7 0
验收屏蔽 AM.7 0
BTR0.7
BTR0.6
BTR0.5
BTR0.4 总线定时0
BTR0.3
BTR0.2
BTR0.1
BTR0.0
BTR1.7
BTR1.6
BTR1.5
2.3.3 各寄存器功能介绍 下面根据实际应用情况 具体介绍 BasicCAN 模式下 SJA1000 内部各寄存器的功能
2.3.3.1 控制寄存器(CR) 控制寄存器位于 SJA1000 寄存器区的 0 地址
如表 4 所示 表 4 控制寄存器各位的说明 CAN 地址 0
用于设置 SJA1000 访问模式和各种中断
软件置位控制寄存器中的复位请求位 或总线关闭 后 内部寄存器的配置
表 3 内部寄存器在复位模式下的配置 BasicCAN 模式
寄存器
位
CR.7
符号
保留
名称
硬件复位 0
值 软件或总线关闭 复位CR.0 0
CR.6
保留
×
×
CR.5
保留
1
1
控制
CR.4 CR.3
OIE
溢出中断使能
EIE
错误中断使能
×
×
×
×
完全兼容 PCA82C200 的基础上 增加了一种新的工作模式 PeliCAN SJA1000 完全支持具有很多新特性的 CAN 2.0B 协议 SJA1000 的工作模式通过其内部的时钟分频寄存器 CDR 中的 CAN 模式位来选择 硬 件复位时默认模式是 BasicCAN 工作模式
SJA1000程序
INC R0
MOV @R0, #08H
INC R0
MOV @R0, #05H
LCALL BCAN_CMD_PRG ;
RET
;;;;;;;;;;;;;;;;;;控制SJA1000向CAN总线发送数据处理部分;;;;;;;;;;;;;;;
SENDDATA_PRG:
MOV R0, #SEND_DATA_BUF1
RCV_DATA_BUF9 DATA 058H
RCV_DATA_BUF10 DATA 059H
ERROR_STATUS DATA 07CH ;错误状态表示
TEST_DATA DATA 07FH ;测试发送数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV 3AH,#00H
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;外部中断0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCAN_INT0:
push DPH
PUSH DPL
PUSH PSW ;PSW,ACC入栈
MOV A, TEST_DATA
INC R0
MOV @R0, A
MOV R0, #SEND_DATA_BUF1
LCALL BCAN_DATA_WRITE ;将要发送的数据送入发送缓冲区
LOOPER:
JNB RCV_GOOD,LOOPER2 ;sja1000成功接收一帧,通知CPU处理
CLR RCV_GOOD
LCALL RCVDATA_PRG
CAN通信控制器SJA1000
0
1 0
无动作
释放;作为RXFIFO中报文存贮空间的接收缓冲器被释 放 无动作 出现;如果不是已在进行中,等待处理的发送请求被取 消。(注:正在进行的发送是不能被中止的) 空缺;无动作 出现;一个报文将被发送 空缺;无动作
CMR.2
RRB
释放接收缓冲器
CMR.1
AT
中止发送
1 0
CMR.0
TR
发送请求
(1) CAN控制器模块的说明
6.位定时逻辑(BTL) 位定时逻辑监视串行CAN总线和处理与总 线有关的位定时。它被同步于一个报文起始 的“隐性至显性”总线跳变时的CAN总线上 的位流(硬同步),以及重同步于一个报文 接收期间的更多的跳变(软同步)。
(1) CAN控制器模块的说明
7.错误管理逻辑(EML) EML 负责传送层中调制器的错误界定。它 接收来自BSP的错误报告,然后将错误统计量 通知给BSP和IML
SJA1000 对微控制器来说,是以存贮器 - 映像 I/O 设备出现的。对 SJA1000 的操作是通过操作 SJA1000中的寄存器来实现的。 SJA1000地址区包括控制段和报文缓冲器。控 制段在初始化加载期间是可被编程的,以配置通 信参数(例如,位定时)。 CAN 总线上的通信 也由微控制器通过该段来控制。在初始化期间, CLKOUT 信号可以被编程为由微控制器指定的 一个值。
2 一般说明
SJA1000有两种工作模式:
BasicCAN模式——与PCA82C200兼容的模式 PeliCAN模式 ——扩展功能模式
工作模式通过时钟分频寄存器中的 CAN模式位来选择,复位 默认模式是BasicCAN模式。 两种封装形式:一种为 28引脚的塑质双列式
CAN总线的实现-SJA1000实例
一、以下是我做的CAN节点的测试程序, 实现两个节点传送数据,程序主要分三部分SJA1000 的初始化,接收数据,发送数据./******************************************************函数原型:bit Sja_1000_Init(void)**功能:初始化SJA10000**入口参数: 无**返回值:0:初始化成功1:复位失败2: 测试sja1000失败3:设置失败4:设置验收滤波器失败5:设置波特率失败*****************************************************/unsigned char Sja_1000_Init(void){bit s;EA=0;s=BCAN_ENTER_RETMODEL();if (s==1) return 1;s=BCAN_CREATE_COMMUNATION();if (s==1) return 2;s=BCAN_SET_OUTCLK(0xc0);//Pelicanif (s==1) return 3;s=BCAN_SET_OBJECT(0xFF,0x4E,0x16,0x00,0xff,0x00,0x00,0x00);if (s==1) return 4;s=BCAN_SET_BANDRATE(CAN_BPS_1M);if (s==1) return 5;SJA_BCANAdr=REG_OCR ;*SJA_BCANAdr=0x1a;SJA_BCANAdr=REG_IER;*SJA_BCANAdr=0x03;s=BCAN_SET_CONTROL(0x08);if (s==1) return 6;EA=1;return 0;}}/*********************************************************************函数原型: bit BCAN_SET_OUTCLK( unsigned char Clock_Out) **参数说明: ** Clock_Out:存放时钟分频寄存器(CDR)的参数设置**返回值: ** 0 ;设置成功** 1 ;设置失败**说明:设置SJA1000的时钟分频。
sja1000中文版
VDD3 TX0 TX1 VSS3
引脚 2 1 28-23
3 4 5 6
7
8 9 10
11
12 13 14 15
说明
多路地址/数据总线
ALE输入信号 Intel模式 AS输入信号 Motorola模式
片选输入 低电平允许访问SJA1000
微控制器的/RD信号 Intel模式 或E使能信号 Motorola模式 微控制器的/WR信号 Intel模式 或RD/ /WR 信号 Motorola 模式 SJA1000产生的提供给微控制器的时钟输出信号 时钟信号来 源于内部振荡器且通过编程驱动 时钟控制寄存器的时钟关闭位 可禁止该引脚 接地
内部总线 位时序逻辑
12 VDD3
15 VSS3
13 TX0
14 TX1
19 RX0
20 RX1
21
VSS2
18
VDD2
错误管理逻辑
9 XTAL1
10 XTAL2
振荡器
复位
17
RST
图 1 方块图
5. 管脚排列
符号 AD7-AD0 ALE/AS
/CS /RD /E /WR
CLKOUT
VSS1 XTAL1 XTAL2
/INT /RST
中断输出 用于中断微控制器 /INT在内部中断寄存器各位都被
16
置位时低电平有效 /INT是开漏输出 且与系统中的其它/INT是
线或的 此引脚上的低电平可以把IC从睡眠模式中激活
复位输入 用于复位CAN接口 低电平有效 把/RST引脚通过
17
电容连到VSS 通过电阻连到VDD可自动上电复位 例如 C=1
XTAL1 9
SJA1000
CAN控制器SJA1000及其应用
摘要:介绍can控制器sja1000的特点、内部结构以及sja1000的寄存器结构及地址分配;can协议通信格式。
并以独立can控制器sja1000为例,结合can协议说明了一种通用型can 总线的开发与设计。
关键词:can总线 sja1000 单片机1 sja1000简介sja1000是philips公司早期can控制器pca82c200的替代品,功能更强,具有如下特点:①完全兼容pca82c200及其工作模式,即basiccan模式;②具有扩展的接收缓冲器,64字节的fifo结构;③支持can2.0b;④支持11位和29位识别码;⑤位速率可达1mbit/s;⑥支持pelican 模式及其扩展功能;⑦24mhz的时钟频率;⑧支持与不同微处理器的接口;⑨可编程的can 输出驱动配置;⑩增强了温度范围(-40℃~+125℃)。
图1 sja1000内部结构2 sja1000内部结构sja1000的内部结构如图1所示,主要由接口管理逻辑iml、信息缓冲器(含发送缓冲器txb和接收缓冲器rxfifo)、位流处理器bsp、接收过滤器asp、位时序处理逻辑btl、错误管理逻辑eml、内部振荡器及复位电路等构成。
iml接收来自cpu的命令,控制can寄存器的寻址并向控制提供中断信息及状态信息。
cpu的控制经iml把要发送的数据写入txb,txb中的数据由bsp处理后经btl输出到can bus。
btl始终监视can bus,当检测到有效的信息头“隐性电平-控制电平”的转换时启动接收过程,接收的信息首先要由位流处理器bsp处理,并由asp过滤,只有当接收的信息的识别码与asp检验相符时,接收信息才最终被写入rxb或rxfifo中。
rxfifo最多可以缓存64字节的数据,该数据可被cpu读取。
eml负责传递层中调制器的错误管制,它接收bsp的出错报告,促使bsp和iml进行错误统计。
3 sja1000的寄存器结构及地址分配表1是工作在basic can模式下的sja1000的寄存器结构及地址分配表。
CAN控制器 SJA1000中断
处于睡眠模式检测到总线活动时 WUI置位
3.7 SJA1000中断
目 录
单片机最小系统
单片机最小系统的组成
单片机开发工具
中断处理流程
在使用SJA1000的中断功能时,必须首先对SJA1000进行中断的初始化。
中断初始化 中断处理
读取中断寄存器
根据中断类型 处理中断
小结
目 录
单片机最小系统
单片机最小系统的组成
总线错误 仲裁丢失 BEIE置位 ALIE置位 总线错误中断(BEI) 仲裁丢失中断(ALI)
CAN-bus协议有完善的错误处理机制和自动重发功能,这两种中断都不需要MCU处理。 EPIE置位 进入或退出错误被动状态 错误消极中断(EPI) 错误状态和总线状态发生改变 EIE置位 错误报警中断(EI) 总线唤醒中断(WUI)
BEI ALI EPI WUI DOI EI
BEIE ALIE EPIE WUIE DOIE EIE
Bit1 Bit0
TI RI
TIE RIE
发送中断 接收中断,接收FIFO不空
3.7 SJA1000中断
概述
SJA1000中断事件
SJA1000中断处理流程
3.7 SJA1000中断
概述
SJA1000中断事件
第3章 CAN控制器驱动
第3章:CAN控制器驱动
SJA1000编程基础
SJA1000硬件连接测试 SJA1000初始化 SJA1000发送CAN帧 SJA1000接收CAN帧 SJA1000验收滤波器 SJA1000中断 虚拟CAN驱动
3.7 SJA1000中断
概述
SJA1000中断事件
SJA1000中断处理流程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CAN-bus协议有完善的错误处理机制和自动重发功能,这两种中断都不需要MCU处理。 EPIE置位 进入或退出错误被动状态 错误消极中断(EPI) 错误状态和总线状态发生改变 EIE置位 错误报警中断(EI) 总线唤醒中断(WUI)
第3章 CAN控制器驱动
第3章:CAN控制器驱动
SJA1000编程基础
SJA1000硬件连接测试 SJA1000初始化 SJA1000发送CAN帧 SJA1000接收CAN帧 SJA1000验收滤波器 SJA1000中断 虚拟CAN驱动
3.7 SJA1000中断
概述
SJA1000中断事件
SJA1000中断处理流程
SJA1000中断处理流程
接收中断
SJA1000使用64字节的FIFO来保存收到的CAN报文,当接收FIFO 中包含有效报文且RIE位置1,产生接收中断。
接收中断的处理
RIE RI
1
1 0
MCU 报文3 报文2 报文1 接收FIFO
若FIFO中还有未读取的CAN 报文,则接收中断将继续有效。
数据溢出中断
若SJA1000 接收FIFO已满,当接收到CAN报文且DOIE置位时,产 生数据溢出中断。
数据溢出中断的产生
CAN报文
中断事件发生Βιβλιοθήκη 接收FIFOMCU
如何从接收FIFO中更快的读取CAN报文? 将CAN报文的读取与处理过程分离。 CAN报文 CAN报文 处理 接收FIFO
MCU接收FIFO
发送中断
BEI ALI EPI WUI DOI EI
BEIE ALIE EPIE WUIE DOIE EIE
Bit1 Bit0
TI RI
TIE RIE
发送中断 接收中断,接收FIFO不空
3.7 SJA1000中断
概述
SJA1000中断事件
SJA1000中断处理流程
3.7 SJA1000中断
概述
SJA1000中断事件
处于睡眠模式检测到总线活动时 WUI置位
3.7 SJA1000中断
目 录
单片机最小系统
单片机最小系统的组成
单片机开发工具
中断处理流程
在使用SJA1000的中断功能时,必须首先对SJA1000进行中断的初始化。
中断初始化 中断处理
读取中断寄存器
根据中断类型 处理中断
小结
目 录
单片机最小系统
单片机最小系统的组成
寄存器描述
IR
(中断寄存器) (寄存器地址3)
IER
(中断使能寄存器) (寄存器地址4)
中断事件
检测到总线错误 发送时丢失总线仲裁 当CAN控制器到达错误消极状态或从 错误消极状态又进入错误活动状态 当CAN控制器在睡眠模式中检测到总 线的活动 数据溢出 错误报警,错误状态位和总线状态位 的改变
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2
SJA1000中断管理
SJA1000共有8种中断事件,使用了2个寄存器来管理中断:
中断寄存器(IR) 中断寄存器用来指示产生的中断事件,当中断寄存器中任意位置1时INT 引脚变为低电平(中断输出)。
中断使能寄存器(IER)
中断使能寄存器设置产生中断事件时是否置位对应的中断寄存器位。
产生中断的条件
1、中断事件发生 2、中断被使能
当SJA1000发送缓冲区由锁定变为释放且TIE置位时,产生发送中断。
发送缓冲区状态
释放 锁定 中断事件产生
发送完成 发送CAN报文中 如何判断一个报文发送成功? SR.3 CAN总线 发送缓冲区 发送完毕状态
SR.3置位表示上一报文成功发送
与状态相关的中断
与状态相关的中断在CAN控制器发生错误或控制器状态发生改变时产生。
单片机开发工具