STM32F1x例外、piority和NVIC
我对异常和NVIC有点困惑。 在ARM中有两种主要的例外情况。与核心相关的和核心外的,外围的。 据我所知,从一些书NVIC主要控制核心以外的例外情况。此外,我们有两个单独的寄存器,分别保存大量异常中断优先级寄存器(NVIC_IPRx)和系统处理程序优先级寄存器(SHPRx)。 这两组异常如何通过NVIC相互关联?检查,第2.3章,特别是第2.3.5章 所有异常都具有关联的优先级,较低的优先级值表示较高的优先级。除重置、硬故障和NMI外,所有异常的优先级均可配置。如果软件未配置任何优先级,则具有可配置优先级的所有异常的优先级为0 [……] 可配置的优先级值在0-15范围内。这意味着具有固定负优先级值的重置、硬故障和NMI异常始终比任何其他异常具有更高的优先级。例如,将更高的优先级值分配给IRQ[0],将更低的优先级值分配给IRQ[1]意味着IRQ[1]具有比IRQ[0]更高的优先级。如果同时声明IRQ[1]和IRQ[0],则IRQ将在IRQ[0]之前处理。如果多个挂起异常具有相同的优先级,则具有最低异常数的挂起异常将优先。例如,如果IRQ[0]和IRQ[1]都处于挂起状态且具有相同的优先级,则IRQ[0]在IRQ[1]之前处理 检查,第2.3章,特别是第2.3.5章 所有异常都具有关联的优先级,较低的优先级值表示较高的优先级。除重置、硬故障和NMI外,所有异常的优先级均可配置。如果软件未配置任何优先级,则具有可配置优先级的所有异常的优先级为0 [……] 可配置的优先级值在0-15范围内。这意味着具有固定负优先级值的重置、硬故障和NMI异常始终比任何其他异常具有更高的优先级。例如,将更高的优先级值分配给IRQ[0],将更低的优先级值分配给IRQ[1]意味着IRQ[1]具有比IRQ[0]更高的优先级。如果同时声明IRQ[1]和IRQ[0],则IRQ将在IRQ[0]之前处理。如果多个挂起异常具有相同的优先级,则具有最低异常数的挂起异常将优先。例如,如果IRQ[0]和IRQ[1]都处于挂起状态且具有相同的优先级,则IRQ[0]在IRQ[1]之前处理STM32F1x例外、piority和NVIC,stm32,Stm32,我对异常和NVIC有点困惑。 在ARM中有两种主要的例外情况。与核心相关的和核心外的,外围的。 据我所知,从一些书NVIC主要控制核心以外的例外情况。此外,我们有两个单独的寄存器,分别保存大量异常中断优先级寄存器(NVIC_IPRx)和系统处理程序优先级寄存器(SHPRx)。 这两组异常如何通过NVIC相互关联?检查,第2.3章,特别是第2.3.5章 所有异常都具有关联的优先级,较低的优先级值表示较高的优先级。除重置、硬故障和NMI外,所有异常的优先级均可配置。如果软件未配置任何优先级,则具有可
ARM Cortex M提供了几种异常,但概括起来是:中断(主要由外围设备使用)、故障(例如内存冲突)和专用于操作系统实现的异常(主管调用、SysTick等)。还有复位和NMI。重置优先级较高,然后是NMI。其他异常优先级可通过两组寄存器进行配置:
- 用于中断的NVIC_IPRx
- 系统处理程序的SHPRx(即故障+SVC、SysTick和PendSV)
现在,优先级越低,优先级越高是例外。这就是重置和NMI具有负优先级的原因。ARM Cortex M提供了几种异常,但概括起来是:中断(主要由外围设备使用)、故障(例如内存冲突)和专用于操作系统实现的异常(主管调用、SysTick等)。还有复位和NMI。重置优先级较高,然后是NMI。其他异常优先级可通过两组寄存器进行配置:
- 用于中断的NVIC_IPRx
- 系统处理程序的SHPRx(即故障+SVC、SysTick和PendSV)
现在,优先级越低,优先级越高是例外。这就是重置和NMI具有负优先级的原因。是否所有这些异常都属于NVIC?有没有一种简单的方法来计算比例?这一切似乎有点复杂。不,据我所知,NVIC管理中断,其他异常由系统控制块或直接由内核管理。我不知道计算优先级是什么意思。你的意思是决定什么中断必须比其他中断更优先吗?这通常是常识,不太复杂。例如,假设您有一个通信协议,其bandwith具有挑战性,其优先级将很高。Systick优先级可能太高,无法保持准确。关于优先级分组,它是另一个控制级别:您可以在一组中断中设置不同的(子)优先级。区别在于,在同一优先群体中,它不是先发制人的。如果你不确定你是否需要它,你就不必使用它。所有这些例外情况都属于NVIC吗?有没有一种简单的方法来计算比例?这一切似乎有点复杂。不,据我所知,NVIC管理中断,其他异常由系统控制块或直接由内核管理。我不知道计算优先级是什么意思。你的意思是决定什么中断必须比其他中断更优先吗?这通常是常识,不太复杂。例如,假设您有一个通信协议,其bandwith具有挑战性,其优先级将很高。Systick优先级可能太高,无法保持准确。关于优先级分组,它是另一个控制级别:您可以在一组中断中设置不同的(子)优先级。区别在于,在同一优先群体中,它不是先发制人的。如果你不确定自己是否需要它,你就不必使用它。