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.

[参考译文] 正确退出(&quot);设置和/或配置(&quot);MCU#39;s 模拟比较器(S)。

Guru**** 2430620 points
Other Parts Discussed in Thread: TM4C129XNCZAD

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/680712/correctly-setting-up-and-or-configuring-the-mcu-s-analog-comparator-s

主题中讨论的其他器件:TM4C129XNCZAD

模拟比较器 (ACS)-驻留在该供应商(过去)和当前 MCU 上-提供有价值的模拟测量和信号-以及"设置"之后-运行(几乎)完全不受(其他) MCU 的影响。  这种执行能力(基本上作为独立的硬件块)极大地帮助了那些 需要"监管机构批准"的应用程序。   (或有用的)  (即我们"见证了"模拟比较器"在(其他) MCU 软件功能(故意)中断时"继续执行")!

现在、这些模拟比较器的设置并不是"如它可能/应该那样清晰"。   虽然我的公司在 LX4F (过去)和4C123 (现在)的"ACS"方面取得了成功、但与"最全面的"其他 MCU 外设相比、(通常的) API 源并不引人注目。

此处介绍-是公司/我的最大努力-指导"客户-用户"取得成功的 "模拟比较器"结果。   同样,令人惊讶的是,通常的“一流”API 在这方面也有所下降。  

为了"解决" API 的不足-提供了具有相关添加内容(为清晰起见、使用颜色编码)的 MCU 手册摘录(真实副本)。

第一部分-来自 MCU 的 GPIO 部分: (来自4C1294手册)

GPIO 信号具有备用硬件功能。   下表列出了 GPIO 管脚及其 模拟和数字复用功能。   将 GPIO 备用功能选择(GPIOAFSEL)和 GPIODEN 寄存  器中相应的位置位、并将 GPIO 端口控制(GPIOPCTL)寄存器中的 PMCx 位域配置为下表所示的数字编码、即可启用数字备用硬件功能。   下表中的模拟信号也可耐受3.3V 电压、 通过"清除 GPIO 数字使能(GPIODEN)寄存器中的 DEN 位进行配置。"

我已随意 "突出显示" 了与模拟比较器相关的部分(上面)。    请注意、这些模拟比较器的"反相和同相输入"都是模拟的!   输出-为了使事情保持有趣-是数字化的!

现在进入"下表"(参考上文第2句):

要选择模拟比较器输入-也需要-、在 "GPIOAMSL"寄存器中"设置正确的(配合位)。   API 尚未提供直接功能-以实现此目的。

另请注意:"GPIOPCTL"寄存器"必须在"4位字段"中用"0"编码-为每个端口位保留-才能用作模拟比较器输入。   同样、没有直接的 API 函数实现这一点。

为此、我们添加了更多源信息-来自 MCU 手册:

如前所述、"常见的 API 可疑情况" 在实现这些关键寄存器(和位)设置方面远远不够-这是必需的。   

那么该怎么办?   "if and when "- API "Fails to satise"-可以   使用 DRM (通过 HWREG 宏)-(可能)将转义供应商的(不要使用 DRM) wrath!   (可能)

随后应(或可能)更多-目前芝加哥正在下雪-在3天前达到71°F 后...

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

    如上所述、通常出色的"API"(相关文件 comp.c) 完全避免 了 (任何尝试)在" 模拟比较器" 的"输入或输出引脚"配置!   (对于那些"震惊/不信"的人-一定要来这里!)

    (替代答案)(通常)位于 API 文件 "gpio.c"-但在本例中、既不是"完全"也不是"令人信服的"。

    此处再次显示的是这些功能的"真实副本"-被工作人员/Moi 视为模拟比较器操作的"最合适"功能。   警告-这是一个深度列表!

    我认为这些职能证明是必要的:

    • GPIOPinTypeComparator
    • GPIOPinTypeComparatorOutput
    • GPIOPinConfigure

    //
    //
    //! 配置引脚以用作模拟比较器输入。
    //!
    //! \param ui32Port 是 GPIO 端口的基址。
    //! \param ui8pins 是引脚的位封装表示。
    //!
    //! 模拟比较器输入引脚必须针对模拟进行适当配置
    //! 使比较器正常工作。 此功能提供了正确的
    //! 这些引脚的配置。
    //!
    //! 引脚使用位封装字节指定、其中每个位都是
    //! 置位表示要访问的引脚、以及字节的位0的位置
    //! 代表 GPIO 端口引脚0、位1代表 GPIO 端口引脚1、依此类推。
    //!
    //! 注意此函数不能用于将任何引脚转换为模拟
    //! 比较器输入;它只配置一个模拟比较器引脚以使其正确
    //! 操作。 请注意,还需要一个 GPIOPinConfigure()函数调用
    //! 以正确配置模拟比较器功能的引脚。
    //!
    //! 注意 Tiva 器件上的 GPIO 引脚子集、尤其是所使用的引脚
    //! JTAG/SWD 接口和任何能够用作 NMI 输入的引脚
    //! 锁定以防止意外重新配置。 这些引脚必须解锁
    //! 使用直接寄存器写入相关 GPIO_LOCK 和 GPIO_O_CR
    //! 寄存器、然后才能调用该函数。 请参阅``GPIO_JTAG'
    //! 所需机制的示例应用、请查阅您的器件
    //! 数据表、了解有关受影响引脚的信息。
    //!
    //! \无返回。
    //
    //
    无效
    GPIOPinTypeComparator (uint32_t ui32端口、uint8_t ui8引脚)

    //
    //检查参数。
    //
    assert (_GPIOBaseValid (ui32Port));

    //
    //使引脚成为输入。
    //
    GPIODirModeSet (ui32端口、ui8引脚、GPIO_DIR_MODE_IN);

    //
    //为模拟操作设置焊盘。     CB1添加了:设置(支持) ANA 的引脚。 COMP 的输入 能力 -更改为 "GPIO_PIN_TYPE_ANALOG "至关重要。

                                          请注意-由于这些输入引脚是模拟引脚、因此它们不符合对"GPIOPinConfigure"的任何/所有要求-在数字引脚上强制执行!
    //
    GPIOPadConfigSet (ui32Port、ui8引脚、GPIO_Strength _2mA、GPIO_PIN_TYPE_ANALOG);  CB1补充说:用户必须确保此函数在"GPIOAMSEL!"中"设置"适当的位   否则-用户必须使用 DRM 的"HWREG"宏-来"设置每个候选位"-以被用作模拟比较器。 输入-具有"GPIOAMSL"。
    }                                                                                      

    //
    //
    //! 配置引脚以用作模拟比较器输出。
    //!
    //! \param ui32Port 是 GPIO 端口的基址。
    //! \param ui8pins 是引脚的位封装表示。
    //!
    //! 模拟比较器输出引脚必须针对模拟进行适当配置
    //! 使比较器正常工作。 此功能提供了正确的
    //! 这些引脚的配置。
    //!
    //! 引脚使用位封装字节指定、其中每个位都是
    //! 置位表示要访问的引脚、以及字节的位0的位置
    //! 代表 GPIO 端口引脚0、位1代表 GPIO 端口引脚1、依此类推。
    //!
    //! \无返回。
    //
    //
    GPIOPinTypeComparatorOutput (uint32_t ui32端口、uint8_t ui8引脚)

    //
    //检查参数。
    //
    assert (_GPIOBaseValid (ui32Port));

    //
    //使引脚成为 "输入"。      CB1补充说: 此处(可能)错误使用"输入"。 (除非是“干扰避免”)    ANA COMP 输出必须为数字-***而不是模拟***  
    //
    GPIODirModeSet (ui32端口、ui8引脚、GPIO_DIR_MODE_HW);

    //
    //为标准推挽操作设置焊盘。
    //
    GPIOPadConfigSet (ui32Port、ui8引脚、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD);     CB1补充说:"强度"和"Type_STD"……  信号数字输出!

    //
    //
    //! 配置 GPIO 引脚的复用功能。
    //!
    //! \param ui32PinConfig 是引脚配置值、仅指定为一个
    //! GPIO_P????? 值。
    //!
    //! 此函数配置用于选择外设功能的引脚多路复用器
    //! 与特定 GPIO 引脚相关联的引脚。 在 A 上只有一个外设功能
    //! 时间可与 GPIO 引脚关联、并且每个外设功能都应
    //! 一次只与单个 GPIO 引脚关联(尽管如此
    //! 其中许多引脚可与多个 GPIO 引脚关联)。 更改为完全
    //! 配置引脚,还应调用 GPIOPinType*()函数。
    //!
    //! 可用映射在 pin_map.h 中按器件提供      (这突出显示-不是 CB1的添加(如下所示)

    CB1补充说:pin_map.h 实际上在这方面是"沉默"的-对于 ANA COMP 输入!  (没有为 Cn+或 Cn-提供标识符。  

    零件_ 定义哪个控件集
    //! 定义、以便它们与正在使用的器件匹配。
    //! 例如、为了获得、必须定义\b PART_TM4C129XNCZAD
    //! 更正了 TM4C129XNCZAD 器件的引脚映射。
    //!
    //! 注意:如果将同一信号分配给两个不同的 GPIO 端口
    //! 引脚、信号分配给具有最低字母和的端口
    //! 忽略对较高字母端口的分配。
    //!
    //! \无返回。
    //
    //
    无效
    GPIOPinConfigure (uint32_t ui32pinConfig)

    uint32_t ui32Base、ui32Shift;

    //
    //检查参数。
    //
    assert ((((ui32PinConfig >> 16)& 0xff)< 18);
    assert ((((ui32PinConfig >> 8)& 0xe3)= 0);

    //从输入值中提取基址索引。
    //
    ui32Base =(ui32PinConfig >> 16)& 0xff;

    //获取 GPIO 模块的基址,选择 APB 或
    //适当时 AHB 孔径。
    //
    if (HWREG (SYSCTL_GPIOHBCTL)&(1 << ui32Base))

    ui32Base = g_pui32GPIOBaseAddrs[(ui32Base << 1)+ 1];

    其他

    ui32Base = g_pui32GPIOBaseAddrs[ui32Base <<1];

    //从输入值中提取移位。
    //
    ui32Shift =(ui32PinConfig >> 8)和0xff;

    //为此 GPIO 引脚写入请求的引脚复用值。            CB1添加了-我们可能需要手动 "查找并添加" 此(正确)"引脚复用值"
    //                                                             在 pin_map.h 中找不到它- 因为它是零!  无"PCTL"非零条目-必填!
    HWREG (ui32Base + GPIO_PCTL)=((HWREG (ui32Base + GPIO_PCTL)和~(0xF << ui32Shift))|(((ui32PinConfig & 0xF)<< ui32Shift)));

    (现在)人们认为、(那些)具有合适的"需求或兴趣"已经"配备足够好"以取得成功-具有供应商(分散的位)源文档-对模拟比较器进行寻址。

    再说一次-过去和现在-我们的小型技术公司通过这些模拟比较器获得了(高度满意)结果...

    由""引导(同样也是始终)-穿过(甚至)一个不易管理的森林的路径-可能"找到"、然后经过...

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

    您好 CB1、

    感谢您分享这篇非常详细的帖子! 我将自己预订:)

    这对许多人来说都是非常有用的资源、直到我们能够获得文档以清除问题(甚至可能是因为它的详细信息)。