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.

TMS320F280049C: LIN当成SCI用后,为什么收发没有一点反应,状态寄存器全是0,请问代码问题在哪?

Part Number: TMS320F280049C

GpioCtrlRegs.GPAGMUX1.bit.GPIO10 = 0x1; //280049, 6=0110b
GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0x2;


GpioCtrlRegs.GPAGMUX1.bit.GPIO11 = 0x1;
GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0x2; //=RX

EALLOW;
LinbRegs.SCIGCR0.bit.RESET = 0; // Into reset
LinbRegs.SCIGCR0.bit.RESET = 1; // Out of reset
DELAY_US(1000);
LinbRegs.SCIGCR1.bit.SWnRST = 0; // Into software reset
DELAY_US(1000);
//SCI Configurations
LinbRegs.SCIGCR1.bit.COMMMODE = 0; // Idle-Line Mode
LinbRegs.SCIGCR1.bit.TIMINGMODE = 1; // Asynchronous Timing
LinbRegs.SCIGCR1.bit.PARITYENA = 0; // No Parity Check
LinbRegs.SCIGCR1.bit.PARITY = 0; // Odd Parity
LinbRegs.SCIGCR1.bit.STOP = 0; // One Stop Bit
LinbRegs.SCIGCR1.bit.CLK_MASTER = 1; // Enable SCI Clock
LinbRegs.SCIGCR1.bit.LINMODE = 0; // SCI Mode
LinbRegs.SCIGCR1.bit.SLEEP = 0; // Ensure Out of Sleep
LinbRegs.SCIGCR1.bit.ADAPT = 0; //auto baudrate
LinbRegs.SCIGCR1.bit.MBUFMODE = 0; // none Buffer Mode
LinbRegs.SCIGCR1.bit.LOOPBACK = 0; // External Loopback
LinbRegs.SCIGCR1.bit.CONT = 1; // Continue on Suspend in Emulation Mode
LinbRegs.SCIGCR1.bit.RXENA = 1; // Enable RX
LinbRegs.SCIGCR1.bit.TXENA = 1; // Enable TX

LinbRegs.SCIGCR2.bit.POWERDOWN = 0;
//Ensure IODFT is disabled
LinbRegs.IODFTCTRL.bit.IODFTENA = 0x0;
//Set transmission length )
LinbRegs.SCIFORMAT.bit.*** = 7; // Eight bits
LinbRegs.SCIFORMAT.bit.LENGTH = 0; // 1 byte
//Set baudrate
LinbRegs.BRSR.bit.SCI_LIN_PSL = 1041; //LSPCLKDIV=10, 10M/9600
LinbRegs.BRSR.bit.SCI_LIN_PSH = 0;
LinbRegs.BRSR.bit.M = 0; // 官方说的是这个值为 5,但实测 0 比 5 要稳定。
// Enable interrupts
LinbRegs.SCISETINT.bit.SETRXINT = 1; // Enable RX interrupt
LinbRegs.SCISETINT.bit.SETTXINT = 1; // Enable TX interrupt,要发送的时候再打开。
//Set interrupt priority
LinbRegs.SCICLEARINTLVL.all = 0xFFFFFFFF; // Set Int level of all interrupts to LVL 0

DELAY_US(1000);
LinbRegs.SCIGCR1.bit.SWnRST = 1; // bring out of software reset
DELAY_US(1000);
// Disable write to protected registers

EDIS;

发送代码 :if (LinbRegs.SCIFLR.bit.TXRDY == 1)  //SCIFLR的状态全是0,一直是0
LinbRegs.SCITD.bit.TD = 0xAA;