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/TMS320F28069:SCI-B 接收问题

Guru**** 2595780 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/670654/ccs-tms320f28069-sci-b-receive-problem

器件型号:TMS320F28069

工具/软件:Code Composer Studio

您好!

我将 SCI-B 配置为8-N-1 250K。 传输过程中没有问题、但当我尝试接收任何内容时、缓冲区中没有任何内容。  

这是我的 SCI-B 代码和设置

//
//将低外设时钟设置为90MHz
//LOSPCP = SYSCLOCK / 1;
//
EALLOW;
SysCtrlRegs.LOSPPCP.ALL = 0;
EDIS; 

void scib_fifo_init (void)
{
//
// 1停止位,无回送,无奇偶校验,8个字符位,异步模式,
//空闲线协议
//
ScibRegs.SCICCR.all =0x0007;
//
//启用 TX、RX、内部 SCICLK、禁用 RX ERR、睡眠、 TXWAKE
//
ScibRegs.SCICTL1.all =0x0003;
ScibRegs.SCICTL2.bit.TXINTENA=0; //无 TX 中断
ScibRegs.SCICTL2.bit.RXBKINTENA=0; //无 RX 中断
//
// 250000波特@LSPCLK = 90MHz (90MHz SYSCLK) 90m /(250K * 8)- 1 = 44
//
ScibRegs.SCIHBAUD = 0x0000;
ScibRegs.SCILBAUD = SCI_PRD;
ScibRegs.SCICCR.bit.LOOPBKENA=0;//禁用回路
ScibRegs.SCIFFTX.All=0xE040;
ScibRegs.SCIFFRX.All=0x0042;
ScibRegs.SCIFFCT.All=0x0;

ScibRegs.SCICTL1.all =0x0023;//从复位中撤回 SCI
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;

}

void ScibGpio (void)
{
EALLOW;

//
//为所选引脚启用内部上拉
//用户可以启用或禁用上拉。
//这将启用指定引脚的上拉电阻。
//
//GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;//启用 GPIO19的上拉(SCIRXDB)
GpioCtrlRegs.GPBPUD.bit.GPIO44 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0;//为 GPIO14启用上拉(SCITXDB)

//
//仅将所选引脚的限定条件设置为异步
默认情况下、//输入与 SYSCLKOUT 同步。
//这将为所选引脚选择异步(无限定条件)。
//
//GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3;//异步输入 GPIO19 (SCIRXDB)
GpioCtrlRegs.GPBQSEL1.bit.GPIO44 = 3;//异步输入 GPIO44 (SCIRXDB)

//GpioCtrlRegs.GPAMUX2.bit.GPIO19=2;
GpioCtrlRegs.GPBMUX1.bit.GPIO44 = 2;
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 2;

EDIS;
}

这是接收器函数、但编译器卡在行中;  while (ScibRegs.SCIFFRX.bit.RXFFST = 0)

void sciReceive (uint32 length、uint8 * data)
{

while (ScibRegs.SCIFFRX.bit.RXFFST = 0)
{

}
//
//检查接收到的字符
//
while (length---)
{
*数据= ScibRegs.SCIRXBUF.ALL;
Data++;
}
} 

我已确保逻辑分析仪可以接收到下一个信号。  

这是从器件可以看到的响应。 4字节0x00数据。  

这里是 SCI-B 寄存器  

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

    您好 Caner、

    SCI 回送示例写入 SCIFFRX.ALL = 0x2044;与您的值0x0042的关系。  上部的"2"值将使 FIFO 从复位状态中释放出来、我认为您需要:

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

    但我在这之后将其更改为 SciaRegs.SCIFFRX.bit.RXFIFORESET=1;

    我遇到过运转错误、可能会发生什么情况
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Caner、

    由于您收到溢出错误、我希望您没有配置 RX FIFO。 查看您提供的 SCI-B 寄存器、可以看到 SCIFFRX.RXFIFORESET 等于0。 这将保持 RX FIFO 处于复位状态并禁用它的运行。

    如果仍有问题、请尝试启用 RX FIFO 并将其发布回此处。

    此致、
    Cody