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.

[参考译文] TM4C123GH6PM:我的代码未进入 GPIO 中断处理程序、

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/730862/tm4c123gh6pm-my-code-is-not-entering-in-gpio-interrupt-handler

器件型号:TM4C123GH6PM

我 想在  2秒内计算脉冲数、但   只要按 PF4、代码就不会进入中断处理程序事件。我对 Tiva C 编程是一种新体验。

上图显示了调试模式、在按下 PF4之前位 IME 被置位、但按下后 RIS 和 MIS 将永久显示0x01、如图所示。

当我关闭调试器指针时、指针被放置在故障 ISR 旁边几秒钟。我认为它可能已被永久插入故障 ISR 例程。

如何解决此问题? 我不知道吗?我还尝试更改矢量中断表、但没有结果。

代码如下:

无符号长整型电流时钟捕捉= 0;  
无符号长整型电流 ClockCapture1 = 0;//负边沿处的值
无符号长整型 lastClockCapture = 0;  
unsigned long time=0;//最后一个负边沿的值
无符号长整型电流 ClockCapture2=0;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
INT 脉冲=0;

//portF1中断处理程序

void PortF1IntHandler (void){
GPIOIntClear (GPIO_PORTD_BASE、GPIO_PIN_4);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、4);
//SysCtlDelay (3000000);
脉冲+=1;

int main (空)


SysCtlClockSet (SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);
//启用和配置外设
SysCtlDelay(3);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

SysCtlDelay(3);
GPIOPinTypeGPIOInput (GPIO_PORTF_BASE、GPIO_PIN_4);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2);
GPIOPadConfigSet (GPIO_PORTF_BASE、GPIO_PIN_4、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);
GPIOIntTypeSet (GPIO_PORTF_BASE、GPIO_PIN_4、GPIO_FALLING_EDGE);


GPIOIntRegister (GPIO_PORTF_BASE、PortF1IntHandler);
GPIOIntEnable (GPIO_PORTF_BASE、GPIO_PIN_4);
GPIOIntClear (GPIO_PORTF_BASE、GPIO_PIN_4);
 IntMasterEnable();
// IntEnable (INT_GPIOF);//我已经对其进行了注释和取消注释,但仍然没有效果
//EnableInterrupts();//I 已对其进行了注释和取消注释,但仍然没有效果

//SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
// SysCtlDelay (3);
//
//周期= SysCtlClockGet ()/0.5;//100kHz
//ROM_TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICY_UP);// timer0A 配置了16位时间捕获
//rom_TimerLoadSet (TIMER0_BASE、TIMER_Both、PERIODE-1);
//rom_TimerMatchSet (TIMER0_BASE、TIMER_A、0xFFFFFFFE);
//rom_TimerPrescaleSet (TIMER0_BASE、TIMER_A、0xFFFF);
//rom_TimerPrescaleMatchSet (TIMER0_BASE、TIMER_A、0x01);

//IntEnable (INT_TIMER0A);
//TimerIntEnable (TIMER0_BASE、TIMER_TIMA_TIMEOUT);
//IntMasterEnable();
//定时器使能(TIMER0_BASE、TIMER_A);

while (1)

////// GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、4);
//currentClockCapture1=ROM_TimerValueGet (TIMER0_BASE、TIMER_A);
//currentClockCapture2=TimerLoadGet (TIMER0_BASE、TIMER_A);


//GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、I);


空 Timer0IntHandler (空)

TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
if (i=0){
I=4;
}否则{
I=0;

脉冲=0;

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

    在端口 F 的中断例程中、您传递"GPIO_PORTD_BASE"

    GPIOIntClear (GPIO_PORTD_BASE、GPIO_PIN_4);
    

    它应该是"GPIO_PORTF_BASE"

    GPIOIntClear (GPIO_PORTF_BASE、GPIO_PIN_4); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢、但我不明白为什么代码在不清除中断的情况下不进入中断例程。led 应该已经打开了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的代码尝试在未启用端口 D 的情况下访问该端口。 生成数据故障条件的数据。 故障条件与中断类似、故障例程中的中断被禁用。