工具/软件:
TMS320F280049上的 SCI 自动波特问题
您好、
我们在上的 SCI 自动波特率功能遇到问题 TMS320F280049 。 以下是我们用于配置 SCI 的代码:
SCI_setConfig(XXXXX_SCI_BASE, DEVICE_LSPCLK_FREQ, 230400,
(SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE));
SCI_resetChannels(XXXXX_SCI_BASE);
SCI_clearInterruptStatus(XXXXX_SCI_BASE, SCI_INT_RXFF);
SCI_enableModule(XXXXX_SCI_BASE);
SCI_performSoftwareReset(XXXXX_SCI_BASE);
HWREG(XXXXX_SCI_BASE + SCI_O_FFRX) &= ~SCI_RXFF_RESET;
SCI_disableInterrupt(XXXXX_SCI_BASE, SCI_INT_RXFF);
SCI_enableFIFO(XXXXX_SCI_BASE);
SCI_setFIFOInterruptLevel(XXXXX_SCI_BASE, SCI_FIFO_TX16, SCI_FIFO_RX10);
SCI_enableInterrupt(XXXXX_SCI_BASE, SCI_INT_RXFF);
SCI_lockAutobaud(XXXXX_SCI_BASE);
uint16_t byteData = SCI_readCharBlockingFIFO(XXXXX_SCI_BASE);
SCI_writeCharBlockingFIFO(XXXXX_SCI_BASE, byteData);
Interrupt_register(XXXXX_INT_SCI_RX, sciRxISR);
问题描述:
问题是这样 SCI_lockAutobaud()
效果不佳 。 如果失败、调用该函数后不会发出任何字符。
重要观察结果:
我们发现自动波特率可靠工作的两个特定条件:
- 已连接并运行时的示例。
- 当修改
SCI_setConfig()
为使用倍增 LSPCLK 频率时:SCI_setConfig(XXXXX_SCI_BASE, DEVICE_LSPCLK_FREQ * 7, 230400, (SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE));
- 有趣的是、乘法器、如
*3
、、*4
*5
等等、 也可以工作。
- 有趣的是、乘法器、如
所采取的调试步骤:
-
已检查系统时钟:
- 配置
XCLKOUT
为输出PLLSYSCLK
。 - 与我们的系统时钟相同 100 MHz ,我们不断观察 12.5 MHz 与默认
/8
分频器匹配。 - PWM 功能也可以在预期频率下正常运行。
- 配置
-
自动波特率锁定前的已测试波特率:
- 添加了要传输的代码
0xAA
解决方案SCI_lockAutobaud()
。 - 无论
SCI_setConfig()
参数如何、波特率始终为 1.66Mbps 。 - 例如、即使使用:
输出波特率保持不变 1.66Mbps 。SCI_setConfig(XXXXX_SCI_BASE, 25000000, 9600, (SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE));
- 添加了要传输的代码
-
自动波特行为:
- 使用时 LSPCLK 乘法器 或 测试设备固件
SCI_lockAutobaud()
正常工作、数据按预期传输。 在看到波特率为1.66Mbps 的第二条消息后、我们将能够看到发送的波特率正确的第二条消息。
- 使用时 LSPCLK 乘法器 或 测试设备固件
请求帮助:
我们尽力理解:
- 为什么
SCI_lockAutobaud()
只在这些特定条件下工作? - 波特率卡住的原因 1.66Mbps 在自动波特率锁定之前、即使
SCI_setConfig()
在修改时也是如此? - 时钟配置或 SCI 内部时序可能会出现相关问题?
任何见解或建议都将非常感谢。 谢谢!