中断基础知识
什么是中断
灵活的使用系统中断可以大大提高单片机对随机事件的实时处理能力,进而提高单片机的工作效率。那什么是中断呢?这里举一个例子,比如我们正在敲代码,突然有一个电话打过来,这时我们停止敲代码转而去接电话,然后在电话聊完事情之后继续敲代码。这里面的电话就相当于一个中断,打断我们当前做的事情,接电话聊事情就相当于中断需要去执行的事情,也就是中断服务程序。
外部中断
EXTI(中断/事件控制器)包括25个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。EXTI有三种触发类型:上升沿触发、下降沿触发和任意沿触发。EXTI中的每一个边沿检测电路都可以独立配置和屏蔽。每一个中断都有4位中断优先级配置位,可提供16个中断优先等级。
中断触发源
EXTI触发源包括来自I/O管脚的16根线以及来自内部模块的7根线。(包括LVD、RTC闹钟、WIFI唤醒、RTC侵入和时间戳、RTC唤醒、I2C0唤醒、USART0唤醒、BLE唤醒、PLF唤醒)。通过配置SYSCFG_EXTISSx
寄存器,所有的GPIO管脚都可以被选作EXTI的触发源。
中断事件
除了中断,EXTI 还可以向处理器提供事件信号。RISC-V 内核完全支持等待中断(WFI)指令。当某些预期的事件发生时,例如一个特定的 I/O 管脚电平翻转或者 RTC 闹钟动作,EXTI 能唤醒处理器及整个系统。
中断优先级
每一个中断都有4位可配置的优先级位,可以通过分组设置抢占优先级和响应优先级的位数。
所有可编程的中断都需要指定抢占优先级和响应优先级,抢占优先级决定是否可以产生中断嵌套,响应优先级决定中断响应顺序,若两种优先级一样则看中断在中断向量表中的位置,位置越靠前越先响应。抢占优先级高(值小)的中断可以中断抢占优先级低(值大)的中断处理函数(中断向量表请见用户手册的126页)。
当两个中断的抢占优先级相同时,即这两个中断没有嵌套关系,当一个中断到来后,若此时CPU正在处理另一个中断,则后到来的中断就要等前一个中断处理函数处理完毕后才能被处理,当两个中断同时到达,则中断控制器会根据它们的响应优先级决定先处理哪个。
通常中断优先级分组只设置一次,它针对的是系统中所有的中断。后续设置某个中断的中断优先级时,只需要设置在这个分组内的抢占优先级和响应优先级。