Hi all
There is a issue about 2080 CANTXA(GPIO 31), I want CANTXA output a signal, but it seems that it always keeping high level(3.3V) output. I have tried many methords to debug, but not succeed, I can't get any signal at CANTXA pin by oscilloscope, the code what I used as follow. I think it is better that you can give me a demo project that can work correctly!
#include "DSP280x_Device.h"
#include "DSP280x_Examples.h"
interrupt void eCAN0_isr(void);
interrupt void eCAN1_isr(void);
void eCAN0_int();
void eCAN1_int();
void main(void)
{
struct ECAN_REGS ECanaShadow;
InitSysCtrl();
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 1; // Configure GPIO30 for CANTXA operation
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 1; // Configure GPIO31 for CANRXA operation
EDIS;
DINT;
InitPieCtrl();
IER=0x0000;
IFR=0x0000;
EALLOW;
PieVectTable.ECAN0INTA=&eCAN0_isr;
PieVectTable.ECAN1INTA=&eCAN1_isr;
EDIS;
PieCtrlRegs.PIEIER9.bit.INTx5=1;
PieCtrlRegs.PIEIER9.bit.INTx6=1;
IER |=M_INT9;
EINT;
ERTM;
eCAN0_int();
eCAN1_int();
EALLOW;
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;
EDIS;
ECanaRegs.CANME.all=0;
ECanaMboxes.MBOX0.MDL.all=0xAAAAAAAA;
ECanaMboxes.MBOX0.MDH.all=0xAAAAAAAA;
ECanaMboxes.MBOX0.MSGID.all=0x05540000;
ECanaShadow.CANMD.all=ECanaRegs.CANMD.all;
ECanaShadow.CANMD.bit.MD0=0;
ECanaRegs.CANMD.all=ECanaShadow.CANMD.all;
ECanaShadow.CANME.all=ECanaShadow.CANME.all;
ECanaShadow.CANME.bit.ME0=1;
ECanaRegs.CANME.all=ECanaShadow.CANME.all;
ECanaMboxes.MBOX0.MSGCTRL.bit.DLC=8;
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;
ECanaShadow.CANBTC.all=ECanaRegs.CANBTC.all;
ECanaShadow.CANBTC.bit.BRPREG=99;
ECanaShadow.CANBTC.bit.TSEG1REG=16;
ECanaShadow.CANBTC.bit.TSEG2REG=7;
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!=1);
EALLOW;
ECanaShadow.CANMC.all=ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.SCB=1; //eCAN model
ECanaRegs.CANMC.all=ECanaShadow.CANMC.all;
EDIS;
for(;;)
{
ECanaRegs.CANTRS.all=0x00000001;
while(ECanaRegs.CANTA.all !=0x00000001) {}
ECanaRegs.CANTA.all=0x00000001;
}
}
void eCAN0_int(void)
{ ECanaRegs.CANMIL.bit.MIL0=0;
EALLOW;
ECanaRegs.CANMIM.bit.MIM1=1;
ECanaRegs.CANGIM.bit.I0EN=0;
EDIS;
}
void eCAN1_int(void)
{ ECanaRegs.CANMIL.bit.MIL0=1;
EALLOW;
ECanaRegs.CANMIM.bit.MIM0=1;
ECanaRegs.CANGIM.bit.I1EN=1;
EDIS;
}
interrupt void eCAN0_isr(void)
{
PieCtrlRegs.PIEACK.bit.ACK9=1;
}
interrupt void eCAN1_isr(void)
{
PieCtrlRegs.PIEACK.bit.ACK9=1;
}