DSP的CAN总线通信基础设计.docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DSP的CAN总线通信基础设计

DSP芯片的CAN总线通信设计本文介绍了基于DSP56F807的CAN通信各模块的初始化程序,并具体实现了以下功能:甲方通过串口调试助手向下位机发送数据s,再通过CAN总线将数据传给乙方增加乙方PWM占空比(发送m减小乙方PWM占空比),发送成功LED1闪烁两下,然后乙方通过CAN总线把当前PWM占空比的值返回给甲,然后甲通过串口将数据传给上位机串口调试助手。CAN总线介绍MSCAN模块是一种CAN协议的通信控制器。CAN总线通信是一种串行通信,能够通过多种媒介进行最高可达1Mb/s的短距离通信,其最远的通信距离为10km。CAN总线的节点数取决于总线驱动电路,目前可以支持110个节点[1]。本文实现效果甲方通过串口调试助手向下位机发送数据s,再通过CAN总线将数据传给乙方增加乙方PWM占空比(发送m减小乙方PWM占空比),发送成功LED1闪烁两下,然后乙方通过CAN总线把当前PWM占空比的值返回给甲,然后甲通过串口将数据传给上位机串口调试助手。3.各功能模块的初始化设置3.1CAN初始化配置编程步骤如下:设置软件复位模式,MSCAN模式的改变配置/初始化必须通过复位来实现。CANCTL0=0x0001;设置位时间。位时间=同步段+传播时间段+相位缓存段1+相位缓存段2。同步段:用于各节点同步。传播时间段:补偿网络物理延时。相位缓存段1:补偿沿相位误差。CANBTR1=0x0023;通过设置同步时间和分频因子设置波特率。CANBTR0=0x0053;(4)通过接收符ID过滤控制寄存器CANIDAC设置识别码滤波模式。CANIDAC=0x0000;(5)设置接收符ID过滤屏蔽码寄存器CANIDAR0~7,在进行接收符ID的过滤比较时,接收符ID和比较码的那些在屏蔽码寄存器中清零的对应位必须完全相同。因为是实验测试程序,所有的屏蔽码位都为0,接收所有的数据帧。. CANIDAR0=0x0020;CANIDAR1=0x0000;CANIDAR2=0x0000;CANIDAR3=0x0000;CANIDAR4=0x0000;CANIDAR5=0x0000;CANIDAR6=0x0000;CANIDAR7=0x0000;(6)设置接收符ID过滤比较码寄存器。该寄存器共有8个寄存器,这些16位的寄存器的高8位保留,低8位是屏蔽位。屏蔽位置1表示在进行接收符ID过滤比较时,对应的ID位必须和接收符ID过滤寄存器的相应位一致。CANIDMR0=0x0000;CANIDMR1=0x0000;CANIDMR2=0x0000;CANIDMR3=0x0000;CANIDMR4=0x0000;CANIDMR5=0x0000;CANIDMR6=0x0000;CANIDMR7=0x0000;(7)设置发送模式,在调试时采用自发自收模式,最后实现功能时修改对应寄存器采用互发互收模式。CANCTL1=0x0080;(8)初始化完成,退出软件复位模式。CANCTL0=0x0000;(9)等待MSCAN模块完成和总线同步。while(!CANCTL00x0010);3.2CAN控制器发送模块初始化编程(1)通过CAN_TBx_IDR0、 CAN_TBx_IDR1设置发送缓冲接收符ID 。CAN_TB0_IDR0=0x0020;CAN_TB0_IDR1=0x0000;CAN_TB1_IDR0=0x0021;CAN_TB1_IDR1=0x0020;CAN_TB2_IDR0=0x0022;CAN_TB2_IDR1=0x0020;(2)通过CAN_TB0_DLR设置发送缓冲区的数据长度CAN_TB0_DLR=0x0008;CAN_TB1_DLR=0x0008;CAN_TB2_DLR=0x0008;(3)通过CAN_TBx_DLR,CAN_TBx_TBPR设置发送缓冲区的优先级。CAN_TB0_TBPR=0x0020;CAN_TB1_TBPR=0x0010;CAN_TB2_TBPR=0x0030;(4)通过GPR3设置MSCAN接收发送中断级别。GPR3=0x7500;3.3 定时器初始化程序void timerinit(void){GPR10=0x0100;//定时器0最低优先级TMRA0_CTRL=0x0000;//定时器0停止计数TMRA0_CMP1=62500; //为定时器比较寄存器TMRA0_CMP1和//TMRA0_CMP2预置值,该值将与//TMRA0_CNTR相比较TMRA0_CMP2=0x0000;TMRA0_LOAD=0xffff;//初始化计数器的预置值TMRA0_CNTR=0xffff;//存放定时器模块相应通道的计数值为0xff TMRA0_SCR =0x0000; //使能比较寄存器中断TMRA0_C

文档评论(0)

wuyuetian + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档