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

 
 
 
Reply to this topicStart new topic
> помогите/объясните про прерывания, st32 cortex m3
diwil
сообщение Sep 29 2011, 09:46
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



Здравствуйте,

пытаюсь понять логику прерываний оси. пока что не совсем понимаю что и как...

Итак, задача -

1. прерывания sysTick должны иметь наивысший приоритет и должно прерывать любой обработчик прерывания, ибо в нем, помимо функций оси, будет запускаться только таймер.

2. Прерывание таймера, скажем TIM2 должно иметь высокий приоритет, прерывать любой обработчик прерывания (оно абсолютно точно не будет пересекаться с прерыванием sysTick) и не блокироваться осью, ибо будет только запускать передачу по SPI и не будет использовать функций оси.

2.а Есть еще прерывания, которые не будут использовать функции оси.

3. Прерывание, скажем DMA конец передачи должно иметь тоже высокий приоритет, но будет использовать функции оси (запись в очередь)

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

5. Всего 5-10 пользовательских задач и 10-15 очередей в системе - 2 задачи высокоприоритетные, одна низкоприоритетная, остальные имеют одинаковый "средний приоритет."

Вот что есть в примере:

Код
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY            15
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY    5

/* The lowest priority. */
#define configKERNEL_INTERRUPT_PRIORITY     ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
/* Priority 5, or 95 as only the top four bits are implemented. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY     ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )


Вопрос(ы)
1. Кто может объяснить мне как LOWEST_INTERRUPT_PRIORITY и SYSCALL_INTERRUPT_PRIORITY согласуются с приоритетом прерываний "железных"?
2. Как назначить приоритеты прерываниям?
3. где можно прочитать (кроме как API доков на сайте) подробно как это делать?

Заранее благодарю

Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 29 2011, 09:59
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(diwil @ Sep 29 2011, 13:46) *
2. Как назначить приоритеты прерываниям?
Только аппаратно, сконфигурировав NVIC (читайте доки на arm cortex-m3 ибо контроллер прерываний во всех MCU на ядре cortex-m3 одинаковый (референсный от ARM)).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
diwil
сообщение Sep 29 2011, 12:20
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



Цитата(demiurg_spb @ Sep 29 2011, 13:59) *
Только аппаратно, сконфигурировав NVIC (читайте доки на arm cortex-m3 ибо контроллер прерываний во всех MCU на ядре cortex-m3 одинаковый (референсный от ARM)).


... ну это я прочитал.
Меня вот что смущает -
mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY
msr basepri, r0
bl vTaskSwitchContext

вот так происходит переключение контекста,
а значение configMAX_SYSCALL_INTERRUPT_PRIORITY есть 0x50. Поскольку на м3 реализовано только 4 младших бита, то в basepri запишется 0. Это означает, что только прерывания с приоритетом ниже или равно 0 (т.е. более высоким) будут обрабатываться (однако там еще написано, что значение 0х00 - no effect, но я чего то не совсем понимаю что имелось ввиду - ни изменяется basepri или не запрещаются прерывания вообще?)
В тоже время, приоритет sysTick и pendSV (в файле port.c) установлены в минимальный приоритет. Т.е. sysTick будет прерываться любым железным прерыванием и запрещаться любым ...CRITICAL()?

Или я что-то напутал?

Если нет, то можно ли установить и будет ли это правильно в, скажем, единицу или ноль чтобы оно никогда не запрещалось?

Я попробовал, но ось тогда начинает валиться. Где грабли?

Спасибо.


!!!!!! напутал !!!!!

блин... у меня оказался мануал с опечаткой... наверное древний. не 4 младших, а 4 старших бита... все встало на свои места теперь.

Go to the top of the page
 
+Quote Post

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

 


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


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