2016-04-05 17 views
0

Aynı EXTI hattından PA1 ve PC1 için çoklu interrupt'ların her ikisi de EXTI1 üzerinde olmak üzere mümkün mü?Aynı EXTI Line üzerinde çoklu kesmeler STM32

Böylece, PA1 üzerindeki bir düğmeyi tıklatarak PB6'da bir LED yanar, PC1'i tıklatarak bir LED'in PC0 üzerinde geçiş yapmasını sağlayın. i 2 farklı hat gelen kesmeler için kullanmak kodudur

Mikro denetleyici ==> STM32F091

:

//PC1 
SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI1_PA; 
EXTI->IMR = EXTI_IMR_MR1; 
EXTI->RTSR = EXTI_RTSR_TR1; 
EXTI->FTSR = EXTI_FTSR_TR1; 
//PB0 
SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI1_PC; 
EXTI->IMR |= EXTI_IMR_MR1; 
EXTI->RTSR |= EXTI_RTSR_TR1; 
EXTI->FTSR |= EXTI_FTSR_TR1; 
NVIC_EnableIRQ(EXTI0_1_IRQn); 
NVIC_SetPriority(EXTI0_1_IRQn,0); 

kesme Handler:

void EXTI0_1_IRQHandler(void) 
{ 
if ((EXTI->PR & EXTI_PR_PR1) == EXTI_PR_PR1) /* Check line 1 has triggered  the IT */ 
{ 
EXTI->PR = EXTI_PR_PR1; /* Clear the pending bit */ 
GPIOC->ODR ^= 1<<0; 
} 
if ((EXTI->PR & EXTI_PR_PR0) == EXTI_PR_PR0) /* Check line 0 has triggered the IT */ 
{ 
EXTI->PR = EXTI_PR_PR0; /* Clear the pending bit */ 
    GPIOB->ODR ^= 1<<6; 
} 
+0

Uyarı: stm32'ye tamamen aşina değilim: Bu tür bir satır: 'EXTI-> PR = EXTI_PR_PR1; '' EXTI> PR' kaydının tamamını atamaktadır. Bence sadece bir bit değiştirmek istiyorsun. Öneri: 'EXTI-> PR | = EXTI_PR_PR1; ' – user3629249

cevap

4

Hayır, yapamazsın t. Afedersiniz.

16 GPIO güdümlü EXTI'lerin her biri yalnızca ilgili altı pinden birine bağlanabilir. Örneğin, EXTI0 PA0, PB0, PC0, PD0, PE0 veya PF0, vb.'a bağlanabilir. SYSCFG_EXTICR1_EXTI1_PA gibi değerler saf bit maskeleri değildir ve , birleştirilemez.

enter image description here

ek ayrıntılar için bölüm the STM32F0 reference manual ait 12.2.5 bakın.

+0

Tamam duskwuff bilgi için teşekkür ederiz. – Sandeerius