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.

触发按键中断后,一直处于HAL_ISR_FUNCTION问题?

HAL_ISR_FUNCTION( halKeyPort1Isr, P1INT_VECTOR )
{
HAL_ENTER_ISR();

if (HAL_KEY_SW_7_PXIFG & HAL_KEY_SW_7_BIT)
{
halProcessKeyInterrupt();
}
HAL_KEY_SW_7_PXIFG = 0;
HAL_KEY_CPU_PORT_1_IF = 0;

CLEAR_SLEEP_MODE();
HAL_EXIT_ISR();
}

SW7触发进来后,仿真发现一直在这个函数里面跑。麻烦大家帮忙看一下什么问题。不应该是有中断时才进来的么。

  • 单看这段程序的话是没啥问题的。建议您在HAL_ISR_FUNCTION内设置断点,进入该中断服程序后单步调试一下看看
    您现在SW7是如何配置的呢?
  • 你SW_7相關的暫存器設定可以貼出來看一下嗎?
  • 单步调试发现一次 中断后就一直在该函数循环。但确实没有对sw7进行电平的改变,以下为sw7的配置。麻烦您 帮忙看下
    // SW_7 is at P1.3
    #define HAL_KEY_SW_7_PORT P1 //0
    #define HAL_KEY_SW_7_BIT BV(3) //5
    #define HAL_KEY_SW_7_SEL P1SEL //0
    #define HAL_KEY_SW_7_DIR P1DIR //0

    // edge interrupt
    #define HAL_KEY_SW_7_EDGEBIT BV(1) //0
    #define HAL_KEY_SW_7_EDGE HAL_KEY_RISING_EDGE
    // SW_7 interrupts
    #define HAL_KEY_SW_7_IEN IEN2 // CPU interrupt mask register //1
    #define HAL_KEY_SW_7_IENBIT BV(4) // Mask bit for all of Port_1 //5
    #define HAL_KEY_SW_7_ICTL P1IEN // Port Interrupt Control register //0
    #define HAL_KEY_SW_7_ICTLBIT BV(3) // P0IEN - P0.5 enable/disable bit //5
    #define HAL_KEY_SW_7_PXIFG P1IFG // Interrupt flag at source //0

    void HalKeyConfig (bool interruptEnable, halKeyCBack_t cback)
    {
    Hal_KeyIntEnable = interruptEnable;
    pHalKeyProcessFunction = cback;
    if (Hal_KeyIntEnable)
    {

    P1SEL &= ~0x08; //(普通IO-0)1111-0111-P1.3
    P1DIR &= ~0x08; //(输入-0)1111-0111
    P1INP &= ~0x08; //(上拉\下拉-0)1111-0111
    P2INP |= 0x40; //(端口P1下拉-1)0100-0000
    PICTL &= ~0x02; //(上降沿触发-0)1111-1101
    //-------------------------------------------------------
    EA = 1; //(使能总中断-1)
    IEN2 |= 0x10; //(端口P1设置为中断打开-1); //0001-0000
    P1IFG = 0; //(初始化中断标志位-0)
    P1IEN |= 0x08; //(P1.3设置为中断打开-1)0000-1000
  • 在楼下已贴出,麻烦看一下。谢谢
  • HAL_KEY_CPU_PORT_1_IF有定義為P1IF嗎?
  • 发现确实定义成P0IF。修改过来就好了。感谢您,困扰了几天了。