реклама на сайте
подробности

 
 
> STM32F103 :выход из прерывания от системного таймера, Где находится бит который надо сбрасывать?
Serj78
сообщение Jan 29 2010, 06:56
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



Структура обработки прерываний STM32 основана на том, что попав в прерывание, пользователь должен определить его источник (в общем случае) и сбросить соответствующий бит, который вызвал это прерывание.

Без этого из прерывания не выйти.

А в каком регистре находится бит который ВЫЗЫВАЕТ (не разрешает!! ) прерывание от системного таймера?

Столкнулся с тем, что однажды попав в прерывание от системного таймера, оттуда не выйти.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sonycman
сообщение Jan 29 2010, 13:59
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Не нужно ничего сбрасывать для SysTick.

Вы точно ничего не напутали с инициализацией регистров таймера?
Go to the top of the page
 
+Quote Post
Serj78
сообщение Jan 29 2010, 15:36
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



Цитата(sonycman @ Jan 29 2010, 16:59) *
Не нужно ничего сбрасывать для SysTick.

Вы точно ничего не напутали с инициализацией регистров таймера?


Надеюсь, что нет smile.gif


Но буду смотреть.. основная программа перестает выполняться, как только первый бит регистра управления в 1 ставишь..

Возможна ситуация, когда таймер все время обнуляется, и все время вызывается прерывание...

Спасибо за совет. Был удивлен, что часть информации, относящаяся к NVIC и SysTick не описана в мануале на процессор smile.gif.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 29 2010, 17:48
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Serj78 @ Jan 29 2010, 19:36) *
Возможна ситуация, когда таймер все время обнуляется, и все время вызывается прерывание...

Конечно.
Каким значением Вы проинициализировали регистр SysTick Reload Value? wink.gif

Цитата(Serj78 @ Jan 29 2010, 19:36) *
Был удивлен, что часть информации, относящаяся к NVIC и SysTick не описана в мануале на процессор smile.gif.

Да, не стали повторять стандартные для всех ядер вещи.
Я тоже не сразу нашёл нужный мануал smile.gif
Go to the top of the page
 
+Quote Post
Serj78
сообщение Feb 2 2010, 13:14
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



Цитата(sonycman @ Jan 29 2010, 20:48) *
Конечно.
Каким значением Вы проинициализировали регистр SysTick Reload Value? wink.gif


Пробовал записывать разные значения.

Для проверки счетчика сделал такой код:

CODE

u16 k;
u32 test[500];



// SysTick configuration

SysTick->CTRL=5;// если =7 то это с вызовом прерывания
SysTick->LOAD=31000;
// SysTick->CALIB=5000;

// for(k=0;k<500;k++)test[k]=SysTick->VAL;



Далее я это запускаю в main перед While(1); а в самом теле программы вывожу этот массив ( test[0..500] ) на usart.

В результате вижу что таймер считает, в регистре VAL постепенно уменьшающиеся значения. Только уменьшаются они больно быстро- с шагом примерно 12 единиц. Как будто таймер считает каждый такт процессора. ( На проход цикла около 12 тактов тратится или около того... )

Но стоит мне приравнять регистр управления =7, ( 0b111) то программа находящаяся в while(1) перестает выполняться. в прерывании стоит мигнуть светодиодом или вообще в прерывании ничего не делать - без разницы.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016