刚学嵌入式,想问问什么是中断,中断的概念是什么

一个简单的生活场景:孩子在卧室睡觉,妈妈在客厅看书,那么,妈妈如何知道孩子醒了?

fbe35e2eca92b66f6e536c7e2647a764.png

· 时时进房间查看:查询方式

· 进房间陪小孩一起睡觉,小孩醒了会吵醒她:休眠-唤醒

· 妈妈要干很多活,但可以定个闹钟陪小孩睡一会:poll方式

· 妈妈在房间干活,小孩自己醒了,走出房间告诉妈妈:异步通知

后面3中方式都需要小孩中断妈妈:中断她的睡眠、她的工作。

3f05fa6d8dcb68aca90677fc432f8178.png16c759d1a06da8ec15f5bf3d9df3be28.png

事实上能“中断”妈妈的事儿多着呢

· 远处猫叫:忽略

· 门铃,小孩哭声:对应不同处理

· 身体不舒服:赶紧休息

· 有蜘蛛掉下来:赶紧跑

妈妈正在看书。被中断后的流程:

· 正在看书

· 发生各种声音:中断源

o 远处猫叫

o 小孩哭声

o 门铃 ...

怎么处理

· 先在书中放上书签,合上书:保存现场

· 去处理:中断服务程序

· 回来继续看书:返回处理

嵌入式系统中的中断

c4990f34d3690aa1931db44f42bd4025.pngbed49846d303153f7ebe7ed6bd21dc91.png

CPU 在运行过程中会被各种“异常”打断:

· 未定义

· 指令、数据有问题

· SWI:软中断

· 快中断

· 中断

中断也是一种异常。导致中断的情况有很多:

· 按键

· 定时器

· ADC转换完成

· UART发送完数据、收到数据

· 等等

这些中断源,汇集到中断控制器,由中断控制器选择最高的中断并通知CPU

中断处理流程

· 初始化:

o 设置中断源:何种中断

o 设置中断控制器(屏蔽某个中断,中断优先级)

o 设置CPU总开关:使能中断

· 执行正常程序:

· 产生中断:比如按下按键 -> 中断控制器 -> CPU

· CPU 没执行一条命令都会检查有无中断/异常的产生

· CPU发现有中断/异常,开始处理:

o 对于不同的的异常,跳转到不同的地址执行程序

o 这个地址上,只是一条跳转指令,跳去执行某个函数,这个就是异常向量。

后3步都是硬件做的。软件做的:

· 保存现场(各种寄存器)

· 处理异常和中断

· 恢复现场


猜你喜欢

转载自blog.csdn.net/danpianji777/article/details/125207434
今日推荐