Добавлен комментарий, объясняющий как настраивать приоритеты прерываний.
This commit is contained in:
parent
325edcf046
commit
2dd8e3d58c
@ -127,7 +127,19 @@ void SM_Sys_Init(TSM_Sys *p) {
|
||||
extern int *g_pfnVectors;
|
||||
SCB->VTOR = (uint32_t) (&g_pfnVectors);
|
||||
#endif
|
||||
NVIC_SetPriorityGrouping(3); // 4 bit preemption, 0 bit of subprio
|
||||
|
||||
/*
|
||||
У микроконтроллера К1921ВК028 производителем заложено 4 бита из 8-ми битного поля PRI_n [7:0] для настройки приоритетов прерываний и
|
||||
задается это в стандартном армовском макросе __NVIC_PRIO_BITS. Получается, что младшие биты [3:0] не используются и для настройки
|
||||
предназначены только биты [7:4]. В зависимосоти от другого параметра PRIGROUP мы можем сказать как использовать эти 4 бита, сколько бит из 4-х
|
||||
отвести под группы, а сколько под подгруппы, т.е. как бы ставя разделяющую точку, где часть справа от точки кодирует подгруппу, а левая - группу.
|
||||
Если PRIGROUP = 0, то поле PRI_n интерпритируется как 0bxxxxxxxx, где x - биты задания уровня приоритета групп. Если PRIGROUP = 3, то поле PRI_n
|
||||
интерпритируется как 0bxxxx.yyyy, где x - биты задания уровня приоритета групп, y - биты задания уровня приоритета подгрупп. И т.д.
|
||||
Выходит, что задание PRIGROUP от 0 до 3 будет иметь один и тот же результат, отсавляя во всех этих случаях 4 бита под группу и 0 под подгруппу
|
||||
(не забываем, что у нас используются только 4 крайних слева бита поля PRI_n, т.е. биты [7:4]), когда как PRIGROUP от 4 до 7 уже будет иметь влияние
|
||||
на соотношения между максимальным возможным количеством групп и подгрупп.
|
||||
*/
|
||||
NVIC_SetPriorityGrouping(3); // 4 бита под группу, 0 под подгруппу. После этого мы можем передавать аргумент priority в функцию NVIC_SetPriority от 0 до 15 для задания уровня приоритета прерывания. 0 - наивысший, 15 - самый низкий приоритет.
|
||||
|
||||
NVIC_DisableIRQ(TMR0_IRQn);
|
||||
NVIC_DisableIRQ(TMR1_IRQn);
|
||||
|
Loading…
Reference in New Issue
Block a user