本学习笔记参考UG585-Zynq-7000-TRM.pdf ch.7:Interrupts。文中有说的不够严谨或者是有错误的地方,欢迎指正!


zynq中的interrupts有很多种,大体上分为三类:private、shared、software interrupts。

1.zynq 7000 有两个Cortex-A9 processor,每个cpu 都有一系列的private peripheral interrupts(PPIs,私有外围中断)。

PPIs包含:global timer、private watchdog timer、private timer 和来自PL部分的FIQ/IRQ(FIQ,是fast interrupt,IRQ是一般性的)。来自PL中的FIQ/IRQ可以作为 PPI#4 和 PPI #1通过GIC,也可以绕过GIC,通过pass-through multiplexer进入CPU。

在mpcore.ICCICR寄存器中可以使能pass-through 模式。

Software generated interrupts(SGIs):可以连接到一个或者两个cpu,是通过向generic interrupt controller(GIC)中的寄存器写内容产生的。

Shared peripheral interrupts(SPIs):该中断来自PS部分各种各样的IO外设,以及PL部分。

2.Generic Interrupt Controller(GIC)

GIC是管理中断的中央元,它将来自PS或者PL部分的中断发送给CPU。其功能:enables\disables\masks\prioritizes 中断源,将这些中断发送给选定的CPU。同时支持security extension。

每个中断都有独一无二的中断ID号,所有的中断都可以配置优先级,以及选定将中断信号给哪个CPU。这些配置是通过控制寄存器来完成的,CPU通过cpu private bus 来access中断控制和状态寄存器(图中右下角所示)。

3.GIC复位是通过向PERI_RST bit写数来完成的,PERI_RST是SLCR 中A9_CPU_RST_CTRL中的一位。这个复位信号同时会复位cpu private timer以及private watchdog timer。

4.接下来详细说一下这三种中断

(1)SGI:每个cpu都可以通过SGI来中断它自己,或者其他cpu,或者中断两个cpu,一共有16个SGI,IRQ ID# 范围是0~15。

(a)那么中断过程是如何触发的?

通过将SGI中断号写入到ICDSGIR中的SGIINTID这4位,再设置好接收中断的cpu就可以产生SGI中断了。写的过程是通过CPU的private bus来完成的。

(b)如何设置中断类型?

所有的SGI的中断类型都是rising edge,都是固定的,不能够修改,因此ICDICFR0(Interrupt configuration register)只能够read-only。

(c)中断发送到哪个CPU呢?

发送到哪个CPU interface由ICDSGIR中的CPUTargetList这8位决定,这里ICDIPTR0至ICDIPTR3都是只读的。

(d)中断完成后,如何清除中断呢?

通过读ICCIAR(Interrupt acknowledge)寄存器,或者向ICDICPR(Clear-pending)中写1来完成。

(2)PPI:PPI是每个CPU的私有中断,上文中提到了PPI包含global timer、private timer、private watchdog timer和来自PL的FIQ和IRQ。每个CPU有5个这样的私有中断。

(a)如何设置中断类型?

所有的PPI的中断类型都是固定的,不能够修改,有rising和active low level两种,因此ICDICFR1(Interrupt configuration register)也只能够read-only。

注意:来自PL的FIQ和IRQ信号进行反转后送入了中断控制器,所以所谓ICDICFR1寄存器显示active low level,他们在PS-PL接口处也是active high,也就是高电平触发中断。

(b)中断发送到哪个CPU呢?

由于PPI是每个CPU的私有中断,所有只有对应的CPU可以响应。

所以ICDIPTR[7:4]是reserved。

(c)中断完成后,如何清除中断呢?

对于高电平触发的,需要有interrupt handler来清除中断。

(3)SPI:SPI中断比较多,中断控制寄存器需要设置优先级和接收中断的CPU。

(a)如何设置中断类型?

除了IRQ #61~#68 和IRQ#84~91 是可以修改的以外,其他中断的触发类型都是固定的,是不可以修改的。

在ICDICFR中对触发类型进行设置,如下图:

(b)中断发送到哪个CPU呢?

(c)中断完成后,如何清除中断呢?

对于高电平触发的中断类型,需要请求源提供machanism用于有interrupt handler来清除中断。

(4)其他:上述说的ICDICFR用来设置触发类型(针对于可以修改触发类型的中断源),ICDIPTR用来设置接收中断的CPU。除了这些寄存器以外,还需要其他的寄存器用来设置其他参数,如优先级的设置需要使用ICDIPR、中断使能ICDICER、中断失能ICDICER、中断安全ICDISR等。

上文中有说的不够严谨或者是有错误的地方,欢迎指正!

zynq中interrupts的学习笔记(一)相关推荐

  1. Python中索引的学习笔记

    1 前言 今天在学习FaceBoxes- 看到一个比较奇怪的代码,"order = scores.argsort()[::-1][:args.top_k]",不太懂这个" ...

  2. 机器人学中的状态估计——学习笔记

    机器人学中的状态估计--学习笔记 离散时间的批量估计问题 1.最大后验概率法(Maximum A Posteriori, MAP) 2.贝叶斯推断(Bayesian inference) 离散时间的迭 ...

  3. 机器人学中的状态估计学习笔记(二)第三章线性高斯系统的状态估计

    机器人学中的状态估计学习笔记(二)第三章线性高斯系统的状态估计 3.1 离散时间的批量估计问题 3.1.1 问题定义 3.1.2 最大后验估计 3.1.3 贝叶斯推断 3.1.4 存在性.唯一性与能观 ...

  4. Java中expecial,RxJava 学习笔记 (一)

    作者: 一字马胡 转载标志 [2017-12-13] 更新日志 日期 更新内容 备注 2017-12-13 RxJava学习笔记系列 系列笔记 (一) 2017-12-15 增加系列笔记(二) 201 ...

  5. JavaSE中Map框架学习笔记

    前言:最近几天都在生病,退烧之后身体虚弱.头疼.在床上躺了几天,什么事情都干不了.接下来这段时间,要好好加快进度才好. 前面用了三篇文章的篇幅学习了Collection框架的相关内容,而Map框架相对 ...

  6. 我的Android进阶之旅------gt;Android中编解码学习笔记

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  7. Oracle中job_type,【学习笔记】Oracle DBMS_SCHEDULER详细介绍与使用案例

    天萃荷净 分享一篇关于Oracle DBMS_SCHEDULER详细介绍与使用案例 1.通过DBMS_SCHEDULER.CREATE_JOB直接创建job SQL> create table ...

  8. SiKi学院 Unity中常用api学习笔记(001-014)

    Api 应用程序编程接口 前言 笔记是看siki学院中<Unity中常用api>的学习笔记 课程地址:  http://www.sikiedu.com/my/course/59 强烈推荐大 ...

  9. SiKi学院 Unity中常用api学习笔记(015-019)

    Api 应用程序编程接口 前言 笔记是看siki学院中<Unity中常用api>的学习笔记 课程地址:  http://www.sikiedu.com/my/course/59 强烈推荐大 ...

最新文章

  1. esxi虚拟化集群_ProxmoxVE 之集群安装(V5.2)
  2. Oracle RAC 客户端连接负载均衡(Load Balance)
  3. random_state的值如何选_同样是防晒衣,单价几十和几百块有什么不同?选防晒衣认准这4点...
  4. 九九乘法表的C语言实现
  5. 图像处理中的卷积与模板
  6. 日志框架实现数据采集分析和报警
  7. 随记 elasticsearch
  8. [转载] set集合python_python基础-set集合
  9. 学生信息表 -通过选择年级和班级得到详细的学生信息名单
  10. android 布局图片缩放,Android中进行图片缩放显示
  11. tiledmap 图块属性_cocos2dx[3.4](25)——瓦片地图TiledMap
  12. Cartoon CG:卡通渲染(开篇)
  13. java里直线绕z轴逆时针旋转_空间直线绕任意轴旋转后的方程
  14. linux dd iso 进度,linux小记:查看dd进度
  15. Windows10搭建opengrok服务器
  16. vi 查看最顶部_vi命令示例大全
  17. 流媒体之老黄谈流媒体服务与视频网站研发
  18. 【案例4-2】饲养员喂养动物
  19. 广工anyview数据结构第四章(2021.12)
  20. office哪个版本最好用、占用资源最少?

热门文章

  1. [Python] 字典 update()函数:在字典中更新 (或加入) 键值对
  2. java生成和识别二维码
  3. _tkinter.TclError: invalid command name “tixComboBox“ 的解决办法
  4. AD19中画MOSFET的常见错误——封装出错
  5. Crackme017
  6. intel 酷睿core系列cpu的类型:U M H HQ MQ
  7. IDEA的Maxcomputer Studio开发
  8. 使用Fraps获取3D程序的FPS
  9. python的安全插件
  10. MySQL GROUP_CONCAT长度限制引发的一场灾难