问题:配置CAN后,发送过一帧CAN数据后,检测CANTX引脚持续不断发送该数据间隔时间240us左右
仿真器查看:ECanaRegs.CANES.bit.Tm=1
ECanaRegs.CANTEC.all =128
,请问可能什么配置原因造成的?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
问题:配置CAN后,发送过一帧CAN数据后,检测CANTX引脚持续不断发送该数据间隔时间240us左右
仿真器查看:ECanaRegs.CANES.bit.Tm=1
ECanaRegs.CANTEC.all =128
,请问可能什么配置原因造成的?
void CO_SetupCAN(void)  //初始化
{
 struct ECAN_REGS ECanaShadow;
 ECanaShadow.CANME.all = ECanaRegs.CANME.all;
 ECanaShadow.CANME.all = 0;  //不使能邮箱
 ECanaRegs.CANME.all = ECanaShadow.CANME.all;
 /* Setup CAN bus */
 EALLOW;  // EALLOW enables access to protected bits
 /* Configure eCAN RX and TX pins for eCAN transmissions using eCAN regs*/
 ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all;
    ECanaShadow.CANTIOC.bit.TXFUNC = 1;
 ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all;
 ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all;
 ECanaShadow.CANRIOC.bit.RXFUNC = 1;
 ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all;
    /* Configure eCAN for HECC mode - (reqd to access mailboxes 16 thru 31) */
 // HECC mode also enables time-stamping feature
 ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
 ECanaShadow.CANMC.bit.SCB = 1;  //
 ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
 /* Initialize all bits of 'Master Control Field' to zero */
 ECanaMboxes.MBOX0.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX1.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX2.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX3.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX4.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX5.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX6.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX7.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX8.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX9.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX10.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX11.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX12.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX13.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX14.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX15.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX16.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX17.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX18.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX19.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX20.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX21.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX22.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX23.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX24.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX25.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX26.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX27.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX28.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX29.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX30.MSGCTRL.all = 0x00000000;
    ECanaMboxes.MBOX31.MSGCTRL.all = 0x00000000;
    // TAn, RMPn, GIFn bits are all zero upon reset and are cleared again
    // as a matter of precaution.
 ECanaRegs.CANTA.all = 0xFFFFFFFF; /* Clear all TAn bits 清除所有邮箱的发送成功标志*/
 ECanaRegs.CANRMP.all = 0xFFFFFFFF; /* Clear all RMPn bits 清除所有邮箱的接收成功标志*/
 ECanaRegs.CANGIF0.all = 0xFFFFFFFF; /* Clear all interrupt flag bits 清除所有中断标志*/
 ECanaRegs.CANGIF1.all = 0xFFFFFFFF; /* Clear all interrupt flag bits 清除所有中断标志*/
 /* Configure bit timing parameters for ECana*/
 ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
 ECanaShadow.CANMC.bit.CCR = 1 ;  // Set CCR = 1 waiting CCE bit to be set
    ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
while(ECanaRegs.CANES.bit.CCE != 1 ) {} // Wait for CCE bit to be set..
ECanaShadow.CANBTC.all = 0;
    ECanaShadow.CANBTC.bit.BRPREG = CO_BitRateData[Rompara_A08->CANBaud].BRP;
    ECanaShadow.CANBTC.bit.TSEG1REG = CO_BitRateData[Rompara_A08->CANBaud].TSeg1;
    ECanaShadow.CANBTC.bit.TSEG2REG = CO_BitRateData[Rompara_A08->CANBaud].TSeg2;
    if(((Rompara_A08->CANBaud)&0x000F) >= 2)
    {
     ECanaShadow.CANBTC.bit.SAM = 0;///////
  ECanaShadow.CANBTC.bit.SJWREG = 3;
 }
 else
 {
  ECanaShadow.CANBTC.bit.SAM = 1;///////
  ECanaShadow.CANBTC.bit.SJWREG = 3;
 }
    ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all;
 ECanaShadow.CANGAM.all = ECanaRegs.CANGAM.all;
 ECanaShadow.CANGAM.bit.AMI = 1;  //标准帧和扩展帧,扩展帧29bit全部存放在MSGID作为标识
 ECanaRegs.CANGAM.all = ECanaShadow.CANGAM.all;
    ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
 ECanaShadow.CANMC.bit.CCR = 0 ;            // Set CCR = 0
 ECanaShadow.CANMC.bit.ABO = 1 ;            // bus open
 ECanaShadow.CANMC.bit.DBO = 1 ;            // CAN先发送低字节,在发送高字节
    ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
    while(ECanaRegs.CANES.bit.CCE == !0 ) {}   // Wait for CCE bit to be cleared..
    /* Disable all Mailboxes  */
//  ECanaRegs.CANME.all = 0;  // Required before writing the MSGIDs
    EDIS;
 //init rx mail  接收邮箱配置16~31为接收邮箱
 EALLOW;
/***********************************************************************/
/* NMT: mailbox  16; */
/* SYNC: mailbox  17; */
/* RPDO0: mailbox  18; */
/* RPDO1: mailbox  19; */
/* RPDO2: mailbox  20; */
/* RPDO3: mailbox  21; */
/* SDO: mailbox  22; */
/* LIFE: mailbox  23; */
/***********************************************************************/
 ECanaShadow.CANMD.all = ECanaRegs.CANMD.all;
 ECanaShadow.CANMD.all |= 0xFFFF0000; // MBOX16~31 is recieve_box
    ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;
 ECanaShadow.CANME.all = ECanaRegs.CANME.all;
    ECanaShadow.CANME.all = 0x00000000; // MBOX16~31 is disabled
    ECanaRegs.CANME.all = ECanaShadow.CANME.all;
 //接收字节数据判断
 if(Rompara_A08->CANRx1ADDR4!=0)
 {
  CO_RXCAN[16].NoOfBytes=8;
 }
 else if(Rompara_A08->CANRx1ADDR3!=0)
 {
  CO_RXCAN[16].NoOfBytes=6;
 }
 else if(Rompara_A08->CANRx1ADDR2!=0)
 {
  CO_RXCAN[16].NoOfBytes=4;
 }
 else if(Rompara_A08->CANRx1ADDR1!=0)
 {
  CO_RXCAN[16].NoOfBytes=2;
 }
 else
 {
  CO_RXCAN[16].NoOfBytes=0;
 }
 if(Rompara_A08->CANRx2ADDR4!=0)
 {
  CO_RXCAN[17].NoOfBytes=8;
 }
 else if(Rompara_A08->CANRx2ADDR3!=0)
 {
  CO_RXCAN[17].NoOfBytes=6;
 }
 else if(Rompara_A08->CANRx2ADDR2!=0)
 {
  CO_RXCAN[17].NoOfBytes=4;
 }
 else if(Rompara_A08->CANRx2ADDR1!=0)
 {
  CO_RXCAN[17].NoOfBytes=2;
 }
 else
 {
  CO_RXCAN[17].NoOfBytes=0;
 }
 //接收字节数据判断
 if(Rompara_A08->CANRx3ADDR4!=0)
 {
  CO_RXCAN[18].NoOfBytes=8;
 }
 else if(Rompara_A08->CANRx3ADDR3!=0)
 {
  CO_RXCAN[18].NoOfBytes=6;
 }
 else if(Rompara_A08->CANRx3ADDR2!=0)
 {
  CO_RXCAN[18].NoOfBytes=4;
 }
 else if(Rompara_A08->CANRx3ADDR1!=0)
 {
  CO_RXCAN[18].NoOfBytes=2;
 }
 else
 {
  CO_RXCAN[18].NoOfBytes=0;
 }
 //接收字节数据判断
 if(Rompara_A08->CANRx4ADDR4!=0)
 {
  CO_RXCAN[19].NoOfBytes=8;
 }
 else if(Rompara_A08->CANRx4ADDR3!=0)
 {
  CO_RXCAN[19].NoOfBytes=6;
 }
 else if(Rompara_A08->CANRx4ADDR2!=0)
 {
  CO_RXCAN[19].NoOfBytes=4;
 }
 else if(Rompara_A08->CANRx4ADDR1!=0)
 {
  CO_RXCAN[19].NoOfBytes=2;
 }
 else
 {
  CO_RXCAN[19].NoOfBytes=0;
 }
 //发送配置
 if(Rompara_A08->CANTx1ADDR4!=0)
 {
  CO_TXCAN[0].NoOfBytes=8;
 }
 else if(Rompara_A08->CANTx1ADDR3!=0)
 {
  CO_TXCAN[0].NoOfBytes=6;
 }
 else if(Rompara_A08->CANTx1ADDR2!=0)
 {
  CO_TXCAN[0].NoOfBytes=4;
 }
 else if(Rompara_A08->CANTx1ADDR1!=0)
 {
  CO_TXCAN[0].NoOfBytes=2;
 }
 else
 {
  CO_TXCAN[0].NoOfBytes=0;
 }
 if(Rompara_A08->CANTx2ADDR4!=0)
 {
  CO_TXCAN[1].NoOfBytes=8;
 }
 else if(Rompara_A08->CANTx2ADDR3!=0)
 {
  CO_TXCAN[1].NoOfBytes=6;
 }
 else if(Rompara_A08->CANTx2ADDR2!=0)
 {
  CO_TXCAN[1].NoOfBytes=4;
 }
 else if(Rompara_A08->CANTx2ADDR1!=0)
 {
  CO_TXCAN[1].NoOfBytes=2;
 }
 else
 {
  CO_TXCAN[1].NoOfBytes=0;
 }
 if(Rompara_A08->CANTx3ADDR4!=0)
 {
  CO_TXCAN[2].NoOfBytes=8;
 }
 else if(Rompara_A08->CANTx3ADDR3!=0)
 {
  CO_TXCAN[2].NoOfBytes=6;
 }
 else if(Rompara_A08->CANTx3ADDR2!=0)
 {
  CO_TXCAN[2].NoOfBytes=4;
 }
 else if(Rompara_A08->CANTx3ADDR1!=0)
 {
  CO_TXCAN[2].NoOfBytes=2;
 }
 else
 {
  CO_TXCAN[2].NoOfBytes=0;
 }
 if(Rompara_A08->CANTx4ADDR4!=0)
 {
  CO_TXCAN[3].NoOfBytes=8;
 }
 else if(Rompara_A08->CANTx4ADDR3!=0)
 {
  CO_TXCAN[3].NoOfBytes=6;
 }
 else if(Rompara_A08->CANTx4ADDR2!=0)
 {
  CO_TXCAN[3].NoOfBytes=4;
 }
 else if(Rompara_A08->CANTx4ADDR1!=0)
 {
  CO_TXCAN[3].NoOfBytes=2;
 }
 else
 {
  CO_TXCAN[3].NoOfBytes=0;
 }
 ECanaRegs.CANME.all = 0;  // Required before writing the MSGIDs
    if(Rompara_A08->CANRx1IdL!=0 ||Rompara_A08->CANRx1IdH!=0)
    {
     ECanaMboxes.MBOX16.MSGID.bit.IDE = 1;  //  0标准帧  1:扩展帧
     ECanaMboxes.MBOX16.MSGID.bit.AME = 1;
     ECanaMboxes.MBOX16.MSGID.bit.AAM = 0;
     ECanaMboxes.MBOX16.MSGID.bit.EXTMSGID_L =Rompara_A08->CANRx1IdL; //bit0~bit15; A08.06~A08.07
     ECanaMboxes.MBOX16.MSGID.bit.EXTMSGID_H =(Rompara_A08->CANRx1IdH & 0x0003);  //bit16~bit17;
     ECanaMboxes.MBOX16.MSGID.bit.STDMSGID =((Rompara_A08->CANRx1IdH>>2) & 0x3F);//bit18 ~bit28;
    }
    if(Rompara_A08->CANRx2IdL!=0 ||Rompara_A08->CANRx2IdH!=0)
    {
     ECanaMboxes.MBOX17.MSGID.bit.IDE = 1;  //  0标准帧  1:扩展帧
     ECanaMboxes.MBOX17.MSGID.bit.AME = 1;
     ECanaMboxes.MBOX17.MSGID.bit.AAM = 0;
        ECanaMboxes.MBOX17.MSGID.bit.EXTMSGID_L =Rompara_A08->CANRx2IdL; //bit0~bit15; A08.12~A08.13
        ECanaMboxes.MBOX17.MSGID.bit.EXTMSGID_H =(Rompara_A08->CANRx2IdH & 0x0003);  //bit16~bit17;
        ECanaMboxes.MBOX17.MSGID.bit.STDMSGID =((Rompara_A08->CANRx2IdH>>2) & 0x3F);//bit18 ~bit28;
    }
    if(Rompara_A08->CANRx3IdL!=0 ||Rompara_A08->CANRx3IdH!=0)
    {
     ECanaMboxes.MBOX18.MSGID.bit.IDE = 1;  //  0标准帧  1:扩展帧
     ECanaMboxes.MBOX18.MSGID.bit.AME = 1;
     ECanaMboxes.MBOX18.MSGID.bit.AAM = 0;
        ECanaMboxes.MBOX18.MSGID.bit.EXTMSGID_L =Rompara_A08->CANRx3IdL; //bit0~bit15; A08.18~A08.19
        ECanaMboxes.MBOX18.MSGID.bit.EXTMSGID_H =(Rompara_A08->CANRx3IdH & 0x0003);  //bit16~bit17;
        ECanaMboxes.MBOX18.MSGID.bit.STDMSGID =((Rompara_A08->CANRx3IdH>>2) & 0x3F);//bit18 ~bit28;
    }
 if(Rompara_A08->CANRx4IdL!=0 ||Rompara_A08->CANRx4IdH!=0)
 {
     ECanaMboxes.MBOX19.MSGID.bit.IDE = 1;  //  0标准帧  1:扩展帧
     ECanaMboxes.MBOX19.MSGID.bit.AME = 1;
     ECanaMboxes.MBOX19.MSGID.bit.AAM = 0;
     ECanaMboxes.MBOX19.MSGID.bit.EXTMSGID_L =Rompara_A08->CANRx4IdL; //bit0~bit15; A08.24~A08.25
     ECanaMboxes.MBOX19.MSGID.bit.EXTMSGID_H =(Rompara_A08->CANRx4IdH & 0x0003);  //bit16~bit17;
     ECanaMboxes.MBOX19.MSGID.bit.STDMSGID =((Rompara_A08->CANRx4IdH>>2) & 0x3F);//bit18 ~bit28;
 }
 //发送邮箱配置
    if(Rompara_A08->CANTx1IdL!=0 ||Rompara_A08->CANTx1IdH!=0)
    {
       ECanaMboxes.MBOX0.MSGCTRL.bit.DLC =CO_TXCAN[0].NoOfBytes;
       ECanaMboxes.MBOX0.MSGID.bit.EXTMSGID_L=Rompara_A08->CANTx1IdL; //bit0~bit15 A08.30~A08.31
       ECanaMboxes.MBOX0.MSGID.bit.EXTMSGID_H =(Rompara_A08->CANTx1IdH & 0x0003);  //bit16~bit17
       ECanaMboxes.MBOX0.MSGID.bit.STDMSGID =((Rompara_A08->CANTx1IdH>>2) & 0x3F);//bit18 ~bit28
    }
    if(Rompara_A08->CANTx2IdL!=0 ||Rompara_A08->CANTx2IdH!=0)
    {
     ECanaMboxes.MBOX1.MSGCTRL.bit.DLC =CO_TXCAN[1].NoOfBytes;
        ECanaMboxes.MBOX1.MSGID.bit.EXTMSGID_L=Rompara_A08->CANTx2IdL; //bit0~bit15 A08.36~A08.37
        ECanaMboxes.MBOX1.MSGID.bit.EXTMSGID_H =(Rompara_A08->CANTx2IdH & 0x0003);  //bit16~bit17
        ECanaMboxes.MBOX1.MSGID.bit.STDMSGID =((Rompara_A08->CANTx2IdH>>2) & 0x3F);//bit18 ~bit28
    }
 if(Rompara_A08->CANTx3IdL!=0 ||Rompara_A08->CANTx3IdH!=0)
 {
  ECanaMboxes.MBOX2.MSGCTRL.bit.DLC =CO_TXCAN[2].NoOfBytes;
     ECanaMboxes.MBOX2.MSGID.bit.EXTMSGID_L=Rompara_A08->CANTx3IdL; //bit0~bit15 A08.42~A08.43
     ECanaMboxes.MBOX2.MSGID.bit.EXTMSGID_H =(Rompara_A08->CANTx3IdH & 0x0003);  //bit16~bit17
     ECanaMboxes.MBOX2.MSGID.bit.STDMSGID =((Rompara_A08->CANTx3IdH>>2) & 0x3F);//bit18 ~bit28
 }
 if(Rompara_A08->CANTx4IdL!=0 ||Rompara_A08->CANTx4IdH!=0)
 {
  ECanaMboxes.MBOX3.MSGCTRL.bit.DLC =CO_TXCAN[3].NoOfBytes;
     ECanaMboxes.MBOX3.MSGID.bit.EXTMSGID_L=Rompara_A08->CANTx4IdL; //bit0~bit15 A08.48~A08.49
     ECanaMboxes.MBOX3.MSGID.bit.EXTMSGID_H =(Rompara_A08->CANTx4IdH & 0x0003);  //bit16~bit17
     ECanaMboxes.MBOX3.MSGID.bit.STDMSGID =((Rompara_A08->CANTx4IdH>>2) & 0x3F);//bit18 ~bit28
 }
 ECanaShadow.CANME.all = ECanaRegs.CANME.all;
    ECanaShadow.CANME.all = 0xFFFFFFFF; //
    ECanaRegs.CANME.all = ECanaShadow.CANME.all;
 // Configure CAN interrupts  在中断线1上产生邮箱邢
 ECanaShadow.CANMIL.all = 0xFFFFFFFF ; // Interrupts asserted on eCAN1INT
 ECanaRegs.CANMIL.all = ECanaShadow.CANMIL.all;
 ECanaRegs.CANOPC.all=0;//0xFFFFFFFF; 2008-9-23
 //邮箱中断屏蔽位
 ECanaShadow.CANMIM.all  = 0;//发送中断不打开
 ECanaShadow.CANMIM.bit.MIM19 = 1;  // RPDO1
 ECanaShadow.CANMIM.bit.MIM18 = 1;  // RPDO0
 ECanaShadow.CANMIM.bit.MIM17 = 1;  // RX
 ECanaShadow.CANMIM.bit.MIM16 = 1;  // RX
    ECanaRegs.CANMIM.all = ECanaShadow.CANMIM.all;
    //全局中断屏蔽寄存器
    ECanaShadow.CANGIM.all=0;
    ECanaShadow.CANGIM.bit.I0EN = 0;    // Enable eCAN1INT
    ECanaShadow.CANGIM.bit.I1EN = 1; // Disable eCAN0INT
 ECanaShadow.CANGIM.bit.GIL = 1;  //所有全局中断都映射到INT1中断线上
    ECanaRegs.CANGIM.all = ECanaShadow.CANGIM.all;
 EDIS;
 //set filters
}
Uint16 CAN_BufTx(Uint16 MBXnbr, Uint8 *pData, Uint8 Size)  //启动发送
{
    volatile struct MBOX *Mailbox;
    Mailbox = &ECanaMboxes.MBOX0 + MBXnbr;
    if(Size<=8 && MBXnbr<=9)
    {
     if(Size==1)
     {
      Mailbox->MDL.byte.BYTE0 = pData[0];
     }
     else if(Size==2)
     {
         Mailbox->MDL.byte.BYTE1 = pData[1];
         Mailbox->MDL.byte.BYTE2 = pData[2];
     }
     else if(Size==3)
     {
         Mailbox->MDL.byte.BYTE1 = pData[1];
         Mailbox->MDL.byte.BYTE2 = pData[2];
         Mailbox->MDL.byte.BYTE3 = pData[3];
     }
     else if(Size==4)
     {
         Mailbox->MDL.byte.BYTE1 = pData[1];
         Mailbox->MDL.byte.BYTE2 = pData[2];
         Mailbox->MDL.byte.BYTE3 = pData[3];
         Mailbox->MDH.byte.BYTE4 = pData[4];
     }
     else if(Size==5)
     {
         Mailbox->MDL.byte.BYTE1 = pData[1];
         Mailbox->MDL.byte.BYTE2 = pData[2];
         Mailbox->MDL.byte.BYTE3 = pData[3];
         Mailbox->MDH.byte.BYTE4 = pData[4];
         Mailbox->MDH.byte.BYTE5 = pData[5];
     }
     else if(Size==6)
     {
         Mailbox->MDL.byte.BYTE1 = pData[1];
         Mailbox->MDL.byte.BYTE2 = pData[2];
         Mailbox->MDL.byte.BYTE3 = pData[3];
         Mailbox->MDH.byte.BYTE4 = pData[4];
         Mailbox->MDH.byte.BYTE5 = pData[5];
         Mailbox->MDH.byte.BYTE6 = pData[6];
     }
     else if(Size==7)
     {
         Mailbox->MDL.byte.BYTE1 = pData[1];
         Mailbox->MDL.byte.BYTE2 = pData[2];
         Mailbox->MDL.byte.BYTE3 = pData[3];
         Mailbox->MDH.byte.BYTE4 = pData[4];
         Mailbox->MDH.byte.BYTE5 = pData[5];
         Mailbox->MDH.byte.BYTE6 = pData[6];
         Mailbox->MDH.byte.BYTE7 = pData[7];
     }
     EALLOW;
     ECanaRegs.CANTRS.all = ((Uint32)0x00000001)<<MBXnbr; //启动发送
     while((ECanaRegs.CANTA.all>>MBXnbr)&0x01==0x00)
     {
      ;
     }
     ECanaRegs.CANTA.all=(Uint32)(0x01<<MBXnbr);
     EDIS;
     return 1;
    }
    else
    {
     return 0;
    }
}
代码如上,问题是我发送一帧数据后,芯片TX引脚发送,可以检测到Tx引脚间隔400us重复发送该数据,TRS0一直为1
//==========================================================================
//
// 文件名称:    F2812_CANTX.c
//
// 功能描述:    DSP28 CAN 传输测试
//              CPU Timer0 ISR周期 50 ms
//              看门狗使能,在主循环中处理
//              CAN 消息 : 发送一个字节的数据
//              CAN通信速率: 100KBPS
//              扩展标识符 :  0x1000 0000
//              使用的邮箱 :Mailbox #5 #1
//
//==========================================================================
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"   // DSP281x Examples Include File
// 函数原型声明
void Gpio_select(void);
void InitCan();
int RXcounter = 0;
int TXcounter = 0;
char CAN0RXDATA[8];
struct  ECAN_REGS ECanaShadow;
interrupt void CAN0INTA_ISR(void);
void Mboxesinit(void);
void TX_send(void);
interrupt void cpu_timer0_isr(void);
void main(void)
{
    InitSysCtrl();
   // Step 2. Initalize GPIO:
   // This example function is found in the DSP281x_Gpio.c file and
   // illustrates how to set the GPIO to it's default state.
   // InitGpio();  // Skipped for this example
   // Step 3. Clear all interrupts and initialize PIE vector table:
   // Disable CPU interrupts
      DINT;
   // Initialize PIE control registers to their default state.
   // The default state is all PIE interrupts disabled and flags
   // are cleared.
   // This function is found in the DSP281x_PieCtrl.c file.
   //   InitPieCtrl(); // Skipped for this example
   // Disable CPU interrupts and clear all CPU interrupt flags:
      IER = 0x0000;
      IFR = 0x0000;
    Gpio_select();      // 配置GPIO复用功能寄存器
    InitPieCtrl();      // 调用外设中断扩展初始化单元 PIE-unit ( 代码 : DSP281x_PieCtrl.c)
    InitPieVectTable(); // 初始化 PIE vector向量表  ( 代码 : DSP281x_PieVect.c )
    EALLOW;  // This is needed to write to EALLOW protected registers
    PieVectTable.TINT0 = &cpu_timer0_isr;
    EDIS;    // This is needed to disable write to EALLOW protected registers
    // Step 4. Initialize all the Device Peripherals:
    // This function is found in DSP281x_InitPeripherals.c
    // InitPeripherals(); // Not required for this example
    InitCpuTimers();   // For this example, only initialize the Cpu Timers
    // Configure CPU-Timer 0 to interrupt every second:
    // 100MHz CPU Freq, 1 second Period (in uSeconds)
    ConfigCpuTimer(&CpuTimer0, 100, 1000000);
    StartCpuTimer0();
    IER |= M_INT1;
    // Enable TINT0 in the PIE: Group 1 interrupt 7
    PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
    PieCtrlRegs.PIEIER9.bit.INTx5=1;
    IER|=M_INT9;
    EINT;
    ERTM;
    InitCan();  // 初始化CAN模块
    Mboxesinit();
    while(1)
    {
        ;
    }
}
void TX_send(void)
{
      ECanaMboxes.MBOX5.MDL.all = 0x55555555;
      ECanaMboxes.MBOX5.MDH.all = 0x55555555;
      ECanaShadow.CANTRS.all = 0;
      ECanaShadow.CANTRS.bit.TRS5 = 1;     // 设置 TRS for mailbox under test
      ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all;
      while(ECanaRegs.CANTA.bit.TA5 == 0 ) {}  // 等待 TA5 bit 置位..
      TXcounter++;
      ECanaShadow.CANTA.all = 0;
      ECanaShadow.CANTA.bit.TA5 = 1;       // 清除 TA5
      ECanaRegs.CANTA.all = ECanaShadow.CANTA.all;
}
void Mboxesinit(void)
{
    /* 写消息标识符 MSGID  */
       ECanaMboxes.MBOX5.MSGID.all     = 0x10000000;
       ECanaMboxes.MBOX5.MSGID.bit.IDE = 1;  // 扩展标识符
       /* 配置 Mailbox 5 作为发送邮箱 */
       ECanaShadow.CANMD.all = ECanaRegs.CANMD.all;
       ECanaShadow.CANMD.bit.MD5 = 0;
       ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;
       /* 使能邮箱 */
       ECanaShadow.CANME.all = ECanaRegs.CANME.all;
       ECanaShadow.CANME.bit.ME5 = 1;
       ECanaRegs.CANME.all = ECanaShadow.CANME.all;
       ECanaMboxes.MBOX5.MSGCTRL.bit.DLC = 1;
   /********************** 4/11/2018 **********************/
       /* 写消息标识符 MSGID 区  */
       ECanaMboxes.MBOX1.MSGID.all  = 0x10000000;  // 扩展标识符
       ECanaMboxes.MBOX1.MSGID.bit.IDE = 1;
       /* 配置邮箱1作为接收器邮箱 */
       ECanaShadow.CANMD.all = ECanaRegs.CANMD.all;
       ECanaShadow.CANMD.bit.MD1 = 1;
       ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;
       /* 使能邮箱mailbox 1  */
       ECanaShadow.CANME.all = ECanaRegs.CANME.all;
       ECanaShadow.CANME.bit.ME1 = 1;
       ECanaRegs.CANME.all = ECanaShadow.CANME.all;
       ECanaMboxes.MBOX1.MSGCTRL.bit.DLC = 8;
       ECanaMboxes.MBOX1.MSGCTRL.bit.RTR = 0;
       /* 在消息控制寄存器中写 DLC 区 */
       ECanaMboxes.MBOX5.MSGCTRL.bit.DLC = 8;
       /***************使能中断******************/
       EALLOW;
       ECanaRegs.CANMIM.bit.MIM1=1;
       ECanaRegs.CANMIL.bit.MIL1=0;
       ECanaRegs.CANGIF0.all=0xFFFFFFFF;
       ECanaRegs.CANGIM.bit.I0EN=1;
       PieVectTable.ECAN0INTA= &CAN0INTA_ISR;
       EDIS;
}
void Gpio_select(void)
{
    EALLOW;
    GpioMuxRegs.GPAMUX.all = 0x0;   // 所有GPIO引脚配置为I/O
    GpioMuxRegs.GPBMUX.all = 0x0;
    GpioMuxRegs.GPDMUX.all = 0x0;
    GpioMuxRegs.GPFMUX.all = 0x0;
    GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1;  //CAN引脚配置
    GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1;
    GpioMuxRegs.GPEMUX.all = 0x0;
    GpioMuxRegs.GPGMUX.all = 0x0;
    GpioMuxRegs.GPADIR.all = 0x0;     // GPIO PORT 配置为输入
    GpioMuxRegs.GPBDIR.all = 0x0;  // GPIO Port B15-B8  配置为输入 , B7-B0  配置为输出
    GpioMuxRegs.GPDDIR.all = 0x0;     // GPIO PORT   配置为输入
    GpioMuxRegs.GPEDIR.all = 0x0;     // GPIO PORT   配置为输入
    GpioMuxRegs.GPFDIR.all = 0x0;     // GPIO PORT   配置为输入
    GpioMuxRegs.GPGDIR.all = 0x0;     // GPIO PORT   配置为输入
    GpioMuxRegs.GPAQUAL.all = 0x0;    // 设置所有 GPIO 输入的量化值等于0
    GpioMuxRegs.GPBQUAL.all = 0x0;
    GpioMuxRegs.GPDQUAL.all = 0x0;
    GpioMuxRegs.GPEQUAL.all = 0x0;
    EDIS;
}
void InitCan(void)
{
    EALLOW;
/* 通过eCAN寄存器配置RX和TX引脚作为发送接收*/
    ECanaRegs.CANTIOC.bit.TXFUNC = 1;
    ECanaRegs.CANRIOC.bit.RXFUNC = 1;
/* 配置 eCAN 工作在 HECC模式 - (请求访问邮箱16 到 31) */
// HECC模式还是能时间标签功能
   ECanaRegs.CANMC.bit.SCB = 1;
   // ECanaRegs.CANMC.bit.STM= 1;
/* 配置位的时间参数 */
    ECanaRegs.CANMC.bit.CCR = 1 ;            // 设置 CCR = 1
    while(ECanaRegs.CANES.bit.CCE != 1 ) {}   //等待 CCE bit置位..
    ECanaRegs.CANBTC.bit.BRPREG = 19;
    ECanaRegs.CANBTC.bit.TSEG2REG = 2;
    ECanaRegs.CANBTC.bit.TSEG1REG = 10;
    ECanaRegs.CANMC.bit.CCR = 0 ;             // 设置 CCR = 0
    while(ECanaRegs.CANES.bit.CCE == !0 ) {}   // 等待 CCE bit清0..
/* Disable all Mailboxes  */
    ECanaRegs.CANME.all = 0;        // 写 MSGIDs之前发出请求
    EDIS;
}
interrupt void CAN0INTA_ISR(void)
{
    RXcounter++;
    while(ECanaShadow.CANRMP.bit.RMP1 != 1 );       // 等待 RMP1置位..
    //     GpioDataRegs.GPBDAT.all = ECanaMboxes.MBOX1.MDL.byte.BYTE0;
    ECanaShadow.CANRMP.bit.RMP1 = 1;
    ECanaRegs.CANRMP.all = ECanaShadow.CANRMP.all;
    CAN0RXDATA[0]= ECanaMboxes.MBOX1.MDL.byte.BYTE0;
    CAN0RXDATA[1]= ECanaMboxes.MBOX1.MDL.byte.BYTE1;
    CAN0RXDATA[2]= ECanaMboxes.MBOX1.MDL.byte.BYTE2;
    CAN0RXDATA[3]= ECanaMboxes.MBOX1.MDL.byte.BYTE3;
    CAN0RXDATA[4]= ECanaMboxes.MBOX1.MDH.byte.BYTE4;
    CAN0RXDATA[5]= ECanaMboxes.MBOX1.MDH.byte.BYTE5;
    CAN0RXDATA[6]= ECanaMboxes.MBOX1.MDH.byte.BYTE6;
    CAN0RXDATA[7]= ECanaMboxes.MBOX1.MDH.byte.BYTE7;
    PieCtrlRegs.PIEACK.bit.ACK9=1;
    EINT;
}
interrupt void cpu_timer0_isr(void)
{
   CpuTimer0.InterruptCount++;
   TX_send();
   // Acknowledge this interrupt to receive more interrupts from group 1
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
这个是我之前自己写的一个,您可以参考一下,如果发现错误也欢迎指出。以后您贴程序尽量贴成这种格式看起来方便一些。