P87C591CAN控制器PeliCAN模块
传感与控制-P87C591内嵌CAN控制器的应用设计

P87C591内嵌CAN控制器的应用设计摘要:独立的CAN控制器芯片需要外接一个微处理器,接受外部CPU的控制才能运行。
如果微处理器内部带有CAN控制器,无疑会大大简化应用系统的硬件设计,系统的可靠性也有很大提高,同时还可以大幅度降低生成成本。
Philips的新产品P87C591内部集成了CAN控制器。
本文主要介绍如何利用P87C591进行CAN 节点的设计和应用。
关键词:P87C591 CAN 节点 PeliCAN 应用设计引言CAN属于总线式串行通信网络。
由于其独特的设计,与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。
CAN总线早已成为国际标准,其应用范围也从最初的汽车电控逐步扩展到工业控制的各个领域,成为最有前途的现场总线之一。
CAN总线上的节点一般采用单片机外加CAN控制器的设计方法,不利于产品的集成和成本的降低。
现在Philips公司推出的P87C591集成了CAN控制器SJA1000。
本文将详细介绍基于P87C591的CAN智能节点软硬件设计及其应用。
1 P87C591简介P87C591有44个引脚,是一个单片8位高性能微控制器,具有片内CAN控制器。
它从MCS-51微控制器家族派生而来,采用了强大的80C51指令集并包括了Philips半导体SJA1000 CAN控制器的PeliCAN功能。
全静态内核提供了扩展的节点方式。
振荡器可停止和恢复而不丢失数据。
改进的1:1内部时钟分频器,在12MHz外部时钟速率是实现500ns指令周期。
中央处理器CPU使用的操作数来自3个存储空间:16KB内部程序存储器,可扩展到64KB;512B内部数据存储器;最大64KB外部数据存储器。
图1为P87C591的功能框图。
有关芯片的引脚定义和更多的扩展功能可参阅P87C591芯片资料,在此不多讲。
芯片引脚P3.0和P3.1作为复用脚使用,除了具有普通C1单片机功能外,还可分别复用为CAN的RxD和TxD输入输出脚。
中断在P87C591通信控制中的研究

表示未成功 发送 , 8C 9 将对此次发送进行 发送请 P7 51 求位置 l 并采用重新 发送等其它特殊处 理。
丢失 中断 、 错误消极 中断 、 唤醒 中断、 数据溢 出中断、 错误报警 中断 、发送 中断、接受 中断 ,8个不 同的中 断,这些 中断可用于 在一 定 C N A 控制器状态 ,通过 C U立 即进行初始化 。 P 下面分别从发送和接收两个方 面对 P x 9 通信过 程中发送 中断 、 8C5 1 接受 中断做具体
P l A 寄存 器和 R eC N i AM 区进行访 问。如 图 l 示 。 所
表 1 AN 控 制 器 比较 C
3CN A 控制器 比较
P7 5 1 8 C 9 内部 C N控制器和 S A10 A A J 0 0C N控制
器 比较 。见表 l 。
CN A控制器名称
验 收滤波 器组
SA00 J10
1个支 持双 或单 滤波 器的验 收滤波 器组
Px 51 8C9 内部 CN A
4 个支 持双 或单滤波 器的验 收滤波器组 所有滤波器都可在运行 中改变
t l / AL(2 R . … … . 1 s =I XT c f 3 B P5 + . 1 +
C AN 位 定 时 计 算 t l / AL(2 R . … … 一 1 s =2f c XT 3 B P5 + +)
写
- 一
中断使 能
状态
读
图 1 8 C 9 通 信 结 构 7 51 P
P7 5 1 8C 9 还增加 了“ 在运行 中改变( hn e nh C ag e ot Fy l)” 的功 能 ,此功 能克服 了改变 滤波器 的定义 必
基于P87C591的CAN总线生产油井温度采集系统设计

应 用 研 究
;. 技应 术用 l~ 一
啦
基于 P 7 5 的 C N 8C 9 1 A 总线生产油井温度采集系统设计
张韬 胡 泽 肖宇恒 张 莹 孙 彪
( 南石 油 大学 电气信 息 学 院 四川成 都 600) 西 150
摘要 : 介绍 一种 以P ip公 司 ̄P 7 9 单 片机作 为 温度采 集 系统的控 制核 心及 c N总线控 制 器 , 8C 54 C N总线收发 器的c N总 his l 8C51 A v 2 2 0 ̄ X A A 线温度采 集系统。 关键词 : 温度 采 集 P 7 9 C N总线 8 C5 1 A 中图 分 类号 :P 7 . T 2 42 文献标识 码 : A 文章编 号 :0 79 1(0 20 —0 70 l0 -4 62 l)20 5 -2
光耦6 3 后与8 C 5相 连 , N17 2 20 这样就 很好的实现 了总线上各 C AN 节点间的 电气隔离 , 不过 应该特 别说 明的一点是 , 光耦 部分电路所 采用 的两个 电源VC 和VD 必须完全 隔离 , C D 否则采用光耦 也就失 去 了意义 。 电源的完全 隔离 可采用小功率 电源 隔离模块 或带 多5 V
石油天然气 已经成为国 民生产 以及 国民 日常活动 中最 主要 的 能源之一 , 了油井生产工作能够安全、 为 高效地进行, 就需要很好地 掌握生产油井的工作状态 。 口温度就是油井生产过程 中必须检测 井 的重要参数 , 但是生产油井远离 主控 室 , 如何将现场采集 的数据 和 信息快速 、 准确地上传到主控 室, 数据传输过程 中的实时性和可靠 性成为影响整个性 能的关键 。 搭建现场总线控制 系统能很好地 解决 这一 问题 。 本文介绍基于C 总线生产油井温度采集系统 的智 能节点设 AN 计 , 系 统 以P i p 公 司 的 P 7 9 单 片 机 作 为 控 制 核 心 。 该 hl s i 8 C5 l 由于 P7 51 8 C 9 具有片上 自带的C AN控制器并且为C AN的应用提供 了许 多 专 用 的 硬 件 功 能 , 此 又将 它 作 为 系统 的 C N总 线 控 制 器 , 大 因 A 大 节省 了主控系统的资源。 AN总线的收发器采用8 C 5 , C 2 2 0 温度传感 器 采 用 D 1B 0 P 7 5 1 片 机 对 各 节 点 数 据 采 集 并 且作 为 C N S 8 2 。 8 C 9单 A 控制器把 数据通过 C AN总 线 通 信 上 传 到 主控 室 工 控 机 , 现 实 时 实
带CAN控制器的单片机

带CAN控制器的单片机PHILIPS P87C591 CAN2.0B 8bit -40~85℃概述P87C591是一个单片8位高性能微控制器,具有片内CAN控制器,从80C51微控制器家族派生而来。
它采用了强大的80C51指令集并成功地包含了PHILIPS半导体SJA1000 CAN控制器强大的PeliCAN功能。
全静态内核提供了扩展的节电方式。
振荡器可停止和恢复而不会丢失数据。
改进的1:1内部时钟预分频器在12MHz外部时钟速率时实现500ns指令周期。
微控制器以先进的CMOS工艺制造,并设计用于汽车和通用的工业应用。
除了80C51的标准特性之外,器件还为这些应用提供许多专用的硬件功能。
P87C591组合了P87C554(微控制器)和SJA1000(独立的CAN控制器)的功能,并具有下面的增强特性:增强的CAN接收中断扩展的验收滤波器验收滤波器可"在运行中改变"特性16K字节内部程序存储器,512字节片内数据RAM;3个16位定时/计数器:T0、T1和T2(捕获&比较),1个片内看门狗定时器;带6路模拟输入的10位ADC,可选择快速8位ADC;2个8位分辨率的脉宽调制输出(PWM);具有32个可编程I/O口(准双向、推挽、高阻和开漏);带硬件I2C总线接口;全双工增强型UART,带有可编程波特率发生器双DPTR;可禁止ALE实现低EMI;低电平复位信号;增强型PeliCAN内核;增强的温度范围:-40~+85℃;提供PLCC44、QFP44封装。
功耗:工作 225mw ±5% SUPPLY待机 125mw Power-down掉电 0.5 mw ±5%Atmel AT90CAN128/64/32 CAN2.0A/B 8bit -40℃to+85℃AT90CAN128/64/32 是一种基于AVR增强型RISC结构的低功耗CMOS 8-位单片机。
通过执行以一个单时钟周期的高效指令,AT90CAN32每MHz能达1MIPS,这就可让系统设计人员将功率损耗与处理速度优化。
CAN总线心得总结(不可多得)

CAN总线学习心得:zlg关于can帖子汇总SJA1000的常用标准波特率设置,为什么基本上都是单次采样?即使是低速的时候也是这样的,既然TSEG1的设置周期都很大,比如都大于10了,为什么不让他采样三次呢?答:是不好理解,但那是CiA推荐的值。
用51系列芯片和两个SJA1000接口还要外扩一个RAM,请问51的ALE能否同时与三个芯片的ALE管脚相连(地址不同)? 有哪位高手做过双SJA1000冗余的请指教答:能同时连接。
请问CAN总线在想传输1000m的情况下,最快的速度能到多少呢?答:50kbps = 1300m。
如果一个网络中只有2个节点,其中一个处于监听模式,另一个节点发送报文会使处于监听模式的节点进入中断吗?答:能进入接收中断,你自己的试验也可以证明。
想组建一个简单的CAN网络,已经有两个节点,我想问CAN总线如何组建,终端电阻安装在哪里?小弟还没有入门,大虾们指点一下。
答1:直接将节点CANH和CANL连到总线上,终端电阻接在总线两端,大约120欧。
答2:推荐北航出版《现场总线CAN原理与应用技术》,研读一下。
请问各位老师:我是一名can总线的新手,我正在做can总线的开发,控制器用sja1000t(我自己两个控制板互通),但我在发送数据后将出现总线关闭,我看到发送错误计数器在不断增加,直到0xff,最后恢复到0x7f,谢谢各位老师帮我解答这个问题。
或者对我给与启发答1;首先调通单个节点。
答2:这是单节点发送没有成功(或者由于网络中其他节点没有收到帧并在响应场响应);建议参考网站CAN应用方案。
我想请教各位can远程贞有何作用?如何应用?在什么情况下才需要用到远程贞?谢谢了!答:远程幀的用与不用完全取决你自己的协议,can有远程幀的功能,是可用可不用的!用网站提供的计算波特率的工具算出的数,12k以上的都正确,无论是自接收还是两个节点通讯都没有任何问题。
但是12k以下的数据一个都不能用,两个节点通讯没有成功的,自接收有10k的几个数据成功。
CAN收发器—TJA1040与TJA1050区别

CAN 收发器 TJA1040与TJA1050对比报告1.简介CAN总线,它是一种多主方式的串行通讯总线,基本设计规范要求有较高的位速率,高抗干扰性,而且能够检测出产生的任何错误。
信号传输距离达到10Km时,仍然可提供高达5Kbps的数据传输速率。
由于CAN串行通讯总线具有这些特性,它很自然的在汽车、制造业以及航空工业中受到广泛应用。
与CAN协议相关的芯片主要有两类,一类是:CAN控制器芯片,一类是:CAN收发器芯片,如TJA1040,TJA1050。
CAN控制器用于实现CAN总线的协议底层以及数据链路层,用于生成CAN帧并以二进制码流的方式发送,在此过程中进行位填充、添加CRC校验、应答检测等操作;将接收到的二进制码流进行解析并接收,在此过程中进行收发比对、去位填充、执行CRC校验等操作。
此外还需要进行冲突判断、错误处理等诸多任务。
图1 CAN收发器在CAN总线应用系统中的位置CAN收发器是CAN协议控制器和物理总线(双绞线)之间的接口,用于将二进制码流转换为差分信号发送,将差分信号转换为二进制码流接收,主要实现逻辑电平与“显性”,“隐性”的转换。
它可以为总线提供差动的发送功能,为控制器提供差动的接收功能,是CAN-Bus 网络中的必须设备。
常见的CAN控制器芯片与CAN收发器芯片型号参见第5部分。
目前还没有看到把CAN控制器和CAN收发器集成在一起的CAN协议芯片,目前主要是独立的CAN控制器,独立的CAN接收器,集成CAN控制器的微处理器三类。
因为CAN收发器和CAN控制器之间有时需要添加隔离单元。
总结:CAN通信协议主要有CAN控制器完成,CAN控制器主要有实现CAN协议的电路和实现与微处理器接口的电路组成。
CAN收发器在CAN总线应用系统中的位置如下图所示。
图2 CAN收发器的典型应用电路TJA1050 的设计采用了先进的绝缘硅SOI技术进行处理,以及最新的EMC技术,所以TJA1050具有优良的EMC性能。
P8xC591带CAN控制器的8位单片机
• CAN2.0B 控制器 支持标准 11 位和扩展 29 位标识符 • 8MHz 时钟时可达 1M 位/秒 CAN 总线速度 • 64 字节接收 FIFO 缓冲区 能捕获来自相同数据源的顺序
数据帧 要求更高传输层协议 如 DeviceNet CANopen 和 OSEK • 13 字节发送缓冲区 • 增强型 PeliCAN 内核 来自 SJA1000 的 CAN2.0B
UART I2C 总线 CAN 总线 6 路输入 10 位 ADC 2 路 8 位脉宽调制输出 1 个看门狗定时器 T3 片内振荡时 钟电路 对于需要外部扩展存储容量的系统 P8xC591 可外接标准 TTL 兼容存储器和逻辑器件
P8xC591 将 P87C554 和 SJA1000 单独 CAN 控制器 结合在一起 并在以下方面加以增强
• 保密位 - MASK 型 2 位
- OTP 型 3 位
• 加密数组 64 字节
• ADC 可激活空闲模式
• 双 DPTR 寄存器
• 低 EMI 禁止 ALE
• 软件复位 位 AUXR1.5
• 低电平复位
• 上电复位检测
• 封装形式 PLCC44 PQFP44
• 温度范围 工业级 -40 85
2 8xC591 的 CAN 有关特性
P8xC591 单片机分类如下 无 ROM 型 P80C591 MASK 型 P83C591 OTP 型 P87C591
P8xC591 片内有 16K 程序存储器 除 P80C591 外 512 个字节 RAM 片外 ROM 和 RAM 都可扩展到 64K P8xC591 有 4 个 8 位 I/O 口 3 个 16 位定时/计数器 15 个中断源 4 个中断优先级的可嵌套中断结构 1 个全双工串行接口
周立功CAN总线设计详解通讯
-4– 文档编号:20030810_1
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax:38730925
CAN-bus 介绍
概述
CAN-bus(Controller Area Network)即控制器局域网,是国际上应用最广泛的现场总线之一。 起先,CAN-bus 被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息, 形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入 CAN 控制装置。
高层协议
CAN 高层协议························································································· 8 CANopen 协议 ························································································ 9 DeviceNET 协议 ···················································································· 10 ZLGCAN 系列产品介绍 ············································································ 12
我们立志成为国内第一流的 CAN-bus 开发、服务、应用的团队。关于 CAN-bus 的详细应用,请浏览技术支持 专业主页:
或进入 CAN-bus 技术讨论园地:
http:///club/bbs/bbsView.asp 我们的服务邮箱:
管道液体流速检测
管道液体流速的检测系统的设计概述:在管道泄漏检测以及其他许多石油工业领域中,管道中液体流速的测定是十分重要的。
而对于流体中含有固体颗粒和气泡的多相流,将优先采用超声多普勒流量法测量流体流量。
其测量原理即为超声波的多普勒效应,由入射波和反射波的频差来进行流速的测定。
入射超声波的频率是固定的.这就需要对反射回来的声波频率进行精确的测量。
反射声波淹没在大量的噪声之中,为此,需要引入一种非常好的测频方法。
针对传统测频方法的一些局限性,本文引人了基于混沌振子的测频方法,对反射波频率进行有效的提取。
然后通过控制器局域网(CAN)对采集的信号进行处理,形成电子控制网络,组成管道液体流速的检测系统。
一、控制原理:1.1多普勒法测量原理多普勒法测量原理,是依据声波中的多普勒效应,检测其多普勒频率差。
超声波发生器为一固定声源,随流体以同速度运动的固体颗粒与声源有相对运动,该固体颗粒可把入射的超声波反射回接收器。
入射声波与反射声波之间的频率差就是由于流体中固体颗粒运动而产生的声波多普勒频移。
由于这个频率差正比于流体流速,所以通过测量频率差就可以求得流速,进而可以得到流体流量,如图3。
图3多普勒超声波流量计测流原理图c+cosθ当随流体以速度v运动的颗粒流向声波发生器时,颗粒接收到的声波频率f1为:因此,声波接收器和发生器间的多普勒频移Δf为:以上各式中:θ为声波方向与流体流速v之间的夹角,f0为声源的初始声波频率,c为声源在介质中的传播速度。
若c>>vcosθ则式(11)、(12)是按单个颗粒考虑时,测得的流体流速和流量。
但对于实际含有大量粒群的水流,则应对所有频移信号进行统计处理。
超声波多普勒流量计的换能器通常采用收发一体结构,见图4。
换能器接收到的反射信号只能是发生器和接收器的两个指向性波束重叠区域内颗粒的反射波,这个重叠区域称为多普勒信号的信息窗。
换能器所收到的信号就是由信息窗中所有流动悬浮颗粒的反射波的叠加,即信息窗内多普勒频移为反射波叠加的平均值。
CAN总线系列讲座第三讲CAN控制器和收发器
CAN总线系列讲座第三讲——CAN控制器和收发器一 CAN控制器官方定义:CAN控制器用于将欲收发的信息(报文),转换为符合CAN规范的CAN帧,通过CAN收发器,在CAN-bus上交换信息。
举个便于理解的例子:就像您发快递一样,要根据快递公司提供的快递单填写具体的信息(发件人和收件人的地址、联系电话等),快递公司将之标准化(统一的快递单格式,并对每一件快递进行编号),随后才能传递信息(您快递的具体东西,如文件、衣服、手机等)。
(1)CAN控制器分类CAN控制器芯片分为两类:一类是独立的控制器芯片,如SJA1000;另一类是和微控制器做在一起,如NXP半导体公司的Cortex-M0内核LPC11Cxx系列微控制器、LPC2000系列32位ARM微控制器。
CAN控制器的大致分类及相应的产品可参见表1。
表1 CAN控制器分类及相应产品型号(2)CAN控制器的工作原理为了便于读者理解CAN控制器的工作原理,下面给出了一个SJA1000 CAN控制器的经过简化的结构框图如图1所示。
图1 CAN控制器结构示意接口管理逻辑接口管理逻辑如图1所示。
接口管理逻辑用于连接外部主控制器,解释来自主控制器的命令,控制CAN控制器寄存器的寻址,并向主控制器提供中断信息和状态信息。
CAN核心模块CAN核心模块如图1所示。
收到一个报文时,CAN核心模块根据CAN规范将串行位流转换成用于接收的并行数据,发送一个报文时则相反。
发送缓冲器发送缓冲器如图1所示。
发送缓冲器用于存储一个完整的报文,当CAN控制器发送初始化时,接口管理逻辑会使CAN核心模块从发送缓冲器读CAN报文。
验收滤波器验收滤波器如图1所示,验收滤波器可以根据用户的编程设置,过滤掉无须接收的报文。
接收FIFO接收FIFO如图1所示。
接收FIFO是验收滤波器和主控制器之间的接口,用于存储从CAN 总线上接收的所有报文。
工作模式CAN控制器可以有两种工作模式(BasicCAN和PeliCAN)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
P87C591的CAN控制器PeliCAN模块 1 概述 PeliCAN模式是P87C591的CAN控制器的唯一模式可以使P87C591能应用于很多CAN总线的领域另外如支持系统诊断而且这个模式里也加入系统自身测试的功能可以将CAN通讯的所有先进的特性发挥得淋漓尽致版本号V1.0CANMOD需要注意的是 PeliCAN寄存器可以通过两种不同的方式访问支持软件轮询或控制主要CAN功能的最重要的寄存器可以象单独的SFRs一样直接访问为了达到最高的数据吞吐量 2.1 CAN特殊功能寄存器 表1 CAN特殊功能寄存器 SFR 访问 PELICAN REG. 位7 位6 位5 位4 位3 位2 位1 位0 SFR 地址 CANADR 读/写 2.1.4 CANSTA 根据访问方向的不同对CANSTA的读操作是对PeliCAN的状态寄存器地址4对CANCON的读操作是对PeliCAN的中断寄存器地址1由于PeliCAN可在不同模式中操作(操作/复位从CAN地址128开始的所有内部FIFO RAM都映象到CPU接口 状态 中断 总线时序0 总线时序1 9 Rx信息计数器 10 Rx缓冲区起始地址 11 仲裁丢失捕获 12 错误代码捕获 13 错误报警界限 错误报警界限 错误报警界限 错误报警界限 14 Rx错误计数器 Tx错误计数器 Tx错误计数器 16-28 保留(00) 29 ACF模式 35 验收代码3 验收代码3 验收代码3 验收代码3 36 验收屏蔽0 验收屏蔽0 验收屏蔽0 验收屏蔽0 37 验收屏蔽1 验收屏蔽1 验收屏蔽1 验收屏蔽1 38 验收屏蔽2 验收屏蔽2 验收屏蔽2 验收屏蔽2 39 K 1 验收屏蔽3 验收屏蔽3 验收屏蔽3 验收屏蔽3 40 验收代码0 验收代码0 验收代码0 验收代码0 41 验收代码1 验收代码1 验收代码1 验收代码1 42 验收代码2 验收代码2 验收代码2 验收代码2 43 验收代码3 验收代码3 验收代码3 验收代码3 44 验收屏蔽0 验收屏蔽0 验收屏蔽0 验收屏蔽0 45 验收屏蔽1 验收屏蔽1 验收屏蔽1 验收屏蔽1 46 验收屏蔽2 验收屏蔽2 验收屏蔽2 验收屏蔽2 47 B A N K 2 验收屏蔽3 验收屏蔽3 验收屏蔽3 验收屏蔽3 48 验收代码0 验收代码0 验收代码0 验收代码0 49 验收代码1 验收代码1 验收代码1 验收代码1 50 验收代码2 验收代码2 验收代码2 验收代码2 51 验收代码3 验收代码3 验收代码3 验收代码3 52 验收屏蔽0 验收屏蔽0 验收屏蔽0 验收屏蔽0 53 验收屏蔽1 验收屏蔽1 验收屏蔽1 验收屏蔽1 54 验收屏蔽2 验收屏蔽2 验收屏蔽2 验收屏蔽2 55 B A N K 3 验收屏蔽3 验收屏蔽3 验收屏蔽3 验收屏蔽3 56 验收代码0 验收代码0 验收代码0 验收代码0 57 验收代码1 验收代码1 验收代码1 验收代码1 58 验收代码2 验收代码2 验收代码2 验收代码2 59 验收代码3 验收代码3 验收代码3 验收代码3 60 验收屏蔽0 验收屏蔽0 验收屏蔽0 验收屏蔽0 61 验收屏蔽1 验收屏蔽1 验收屏蔽1 验收屏蔽1 62 验收屏蔽2 验收屏蔽2 验收屏蔽2 验收屏蔽2 63 B A N K 4 验收屏蔽3 验收屏蔽3 验收屏蔽3 验收屏蔽3 64-95 保留(00) (SFF) (EFF) (SFF) (EFF) (SFF) (EFF) 96 Rx帧信息 Rx帧信息 Rx帧信息 Rx帧信息 Rx帧信息 Rx帧信息 97 Rx识别码1 Rx识别码 Rx识别码1 Rx识别码 Rx识别码1 Rx识别码 98 Rx识别码2 Rx识别码 Rx识别码2 Rx识别码 Rx识别码2 Rx识别码 99 Rx数据1 Rx识别码 Rx数据1 Rx识别码 Rx数据1 Rx识别码 100 Rx数据2 Rx识别码 Rx数据2 Rx识别码 Rx数据2 Rx识别码 101 Rx数据3 Rx数据1 Rx数据3 Rx数据1 Rx数据3 Rx数据1 102 Rx数据4 Rx数据2 Rx数据4 Rx数据2 Rx数据4 Rx数据2 103 Rx数据5 Rx数据3 Rx数据5 Rx数据3 Rx数据5 Rx数据3 104 Rx数据6 Rx数据4 Rx数据6 Rx数据4 Rx数据6 Rx数据4 105 Rx数据7 Rx数据5 Rx数据7 Rx数据5 Rx数据7 Rx数据5 106 Rx数据8 Rx数据6 Rx数据8 Rx数据6 Rx数据8 Rx数据6 107 (FIFO RAM)(1) Rx数据7 (FIFO RAM)(1) Rx数据7 (FIFO RAM)(1) Rx数据7 108 (FIFO RAM)(1) Rx数据8 (FIFO RAM)(1) Rx数据8 (FIFO RAM)(1) Rx数据8 109-111 保留(00) (SFF) (EFF) (SFF) (EFF) (SFF) (EFF) (SFF) (EFF) 112 Rx帧信息 Rx帧信息 Rx帧信息 Rx帧信息 Rx帧信息 Rx帧信息 Rx帧信息 Rx帧信息 113 Rx识别码1 Rx识别码 Rx识别码1 Rx识别码 Rx识别码1 Rx识别码 Rx识别码1 Rx识别码 114 Rx识别码2 Rx识别码 Rx识别码2 Rx识别码 Rx识别码2 Rx识别码 Rx识别码2 Rx识别码 115 Rx数据1 Rx识别码 Rx数据1 Rx识别码 Rx数据1 Rx识别码 Rx数据1 Rx识别码 116 Rx数据2 Rx识别码 Rx数据2 Rx识别码 Rx数据2 Rx识别码 Rx数据2 Rx识别码 117 Rx数据3 Rx数据1 Rx数据3 Rx数据1 Rx数据3 Rx数据1 Rx数据3 Rx数据1 118 Rx数据4 Rx数据2 Rx数据4 Rx数据2 Rx数据4 Rx数据2 Rx数据4 Rx数据2 119 Rx数据5 Rx数据3 Rx数据5 Rx数据3 Rx数据5 Rx数据3 Rx数据5 Rx数据3 120 Rx数据6 Rx数据4 Rx数据6 Rx数据4 Rx数据6 Rx数据4 Rx数据6 Rx数据4 121 Rx数据7 Rx数据5 Rx数据7 Rx数据5 Rx数据7 Rx数据5 Rx数据7 Rx数据5 122 Rx数据8 Rx数据6 Rx数据8 Rx数据6 Rx数据8 Rx数据6 Rx数据8 Rx数据6 123 (FIFO RAM)(1) Rx数据7 (FIFO RAM)(1) Rx数据7 (FIFO RAM)(1) Rx数据7 (FIFO RAM)(1) Rx数据7 124 (FIFO RAM)(1) Rx数据8 (FIFO RAM)(1) Rx数据8 (FIFO RAM)(1) Rx数据8 (FIFO RAM)(1) Rx数据8 125-127 通用RAM 通用RAM 通用RAM 通用RAM 128 内部RAM地址63(FIFO) 内部RAM地址63(FIFO) 内部RAM地址0(FIFO) 上电后的内容为随机值并包含下一个信息的开始部分旧的信息可以出现在这里2.3 CAN寄存器 2.3.1 复位值 模式寄存器中RM表3 复位模式配置 地址 寄存器 位 符号 名称 由硬件复位 通过软件或由于总线关闭设置MOD.0 0 模式 MOD.7 TM 测试模式 0(禁止) 0(禁止) MOD.6 - 0(保留) 0(保留) MOD.2 STM 自检测模式 0(正常) X(无变化) MOD.1 LOM 只听模式 0(正常) X(无变化) MOD.0 RM 复位模式 1(当前) 1(当前) 1 命令 CMR.7-5 0(保留) 0(保留) CMR.4 SRR 自接收请求 0(空缺) 0(空缺) CMR.3 CDO 清除数据溢出 0(无动作) 0(无动作) CMR.2 RRB 释放接收缓冲区 0(无动作) 0(无动作) CMR.1 AT 中止发送 0(空缺) 0(空缺) CMR.0 TR 发送请求 0(空缺) 0(空缺) 2 状态 SR.7 BS 总线状态 0(总线开启) 0(复位) SR.6 ES 出错状态 0(ok) 0(复位) SR.5 TS 发送状态 1(等待空闲) 0(复位) SR.4 RS 接收状态 1(等待空闲) 0(复位) SR.3 TCS 发送完毕状态 1(完毕) 0(复位) SR.2 TBS 发送缓冲器状态 1(释放) X(无变化)(1) SR.1 DOS 数据溢出状态 0(空缺) 0(复位) SR.0 RBS 接收缓冲器状态 0(空) 0(复位) 3 中断 IR.7 BEI 总线错误中断 0(复位) X(无变化) (1) IR.6 ALI 仲裁丢失中断 0(复位) 0(复位) IR.5 EPI 错误被动中断 0(复位) 0(复位) IR.4 WUI 唤醒中断 0(复位) 0(复位) IR.3 DOI 数据溢出中断 0(复位) 0(复位) IR.2 EI 错误报警中断 0(复位) X(无变化) IR.1 TI 发送中断 0(复位) 0(复位) IR.0 RI 接收中断 0(复位) 0(复位) 4 中断使能 IER.7 BEIE 总线错误中断使能 X(无变化) X(无变化) IER.6 ALIE 仲裁丢失中断使能 X(无变化) X(无变化) IER.5 EPIE 错误被动中断使能 X(无变化) X(无变化) IER.4 WUIE 唤醒中断使能 X(无变化) X(无变化) IER.3 DOIE 数据溢出中断使能 X(无变化) X(无变化) IER.2 EIE 错误报警中断使能 X(无变化) X(无变化) IER.1 TIE 发送中断使能 X(无变化) X(无变化) IER.0 RIE 接收中断使能 X(无变化) X(无变化) 5 Rx中断级 BTR1.2 TSEG1.2 时间段1.2 X(无变化) X(无变化) BTR1.1 TSEG1.1 时间段1.1 X(无变化) X(无变化) BTR1.0 TSEG1.0 时间段1.0 X(无变化) X(无变化) 9 Rx信息计数器 RBSA Rx缓冲区起始地址 00000000b X(无变化) 11 总裁丢失捕获 ECC 错误代码捕获 0 X(无变化) 13 错误报警界限 RXERR 接收错误计数器 0(复位) X(无变化) (2)15 Tx错误计数器 ACR0 ̄ACR3 验收代码寄存器 X(无变化) X(无变化) 36-39 Bank1 AMR0 ̄3 ACR0 ̄ACR3 验收代码寄存器 X(无变化) X(无变化) 44-47 Bank2 AMR0 ̄3 ACR0 ̄ACR3 验收代码寄存器 X(无变化) X(无变化) 52-55 Bank3 AMR0 ̄3 ACR0 ̄ACR3 验收代码寄存器 X(无变化) X(无变化) 60-63 Bank4 AMR0 ̄3 96-108 Rx缓冲区 TXB 发送缓冲区 X(无变化) X(无变化) 125-127 通用RAM 通用RAM X(无变化) X(无变化) 注2.如果是因为总线关闭而进入复位模式对CAN定义的总线关闭恢复时间 3.RX FIFO的内部读/写指针复位为初始值部分旧信息将只产生接收中断即使接收缓冲器是空的直到它被下一条发送或接收的信息取代RX FIFO的指针复位到RAM的物理地址软件设置MOD.0或由于总线的关闭RBSA寄存器MOD 表4 模式寄存器TXDC脚将映射RXDC脚检测到的位CAN控制器进入睡眠模式 MOD.4 SM 睡眠模式(2) 0(低有效) MOD.3 CAN控制器将执行一个成功的发送CAN不会对CAN总线产生应答错误计数器停止在当前值MOD.0 RM 复位模式(4) 0(正常) 复位模式位的负跳变使CAN控制器返回操作模式 1.如果之前进入了复位模式MOD.5 2.如果睡眠模式位置为并且没有总线的活动和等待处理的中断SM的置位加上之前两种例外情况至少其中之一有效时将会导致产生唤醒中断唤醒醒的直到检测到11个连续的隐藏位清除复位模式后 3.该操作模式使CAN控制器进入错误消极状态以软件驱动的位速检测和所有其它功能都能象在正常工作模式中一样使用总线关闭CAN控制器会等待11个隐藏位如果上一次复位是CAN控制器在重新进入总线开启之前初始化复位CMR表5 命令寄存器CAN地址1 位 符号 名称 值 功能 CMR.7-5 如果验收滤波器设置为相应的识别码2.该命令位用于清除由数据溢出状态位通知的数据溢出状况3.在读取接收缓冲区内容之后这样会使接收缓冲器内的另一条信息立即有效接收中断位复位接收中断也复位在产生新的接收中断和更新Rx缓冲区起始地址之前至少经过2个内部时钟周期例如要想知道原始信息是否成功发送5.如果前一条指令中发送请求位或自接收请求位置不能通过复位该位来取消6.同时置位命令位CMR.0和CMR.1会产生一次信息发送单次发送CMR.1和CMR.4会立即产生一个信息发送内部发送请求就被自动清零状态寄存器对微控制器来说是一个只读存储器SR注1 0(总线开启) CAN控制器参与总线活动 1(错误) 至少一个错误计数器达到或超过了由错误报警限制寄存器(EWLR)定义的CPU报警限制 SR.6 ES 错误状态注3 0(空闲) 1(接收) CAN控制器正在接收信息 SR.4 RS 接收状态注4 0(未完成) 前一次请求的发送未完成 1(释放) CPU可以向发送缓冲器中写入信息 SR.2 TBS 发送缓冲器状态锁定注6 0(空缺) 自从上一次执行清除数据溢出命令以来没有数据溢出发生 1(满) RXFIFO中有一个或多个完整的可用信息 SR.0 RBS 接收缓冲器状态1.当发送错误计数器超过限制总线关闭并产生一个错误报警和总线错误中断该模式将会一直保持到CPU将复位模式位清零CAN控制器将通过发送错误计数器的递减计数以等待协议规定的最少时间总线开启如果中断使能在接收和发送期间检测到错误会影响错误计数器EWLR3.如果接收状态位和发送状态位都是0 4.一旦发送请求位或自接收请求位被置1未完成锁定CAN控制器需要在RXFIFO中有足够的空间来存储信息描述符和每一个接收的数据字节信息就会丢失如果信息没有被成功接收就不会指示数据溢出此位被清零CAN中断将反映到CPU 除了接收中断外的所有位都被复位表7 中断寄存器CAN地址3 位 符号 名称 值 功能 1(置位) 当CAN控制器检测到总线错误且中断使能寄存器中的BEIE置位时该寄存器对CPU来说是可读/写存储器IER IER.7 BEIE 总线错误中断使能 0(禁止) 1(使能) 如果CAN控制器已丢失了仲裁,则请求相应的中断IER.5 EPIE 错误消极中断使能 0(禁止) 1(使能) 如果睡眠模式中的CAN控制器被唤醒, 则请求相应的中断IER.3 DOIE 数据溢出中断使能 0(禁止) 1(使能) 如果错误或总线状态改变(见状态寄存器),CAN控制器请求相应的中断任何总线控制器都必须在当前发送的任意相关信号边沿重新同步 tSJW SJW.0 BTR1寄存器可被访问 表10 总线定时寄存器1CAN地址7SAM位 值 功能 1 总线被采样3次 A和B类SAE C类TSEG1 TSEG1和TSEG2决定每个位周期的时钟数目和采样点的位置tscl tTSEG1 4 TSEG1.1 tTSEG2 2 1图1 位周期通常结构 2.3.10 RX信息计数器CAN地址9表12 RX信息计数器CAN地址9RBSA反映了当前有效的内部RAM地址内部RAM区从CAN地址32起始仅在复位模式中写例十进制可见的信息保存在以地址24起始的内部RAM等效于RAM地址0CAN地址152上电复位时设置复位模式或发送RBSA 7 6 5 4 3 2 1 0 RBSA.7 RBSA.6 RBSA.5 RBSA.4 RBSA.3 RBSA.2 RBSA.1 RBSA.0 2.3.12 仲裁丢失捕获寄存器保留位的读值为0ALC 7 6 5 4 3 2 1 0 ALC保留 ALC.4 BITNO4 第4位 ALC.3 BITNO3 第3位 ALC.2 BITNO2 第2位 ALC.1 BITNO1 第1位 ALC.0 BITNO0 第0位 二进制编码帧仲裁丢失位编号 00 11RTR位用于标准帧信息仅扩展帧仅扩展帧仲裁丢失时如果中断使能寄存器中的内容都固定不变捕获机制被再次激活中断寄存器中相应的中断标志位被清除新的仲裁丢失中断才有效图2 仲裁丢失位说明 2.3.13 错误代码捕获表16 错误代码捕获CAN地址12CAN地址12 位 符号 名称 值 功能 7 ERRC1 错误代码1 6 ERRC0 错误代码0 ERRC1 0 0 1 1 ERRC0 0 1 0 1 位错误 格式错误 填充错误 其它错误 1TX00011 帧起始 00010 ID28ID18 0 SEG0 段0 00100 SRTR位 00101 IDE位 00111 ID17ID5 01110 ID4中断允许时读出后中断寄存器中相应的中断标志位被清除2.3.14 错误报警界限寄存器硬件复位时EWLR只有之前进入复位模式才有可能发生错误状态的改变RXERR对CPU来说是只读的如果发生总线关闭总线关闭期间RXERR 7 6 5 4 3 2 1 0 RXERR.7 RXERR.6 RXERR.5 RXERR.4 RXERR.3 RXERR.2 RXERR.1 RXERR.0 注意直到复位模式被取消后见状态寄存器2.3.16 TX错误计数寄存器工作模式中只有在复位模式中才可对该寄存器进行写操作寄存器被初始化为0TX错误计数器被初始化为127以对总线定义的最小时间如果总线关闭有效而复位模式被清除后控制器会等待一个11位的连续隐藏位注意直到复位模式被再次取消见状态寄存器给出新的TX计数器内容且总线关闭以同样的方式执行TX错误计数器被初始化为127所有的相关状态和中断寄存器位被置位等待128个总线空闲信号之前又进入复位模式 表20 TX错误计数寄存器CAN地址15 7 6 5 4 3 2 1 0 TXERR.7 TXERR.6 TXERR.5 TXERR.4 TXERR.3 TXERR.2 TXERR.1 TXERR.0 2.3.17 验收滤波器 在验收滤波器的帮助下CAN控制器才允许将已接收信息存入RXFIFOAMRn此外每个滤波器分组使用的帧格式可立即编程验收滤波器BANK 4ACR 0B4F2PRIO B4F1PRIO B3F2PRIO B3F1PRIO B2F2PRIO B2F1PRIO B1F2PRIO B1F1PRIO标准/扩展标准/扩展标准/扩展双/单双/单双/单滤波器2 使能/ 禁止滤波器1 使能/ 禁止滤波器2 使能/ 禁止滤波器1 使能/ 禁止滤波器2 使能/ 禁止滤波器1 使能/ 禁止滤波器2 使能/ 禁止滤波器1 使能/ 禁止滤波器2优先级 低/高滤波器1优先级 低/高滤波器2优先级 低/高滤波器1优先级 低/高滤波器2优先级 低/高滤波器1优先级 低/高滤波器2优先级 低/高滤波器1优先级 低/高验收滤波器优先级寄存器验收滤波器使能寄存器图3 验收滤波器分组 2.3.17.1 验收滤波器模式寄存器 当前的操作模式在验收滤波器模式寄存器表21 验收滤波器模式寄存器CAN地址29ACF 模式标准帧信息被忽略扩展帧信息被忽略长滤波器有效 6 AMODEB4 验收滤波器模式组4 0(双) 双验收滤波器选项使能5 MFORMATB3 验收滤波器格式组3 1(EFF) 验收滤波器第3组仅用于扩展帧信息0(SFF) 验收滤波器第3组仅用于标准帧信息1(单) 单验收滤波器选项使能短滤波器有效 3 MFORMATB2 验收滤波器格式组2 1(EFF) 验收滤波器第2组仅用于扩展帧信息0(SFF) 验收滤波器第2组仅用于标准帧信息1(单) 单验收滤波器选项使能短滤波器有效 1(EFF) 验收滤波器第1组仅用于扩展帧信息1 MFORMATB1 验收滤波器格式组1 0(SFF) 验收滤波器第1组仅用于标准帧信息1(单) 单验收滤波器选项使能短滤波器有效 2.3.17.2 验收滤波器使能寄存器 每个验收滤波器由验收滤波器使能寄存器中的相应位使能或禁止允许在正常操作时改变验收滤波器的内容如果所有的验收滤波器都被禁止 表23 验收滤波器使能寄存器CAN地址30ACF 使能7 B4F2EN 第4组滤波器2 不能对相应的屏蔽和代码寄存器进行写操作 0(禁止) 第4组滤波器2禁止6 B4F1EN 第4组滤波器1 不能对相应的屏蔽和代码寄存器进行写操作 0(禁止) 第4组滤波器1禁止5 B3F2EN 第3组滤波器2 不能对相应的屏蔽和代码寄存器进行写操作 0(禁止) 第3组滤波器2禁止4 B3F1EN 第3组滤波器1 不能对相应的屏蔽和代码寄存器进行写操作 0(禁止) 第3组滤波器1禁止不能对相应的屏蔽和代码寄存器进行3 B2F2EN 第2组滤波器2 写操作 0(禁止) 第2组滤波器2禁止1(使能) 第2组滤波器1使能可以改变相应的屏蔽和代码寄存器 1(使能) 第1组滤波器2使能可以改变相应的屏蔽和代码寄存器 1(使能) 第1组滤波器1使能可以改变相应的屏蔽和代码寄存器 注滤波器2使能位在单滤波器模式中不起作用一个信息通过特定的验收滤波器是否立即产生接收中断或可编程接收中断级是否可用于中断 表25 验收滤波器优先级寄存器CAN地址31ACF 优先级7 B4F2PRIO 第4组滤波器2立即产生接收中断 优先级 0(低) 如果FIFO级超过接收中断级滤波器6 B4FIPRIO 第4组滤波器1立即产生接收中断 优先级 0(低) 如果FIFO级超过接收中断级滤波器5 B3F2PRIO 第3组滤波器2立即产生接收中断 优先级 0(低) 如果FIFO级超过接收中断级滤波器4 B3F1PRIO 第3组滤波器1立即产生接收中断 优先级 0(低) 如果FIFO级超过接收中断级滤波器3 B2F2PRIO 第2组滤波器2立即产生接收中断 优先级 0(低) 如果FIFO级超过接收中断级滤波器2 B2F1PRIO 第2组滤波器1立即产生接收中断 优先级 0(低) 如果FIFO级超过接收中断级滤波器1 B1F2PRIO 第1组滤波器2立即产生接收中断 优先级 0(低) 如果FIFO级超过接收中断级滤波器0 B1F1PRIO 第1组滤波器1立即产生接收中断 优先级 0(低) 如果FIFO级超过接收中断级滤波器4字节如果选择的是标准帧格式如果由于置位RTR位而导致没有数据字节信息也会被接收到所有单个位的比较后都必须发出接受信号AMR1和ACR1的低四位是不用的这些位可通过置位AMR1.3无关Addr.: 16MSB LSB Addr.: 18ACR27654321MSB LSB ACR3MSB LSB Addr.: 17ACR17654321MSB LSB Addr.: 20AMR07654321Addr.: 22AMR27654321MSB LSB Addr.: 23AMR37654321MSB LSB Addr.: 21AMR17654321MSBLSBunused[7]1 不接受接受 1[0]信息位验收代码位验收屏蔽位DBx.y = x, 数据字节位y图4 接收标准帧信息时的单滤波器配置 单滤波器扩展帧 为了成功接收信息AMR3的最低两位和ACR3是不用的这些位应该通过置位AMR3.1和AMR3.0定义为Addr.: 16MSB LSB Addr.: 18ACR276543210MSB LSB ACR3MSB LSB Addr.: 17ACR176543210MSB LSB Addr.: 20AMR076543210Addr.: 22AMR276543210MSB LSB Addr.: 23AMR376543210MSB LSB Addr.: 21AMR176543210MSBLSB &[6][7]1不接受接受1[0]验收代码位信息位验收屏蔽位图5 接收扩展帧信息的单滤波器配置 2.3.17.5 双滤波器的配置 该滤波器配置可以定义两个短滤波器至少有一个滤波器发出接受信号双滤波器标准帧第一个滤波器比较包括RTR位的整个标准识别码和信息的第一个数据字节为了成功接收信息无论怎样信息就可以通过滤波器1如果滤波器1不需要过滤数据字节无关图6 接收标准帧信息的双滤波器配置 双滤波器扩展帧两个滤波器都只比较扩展识别码的前两个字节所有单个位的比较时至少有一个滤波器表示接收图7 双滤波器配置请务必区分标准帧格式EFFSFF或EFF数据区最多容纳8个数据字节在CAN地址的112 ̄124图8 标准帧和扩展帧格式配置的发送缓冲器配置 2.3.18.2 发送缓冲器的描述符区 发送缓冲器位的分布见图20 图9 发送缓冲区的位分布 表27 帧格式RTR2.3.18.3 数据长度代码远程数据长度代码必须正确说明以避免总线错误编码形式如下DLC.3+4大于8的数据长度代码是不可用的将以8个字节计ID的识别码有11位ID.28-ID.0使用在验收滤波器中这是由于仲裁时有更大数字的前导支配位最先发送的是在CAN地址115EFF位于CAN地址的96和108之间 图10 RXFIFO中的信息存储举例 2.3.19.1 接收缓冲器的描述符文件 识别码 7ID .286ID .275ID.264ID .253ID .242ID .231ID .220ID .217ID .286ID .275ID .264ID .253ID .242ID .231ID .220ID .21Addr . 97RX 1 识别码 Addr . 97RX 1 识别码标准帧格式扩展帧格式 (EFF)7ID.206ID .195ID.184RTR3021000Addr . 98RX 2 识别码 7ID .206ID .195ID .184ID .173ID .162ID .151ID .140ID .13Addr . 98RX2识别码7ID .126ID .115ID .104ID .93ID .82ID .71ID .60ID .5Addr . 99RX 3 识别码7ID .46ID .35ID .24ID .13ID .02RTR1000Addr . 100RX 4 识别码接收缓冲区位的含义:ID.x 识别码位 xFF 帧格式RTR 远程发送请求DLC.x数据长度代码位 x7FF6RTR50403DLC.32DLC.21DLC.10DLC.0Addr . 96 RX 帧信息7FF6RTR50403DLC.32DLC.21DLC.10DLC.0Addr . 96RX 帧信息图11 接收缓冲器的位分布 注取决于发送器RXFIFO中一次可以存储多少CAN信息取决于数据的长度CAN控制器会产生数据溢出条件已部分写入RXFIFO的信息将被删除如果中断使能在运行中改变在接收任何信息时都会产生接收中断1接收中断级CAN 位定时计算 tscl = 2/f XTAL (32BRP.5+ (1)BasicCAN 模式1 PeliCAN 模式PeliCAN 模式两个输出管脚 正常TXDCBasicCAN 模式使SJA1000保持了对之前的PCA82C200的软件兼容性3.2 验收滤波器 输入的CAN 信息通过P87C591的验收滤波器滤波如果中断使能从而减少了CPU 服务于CAN 的处理时间在P87C591中必须至少使能一个滤波器每个组都具有SJA1000的功能并增加了M essage 1M essage 2M essage 3Message 4M essagenI d36BAN K 3BANK 2BANK 1ACR 2AMR1ÎÞ¹ØACR 101.1010.0101 AMR 可接收的信息000.1111.0000101.xxxx.0101图13 验收滤波举例如图12所示两个滤波器都支持标准CAN 帧29位ID¶øÇÒÖ»ÄÜÔÚCAN控制器的复位模式中定义1Dh表28 验收滤波器模式寄存器 符号功能 MFORMATBn 信息格式EFF(29位ID)AMODEBn 验收 滤波器模式双验收滤波器n = Bank4±ê×¼Ö¡¸ñʽµ¥Â˲¨Æ÷ID ID RTR D1 D2ID ID ID ID RTR图14 4种可能的验收滤波器配置3.2.1 验收优先级 每个验收滤波器有两个不同的中断配置选择如果一个CAN帧通过验收滤波器将立即产生接收中断2. 接收中断级如果接收FIFO 中的信息字节数超过了接收中断级寄存器中定义的值ACFPRIOCAN地址3对数据字节的验收举例一个显性信息使用CAN 帧的数据段传送DevicNet 定义的信息0..8字节 组3信息假定器件X 分配的组3信息ID 值为4 源MAC ID = 0AFrag = 0, 处理ID =0, 目标MAC ID = 2器件 X 识别码=11 100 001010, 数据= 02 ……剩余的显性信息… 器件YP87C591的验收滤波器可轻易地过滤信息头和源MAC ID¹ýÂ˵ÚÒ»¸öÊý¾Ý×Ö½ÚÖеÄMAC ID 将减少P87C591的中断并使系统的整体性能显著提高包含开放显性信息连接中的服务代码信息的第二个数据字节同样可用于验收滤波3.2.3 在运行中改变验收滤波器 P87C591验收滤波器的配置可使用两种方式改变P87C591还提供新的图3-8中的流程图为在CAN控制器操作模式中重新配置验收滤波器的示例进入操作模式进入操作模式CAN通信没有被中断进入操作模式进入复位模式改变滤波器配置使能被改变的滤波器禁止需要改变的寄存器改变滤波器配置CAN通信被中断在运行中改变通过复位模式改变图3-8 验收滤波器的改变流程运行中改变每个定义的验收滤波器都可通过验收滤波器使能寄存器中的一定位禁止或使能就可以在正常操作中改变验收滤波器配置运行中改变所有的验收滤波器都可定义或重新定义这种方式由几个缺点3 PeliCAN模式下监听模式的应用在监听模式里激活错误标志或过载标志不能被写错误的处理就像在错误被动模式里错误代码捕捉和错误中断就像在正常操作模式一样可以工作可以接收信息这个模式可用于自动位频率检测和其他带有监控功能的应用只能在复位模式下设置监听模式位1自动位率检测 对于自动位频率来说P87C591支持PeliCAN模式的自动位频率检测的请求在监听模式这个模式里只能接收信息义的表格包含所有可能的位频率以及它们的位时序参数P87C591接收和错误中断都使能软件转向下一个较低的位频率P87C591已经检测到正确的位率而且能转向正常工作模式这个节点上能够象系统其他激活的CAN节点一样工作局部自我测试总体自我测试局部自我测试如果这样的话自我测试模式模式寄存器对于总体自我测试但是注意在这两种情况下发送或自我接收通过对命令寄存器的相应位的置位进行初始化表29显示了所有可能的连接4接收以及正常模式下发送其结果如下0x010x10µ«ÔÚÕý³£Ä£Ê½ÏÂ4 软件说明 针对PeliCAN模式的操作共设计了C51ÔÚÃüÃû·½Ê½Éϱ£³ÖÁËÓëSJA1000的库函数的命名方式相兼容下面就这子程序作一一说明CAN5910S.H4 1 PeliCAN通用子程序*描述}if(ErrorFlag){status = SJA_ENTRYRESET_ERR;}return (status);}/********************************************************************************************* ** 调用示例******************************************************************************************** */# include “can591_peli_app.h”void main(void){char status = 0;………….用户代码status = SJAEntryResetMode ( );if(status !=0 ){…….错误处理}……………用户代码}/********************************************************************************************* **函数原型: char SJAQuitResetMode(void)**参数说明: 无**返回值:** SJA_OK ; 表示CAN591退出复位模式成功** SJA_QUITRESET_ERR ; 表示CAN591退出复位模式失败****说明: 该函数用于使591退出复位模式if(ErrorFlag){status = SJA_QUITRESET_ERR;}return (status);}/********************************************************************************************* ** 调用示例******************************************************************************************** */# include “can591_peli_app.h”void main(void){char status = 0;………….用户代码status = SJAQuitResetMode();if(status !=0 ){…….错误处理}……………用户代码}/********************************************************************************************* **函数原型: char SetBitMask(unsigned char RegAdr,unsigned char BitValue)**参数说明: RegAdr 要设置位的寄存器地址** BitValue 要设置的值**返回值:** SJA_OK ; 表示设置值成功** SJA_INIT_ERR ; 表示设置值失败****说明: 该函数用于置位591某寄存器的某位******************************************************************************************** */char SetBitMask(unsigned char RegAdr,unsigned char BitValue){char status=0;unsigned char temp;temp = ReadSJAReg(RegAdr)|BitValue;WriteSJAReg(RegAdr,temp);if(ReadSJAReg(RegAdr) == temp){status = SJA_OK;}else{status = SJA_INIT_ERR ;}return (status);}/********************************************************************************************* ** 调用示例******************************************************************************************** */# include “can591_peli_app.h”void main(void){char status = 0;………….用户代码status = SetBitMask(RegAdr, BitValue);if(status !=0 ){…….错误处理}……………用户代码}/********************************************************************************************* **函数原型: char ClearBitMask(unsigned char RegAdr,unsigned char BitValue)**参数说明: RegAdr 要清除位的寄存器地址** BitValue 要清除的值**返回值:** SJA_OK ; 表示位清除成功** SJA_INIT_ERR ; 表示位清除失败****说明: 该函数用于清除591某寄存器的某位******************************************************************************************** */char ClearBitMask(unsigned char RegAdr,unsigned char BitValue){char status=0;unsigned char temp;temp = ReadSJAReg(RegAdr)&(~BitValue);WriteSJAReg(RegAdr,temp);if(ReadSJAReg(RegAdr) == temp){status = SJA_OK;}else{status = SJA_INIT_ERR ;}return (status);}/********************************************************************************************* ** 调用示例******************************************************************************************** */# include “can591_peli_app.h”void main(void){char status = 0;………….用户代码status = ClearBitMask(RegAdr, BitValue);if(status !=0 ){…….错误处理}……………用户代码}/********************************************************************************************* **函数原型: char SJATestRstMode(void)**参数说明: 无**返回值:** 0 ; 表示CAN591处于复位模式** 1 ; 表示CAN591处于工作模式****说明: 该函数用于测试CAN591 处于复位模式还是工作模式******************************************************************************************** */char SJATestRstMode(void){char SjaFlag;if((ReadSJAReg(REG_CAN_MOD)&RM_RR_BIT) == RM_RR_BIT){SjaFlag = 0;}else{SjaFlag = 1 ;}return (SjaFlag);}/********************************************************************************************* ** 调用示例******************************************************************************************** */# include “can591_peli_app.h”void main(void){………….用户代码if(SJATestRstMode()){…….工作模式处理}else{…….复位模式处理}……………用户代码}/********************************************************************************************* **函数原型: char SJASetCanIne(unsigned char canint)**参数说明: canint 设置中断使能值**返回值:** 0 ; 设置中断使能寄存器成功** SJA_SETIER_ERR ; 设置中断使能寄存器失败****说明: 该函数用于591的CAN中断使能设置******************************************************************************************** */char SJASetCanIER(unsigned char canint){char SjaFlag;if(WriteSJAReg(REG_CAN_IER,canint)==0)SjaFlag = 0;else{SjaFlag = SJA_SETIER_ERR ;}return (SjaFlag);}/********************************************************************************************* ** 调用示例******************************************************************************************** */# include “can591_peli_app.h”void main(void){char status = 0;………….用户代码status = SJASetCanIER(canint);。