性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

TMS320F2812有關(guān)CAN通信問題

現(xiàn)做變頻電源用此IC
用到CAN總線與遠(yuǎn)程PC通信
一般情況下通信沒問題已在用.
在異常下:有可能是消息沖突,超載等沒處理好使CAN模塊停止了
在一段時(shí)間里有停止通信現(xiàn)象,重上電復(fù)位就好.
就像路由器有時(shí)不能上網(wǎng),重上電就好一樣.
請(qǐng)高人指點(diǎn)一下!非常感謝!
原CAN初始代碼與發(fā)送接收代碼如下:



void InitCAN(void)
{
Uint32 x1;
EALLOW;
ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all;
ECanaShadow.CANTIOC.bit.TXFUNC = 1;
ECanaRegs.CANTIOC.all = ECanaShadow.CANRIOC.all;

ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all;
ECanaShadow.CANRIOC.bit.RXFUNC = 1;
ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all;
EDIS;
ECanaRegs.CANME.all = 0;
//客流的轉(zhuǎn)換模塊的發(fā)送ID 0x02 接收0x20
/*發(fā)送郵箱的ID號(hào)*/
x1=DeviceNumber;
x1=x1*0x40000;
ECanaMboxes.MBOX0.MSGID.all = x1;//+0x40000;//發(fā)送
/*接收郵箱的ID號(hào)*/
ECanaMboxes.MBOX6.MSGID.all =x1;
ECanaMboxes.MBOX7.MSGID.all =x1;
ECanaMboxes.MBOX8.MSGID.all =x1;        //接收
ECanaMboxes.MBOX9.MSGID.all =0x03480000;//接收
/*0 is TX,8 is RX*/
ECanaRegs.CANMD.all = 0x000003c0;
/*郵箱使能8-1*/
ECanaRegs.CANME.all = 0x000003c1;

ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = 8;
ECanaMboxes.MBOX6.MSGCTRL.bit.DLC = 8;
ECanaMboxes.MBOX7.MSGCTRL.bit.DLC = 8;
ECanaMboxes.MBOX8.MSGCTRL.bit.DLC = 8;
ECanaMboxes.MBOX9.MSGCTRL.bit.DLC = 8;

ECanaMboxes.MBOX0.MSGCTRL.bit.TPL=1;
ECanaMboxes.MBOX6.MSGCTRL.bit.TPL=0;
ECanaMboxes.MBOX7.MSGCTRL.bit.TPL=0;
ECanaMboxes.MBOX8.MSGCTRL.bit.TPL=0;
ECanaMboxes.MBOX9.MSGCTRL.bit.TPL=0;
  
/*沒有遠(yuǎn)方應(yīng)答幀被請(qǐng)求*/
ECanaMboxes.MBOX0.MSGCTRL.bit.RTR = 0;
ECanaMboxes.MBOX6.MSGCTRL.bit.RTR = 0;
ECanaMboxes.MBOX7.MSGCTRL.bit.RTR = 0;
ECanaMboxes.MBOX8.MSGCTRL.bit.RTR = 0;
ECanaMboxes.MBOX9.MSGCTRL.bit.RTR = 0;

EALLOW;
/*郵箱使能*/
ECanaRegs.CANMIM.all = 0xFFFFFFFF;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR = 1;
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;

do
{
  ECanaShadow.CANES.all = ECanaRegs.CANES.all;
}while(ECanaShadow.CANES.bit.CCE != 1);

EALLOW;
/*(BRPREG+1)=100  波特率50K*/
ECanaShadow.CANBTC.bit.BRPREG = 99;
ECanaShadow.CANBTC.bit.TSEG2REG = 5;
ECanaShadow.CANBTC.bit.TSEG1REG = 12;

ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all;

ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR = 0;
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;

do
{
  ECanaShadow.CANES.all = ECanaRegs.CANES.all;
}while(ECanaShadow.CANES.bit.CCE != 0);

EALLOW;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.SUSP= 1;//
ECanaShadow.CANMC.bit.STM = 0;//自測(cè)試模式=1
ECanaShadow.CANMC.bit.SCB = 0;//ecan模式=1
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;
EALLOW;

ECanaRegs.CANMIM.all = 0x000003c1;//Enable Box0(TXD) Box8(RXD)
ECanaRegs.CANMIL.all = 0x00000001;//Box0->CANINT1;Box->CANINT0;
ECanaRegs.CANRMP.all = 0x00000000;
ECanaRegs.CANGIF0.all= 0xffffffff; //Crear All INT Status Flag
ECanaRegs.CANGIF1.all= 0xffffffff;
ECanaRegs.CANGIM.all = 0x30003;//Close All NMI
//ECanaRegs.CANTOC.all =0x00000301;//Enable Timer Over

EDIS;

EALLOW;
PieVectTable.ECAN0INTA=&cpu_ECANRXD_isr;
PieVectTable.ECAN1INTA=&cpu_ECANTXD_isr;
EDIS;
PieCtrlRegs.PIEIER9.bit.INTx6 = 1;
PieCtrlRegs.PIEIER9.bit.INTx5 = 1;  
}



interrupt void cpu_ECANRXD_isr(void)  // eCAN-A
{
if((ECanaRegs.CANRMP.bit.RMP6==1)||(ECanaRegs.CANRMP.bit.RMP7==1)||
    (ECanaRegs.CANRMP.bit.RMP8==1)||(ECanaRegs.CANRMP.bit.RMP9==1)
   )
   {  
    這里是接受數(shù)據(jù)處理代碼;   
   }
PieCtrlRegs.PIEACK.bit.ACK9 = 1;
}

interrupt void cpu_ECANTXD_isr(void)  // eCAN-A
{
  
if(ECanaRegs.CANTA.all == 0x00000001)
    {
     ECanaRegs.CANTA.all = 0x00000001;
    } //清除中斷標(biāo)志
PieCtrlRegs.PIEACK.bit.ACK9 = 1;
}
全部回復(fù)(0)
正序查看
倒序查看
現(xiàn)在還沒有回復(fù)呢,說說你的想法
發(fā)