中断很难?看完这篇就懂了
1.内核总线外设这三个概念是理解中断的必要前提一个芯片具有内核、总线、外设这三个结构内核芯片里的内核有很多架构如ARM架构内核它包含了许多核心部件是整个芯片的大脑总线是连接内核与外设外设与外设之间的通道外设通过总线与内核用于实现芯片的功能如GPIO输出高低电平ADC采集电压串口发送数据2.NVIC它是专门负责管理中断的控制器处于芯片的内核中响应速度很快它可以接收外设的中断请求然后给CPU发送信号执行中断3.中断与异常异常发生在CPU内部CPU的运行流被打断可能是某些致命错误也有可能是中断引起的中断被外部事件打断如按键检测、定时器触发然后NVIC接收到中断信号再给CPU发送信号触发CPU异常执行中断函数4.中断向量表中断向量表是一段存储所有中断的地址表当中断发生时CPU会根据中断编号在向量表中找到对应的地址直接跳转到该地址执行函数。如定时器完成了自动重装载值的刷新CPU就会检测并判断是定时器发生的中断然后就会通过中断向量表找到中断回调函数的地址并执行中断回调函数。5.中断悬起和中断延迟产生单一一次中断的中断处理过程中断悬起当外设触发中断条件时会通过总线向NVIC发送一个中断悬起的信号而NVIC中有很多悬起寄存器和解悬寄存器信号传输到NVIC后就会根据是哪个外设的中断将某个悬起寄存器的某个比特位置1等待着CPU的响应中断延迟从外设触发中断条件向NVIC发送中断悬起信号到CPU开始执行中断回调函数的时间间隔。里面包含了信号在总线的传输过程CPU还在执行更高优先级任务或当前指令未完成时悬起寄存器保持高的时候。最后补充一点在开始执行中断回调函数时悬起寄存器那个被置1的比特位就会被置回0。6.产生持续中断的中断处理过程举个例子将GPIO设置成低电平触发中断然后我们把按键设置成上拉模式并按下那中断请求就会不断从外设通过总线向NVIC发送接着悬起寄存器就会置1然后过了中断延迟后就会开始执行中断回调函数此时比特位就从1变成了0即使中断悬起信号在不断被传输进NVIC但比特位不会重新置1了直到中断回调函数执行完比特位才会置1此时处理器模式又还是处于Handler模式所以会极快又进行终端回调函数。7.产生多次中断悬起信号的中断处理过程1多个中断请求产生于寄存器的比特位已经置1的情况简单来说就是有个外设发出了中断悬起信号然后将寄存器的某个比特位置1然后再中断延迟期间即中断回调函数还没执行那个外设又传来很多个信号但是其作用还是将那个比特位置1并不能记住他的次数所以到最后中断回调函数还是只会执行一次2第二种特殊情况就是前面和单一一次中断的中断处理过程一样不同的是当在执行中断回调函数的过程中时此时属于那个外设的寄存器的比特位是0然后这时来了个中断悬起信号把它重新置1了然后当中断回调函数结束时没有多余的出栈入栈操作就直接连着执行中断回调函数了。8.异常流程压栈由于异常其实就是中断的一个流程所以异常流程是可以套用在中断中的。压栈就是指CPU检测到异常时自动将当前程序的“上下文信息”保存到栈内存的过程这里的上下文指的有xPSR、PC、LR、R12、R3、R2、R1、R0等寄存器。其主要作用就是保存并保护主程序。谢谢您的驻足浏览
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2420247.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!