请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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;
}
