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/TM4C129XNCZAD:GPIO 读取不一致

Guru**** 2591700 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/587140/rtos-tm4c129xnczad-gpio-read-inconsistency

器件型号:TM4C129XNCZAD

工具/软件:TI-RTOS

您好!

基于 TM4C129XNXCZD 的定制板。  门传感器连接到微控制器的 PQ0。 如果门打开、则 PQ0被拉至高电平。 如果门关闭、 则 PQ0被拉至低电平。  默认情况下、门关闭。  PQ0被配置为在两个边沿上都有中断的输入。 接收到中断时、我读取 GPIO 引脚以检查引脚是高电平还是低电平。

当我打开门时 、PQ0被拉至高电平、GPIO_Read 返回1;

当我关闭门时、PQ0被拉至低电平、GPIO 读取仍然返回1、而不是返回0。  如果我在 GPIO_Read 之前放置一个延迟、GPIO_Read 返回0;

在 ISR 中、我将事件发布到任务、并且在该任务中调用 GPIO 读取。

在电路板的早期版本中、门传感器连接到 PP1、我没有遇到此问题。  使用 PQ0和 PP0时需要采取任何预防措施? 我还应该在 Tiva 微控制器论坛中发布它吗?

TIA

 Narendra

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

    Narendra、

    在"GPIO 引脚配置"中、PQ0是否配置为上拉电阻? 如果是、请尝试将其配置为 GPIO_CFG_IN_NOPULL。

    检查数据表、我看不到 PQ0的任何特殊功能。 将示波器连接到引脚以观察实际转换是很有趣的。

    Derrick

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

    使用 GPIO 上拉电阻器和 GPIO 无上拉电阻器进行了测试。  结果相同

    在示波器上可以看到、引脚状态从0切换到1或从1切换到0之间没有延迟。 将尝试附加屏幕截图

    Narendra

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

    Derrick、

    从数据表->" PP0和 PQ0中断用作主中断并提供传统的聚合中断版本。"  这是否意味着我们可以将 P 和 Q 端口配置为仅具有1个中断的其他端口、并检查中断所针对的引脚的中断状态寄存器

    Narendra

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

    Narendra、

    是良好捕获、如果分别在端口 P 或端口 Q 的任何引脚上生成中断、PP0和 PQ0将使中断状态位有效。 端口 P 和端口 Q 是唯一的、因为每个单独的引脚都可以独立产生中断、并且具有独立的中断编号。

     www.ti.com/.../tm4c129xnczad.pdf 第129页


    如果您计划使用 PP0或 PQ0、我建议确保在该端口上不启用其他中断。 如果您确实需要使用 PP0或 PQ0、通过检查屏蔽的中断状态寄存器、您可以检查哪个引脚产生了中断。

    或者、您也可以使用端口 P/Q 引脚1-7。 这将涉及调整用于相应引脚的中断编号。

    您是否使用 Hwi 模块来为中断提供服务?

    Derrick

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

    我正在使用
    GPIO_PinConfig、GPIO_CallbackFxn、const GPIOTIVA_Config 以配置 GPIO 引脚。
    GPIO_setCallback 用于设置中断处理程序

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

    Narendra、

    如果在执行上述建议后仍遇到问题、可以使用存储器浏览器在运行时直接观察 GPIO 寄存器。 我建议在您的 GPIO 回调中使用断点。

    以下是有用的基址和偏移量:

    GPIO 端口 P (AHB):0x4006.5000

    GPIO 端口 Q (AHB):0x4006.6000

     



    Derrick

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

    我仍然遇到此问题。  我在回拨中放置了一个断点。  我观察到0x4006.6000处的存储器、并观察到一件奇怪的事情。  我看到偏移量为0x3FC。  端口 Q 寄存器数据在偏移量为0x3FC 时可用。  已附加 CCS 的屏幕截图

    这种奇怪行为的原因可能是什么。

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

    Narendra、

    您应将端口 Q 上的所有其他引脚设置为输出、但您使用的引脚 PP0除外。 将输出驱动为0。

    Derrick