DSP的CAN总线通信基础设计.docx
文本预览下载声明
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
显示全部