完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
用这个CAN程序t通过pCAN和上位机通讯上位机发消息,邮箱16接收,收不到消息,实在想不出到底哪里错了,求指点
#include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" struct ECAN_REGS ECanbShadow; interrupt void ECanbR_ISR(void); void InitECanR(void); Uint32 MSGL = 0; Uint32 MSGH = 0; int Counts = 0; void main() { InitSysCtrl(); //系统初始化 InitXintf16Gpio(); //初始化16路Gpio InitECanGpio(); InitECanbGpio(); //初始化ECanb DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; PieVectTable.ECAN1INTB = &ECanbR_ISR; EDIS; InitECanb(); InitECanR(); IER = M_INT9; PieCtrlRegs.PIEIER9.bit.INTx8 = 1; //使能第9组中断第8个小中断,即ECAN1INTB PieCtrlRegs.PIEACK.bit.ACK9 = 1; //PIEACK置1 EINT; ERTM; for(;;) { } } interrupt void ECanbR_ISR(void) { if(ECanbRegs.CANRMP.all == 0x00010000) { ECanbRegs.CANRMP.all = 0xFFFFFFFF; MSGL = ECanbMboxes.MBOX16.MDL.all; MSGH = ECanbMboxes.MBOX16.MDH.all; Counts++; } PieCtrlRegs.PIEACK.bit.ACK9 = 1; ECanbRegs.CANOPC.all = 0; EINT; } void InitECanR(void) { EALLOW; ECanbShadow.CANtiOC.all = ECanbRegs.CANTIOC.all; ECanbShadow.CANTIOC.bit.TXFUNC = 1; ECanbRegs.CANTIOC.all = ECanbShadow.CANTIOC.all; ECanbShadow.CANRIOC.all = ECanbRegs.CANRIOC.all; ECanbShadow.CANRIOC.bit.RXFUNC = 1; ECanbRegs.CANRIOC.all = ECanbShadow.CANRIOC.all; ECanbShadow.CANMC.all = ECanbRegs.CANMC.all; ECanbShadow.CANMC.bit.CCR = 1; ECanbRegs.CANMC.all = ECanbShadow.CANMC.all; EDIS; do { ECanbShadow.CANES.all = ECanbRegs.CANES.all; }while(ECanbShadow.CANES.bit.CCE != 1); EALLOW; ECanbShadow.CANBTC.all = ECanbRegs.CANBTC.all; ECanbShadow.CANBTC.bit.BRPREG = 9; ECanbShadow.CANBTC.bit.TSEG2REG = 2; ECanbShadow.CANBTC.bit.TSEG1REG = 10; ECanbShadow.CANBTC.bit.SAM = 1; //采样三次取多次 ECanbRegs.CANBTC.all = ECanbShadow.CANBTC.all; ECanbShadow.CANMC.all = ECanbRegs.CANMC.all; ECanbShadow.CANMC.bit.CCR = 0; ECanbShadow.CANMC.bit.PDR = 0; ECanbShadow.CANMC.bit.DBO = 0; ECanbShadow.CANMC.bit.WUBA = 0; ECanbShadow.CANMC.bit.CDR = 0; ECanbShadow.CANMC.bit.ABO = 0; ECanbShadow.CANMC.bit.STM = 0; ECanbShadow.CANMC.bit.SRES = 0; ECanbShadow.CANMC.bit.MBNR = 0; ECanbRegs.CANMC.all = ECanbShadow.CANMC.all; EDIS; ECanbMboxes.MBOX0.MSGCTRL.all = 0; ECanbMboxes.MBOX1.MSGCTRL.all = 0; ECanbMboxes.MBOX2.MSGCTRL.all = 0; ECanbMboxes.MBOX3.MSGCTRL.all = 0; ECanbMboxes.MBOX4.MSGCTRL.all = 0; ECanbMboxes.MBOX5.MSGCTRL.all = 0; ECanbMboxes.MBOX6.MSGCTRL.all = 0; ECanbMboxes.MBOX7.MSGCTRL.all = 0; ECanbMboxes.MBOX8.MSGCTRL.all = 0; ECanbMboxes.MBOX9.MSGCTRL.all = 0; ECanbMboxes.MBOX10.MSGCTRL.all = 0; ECanbMboxes.MBOX11.MSGCTRL.all = 0; ECanbMboxes.MBOX12.MSGCTRL.all = 0; ECanbMboxes.MBOX13.MSGCTRL.all = 0; ECanbMboxes.MBOX14.MSGCTRL.all = 0; ECanbMboxes.MBOX15.MSGCTRL.all = 0; ECanbMboxes.MBOX16.MSGCTRL.all = 0; ECanbMboxes.MBOX17.MSGCTRL.all = 0; ECanbMboxes.MBOX18.MSGCTRL.all = 0; ECanbMboxes.MBOX19.MSGCTRL.all = 0; ECanbMboxes.MBOX20.MSGCTRL.all = 0; ECanbMboxes.MBOX21.MSGCTRL.all = 0; ECanbMboxes.MBOX22.MSGCTRL.all = 0; ECanbMboxes.MBOX23.MSGCTRL.all = 0; ECanbMboxes.MBOX24.MSGCTRL.all = 0; ECanbMboxes.MBOX25.MSGCTRL.all = 0; ECanbMboxes.MBOX26.MSGCTRL.all = 0; ECanbMboxes.MBOX27.MSGCTRL.all = 0; ECanbMboxes.MBOX28.MSGCTRL.all = 0; ECanbMboxes.MBOX29.MSGCTRL.all = 0; ECanbMboxes.MBOX30.MSGCTRL.all = 0; ECanbMboxes.MBOX31.MSGCTRL.all = 0; do { ECanbShadow.CANES.all = ECanbRegs.CANES.all; }while(ECanbShadow.CANES.bit.CCE != 0); ECanbRegs.CANGIM.all = 0x00000000; ECanbRegs.CANMIM.all = 0x00000000; ECanbRegs.CANMIL.all = 0xFFFFFFFF; ECanbRegs.CANME.all = 0x00000000; ECanbMboxes.MBOX16.MSGID.bit.IDE = 0; ECanbMboxes.MBOX16.MSGID.bit.STDMSGID = 0x0314; ECanbMboxes.MBOX16.MSGID.bit.AAM = 0; ECanbMboxes.MBOX16.MSGID.bit.AME = 0; ECanbRegs.CANMD.all = 0xFFFF0000; ECanbShadow.CANME.all = ECanbRegs.CANME.all; ECanbShadow.CANME.bit.ME16 = 1; ECanbRegs.CANME.all = ECanbShadow.CANME.all; ECanbMboxes.MBOX16.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX16.MSGCTRL.bit.RTR = 0; EALLOW; ECanbShadow.CANMC.all = ECanbRegs.CANMC.all; ECanbShadow.CANMC.bit.STM = 0; // Configure CAN for self-test mode ECanbShadow.CANMC.bit.SCB = 1; // eCAN mode (reqd to access 32 mailboxes) ECanbRegs.CANMC.all = ECanbShadow.CANMC.all; EDIS; ECanbRegs.CANMIL.all = 0xFFFF0000; ECanbRegs.CANMIM.all = 0xFFFFFFFF; EALLOW; ECanbShadow.CANGIM.all = ECanbRegs.CANGIM.all; ECanbShadow.CANGIM.bit.AAIM = 1; ECanbShadow.CANGIM.bit.WDIM = 1; ECanbShadow.CANGIM.bit.WUIM = 1; ECanbShadow.CANGIM.bit.BOIM = 1; ECanbShadow.CANGIM.bit.EPIM = 1; ECanbShadow.CANGIM.bit.WLIM = 1; ECanbShadow.CANGIM.bit.I0EN = 1; ECanbShadow.CANGIM.bit.I1EN = 1; ECanbShadow.CANGIM.bit.GIL =1; ECanbRegs.CANGIM.all = ECanbShadow.CANGIM.all; ECanbRegs.CANRMP.all = 0xFFFFFFFF; ECanbRegs.CANTA.all = 0xFFFFFFFF; ECanbRegs.CANGIF0.all = 0xFFFFFFFF; ECanbRegs.CANGIF1.all = 0xFFFFFFFF; } |
|
相关推荐
3个回答
|
|
|
最简单的方式就在网上找个能用的,然后在这基础上再修改
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
4815 浏览 1 评论
用stm32103c8t6做平衡小车在调pid的时候遇到了困难
7784 浏览 0 评论
1253 浏览 0 评论
12830 浏览 1 评论
15248 浏览 0 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 16:01 , Processed in 0.565035 second(s), Total 52, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
5866