CAN总线通信
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 4.初始化每个消息对象或将其MsgVal位为 无效。(纳入下周计划)
• 5.复位INIT位为0。
• CAN0CN &= ~0x41;
关于设定时间参数
• CAN控制器时钟的获取
• CAN控制器的时钟(Fsys)从CIP-51系统 时钟(SYSCLK)获得。
• SYSCLK从何而来
• void OSCILLATOR_Init(void) • { • U8 SFRPAGE_save = SFRPAGE; • SFRPAGE = CONFIG_PAGE; • OSCICN = 0x87; • SFRPAGE = ACTIVE_PAGE; • }
CAN总线通信
CAN的初始化
• CAN控制器通常使用以下步骤进行初始化: • 1.将SFRPAGE寄存器设置到寄存器CAN页面(0x0C页)。 • 2.将CAN0CN中INIT和CCE位配置为1。位定义见CAN用 户指南。 • 3.在位定时寄存器和BRP扩展寄存器设置时间参数。 • 4.初始化每个消息对象或将其MsgVal位为无效。 • 5.复位INIT位为0。
• 1.将SFRPAGE寄存器设置到寄存器CAN页 面(0x0C页)。 • SFRPAGE = CAN0_PAGE; • (0x0c,500的头文件定义为CAN0_PAGE)
• 2.将CAN0CN中INIT和CCE位配置为1。位 定义见CAN用户指南。
• CAN0CN|= 0x41;
• 3.在位定时寄存器和BRP扩展寄存器设置时 间参数。 • CAN0BT = 0x1402
125ns
位时间是8tq
Sync_Seg是一个常数1 tq。 Prop_Seg必须大于或等于400纳秒的传输延 迟,因此选择是4 tq。
• 位时间剩下的时间段(3TQ)分配在如图Phase_Seg1和 Phase_Seg2之间 Phase_Seg1 + Phase_Seg2 = Bit_Time – (Sync_Seg + Prop_Seg) • 基于此公式,Phase_Seg1=1TQ和Phase_Seg2= 2 TQ。 • 1.如果Phase_Seg1+ Phase_Seg2是偶数,则 Phase_Seg2= Phase_Seg1。 • 如果总和为奇数,Phase_Seg2= Phase_Seg1+1。 • 2. Phase_Seg2至少应为2 TQ。
位定时器的值
BRPE = BRP – 1 = BRP Extension Register wenku.baidu.com 0x0002 SJWp = SJW – 1 = minimum (4, 1) – 1 = 0 TSEG1 = Prop_Seg + Phase_Seg1 – 1 = 4 + 1 – 1 = 4 TSEG2 = Phase_Seg2 – 1 = 1 Bit Timing Register = (TSEG2 x 0x1000) + (TSEG1 x 0x0100) + (SJWp x 0x0040) + BRPE = 0x1402
• CAN0CFG默认一分频SYSCLK
• 故得到24MHz的CAN控制器时钟
我们需要1Mbps的传输速率 通过CAN0BT = 0x1402向位定时寄存器赋值来实现 CAN网络上传输的每1位都有4段(Sync_Seg, Prop_Seg, Phase_Seg1, and Phase_Seg2) 这些段的总和决定了CAN位时间 (1/比特率)。所需的比特率是1兆比特/秒;因此,所需要的位时间是 1000纳秒。