工具/软件:
尊敬的 TI 团队:
我正在开发一个使用 AM5718 SoC 的系统、它在 A15 上有一个运行 Linux 的 BSP、还有一个运行 RTOS 的 M4 内核 (IPU1)。
在两个内核之间、IPC 通过 MessageQ 运行。 我使用 DRA7XX_Linux_elf 的 ex02_MessageQ 示例来设置。 IPU1 固件通过 Remoteproc 驱动程序加载。
现在、我想向 IPU1 RTOS 添加一个新任务来处理 UART2。 这就是我的烦恼所在、因为我缺少基本信息、我希望您可以回答或确认我:
- 由于 Uart2 由 IPU1 使用、因此我需要将其添加到 Linux 设备树中、如下所示-> &uart2 { status =“disabled";“;}?
- 我需要在 DTS 文件中也做 UART2 焊盘的 Pinmux? 或者、可以在 IPU1 RTOS 固件/A15 Linux 应用中完成吗?
- 需要在 IPU1 RTOS 固件中启用 UART2 时钟吗?
- 我是否需要在 DTS 文件或 IPU1 RTOS 固件中为 UART 中断进行 XBAR 配置?
在我的第一次试验中,我做到了:
- DTS 文件中的&uart2 { status =“disabled";}</s>“
- DTS 中 UART2 的 Pinmux(不确定是否正确完成)
- IPU1 固件中启用 UART2 时钟
- UART2 没有 XBAR 配置、因为 在 IPU1 固件中使用 CSL_xbarIpuIrqConfigure () 时、IPU1 崩溃。
像这样,我设法用 uart_open() 打开 UART,这也会导致更早的 IPU1 崩溃。 但现在,当使用 uart_write () 时,任务只是阻塞。
我相信这是正确完成的唯一一点是启用 UART2 时钟、我喜欢这样做:
/* UART2 的使能时钟*/
/* L2 MMU 的配置方式是将 MMU 转换(虚拟)0x6X000000 访问到地址 0x4X000000(物理)*/
CSL_l4per_cm_core_componentRegs * l4PerCmReg =
(CSL_l4per_cm_core_componentRegs *) 0x6a009700;//CSL_MPU_L4PER_CM_CORE_REGS + 0x20000000 = 0x4a009700 + 0x20000000;
CSL_FINST (l4PerCmReg->CM_L4PER_UART2_CLKCTRL_REG、
L4PER_CM_CORE_COMPONENT_CM_L4PER_UART2_CLKCTRL_REG_MODULEMODE,使能);
while (CSL_L4PER_CM_CORE_COMPONENT_CM_L4PER_UART2_CLKCTRL_REG_IDLEST_FUNC!=
CSL_FEXT (l4PerCmReg->CM_L4PER_UART2_CLKCTRL_REG、
L4PER_CM_CORE_COMPONENT_CM_L4PER_UART2_CLKCTRL_REG_IDLEST);
如果有人能对我的不同问题做一些澄清、那将会非常有帮助。 如果您可以向我介绍一个使用类似设置的示例工程、我也会觉得非常棒。
致以诚挚的问候、提前致以衷心的感谢!
Marc