0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Bl31中断处理流程概述

麦辣鸡腿堡 来源:TrustZone 作者:TrustZone 2023-11-07 17:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

中断处理需要软件和硬件配合完成,GICv3根据中断分组情况以及系统当前运行的异常等级确定中断是以IRQ还是FIQ触发。

CPU通过设置SCR_EL3.IRQ和SCR_EL3.FIQ确定IRQ和FIQ中断分别是被路由到当前异常等级还是被路由到EL3。

若中断被路由到EL3,根据异常发生时系统所处的异常等级,使用的栈指针是SP_EL0还是SP_ELx(x》
0),以及使用的aarch32还是aarch64架构,在每个异常等级下都包含了四张异常等级表。

bl31的异常向量表定义在runtime_exceptions.S中,其与下图的定义一致。

但在ATF中只实现了后面两种情形下的中断处理函数,即若当前系统运行在EL3下,则不允许异常发生。为简化讨论,我们只关注aarch64的情形,则实际上bl31只实现了下图中的第三种异常发生时中断的处理。

图片

这是因为除了系统启动时以外,其它情况下系统运行在bl31则表示其本身是由低异常等级以smc指令进入的,此时系统本身就运行在异常上下文。

而系统返回所需要的elr_el3和spsr_el3都被保存在了sp_el3栈中。在bl31中sp_el3只用于保存寄存器等系统状态信息,且所有的参数的存储位置都是预定义好的。此时,若发生了irq或fiq中断则中断处理函数也会将它的elr_el3和spsr_el3保存到sp_el3中,从而导致smc调用的返回信息被覆盖掉,从而使其无法返回。

因此bl31中的异常处理函数是非重入的,bl31运行时当前PE处于关中断状态。当然,对于smp系统,由于每个PE的sp_el3是独立的,因此其它PE还是可以响应中断的。

当系统运行在低异常等级时产生group 0中断,则可以通过以上第三张异常向量表跳转到bl31的aarch64异常处理函数,下面以FIQ为例说明其中断处理流程。

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

    关注

    11

    文章

    3555

    浏览量

    68744
  • 软件
    +关注

    关注

    69

    文章

    5297

    浏览量

    90881
  • 中断
    +关注

    关注

    5

    文章

    912

    浏览量

    43563
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    at91sam9261中断处理

    AT91SAM9261的先进中断控制器是一个8优先级,可独立屏蔽中断的向量中断控制器,可处理32个中断源。本文讲述at91sam9261
    发表于 12-28 17:01 3685次阅读
    at91sam9261<b class='flag-5'>中断</b><b class='flag-5'>处理</b>

    如何让BL31的调试信息输出到S32R45的uart?

    我用“DEBUG=1”构建 ATF 映像,uart 可以显示 BL2 的调试信息,但没有显示 BL31 的调试信息。 为什么?BL2到BL31,是不是又设置了控制台?如何让
    发表于 04-11 08:20

    BL31未在Kirkstone上加载的原因?

    imx8mm_evk.h 和 imx8mm_evk.c 的设置时,SPL 打印 do uart3,但它应该显示:注意:BL31:v2.6(发布
    发表于 04-19 11:00

    8253中断服务程序流程

    8253中断服务程序流程图 希望发电机P =
    发表于 05-03 00:12 5126次阅读
    8253<b class='flag-5'>中断</b>服务程序<b class='flag-5'>流程</b>图

    Dsp28335中断的方法

    Dsp28335中断的方法Dsp28335中断的方法
    发表于 01-08 14:17 15次下载

    STM32的Cortex-M3中断异常处理

    在STM32处理器中有43个可屏蔽中断通道(不包含 16个 Cortex?-M3的中断线)。共设置了16个可编程的优先等级(使用了 4位中断优先级);它的嵌套向量
    发表于 11-16 15:35 8963次阅读
    STM32的Cortex-M3<b class='flag-5'>中断</b>异常<b class='flag-5'>处理</b>

    STM32关全局中断的方法 STM32中断类型

    STM32中断很强大,STM32中断可以嵌套,任何外设都可以产生中断,其中中断和异常是等价的。 中断执行
    的头像 发表于 07-22 10:52 2.9w次阅读

    51中断系统与vhdl状态机

    51中断系统与vhdl状态机51中断系统与vhdl状态机51单片机中断系统1.为什么要引入中断?51中断系统与vhdl状态机51单片机
    发表于 01-14 14:58 2次下载
    51<b class='flag-5'>中断</b>系统与vhdl状态机

    STM32中断系统的工作流程

    一、前言 在之前的STM32的中断系统理论基础知识之基本原理及NVIC,分别中断的基本原理,中断的管理机制和中断
    的头像 发表于 06-22 09:17 3872次阅读
    STM32<b class='flag-5'>中断</b>系统的工作<b class='flag-5'>流程</b>

    ATFbl2的启动

    bl2_entrypoint。该函数定义在bl2/aarch64/bl2_entrypoint.S文件。该阶段的执行流程如图所示。
    的头像 发表于 11-07 15:59 1733次阅读
    ATF<b class='flag-5'>中</b><b class='flag-5'>bl</b>2的启动

    ATFbl2到bl31的跳转介绍

    数之后,系统将跳转到中断处理函数(smc_handler64)继续执行。该函数定义在bl1/aarch64/bl1_exception.S文件
    的头像 发表于 11-07 16:09 1757次阅读

    ATFbl31的启动

    bl2触发安全监控模式调用后会跳转到bl31执行,bl31最主要的作用是 建立EL3运行态的软件配置 , 在该阶段会完成各种类型的安全
    的头像 发表于 11-07 16:13 2381次阅读
    ATF<b class='flag-5'>中</b><b class='flag-5'>bl31</b>的启动

    ATFbl31函数介绍与使用

    runtime_svc_init函数 该函数主要用来建立安全监控模式调用处理函数的索引表,并执行EL3提供的服务项的初始化操作,获取TEE OS的入口地址并赋值给bl32_init变量,以备启动
    的头像 发表于 11-07 16:23 1329次阅读

    bl31的psci架构介绍

    std_svc_setup会在bl31启动流程中被调用,以用于初始化该服务相关的配置。而std_svc_smc_handler为其smc异常处理函数,当内核通过psci接口调用相关服务时,最终将由该函数执行实际的
    的头像 发表于 12-05 17:33 1941次阅读
    <b class='flag-5'>bl31</b><b class='flag-5'>中</b>的psci架构介绍

    stm32中断怎么处理

    STM32是一款非常强大的微控制器系列,具有丰富的外设和功能。中断是STM32非常重要的部分,能够帮助我们提高系统的响应速度和效率。本文将详细介绍STM32中断处理方法。 一、
    的头像 发表于 01-02 17:35 3761次阅读