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-TM4C123GXL:从两个不同的端口读取两个中断?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/578782/ek-tm4c123gxl-reading-two-interrupts-from-two-different-ports

器件型号:EK-TM4C123GXL

您好!

我尝试从两个不同的端口读取两个中断、但它不起作用。 如果我禁用一个端口的初始化、另一个端口将正常工作。 反之亦然。 我使用的是 TivaWare、我无法找出问题所在。

一个中断用于读取远程控制器值、另一个中断用于读取 MPU6050的"数据就绪引脚"。

我将在下面粘贴两个中断的代码。

感谢您的帮助!

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
SysCtlDelay (3);
GPIOPinTypeGPIOInput (GPIO_PORTD_base、GPIO_PIN_1);
GPIOIntDisable (GPIO_PORTD_base、 GPIO_PIN_1);
GPIOIntClear (GPIO_PORTD_base、GPIO_PIN_1);
GPIOIntRegister (GPIO_PORTD_base、readMPU);
GPIOIntTypeSet (GPIO_PORTD_base、GPIO_PIN_1、GPIO_RISING _EDGE);
IntPrioritySet (INT_GPIOD、0);
GPIOIntEnable (GPIO_PORTD_base、GPIO_INT_PIN_1); 


SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); 
SysCtlDelay (3); GPIOPinTypeGPIOInput (GPIO_Porta_base、GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7); GPIOIntDisable (GPIO_Porta_base、GPIO_PIN_2 | GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_7 | GPIO_PIN_4 | GPIO_PIN_6 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_4 | GPIO_PIN_PIN_4 | GPIO_PIN_GPIO_PIN_4 | GPIO_PIN_PIN_PIN_4 | GPIO_PIN_PIN_4 GPIOIntTypeSet (GPIO_PORta_base、GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7、GPIO_BLE_edges); IntPrioritySet (INT_GPIOA、0); GPIOIntEnable (GPIO_Porta_base、 GPIO_INT_PIN_2 | GPIO_INT_PIN_3 | GPIO_INT_PIN_4 | GPIO_INT_PIN_5 | GPIO_INT_PIN_6 | GPIO_INT_PIN_7);

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    当这两个中断都被激活时、从未发生过哪个中断? 是否从未发生 PORTD 中断? 您已将 PORta 和 PORTD 设置为相同的中断优先级。 但是、由于 Porta 的索引编号低于 PORTD、因此将首先对 Porta 进行服务。 如果与 PORTD 相比、PORta 中断频繁出现、则可能不会对 PORTA 提供服务。 另一个需要检查的问题是您是否已清除 Porta ISR 中的中断标志。 如果未清除最高优先级挂起标志、则一旦退出 ISR、它就会重新进入 Porta ISR。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不会低估第一句话。 那么、什么是最佳解决方案? 我将清除两个中断中的中断标志。
    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我在问您是否总是只在 Porta 上获得中断? 您能否在 PORTA ISR 中放置一个断点并检查是否设置了 PORTD 中断标志。 如果在 PORta ISR 中设置了 PORTD 中断标志、则这意味着 PORTA 中断变得非常频繁。 由于 PORTA 具有比 PORTD 更高的硬件优先级,给定的软件优先级与您使用 IntPrioritySet()为两个中断设置相同的软件优先级一样,因此 Porta ISR 将始终首先得到服务。 另请注意、在您的 PORTA 中断配置中、您有如此多的引脚(引脚2、3、4、5、6、7)可以在 PORta ISR 上生成中断、这肯定比 PORTD 更频繁。 尝试使 Porta 优先级低于 PORTD、然后重试。