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.

[参考译文] RTOS/am5728:供 IPU1使用的 UART 配置

Guru**** 2952510 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/673970/rtos-am5728-uart-configuration-for-use-by-ipu1

器件型号:AM5728
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!

我想将 UART10与中断驱动程序 SYSBIOS 驱动程序结合使用。

Linux 负责 iomux 和 IRQ 交叉开关配置。

为了使 UART10可以访问、我使用了自定义 rsc_table.h 并添加了:

#define UART10_CFG_REGS        0x4AE00000
#define UART10_CFG_regs_virt   (UART10_CFG_regs)

和:

   {
       TYPE_DEVMEM、
       UART10_CFG_regs_virt、UART10_CFG_regs、
       SZ_1M、0、0、"UART10_regs"、
   }、

在我的 Ipu1.cfg 中、我添加了:

var socType          ="am572x";
VAR UART             = XDC.loadPackage ('ti.drv.UART');
UART.Settings.socType = socType;

在我使用的 C 文件中:

#include //定义 UART_HwAttrs
#include
#include
#include
#include

   UART_HwAttrs UART_hwAttrs;
   UART_socGetInitCfg (UART_instance、&UART_hwAttrs);
   UART_hwAttrs.baseAddr = 0x6AE2B000;
   UART_socSetInitCfg (UART_instance、&UART_hwAttrs);

这似乎会处理错误的默认地址偏移。 这种方法适用于 I2C

现在、我设置 IRQ 交叉开关以将 UART10_IRQ (221)路由至 IPU1_IRQ32 (0x4A0027F0为0xDD0000)。

通过读取源代码、我找到了 HwAttrs.EventID 和 intNum、但没有这些字段的文档。

UART_open 失败:

[0][6.650]     [t=0xa213533f] ti.sysbios.family.arm.m3/hwi:错误:第1104行:E_hardFault:强制
[0][6.650]     ti.sysbios.family.arm.m3.hwi:第1104行:e_hardFault:Forced
[0][6.650]     [t=0xa2160591] ti.sysbios.family.arm.m3/hwi:错误:第1216行:e_usageFault:INVSTATE:EPSR 无效和指示
N 组合

如何告知 SYSBIOS UART 驱动程序/中断处理程序 UART10 IRQ 将位于 IPU1_IRQ32上?

此致、

环路2.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    UART 驱动程序的中断接线默认配置位于"pdk_am57xx_1_0_9\packages/ti\drv\uart\soc \am572x\uart_soc.c"文件中。

    因为您使用了以下配置
    UART.Settings.socType = socType;

    UART_HwAttrs uartInitCfg 用作中断的默认配置。 要修改此设置,只需更改 intNum,方法与使用更改基址的方法相同

    UART_socGetInitCfg (UART_instance、&UART_hwAttrs);
    uart_hwAttrs.intNum = 32;//在 UART_SoC.c 文件中默认设置为24
    UART_socSetInitCfg (UART_instance、&UART_hwAttrs);

    EventID 仅适用于 DSP 内核、因为它们是 DSP 内核的 eventCombiner 模块。 需要进行配置。

    希望这对您有所帮助。

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

    我假设 uboot 正在为 UART10配置引脚多路复用器、并且您已从 Linux 器件树中禁用 UART10。 现在、由于您没有在 IPU 上使用 Board_init 调用、因此您需要手动启用 UART10模块时钟、如下所述:
    processors.wiki.ti.com/.../Linux_IPC_on_AM57xx

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

    您好 Rahul、

    感谢您的快速回复。

    在器件树中禁用 UART10:
    串行@4ae2b000{
    兼容="ti、dra742-UART"、"ti、OMAP4-UART";
    reg =<0x4ae2b000 0x100>;
    中断=<0x0 0xdd 0x4>;
    ti、hwmods ="uart10";
    时钟频率=<0x2dc6c00>;
    STATUS ="禁用";
    };

    时钟、IRQ 交叉开关和引脚多路复用设置在 uboot 中完成。
    UART10的时钟有效:地址0x4AE07880 (0xb6fbd880)处的值:0x2
    我还可以访问 UART10寄存器:地址0x4AE2B000 (0xb6fa9000)处的值:0x5B (也适用于 IPU 任务)

    运行代码时、我通过 UART_INIT()获得(这一点不足为奇、因为它几乎不执行任何操作)
    但 UART_open()失败。 有一些 UART_drv_log1消息:如何启用它们以及它们将出现在何处?
    (备注:我不重建 PDK、需要很长时间)
    由于我已经设置了"UART_hwAttrs.enableInterrupt = 0;"(出于测试目的、我稍后需要使用中断)、因此即使 UART_open 也不应太大。
    我似乎找不到"extern void UARTIntDisable (uint32_t baseAddr、uint32_t intFlag"的实现;"、但我假设只设置/清除标志。

    那么、我是否会错过一些让 IPU 访问 UART10地址的东西?

    为什么在 ti/CSL/SoC/am572x/src/cslr_SoC_IPU_baseaddress.h 中将 CSL_IPU_UART10_regs 定义为0x4ae2b000U?
    该地址位于位带区。 因此、可用的虚拟地址将位于其他位置。
    我在另一篇文章中问我是否可以设置 IPU MMU 以匹配 CSL 默认值、但没有得到答案。

    自定义资源表中的条目、谁读取/使用它们以及它们控制什么?
    它只是允许访问定义的存储器范围吗?


    此致、
    环路2.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Processor SDK RTOS 中的 CSL 地址定义是为所有内核运行 RTOS 的 RTOS 用例定义的。 在此模式下、CSL 地址按原样使用。 但是、使用 remote-proc 和 IPC 时、地址转换和 MMU 表是使用资源表和系统 MMU 控制的 remoteproc 驱动程序。

    我们已经尝试解释了独立 IPU RTOS 应用程序中 MMU 设置差异以及使用 IPC/Remoteproc 运行此差异:
    processors.wiki.ti.com/.../Linux_IPC_on_AM57xx

    不能通过添加0x2000_0000偏移量来避免。 LLD 驱动程序允许用户使用 UART_SoC.c 中的配置在一个位置更新基址、但如果您直接使用 CSL、则需要考虑此偏移。

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

    我n`t 您的以下评论:

    [引用 USER="LO2]UART10的时钟处于活动状态:地址0x4AE07880 (0xb6fbd880)的值:0x2
    我还可以访问 UART10寄存器:地址0x4AE2B000 (0xb6fa9000)处的值:0x5B (也适用于 IPU 任务)

    应n`t 虚拟地址为0x6AE0_7880。 此外、查看 CM_WKUPAON_UART10_CLKCTRL 的寄存器定义、使能位为[17:16]、因此 不确定为什么您认为0x2表示已启用时钟。

    在开始与 Remoteproc 和 IPC 集成之前、我建议您通过在独立于 ARM Linux 的仿真器上加载应用程序来测试这一点。

    此致、

    Rahul