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.

[参考译文] TMS320F28374S:TMS320F28374S 上的 SCIB 只能发送消息、但无法接收消息、而 SCIA 完全正常工作。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1425112/tms320f28374s-the-scib-on-the-tms320f28374s-can-only-send-messages-but-cannot-receive-messages-while-the-scia-functions-completely-normally

器件型号:TMS320F28374S

工具与软件:

CCS 版本:12.6.0

编译版本:TI v22.6.0.1.TLS

芯片模型:TMS320F28374S

GPIO 初始化代码如下:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void scib_gpio54_55_init(void)
{
EALLOW;
const uint16_t mux54 = 6; // GPIO54_MUX = 6: SCIB_TX
const uint16_t mux55 = 6; // GPIO55_MUX = 6: SCIB_RX
GpioCtrlRegs.GPBGMUX2.bit.GPIO54 = mux54 / 4;
GpioCtrlRegs.GPBMUX2.bit.GPIO54 = mux54 % 4;
GpioCtrlRegs.GPBPUD.bit.GPIO54 = 0; // 0: enable pull up
GpioCtrlRegs.GPBDIR.bit.GPIO54 = 1; // 0:input 1:output
GpioCtrlRegs.GPBGMUX2.bit.GPIO55 = mux55 / 4;
GpioCtrlRegs.GPBMUX2.bit.GPIO55 = mux55 % 4;
GpioCtrlRegs.GPBPUD.bit.GPIO55 = 0; // 0: enable pull up
GpioCtrlRegs.GPBDIR.bit.GPIO55 = 0; // 0:input 1:output
EDIS;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


SCI 初始化代码如下:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void scib_init(uint32_t baud_rate)
{
uint16_t prescale = (uint16_t)(get_clock_freq() / 4 / baud_rate / 8 - 1);
ScibRegs.SCICTL1.all = 0x00; // reset SCI
ScibRegs.SCICCR.all = 0x07; // 1 bit stop, disable parity, idle mode, 8 bits data
ScibRegs.SCIHBAUD.bit.BAUD = prescale / 256;
ScibRegs.SCILBAUD.bit.BAUD = prescale % 256;
ScibRegs.SCIFFRX.bit.RXFIFORESET = 1; // 1:enable RXFIFO
ScibRegs.SCIFFTX.bit.SCIRST = 1; // 1:resume FIFO, 0: reset FIFO
ScibRegs.SCIFFTX.bit.SCIFFENA = 1; // enable FIFO
ScibRegs.SCICTL1.all = 0x23; // Enable RX and TX, enable SCI
add_task("scib_soft_fifo", soft_fifo_1ms_task, FOREGROUND_TASK, 1, 0);
}
static void soft_fifo_1ms_task(void)
{
uint16_t i;
// --------------------------------------------------------------------
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void scia_init(uint32_t baud_rate)
{
uint16_t prescale = (uint16_t)(get_clock_freq() / 4 / baud_rate / 8 - 1);
SciaRegs.SCICTL1.all = 0x00; // reset SCI
SciaRegs.SCICCR.all = 0x07; // 1 bit stop, disable parity, idle mode, 8 bits data
SciaRegs.SCIHBAUD.bit.BAUD = prescale / 256;
SciaRegs.SCILBAUD.bit.BAUD = prescale % 256;
SciaRegs.SCIFFRX.bit.RXFIFORESET = 1; // 1:enable RXFIFO
SciaRegs.SCIFFTX.bit.SCIRST = 1; // 1:resume FIFO, 0: reset FIFO
SciaRegs.SCIFFTX.bit.SCIFFENA = 1; // enable FIFO
SciaRegs.SCICTL1.all = 0x23; // Enable RX and TX, enable SCI
add_task("scia_soft_fifo", soft_fifo_1ms_task, FOREGROUND_TASK, 1, 0);
}
static void soft_fifo_1ms_task(void)
{
uint16_t i;
// --------------------------------------------------------------------
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我们以相同的方式初始化 SCIA 和 SCIB、SCIA 函数正常。 但是、SCIB 只能发送消息、而无法接收消息。 我们在 SCIB 接收引脚之前测量了波形、波形准确且正常。 不过、SCIB 接收 FIFO 总是保持为0、表示没有接收到消息。 如何解决该问题?

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

    您好!

    如果您在 RX 上看到从另一个器件发送的波形正确、但在 FIFO 中没有看到接收到的数据、则这可能是 GPIO 设置问题。  

    您可以仔细检查 SCIB 的 GPIO 多路复用是否正确吗?

    侧边说明:您可以通过启用内部环回(将 TX 和 RX 在内部连接在一起)来确认 SCI 配置(GPIO 多路复用除外)是否正确、从而验证您是否可以在 SCIB 中发送和接收数据正常。

    此致、

    Allison

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

    尊敬的 Allison:

         目前、我们正在从引导过渡到应用程序执行。 如果该应用程序直接运行、则功能正常、SCIB 可以正确读取和写入。 但是、在从引导模式转换到应用程序时、会出现问题、例如 SCIB 无法读取。 是否有人有任何好的解决方案? 非常感谢!

    此致、

    Yulong Cheng

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

    尊敬的 Yulong Cheng:

    您能否在这方面再详细说明一下吗? 例如、您使用什么引导模式? 您是否在启动过程中使用 SCI (例如 SCI 引导等)? 您能否验证您是否正确地从 bootROM/bootloader 跳转到应用程序代码、在此之前没有卡住、并且 SCIB 在此过程中得到了正确初始化? 更多信息可以帮助我提供有关调试方法的建议。  

    为了澄清、您已经使用 SCIA 完成了此启动并跳转到应用 SCIB 和 SCIA 能够正常工作(可以发送和接收)、但 SCIB 却不能正常工作?  

    此致、

    Allison

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

    尊敬的  Allison:

        感谢您的答复和支持。 出现此问题的原因是我们意外地将另一个引脚配置为 SCIB 的 RX。

    此致、

    Yulong Cheng

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

    尊敬的 Yulong Cheng:

    很高兴听到您能够解决此问题! 我将继续、关闭该线程

    此致、

    Allison