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.

[参考译文] CCS/MSP432P401R:中断无法正常工作

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/672618/ccs-msp432p401r-trouble-getting-interrupts-to-work

器件型号:MSP432P401R

工具/软件:Code Composer Studio

您好!

在我的定制板上输入中断后、我在获取中断以退出其 ISR 时遇到问题。 我使用按钮来触发中断、我认为它已经足够简单了、我是否错过了什么?

谢谢、

David

void main (空 main)()

           WDTCTL = WDTPW | WDTHOLD;

           MAP_GPIO_setAsInputPinWithPullDownResistor (GPIO_PORT_P3、GPIO_PIN6);

           MAP_GPIO_interruptEdgeSelect (GPIO_PORT_P3、GPIO_PIN6、GPIO_LOW_TO_HIGH_TRANSITION);

           while (1)

           {

                       LCD_MAIN_MENU ();

           }

 

Port3IRQHandler (空)

           lcd_writeln ("输入的 ISR...");

           P3IFG =~BIT6;//清除3.6上的 GPIO 按钮中断标志

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    > P3IFG =~BIT6;//清除3.6上的 GPIO 按钮中断标志

    这确实会清除 BIT6、但它会设置所有其他 IFG 位。 是否有其他代码(未显示)对此敏感? 请尝试:

    > P3IFG &=~BIT6;//清除3.6上的 GPIO 按钮中断标志
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    如 TRM 中所述(Bruce 解释得很好)、

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

    我尝试了 Bruce 的建议、但它没有解决我的问题。 我已经尝试在出现去抖问题时进入等待状态。 我注意到、添加断点允许我的代码退出 ISR 并返回到我的 while (1)。 有什么想法吗?

    谢谢、

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

    当中断发生时、中断处理程序会触发两次? 我建议使用来自最新 MSP432 SDK 的示例 GPIO_INPUT_INTERRUPT 作为最佳起点、而不是花费精力进行裸机访问。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您如何知道您没有从 ISR 中退出?

    此外、LCD_writeln 是否有可能使 P3.6运行?

    此外、我的 startup_msp432p401r_ccs.c 似乎需要名称 PORT3_IRQHandler、这与您定义的名称不同。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bruce / Amit、

    感谢您的支持! 我们能够使它正常工作、实际上这是我们的设置函数之一不允许我们退出 ISR 的问题。

    编辑:更具体地说,我们的 UART 设置有一个函数调用 enableSlepOnIsrExit()。

    David