广州周立功单片机发展有限公司 www.zlgmcu.com
1
PHILIPS LPC2000 系列 ARM7 微处理器
CAN 控制器驱动程序的编写与开发
广州周立功单片机发展有限公司
2004 年 8 月 25 日
广州周立功单片机发展有限公司 www.zlgmcu.com
2
目录
第 1 章 CAN 控制器和验收过滤器 .........................................................................................4
1.1 特性...................................................................................................................................4
1.2 管脚描述...........................................................................................................................4
1.3 CAN 模块的存储器映射 .................................................................................................4
1.4 CAN 控制器寄存器一览表 .............................................................................................5
1.5 各控制寄存器解释...........................................................................................................7
1.5.1 模式寄存器(CANMOD – 0xE00x x000)............................................................7
1.5.2 命令寄存器(CANCMR – 0xE00x x004) ............................................................7
1.5.3 全局状态寄存器(CANGSR – 0xE00x x008) .....................................................8
1.5.4 中断和捕获寄存器(CANICR – 0xE00x x00C)..................................................9
1.5.5 中断使能寄存器(CANIER – 0xE00x x010).....................................................10
1.5.6 总线时序寄存器(CANBTR – 0xE00x x014) ...................................................11
1.5.7 出错警告界限寄存器(CANEWL – 0xE00x x018)...........................................11
1.5.8 状态寄存器(CANSR – 0xE00x x01C)..............................................................12
1.5.9 Rx 帧状态寄存器(CANRFS – 0xE00x x020) ......................................................12
1.5.10 Rx 标识符寄存器(CANRID – 0xE00x x024)...................................................13
1.5.11 Rx 数据寄存器 A(CANRDA – 0xE00x x028) .................................................13
1.5.12 Rx 数据寄存器 B(CANRDB – 0xE00x x02C).................................................14
1.5.13 Tx
帧信息寄存器(CANTFI1,2,3 – 0xE00x x030,40,50)..................................14
1.5.14 Tx 标识符寄存器(CANTID1,2,3 – 0xE00x x034,44,54) .................................14
1.5.15 Tx 数据寄存器 A(CANTDA1,2,3 – 0xE00x x038,48,58)................................15
1.5.16 Tx 数据寄存器 B(CANTDB1,2,3 – 0xE00x x03C,4C,5C) ..............................15
1.6 寄存器操作方法.............................................................................................................16
1.6.1 错误处理.................................................................................................................17
1.6.2 睡眠模式.................................................................................................................18
1.6.3 中断.........................................................................................................................18
1.6.4 发送优先级.............................................................................................................19
1.7 组合 CAN 寄存器..........................................................................................................19
1.7.1 集中发送状态寄存器(CANTxSR – 0xE004 0000)..........................................19
1.7.2 集中接收状态寄存器(CANRxSR – 0xE004 0004)..........................................20
1.7.3 集中其他状态寄存器(CANMSR – 0xE004 0008)...........................................20
1.8 全局验收过滤器.............................................................................................................21
1.8.1 验收过滤器寄存器.................................................................................................22
1.8.2 标准帧单个起始地址寄存器(SFF_sa – 0xE003 C004)...................................22
1.8.3 标准帧组起始地址寄存器(SFF_GRP_sa – 0xE003 C008) .............................23
1.8.4 扩展帧起始地址寄存器(EFF_sa – 0xE003 C00C) ..........................................23
1.8.5 扩展帧组起始地址寄存器(EFF_GRP_sa – 0xE003 C010) .............................23
1.8.6 AF 表格终止寄存器(ENDofTable – 0xE003 C014).............................................23
广州周立功单片机发展有限公司 www.zlgmcu.com
3
1.8.7 LUT 错误地址寄存器(LUTerrAd – 0xE003 C018) .............................................24
1.8.8 LUT 错误寄存器(LUTerr – 0xE003 C01C)..........................................................24
1.8.9 验收过滤器表格和 ID 索引值举例.......................................................................24
1.8.10 FullCAN 模式.........................................................................................................25
第 2 章 CAN 控制器驱动程序的编写 ...................................................................................28
2.1 驱动程序的结构.............................................................................................................28
2.2 驱动程序使用方法.........................................................................................................31
2.3 驱动程序各文件介绍.....................................................................................................31
2.3.1 用户配置文件.........................................................................................................31
2.3.2 CAN 驱动应用接口层文件 .......................................................................................33
2.3.3 功能函数层文件.....................................................................................................41
2.3.4 硬件抽象层文件.....................................................................................................44
第 3 章 CAN 驱动程序应用实例——RS232 与 CAN-bus 透明转换器 .............................45
3.1 硬件平台.........................................................................................................................45
3.2 软件平台.........................................................................................................................46
3.3 应用注意事项.................................................................................................................46
3.4 实现的功能说明.............................................................................................................47
3.5 测试方法说明.................................................................................................................47
3.6 简单的 RS232 数据与 CAN-bus 数据透明转换的实现..............................................49
3.6.1 系统初始化
.............................................................................................................49
3.6.2 主循环处理.............................................................................................................50
第 4 章 参考文献.....................................................................................................................54
广州周立功单片机发展有限公司 www.zlgmcu.com
4
第1章 CAN 控制器和验收过滤器
LPC2119/2129/2194/2290/2292/2294 微处理器包含 2 或 4 个 CAN 模块,可同时支持多个
CAN 总线的操作,使器件可用作网关、开关、工业或汽车应用中多个 CAN 总线的路由器。
1.1 特性
2 或 4 个(LPC2119/2129/2292 或 LPC2290/2194/2294)CAN 控制器和总线(64 脚
封装中包含 2 条,144 脚的封装中包含 4 条)。
每个总线的数据波特率可达 1Mbps;
可访问 32 位的寄存器和 RAM;
符合 CAN 规范 CAN2.0B,ISO 11898-1;
全局验收过滤器可识别几乎所有总线的 11 和 29 位 Rx 标识符;
验收过滤器为选择的标准标识符提供了 FullCAN-style 自动接收。
1.2 管脚描述
CAN 控制器输入输出管脚表 1.1 所示。
表 1.1 CAN 管脚描述
管脚名称 类型 描述
RX4、RX3
RX2、RX1
输入
串行输入。来自 CAN 收发器。
注:RX2 和 RX1 适用于所有含有 CAN 模块的器件。但 RX4 和 RX3 只可用
于 144 管脚含有 CAN 模块的某些器件。
TX4、TX3
TX2、TX1
输出
串行输出。输出到 CAN 收发器。
注:TX2 和 TX1 适用于所有含有 CAN 模块的器件。但 TX4 和 TX3 只可用
于 144 管脚含有 CAN 模块的某些器件。
1.3 CAN 模块的存储器映射
CAN 控制器和验收过滤器占用部分 VPB slot 空间,表 1.2 所示。
表 1.2 CAN 模块的存储器映射
地址范围 用途
E003 8000 – 87FF
验收过滤器 RAM (2048 字节)
E003 C000 – C017
验收过滤器寄存器
E004 0000 – 000B
中央 CAN 寄存器
E004 4000 – 405F
CAN 控制器 1 寄存器
E004 8000 – 805F
CAN 控制器 2 寄存器
E004 C000 – C05F
CAN 控制器 3 寄存器
E005 0000 – 005F
CAN 控制器 4 寄存器
广州周立功单片机发展有限公司 www.zlgmcu.com
5
1.4 CAN 控制器寄存器一览表
CAN 模块使用的寄存器见表 1.3 和表 1.4 所示。详情见后面的描述。
表 1.3 CAN 验收过滤器和中央 CAN 寄存器
名称 描述 访问 复位值 地址
AFMR
验收过滤器寄存器
R/W 1 0xE003 C000
SFF_sa
标准帧单个起始地址寄存器
R/W 0 0xE003 C004
SFF_GRP_sa
标准帧组起始地址寄存器
R/W 0 0xE003 C008
EFF_sa
扩展帧起始地址寄存器
R/W 0 0xE003 C00C
EFF_GRP_sa
扩展帧组起始地址寄存器
R/W 0 0xE003 C010
ENDofTable
AF 表格终止寄存器
R/W 0 0xE003 C014
LUTerrAd
LUT 错误地址寄存器
RO 0 0xE003 C018
LUTerr
LUT 错误寄存器
RO 0 0xE003 C01C
CANTxSR
CAN 集中发送状态寄存器
RO 0x003F 3F00 0xE004 0000
CANRxSR
CAN 集中接受状态寄存器
RO 0 0xE004 0004
CANMSR
CAN 集中其他状态寄存器
RO 0 0xE004 0008
表 1.4 CAN1,CAN2,CAN3 和 CAN4 控制器寄存器映射
名称 描述 访问
CAN1
地址&名称
CAN2
地址&名称
CAN3
地址&名称
CAN4
地址&名称
CANMOD
控制 CAN 控制器
的工作模式
R/W
0xE0044000
C1MOD
0xE0048000
C2MOD
0xE004C000
C3MOD
0xE0050000
C4MOD
CANCMR
影响 CAN 控制器
状态的命令位
WO
0xE0044004
C1CMR
0xE0048004
C2CMR
0xE004C004
C3CMR
0xE0050004
C4CMR
CANGSR
全局控制器状态
和错误计数器
RO
a
0xE0044008
C1GSR
0xE0048008
C2GSR
0xE004C008
C3GSR
0xE0050008
C4GSR
CANICR
中断状态,仲裁丢失
捕获,错误码捕获
RO
0xE004400C
C1ICR
0xE004800C
C2ICR
0xE004C00C
C3ICR
0xE005000C
C4ICR
CANIER
中断使能
R/W
0xE0044010
C1IER
0xE0048010
C2IER
0xE004C010
C3IER
0xE0050010
C4IER
CANBTR
总线时序
R/W
b
0xE0044014
C1BTR
0xE0048014
C2BTR
0xE004C014
C3BTR
0xE0050014
C4BTR
CANEWL
出错警告界限
R/W
b
0xE0044018
C1EWL
0xE0048018
C2EWL
0xE004C018
C3EWL
0xE0050018
C4EWL
CANSR
状态寄存器
RO
0xE004401C
C1SR
0xE004801C
C2SR
0xE004C01C
C3SR
0xE005001C
C4SR
CANRFS
接收帧状态
R/W
b
0xE0044020
C1RFS
0xE0048020
C2RFS
0xE004C020
C3RFS
0xE0050020
C4RFS