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

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

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

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

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

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


 
Опции темы
Непрочитано 26.01.2015, 11:03  
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,360
Сказал спасибо: 85
Сказали Спасибо 619 раз(а) в 374 сообщении(ях)
pambaru на пути к лучшему
По умолчанию STM32F4 - таймер

Делаю устройство на STM32F407.
Использую таймер и прерывание.
Не могу понять, почему прерывание вызывается дважды при автоперезагрузке таймера, причем второй раз сразу же после первого (через 400 нс). При этом один раз в TIM7-›SR установлен флаг TIM_SR_UIF, а второй раз TIM7-›SR равен нулю.

Вот код:
PHP код:
__irq void TIM7_IRQHandler(void)
{
   
TIM7-›SR &= ~TIM_SR_UIF// clear UIF flag
}

void InitTimer7(void){
  
TIM_TypeDef *T;
//Enable clock TIM7
  
RCC-›APB1ENR |= RCC_APB1ENR_TIM7EN;

  
T=TIM7;
  
T-›PSC 42*2-1
  
T-›ARR 128-1;
  
T-›DIER TIM_DIER_UIE// Enable update interrupt (timer level)
 
  
T-›CR1 |= TIM_CR1_CEN;   // Enable timer
   
NVIC_EnableIRQ(TIM7_IRQn);

Пробовал с другими таймерами - все аналогично.
Чего я не так делаю, или так и должно быть, может где-то недочитал чего?
Реклама:
pambaru вне форума  
Непрочитано 26.01.2015, 11:25  
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,360
Сказал спасибо: 85
Сказали Спасибо 619 раз(а) в 374 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: STM32F4 - таймер

Похоже, не успевает сброситься флаг прерывания. Видимо, не сразу сбрасывается.
Вот так прерывание вызывается дважды:
PHP код:
#define TST1 GPIOB-›BSRRL=(1‹‹2)
#define TST0 GPIOB-›BSRRH=(1‹‹2)

volatile dword mmm;

__irq void TIM7_IRQHandler(void)
{
mmm++;
if (
mmm 0x01TST1;
                else 
TST0;
TIM7-›SR &= ~TIM_SR_UIF;   



А так все в порядке:
PHP код:
__irq void TIM7_IRQHandler(void)
{
TIM7-›SR &= ~TIM_SR_UIF;   
mmm++;
if (
mmm 0x01TST1;
                else 
TST0;

Т.е., за некоторое время, пока дрыгаю ногой, флаг прерывания во втором случае успевает сброситься.

Но вообще как-то странновато. Подобный момент в какой-то документации описан?
pambaru вне форума  
Непрочитано 26.01.2015, 11:25  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: STM32F4 - таймер

Потому что обработчик прерывания пустой! Из-за фишек ядра, сброс флага, по сути, происходит после выхода из прерывания. Добавьте барьер, НОПы или ещё что нибудь, тогда и попустит.
Да и вообще. Обработчик прерывания в таком виде выглядит глупо и невостребованым, согласитесь.
STM32F0 вне форума  
Непрочитано 26.01.2015, 11:31  
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,360
Сказал спасибо: 85
Сказали Спасибо 619 раз(а) в 374 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: STM32F4 - таймер

Понятно, что глупо, когда пусто
Я убрал оттуда все лишнее, чтобы не перегружать мозг
В общем, если сбрасывать флаг в конце обработчика, прерывание успевает вызваться еще раз.
Если в начале - то флаг успевает сброситься к моменту выхода.
pambaru вне форума  
Непрочитано 26.01.2015, 11:45  
neyvert
Прописка
 
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
neyvert на пути к лучшему
По умолчанию Re: STM32F4 - таймер

Сообщение от pambaru Посмотреть сообщение
Понятно, что глупо, когда пусто
В общем, если сбрасывать флаг в конце обработчика, прерывание успевает вызваться еще раз.
Скорее флаг не успевает сбросится! поэтому после выхода сразу возвращается в прерывание.
neyvert вне форума  
Непрочитано 26.01.2015, 12:14  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: STM32F4 - таймер

Угу! В F0 успевает, а в F4 не успевает, патамушта F4 тормозной на флагах?
Дело в ядре, в его фишках, в его организации, в приоритетах шин. Не с бодуна же барьеры АРМ нарисовал?
STM32F0 вне форума  
Непрочитано 26.01.2015, 13:49  
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,360
Сказал спасибо: 85
Сказали Спасибо 619 раз(а) в 374 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: STM32F4 - таймер

Сообщение от STM32F0 Посмотреть сообщение
Не с бодуна же барьеры АРМ нарисовал?
Если не секрет, что за барьеры? Где посмотреть-почитать?
pambaru вне форума  
Непрочитано 26.01.2015, 13:55  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: STM32F4 - таймер

Сообщение от pambaru Посмотреть сообщение
Если не секрет, что за барьеры?
Специальные команды такие - DSB, DMB, ISB.

Сообщение от pambaru Посмотреть сообщение
Где посмотреть-почитать?
В документации, где же ещё... - http://infocenter.arm.com/help/topic..._m_profile.pdf
_Артём_ вне форума  
Сказали "Спасибо" _Артём_
pambaru (26.01.2015)
Непрочитано 26.01.2015, 14:13  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: STM32F4 - таймер

В данном случае барьер такая же затычка как и любой кусок кода. В других случаях, при арбитраже шин, барьеры уже нужнее. Просто нужно помнить про это, чтобы не впадать в психоделический ступор в самый неподходящий момент.
STM32F0 вне форума  
Непрочитано 26.01.2015, 14:22  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: STM32F4 - таймер

Сообщение от STM32F0 Посмотреть сообщение
В данном случае барьер такая же затычка как и любой кусок кода.
Почему затычка? Они, в частности, и для этого предназначены - чтобы не было повторного входа в обработчик прерывания.
_Артём_ вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер Для Интервальной Съемки (Интервалометр) Aleksandro29 Электроника - это просто 6 12.05.2014 22:07
"Шахматный" таймер на ATmega 8515 Bahmut_aiirsoft Песочница (вопросы новичков) 14 17.11.2013 14:14
Сторожевой таймер в ATtiny25/45/85 mike124 Proteus 11 30.10.2012 11:19
Сторожевой таймер. Проведите ЛИКБЕЗ. radarr Микроконтроллеры, АЦП, память и т.д 9 22.01.2008 21:50
таймер и симуляция в MPLAB Sim lisergin Микроконтроллеры, АЦП, память и т.д 0 16.01.2006 15:35


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


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