DSP28335-CAN通讯程序-中文说明

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includeDSP2833x_Device.h//DSP2833xHeaderfileIncludeFile#includeDSP2833x_Examples.h//DSP2833xExamplesIncludeFile//Prototypestatementsforfunctionsfoundwithinthisfile.voidmailbox_check(int32T1,int32T2,int32T3);voidmailbox_read(int16i);//GlobalvariableforthisexampleUint32ErrorCount;Uint32PassCount;Uint32MessageReceivedCount;Uint32TestMbox1=0;Uint32TestMbox2=0;Uint32TestMbox3=0;voidmain(void){Uint16j;//eCAN控制寄存器需要使用32位的读/写访问。因此,为此示例创建一组影子寄存器。这些影子寄存器将用于确保访问是32位而不是16位。structECAN_REGSECanbShadow;//步骤1.初始化系统控制:PLL,看门狗,启用外设时钟。该示例功能可在DSP2833x_SysCtrl.c文件中找到。InitSysCtrl();//步骤2.初始化GPIO:在DSP2833xGpio.c文件中找到该示例函数,并说明如何将GPIO设置为默认状态。//InitGpio();//Skippedforthisexample//在这个例子中,使用GPIO寄存器在这里配置CAN引脚。这个函数在DSP2833x_ECan.c中找到InitECanGpio();//步骤3。清除所有中断并初始化PIE矢量表:禁用CPU中断DINT;//将PIE控制寄存器初始化为默认状态。默认状态是禁止所有的PIE中断并清除标志。这个函数可以在DSP2833x_PieCtrl.c文件中找到。InitPieCtrl();//禁用CPU中断并清除所有CPU中断标志:IER=0x0000;IFR=0x0000;//InitializethePIEvectortablewithpointerstotheshellInterrupt//ServiceRoutines(ISR).//Thiswillpopulatetheentiretable,eveniftheinterrupt//isnotusedinthisexample.Thisisusefulfordebugpurposes.//TheshellISRroutinesarefoundinDSP2833x_DefaultIsr.c.//ThisfunctionisfoundinDSP2833x_PieVect.c.InitPieVectTable();//步骤4.初始化所有器件外设:此功能可在DSP2833x_InitPeripherals.c中找到.//InitPeripherals();//Notrequiredforthisexample//第5步。用户特定的代码,启用中断:MessageReceivedCount=0;ErrorCount=0;PassCount=0;//eCAN控制寄存器需要32位访问。如果要写入单个位,编译器可能会将此访问分解为16位访问。此处介绍的一种解决方案是使用影子寄存器来强制32位访问。//将整个寄存器读入一个影子寄存器。这个访问将是32位。更改所需的位并将其值复制到32位写入的eCAN寄存器。//为eCAN传输配置eCANRX和TX引脚EALLOW;ECanbShadow.CANTIOC.all=ECanbRegs.CANTIOC.all;//eCANI/O控制寄存器ECanbShadow.CANTIOC.bit.TXFUNC=1;//CANTX引脚用于CAN发送功能ECanbRegs.CANTIOC.all=ECanbShadow.CANTIOC.all;ECanbShadow.CANRIOC.all=ECanbRegs.CANRIOC.all;//eCANI/O控制寄存器ECanbShadow.CANRIOC.bit.RXFUNC=1;//CANRX引脚用于CAN发送功能ECanbRegs.CANRIOC.all=ECanbShadow.CANRIOC.all;EDIS;//禁用所有的邮箱。//因为写入整个寄存器(而不是一个位域),影子寄存器是不需要的。ECanbRegs.CANME.all=0;//邮箱激活寄存器:激活或者屏蔽独立的邮箱//邮箱可以一次写入16位或32位。写入TRANSMIT邮箱的MSGID字段MBOX0-15。ECanbMboxes.MBOX0.MSGID.all=0x9555AAA0;//邮箱标识符寄存器ECanbMboxes.MBOX1.MSGID.all=0x9555AAA1;ECanbMboxes.MBOX2.MSGID.all=0x9555AAA2;ECanbMboxes.MBOX3.MSGID.all=0x9555AAA3;ECanbMboxes.MBOX4.MSGID.all=0x9555AAA4;ECanbMboxes.MBOX5.MSGID.all=0x9555AAA5;ECanbMboxes.MBOX6.MSGID.all=0x9555AAA6;ECanbMboxes.MBOX7.MSGID.all=0x9555AAA7;ECanbMboxes.MBOX8.MSGID.all=0x9555AAA8;ECanbMboxes.MBOX9.MSGID.all=0x9555AAA9;ECanbMboxes.MBOX10.MSGID.all=0x9555AAAA;ECanbMboxes.MBOX11.MSGID.all=0x9555AAAB;ECanbMboxes.MBOX12.MSGID.all=0x9555AAAC;ECanbMboxes.MBOX13.MSGID.all=0x9555AAAD;ECanbMboxes.MBOX14.MSGID.all=0x9555AAAE;ECanbMboxes.MBOX15.MSGID.all=0x9555AAAF;//写入RECEIVE邮箱的MSGID字段MBOX16-31ECanbMboxes.MBOX16.MSGID.all=0x9555AAA0;ECanbMboxes.MBOX17.MSGID.all=0x9555AAA1;ECanbMboxes.MBOX18.MSGID.all=0x9555AAA2;ECanbMboxes.MBOX19.MSGID.all=0x9555AAA3;ECanbMboxes.MBOX20.MSGID.all=0x9555AAA4;ECanbMboxes.MBOX21.MSGID.all=0x9555AAA5;ECanbMboxes.MBOX22.MSGID.all=0x9555AAA6;ECanbMboxes.MBOX23.MSGID.all=0x9555AAA7;ECanbMboxes.MBOX24.MSGID.all=0x9555AAA8;ECanbMboxes.MBOX25.MSGID.all=0x9555AAA9;ECanbMboxes.MBOX26.MSGID.all=0x9555AAAA;ECanbMboxes.MBOX27.MSGID.all=0x9555AAAB;ECanbMboxes.MBOX28.MSGID.all=0x9555AAAC;ECanbMboxes.MBOX29.MSGID.all=0x9555AAAD;ECanbMboxes.MBOX30.MSGID.all=0x9555AAAE;ECanbMboxes.MBOX31.MSGID.all=0x9555AAAF;//将邮箱0-15配置为Tx,将16-31配置为Rx//由于这是写入整个寄存器(而不是位字段),所以不需要影子寄存器。ECanbRegs.CANMD.all=0xFFFF0000;//邮箱方向寄存器//启用所有邮箱//由于这是写入整个寄存器(而不是位字段),所以不需要影子寄存器。ECanbRegs.CANME.all=0xFFFFFFFF;//指定8位将被发送/接收ECanbMboxes.MBOX0.MSGCTRL.bit.DLC=8;//消息控制寄存器,DLC位中的数字决定了被发送或接受的字节数,合适的范围是0-8.ECanbMboxes.MBOX1.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX2.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX3.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX4.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX5.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX6.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX7.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX8.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX9.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX10.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX11.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX12.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX13.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX14.MSGCTRL.bit.DLC=8;ECanbMboxes.MBOX15.MSGCTRL.bit.DLC=8;//设置为没有请求远程帧//由于RTR位在复位时未定义,因此必须将其初始化为适当的值ECanbMboxes.MBOX0.MSGCTRL.bit.RTR=0;//消息控制寄存器远程发送请求位ECanbMboxes.MBOX1.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX2.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX3.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX4.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX5.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX6.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX7.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX8.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX9.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX10.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX11.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX12.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX13.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX14.MSGCTRL.bit.RTR=0;ECanbMboxes.MBOX15.MSGCTRL.bit.RTR=0;//写入邮箱MBOX0-15的RAM字段//消息数据寄存器ECanbMboxes.MBOX0.MDL.all=0x9555AAA0;ECanbMboxes.MBOX0.MDH.all=0x89ABCDEF;ECanbMboxes.MBOX1.MDL.all=0x9555AAA1;ECanbMboxes.MBOX1.MDH.all=0x89ABCDEF;ECanbMboxes.MBOX2.MDL.all=0x9555AAA2;ECanbMboxes.MBOX2.MDH.all=0x89ABCDEF;ECanbMboxes.MBOX3.MD

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功