Other Parts Discussed in Thread: TMS320F28335
Hi ...
I am working with TMS320F28335 eCAN. I make a code to transmit CAN message but its transmits only one time and I want to transmit it again and again.
please anyone tell me where did I make mistake in loop to transmit message again and again.
Here is code :
/*
CAN Transmit massage main.c
*/
#include "DSP28x_Project.h"
extern void InitSysCtrl(void);
interrupt void cpu_timer0_isr(void);
extern void InitPieCtrl(void);
extern void InitPieVectTable(void);
extern void InitCpuTimers(void);
extern void ConfigCpuTimer(struct CPUTIMER_VARS *, float, float);
struct ECAN_REGS ECanaShadow;
extern void InitECan(void);
void main(void)
{
int counter=0;
InitSysCtrl();
EALLOW;
SysCtrlRegs.WDKEY = 0x55;
SysCtrlRegs.WDKEY = 0xAA;
EDIS;
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 1;
GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0;
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
EDIS;
InitECan();
ECanaMboxes.MBOX5.MSGID.all = 0x10000000;
ECanaMboxes.MBOX5.MSGID.bit.IDE = 1;
/* Configure Mailbox 5 as transmit mailbox */
ECanaShadow.CANMD.all = ECanaRegs.CANMD.all;
ECanaShadow.CANMD.bit.MD5 = 0;
ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;
/* Enable Mailbox 5 */
ECanaShadow.CANME.all = ECanaRegs.CANME.all;
ECanaShadow.CANME.bit.ME5 = 1;
ECanaRegs.CANME.all = ECanaShadow.CANME.all;
/* Write to DLC field in Master Control reg */
ECanaMboxes.MBOX5.MSGCTRL.all = 0;
ECanaMboxes.MBOX5.MSGCTRL.bit.DLC = 8;
ECanaMboxes.MBOX5.MDL.all = 0x55555555;
ECanaMboxes.MBOX5.MDH.all = 0x55555555;
InitPieCtrl();
InitPieVectTable();
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
EDIS;
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0, 150, 1000000);
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
IER |= 1;
EINT;
ERTM;
CpuTimer0Regs.TCR.bit.TSS = 0;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
while(1)
{
while(CpuTimer0.InterruptCount == 0);
EALLOW;
SysCtrlRegs.WDKEY = 0xAA;
EDIS;
CpuTimer0.InterruptCount = 0;
ECanaMboxes.MBOX5.MDL.byte.BYTE0 = counter & 0x00FF ;
ECanaShadow.CANTRS.all = 0;
ECanaShadow.CANTRS.bit.TRS5 = 1; // Set TRS for mailbox under test
ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all;
while(ECanaRegs.CANTA.bit.TA5 == 0 ) // Wait for TA5 bit to be set.
ECanaRegs.CANTA.bit.TA5 = GpioDataRegs.GPBDAT.bit.GPIO34;
{
EALLOW;
SysCtrlRegs.WDKEY = 0xAA; // Service watchdog #2
EDIS;
}
ECanaShadow.CANTA.all = 0;
ECanaShadow.CANTA.bit.TA5 = 1; // Clear Transmit Acknowledge #5
ECanaRegs.CANTA.all = ECanaShadow.CANTA.all;
counter++;
}
}
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
EALLOW;
SysCtrlRegs.WDKEY = 0x55;
EDIS;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
Mehul