资源描述
P8xC591 微控制器在CAN 中的应用
1 介绍
P8xC591 是一个高性能的 CAN微控制器,可用于汽车和通用的工业应用,除了具有Philips “Rx+内核”的增强特性之外,器件还为这些应用提供许多专用的硬件功能。
P8xC591 完全履行 CAN2.0B 规范并提供一个直接从 SJA1000 独立 CAN控制器的软件移植路径。P8xC591 具有 CAN 的扩充特性, 其中包括增强型验收滤波器, 支持系统维护,诊断,系统优化以及接收FIFO 特性。 P8xC591 具有非常广泛的应用领域。
该应用手册涵盖了 P8xC591 与CAN 相关的应用项目,要想应用并理解该文档中的应用示例,读者必须熟悉 P8xC591 的数据手册。示例中的“C”代码描述了一套基本的软件程序,它可作为应用软件开发的一个起点。附录中列出了所有使用的定义。
2 概述
系统概述
P8xC591 设计成在最少数量的外部元件下工作。图 2-1 所示为使用 ROM 或 OTP EPROM的P8xC591的 CAN 节点电路。所需要的外部元件仅仅是一个晶振加两个电容驱动片内振荡器,一个连接到复位脚的电容(使用片内复位电路)以及一个收发器用于将 P8xC591 连接到 CAN 总线。
方框图
图 2-2 所示为 P83C591(ROM)或 P87C591(OTP)的方框图
P8xC591 除了包含标准的外围功能以外,还包含了一个强大的 CAN 控制器模块,它以 PeliCAN 为大家所知道,该嵌入式 CAN 控制器包括了下列功能模块:
CAN 内核模块根据 CAN2.0B 规范控制 CAN 帧的发送和接收。
CAN 接口包含5个实现 CPU 与 CAN 控制器连接的特殊功能寄存器,对重要 CAN 寄存器的访问通过快速自动增加的寻址特性和对特殊功能寄存器的位寻址来实现。
CAN 控制器的发送缓冲区能够保存一个完整的 CAN 信息(扩展或标准帧格式)。只要通过 CPU 启动发送,信息字节就从发送缓冲区传输到 CAN 内核模块。
当接收一个信息时 ,CAN 内核模块将串行位流转换成并行数据输入到验收滤波器,通过该可编程滤波器, P8xC591 确定实际接收到的信息 。
所有由验收滤波器验收的接收数据都保存在接收 FIFO 中。取决于操作模式和数据长度的不同,最多可保存 21 个 CAN 信息。这使用户在指定系统的中断服务和中断优先级时有更多的灵活性,因为数据溢出的可能性大大降低了。
CAN 特性的描述
CAN2.0B 控制器支持11位标准和29 位扩展识别码。使用8MHz时钟可实现 1Mbit/sCAN 总线速率。还具有一个片内 64 字节接收 FIFO 和一个 13 字节发送缓冲区。
除了普通的 CAN 特性以外, P8xC591 还提供增强型 PeliCAN、 系统的维护、诊断和优化特性, 这些特性都因 Philips 半导体的 SJA1000 独立 CAN 控制器而闻名。
PeliCAN 特性
l 4个独立可配置的验收滤波器组
l 每个组都有 4 个可选的验收滤波器配置
l 每个验收滤波器都有 32 位区分符 32 位代码和 32 位屏蔽
l 所有滤波器都可 在运行中改变
l 支持更高层的协议的验收滤波器
l 接收 FIFO 特性
l 只听模式 自检测模式
l 只有达到 FIFO接收中断级才产生接收中断
l 在接收到高优先级数据帧时立即产生接收中断
系统维护 诊断和优化特性:
仲裁丢失捕获
l 仲裁丢失时产生中断
l 捕获到的上一次仲裁丢失的具体 CAN 位置
先进的错误诊断
l 带有具体位置和错误类型的错误代码捕获
l 可读的错误计数器
l 几个不同的错误中断
l 可编程错误警告界限
只听模式
l 监控功能
l 自动位速率检测
CAN 自检测模式
l 系统自检测
l 自身信息接收
l 全局自检测 (要求应答)
l 局部自检测 (不要求应答)
2.4 P8xC591 和 SJA1000 CAN 特性的主要差别
SJA1000
P8xC591
1个1个支持双或单滤波器的验收滤波器组
4 个支持双或单滤波器的验收滤波器组,所有滤波器都可 在运行中改变 见3.3.3
1 个接收中断配置:在接收任何信息时都会产生接收中断 (接收FIFO 非空)
2 个接收中断配置
1、高优先级中断 见3.3.1
2、接收中断级
CAN 位定时计算
tscl = 2/fXTAL (32BRP.5+……..+1)
CAN 位定时计算
tscl = 1/fXTAL (32BRP.5+……..+1)
BasicCAN 模式1
PeliCAN 模式
PeliCAN 模式
两个输出管脚 TX0,TX1 的不同发送输出级配置:正常 双相位 时钟和测试输出模式
输出管脚 TXDC 的发送输出级配置为正常模式
注 1: SJA1000 是 PCA82C200 独立 CAN 控制器的继承产品。 BasicCAN 模式使 SJA1000 保持了对之前的 PCA82C200 的软件兼容性。
3 CAN 功能
CAN 协议 2.0B 完全由 CAN 内核模块处理, P8xC591 初始化并控制通信, 下面的章节将讲述P8xC591所有用于 CAN 通信的功能。
CPU 接口
特殊功能寄存器
对所有 PeliCAN 寄存器的访问通过 5 个特殊功能寄存器实现。 它们分布在 P8xC591 的地址范围内。所有PeliCAN 地址都通过间接指针 (CANADR) 寻址。 此外, 常用的PeliCAN 寄存器可直接由 CAN 特殊功能寄存器进行访问 。
图3-1所示为所有的CAN特殊功能寄存器以及它们的PeliCAN寄存器, 通过CANMOD可对PeliCAN模式寄存器进行直接的读/写访问, 通过写入 CANCON 对命令寄存器进行访问, 通过读 CANCON 对中断寄存器进行访问, 通过 CANSTA 寄存器可对中断使能寄存器进行写操作, 读 CANSTA 是对 PeliCAN 状态寄存器进行访问 CANSTA可位寻址并允许单个状态位的直接寻址,这对查询很有用。
所有其它的 CAN 寄存器都需要进行间接寻址。 CANADR 寄存器指向PeliCAN 寄存器的地址在写操作时, 将要送到被寻址寄存器的数据写入 CANDAT。 读操作时,被寻址寄存器的数据可从 CANDAT 中读出 。下面的例子说明了对 PeliCAN 寄存器的直接和间接寻址功能:
/* 模式寄存器的直接寻址*/
CANMOD = 0x01; /* 置位Mode Register中的复位请求*/
/* 对位定时寄存器0和1的间接寻址*/
CANADR = BTR0; /* 将地址设置到BTR0寄存器*/
CANDAT = 0x45; /* 将数据写入BTR0*/
CANADR = BTR1; /* 将地址设置到BTR1寄存器*/
CANDAT = 0x2B; /* 将数据写入BTR1*/
使用地址自动增加对 CAN 寄存器进行快速寻址
前面一章所描述的间接寻址在寻址 CAN 信息缓冲区和验收滤波器时会很消耗时间。 因此,P8xC591包含一个自动增加模式用于快速寄存器寻址。 自动增加特性在 PeliCAN 地址 31(十进制)之后的地址被CANADR 选择时自动有效,.每次对 CANDAT的读/写,访问都自动增加 CANADR 指针。 这类似于堆栈读写可有效地用于建立一个新的发送信息或用于对 RX 缓冲区进行读操作。
/* 建立一个用于发送的新的CAN信息 */
CANADR = TBF; /* 指向591 TX 缓冲区 */
CANDAT = TransmitMessage[0]; /* 写TX帧信息 */
CANDAT = TransmitMessage[1]; /* 写TX识别码 1 */
CANDAT = TransmitMessage[2]; /* 写TX识别码 2 */
CANDAT = TransmitMessage[3]; /* 写TX数据字节 1 */
CANDAT = TransmitMessage[4]; /* 写TX数据字节 2 */
…..
…
..
/* 将接收信息从RX缓冲区复制到CPU RAM */
CANADR = RBF; /* 指向 RX 缓冲区 */
ReceiveMessage[0] = CANDAT; /* 读RX帧信息*/
ReceiveMessage[1] = CANDAT; /* 读RX识别码 1 */
ReceiveMessage[2] = CANDAT; /* 读 RX识别码 2 */
ReceiveMessage[3] = CANDAT; /* 读RX数据字节 1 */
ReceiveMessage[4] = CANDAT; /* 读RX数据字节 2 */
…..
…..
初始化
复位模式和操作模式
在上电或硬件复位后, CAN 控制器将处于复位模式 。在该模式中, 模式寄存器的 RM 位总是为 1。 如果 CAN 控制器不处于复位模式, RM 位的置位 (通过硬件或软件)将强制其进入复位模式, 内部状态机被冻结。
典型地,在上电或硬件复位后, 一旦引导和初始化程序结束, CPU 将通过软件 (清零 RM位) 使 CAN控制器进入操作模式。 在操作模式中 ,下面任何一个动作将使 RM 位置位从而强制 CAN 控制器进入复位模式 。
l 硬件复位
l 通过软件将 RM MOD.0 置位
l 总线脱离状态
此外, CAN 控制器的特殊模式, 只能从复位模式中进入, 这些特殊模式为测试模式, 接收器极性模式, 自检测模式和只听模式, 退出复位模式后 CAN 控制器返回到由模式寄存器所定义的模式。
CAN 控制器的设定
CAN 控制器在上电或硬件复位后必须进行设定以实现 CAN 通信初始化的处理应当包括下面几项:
l 操作模式
l 验收滤波器
l 总线定时
l TXDC 输出管脚配置
l 中断
图 3-2 所示为初始化处理编程示例的流程图。
对于 CAN 控制器的初始化 ,只有表 1 中所列寄存器相关。 大多数 CAN 寄存器具有一个方便的恢复特性, 在硬件复位或使 CAN 控制器进入复位模式后用户配置可保持不变 (表 1 中标注 “不变”)。
表1 CAN控制器寄存器设定
寄存器
位名称
寄存器值
上电后
HW 复位后
置位MOD.0(RM)位
模式寄存器
MOD.7
MOD.6
MOD.5
MOD.4
MOD.3
MOD.2
MOD.1
MOD.0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
不变
不变
1
测试模式
接收极性模式
自检测模式
只听模式
复位模式
P1 口配置寄存器
P1M1.1
P1M2.1
0
0
0
0
不变
不变
输出驱动器配置, TXDC 脚必须过P1M1.1=0 P1M2.1=1 设置为推挽模式
中断使能寄存器
IER
xxh
不变
不变
与CAN 有关的中断使能寄存器
Rx 中断级寄存器
RIL
00h
00h
不变
接收中断级
总线定时寄存器0
BTR0
xxh
不变
不变
同步跳转宽度波特率预分频器
总线定时寄存器1
BTR1
xxh
不变
不变
每个位时间段的采样
验收滤波器模式寄存器
ACFMOD
00h
不变
不变
用于组4,3,2,1 的信息格式用于组4,3,2,1 的验收滤波器模式
验收滤波器使能寄存器
ACFEN
xxh
不变
不变
用于组4,3,2,1 的滤波器1&2 使能
验收滤波器优先级寄存器
ACFPRIO
xxh
不变
不变
用于组4,3,2,1 的滤波器1&2 优先级
验收代码寄存器
ACR(3~0)
xxh
不变
不变
ACR 用于组4,3,2,1
验收屏蔽寄存器
AMR(3~0)
xxh
不变
不变
AMR 用于组4,3,2,1
流程图
下图为 进入CAN控制器复位模式
选择操作模式,退出CAN控制器复位模式
TXCD脚(P1.1)配置
与CAN相关的中断配置
CAN位定时的配置
验收滤波器的配置
初始化或重新配置起始
初始化或重新配置结束
是否使用CAN中断
N
Y
CAN 控制器初始化程序的简短示例 。对应的 C 代码见下页。
图3-2初始化流程图
CAN 初始化的C 代码示例
void init_can_controller ( void )
{
/* 进入CAN控制器复位模式 */
CANMOD = 0x01; /* 将CAN控制器设置为复位模式以启动初始化 */
/* TXDC Port (P1.1) 配置 */
/* 管脚TXDC 设置为推挽模式 */
P1M2 = P1M2 | 0x02; /* P1M2.1=’1’, P1M1.1 = ’0’ (默认) */
/* 配置与CAN有关的中断 */
CANSTA = 0x03; /* 使能接收和发送中断 */
/* CAN位定时的配置 */
CANADR = BTR0; /* BTR0和BTR1编程为125 kbit/s @12 MHz */
CANDAT = 0x45;
CANADR = BTR1; /* TSEG1 = 12, TSEG2 = 3, SJW = 2 */
CANDAT = 0x2B; /* Samples = 1 -> sample point ~81 % */
/* 验收滤波器的配置 Bank1的滤波器1配置为接收ID = 010.0000.0XXX */
CANADR = ACR10; /* 将地址设置到验收代码寄存器0 (Bank 1) */
CANDAT = 0x40; /* 验收代码0用于滤波 */
CANADR = AMR10; /* 将地址设置到验收屏蔽寄存器0 (Bank 1) */
CANDAT = 0x00; /* bank1: 验收屏蔽0 */
CANDAT = 0xFF; /* bank1: 验收屏蔽1无关 */
CANDAT = 0xFF; /* bank1: 验收屏蔽2无关 */
CANDAT = 0xFF; /* bank1: 验收屏蔽3无关 */
CANADR = ACFMOD; /* 将地址设置到ACF模式寄存器 */
CANDAT = 0x55; /* 单验收滤波器使用11位ID (SFF) */
CANADR = ACFPRIO; /* 将地址设置到ACF优先级寄存器 */
CANDAT = 0xFF; /* 所有滤波器都为高优先级 */
CANADR = ACFEN; /* 将地址设置到ACF使能寄存器 */
CANDAT = 0x01; /* 使能Bank1的验收滤波器 */
/* 选择操作模式 退出CAN控制器复位模式 */
CANMOD = 0x00; /* 使CAN控制器进入操作模式 */
}
3.3验收滤波器
输入的 CAN 信息通过 P8xC591 的验收滤波器滤波, 这样就只有预先定义的信息会被验收并保存到接收 FIFO。 如果中断使能, 只有这些已验收的信息会产生接收中断, 从而减少了 CPU 服务于CAN 的处理时间 。
4 个独立的验收滤波器组可分别进行配置。 每个组都具有 SJA1000 的功能并增加了 在运行中改变的特性。 (见 3.3.3 )
验收代码寄存器(ACRn)和验收屏蔽寄存器(AMRn)定义验收滤波器。在验收代码寄存器中定义接收信息的格式。 对应的验收屏蔽寄存器允许通过将一定的位设置为 1 而将相应的位位置定义为 “无关” 这两个特性的组合定义了接收的 CAN 信息。
ACR
101.1010.0101
AMR
可接收的信息
000.1111.0000
101.xxxx.0101
图3-4 验收滤波举例
如图 3-5 所示, 每个验收滤波器组都可配置为单滤波器或双滤波器 ,两个滤波器都支持标准 CAN 帧(11 位 ID) 以及扩展 CAN 帧 (29 位 ID) 关于验收滤波器的详细配置请参阅 P8xC591 数据手册。
每个滤波器组的 4 种配置都可在验收滤波器模式寄存器中定义, 而且只能在 CAN 控制器的复位模式中定义。
ACFMOD 寄存器 CAN 地址 1Dh
表2 验收滤波器模式寄存器
符号
功能
MFORMATBn
信息格式 0 SFF(11 位ID) 1 EFF(29 位ID)
AMODEBn
验收滤波器模0 单验收滤波器1 双验收滤波器
n = Bank4 3 2 或1
3.3.1 验收优先级
每个验收滤波器有两个不同的中断配置选择。
1. 高优先级中断
当配置为高优先级时, 如果一个 CAN 帧通过验收滤波器将立即产生接收中断, 这允许使用一定的验收滤波器作为报警信息识别。
2. 接收中断级
如果接收 FIFO 中的信息字节数超过了接收中断级寄存器中定义的值, 将产生接收中断。 两个中断配置都在验收滤波器优先级寄存器中定义。
ACFPRIO CAN 地址 1Fh
符号
功能
BnF2PRIO
滤波器2 优先级 1=高优先级中断 0 =Rx 级中断
BnF1PRIO
滤波器1 优先级1 =高优先级中断 0 =Rx 级中断
n = Bank4 3 2 或1
3.3.2 更高层协议的支持 对数据字节的验收举例 DeviceNet 协议 显性信息
DeviceNet 协议使用带 11 位 CAN 识别码的标准帧格式。 一个显性信息使用 CAN 帧的数据段传送DevicNet 定义的信息。 发送的数据段 0..8 字节 包含了完整的显性信息, 其中包括信息头和信息体。 信息头指定在 CAN 数据段的第一个数据字节中并包含目标 MAC ID 。
11 位 CAN 识别码与信息 MAC ID 的组合定义了一个源或目标 MAC ID 而且必须被检查。
P8xC591 的验收滤波器可轻易地过滤信息头和源 MAC ID。 由于对更高层协议的支持, 过滤第一个数据字节中的 MAC ID 将减少P8xC591 的中断并使系统的整体性能显著提高。
此外 ,包含开放显性信息连接中的服务代码信息的第二个数据字节同样可用于验收滤波。
附英文原文:
1. INTRODUCTION
The P8xC591 is an advanced CAN microcontroller for use in general industrial and automotive applications. In addition to the enhanced functionality of the Philips "Rx+ core" [5] this device provides a number of dedicated hardware functions for these applications.
The CAN controller of the P8xC591 fulfils the complete CAN2.0B specification and provides a direct software migration path from the SJA1000 stand-alone CAN controller [6]. With a superset of CAN features like an enhanced acceptance filter, support for System Maintenance, Diagnostics, System Optimisation and a Receive FIFO characteristics it is intended to be used in versatile application areas.
This Application Note covers the CAN related items of P8xC591 applications. To apply and understand the application examples given in this document, the reader should be familiar with the Philips P8xC591 data sheet [1]. The ’C’ code in the examples describe a basic set of software driver routines which could be used as a starting point for development of application software. All used definitions are listed in the Appendix.
2. OVERVIEW
System Overview
The P8xC591 is designed to work with a minimum number of external components. Figure 2-1 shows the circuitry of a CAN node using the ROM- or OTP EPROM- version of the P8xC591. The only additional components that are required are a crystal plus two capacitors to drive the on-chip oscillator, a capacitor connected to the Reset pin, using the on chip power-on RESET circuitry and a transceiver to connect the
P8xC591 to the CAN bus.
BLOCK Diagram
Figure 2-2 shows the block diagram of the P83C591 (ROM) or the P87C591 (OTP EPROM) versions.
In addition to a standard set of peripherals the P8xC591 contains a powerful CAN controller block which is also known as PeliCAN. This embedded CAN controller includes the following functional blocks:
The CAN Core Block controls the transmission and reception of CAN frames according to the CAN specification CAN2.0B.
The CAN Interface consist of 5 Special Function Registers which perform the link between CPU and CAN controller. Access to important CAN registers is accomplished by a fast autoincrement addressing feature and bit-addressable Special Function Registers.
The Transmit Buffer of the CAN controller is able to store one complete CAN message (Extended or Standard Frame Format). Whenever a transmission is initiated by the CPU, message bytes are transferred from the Transmit Buffer into the CAN Core Block.
When receiving a message the CAN Core Block converts the serial bit stream into parallel data for the Acceptance Filter. With this programmable filter the P8xC591 decides which messages actually are received.
All received messages accepted by the Acceptance Filter are stored within the Receive FIFO. Depending
on the mode of operation and the data length up to 21 CAN messages can be stored. This enables the user to be more flexible when specifying interrupt services and interrupt priorities for the system because the probability of data overrun conditions is reduced extremely.
Description of CAN Features
The CAN 2.0B active CAN controller supports 11-bit standard and 29-bit extended identifiers. A maximum CAN bit-rate of 1Mbit/s is already achievable with an 8 MHz clock. An on-chip 64-byte Receive FIFO and a 13-byte transmit buffer is implemented.
In addition to the general CAN features the P8xC591 provides enhanced PeliCAN, System Maintenance,Diagnostics and Optimisation Features known from the SJA1000 stand-alone CAN controller [6] from Philips Semiconductors.
PeliCAN Features:
l Four independently configurable Acceptance Filter Banks
l Four possible Acceptance Filter Configurations in each Bank
l Each filter has two 32-bit specifiers: a 32-bit Code and a 32-bit Mask
l All filters are changeable ’on the fly’
l Acceptance Filter with Higher Layer Protocol Support
l Receive FIFO characteristic
l Listen Only and Self Test Mode
l Receive Interrupt only if FIFO Receive Interrupt Level is reached
l Receive Interrupt immediately at reception of High Priority Data Frames
System Maintenance, Diagnostics and Optimisation Features:
Arbitration Lost Capture
l Interrupt on arbitration lost
l Detailed CAN bit position of last arbitration lost event is captured
Advanced Error Diagnostics
l Error Code Capture with detailed bit position and type of error
l Readable Error Counters
l Several different Error Interrupts
l Programmable error warning limit
Listen Only Mode
l Monitor Function
l Automatic Bit-rate Detection
l CAN Self Test Mode
l System Self Tests
l Reception of own messages
l Global Self Test (acknowledge required)
l Local Self Test (no acknowledge required)
Main differences between P8XC591 and SJA1000 CAN Functionality
SJA1000
P8xC591
One Acceptance Filter Bank with Dual or Single Filter support.
Four Acceptance Filter Banks with Dual or Single Filter support in each bank. All filters are changeable ’on the fly’ (see also chapter 3.3.3).
One Receive Interrupt configuration: Receive Interrupt is generated on the reception of any message (while the Receive FIFO is not empty).
Two Receive Interrupt configurations possible:
1. High Priority Interrupt (see also chapter 3.3.1)
2. Receive Interrupt Level
CAN Bit Timing Calculation
t = / f x (32 BRP.5+ ……..+1) scl XTAL
CAN Bit Timing Calculation
t = / f x (32 BRP.5+ ……..+1) scl XTAL
BasicCAN Mode 1
PeliCAN Mode
PeliCAN Mode
Different Transmit output stage configurations with two output pins (TX0, TX1): Normal, Bi-phase, Clock and Test output Mode
Transmit output stage with one output pin (TXDC) in Normal Mode configuration
3. CAN FUNCTIONALITY
The CAN protocol 2.0B as specified in [2] is completely handled by the CAN Core Block, see also chapter 2.2. The CPU of the P8xC591 initialises and controls the communication. The following chapters describe all functions necessary to run CAN communication with the P8xC591.
CPU Interface
Special Function Registers
Access to all PeliCAN registers is performed via five Special Function Registers (SFR). They are mapped into the address range of the P8xC591. For all PeliCAN address locations indirect pointer (CANADR)based addressing is achieved. In addition frequently used PeliCAN registers can be accessed directly
展开阅读全文