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.

[参考译文] TM4C123GH6PM:可以 quot;Unconfigure"一个使用 TivaWare 的引脚?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/610787/tm4c123gh6pm-possible-to-unconfigure-a-pin-using-tivaware

器件型号:TM4C123GH6PM

我有多种"模式"的工作模式。 一种模式要求 PB5为 T1CCP1并输出1/10脉宽的1ms 脉冲。 另一种模式要求 PB5为 GPIO 输入。 可能有三种或四种不同的操作模式、每种模式都以不同的方式使用引脚。 我的代码包括一个有限状态机机制来执行设置、操作和每种模式的中断。

当进入使用 PB5作为 T1CCP1的模式时、设置代码执行此操作:

//将 GPIO 多路复用器设置为计时器
GPIOPinConfigure (GPIO_PB5_T1CCP1);

//将引脚类型设置为 CCP
GPIOPinTypeTimer (GPIO_PORTB_BASE、GPIO_PIN_5);

//将计时器配置为16位周期
TimerConfigure (Timer1_base、TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_PWM);

//设置 PWM 周期
TimerLoadSet (Timer1_base、timer_B、40000);

//设置脉冲宽度
TimerMatchSet (Timer1_base、timer_B、4000);

//启用计时器
TimerEnable (Timer1_base、timer_B);

这起作用了。 现在、我尝试执行撕下代码、在调用不同模式的设置代码之前将引脚恢复到其原始状态。 到目前为止、我只有以下内容:

//禁用计时器
TimerDisable (Timer1_base、timer_B);

//将引脚类型设置为 GPIO
GPIOPinTypeGPIOInput (GPIO_PORTB_BASE、GPIO_PIN_5);

我需要等效 的 TimerUnconfigure()来中断计时器设置,并需要 GPIOPinConfigure (GPIO_PB5_GPIO)来从计时器中取消复用引脚。 但没有函数 TimerUnconfigure()或等效函   数,也没有 GPIO_PB5_GPIO 或等效定义可传递给 GPIOPinConfigure()以反转 GPIOPinConfigure (GPIO_PB5_T1CCP1)的操作。

我如何才能删除此设置、以便多次进入和退出每个模式、并在切换后使引脚保持一致状态、而无需完全系统复位?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只需重新配置到其他状态即可。 如果需要该状态与默认状态相同、则将其配置为该状态。

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

    我是否可以提出不同的"思路?"   考虑电路"Receiving GPIO_PB5"-很可能是这样的(连接的)电路"预期" 2个信号电平-并根据更改其响应。   因此-认为有必要"断开 PB5与这些电路元件的连接-目前尚未选定!"    这可以通过数据多路复用器来实现(海报 Robert 经常建议这样做)。

    您必须-可能通过上拉/下拉电阻器-确保那些与 PB5 "未连接"的电路元件-在 PB5离线时正常运行!    (再说一次-通常上拉/下拉 Rs 将实现这一目标。。)

    同样、我(练习)认为、必须考虑"不同电路元件之间的隔离"。   (很可能被雇用-因此他增加了数据多路复用器。)

    要实现 PB5的"改变心率:"

    • 为要"从 PB5断开连接"的电路元件(大约)订购 PB5至所需状态(可能空闲)
    • 将数据多路复用器切换为"备用(未使用)通道!"
    • 根据"即将选定"电路的要求重新发布 GPIOPinConfigure()。
    • 只有这样-命令数据多路复用器切换到目标(新) PB5收件人。   (这种情况应"合理"无干扰。 -请注意使用"过量多路复用器通道"防止 PB5的"瞬态输出"到达(任何)目标电路-直到(之后)正确配置!)

    您的数据多路复用器可能必须"适应并适应"模拟和数字信号-这种情况未出现(或我的速度读取缺失...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这正是我想要做的-但是怎么做?

    GPIOPinConfigure (GPIO_PB5_T1CCP1)的效果如何逆转?

    pin_map.h 为 PB5定义了以下内容:

    #define GPIO_PB5_SSI2FSS 0x00011402
    #define GPIO_PB5_M0PWM3 0x00011404
    #define GPIO_PB5_T1CCP1 0x00011407
    #define GPIO_PB5_CAN0TX 0x00011408

    我想"以上都不是"、没有任何选择。

    如何进行 GPIOPinConfigure (GPIO_PB5_NONE_OF_TO_上述)以取消设置多路复用器??
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    @CB1_MOBILE 感谢您的回复。 但是、此时硬件不是问题。 电路板的设计。 电路正确。 此应用程序是我们自2012年以来一直使用另一家供应商的微控制器执行的操作。 我们现在使用 TM4C 实现这一目标。 我尝试避免直接寄存器编程、因为我们使用多个 TM4C 器件型号用于类似用途、我们编写一个软件代码库来支持所有硬件变体、未来的硬件变体将被添加、因此我们编写的是可维护性。 在此应用中、硬件构建一次、但软件必须维护、改进和扩展多年。 (我最近看到了一份白皮书、我现在似乎无法找到该白皮书、该白皮书讨论了数十年软件维护需求、更不用说几年了。)

    在我的当前问题中、我知道 TimerDisable (Timer1_base、timer_B)将"撤消" TimerEnable (Timer1_base、timer_B)、并且计时器可以保持在该状态、已配置但未运行。 GPIOPinTypeGPIOInput (GPIO_PORTB_BASE、GPIO_PIN_5)将引脚方向设置回输入。 我唯一的问题是、TivaWare 中的哪个选项会"撤消"GPIOPinConfigure (GPIO_PB5_T1CCP1)以从计时器中取消多路复用 GPIO 引脚? 因为这似乎不是一个选项。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不将其配置为 GPIO 会撤消多路复用器? 我本来希望它能够实现、但之后我不会在模式之间切换(不确定为什么这会有用)。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    GPIOPinTypeGPIOInput()执行以下操作:
    GPIODirModeSet (ui32端口、ui8引脚、GPIO_DIR_MODE_IN);
    GPIOPadConfigSet (ui32Port、ui8引脚、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD);

    它不会像我所说的那样触及 GPIOPCTL。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不相信您发表的文章完全解释了"电路下游-并连接到 PB5。"

    每个电路板是否只部署了一组电路? 如果这样做"不是这样"、那么"所有多个电路都将"看到并感受到"PB5的影响"、这不是您的意图-可以吗? 细节很好——我们还不清楚……
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有解释下行电路、因为它是不相关的。 我要问的是软件。 我似乎无法确定要调用的 TivaWare 函数。 多年来、我一直在 TI 竞争对手的 MCU 上执行类似的操作。 我知道可以做到。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="12ve12pm"]我没有解释下游电路,因为它不相关。

    如果多个(不同)电路"全部连接到 PB5"-则每个电路/每个电路都会受到 PB5的电平或边缘的影响-我仍然认为这是(非常)相关的。

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

    您好、12月12日下午、

    如果您概述 TivaWare 驱动程序库指南、您会发现实际上没有用于"撤消"多路复用器配置的函数: www.ti.com/.../spmu298d.pdf

    这样做的原因是这样一个函数将是一个不必要的步骤。

    例如、您已正确启动以下有关 TivaWare 的操作:

    [引用 user="12ve12pm]GPIOPinTypeGPIOInput()执行以下操作:
    GPIODirModeSet (ui32端口、ui8引脚、GPIO_DIR_MODE_IN);
    GPIOPadConfigSet (ui32Port、ui8引脚、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD);

    [/报价]

    如果您进一步深入研究这些调用、特别是 GPIODirModeSet (ui32Port、ui8Pins、GPIO_DIR_MODE_IN);调用、您将找到以下内容:

    HWREG (ui32Port + GPIO_AFSEL)=((ui32PinIO 和2)?
    (HWREG (ui32Port + GPIO_AFSEL)|
    ui8引脚):
    (HWREG (ui32Port + GPIO_AFSEL)和
    ~(ui8引脚))); 

    这个用于直接寄存器写入  的函数调用是为了配置 TM4C123GH6PM 的 GPIO 备用功能选择(GPIOAFSEL)。

    通过执行此操作、GPIO 备用功能选择将被转换为一个模式、在这个模式中、引脚被视为一个 GPIO 并且由 GPIO 寄存器控制。 因此、这使得 GPIOPCTL 内部的特定设置不再相关、因为该引脚不再配置为使用 由 GPIOPCTL 确定的任何外设。

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