Добавлен комментарий, объясняющий как настраивать приоритеты прерываний.
This commit is contained in:
parent
325edcf046
commit
2dd8e3d58c
@ -127,7 +127,19 @@ void SM_Sys_Init(TSM_Sys *p) {
|
|||||||
extern int *g_pfnVectors;
|
extern int *g_pfnVectors;
|
||||||
SCB->VTOR = (uint32_t) (&g_pfnVectors);
|
SCB->VTOR = (uint32_t) (&g_pfnVectors);
|
||||||
#endif
|
#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(TMR0_IRQn);
|
||||||
NVIC_DisableIRQ(TMR1_IRQn);
|
NVIC_DisableIRQ(TMR1_IRQn);
|
||||||
|
Loading…
Reference in New Issue
Block a user