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

 
 
> SysTick в STM32F4xx
Sidoroff
сообщение Sep 15 2014, 10:10
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 3-07-06
Пользователь №: 18 536



Здравствуйте!
Как настроить SysTick, чтобы можно было на время, значительно меньшее периода таймера,
в фоновой программе запрещать и потом разрешать прерывания SysTick, чтобы при этом они не терялись?
Т.е. если в данный момент прерывание запрещено а событие таймера приходит, то оно должно
обработаться сразу же в момент разрешения прерываний таймера.

Ну и соответственно как разрешать/запрещать прерывания SysTick?

Инициализация сейчас стандартная: SysTick_Config(SystemCoreClock / частота);

Для запрета/разрешения пробовал такие варианты:

//такой вариант не запрещает прерывания SysTick вообще
NVIC_DisableIRQ(SysTick_IRQn); // запрет
NVIC_EnableIRQ(SysTick_IRQn); // разрешение

//тоже не запрещает прерывания SysTick
int t = RCC->CIR; RCC->CIR = 0; // запрет
RCC->CIR = t; // разрешение

// запрещает и разрешает, но прерывания теряются
SysTick->CTRL &= (~SysTick_CTRL_TICKINT_Msk); // запрет
SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; // разрешение
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sidoroff
сообщение Sep 15 2014, 11:57
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 3-07-06
Пользователь №: 18 536



Что за менеджер? Что-нибудь связанное с RTOS? Не пользуюсь, не знаю как. У меня stand-alone приложение.
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 15 2014, 12:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Sidoroff @ Sep 15 2014, 15:57) *
Что за менеджер? Что-нибудь связанное с RTOS? Не пользуюсь, не знаю как. У меня stand-alone приложение.

Конечно без RTOS.
Можно сделать простой кольцевой буфер.
Функции push() - для помещения элемента в очередь, pop() - для извлечения.
Элементом очереди будет структура, содержащая данные и указатель на callback-функцию.

При вызове push() выделяется новый элемент в очереди. В него помещается структура.
Если SPI свободен, то отправляем данные из данного элемента очереди. Если ведется передача, то в обработчике окончания передачи вызывать
указанную calback-функцию, извлекать следующий элемент из очереди и отправлять его по SPI.

Или совсем просто:
В Systick устанавливать флаг, а в фоне сбрасывать и передавать, те данные, которые нужно было отправить в Systick.
Go to the top of the page
 
+Quote Post



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

 


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


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