本人工作之余自学,该博客是为了记录学习过程,以及一些心得。内容如有出错,欢迎大家纠正,谢谢。
中断系统
1、 把CPU内部产生的紧急事件叫做异常,比如非法指令(除零)、地址访问越界等;
2、 把来自CPU外部的片上外设产生的紧急事件叫做中断,比如GPIO引脚电平变化、定时器溢出等。
3、 异常和中断的效果基本一致,都是暂停当前任务,优先执行紧急事件,因此一般将中断和异常统称为中断。
实例一:查看中断列表
实例一:打开任意一个项目的中断文件Startup,里面的中断向量标,可以看到所使用的芯片,可以支持的中断。中断向量表定义了所有中断处理函数的名字,当外设发生中断时,则跳到中断向量表中,对应中断处理函数的位置。
优先级
Cortex-M3内核有一个专门管理中断的外设NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器),通过优先级控制中断的嵌套和调度。NVIC是一个总的中断控制器,无论是来在内核的异常还是外设的外部中断,都由NVIC统一进行管理。优先级是负数表示不可以设置优先级,剩下的异常和中断都可以通过修改NVIC的寄存器调整优先级,但不能设置为负数。优先级数值越小,优先级越高。
1、 将优先级拆分为抢占优先级( Preempt Priority) 和子优先级( Subpriority);
2、 每个中断都需要指定这两级, 具有高优先级的中断可以打断低优先级的中断,实现中断嵌套。
3、 抢占优先级决定是否可以产生中断嵌套,子优先级决定中断响应的顺序。
4、 两个中断的抢占优先级相同,这两个中断不能产生嵌套。尽管子优先级比较高,也要等执行完。
GPIO中断
1、 GPIO产生的中断,要先由外部中断事件控制器处理一下。因为STM32的GPIO支持中断模式和事件模式。
2、 中断模式是指外部信号产生电平变化时,EXTI将该信号给NVIC处理, 从而触发中断,执行中断服务函数,完成对应操作。
3、 事件模式,是指外部信号产生电平变化时,EXTI根据配置,联动ADC或TIM执行相关操作。
4、 中断和事件的产生源是一样的,中断需要软件实现相应功能,而事件是由硬件触发后执行相应操作。前者需要CPU参与功能实现,可以自定义功能,比如产生中断按键控制LED灯的亮灭,后者无需CPU参与,比如发生按键中断,自动启动ADC采集,具有更高的响应速度。
STM32C8T6只有40多个中断,除去串口、ADC、I2C、SPI等,剩下不到20个中断。但芯片的GPIO引脚有30多个,导致不能一个引脚分配一个中断,所有产生中断线。即同