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);
}