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.

[参考译文] AM5718:Linux/RTOS UART 配置

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1513002/am5718-linux-rtos-uart-configuration

器件型号:AM5718

工具/软件:

尊敬的 TI 团队:

我正在开发一个使用 AM5718 SoC 的系统、它在 A15 上有一个运行 Linux 的 BSP、还有一个运行 RTOS 的 M4 内核 (IPU1)。

在两个内核之间、IPC 通过 MessageQ 运行。 我使用 DRA7XX_Linux_elf 的 ex02_MessageQ 示例来设置。 IPU1 固件通过 Remoteproc 驱动程序加载。

现在、我想向 IPU1 RTOS 添加一个新任务来处理 UART2。 这就是我的烦恼所在、因为我缺少基本信息、我希望您可以回答或确认我:

  1. 由于 Uart2 由 IPU1 使用、因此我需要将其添加到 Linux 设备树中、如下所示-> &uart2 { status =“disabled";“;}?
  2. 我需要在 DTS 文件中也做 UART2 焊盘的 Pinmux? 或者、可以在 IPU1 RTOS 固件/A15 Linux 应用中完成吗?
  3. 需要在 IPU1 RTOS 固件中启用 UART2 时钟吗?
  4. 我是否需要在 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

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

    您好、Marc、

    1. 是的。
    2. 必须在 RTOS 中完成 UART 的整个初始化序列、包括引脚多路复用设置。 根据下面的示例、这可以由 U-boot 完成。
    3. 是的、由于您在 Linux DT 中禁用此节点、因此必须在 RTOS 中完成设置和初始化。
    4. 这也在 RTOS 文件中完成。

    请参阅 IPC 一章中 UART 的示例:“将 IPC 添加到 UART 示例

    希望这对您有所帮助、

    -Josue

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

    你好 Josue、

    谢谢、我成功设置了 UART。 现在 GPIO 中断确实有问题、可能需要您的帮助。

    引脚多路复用、时钟和 XBAR 的操作方式与 RTOS 应用程序中的操作方式类似:

    /* L2 MMU is configured such that MMU translates (virtual) 0x6X000000 access to address 0x4X000000 (physical) */
    /* Offset of 0x20000000 must be used to access registers */
    
    /* Pinmux for gpio1_17 - IOPHY_WAKE */
    /*Pad configurations */
    HW_WR_REG32(CSL_MPU_CORE_PAD_IO_REGISTERS_REGS + 0x20000000 + CSL_CONTROL_CORE_PAD_IO_PAD_UART2_RTSN,0x000F000E);
    
    
    /* Enable clock for GPIO1 */
    CSL_wkupaon_cmRegs *wkupAonCmReg =
    (CSL_wkupaon_cmRegs *) 0x6ae07800; //CSL_MPU_WKUPAON_CM_REGS + 0x20000000 = 0x4ae07800 + 0x20000000;
    
    CSL_FINST(wkupAonCmReg->CM_WKUPAON_GPIO1_CLKCTRL_REG,
    WKUPAON_CM_CM_WKUPAON_GPIO1_CLKCTRL_REG_MODULEMODE, AUTO);
    
    while(CSL_WKUPAON_CM_CM_WKUPAON_GPIO1_CLKCTRL_REG_IDLEST_FUNC !=
    CSL_FEXT(wkupAonCmReg->CM_WKUPAON_GPIO1_CLKCTRL_REG,
    WKUPAON_CM_CM_WKUPAON_GPIO1_CLKCTRL_REG_IDLEST));
    
    
    if (xbarIrq_gpio == CSL_XBAR_GPIO1_IRQ_1)
    {
    /* Use reserved CSL_XBAR_INST_IPU1_IRQ_51 */
    CSL_xbarIpuIrqConfigure(1,
    CSL_XBAR_INST_IPU1_IRQ_51,
    xbarIrq_gpio);
    }
    
    /* GPIO initialization */
    GPIO_init();
    
    /* Set the callback function */
    GPIO_setCallback(WAKEUP_PIN, AppGpioCallbackFxn);
    
    /* Enable GPIO interrupt on the specific gpio pin */
    GPIO_enableInt(WAKEUP_PIN);

    在输入引脚上触发中断 并调用回调函数后、我会在 A15 Linux 日志中看到以下消息:

    [205.761322] Remoteproc Remoteproc0:启动 58820000.ipu
    [205.778594] remoteproc remoteproc0:引导 FW 映像 ipu1、大小为 4990712
    [ 205.785430] OMAP-Lommu 58882000/MMU:58882000/MMU:版本 2.1
    [ 205.816864] rproc-virtio rproc-virtio.1.auto:分配了保留内存节点 e ipu1-memory@9d000000
    [205.842041] virtio_rpmsg_bus virtio0: rpmsg 主机已联机
    [ 205.847595] virtio_rpmsg_bus virtio0:创建通道 rpmsg-proto 地址 0x 3d
    [205.870971] rproc-virtio rproc-virtio.1.auto: registered virtio0 (type 7)
    [205.877807] remoteproc remoteproc0:远程处理器 58820000.ipu 现在为
    [225.507995]---- 【在这里剪切】------
    [225.512634]警告:CPU:0 PID:0 at /drivers/gpio/gpio-omap.c:573 OMAP_g PIO_IRQ_HANDLER+0x194/0x198
    [225.521942]运行时挂起时 GPIO irq96?
    [225.526489]链接的模块:xHCI_plat_hcd xhci_hcd dwc3 phy_OMAP-LUSB2 t I_vip ti_VPE ti_sc v4l2_mem2ti_vpdma ti_cal dwc3_mlv4l2_fwnode videobuf2_dma_contime211_cc
    [225.551696] CPU:0 PID:0 Comm:swapper/0 tainted:g O 6.1 .83-ti-gc1c2f1971fbf #1
    [225.560607]硬件名称:通用 DRA72X(平展设备树)
    [225.566741]从 SHOW_STACK+0x10/0x14 展开 runy_backtrace
    [225.572021]从 dump_stack_lvl+0x40/0x4c 的 show_stack
    [225.577117]从__WARN+0x78/0x158 删除 dump_stack_lvl
    [225.581970]来自 WARN_SLOWPATH_fmt+0x130/0x1c0 的__WARN
    [225.587127]来自 OMAP-LIRQ_HANDLER+0x194/0x198 的 WARN_SLOWPATH_fmt
    [ 225.593627]来自__handle_IRQ_EVENT_PERCPU+0x60/0x2 的 OMAP_GPIO_IRQ_HANDLER 20
    [225.600708]来自 handle_IRQ_event+0x38/0x80 的__handle_IRQ_event_percpu
    [225.607299] Handle_IRQ_event from handle_fasteoi_irq+0x9C/0x204
    [225.613342] generic_handle_domain_IRQ+0x28/0x38 中的 handle_fasteoi_IRQ
    [225.620086] generic_handle_domain_IRQ、来自 GIC_Handle_IRQ+0x74/0x88
    [225.626495] generic_handle_arch_IRQ+0x34/0x44 中的 GIC_HANDLE_IRQ
    [225.632720] generic_handle_arch_irq_svc+0x88/0xc8 中的 IRQ
    [225.638519]异常堆栈 (0xc0f01ee8 至 0xc0f01f30)
    [225.643585] 1ee0:00000005 00000000 fe600000 00000000 c0 f08840 c104ce20
    [225.651824] 1f00:c0f04d10 c0f04d6c 00000000 c0e79be8 00000000 c0f04d78 C1 054310 c0f01f38
    [225.660034] 1f20:c0123080 c01080a4 600f0013 ffffffff
    [225.665100]来自 arch_CPU_IDLE+0x20/0x3c 的_IRQ_Svc
    [225.670013]来自 default_idle_call+0x3c/0x114 的 arch_cpu_idle
    [225.675720]来自 DO_IDLE+0x200/0x294 的 DEFAULT_IDLE_CALL
    [225.680999]从 CPU_STARTUP_ENTRY+0x28/0x2C 执行 DO_IDLE
    [225.686096]来自 REST_INIT_+0xc8/0xcc 的 CPU_STARTUP_ENTRY
    [225.691375]从 arch_post_acpi_Subsys_init+0x0/0x8 获得 REST_init
    [225.697265]--[结束跟踪 000000000000 ]---
    [225.837036] IRQ 96:无人关心(尝试使用“irqpoll"选项“选项引导选项引导)
    [225.843780] CPU:0 PID:0 Comm:swapper/0 tainted:g W O 6.1 .83-ti-gc1c2f1971fbf #1
    [225.852691]硬件名称:通用 DRA72X(平展设备树)
    [225.858825]从 show_stack+0x10/0x14 展开 runy_backtrace
    [225.864074]从 dump_stack_lvl+0x40/0x4c 的 show_stack
    [225.869171] dump_stack_lvl 来自__report_bad_irq+0x3c/0xc0
    [225.874786]来自 note_interrupt+0x284/0x2d0 的__report_bad_irq
    [225.880554] note_interrupt from handle_IRQ_event+0x7c/0x80
    [225.886169] Handle_IRQ+0x9C/0x204 中的 Handle_IRQ_event
    [225.892242] generic_handle_domain_IRQ+0x28/0x38 中的 handle_fastei_IRQ
    [225.898986] generic_handle_domain_IRQ 来自 GIC_Handle_IRQ+0x74/0x88
    [225.905364] generic_handle_arch_IRQ+0x34/0x44 中的 GIC_HANDLE_IRQ
    [225.911590] generic_handle_arch_irq_svc+0x88/0xc8 中的 IRQ
    [225.917388]异常堆栈 (0xc0f01ee8 至 0xc0f01f30)
    [225.922454] 1ee0:00000005 00000000 fe600000 00000000 c0 f08840 c104ce20
    [225.930694] 1f00:c0f04d10 c0f04d6c 00000000 c0e79be8 00000000 c0f04d78 C1 054310 c0f01f38
    [225.938903] 1f20:c0123080 c01080a4 600f0013 ffffffff
    [225.944000]来自 arch_CPU_IDLE+0x20/0x3c 的_IRQ_Svc
    [225.948913]来自 default_idle_call+0x3c/0x114 的 arch_cpu_idle
    [225.954589]来自 DO_IDLE+0x200/0x294 的 default_idle_call
    [225.959869]从 CPU_STARTUP_ENTRY+0x28/0x2C 执行 DO_IDLE
    [225.964965]来自 REST_INIT_+0xc8/0xcc 的 CPU_STARTUP_ENTRY
    [225.970245]来自 arch_post_acpi_Subsys_init+0x0/0x8 的 REST_init
    [225.976104]处理程序:
    [225.978393][ ] OMAP_GPIO_IRQ_HANDLER
    [225.982879]禁用 IRQ #96

    A15 似乎正在交互并禁用 IRQ。 您知道为什么以及如何避免这种情况发生吗?

    感谢你的帮助。

    此致、

    Marc

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

    您好:

    我出差外出。 请预计响应会有所延迟。

    -Josue

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

    您好:Marc、

    我假设您可能正在使用 Linux 已经使用的 GPIO、这会导致冲突。 仔细检查 GPIO 是否尚未使用。

    此外,通常,对于一个不同的主题,你应该打开一个新的主题。

    此致、

    Josue