Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 02.12.2020, 09:18  
marera
Гражданин KAZUS.RU
 
Регистрация: 26.09.2005
Сообщений: 569
Сказал спасибо: 58
Сказали Спасибо 509 раз(а) в 135 сообщении(ях)
marera на пути к лучшему
По умолчанию COMP1 STM32F303 обработка прерывания

Не решается проблемка, а лезть в NVIC опасаюсь.
Суть: Прерывание от компаратора не вызывается. Сделал простенький проект для выяснения проблемы. Все в коде. Пожалуйста ткните меня в ошибку.
/* STM32F303VCT6
1. Мигаю по прерыванию EXTI0_IRQHandler
2. Мигаю по прерыванию COMP1_2_3_IRQnHandler
*/
#include "stm32f303xc.h"
extern uint32_t InitRCC(void);
extern void delay_us(int us);
//============== Настройка портов=========================
void InitPort(void)
{
RCC-›AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOEEN;
//Кнопка управления на PA0
GPIOA-›MODER &= ~(GPIO_MODER_MODER0);//PA0 Вход
GPIOA-›OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0); //PA0 Низкая скорость
GPIOA-›PUPDR &= ~(GPIO_PUPDR_PUPDR0); // PA0 не Pull up
GPIOA-›MODER |= GPIO_MODER_MODER1 | GPIO_MODER_MODER3;//Порт A1, A3 - аналоговые;
// GPIOA-›MODER |= GPIO_MODER_MODER4; //Порт PA4 Аналоговый

GPIOE-›MODER |= GPIO_MODER_MODER9_0; //пин Красный 12часов
GPIOE-›MODER |= GPIO_MODER_MODER11_0; //пин Зеленый 3часа
GPIOE-›MODER |= GPIO_MODER_MODER13_0; //пин Красный 6часов
GPIOE-›MODER |= GPIO_MODER_MODER15_0; //пин Зеленый 9часов
}
//================Настройка EXTI
void InitEXTI(void)
{
EXTI-›RTSR |= EXTI_RTSR_TR0; //Прерывание по нарастанию фронта импульса
// EXTI-›FTSR |= EXTI_FTSR_TR0; //Прерывание по спаду импульса
EXTI-›PR = EXTI_PR_PR0; //Сбрасываем флаг прерывания
EXTI-›IMR |= EXTI_IMR_MR0; //Включаю прерывание
NVIC_SetPriority(EXTI0_IRQn,0); //Приоритет высший
NVIC_EnableIRQ(EXTI0_IRQn); //Разрешаю прерывание
}
//================Обработка прерывания EXTI
void EXTI0_IRQHandler(void)
{// ВСЕ РАБОТАЕТ!!!
GPIOE-›ODR ^= GPIO_ODR_15; //Зеленый 9ч
delay_us (50000);
EXTI-›PR = EXTI_PR_PR0; //Сбрасываем флаг прерывания
//В конце обработчика!!! Есть другие мнения, но именно так работает корректно
}
//================= Настройка компараторов пока без ЦАП ===============
void InitComp (void)
{
RCC-›APB2ENR |= RCC_APB2ENR_SYSCFGEN;
COMP1-›CSR = 0;COMP2-›CSR = 0;
COMP1-›CSR |= COMP1_CSR_COMP1INSEL_0 | COMP1_CSR_COMP1INSEL_1 | COMP1_CSR_COMP1EN;
EXTI-›RTSR |= EXTI_RTSR_TR21; //Risig - нарастающий фронт
EXTI-›IMR |= EXTI_IMR_MR21; //Включаю прерывание
EXTI-›PR |= EXTI_PR_PR21; //Сброс флагов EXTI???
NVIC_SetPriority(COMP1_2_3_IRQn,1); //Приоритет компаратора
NVIC_EnableIRQ(COMP1_2_3_IRQn); // МОЖНО И COMP1_2 И COMP
}
//===========Обработка прерывания от компаратора===============================
void COMP1_2_3_IRQnHandler(void)// НИ ХРЕНАСЬКИ ни когда не вызывается
{
EXTI-›PR |= EXTI_PR_PR21; //Сброс флага компаратора
GPIOE-›ODR ^= GPIO_ODR_11; //Зеленый 3ч
delay_us (50000);
// NVIC_ClearPendingIRQ(COMP1_2_3_IRQn); //Игрался этими строками
EXTI-›PR |= EXTI_PR_PR21; //Сброс флага компаратора
}
//==============================================
int main (void)
{ volatile int i;
RCC-›CR |= RCC_CR_CSSON; // Защита HSE от сбоев
InitRCC(); InitPort(); InitEXTI(); InitComp();
while (1)
{
/* При включении
Когда 1 на COMP1 - if работает первым, потом GPIO_ODR_9,
однако по компаратору прерывание не вызывается.
переключаю COMP1 на 0 - прога зависает неизвестно где,
даже GPIO_ODR_9 не переключается.
При этом EXTI0_IRQHandler продолжает работать корректно.

Когда 0 на COMP1 - все нормально, т.е.
GPIO_ODR_9 (Красный 12ч) молотит с Т=1,7 мкс, EXTI0_IRQHandler работатет.
переключаю COMP1 на 1 - прога зависает неизвестно где,
по компаратору прерывание не вызывается,
даже GPIO_ODR_9 не переключается.
При этом EXTI0_IRQHandler продолжает работать корректно
= Похоже "завис" внутри NVIC, но COMP1_2_3_IRQnHandler не вызывается никогда
и это выше моих сил...
*/
if (COMP1-›CSR & COMP1_CSR_COMP1OUT)
{
GPIOE-›ODR ^= GPIO_ODR_13; //Красный 6ч
delay_us (50000);
}
GPIOE-›ODR ^= GPIO_ODR_9; //Красный 12ч
}
}
Реклама:
__________________
Будь проще, дойдет и до синтеза.
marera вне форума  
Непрочитано 02.12.2020, 09:28  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,314
Сказал спасибо: 173
Сказали Спасибо 3,113 раз(а) в 2,007 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: COMP1 STM32F303 обработка прерывания

Да кто ж блин в прерывании задержку ставит по полчаса?)))))
__________________
ОГМ/ПОГМ
индюк на форуме  
Непрочитано 02.12.2020, 10:24  
marera
Гражданин KAZUS.RU
 
Регистрация: 26.09.2005
Сообщений: 569
Сказал спасибо: 58
Сказали Спасибо 509 раз(а) в 135 сообщении(ях)
marera на пути к лучшему
По умолчанию Re: COMP1 STM32F303 обработка прерывания

Сообщение от индюк Посмотреть сообщение
Да кто ж блин в прерывании задержку ставит по полчаса?)))))
И что? В чем проблема?
__________________
Будь проще, дойдет и до синтеза.
marera вне форума  
Непрочитано 02.12.2020, 10:56  
DanilinSA
Почётный гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,667
Сказал спасибо: 130
Сказали Спасибо 1,071 раз(а) в 516 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: COMP1 STM32F303 обработка прерывания

Проблема в том, что обработка одного прерывания блокирует обработку остальных. Что часто ведет к пропуску прерывания.
А потому при обработке прерывания:
1) Все тяжелые и длительные фрагменты выкидываем из обработки прерывания. Обработка прерывания - делаем максимально быстро.
Если тебе нужно такая длительная выдержка - как вариант просто пни таймер. А таймер по прерыванию выполнит нужное действие.
2) Не ставим разрешение прерывания на последнюю команду обработчика!
Из-за особенности работы кэширования - может не выполнятся. А может выполнятся. Вообще потенциально может вести странно.
И вообще - разрешение прерывания нужно выполнять как можно быстрее. Максимально быстро ( с учетом логики обработчика прерывания ес-но.)
DanilinSA вне форума  
Непрочитано 02.12.2020, 11:31  
marera
Гражданин KAZUS.RU
 
Регистрация: 26.09.2005
Сообщений: 569
Сказал спасибо: 58
Сказали Спасибо 509 раз(а) в 135 сообщении(ях)
marera на пути к лучшему
По умолчанию Re: COMP1 STM32F303 обработка прерывания

Сообщение от DanilinSA Посмотреть сообщение
Проблема в том, что обработка одного прерывания блокирует обработку остальных. Что часто ведет к пропуску прерывания.
Ради Бога не надо об очевидных вещах! Это вариант для выяснения почему не вызывается прерывание от компаратора и этими вставками я пытался это выяснять и все!!!
__________________
Будь проще, дойдет и до синтеза.
marera вне форума  
Непрочитано 02.12.2020, 11:35  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,314
Сказал спасибо: 173
Сказали Спасибо 3,113 раз(а) в 2,007 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: COMP1 STM32F303 обработка прерывания

А оно вообще генерируется у тебя?
Флаг то появляется???
__________________
ОГМ/ПОГМ
индюк на форуме  
Непрочитано 02.12.2020, 12:06  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,374
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: COMP1 STM32F303 обработка прерывания

Сообщение от marera Посмотреть сообщение
почему не вызывается прерывание от компаратора и этими вставками я пытался это выяснять
а вместо этого огорода просто флаг проверить, не?
parovoZZ вне форума  
Непрочитано 02.12.2020, 13:04  
marera
Гражданин KAZUS.RU
 
Регистрация: 26.09.2005
Сообщений: 569
Сказал спасибо: 58
Сказали Спасибо 509 раз(а) в 135 сообщении(ях)
marera на пути к лучшему
По умолчанию Re: COMP1 STM32F303 обработка прерывания

Сообщение от индюк Посмотреть сообщение
А оно вообще генерируется у тебя?
Флаг то появляется???
Компаратор срабатывает-это видно, флаг EXTI_PR_PR21, естественно не выставляется, это и пытаюсь понять - почему?
__________________
Будь проще, дойдет и до синтеза.
marera вне форума  
Непрочитано 02.12.2020, 13:53  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,314
Сказал спасибо: 173
Сказали Спасибо 3,113 раз(а) в 2,007 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: COMP1 STM32F303 обработка прерывания

Так изучай настройки компа и маски векторов
__________________
ОГМ/ПОГМ
индюк на форуме  
Непрочитано 02.12.2020, 14:02  
DanilinSA
Почётный гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,667
Сказал спасибо: 130
Сказали Спасибо 1,071 раз(а) в 516 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: COMP1 STM32F303 обработка прерывания

А компаратор вообще "дышит"? Вытащи его выход на внешний пин. И посмотри, уровень там изменяется?
DanilinSA вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
STM32F4 discovery не срабатывают прерывания по I2C Kopranych ARM 10 29.11.2016 20:56
AT89C5131 прием и передача данных по USB rihkov AVR 14 15.11.2012 08:16
PIC16 TMR0 и TMR2 Slava-martyn Микроконтроллеры, АЦП, память и т.д 10 06.12.2011 01:58
Обработка прерывания таймера T0 ATtiny2313 DimanVIP Микроконтроллеры, АЦП, память и т.д 10 03.06.2010 11:54
Вход в прерывания для PIC микроконтроллеров dimmich Микроконтроллеры, АЦП, память и т.д 4 06.12.2009 17:17


Часовой пояс GMT +4, время: 19:20.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot