| void main() {
 unsigned int kk, t;
 /* Create a shadow register structure for the CAN control registers. This is
 needed, since, only 32-bit access is allowed to these registers. 16-bit access
 to these registers could potentially corrupt the register contents. This is
 especially true while writing to a bit (or group of bits) among bits 16 - 31 */
 
 //   struct ECAN_REGS ECanaShadow;
 
 struct ECAN_REGS ECanbShadow;
 
 // Step 1. Initialize System Control:
 // PLL, WatchDog, enable Peripheral Clocks
 // This example function is found in the DSP2833x_SysCtrl.c file.
 InitSysCtrl();
 
 // Step 2. Initalize GPIO:
 // This example function is found in the DSP2833x_Gpio.c file and
 // illustrates how to set the GPIO to it's default state.
 // InitGpio();  // Skipped for this example
 
 // Just initalize eCAN pins for this example
 // This function is in DSP2833x_ECan.c
 //  InitECanGpio();
 InitECanbGpio();
 
 // Step 3. Clear all interrupts and initialize PIE vector table:
 // Disable CPU interrupts
 DINT;
 
 // Initialize the 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 DSP2833x_PieCtrl.c file.
 InitPieCtrl();
 
 // Disable CPU interrupts and clear all CPU interrupt flags:
 IER = 0x0000;
 IFR = 0x0000;
 
 
 InitPieVectTable();
 
 
 // InitECan();
 InitECanb();
 
 
 /*
 ECanbMboxes.MBOX24.MSGID.all = 0x90200000; // Extended Identifier
 
 
 
 ECanbShadow.CANMD.all = ECanbRegs.CANMD.all;
 ECanbShadow.CANMD.bit.MD24 = 1;    ///  1: 接收邮箱  0:发送邮箱
 ECanbRegs.CANMD.all = ECanbShadow.CANMD.all;
 
 
 
 ECanbShadow.CANME.all = ECanbRegs.CANME.all;
 ECanbShadow.CANME.bit.ME24 = 1;     ///  1:使能    0:  不使能
 ECanbRegs.CANME.all = ECanbShadow.CANME.all;
 
 
 ECanbMboxes.MBOX24.MSGCTRL.bit.DLC = 8;
 
 ECanbMboxes.MBOX24.MSGCTRL.bit.RTR = 0;
 
 */
 EALLOW;
 
 //   ECanbRegs.CANGAM.all = 0x90200000;
 
 //        ECanbLAMRegs.LAM24.all = 0x00000000;
 ECanbMboxes.MBOX0.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX1.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX2.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX3.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX4.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX5.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX6.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX7.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX8.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX9.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX10.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX11.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX12.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX13.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX14.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX15.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX16.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX17.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX18.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX19.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX20.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX21.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX22.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX23.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX24.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX25.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX26.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX27.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX28.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX29.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX30.MSGCTRL.all = 0x00000000;
 ECanbMboxes.MBOX31.MSGCTRL.all = 0x00000000;
 
 ECanbRegs.CANMIM.all = 0xffffffff;
 
 ECanbRegs.CANMIL.all = 0;
 
 ECanbRegs.CANGIF0.all = 0xffffffff;
 
 ECanbRegs.CANGIM.bit.I0EN = 1;
 
 EDIS;
 
 
 PieCtrlRegs.PIEIER9.bit.INTx7 = 1;
 
 IER |= M_INT9;
 
 EINT;
 
 ERTM;
 
 j=0x01;
 
 /* Begin transmitting */
 
 while(1)
 {
 // for(i=0; i < TXCOUNT; i++)
 {
 
 for(t = 0x00;t < 2;t++)
 {
 
 InitECanb();
 
 
 ECanbShadow.CANTRS.all = 0;
 ECanbShadow.CANTRS.bit.TRS25 = 1;             // Set TRS for mailbox under test
 ECanbRegs.CANTRS.all = ECanbShadow.CANTRS.all;
 kk = 0;
 do
 {
 kk = kk + 1;
 
 ECanbShadow.CANTA.all = ECanbRegs.CANTA.all;
 } while((ECanbShadow.CANTA.bit.TA25 == 0 ) && (kk < 10000));   // Wait for TA5 bit to be set..
 
 if( kk < 10000) break;
 }
 if(kk<10000) j++;
 
 ECanbShadow.CANTA.all = 0;
 ECanbShadow.CANTA.bit.TA25 = 1;                      // Clear TA5
 ECanbRegs.CANTA.all = ECanbShadow.CANTA.all;
 
 
 
 }
 }
 // asm(" ESTOP0");  // Stop here
 }
 |