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.

TMS320F28035 LIN配置SCI问题Update

Hi,

由于LIN口用于SCI的奇偶校验一下没有调试好,所以一直在查找问题,但是新发现一个问题不知道是什么原因,希望得到解答,谢谢!

我用仿真器监控时,在Expressions中看LinaRegs的值有变化,赋值也正常,但在Registers中看LINA的对应寄存器确没有变化?为什么?

  • 请问您现在是使用的controlcard和TI例程?能否详细说明下您的软硬件?
  • 不是用的TI例程,只是参照例程更改,硬件是我们自己LAYOUT的板,代码初始化部分如下:
    EALLOW;
    LinaRegs.SCIGCR0.bit.RESET = 0; // Into reset
    LinaRegs.SCIGCR0.bit.RESET = 1; // Out of reset
    LinaRegs.SCIGCR1.bit.SWnRST = 0; // Into software reset

    LinaRegs.SCIGCR1.bit.SLEEP = 0;
    LinaRegs.SCIFLR.bit.TXWAKE = 0;
    LinaRegs.SCIFLR.bit.TXEMPTY = 1;
    LinaRegs.SCIFLR.bit.TXRDY = 1;

    LinaRegs.SCIGCR1.bit.COMMMODE = 0; // Idle-Line Mode
    LinaRegs.SCIGCR1.bit.TIMINGMODE = 1; // Asynchronous Timing
    LinaRegs.SCIGCR1.bit.PARITYENA = 0; // No Parity Check
    LinaRegs.SCIGCR1.bit.PARITY = 0; // Odd Parity
    LinaRegs.SCIGCR1.bit.STOP = 0; // One Stop Bit
    LinaRegs.SCIGCR1.bit.CLK_MASTER = 1; // Enable SCI Clock
    LinaRegs.SCIGCR1.bit.LINMODE = 0; // SCI Mode
    LinaRegs.SCIGCR1.bit.SLEEP = 0; // Ensure Out of Sleep
    LinaRegs.SCIGCR1.bit.MBUFMODE = 0; // No Buffers Mode
    LinaRegs.SCIGCR1.bit.LOOPBACK = 0; // External Loopback
    LinaRegs.SCIGCR1.bit.CONT = 1; // Continue on Suspend
    LinaRegs.SCIGCR1.bit.RXENA = 1; // Enable RX
    LinaRegs.SCIGCR1.bit.TXENA = 0; // Enable TX

    LinaRegs.IODFTCTRL.bit.IODFTENA = 0x0;

    LinaRegs.SCIFORMAT.bit.CHAR = 7; //Eight bits
    LinaRegs.SCIFORMAT.bit.LENGTH = 7; //One byte

    LinaRegs.BRSR.bit.SCI_LIN_PSL =194; //15M Baud = 9.6khz
    LinaRegs.BRSR.bit.M = 5;

    // 通讯控制使用中断,初始化
    PieVectTable.LIN0INTA = &Lina_Level0_ISR ;
    PieVectTable.LIN1INTA = &Lina_Level1_ISR ;

    LinaRegs.SCIGCR1.bit.SWnRST = 1;
    EDIS;
  • 不是用的TI例程,只是参照例程更改,硬件是我们自己LAYOUT的板,代码初始化部分如下:
    EALLOW;
    LinaRegs.SCIGCR0.bit.RESET = 0; // Into reset
    LinaRegs.SCIGCR0.bit.RESET = 1; // Out of reset
    LinaRegs.SCIGCR1.bit.SWnRST = 0; // Into software reset

    LinaRegs.SCIGCR1.bit.SLEEP = 0;
    LinaRegs.SCIFLR.bit.TXWAKE = 0;
    LinaRegs.SCIFLR.bit.TXEMPTY = 1;
    LinaRegs.SCIFLR.bit.TXRDY = 1;

    LinaRegs.SCIGCR1.bit.COMMMODE = 0; // Idle-Line Mode
    LinaRegs.SCIGCR1.bit.TIMINGMODE = 1; // Asynchronous Timing
    LinaRegs.SCIGCR1.bit.PARITYENA = 0; // No Parity Check
    LinaRegs.SCIGCR1.bit.PARITY = 0; // Odd Parity
    LinaRegs.SCIGCR1.bit.STOP = 0; // One Stop Bit
    LinaRegs.SCIGCR1.bit.CLK_MASTER = 1; // Enable SCI Clock
    LinaRegs.SCIGCR1.bit.LINMODE = 0; // SCI Mode
    LinaRegs.SCIGCR1.bit.SLEEP = 0; // Ensure Out of Sleep
    LinaRegs.SCIGCR1.bit.MBUFMODE = 0; // No Buffers Mode
    LinaRegs.SCIGCR1.bit.LOOPBACK = 0; // External Loopback
    LinaRegs.SCIGCR1.bit.CONT = 1; // Continue on Suspend
    LinaRegs.SCIGCR1.bit.RXENA = 1; // Enable RX
    LinaRegs.SCIGCR1.bit.TXENA = 0; // Enable TX

    LinaRegs.IODFTCTRL.bit.IODFTENA = 0x0;

    LinaRegs.SCIFORMAT.bit.CHAR = 7; //Eight bits
    LinaRegs.SCIFORMAT.bit.LENGTH = 7; //One byte

    LinaRegs.BRSR.bit.SCI_LIN_PSL =194; //15M Baud = 9.6khz
    LinaRegs.BRSR.bit.M = 5;

    // 通讯控制使用中断,初始化
    PieVectTable.LIN0INTA = &Lina_Level0_ISR ;
    PieVectTable.LIN1INTA = &Lina_Level1_ISR ;

    LinaRegs.SCIGCR1.bit.SWnRST = 1;
    EDIS;
  • 其他寄存器的配置都很正常,除了LINA寄存器