Interrupt中断
概述:
1. Zynq的中断类型有:
软件中断(Software Generated Interrupt, SGI,中断号0-15)(16–26 reserved)
私有外设中断(Private Peripheral Interrupt, PPI,中断号27-31),
共享外设中断(Shared Peripheral Interrupt, SPI,中断号32-95).
2. 私有外设中断(PPI):每个CPU都有一组PPI,包括全局定时器、私有看门狗定时器、私有定时器和来自PL的FIQ/IRQ.
3. 软件中断(SGI)被路由到一个或者两个CPU上,通过写ICDSGIR寄存器产生SGI.
4. 共享外设中断(SPI)由PS和PL上的各种I/O控制器和存储器控制器产生,这些中断信号被路由的CPU.
5. 通用中断控制器(GIC)是核心资源,用于集中管理从PS和PL产生的中断信号的资源集合。控制器可以使能、关使能、屏蔽中断源和改变中断源的优先级,并且会将中断送到对应的CPU中,CPU通过私有总线访问这些寄存器。
6. 中断控制器(ICC,Interrupt Controller CPU)和中断控制器分配器(ICD, Interrupt Controller Distributor)是GIC寄存器子集。
7. (外部)中断请求(IRQ)、快速中断请求(FIQ)
中断原理
当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理处执行。当异常中断处理程序执行完成后,程序返回到发生中断指令的下一条指令处继续执行。在进入异常中断处理程序时,要保存被中断程序的执行线程。从中断处理程序退出时要恢复被中断程序的执行现场。
中断寄存器概述
1. 中断分配器(ICD寄存器):
1) ICDDCR: (0xF8F01000) ICD分配控制寄存器,控制开启或者关闭中断配置。
2) ICDICFR: ICD配置寄存器。配置中断触发模式(高低电平),共6个寄存器,分别是ICDICFR 0-ICDICFR5(0xF8F01C00-0xF8F01C14),每个寄存器32位,占4个字节,每个寄存器的位意义不一样,每2位代表一个中断,32位x6/2=96,正好包括所有中断,
3) ICDIPR:(0xF8F01400-0xF8F0145C)ICD中断优先级寄存器,共24个寄存器,ICDIPR 0- ICDIPR 23,每个寄存器32位,占4个字节,每8位代表一个中断,32位x24/8=96,正好包括所有中断。
4) ICDIPTR: (0xF8F01800-0xF8F0185C)ICD CPU接口选择寄存器,配置CPU接口选择(cpu0/cpu1),包括24个寄存器,ICDIPTR 0- ICDIPTR 23,每个寄存器32位,占4个字节,每8位代表一个中断,32位x24/8=96,正好包括所有中断。
**5) ICDICER: 中断不使能寄存器,**3个寄存器,ICDICER 0- ICDICER 2(0xF8F01180-0xF8F01888),每个寄存器32位,占4个字节,每位代表一个中断,32位x3=96,正好包括所有中断。写1表示不使能(屏蔽)。
**6) ICDISER: 中断使能寄存器,**3个寄存器,ICDISER 0- ICDISER 2(0xF8F01100-0xF8F01108),每个寄存器32位,占4个字节,每位代表一个中断,32位x3=96,正好包括所有中断。写1表示使能。