BlackOps 0 7 июня, 2013 Опубликовано 7 июня, 2013 · Жалоба не срабатывает Библиотеку стандартную не использую, хотя только под нее примиеры и находил. вот так включаю прерывание (использованы парa функций СМ4) // Enable SYSCFG clock RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN; // External interrupt from pin PD6 SYSCFG->EXTICR[1] = SYSCFG_EXTICR2_EXTI6_PD; // EXTI->IMR = 0x01; // Mask MR0 EXTI->RTSR = 0x01; // Rising Edge detection EXTI->FTSR = 0x00; // Falling edge detect OFF NVIC_SetPriority(EXTI9_5_IRQn, 0x0000000f); NVIC_EnableIRQ(EXTI9_5_IRQn); Порт настроен как вход, с подтяжкой к земле. обработчик пока пустой, пока просто хочу проверить перейдет ли он вообще в прерывание void EXTI9_5_IRQHandler() { for(;;) { } } вроде настроено все как надо, а две функции СМ4 ставят приоритет и включают прерывание, Пин 6 между Пин9 и Пин5, так что думаю верно все выбрано. что я упустил? попробовал добавить после всей инициализации это: EXTI->SWIER = 0x01; т.е. программно включить прерывание, тоже не помогает пока Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Brain13 0 7 июня, 2013 Опубликовано 7 июня, 2013 · Жалоба Тактирование порта подано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 7 июня, 2013 Опубликовано 7 июня, 2013 · Жалоба Тактирование порта подано? да, подано, на этом порту и УСАРТ работает, все нормально. Я еще вот что сделал сейчас: EXTI->SWIER = 0x01; pr_reg = EXTI->PR; И значение pr_reg = 1 в дебаггере, т.е. бит установился, вроде как среагировал на прерывание эмулированное программным путем, но проблема в том, что он не хочет переходить в обработчик прерывания. кстати, вторая проблема в том что EXTI->PR имеет значение 0 когда провод подтягиваю к 3.3В, сам порт как я уже сказал настроен на подтяжку на землю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 7 июня, 2013 Опубликовано 7 июня, 2013 · Жалоба Всё прекрассно работает. В частности переключаю на лету ногу SPI и жду готовности от АЦП // Работа с ножкой готовности АЦП #define ADCPIN_DOUT GPIOC->MODER = PIN2X(SPI3_MISO,AF)|MODER_C #define ADCPIN_RDY GPIOC->MODER = PIN2X(SPI3_MISO,IN)|MODER_C // Настройка прерывания по готовности (свалу импульса) #define ADCPIN_RDY_INTEN EXTI->IMR |= PIN(SPI3_MISO) #define ADCPIN_RDY_INTDIS EXTI->IMR &= ~PIN(SPI3_MISO) #define ADCPIN_RDY_INIT EXTI->FTSR |= PIN(SPI3_MISO); SYSCFG->EXTICR[2] = PORTC_PIN<<12 #define ADCPIN_RDY_INTCLR EXTI->PR = PIN(SPI3_MISO) Вы SYSCFG не загрузили Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 7 июня, 2013 Опубликовано 7 июня, 2013 · Жалоба Как-то форум не очень чётко работает. Не меняется число ответов в теме и последний ответ игнорируется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 7 июня, 2013 Опубликовано 7 июня, 2013 · Жалоба Вы SYSCFG не загрузили как это не загрузил? загрузил. Проблема не в этом была. Я маску просто не так настроил. надо было: EXTI->IMR = 0x40; // Mask MR0 EXTI->RTSR = 0x40; // Rising Edge detection EXTI->FTSR = 0x00; // Falling edge detect OFF т.е. EXTI->IMR = (1 << 6); потому что у меня пин 6. а я просто EXTI->IMR = 0х01; писал, я просто думал любой бит там можно выбрать для линии прерывания, а должна быть маска Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться