ช่วยชี้แนะการใช้ Interrupt (STM8L152C6T6)

  • 1 Replies
  • 1702 Views
ช่วยแนะนำการ set ค่า interrupt ให้หน่อยครับ

GPIO_Init(GPIOE,GPIO_Pin_0,GPIO_Mode_In_FL_No_IT);
EXTI_SelectPort(EXTI_IT_PortE);
EXTI_SetPinSensitivity(EXTI_IT_Pin0,EXTI_Trigger_Falling);

set แบบนี้ถูกรึเปล่า ส่วนฟังก์ชั่นด้านล่างนี้เราจะเลือกหัวข้อนี้ไปสั่งงานใช้เปล่าครับ
INTERRUPT_HANDLER(EXTIE_F_PVD_IRQHandler,5)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
   
}

คำสั่งอันนี้ผมลองเขียนสามารถสั่งงานได้ ท่านใดเห็นว่าผิดหรือเขียนแบบอื่นได้ช่วยนี้แนะด้วย

void GPIO_Configuration(void)
{
       // PC1 => input floating with interrupt
   GPIOC->DDR &= 0xfd;      // PC1 input  1111 1101
   GPIOC->CR1 &= 0xfd;      // input floating
   GPIOC->CR2 |= 0x02;      // PC1 interrupt enable  0000 0010

   // PD4, PD5, PD7 => input floating
        GPIOD->DDR &= 0x4f;      // PD4, PD5, PD7 input  0100 1111
   GPIOD->CR1 &= 0x4f;      // input floating
   GPIOD->CR2 |= 0xB0;      // PD4, PD5, PD7 interrupt enable 1011 0000 */

   // PE7 push pull output speed 2MHz
   GPIOE->DDR |= 0x80;      // PE7 output
   GPIOE->CR1 |= 0x80;      // push pull
}   

void EXTI_Configuration(void)
{
   EXTI->CR1   |= 0x20;   // External interrupts line 1 Falling edge only
   EXTI->CR3   |= 0x20;   // External interrupts PORTD Group Falling edge only
   EXTI->CONF1 |= 0x20;   // used for EXTID interrupt generation  // and PC1 connect to EXTI1
        enableInterrupts();
}


INTERRUPT_HANDLER(EXTI1_IRQHandler,9)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
          EXTI->SR1 |= 0x02;   // Clear pending
          if((GPIOC->IDR & GPIO_Pin_1) == 0)
          {
         GPIOC->ODR ^= GPIO_Pin_7;
          }
}