热度 14
2012-11-12 14:54
5416 次阅读|
1 个评论
TMS320F28335 之 eCAN 1 、内嵌 CAN 控制器 TMS320F28335 内有 2 个增强型 CAN 总线控制器( eCAN ),完全兼容 CAN2.0B 标准。 图 eCAN 模块的结构 图 eCAN 模块方块图及接口电路 eCAN 是具有内部 32 位结构的 CAN 控制器。 eCAN 模块由 CAN 协议核心( CPK )和消息控制器组成,消息控制器又包括三个部分: 1 )存储器管理单元( MMU ),包含 CPU 接口电路、接收控制单元和计时器处理单元; 2 )邮箱 RAM ,可存储 32 个消息; 3 )控制寄存器和状态寄存器。 CPK 的功能是根据 CAN 协议解码所有在 CAN 总线上接收到的消息,并将这些消息转移到接收缓冲器中;根据 CAN 协议在 CAN 总线上发送消息。 消息控制器的功能是决定由 CPK 接收到的任意消息,必须由 CPU 决定是否保留或者舍弃。在模块初始化阶段, CPU 指定了程序使用消息控制器的所有消息标识符。 消息控制器的另一功能是根据消息的优先级将要发送的消息传输到 CPK 。 计时器处理单元由定时计数器组成,用于在所有接收或发送的消息中添加一个时间标记。 工作原理: 1 )当 CPK 接收到一个有效的消息后,消息控制器的接收控制单元决定该消息是否必须存储到邮箱 RAM 的 32 个消息对象里。 接收控制单元检查消息状态、标识符以及所有消息对象屏蔽寄存器,从而决定存放消息的合适的邮箱位置。接收到的消息被存储在通过接受过滤的第一个邮箱。 如果接收控制单元不能决定由哪个邮箱来存储接收到的消息,那么该消息将被舍弃。 2 )当一个消息被发送时,消息控制器传送消息到 CPK 的发送缓冲器。 在下一总线空闲状态时,开始消息的发送。 当多条消息需要被发送时,在准备发送的消息中,具有最高优先级的消息将首先由消息控制器转移到 CPK 。 如果两个邮箱具有相同的优先级,那么具有更高序号的邮箱首先被发送。 工作模式: eCAN 模块由两种工作模式, SCC 模式和 eCAN 模式。 SCC 模式是 eCAN 模式的简化功能模式,该模式只有 16 个邮箱(邮箱号 0-15 )可用;没有时间标记功能,可用的接收屏蔽寄存器数目也少。该模式为默认状态。 工作模式通过寄存器 CANMC 的第 13 位( SBC )来选择。 2 、 eCAN 模块的复用 GPIO 口设置 两个 eCAN 模块 A 、 B 对应的 IO 口设置有多种选择。 模块 A 对应的 IO 口有 GPIO30 和 GPIO31 、 GPIO18 和 GPIO19 两种选择。 模块 B 对应的 IO 口有 GPIO8 和 GPIO10 、 GPIO12 和 GPIO13 、 GPIO16 和 GPIO17 、 GPIO20 和 GPIO21 四种选择。 在 IO 口初始化时要注意一定要和实际的接口定义对应。 在 TI 的 CAN 例程中已经完整的给出了这些 IO 口的初始化语句,选择要使用的语句保留,不使用的语句注释掉即可。 3 、 CAN 通讯波特率设置 通过位时序配置寄存器 CANBTC 对通讯波特率进行设置。 设置步骤: System clock : f_sys = 150 MHz CAN clock : f_can = f_sys / 2 = 75 MHz CAN clock period : t_ can = 1 / f_ can = 13 . 3333333 ns Actual bit rate = 1 Mbit/s Actual bit time = 1000 ns CAN bus length = 10 m, with 5 ns/m signal delay time. Propagation delay time : 2 * ( transceiver loop delay + bus line delay ) = 400 ns BRP reg = 4 BRP = BRP reg + 1 = 5 ( 5 分频) CAN time quantum : tq = 5 * t_ can = 66.6666667 ns Actual bit time = 15 tq = 1000 ns Prop_Seg = 8 tq 400ns. Sync_Seg = 1 tq . Phase_seg1 + Phase_Seg2 = ( 15 – 8 – 1 ) tq = 6 tq Phase_seg1 = 3 tq; Phase_Seg2 = 3 tq 1. If Phase_Seg1 + Phase_Seg2 is even, then Phase_Seg2 = Phase_Seg1. If the sum is odd, Phase_Seg2 = Phase_Seg1 + 1. 2. Phase_Seg2 should be at least 2 tq. Bit_time = Prop_Seg + Sync_Seg + Phase_seg1 + Phase_seg2 = 15 tq TSEG1 = Prop_Seg + Phase_seg1 = 11 tq TSEG1 reg = TSEG1 – 1 =10 TSEG2 = Phase_seg2 = 3 tq TSEG2 reg = TSEG2 – 1 = 2 具体参考 TI 的手册或者程序。 4 、 CAN 通讯例子 使用 USBCAN 卡和开发板进行 CAN 通讯。 设置 3 个邮箱,两个发送邮箱(邮箱号 24,25 ),一个接收邮箱(邮箱号 26 ); 发送邮箱 24 :用于发送两路 ADC 转换的结果值; 发送邮箱 25 :用于持续发送固定帧; 接收邮箱 26 :接收指定消息帧。 5 、小结 本例只是一个简单的 CAN 总线收发程序,实现了 CAN 总线的消息收发。