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:launchpad 上 SW1和 SW2上的硬件中断

Guru**** 2479725 points
Other Parts Discussed in Thread: EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/698096/compiler-ek-tm4c1294xl-hardware-interrupt-on-sw1-and-sw2-on-launchpad

器件型号:EK-TM4C1294XL
主题中讨论的其他器件: TM4C123

工具/软件:TI C/C++编译器

您好!

我一直在尝试一个线程中的解决方案,以使 GPIO 中断在 EK-TM4C1294XL launchpad 上工作( https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/332605/1786938 )

为 TM4C123提供了解决方案、因此我更改了端口和引脚以匹配我的板、但它不起作用。 我的工作空间(UART/ADC/Web 服务器)中已经有很多工作要做、因此我要添加一些重要的内容来进行验证:

时钟:  

G_ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
//
//配置器件引脚。
//
//为100Hz 中断配置 SysTick。

SysTickPeriodSet (g_ui32SysClock / 100);
SysTickEnable();
SysTickIntEnable();

中断配置:  

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ); //启用端口 J
GPIOPinTypeGPIOInput (GPIO_PORTJ_BASE、GPIO_PIN_0);//将 PJ1作为输入
GPIOPadConfigSet (GPIO_PORTJ_BASE、GPIO_PIN_0、
GPIO_Strength _4mA、GPIO_PIN_TYPE_STD_WPU);//为 PJ1启用弱上拉电阻


//-------------------------------- 中断 setuü----------------------------------
GPIOIntDisable (GPIO_PORTJ_BASE、GPIO_PIN_0); //禁用 PJ1的中断(如果已启用)
GPIOIntClear (GPIO_PORTJ_BASE、GPIO_PIN_0); //清除 PJ1的挂起中断
GPIOIntRegister (GPIO_PORTJ_BASE、onButtonDown); //注册端口 J 的处理程序函数
GPIOIntTypeSet (GPIO_PORTJ_BASE、GPIO_PIN_0、
GPIO_FALLING_EDGE); //为下降沿触发配置 PF4
GPIOIntEnable (GPIO_PORTJ_BASE、GPIO_PIN_0); //为 PJ1启用中断

ISR:

void onButtonDown (void){
if (GPIOIntStatus (GPIO_PORTJ_BASE、false)& GPIO_PIN_0){
// PF4是中断原因
UARTprintf ("button down\n");
// GPIOIntRegister (GPIO_PORTJ_BASE、onButtonUp);//为端口 F 注册处理程序函数
// GPIOIntTypeSet (GPIO_PORTJ_BASE、GPIO_PIN_0、
// GPIO_RISE_EDGE); //为上升沿触发配置 PF4
GPIOIntClear (GPIO_PORTJ_BASE、GPIO_PIN_0);//清除中断标志
}
}
void onButtonUp (void){
if (GPIOIntStatus (GPIO_PORTJ_BASE、false)& GPIO_PIN_0){
// PF4是中断原因
UARTprintf ("button up\n");
GPIOIntRegister (GPIO_PORTJ_BASE、onButtonDown);//为端口 F 注册处理程序函数
GPIOIntTypeSet (GPIO_PORTJ_BASE、GPIO_PIN_0、
GPIO_FALLING_EDGE); //为下降沿触发配置 PF4
GPIOIntClear (GPIO_PORTJ_BASE、GPIO_PIN_0);//清除中断标志
}
}

LaunchPad SW1和 SW2上的开关连接到 J0和 J1、在这里、我尝试仅配置一个按钮的中断。 请告诉我初始化 GPIO 中断的有效方法及其优先级。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也许先清除 INT 源、然后再清除 IF 测试之外的内容。 如果中断被处理或何时被处理、SW1是否看起来不合理?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alesh、

    您是否使用了以下启用中断调用(如果您不使用这些调用、它们不必是 ROM 调用):

    ROM_IntMasterEnable ();
    ROM_IntEnable (INT_GPIOJ); 

    此外、我建议启动一个仅侧重于 SW1/SW2中断的新项目、这样您就不会有任何其他事情发生、一旦您以这种方式验证了该操作、您就可以将其导回主项目中、然后在该时间处理优先级方面的工作。

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

    您好 Ralph Jacobi、

    感谢您的宝贵建议。  

    Ralph Jacobi 说:
    IntEnable (INT_GPIOJ);
    它会将我引导至解决问题的相关帖子。

    ( e2e.ti.com/.../2323238)

    尽管该行启用了周上拉:

    GPIOPadConfigSet (GPIO_PORTJ_BASE、GPIO_PIN_0、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU); 

    我没有解决问题(周上拉 J0时的最大电压为180mV)。  我必须向 J0引脚添加一个外部上拉电阻器。