全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
这是我从书上拷下来的程序,我自己试过是可以的,就是CAN的自测试,有发送和接收,你可以仿照着根据自己想要的结果来改。端口随便定义就行了。不知道符不符合你的要求。/*功能描述: ECAN自测试程序,CAN模块工作在自测试模式。MBX0发送到MBX16*MBX1发送到MBX17。该程序不停地高速背靠背传输数据,检查接数据的正确性*/#include DSP28_Device.hvoid mailbox_check(int32 T1, int32 T2, int32 T3);void mailbox_read(int16 i);/Uint32 ErrorCount = 0;Uint32 MessageReceivedCount = 0;Uint32 TestMbox1 = 0;Uint32 TestMbox2 = 0;Uint32 TestMbox3 = 0;void CAN_INIT() struct ECAN_REGS ECanaShadow; EALLOW; GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1; / 设置GPIOF6为CANTX GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1; / 设置GPIOF7为CANRX EDIS;/*eCAN 控制寄存器需要32位访问。如果想向一个单独位进行写操作,编译器可能会使其进入16位访问。这儿引用了一种解决方法,就是用影子寄存器迫使进行32位访问。 把整个寄存器读入一个影子寄存器。 这个访问将是32位的。用32位写操作改变需要改的位,然后把该值拷贝回eCAN寄存器*/ EALLOW; ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all; / 把CANTIOC读入影子寄存器 ECanaShadow.CANTIOC.bit.TXFUNC = 1; / 外部引脚I/O使能标志位。/ TXFUNC1 CANTX引脚被用于CAN发送功能。/ TXFUNC0 CANTX引脚被作为通用I/O引脚被使用 ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all; / 把配置好的寄存器值回写 ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all; / 把CANRIOC读影子寄存器 ECanaShadow.CANRIOC.bit.RXFUNC = 1; / 外部引脚I/O使能标志位。/ RXFUNC1 CANRX引脚被用于CAN接收功能。/ RXFUNC0 CANRX引脚被作为通用I/O引脚被使用。 ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all; / 把配置好的寄存器值回写 EDIS;/ 在配置邮箱ID值之前,CANME对应的位必须复位,/ 如果CANME寄存器中对应的位被置位,则ID写入操作无效。ECanaRegs.CANME.all = 0; / 复位所有的邮箱 ECanaMboxes.MBOX0.MID.all = 0x9555AAA0; / 配置发送邮箱0的ID:扩展标识符29位 ECanaMboxes.MBOX1.MID.all = 0x9555AAA1; / 配置发送邮箱1的ID:扩展标识符29位 ECanaMboxes.MBOX16.MID.all = 0x9555AAA0; / 确定接收邮箱16的ID ECanaMboxes.MBOX17.MID.all = 0x9555AAA1; / 确定接收邮箱17的ID / 把邮箱015 配置为发送邮箱 , 把邮箱1631 配置为接收邮箱 ECanaRegs.CANMD.all = 0xFFFF0000; ECanaRegs.CANME.all = 0xFFFFFFFF; / CAN模块使能对应的邮箱, ECanaMboxes.MBOX0.MCF.bit.DLC = 8; ECanaMboxes.MBOX1.MCF.bit.DLC = 8; / 把发送,接收数据的长度定义为8位 ECanaMboxes.MBOX0.MCF.bit.RTR = 0; / 无远程帧请求 / 因为RTR位在复位后状态不定,因此在程序进行初始化的时候必须对该位赋值。 ECanaMboxes.MBOX1.MCF.bit.RTR = 0;/ 把待发送的数据写入发送邮箱 ECanaMboxes.MBOX0.MDRL.all = 0x00112233; ECanaMboxes.MBOX0.MDRH.all = 0x44556677; ECanaMboxes.MBOX1.MDRL.all = 0x8899AABB; ECanaMboxes.MBOX1.MDRH.all = 0xCCDDEEFF; EALLOW;/ 邮箱中断屏蔽寄存器。上电后所有的中断屏蔽位都清零且停止中断使能。/ 这些位允许独立屏蔽任何邮箱中断。 ECanaRegs.CANMIM.all = 0xFFFFFFFF; / CANMIM .BIT.X1 邮箱中断被使能(X131)/ CANMIM .BIT.X0 邮箱中断被禁止(X131) ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; / 把CANMC读入影子寄存器 ECanaShadow.CANMC.bit.CCR = 1; / 改变配置请求位 ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; / 把配置好的寄存器值回写 EDIS;/*CPU要求对配置寄存器CANBTC和SCC的接收屏蔽寄存器(CANGAM,LAM0和LAM3)进行写操作。对该位置位后,CPU必须等待,直到CANES寄存器的CCE标志位在送入CANBTC寄存器之前为1 */do ECanaShadow.CANES.all = ECanaRegs.CANES.all; while(ECanaShadow.CANES.bit.CCE != 1 ); / 当CCE1时可以对CANBTC进行操作。 / 配置波特率 EALLOW; ECanaShadow.CANBTC.all = ECanaRegs.CANBTC.all; / 把CANBTC读入影子寄存器 ECanaShadow.CANBTC.bit.BRP = 149; / (BRP+1)150, 最小时间单位TQ1us ECanaShadow.CANBTC.bit.TSEG2 = 2; / 位定时bit-time(TSEG1+1)+(TSEG1+1)+1 ECanaShadow.CANBTC.bit.TSEG1 = 3; / bit-time8us, 所以波特率为125Kpbs ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all; / 把配置好的寄存器值回写 ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; / 把CANMC读入影子寄存器 ECanaShadow.CANMC.bit.CCR = 0 ; / 设置CCR0, CPU请求正常模式 ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; / 把配置好的寄存器值回写 EDIS; do ECanaShadow.CANES.all = ECanaRegs.CANES.all; while(ECanaShadow.CANES.bit.CCE != 0 ); / 等待 CCE 位被清零/ 配置eCAN为自测试模式,使能eCAN的增强特性 EALLOW; ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; ECanaShadow.CANMC.bit.STM = 1; / 配置CAN 为自测试模式 / CANMC.bit.STM0,正常模式,CANMC.bit.STM1,自测试模式 ECanaShadow.CANMC.bit.SCM = 1; / 选择HECC工作模式 ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; EDIS;void main(void) Uint16 j; InitSysCtrl(); / 系统初始化程序,该子程序在DSP28_sysctrl.c中 DINT; / 关闭总中断 IER = 0x0000; / 关闭外设中断 IFR = 0x0000; / 请中断标志 CAN_INIT();/ 开始循环发送数据 while(1) ECanaRegs.CANTRS.all = 0x00000003; while(ECanaRegs.CANTA.all != 0x00000003 ) ; ECanaRegs.CANTA.all = 0x0000FFFF; MessageReceivedCount+; for(j = 0; jMDRL.all; / 读出当前邮箱数据低4字节 TestMbox
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论