关于IO2IntEnR与EXTPOLAR、EXTMODE等的区别?

其实两者是有很大不同的,前者只能通过软件不停查询LPC_GPIOINT->IO2IntStatR或LPC_GPIOINT->IO2IntStatF来获得端口边沿情况,而后者则一般由硬件自动进入中断处理函数。前者清除中断标志用LPC_GPIOINT->IO2IntClr,后者则用LPC_SC->EXTINT。
前者编程示例:
void EINTInit( void )
{
       LPC_GPIO2->FIODIR  &=  ~(1 << 11);    /* PORT2.11 defined as input       */
         LPC_GPIO2->FIODIR      &= ~(1 << 11);
         LPC_GPIOINT->IO2IntEnR |=  (1 << 11);      /* enable rising edge irq         */
         LPC_GPIOINT->IO2IntEnF |=  (1 << 11);       /* enable falling edge irq         */}
}
 
int main(void)
{
         While(1)
         {
           if(LPC_GPIOINT->IO2IntStatF!=0x0)
                       LED_On (0xff);                                                //点亮LED
              if(LPC_GPIOINT->IO2IntStatR)
                     LED_Off (0xff);                                               //熄灭LED
           LPC_GPIOINT->IO2IntClr |= (1 << 11);     /* clear pending interrupt         */
 
}
 
}
 
后者编程示例:
void EINTInit( void )
{
       LPC_GPIO2->FIODIR  &=  ~(1 << 10);    /* PORT2.10 defined as input       */
LPC_PINCON->PINSEL4 = 0x00100000;            // set P2.10 as EINT0
LPC_SC->EXTMODE = 0x01;                           /* INT0 edge trigger */
LPC_SC->EXTPOLAR = 0x01;                 /* INT0 is rising edge by default */
 
NVIC_EnableIRQ(EINT0_IRQn);                       //使能EINT0中断
}
void EINT0_IRQHandler()
{
         LPC_SC->EXTINT = 0x01;         //EXIT0中断状态清零,在P2.10
}

你可能感兴趣的:(关于IO2IntEnR与EXTPOLAR、EXTMODE等的区别?)