??.GenTon 2020-04-12 17:05
浏览 255

TMS320F28027在配置使用四个按键中断时,为什么只有最后一个中断有效?

emmmm问题是这样的,我在使用CCS编写F28027的代码时,需要用到四个独立按键输入,于是我配置了四个IO口,共用同一个外部中断源,然后在中断服务程序里判断是哪个按键触发,执行对应操作。可是在运行的时候发现,只有最后一个按键有效,而且会使其他三个按键同时执行对应操作(对应按键按下的flag置1)。只单独配置其中任何一个按键中断时,都可以正常工作,当配置多个时,却只有最后一个有效了。而且当配置多个(例如四个)时,即使在中断服务程序里删除第四个按键的相关程序,仍然是只有第四个按键有效并且使其他按键执行操作……有没有大佬知道这是为什么嘛?急急急!
下面是中断服务程序代码
interrupt void KEY_XINT1_isr(void)
{
Delay(1000000L);
if(KEYPRESSED == KEY_STATUS(KEY1)) //上升沿
{
Flag_KEY1 = 1;
}

else if(KEYPRESSED != KEY_STATUS(KEY1))//&&( Flag_KEY1 == 1))       //下降沿
  {
          key_status = KEY1_PRESS;      //短按
          Flag_KEY1 = 2;
  }
Delay(1000000L);
if(KEYPRESSED == KEY_STATUS(KEY2))       //上升沿
      {
              Flag_KEY2 = 1;
      }

else if((KEYPRESSED != KEY_STATUS(KEY2))&&( Flag_KEY2 == 1))       //下降沿
      {
              key_status = KEY2_PRESS;      //短按
              Flag_KEY2 = 0;
      }
Delay(1000000L);
if(KEYPRESSED == GetKeyStatus(KEY3))       //上升沿
          {
                  Flag_KEY3 = 1;
          }

else if((KEYPRESSED != GetKeyStatus(KEY3))&&( Flag_KEY3 == 1))       //下降沿
          {
                  key_status = KEY3_PRESS;      //短按
                  Flag_KEY3 = 0;
          }
Delay(1000000L);
if(KEYPRESSED == KEY_STATUS(KEY4))       //上升沿
          {
                  Flag_KEY4 = 1;
          }

else if((KEYPRESSED != KEY_STATUS(KEY4))&&( Flag_KEY4 == 1))       //下降沿
          {
                  key_status = KEY4_PRESS;      //短按
                  Flag_KEY4 = 0;
          }

// Acknowledge this interrupt to get more from group 1
//void PIE_clearInt(PIE_Handle pieHandle,const PIE_GroupNumber_e groupNumber)
PIE_clearInt(myPie, PIE_GroupNumber_1);

}

接下来是GPIO口配置:
void KEY_pinConfigure(void)
{ //1. set pullup
//void GPIO_setPullUp(GPIO_Handle gpioHandle,const GPIO_Number_e gpioNumber,const GPIO_PullUp_e pullUp);
GPIO_setPullUp(myGpio, GPIO_Number_0, GPIO_PullUp_Disable);
GPIO_setPullUp(myGpio, GPIO_Number_1, GPIO_PullUp_Disable);
GPIO_setPullUp(myGpio, GPIO_Number_2, GPIO_PullUp_Disable);
GPIO_setPullUp(myGpio, GPIO_Number_3, GPIO_PullUp_Disable);

//2. set mode
//void GPIO_setMode(GPIO_Handle gpioHandle,const GPIO_Number_e gpioNumber,const GPIO_Mode_e mode);
GPIO_setMode(myGpio, GPIO_Number_0, GPIO_0_Mode_GeneralPurpose);
GPIO_setMode(myGpio, GPIO_Number_1, GPIO_1_Mode_GeneralPurpose);
GPIO_setMode(myGpio, GPIO_Number_2, GPIO_2_Mode_GeneralPurpose);
GPIO_setMode(myGpio, GPIO_Number_3, GPIO_3_Mode_GeneralPurpose);

//3. set direction
//void GPIO_setDirection(GPIO_Handle gpioHandle,const GPIO_Number_e gpioNumber,const GPIO_Direction_e direction);
GPIO_setDirection(myGpio, GPIO_Number_0, GPIO_Direction_Input);
GPIO_setDirection(myGpio, GPIO_Number_1, GPIO_Direction_Input);
GPIO_setDirection(myGpio, GPIO_Number_2, GPIO_Direction_Input);
GPIO_setDirection(myGpio, GPIO_Number_3, GPIO_Direction_Input);

//4. filter
//void GPIO_setQualification(GPIO_Handle gpioHandle, const GPIO_Number_e gpioNumber, const GPIO_Qual_e qualification);
//void GPIO_setQualificationPeriod(GPIO_Handle gpioHandle, const GPIO_Number_e gpioNumber, const uint16_t period);
GPIO_setQualification(myGpio, GPIO_Number_0, GPIO_Qual_ASync);
GPIO_setQualification(myGpio, GPIO_Number_1, GPIO_Qual_ASync);
GPIO_setQualification(myGpio, GPIO_Number_2, GPIO_Qual_ASync);
GPIO_setQualification(myGpio, GPIO_Number_3, GPIO_Qual_ASync);

}
//
// (2.2) module function configure
//! \brief KEY function configure
//! \param[in] None
//! \param[out] None
void KEY_functionConfigure(void)
{

}
//
// (2.3) module Event configure
//! \brief KEY Event configure
//! \param[in] None
//! \param[out] None
void KEY_eventConfigure(void)
{ //1. set xint
//void GPIO_setExtInt(GPIO_Handle gpioHandle, const GPIO_Number_e gpioNumber, const CPU_ExtIntNumber_e intNumber)
GPIO_setExtInt(myGpio, GPIO_Number_0, CPU_ExtIntNumber_1);
GPIO_setExtInt(myGpio, GPIO_Number_1, CPU_ExtIntNumber_1);
GPIO_setExtInt(myGpio, GPIO_Number_2, CPU_ExtIntNumber_1);
GPIO_setExtInt(myGpio, GPIO_Number_3, CPU_ExtIntNumber_1);

//2. set polarity
//void PIE_setExtIntPolarity(PIE_Handle pieHandle,
//                           const CPU_ExtIntNumber_e intNumber,
//                           const PIE_ExtIntPolarity_e polarity)
PIE_setExtIntPolarity(myPie, CPU_ExtIntNumber_1, PIE_ExtIntPolarity_RisingAndFallingEdge);

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥30 用arduino开发esp32控制ps2手柄一直报错
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名
    • ¥65 汇编语言除法溢出问题
    • ¥15 Visual Studio问题