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.

TMS320F2808 CANTXA always high level(3.3V)

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;
}