一、zynq7000中断处理概述
详见zynq7000的用户指导手册UG585相关章节。
zynq7000的中断系统整体架构如下图所示:
中断源有三种类型的中断:
- 私有外设中断PPI:每个CPU有5个PPI,使用中断ID 27~31.
- 共享外设中断SPI:共60个
- 软件产生中断SGI:每个CPU都可以使用SGI中断自身、其他CPU,或两个CPU,各自16个SGI,使用中断ID 0-15.
GIC集中管理来自PS和PL的中断,包括使能、禁用、掩码、优先级、发送到不同的CPU.zynq的GIC基于ARP GIC架构V1.0
中断控制器架构如下图所示:
二、ucosIII对zynq7000的中断处理接口
见micrum官方提供工程的BSP,主要接口函数在bsp_int.c中。
- BSP_Int_Init:初始化,在用户程序中调用。
- BSP_IntHandler:中断处理函数,被OS_CPU_ExceptHndlr调用.具体的调用流程见下一章。
- BSP_IntVectSet:设置中断向量,调用BSP_IntTargetSet设置目标CPU,调用BSP_IntPrioSet设置中断优先级,中断向量表BSP_IntVectTbl注册回调具体的中断处理函数
- BSP_IntSrcEn/BSP_IntSrcDis:禁用使能某中断
- BSP_SGITrig:触发软件中断
三、中断处理整体流程
BSP中启动代码(asm_vector.s)里定义了异常向量表
.globl Reset_Handler
.globl Vectors
.globl OS_CPU_ARM_ExceptUndefInstrHndlr
.globl OS_CPU_ARM_ExceptSwiHndlr
.globl OS_CPU_ARM_ExceptPrefetchAbortHndlr
.globl OS_CPU_ARM_ExceptDataAbortHndlr
.globl OS_CPU_ARM_ExceptIrqHndlr
.globl OS_CPU_ARM_ExceptFiqHndlr
当有异常发生时,将进入相应的异常处理函数。整个调用流程如下:
OS_CPU_ARM_ExceptIrqHndlr-》OS_CPU_ARM_ExceptHndlr-》OS_CPU_ARM_ExceptHndlr_BreakNothing->OS_CPU_ExceptHndlr-》BSP_IntHandler-》注册的isr函数
原文地址:http://blog.51cto.com/236360/2064717
时间: 2024-10-08 04:36:11