首页 > 编程知识 正文

nvic配置中断源,软件触发中断

时间:2023-05-04 11:24:20 阅读:41236 作者:2543

中断控制器,简称NVIC,是Cortex-M3的不可分离部分,与CM3核心逻辑紧密结合,部分与水乳融合。 NVIC与CM3内核同时应对,相互呼吸,相互配合,相互配合,共同完成对中断的响应。 NVIC的寄存器以存储器映射方式被访问,除了包括控制寄存器和中断处理的控制逻辑之外,还包括MPU、SysTick计时器、与调试控制相关的寄存器。

NVIC总共支持1到240个外部中断输入。 通常是外部中断写入IRQs )。 具体数值由芯片制造商在设计芯片时决定。 NVIC还支持“永垂不朽”的不可屏蔽中断(NMI )输入。 NMI的实际功能也由芯片制造商决定。 在某些情况下,NMI不能由外部中断源控制

NVIC的访问地址为0xE000_E000。 所有NVIC的中断控制/状态寄存器只能通过特权级访问。 但是,——软件触发中断寄存器有一个例外,可以通过用户级访问以生成软件中断。 的中断控制/状态寄存器均可通过字/半字/字节进行访问。 另外,还有几个与中断控制密切相关的中断屏蔽寄存器。 “特殊功能寄存器”只能通过dbdwx/MSR和CPS访问。

中断配置基础

每个外部中断“挂号”到NVIC的下一个寄存器。

使能/禁用寄存器

悬空和“悬空解除”寄存器

优先级寄存器

活动寄存器

异常屏蔽寄存器(PRIMASK、FAULTMASK及BASEPRI ) ) ) )。

中断的使能与除能

通过单独的寄存器控制中断的使能和使能,CM3可以具有240对使能/清除位(SETENA位/CLRENA位),每个中断可以有一对。 为了允许中断,必须在与SETENA对应的位中写入1; 为了能够中断,必须在对应的CLRENA位中写入1。

中断的悬起与解悬

如果在发生中断时处理或屏蔽了与此中断级别或优先级相同的异常,中断将无法立即响应。 此时中断悬而未决。 可以通过“中断设置挂起寄存器(SETPEND )”和“中断挂起清除寄存器(CLRPEND )”读取中断的挂起状态,也可以通过写入它们手动挂起中断

优先级

每个外部中断都有对应的优先级寄存器,每个寄存器占用8位。 这8位包括优先权优先级和子优先级。 所有优先级寄存器均可按字节访问。 当然也可以半字/字为单位进行访问。

活动状态

每个外部中断都有活动的状态位。 处理器执行ISR的第一条指令后,活动位将设置为1,并且在ISR返回之前不会清除硬件。

特殊功能寄存器 PRIMASK 与 FAULTMASK

PRIMASK用于除NMI和硬故障以外的所有异常,有效地将当前优先级更改为0 (可编程优先级中的最高优先级)。 故障屏蔽在异常结束时自动清除。 此寄存器可以通过以下dbdwx和MSR示例中的方法访问:

; 关闭MOV R0,#1MSR PRIMASK,R0; 2 .断开中断MOV R0、#0MSR PRIMASK、R0; 另外,通过CPS命令可以迅速实现上述功能。 CPSID i; 关闭CPSIE i; 打开中断BASEPRI 寄存器

更精细的设计要求更精细地控制中断口罩。 只有——掩码优先级低于某个阈值的中断——具有大于或等于数字的优先级。 那么,这个数量保存在哪里? 保存在BASEPRI中。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。