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.

[参考译文] AM263P4:SysConfig 中的完整 ADC 外部多路复用器配置

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1513875/am263p4-full-adc-external-mux-configuration-in-sysconfig

器件型号:AM263P4
主题:SysConfig 中讨论的其他器件

工具/软件:

我尝试通过 SysConfig 使用 ADC0的外部多路复用功能。 但是、与此功能相关的唯一可用选项似乎是"Use External Mux"(使用外部多路复用器)复选框。 技术手册粗略地详细介绍了如何使用外部多路复用器、但实际上并未引用 SysConfig 在设置和执行中将执行/不会执行的操作。 SDK 中似乎也没有使用此功能的示例。  我正在寻找有关如何在 SysConfig 中正确配置 ADC、以及需要在代码中放置哪些其他 API 命令以进行设置和执行的指导。

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

    在研究如何将 SOC 连接到器件的外部引脚时、我注意到了在 MCU_PLUS_SDK_am263px_10_01_00_31中实现 ADC_selectSOCExtChannel。  以下是从 SDK 复制的函数:

    static inline void
    ADC_selectSOCExtChannel(uint32_t base, ADC_SOCNumber socNumber,
                            uint16_t extChannel)
    {
        uint32_t ctlRegAddr;
    
        //
        // Check the arguments.
        //
        DebugP_assert(extChannel <= 3U);
    
        //
        // Calculate address for the SOC control register.
        //
        ctlRegAddr = base + CSL_ADC_ADCSOC0CTL +
            ((uint32_t)socNumber * ADC_ADCSOCxCTL_STEP);
    
        //
        // Set the external channel configuration of the specified SOC.
        //
        HW_WR_REG32(ctlRegAddr,
            ((HW_RD_REG32(ctlRegAddr) & ~((uint32_t)CSL_ADC_ADCSOC0CTL_EXTCHSEL_MASK)) |
            (uint32_t)extChannel));
    
    }

    然后从 cslr_adc.h 文件中:

    #define CSL_ADC_ADCSOC0CTL_EXTCHSEL_MASK                                       (0xF0000000U)

    这是寄存器附录中的寄存器定义:

    请注意、EXTCHSEL 是位31:28、与 CSL_ADC_ADCSOC0CTL_EXTCHSEL_MASK 的值相关。  但请注意、传入的 extChannel 值在函数中测试为<= 3、然后直接使用。 因为它永远不会被位移位、所以它实际上永远不会对寄存器中的正确位进行工作。

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

    您好 Nathan

    请注意、EXTCHSEL 是位31:28、与 CSL_ADC_ADCSOC0CTL_EXTCHSEL_MASK 的值相关。  但请注意、传入的 extChannel 值在函数中测试为<= 3、然后直接使用。 因为它永远不会发生位移位、所以它实际上永远不会对寄存器中的正确位进行工作。

    感谢您指出这一点、您的观察结果看起来正确、修复方法:

        HW_WR_REG32(ctlRegAddr,
            ((HW_RD_REG32(ctlRegAddr) & ~((uint32_t)CSL_ADC_ADCSOC0CTL_EXTCHSEL_MASK)) |
            (((uint32_t)extChannel << CSL_ADC_ADCSOC0CTL_EXTCHSEL_SHIFT) & (uint32_t)CSL_ADC_ADCSOC0CTL_EXTCHSEL_MASK)));

    这应该会起作用、我将与开发团队确认并提交一个错误来修复此问题!

    谢谢、此致
    阿克什特

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

    感谢您的答复。  我已经对代码进行了类似的修改、但仍无法确定如何正确地将这些信号映射到输出引脚。 有人能提供示例代码、SysConfig 或者实际上展示如何正确设置这些信号并将其路由到引脚的任何内容吗?

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

    您好 Nathan

    要将信号映射到输出引脚、需要使用 ADC_EXTCH_XBAR。

    您可以完成 7.5.2.9.1外部通道选择- TRM、以获取更多信息!

    此致、
    阿克什特

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

    我一直在尝试遵循这一部分、但它提供的细节极其有限、并且有冲突的信息。  我尝试的任何配置都不会从预期引脚产生信号。

    查看:

    那么、它是两位多路复用器选择吗? 因为这与显示4位通道选择的其他信息不匹配。

    这是一个很好的地方

    这是如何实现的? GPIO 输出交叉开关在 SysConfig 中不是选项。 输出 XBAR 为 A、但不包含 ADCxEXTMUX 的引用。 还提供 GPIO INT XBAR、但也与该任务无关。  

    我已遵循以下简单说明:

    在我的应用中、我使用一个名为 CONFIG_ADC1的 ADC。 SOC0在 ADC1上设置为 ADCIN0。 SOC 触发器仅为软件设置。 ADC_EXTCH_XBAR 设置如下:

    我已经修改了 ADC_selectSOCExtChannel()、如前所述。 我将使用以下代码行对此进行设置和测试:

    ADC_selectSOCExtChannel(CONFIG_ADC1_BASE_ADDR,0,3);
    ADC_forceSOC(CONFIG_ADC1_BASE_ADDR, ADC_SOC_NUMBER0);

    我已经调整了我能想到的所有内容、但 ADC_EXTCH_XBAR 中列出的任何引脚永远不会有任何变化。  这让我想到了我认为这方面的文档存在巨大差距的地方。 没有说明 ADC_EXTCH_XBAR 与 ADCxEXTMUX 自动映射的文档、也没有说明需要这种代码的文档。 这并没有真正的累加、因为 ADC_EXTCH_XBAR 具有的引脚远多于 ADCxEXTMUX 可以支持的引脚。 即使您给我发送了内容、也没有展示如何将 ADC 实例连接到 ADC_EXTCH_XBAR、这就是这个关键。

    我在这里怀疑这些特性未完全实现、并且很可能外设实际上无法用于运行 ADC 的外部多路复用器。

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

    您好 Nathan

    我通过 SysConfig 找到了另一个错误

    选中"Use External MUX"会调用禁用 API 而不是启用、我们需要修复此问题、当时您可以尝试启用 API 并告诉我是否有任何更改。

    我在这里怀疑这些功能尚未完全实现、很可能是因为外设实际上无法用于从 ADC 运行外部多路复用器。[/报价]

    对此造成的不便、我深表歉意、但您的怀疑似乎是对的、这些功能未正确实施、我将与团队进行讨论、并上报此问题以确保这些功能得到正确实施!

    非常感谢您的耐心!

    此致、
    阿克什特

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

    我也注意到了 ADC ExtMuxPreselect。 我已经使用 ADC_enableExtMuxPreselect ()函数进行了实验。 这似乎不是修复问题。

    文档中也不清楚是否需要启用该功能。 在某些地方、听起来好像 ExtMuxPreselect 是可选的、可作为一种根据 ADC 采样更改多路复用器时序的方法。 但在其他地方、它听起来好像必须启用它、这意味着在使用外部 ADC 多路复用器功能时、会强制使用 ExtMuxPreselect 启用的时序。

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

    谢谢 Nathan 指出这一点。

    请放心、我正在与硬件和软件团队合作以在 SDK 和文档中解决此问题、我们还将尝试专注于创建示例、以更好地展示 ADC 外部通道选择的用法。

    明天我会回复您、提供比这更有用的功能、我们将尽快解决此问题。

    此致、
    阿克什特

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

    您好 Nathan

    那么这是两位多路复用器选择吗? 因为这与显示4位通道选择的其他信息不匹配。

    ADC 包装器实例确实提供了4位 EXTCHSEL、但在 AM263p 中、只有2个 LSB 连接至引脚多路复用器、即该寄存器为[3:0]…… 但有效位仅为2 LSB。 即[1:0]连接至引脚多路复用

    我们会将这个添加到 TRM 中。

    我们还正在创建一个使用外部通道的演示示例。 我会尽快回复您。

    我将遵循此流程:

    The ADC_EXTCH_XBAR[9:0] outputs can be mapped to GPIO by configuring the associated IOMUX to use the ADC_EXTCH_XBAR signal accordingly. the EXTCHSEL field in ADCs supports up to 2 bit signals, but fewer mux selection output pins can be configured if desired.
    
    Each ADC can send upto 2 signals to the internal ADCEXTCHSELy muxes, the configurations for which are present in the Global Control Registers. ADCEXTCHSELy (y = 0-9)  correspond to the ADC_EXTCH_XBARy outputs. the registers ADCEXTCHSELy[3:0] select which EXTCHSEL signal from each ADC to be passed on to the ADC_EXTCH_XBARy. The IOMUX that selects and outputs ADC_EXTCH_XBARy can be used either individually or grouped to configure the external muxes.
    
    To select a specific channel on the external mux.., 
        1. configure ADCSOCxCTRL.CHSEL to select the ADC pin that is connected to the mux output. 
        2. the ADCEXTCHSELy maps the signals from ADCs' EXTCHSEL signals to the ADC_EXTCH_XBARy outputs. Configure ADCEXTCHSELy in the Global Control Regs to pass these ADCSOCxEXTCHSEL signals.
        3. Once, the IOMUX is configured to use the ADC_EXTCH_XBAR signals, and an SOC that is configured with EXTCHSEL and ADCEXTCHSELx at Global Registers is triggered, this signal goes through to the IO to the external muxes.
     

    非常感谢您的耐心!

    此致、
    阿克什特

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

    您好 Nathan

    请参阅以下示例、使 ADC_EXTCH 选择功能正常工作。

    在这里、我使用的是固定 API:

    static inline void
    App_ADC_selectSOCExtChannel(uint32_t base, ADC_SOCNumber socNumber,
                            uint16_t extChannel)
    {
        uint32_t ctlRegAddr;
    
        //
        // Check the arguments.
        //
        DebugP_assert(extChannel <= 3U);
    
        //
        // Calculate address for the SOC control register.
        //
        ctlRegAddr = base + CSL_ADC_ADCSOC0CTL +
            ((uint32_t)socNumber * ADC_ADCSOCxCTL_STEP);
    
        //
        // Set the external channel configuration of the specified SOC.
        //
        // HW_WR_REG32(ctlRegAddr,
        //     ((HW_RD_REG32(ctlRegAddr) & ~((uint32_t)CSL_ADC_ADCSOC0CTL_EXTCHSEL_MASK)) |
        //     (uint32_t)extChannel));
        HW_WR_REG32(ctlRegAddr,
            ((HW_RD_REG32(ctlRegAddr) & ~((uint32_t)CSL_ADC_ADCSOC0CTL_EXTCHSEL_MASK)) |
            (((uint32_t)extChannel << CSL_ADC_ADCSOC0CTL_EXTCHSEL_SHIFT) & (uint32_t)CSL_ADC_ADCSOC0CTL_EXTCHSEL_MASK)));
    
    }

    在 main 函数中使用调用 API 已配置 SOC0、所需的外部通道为"2"

    App_ADC_selectSOCExtChannel(baseAddr, ADC_SOC_NUMBER0, ADC_CH_ADCINX_2);

    然后我调用以下 API:

    SOC_selectAdcExtChXbar(0, ADC1_EXTCHSEL_BIT0); //ADC1 is selected in sysconfig
    SOC_selectAdcExtChXbar(1, ADC1_EXTCHSEL_BIT1);

    SOC_selectAdcExtChxbar (uint32_t extChXbarOut、uint32_t extChXbarIn) API 为每个 Xbar 输出的输出选择 ADC 外部通道选择位。 这很可能是您配置中缺少的步骤。

    此 API 为 ADC 输入配置外部通道交叉开关(XBAR)、使您可以:

    1. 选择将哪些 ADC 输入引脚连接到外部多路复用器
    2. 配置 ADC 外部通道选择位和 GPIO 引脚之间的布线
    选择 SysConfig 中的 ADC_EXTCH_XBAR (这只是为引脚设置正确的引脚多路复用以开启 ADC 外部选择线路)
    现在、当我运行程序时、我们可以看到外部通道2线路上升 C14
    以表明其正常工作 ,现在如果我强制 SOC2改为:
    我们可以看到 C14上的外部通道2的线路复位为0
    同样、如果需要  所需的外部通道为3。
    App_ADC_selectSOCExtChannel(baseAddr, ADC_SOC_NUMBER0, ADC_CH_ADCINX_3);
    我可以看到 在 C13和 C14上选择通道3
    附加参考项目以供您阅读!
    请告诉我这是否有助于解决您的问题!
    此致、
    阿克什特
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Akshit、

      使用  SOC_selectAdcExtChxbar (uint32_t extChXbarOut、uint32_t extChXbarIn) API 是我需要的部分。 修改 App_adc_selectSOCExtChannel()函数并使用 SOC_selectAdcExtChxbar 后、我能够按预期成功地看到输出引脚上的变化。

      我也能回答我的另一个问题。 外部通道配置似乎对于每个 ADC 实例都是唯一的。 这样、我可以配置多个 ADC 实例、以使用 ADC 外部多路复用器配置 、然后将每个实例映射到 ADC_EXTCH_XBAR 上的唯一引脚。  感谢您的帮助。