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.

[参考译文] EK-TM4C1294XL:端口 P 上的非离散 GPIO 中断-从不调用中断处理程序

Guru**** 2480725 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/699645/ek-tm4c1294xl-non-discrete-gpio-interrupt-on-port-p---interrupt-handler-is-never-called

器件型号:EK-TM4C1294XL

您好!

我正在尝试设置 PP0和 PP1以具有内部上拉电阻器、然后我将一个开关连接到它们并接地、当我按下开关时、我希望调用我的中断、识别被调用的引脚并点亮相应的 LED。、 松开按钮后、开关就位不会太长、相应的 LED 应熄灭。

我在中断处理程序中设置断点、但似乎从未调用中断处理程序。 请提供任何帮助

void LegacyPulseMode (void){

GPIOPinTypeGPIOInput (GPIO_PORTP_BASE、(GPIO_PIN_0 | GPIO_PIN_1));
GPIOPadConfigSet (GPIO_PORTP_BASE、(GPIO_PIN_0 | GPIO_PIN_1)、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);
GPIOPinTypeGPIOOutput (GPIO_PORTP_BASE、GPIO_PIN_3 | GPIO_PIN_5);// PP3 =输出 LED || PP5 =启用 LED
GPIOIntTypeSet (GPIO_PORTP_BASE、(GPIO_PIN_0 | GPIO_PIN_1)、GPIO_Bot_Edges);//不需要离散
GPIOIntRegister (GPIO_PORTP_BASE、LegacyIntHandler);
GPIOIntEnable (GPIO_PORTP_BASE、(GPIO_INT_PIN_0 | GPIO_INT_PIN_1 | GPIO_INT_PIN_2 | GPIO_INT_PIN_3 | GPIO_INT_PIN_4 | GPIO_INT_PIN_5 | GPIO_INT_PIN_6 | GPIO_INT_PIN_7));
IntEnable (INT_GPIOP0);
IntDisable (((INT_GPIOP1 | INT_GPIOP2 | INT_GPIOP3 | INT_GPIOP4 | INT_GPIOP5 | INT_GPIOP6 | INT_GPIOP7));
}


// PP5连接到 PP0
// PP3连接到 PP1

void LegacyIntHandler (void)
{
uint32_t status = 0;
uint32_t read0 = 0、read1 = 0、read2 = 0;


STATUS = GPIOIntStatus (GPIO_PORTP_BASE、TRUE);
GPIOIntClear (GPIO_PORTP_BASE、STATUS);

read0 = GPIOPinRead (GPIO_PORTP_BASE、GPIO_PIN_0);
read1 = GPIOPinRead (GPIO_PORTP_BASE、GPIO_PIN_1);
// read2 = GPIOPinRead (GPIO_PORTP_BASE、GPIO_PIN_2);

if (read0 ==0)
{
GPIOPinWrite (GPIO_PORTP_BASE、GPIO_PIN_5、GPIO_PIN_5);
}
否则、如果(read0 = GPIO_PIN_0)
{
GPIOPinWrite (GPIO_PORTP_BASE、GPIO_PIN_5、0x0);
}

if (read1 ==0)
{
GPIOPinWrite (GPIO_PORTP_BASE、GPIO_PIN_3、GPIO_PIN_3);
}

否则、如果(read1 = GPIO_PIN_1)
{
GPIOPinWrite (GPIO_PORTP_BASE、GPIO_PIN_3、0x0);
}
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、
    抱歉,中断处理程序实际上只在 PP0上调用,而在 PP1上调用,我不知道为什么,我知道我这样做了:
    IntDisable (((INT_GPIOP1 | INT_GPIOP2 | INT_GPIOP3 | INT_GPIOP4 | INT_GPIOP5 | INT_GPIOP6 | INT_GPIOP7));
    但 TivaWare 驱动程序库显示:

    "如果这个[GPIOIntEnable]调用被用来在 GPIO 端口 P 或 Q 上启用总结中断(GPIOIntTypeSet ()
    在未启用 GPIO_discrete 的情况下)、则这些端口的所有单独中断必须为
    在 GPIO 模块中使用 GPIOIntEnable()使能,除了引脚0的中断外,所有中断都必须是
    在 NVIC 中使用 IntDisable()函数禁用。"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我的坏、我修复了它、这是一个硬件问题、

    我会删除该帖子、但我觉得或许有人会从中受益。

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

    没有问题、无需删除它、不过、如果您想详细说明硬件问题、我们可以强调、如果其他人遇到类似的断续模式、解决方案就是如此?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它实际上与 MCU 无关、其中一个开关正在使用时出现故障、因此当按下开关时、它不会将我的引脚下拉至 GND、引脚将保持高电平、因此边沿永远不会改变、从而导致永远不会调用中断。

    现在、我发布原始帖子的原因是因为我不熟悉此帖子、我假设我在代码中做了一些错误、我还仔细检查了我的电路、一切都准备就绪了、 我刚才假设我的代码一定是错误的-比故障开关更有可能。 但是、当我使用万用表时、我意识到这是开关。

    很抱歉给您带来不便、我希望代码能帮助其他人。

    谢谢、

    Hisham Hafez