STM32F1 노트 (4) NVIC 중단 우선 순위 관리
2690 단어 STM32F1
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
표준 라이브러리에서 그룹 정의는 다음과 같습니다.
/** @defgroup Preemption_Priority_Group
* @{
*/
#define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
4 bits for subpriority */
#define NVIC_PriorityGroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority
3 bits for subpriority */
#define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
2 bits for subpriority */
#define NVIC_PriorityGroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
1 bits for subpriority */
#define NVIC_PriorityGroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority
0 bits for subpriority */
번역하면 다음과 같다.
그룹 0은 0비트 선점 우선순위, 4비트 응답 우선순위입니다.
그룹 1은 1위 선점 우선순위, 3위 응답 우선순위이다.
그룹 2는 2위 선점 우선순위, 2위 응답 우선순위이다.
그룹 3은 3자리 선점 우선순위, 1위 응답 우선순위이다.
그룹 4는 4자리 선점 우선순위, 0자리 응답 우선순위이다.
그룹 3을 사용하여 사용할 수 있는 선점 우선 순위가 2^3=8, 즉 0~7이라고 가정하면 코드는 다음과 같이 구성할 수 있습니다.
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 6;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;
사용할 수 있는 응답 우선 순위는 2^1=2, 즉 0~1이며, 코드는 다음과 같이 구성할 수 있습니다.
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
//NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
우선 순위 로직:
1. 선점 우선 순위의 수준이 응답 우선 순위보다 높다.즉, 선점 우선 순위가 높은 중단은 실행 중인 우선 순위가 낮은 중단을 중단할 수 있습니다.
2. 수치가 작을수록 우선순위가 높다. 즉, 0이 가장 높은 우선순위이다.
3. 선점 우선 순위와 동시에 응답 우선 순위가 높은 사람은 우선 순위가 낮은 사람을 끊을 수 없다.
4. 두 개의 중단된 선점 우선 순위와 응답 우선 순위가 모두 같으면 어느 중단이 먼저 발생하면 먼저 실행한다.
NVIC 구성 예:
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
STM32F1 노트 (4) NVIC 중단 우선 순위 관리STM32는 인터럽트를 5개 그룹, 0~4그룹으로 나눈다.구성 코드는 다음과 같습니다. 표준 라이브러리에서 그룹 정의는 다음과 같습니다. 번역하면 다음과 같다. 그룹 0은 0비트 선점 우선순위, 4비트 응답 우선순위...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.