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.

[参考译文] CCS/TMS320F28377S:SCI-C 问题

Guru**** 2022830 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/667554/ccs-tms320f28377s-sci-c-problem

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

你(们)好

使用示例、我为 SCI-C 编写了程序、但遇到了问题。我使用外部 RS232传输数据。 当我将波特率设置为115200或57600时、我接收到0。 当我使用较低波特率(例如9600)时、我会收到正确的值。 您是否知道我的代码有什么问题?

感谢你的帮助

此致  

Szymon

#include "F28x_Project.h"


uint16循环计数;
uint16错误计数;


void scia_loopback _init (void);
void scia_fifo_init (void);
void scia_xmit (int a);
void error();


void main (void)
{
uint16 SendChar;
uint16 ReceivedChar;


InitSysCtrl();


InitGpio();



EALLOW;
GpioCtrlRegs.GPCMUX2.bit.GPIO89 = 2; // TX
GpioCtrlRegs.GPCMUX2.bit.GPIO90 = 2; //接收
GpioCtrlRegs.GPCGMUX2.bit.GPIO89=1; // TX
GpioCtrlRegs.GPCGMUX2.bit.GPIO90 = 1;// Rx



Dint;
IER = 0x0000;
IFR = 0x0000;

InitPieVectTable();


EnableInterrupts();


LoopCount = 0;
错误计数= 0;

scia_fifo_init(); //初始化 SCI FIFO
scia_loopback_init ();//初始化用于数字回路的 SCI


SendChar = 0xAF;


//
for (;;)
{
scia_xmit (SendChar);

//
//等待 RRDY/RXFFST =1、等待 FIFO 中有1个数据可用
//
while (scicRegs.SCIFFRX.bit.RXFFST ==0){}

//
//检查接收到的字符
//
ReceivedChar = ScicRegs.SCIRXBUF.ALL;
if (ReceivedChar!= SendChar)
{
error();
}


LoopCount++;
}
}

//
//错误-计算错误的函数
//
void error()
{
ErrorCount++;
// asm (" ESTOP0");//取消注释以在此处停止测试
// for (;);
}

//
scia_loopback _init -配置 SCIA 设置
//
void scia_loopback _init ()
{
//
//注意:SCIA 外设的时钟被打开
//在 InitSysCtrl()函数中
//

ScicRegs.SCICCR.ALL = 0x0007;// 1停止位,无环回
//无奇偶校验,8个字符位,
//异步模式,空闲线协议
ScicRegs.SCICTL1.ALL = 0x0003;//启用 TX、RX、内部 SCICLK、
//禁用 RX ERR、睡眠、TXWAKE
ScicRegs.SCICTL2.all = 0x0003;
ScicRegs.SCICTL2.bit.TXINTENA=1;
ScicRegs.SCICTL2.bit.RXBKINTENA=1;
ScicRegs.SCIHBAUD.ALL = 0x03;//对于115200 9600 - 0x02
ScicRegs.SCILBAUD.ALL = 0x06;//对于115200 9600 - 0x8B
scicRegs.SCICCR.bit.LOOPBKENA=1;//启用回路
ScicRegs.SCICTL1.ALL = 0x0023; //从复位中撤回 SCI
}

//
scia_xmit -从 SCI 发送字符
//
void scia_xmit (int a)
{
scicRegs.SCITXBUF.ALL=a;
}

//
scia_fifo_init -初始化 SCI FIFO
//
void scia_fifo_init ()
{
ScicRegs.SCIFFTX.ALL = 0xE040;
ScicRegs.SCIFFRX.ALL = 0x2044;
ScicRegs.SCIFFCT.ALL = 0x0;
}


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请在监视窗口中添加 ScicRegs 并检查波特率是否正确设置。

    此致、
    Gautam
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Szymon、

    器件是由内部振荡器还是片外 XTAL 或 XTAL 振荡器计时? 内部振荡器的精度大约为~3%、所以这可能是更高波特率时的一个问题。

    您还可以查看 RS-232收发器的速度额定值和您尝试通信的任何器件的额定值。