主题中讨论的其他器件: 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 中断的有效方法及其优先级。