stm32f407 2 pin external interrupt

Başlatan 94onur94, 13 Nisan 2016, 21:51:13

94onur94

Herhangi A0 ve A15 pinlerinden belirli frekansta aralarında faz farkı bulunan kare dalga gelmektedir. 1. dalganın yükselen kenarında D12 = 1 olacak ve 2. dalganın yükselen kenarı geldiğinde D12 = 0 olacak.

void A15_kesme() iv IVT_INT_EXTI15_10 ics ICS_AUTO
{
     EXTI_PR.B15 = 1;
     GPIOD_ODR.B12 = 1;
}

void A0_kesme() iv IVT_INT_EXTI0 ics ICS_AUTO
{
     EXTI_PR = 1;
     GPIOD_ODR.B12 = 0;
}

void main()
{
     GPIO_Digital_Input(&GPIOA_IDR, _GPIO_PINMASK_15);
     GPIO_Digital_Input(&GPIOA_IDR, _GPIO_PINMASK_0);
     GPIO_Digital_Output(&GPIOD_ODR, _GPIO_PINMASK_12);

     SYSCFG_EXTICR4 = 0;
     EXTI_RTSR.B15 = 1;
     EXTI_IMR.B15 = 1;
     EXTI_PR.B15 = 1;
     NVIC_IntEnable(IVT_INT_EXTI15_10);
     
     SYSCFG_EXTICR1 = 0;
     EXTI_RTSR = 1;
     EXTI_IMR = 1;
     EXTI_PR = 1;
     NVIC_IntEnable(IVT_INT_EXTI0);
     
     while(1);
}


2 tane harici kesme oluşturup ekledim ancak çalışmıyor. Tek kesme olduğu zaman çalışıyor.

Nasıl yapılacağını buldum.

void A5_A6_kesme() iv IVT_INT_EXTI9_5 ics ICS_AUTO
{
     if((EXTI_PR & 0x00000020) != 0)   //Check if PA5 has trigger the interrupt
      {
          GPIOD_ODR.B12 = 1;
          EXTI_PR |= 0x00000020;        //Clear PR5
      }
      if((EXTI_PR & 0x00000040) != 0)   //Check if PA6 has trigger the interrupt
      {
          GPIOD_ODR.B12 = 0;
          EXTI_PR |= 0x00000040;        //Clear PR6
      }
}

void main()
{
     GPIO_Digital_Input(&GPIOA_IDR, _GPIO_PINMASK_5);
     GPIO_Digital_Input(&GPIOA_IDR, _GPIO_PINMASK_6);
     GPIO_Digital_Output(&GPIOD_ODR, _GPIO_PINMASK_12);
     
     SYSCFGEN_bit = 1;
     SYSCFG_EXTICR1 = 0;
     EXTI_RTSR = 0x0060; // 5. ve 6. pin
     EXTI_IMR = 0x0060;
     EXTI_PR = 0x0060;
     NVIC_IntEnable(IVT_INT_EXTI9_5);

     while(1);
}