引言
 现场总线是一种应用于现场设备之间、现场设备与控制装置之间实行双向、串行、多节点数字通信的技术;是一项主要研究在智能传感器、微控制器、计算机、执行器之间数据通信方法的综合技术,是当今自动化领域技术发展的热点。目前国际上存在几十种现场总线标准,如CAN(控制器局域网)、LIN(本地互联网)、FF(基金会现场总线)等。CAN总线最初是由德国Bosch公司为汽车的监控、控制系统而设计的。由于CAN总线具有独特的设计思想,良好的功能特性、极高的可靠性和抗干扰性,被广泛应用于汽车工业、航天工业等领域,是目前最有前途的现场总线之一。[12]
1 FlexCAN硬件电路设计
 飞思卡尔半导体(Freescale Semiconductor)公司的混合控制器和微控制器广泛应用于汽车电子、工业控制、消费电子等应用领域。DSP 56F8300是56F800系列的最新产品。它将微控制功能和数字信号处理器的信号处理功能、32位RISC的原始协议和控制流程结合起来[3],具备60 MHz/MIPS的运算速度;拥有高集成度的内部外围设备,如通用I/O、SPI、SCI、PWM、CAP、FlexCAN等,降低了系统成本;提供功能强大的CodeWarrior集成开发环境和Process Expert快速应用开发工具,大幅缩短了软件开发周期。
1.1 飞思卡尔DSP 56F8300 FlexCAN模块
 FlexCAN(FC)模块是一种控制器局域网(CAN)协议的通信控制单元。这种通信协议是为解决现代汽车和工业控制的数据交换而专门开发的串行数据通信协议。它是一种高速(1 Mbps)、短距离并且能够运用各种媒体(光纤或者双绞线)进行通信的基本通信协议。FlexCAN模块支持CAN 2.0B协议中标准的扩展ID信息格式。虽然CAN协议起初是为汽车总线设计的,但它并不是专用于现代汽车总线。它的设计满足了下列特殊的应用环境:实时数据处理、在电磁干扰(EMI)环境下可靠操作、低成本和必要的带宽等。
 图1是DSP 56F8300的FlexCAN模块的结构框图。

图1 FlexCAN模块框图
 FlexCAN模块有16个邮箱(Message Buffers)MB0~MB15,每一个邮箱内嵌256字节的RAM,并且可被独立地配置成为发送邮箱或接收邮箱,而每一个邮箱都可以设置相应的发送或接收中断标志位。其主要特点如下[4]:
 ◆ 建立在TouCAN模块的基础上,并具有它所具有的一切功能;
 ◆ IP接口架构;
 ◆ 完全支持CAN 2.0B协议
 ——标准数据帧(可达109位),
 ——扩展数据帧(可达127位),
 ——0~8 字节的数据长度,
 ——数据传输速率可达1Mbps;
 ◆ 具有只接听模式;
 ◆ 传输介质相互独立(采用外部驱动);
 ◆ 开放型网络架构;
 ◆ 多控制判优总线;
 ◆ 强抗电磁干扰性;
 ◆ 对于高优先权信息具有短的响应时间;
 ◆ 带有可编程唤醒功能的低功耗睡眠模式。
1.2 接口电路设计
 接口电路采用PCA82C250T CAN驱动器芯片。PCA82C250T是Philips公司的CAN总线驱动器,它将DSP的CAN控制器输出引脚的TTL电平变换为CAN总线上的差分信号;能以1 Mbps的速率工作在恶劣的电气环境中,具有较好的EMC特性,使总线工作稳定、可靠。[5]
 图2为接口电路原理。图中R9为FlexCAN终端的匹配电阻,电阻R1、R4、R5以及二极管D1组成电平转换电路。因为56F8300系列DSP是3.3 V供电,而PCA82C250T用5 V供电。

图2 FlexCAN模块接口电路原理图
2 FlexCAN软件设计
 根据系统设计要求,FlexCAN可以工作在不同的模式,如收发模式、只接听模式、节电模式、调试模式等;而几乎每个系统在开发过程中,都要经过调试环节,因此调试模式是系统软件开发过程中很重要的一步。
2.1 调试模式
 在系统调试时,往往让CAN控制器工作在调试模式(也称为“自测试模式”),以检查CAN控制器是否工作正常。在调试模式下,FlexCAN和外部CAN总线不是同步状态,数据不从CANTX口发出,也不从CANRX口读入,而是在FlexCAN内部传输。通过检查寄存器的值判断工作是否正常。调试模式由FRRZ1决定,当FRZ1位为1时,HALT位被置位,调试模式开始运行。
2.2 软件流程
 软件设计分为系统初始化、FlexCAN模块初始化和传输数据三个部分。这三部分的软件流程分别如图3、图4、图5所示。

图3 主程序流程 图4 FlexCAN初始化流程 图5 传输数据流程
2.3 调试模式例程
 下面的程序是56F8346的FlexCAN调试模式的汇编源代码,MB0配置为发送,MB1配置为接收。比特率设定为500 kbps,CAN总线频率设定为2 MHz。
 System_Init:;系统初始化
 move.w#$81,x:>>PLLCR;配置锁相环
 move.w#8507,x:>>PLLDB;设置时钟预分频
 wait_PLL:
 move.wx:>>PLLSR,A
 bftstl#$20,A1
 bcs wait_PLL;等待锁相环锁定
 move.w#$82,x:>>PLLCR
 FlexCAN_Init:;FlexCAN初始化
 move.w#$200,x:>>FCMCR
 ;配置FlexCAN模块软复位模式
 wait_debug:
 move.wx:>>FCMCR,A
 bftstl#$100,A1
 bcs wait_debug;等待进入调试模式
 move.w#$81,x:>>FCMAXMB;配置邮箱
 move.w#$80,x:>>FCMB0_Control
 move.w#$40,x:>>FCMB1_Control
 move.w#0,x:>>FCMB1_ID_HIGH
 move.w#0,x:>>FCMB1_ID_LOW
 move.w#$ffef,x:>>FCRXGMASK_H
 move.w#$fffe,x:>>FCRXGMASK_L
 move.w#$ffef,x:>>FCRX14MASK_H
 move.w#$fffe,x:>>FCRX14MASK_L
 move.w#$ffef,x:>>FCRX15MASK_H
 move.w#$fffe,x:>>FCRX15MASK_L
 move.w#0,x:>>FCIMASK1
 move.w#$1d00,x:>>FCCTL1
 move.w#$0060,x:>>FCCTL0
 move.w#$4000,x:>>FCMCR
 transmit:;配置传输模式
 bfset#$80,x:>>FCMB0_Control
 move.w#0,x:>>FCMB1_ID_HIGH
 move.w#0,x:>>FCMB1_ID_LOW
 move.w#0,x:>>FCMB0_DATA0
 move.w#$ffff,x:>>FCMB0_DATA1
 move.w#0,x:>>FCMB0_DATA2
 move.w#$ffff,x:>>FCMB0_DATA3
 bfset #$8,x:>>FCMB0_Control
 bfset #$c0,x:>>FCMB0_Control
 ;送控制字,使能邮箱
 wait_transmit:
 move.w x:>>FCMB0_Control,A
 bftstl #$40,A1
 bcc wait_transmit;等待传输完成
 LP: NOP
 jmpLP
结语
 CAN总线作为一种非常有前景的现场总线,被越来越多的研发人员所青睐。飞思卡尔DSP 56F8300的FlexCAN模块具有可靠性高、抗干扰能力强、配置灵活等优点,有市场应用前景。文章基于FlexCAN通信模块设计了一套软硬件方案,给出了接口电路原理、软件流程及汇编源代码。该方案已在笔者的56F8346的试验板上验证通过。此方案也可为其他工程应用提供借鉴。