嵌入式3---单片机中断

电子说

1.4w人已加入

描述

一、中断是什么?

中断:CPU 正常执行程序时,外部 / 内部事件触发信号,让 CPU 暂停当前任务,立刻去处理紧急事件,处理完再回到原来的位置继续执行。

二、中断向量表 中断向量表 = 存放所有中断服务函数(ISR)入口地址的一张表

放在 MCU 固定的 Flash 地址(通常是 0x00000000 开始)

每个中断对应一个向量(一个函数指针)

中断触发时,硬件自动查表跳转到对应 ISR

三、中断优先级 当多个中断触发时优先级高的先执行,高抢占优先级会抢占低抢占优先级的cpu资源 在单片机里有两个优先级 1.抢占优先级(Preemption) 高抢占优先级可以打断低抢占优先级 2.子优先级(Subpriority) 抢占优先级相同时,子优先级高的先执行,不能互相打断 3.规则

高抢占优先级 > 低抢占优先级

同抢占优先级:子优先级高先执行

同优先级:硬件固定的序号小的先执行

4. 工程经验

紧急事件(如故障、编码器):高抢占优先级

普通通信(串口、CAN):中等

定时任务、LED:低优先级

四、中断响应流程 中断触发之后的经过 1.完成当前指令 2.保护现场:将当前的CPU寄存器、PC指针压入栈中 3.查找中断向量表:找到对应的服务函数地址 4.执行中断服务函数 5.恢复现场:出栈,回到主程序断点继续执行 五、ISR 中断服务函数编写注意事项 1.快进快出 中断服务函数尽量做到短、快、简单,避免使用耗时函数,如延时,大量循环,打印log等 2.可重入 函数打断后,可以再继续回来执行不会出错 最好不使用全局或者静态变量,不调用不可重入函数(printf,malloc等) 使用全局变量最好做volatile声明 3.共享资源保护 多个中断或者和主程序公用变量时做共享资源保护 如开关中断

 

// 临界区保护__disable_irq();共享变量 = 1;__enable_irq();
4.必须清楚中断标志位 六、总结

 

中断向量表

存放中断服务函数入口地址的表

硬件自动查表跳转

中断优先级

抢占优先级:决定是否可以嵌套

    子优先级:同抢占优先级时决定执行顺序

中断响应流程

停当前指令 → 保护现场 → 查向量表 → 执行 ISR → 恢复现场

ISR 编写规则

快进快出

可重入 (少用全局变量)

清中断标志

共享资源关中断保护

不调用阻塞 / 耗时函数

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分