SOC 子模块---中断控制器

中断控制器对soc 中的各个外设进行中断管理,进行优先权排队,并送出IQR信号给CPU;

中断控制器在整个系统中的结构:

IRQ<n>来源于不同的中断源,比如:I2C,SPI等,INTC收集这些中断,进行优先权排队,最后会发送到cpu.

硬件互联结构

对于设计而言:中断源模块三组中断寄存器是必须存在的:中断使能,中断状态,中断屏蔽;

软件层面实现过程

当cpu收到中断,会进入软件服务程序,此时中断产生,在中断服务程序中会确认中断类型,清除中断,屏蔽其他中断,并进入中断处理程序,处理完毕之后取消中断mask;

如果涉及到中断嵌套,会优先处理高级中断,保护低级中断现场,待高级中断处理完成后,继续执行低级中断。

 中断控制器在整个soc中的位置

INTC 一般挂载到apb总线上,可以收集来自I2C, SPI,Watchdog等中断,后通过仲裁会将中断信号给到CPU。

中断控制器信号列表

 

  1. APB标准接口信号
  2. 外设中断源信号(num 自定义)
  3. 输出的cpu 的irq (普通中断)/fiq(快速中断)

中断控制器基本框架 

 

apb_interface:

是INTC与总线的接口模块,同时也是INTC的控制模块,里边包含了INTC所有的寄存器信息;

int_gen:

接收中断源信息,确认中断源(irq/fiq),进行其他中断屏蔽,软件中断;

Priority_logic:

用于软件中断优先级屏蔽,对未屏蔽的中断进行优先权选择,选择最高优先级中断,产生中断信号;

普通中断寄存器介绍

IRSR:

普通中断状态寄存器,当中断源无效时,置为0;

IMSR:

中断屏蔽状态寄存器,对应的中断源,使能位无效,或屏蔽位有效时,置为1;

IFR:

普通中断软件强制中断寄存器,是否软件强制该位对应的中断源发出中断信号;

IFSR:

最终中断状态寄存器,只有当优先级大于IPLR寄存器所设置的中断源时才能在此寄存器相应位置1;

IPLR:

中断优先级寄存器,设置普通中断的优先级门槛,只有优先级大于此设置值的中断,才会通过优先级过滤逻辑将该中断送到cpu.

IER:

中断允许寄存器,是否允许对应中断源的IRQ信号;

ISR:

中断状态寄存器,当对应中断源或使能位(IER)无效时,该位置为0;

IMR:

中断屏蔽寄存器,是否屏蔽对应的IRQ中断信号;

快速中断寄存器介绍

快速中断寄存器和普通中断寄存器类似;

中断源

可能的内部中断:

  1. RTC:  real time counter,可以产生秒中断,分中断,定时中断,watchdog 中断;
  2. UART:数据发送结束中断,数据接受有效中断;
  3. Timer: 定时/计时中断;
  4. CMAC:DMA错误,DMA传输完成中断;
  5. LCDC:错误响应,帧结束,帧起始;
  6. SPI:FIFO空满,发送FIFO 下溢,接受FIFO上溢;

可能的外部中断:

  1. 比内部中断复杂,不可控
  2. 通常和GPIO口复用
  3. 中断源触发方式(上升沿,下降沿,高电平,低电平)
  4. 外部中断信号特殊处理(去毛刺,寄存,同步到总线时钟)
  5. 外部中断需要清除

外部中断使用过程

  1. 清除外部中断,在使用中断前,必须先清除之前的中断;
  2. 配置GPIO控制寄存器, a.配置管脚方向为输入b.配置中断触发类型c.配置管脚模式为中断模式)
  3. 配置中断寄存器,设置INTC 屏蔽寄存器的相应位的屏蔽中断,设置INTC相应位以允许该中断源产生中断

ARM 中断向量表

 

 

相关推荐

  1. 安全运营中心SOC)的核心功能

    2024-03-26 11:58:02       31 阅读
  2. git 模块

    2024-03-26 11:58:02       26 阅读
  3. git模块

    2024-03-26 11:58:02       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 11:58:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 11:58:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 11:58:02       82 阅读
  4. Python语言-面向对象

    2024-03-26 11:58:02       91 阅读

热门阅读

  1. sqlite3的安装

    2024-03-26 11:58:02       44 阅读
  2. mac m1安装和使用nvm的问题

    2024-03-26 11:58:02       43 阅读
  3. MYSql通过FULLTEXT实现全文检索

    2024-03-26 11:58:02       38 阅读
  4. 本地远程访问Linux服务器上的jupyter notebook

    2024-03-26 11:58:02       42 阅读
  5. 大模型的模型参数为什么这么多

    2024-03-26 11:58:02       40 阅读
  6. C++/C# 数据类型结构间

    2024-03-26 11:58:02       44 阅读
  7. swift学习小结

    2024-03-26 11:58:02       42 阅读
  8. 嵌入式学习-ARM-IIC实验

    2024-03-26 11:58:02       38 阅读
  9. Dockerfile将jar部署成docker容器

    2024-03-26 11:58:02       38 阅读
  10. 对象数组去重通用方法

    2024-03-26 11:58:02       38 阅读
  11. vue的生命周期

    2024-03-26 11:58:02       38 阅读
  12. 004 包装类

    2024-03-26 11:58:02       40 阅读
  13. Vue 3.0 中一些主要的生命周期钩子

    2024-03-26 11:58:02       42 阅读
  14. instanceof的原理是什么?手写instanceof方法

    2024-03-26 11:58:02       38 阅读