dsp调试can一点心得
调试的过程也就是学习的过程,无前人领路,只有自己摸索,
不免要耗费更多的时间和精力,从看书到调试到完全调通,用了差不多一星期的时间, 当然不是全满,嘿嘿,偶尔还是要玩玩,在这里总结一下,脑子不好用,日后必定就忘记了这宝贵的经历。 1:如何配置can的问题
首先要按照书上所讲的做基本配置, (ECanaShadow == ECanaRegs) GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1; //定义为can功能 GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1; //定义为can功能 ECanaShadow.CANTIOC.bit.TXFUNC = 1; //定义为can发送功能
ECanaShadow.CANRIOC.bit.RXFUNC = 1; //定义为can接收功能
然后再不使能邮箱的情况下作如下设置:ECanaRegs.CANME.all = 0; //不使能邮箱 ECanaRegs.CANMD.all = 0xFFFF0000; /*0~15 is TX,16~31 is RX*/ 设置邮箱ID号:
/*发送邮箱的ID号*/
ECanaMboxes.MBOX0.MID.all = 0xa0000000; //mid.aam=1 自动应答模式 ECanaMboxes.MBOX1.MID.all = 0x9555AAA1; ECanaMboxes.MBOX2.MID.all = 0x9555AAA2; ECanaMboxes.MBOX3.MID.all = 0x9555AAA3; ECanaMboxes.MBOX4.MID.all = 0x9555AAA4; ECanaMboxes.MBOX5.MID.all = 0x9555AAA5; ECanaMboxes.MBOX6.MID.all = 0x9555AAA6; ECanaMboxes.MBOX7.MID.all = 0x9555AAA7; ECanaMboxes.MBOX8.MID.all = 0x9555AAA8; ECanaMboxes.MBOX9.MID.all = 0x9555AAA9; ECanaMboxes.MBOX10.MID.all = 0x9555AAAA; ECanaMboxes.MBOX11.MID.all = 0x9555AAAB; ECanaMboxes.MBOX12.MID.all = 0x9555AAAC; ECanaMboxes.MBOX13.MID.all = 0x9555AAAD; ECanaMboxes.MBOX14.MID.all = 0x9555AAAE; ECanaMboxes.MBOX15.MID.all = 0x9555AAAF; /*接收邮箱的ID号*/
ECanaMboxes.MBOX16.MID.all = 0x80000000; ECanaMboxes.MBOX17.MID.all = 0x9555AAA1; ECanaMboxes.MBOX18.MID.all = 0x9555AAA1; ECanaMboxes.MBOX19.MID.all = 0x9555AAA1; ECanaMboxes.MBOX20.MID.all = 0x9555AAA1; ECanaMboxes.MBOX21.MID.all = 0x9555AAA1; ECanaMboxes.MBOX22.MID.all = 0x9555AAA1; ECanaMboxes.MBOX23.MID.all = 0x9555AAA1; ECanaMboxes.MBOX24.MID.all = 0x9555AAA1; ECanaMboxes.MBOX25.MID.all = 0x9555AAA1;
ECanaMboxes.MBOX26.MID.all = 0x9555AAA1; ECanaMboxes.MBOX27.MID.all = 0x9555AAA1; ECanaMboxes.MBOX28.MID.all = 0x9555AAA1; ECanaMboxes.MBOX29.MID.all = 0x9555AAA1; ECanaMboxes.MBOX30.MID.all = 0x9555AAA1; ECanaMboxes.MBOX31.MID.all = 0x9555AAA1;
在这里,邮箱号可以自己随便设定,就是一个标识符,要注意的是,该MID寄存器种地30~31位有特殊含义,参照书上所讲设定。 /*32个邮箱使能*/
ECanaRegs.CANME.all = 0xFFFFFFFF;
ECanaRegs.CANMIM.all = 0xFFFFffff; //使能所有接受和发送中断
ECanaShadow.CANMC.bit.CCR = 1; //cpu请求对scc的配置寄存器canbtc //和接收屏蔽寄存器进行写操作 do {
ECanaShadow.CANES.all = ECanaRegs.CANES.all; //
}while(ECanaShadow.CANES.bit.CCE != 1); //如果拒绝cpu对配置寄存器进行写操作
设定波特率: EALLOW;
/*(BRPREG+1)=10 feeds a 150MHz CAN clock*/ ECanaShadow.CANBTC.bit.BRP = 9; /*150/10=15*/
ECanaShadow.CANBTC.bit.TSEG2 = 5; ECanaShadow.CANBTC.bit.TSEG1 = 7;
ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all; ECanaShadow.CANMC.bit.CCR = 0; //配置完成 do {
ECanaShadow.CANES.all = ECanaRegs.CANES.all; }while(ECanaShadow.CANES.bit.CCE != 0);
EALLOW;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.STM = 0; //1自检模式 0普通模式 ECanaShadow.CANMC.bit.SCM = 1; //选择ecan模式 ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; EDIS; EALLOW;
ECanaRegs.CANMIM.all = 0xFFFFffff;
ECanaRegs.CANMIL.all = 0; //在中断线0上产生邮箱中断 ECanaRegs.CANGIF0.all = 0xFFFFFFFF; //全局中断标志寄存器 ECanaRegs.CANGIF1.all = 0xFFFFFFFF; //全局中断标志寄存器 ECanaRegs.CANGIM.bit.I0EN = 1; //使能所有中断
ECanaRegs.CANGIM.bit.I1EN = 1; //使能所有中断
ECanaRegs.CANGIM.all = 0x3ff07;//全部使能,全局中断中断线1 EDIS;
PieCtrl.PIEIER9.bit.INTx6 = 1; PieCtrl.PIEIER9.bit.INTx5 = 1;
2:关于接收发送
成功接收到一个数据,会置位对应的RMP位,一定要注意,先清除RMP(对其写1)在读取邮箱数据
发送成功一个数据,会置位对应得TA位,对其写1进行清除。 3:关于中断线0和中断线1
邮箱中断和全局中断要设置到不同的中断线,比如邮箱中断在0,那么全局中断在1 邮箱中断级别位由CANMIL位决定,MIL=0为ECAN0INT MIL=1为ECAN1INT 全局中断级别位由CANGIM.GIL位决定 GIL=0 ECAN0INT GIL=1为ECAN1INT 邮箱中断只包括 发送成功和接受成功中断 全局中断包括各种错误状态
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新经管营销dsp调试can一点心得 全文阅读和word下载服务。
相关推荐: