Перейти к содержимому

#34. Конфигурация NVIC

NVIC поддерживает 16 различных уровней приоритетов и субприоритетов, поддерживаемых 4 битами, которые разделены между этими двумя функциями. Прерывания с разными приоритетами могут вытеснять друг друга (приоритеты с меньшим числом имеют приоритет), в то время как подчиненные приоритеты в пределах одного приоритета влияют только на выбор прерывания, принятого, когда два или более ожидают рассмотрения. Для примеров мы используем 0 битов для приоритета. В дальнейшем мы обсудим FreeRTOS, операционную систему реального времени, которая требует использования 4 битов для приоритета .

#include <misc.h>
/*
* NVIC_PriorityGroup_0 0 bits priority , 4 bits subgroup
* NVIC_PriorityGroup_1 1 bits priority , 3 bits subgroup
* NVIC_PriorityGroup_2 2 bits priority , 2 bits subgroup
* NVIC_PriorityGroup_3 3 bits priority , 1 bits subgroup
* NVIC_PriorityGroup_4 4 bits priority , 0 bits subgroup
*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

Следующий фрагмент кода настраивает и включает прерывание TIM2. Обратите внимание, что это должно соответствовать любой конфигурации устройства!

NVIC_InitTypeDef NVIC_InitStructure;
// No StructInit call in API
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

Номер IRQChannel может зависеть от устройства. Они определены в stm32f10x.h, к которому вы можете обратиться за правильным именем константы — не копируйте значение константы в ваш код! Обратите внимание, что этот заголовочный файл зависит от конкретных определений устройства.

Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x