Вот код:
Код
///////////////////////////////////////////
// ВНЕШНИЕ ПРЕРЫВАНИЯ
///////////////////////////////////////////
AFIO->EXTICR[2]|=(AFIO_EXTICR3_EXTI9_PA | AFIO_EXTICR3_EXTI10_PA | AFIO_EXTICR4_EXTI15_PC);
EXTI->IMR|=(EXTI_IMR_MR9 | EXTI_IMR_MR10 | EXTI_IMR_MR15);
EXTI->FTSR|=(EXTI_FTSR_TR9 | EXTI_FTSR_TR10 | EXTI_FTSR_TR15);
NVIC_EnableIRQ (EXTI9_5_IRQn);
NVIC_EnableIRQ (EXTI15_10_IRQn);
// ВНЕШНИЕ ПРЕРЫВАНИЯ
///////////////////////////////////////////
AFIO->EXTICR[2]|=(AFIO_EXTICR3_EXTI9_PA | AFIO_EXTICR3_EXTI10_PA | AFIO_EXTICR4_EXTI15_PC);
EXTI->IMR|=(EXTI_IMR_MR9 | EXTI_IMR_MR10 | EXTI_IMR_MR15);
EXTI->FTSR|=(EXTI_FTSR_TR9 | EXTI_FTSR_TR10 | EXTI_FTSR_TR15);
NVIC_EnableIRQ (EXTI9_5_IRQn);
NVIC_EnableIRQ (EXTI15_10_IRQn);
а вот обработчик
Код
void EXTI15_10_IRQHandler(void)
{
if (EXTI->PR & (1<<10))
{
EXTI_ClearITPendingBit(EXTI_Line10);
}
if (EXTI->PR & (1<<15))
{
OneWire_flag=1;
EXTI_ClearITPendingBit(EXTI_Line15);
}
NVIC_ClearPendingIRQ(EXTI15_10_IRQn);
}
{
if (EXTI->PR & (1<<10))
{
EXTI_ClearITPendingBit(EXTI_Line10);
}
if (EXTI->PR & (1<<15))
{
OneWire_flag=1;
EXTI_ClearITPendingBit(EXTI_Line15);
}
NVIC_ClearPendingIRQ(EXTI15_10_IRQn);
}
ножки порта A ловят спад сигнала, а вот PC15 молчит. Что я настроил не так?
Попутно вопрос - у меня на PC15 1wire сидит, естественно, эта нога постоянно переключатеся со входа на выход и наоборот. Нужно ли в моменты этих переходов как то включать, выключать прерывания?