Other Parts Discussed in Thread: AM2434, SYSCONFIG
器件型号: AM2434
主题中讨论的其他器件: SysConfig、
我想报告 使用两个配置为 DMA 模式的 UART 实例时 AM2434 上似乎存在 SysConfig 代码生成问题。
问题摘要
当 SysConfig 配置为 DMA 模式下的两个 UART 实例时、生成的初始化代码将相同的 dmaChCfg 分配给 两个 UART 实例。 因此、两个 UART 最终都会引用相同的 DMA 通道配置结构。
预期行为
每个 UART 实例都应使用其自己的 dmaChCfg 分配(例如,gUartDmaChCfg[CONFIG_UARTx])生成 、以便每个实例的 DMA 资源都是唯一的。
观察到的行为
两个 UART 实例均使用 生成的代码中的相同 dmaChCfg 指针进行初始化。
权变措施
为了避免错误生成的初始化,我不调用 Drivers_open()(因此避免 Drivers_uartOpenLld ()),而是:
- 手动调用所需的 Drivers_*打开功能
-
在调用 UART_LLD_initDma() 之前、手动初始化每个 UART 并更正 dmaChCfg 赋值 。
下面是我 在 System_init ()/ Board_init () 之后的 main.c 摘录:
/*=========================================== 打开驱动程序=============================================
*警告! 无法使用 Drivers_open ();由于 sysconfig 生成错误、由 TI 生成的函数
*当您将多个 UART 与 DMA 搭配使用时(如本例中)、TI 会为所有 UART 分配相同的 dmaChCfg
*请参阅以下带有“fix TI“注释的行。
*如果您编辑 sysconfig 请记住相应地更新此部分
*/
Drivers_firewallOpen ();
Drivers_udmaOpen ();
gUartHandleLld[CONFIG_UART0] =&gUartObject[CONFIG_UART0];
gUartHandleLld[CONFIG_UART0]->state = UART_State_reset
;gUartHandleLld[CONFIG_UART0]->assert = CSL_BASE;gUartHandleLld[CONFIG_UART0_STATION];
=&gUartObject[CONFIG_UART_simple_log];
gUartHandleLld[CONFIG_UART_simple_log]->state = UART_State_reset
;gUartHandleLld[CONFIG_UART_simple_log]->initAddr
最好是在将来的 SysConfig/SDK 版本中修复此问题。
开发环境
- MCU+ SDK:11.00.00.15
- 编译器:TI ARM CLANG 4.0.4 LTS
- SysConfig:1.26.0
- CCS:20.40
- 器件:AM2434 (Cortex-R5F 0-0)