NVIC----EXTI流程理解

    什么是NVIC?即嵌套向量中断控制器(Nested Vectored Interrupt Controller)。它属于Cortex内核的器件,不可屏蔽中断(NMI)和外部中断都由它来处理,而SYSTICK不是由NVIC来控制的。

-------------------------------------------------- -------------------------------------------------- ------------------------------

    首先需要给中断分优先级,在的的start.s中我们可以看到,可以对应到用户手册中,优先级的值越小,优先级越高。在优先级中,分为抢占式优先级和响应优先级,每个中断都需要被指定这两个优先级。

    其中,抢占优先级功能重于响应优先级,响应优先级又被称为副优先级。

    可以这样理解,当存在两个不同的抢占优先级时,无论响应优先级顺序,优先处理抢占优先级较高的事件,抢占优先级高的可以中断抢占优先级低的任务。

    当抢占优先级相同时,首先处理响应优先级高的事件,同抢占优先级的事件无法中断响应优先级事件,也就是说当同时发生两个相同抢占优先级的事件时,处理器会优先处理响应优先级较高的事件,在处理该事件的时候,无论是否出现同抢占优先级的更高的响应优先级事件,都会等待该时间处理结束之后再进行比较处理

    如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

-------------------------------------------------- -------------------------------------------------- ------------------------------

    我们主要讲述外部中断的触发。

    首先我们对外部中断进行外设的配置,建立新的工程之后,进入到主函数中,首先需要对我们用到的功能进行初始化。比如NVIC,GPIO等。之后将GPIO和时钟中断线进行连接,我们同样使用库函数,比如GPIO_EXTILineConfig()函数进行连接,连接成功之后再将外部中断线进行配置,配置的结构体再库函数中由定义:EXTI_InitStructure结构体到此,我们基本完成了外部中断的配置,接下来就引入到循环中,我们使用whiel(1)来等待外部中断。

    配置完成之后,我们回到的的Startup.s这个文件中,它里面定义了中断向量表,我们选择我们定义的中断向量,来实现他。由于STM32的中断向量大多数是弱弱定义。​​在有我们自己的定义时,来执行我们定义的操作。当终端来临的时候,进到我们的中断向量表,之后进入我们的中断处理程序,比如说中断处理程序EXTI2_IRQHandler(无效),在这个我们自己实现的中断处理程序中,我们可以定义在触发此中断时需要执行的操作。

你可能感兴趣的:(底层)