快速连接
👉👉👉【精选】ARMv8/ARMv9架构入门到精通-目录 👈👈👈
各位大佬好,如下是关于中断唤醒系统的一个流程上的总结,由于这方面知识过于复杂,又牵扯到SOC厂商的设计,而且我也没有做过这方面工作,所以一半来自文档一半靠猜测,都不一定对,反正自己给自己解释得通了。希望大佬们不小心刷到了本文,如果觉得是不合理的,请给个赞(然后,赞同本文思想的人数 = 阅读量 - 点赞数),如果看出明显的错误,也帮忙指出下,不胜感激,多谢!
当一个蓝牙中断
(如NS group 1中断)做为唤醒源产生中断时,此时的流程应当是这样的:
- Redistribute发生一个Wake Request给Power controller,Power controller给PE上电,即reset
- 此时PE为最高异常级别,即EL3,PC指针指向RVBAR_EL3中的地址,也就是之前写入的bl31_warm_entrypoint
- 然后PE在ATF中继续执行,在ATF(EL3)中, PE不会taken该
蓝牙中断
,因为SCR_EL3.IRQ=0,当前有处于EL3级别,所以中断不会被taken,中断保持remains pending - 当ATF相关逻辑执行完毕后,退出ATF,返回到REE侧时,此时异常级别不再是EL3,变成了EL1,该中断则会变为pending状态,继而再根据中断优先级排序置为Active,然后检查PSTATE,从而中断被taken
- 此时跳转到REE侧的中断向量表,然后跳转到
蓝牙中断
注册的handler函数
关注"Arm精选"公众号,备注进ARM交流讨论区。