//--------------------------------------------------------------------------- // InitECan: //--------------------------------------------------------------------------- // This function initializes the eCAN module to a known state. // void InitECan(void) { InitECana(); #if DSP28_ECANB InitECanb(); #endif // if DSP28_ECANB }
void CAN_init(){ struct ECAN_REGS ECanaShadow; //CAN_INFO_ARRAY[ID].upon_sent_isr = send_isr; //CAN_INFO_ARRAY[ID].upon_receive_isr = receive_isr; // Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This function is found in the F2806x_SysCtrl.c file. // Should be commented out in regular usage. For normal usage initializing the system should be done elsewhere not in the CAN code. // For testing purposes this is uncommented to initialize the system. InitSysCtrl(); // Step 2. Initalize GPIO: // Configure CAN pins using GPIO regs here // This function is found in F2806x_ECan.c InitECanGpio(); // Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts DINT; // Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000; EALLOW; //Direct ECANA0 interrupts to the proper isr PieVectTable.ECAN0INTA = &ecan_isr; EDIS; // Enable the PIE Vector Table PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Step 4. Initialize CAN module InitECana(); EALLOW; //Allow all mailboxes to send interrupts ECanaRegs.CANMIM.all = 0xFFFFFFFF; //Disable all other system interrupts (not recommended) //Only enable level 0 interrupts //BY DEFAULT using level 0 CAN interrupts ECanaRegs.CANGIM.all = 0x00000001; // EALLOW; ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; ECanaShadow.CANMC.bit.STM = 1; // Configure CAN for self-test mode ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; //EDIS; EDIS; //CAN interrupts are part of IER 9 IER |= M_INT9; //Enable ECAN interrupt 0 in PIE PieCtrlRegs.PIEIER9.bit.INTx5 = 1; // Enable global Interrupts and higher priority real-time debug events: EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM }
void CANSetup() { InitECanaGpio(); InitECana(); ClearMailBoxes(); ECanaShadow.CANMIM.all = 0; ECanaShadow.CANMIL.all = 0; ECanaShadow.CANGIM.all = 0; ECanaShadow.CANGAM.bit.AMI = 0; //must be standard ECanaShadow.CANGIM.bit.I1EN = 1; // enable I1EN ECanaShadow.CANMD.all = ECanaRegs.CANMD.all; ECanaShadow.CANME.all = ECanaRegs.CANME.all; //todo USER: Node specifc CAN setup EALLOW; // create mailbox for all Receive and transmit IDs // MBOX0 - MBOX31 //Command RECEIVE ECanaMboxes.MBOX0.MSGID.bit.IDE = 0; //standard id ECanaMboxes.MBOX0.MSGID.bit.AME = 0; // all bit must match ECanaMboxes.MBOX0.MSGID.bit.AAM = 0; // no RTR AUTO TRANSMIT ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = 8; ECanaMboxes.MBOX0.MSGID.bit.STDMSGID = COMMAND_ID; ECanaShadow.CANMD.bit.MD0 = 1; //receive ECanaShadow.CANME.bit.ME0 = 1; //enable ECanaShadow.CANMIM.bit.MIM0 = 1; //int enable ECanaShadow.CANMIL.bit.MIL0 = 1; // Int.-Level MB#0 -> I1EN //Heart TRANSMIT ECanaMboxes.MBOX1.MSGID.bit.IDE = 0; //standard id ECanaMboxes.MBOX1.MSGID.bit.AME = 0; // all bit must match ECanaMboxes.MBOX1.MSGID.bit.AAM = 1; //RTR AUTO TRANSMIT ECanaMboxes.MBOX1.MSGCTRL.bit.DLC = 8; ECanaMboxes.MBOX1.MSGID.bit.STDMSGID = HEARTBEAT_ID; ECanaShadow.CANMD.bit.MD1 = 0; //transmit ECanaShadow.CANME.bit.ME1 = 1; //enable //SOMETHING ODD ABOUT ORDER HERE AND RTR BIT... //adc TRANSMIT ECanaMboxes.MBOX2.MSGID.bit.IDE = 0; //standard id ECanaMboxes.MBOX2.MSGID.bit.AME = 0; // all bit must match ECanaMboxes.MBOX2.MSGID.bit.AAM = 1; //RTR AUTO TRANSMIT ECanaMboxes.MBOX2.MSGCTRL.bit.DLC = 8; ECanaMboxes.MBOX2.MSGID.bit.STDMSGID = ADC_ID; ECanaShadow.CANMD.bit.MD2 = 0; //transmit ECanaShadow.CANME.bit.ME2 = 1; //enable //gp_button TRANSMIT ECanaMboxes.MBOX3.MSGID.bit.IDE = 0; //standard id ECanaMboxes.MBOX3.MSGID.bit.AME = 0; // all bit must match ECanaMboxes.MBOX3.MSGID.bit.AAM = 1; //RTR AUTO TRANSMIT ECanaMboxes.MBOX3.MSGCTRL.bit.DLC = 8; ECanaMboxes.MBOX3.MSGID.bit.STDMSGID = GP_BUTTON_ID; ECanaShadow.CANMD.bit.MD3 = 0; //transmit ECanaShadow.CANME.bit.ME3 = 1; //enable ECanaRegs.CANGAM.all = ECanaShadow.CANGAM.all; ECanaRegs.CANGIM.all = ECanaShadow.CANGIM.all; ECanaRegs.CANMIM.all = ECanaShadow.CANMIM.all; ECanaRegs.CANMIL.all = ECanaShadow.CANMIL.all; ECanaRegs.CANMD.all = ECanaShadow.CANMD.all; ECanaRegs.CANME.all = ECanaShadow.CANME.all; ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; ECanaShadow.CANMC.bit.STM = 0; // No self-test mode ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; EDIS; //ENABLE PIE INTERRUPTS IER |= M_INT9; PieCtrlRegs.PIEIER9.bit.INTx6= 1; can_watch = StartStopWatch(SENDCAN_STOPWATCH); }
void InitECan(void) { InitECana(); }