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.

[参考译文] TM4C1290NCPDT:端口 G 每引脚 GPIO 中断始终触发端口 G0中断。

Guru**** 2524460 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/987467/tm4c1290ncpdt-port-g-per-pin-gpio-interrupts-always-firing-port-g0-interrupt

器件型号:TM4C1290NCPDT

我尝试使用 GPIO 端口 G 引脚0、1和2来生成单独的中断。  3个引脚的中断起作用、不同之处在于引脚1或2上的任何中断也总是会向引脚0 ISR 生成中断。  Periperal 驱动程序库中的 GPIOIntEnable()具有以下注释:

注:
如果此调用用于启用 GPIO 端口 P 或 Q 上的摘要中断(GPIOIntTypeSet())
在未启用 GPIO_discrete 的情况下)、则这些端口的所有单独中断必须为
在 GPIO 模块中使用 GPIOIntEnable()使能,除了引脚0的中断外,所有中断都必须是
在 NVIC 中使用 IntDisable()函数禁用。 端口的中断汇总为
路由到 INT_GPIOP0或 INT_GPIOQ0、必须启用该引脚才能处理中断。 如果
否则、任何保持启用状态的 GPIO 引脚中断也会触发
单个中断。

我的代码是:

   GPIOIntTypeSet (GPIO_PORTQ_BASE、
                  PQ_FAN1Cnt_bit |
                  PQ_FAN2cn_BIT |
                  PQ_FAN3Cnt_bit |
                  GPIO_Ddiscrete _INT、
                  GPIO_FALLING_EDGE);

   GPIOIntRegisterPin (GPIO_PORTQ_BASE、0、FAN1_Interrupt);
   GPIOIntRegisterPin (GPIO_PORTQ_BASE、1、FAN2_Interrupt);
   GPIOIntRegisterPin (GPIO_PORTQ_BASE、2、FAN3_Interrupt);

   #define INT_GPIOG_TM4C129   47.

   IntDisable (INT_GPIOG_TM4C129);                             //禁用非每引脚中断
                                                               //在 GPIO_INT_PIN_0上。
   GPIOIntEnable (GPIO_PORTQ_BASE、GPIO_INT_PIN_0 |
                                  GPIO_INT_PIN_1 |
                                  GPIO_INT_PIN_2);

我硬编码 了 inc/hw_ints.h 中的"#define INT_GPIOG_TM4C129 47" 、因为当我包含它时、我会得到一系列"宏的不兼容重拨..." 从 tm4c1290ncppdt.h"

谢谢、Doug

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

    Doug、您好!

    我对这里的代码有点困惑。 我看到很多  GPIO_PORTQ_BASE、但您询问的是 GPIO 端口 G。这可能是某些"线缆"交叉的地方吗?

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

    抱歉、您说得对、这都是端口 Q (我想我的发词再次是读字障碍) %-)

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

    由于 inc/hw_ints.h 中没有"INT_GPIOQ_TM4C129"、我注释掉了 IntDisable (INT_GPIOQ_TM4C129)代码(有"INT_GPIOQ0_TM4C129")。  问题仍然存在。

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

    您好 Doug、

    好的、现在我想我看到了您的问题。 您在中断集具有 discrete _int、或者使用了错误的变量。 尝试以下操作:

        GPIOIntTypeSet(GPIO_PORTQ_BASE,
                       PQ_Fan1Cnt_BIT |
                       PQ_Fan2Cnt_BIT |
                       PQ_Fan3Cnt_BIT,
                       GPIO_DISCRETE_INT |
                       GPIO_FALLING_EDGE);

    您可能需要启用所有  INT_GPIOQ0_TM4C129、 INT_GPIOQ1_TM4C129和 INT_GPIOQ2_TM4C129。

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

    曼尼斯

    就是这样。  谢谢你。