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.

LAUNCHXL-F280025C: LIN配置成UART使用,LOOP模式可以收发了,但和串口调试助手做真实的串口通信时,发出的数据被助手识别为0xFF, DSP收到的总是0, 求问是什么原因?

Part Number: LAUNCHXL-F280025C
Other Parts Discussed in Thread: C2000WARE

EALLOW;
LinbRegs.SCIGCR0.bit.RESET = 0; // Into reset,正在复位
LinbRegs.SCIGCR0.bit.RESET = 1; // Out of reset,关复位
LinbRegs.SCIGCR1.bit.SWnRST = 0; // Into software reset

LinbRegs.SCIPIO0.bit.TXFUNC = 1;
LinbRegs.SCIPIO0.bit.RXFUNC = 1;
LinbRegs.LIN_GLB_INT_CLR.bit.INT0_FLG_CLR = 1;
LinbRegs.LIN_GLB_INT_CLR.bit.INT1_FLG_CLR = 1;

// Enable Global interrupts
LinbRegs.LIN_GLB_INT_EN.bit.GLBINT0_EN = 1;
LinbRegs.LIN_GLB_INT_EN.bit.GLBINT1_EN = 1;

//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; // 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; //0和1都一样
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

LinaRegs.IODFTCTRL.bit.IODFTENA = 0x0;

LinbRegs.SCIGCR2.bit.POWERDOWN = 0;
//Ensure IODFT is disabled
LinbRegs.IODFTCTRL.bit.IODFTENA = 0x0;
//Set transmission length )
LinbRegs.SCIFORMAT.bit.bitOfCHAR = 7; // Eight bits
LinbRegs.SCIFORMAT.bit.LENGTH = 1; // 0=1 byte

//Set baudrate
//100M cpu,25M 低速外围频率 ,9600 baudrate
LinbRegs.BRSR.bit.SCI_LIN_PSL = 161;
LinbRegs.BRSR.bit.SCI_LIN_PSH = 0;
LinbRegs.BRSR.bit.M = 12;

LinbRegs.SCISETINT.bit.SETTXINT = 1; // Enable TX interrupt,要发送的时候再打开。
LinbRegs.SCISETINT.bit.SETRXINT = 1; // Enable RX interrupt

LinbRegs.SCIGCR1.bit.SWnRST = 1; // bring out of software reset
EDIS;

发给PC

if (LinbRegs.SCIFLR.bit.TXRDY == 1 && LinbRegs.SCIFLR.bit.TXEMPTY == 1)
{
LinbRegs.SCITD.bit.TD = 0xAA;

}

从PC收到

if (LinbRegs.SCIFLR.bit.RXRDY == 1)
{
rx2_char = LinbRegs.SCIRD.bit.RD & 0xff; // Read data

}

  • 你好,LOOP可以成功的话,串口调试助手是否设置正确?正常uart口能否正常通讯?有尝试过TI的例程吗?C:\ti\c2000\C2000Ware_4_03_00_00\driverlib\f28002x\examples\sci

  • SCI一直在用,助手是9600 8N1,老套路了一般不会错,TI这个LIN转SCI的,一直没个寄存器的例子,配置又特别难,而且每个CPU的UART特别少,真的特别脑火

  • 我咨询下相关工程师后回复您。

  • 收发问题我已经解决了,原因是开发板和我自己的板用的晶振不一样。

    但是中断还是不太正常,目前我暂时在main里面收发。

    以前我有个贴问过中断线和中断级的问题,我意图把0线和0级分配给RX,1线和1级分配给TX,但运行的时候总是只有一个有响应,我不知道寄存器该如何配置,如何写代码,才能RX和TX中断都正常,能否给TI反映一下,出个带RX和TX中断的例子?

  • 好的,问题解决就好。

    关于您的需求我会尝试反映一下。

x 出现错误。请重试或与管理员联系。