zynq7000 中断系统及在UCOSIII中的中断处理接口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zynq7000 中断系统及在UCOSIII中的中断处理接口相关的知识,希望对你有一定的参考价值。


一、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中。

  1.  BSP_Int_Init:初始化,在用户程序中调用。

  2. BSP_IntHandler:中断处理函数,被OS_CPU_ExceptHndlr调用.具体的调用流程见下一章。

  3. BSP_IntVectSet:设置中断向量,调用BSP_IntTargetSet设置目标CPU,调用BSP_IntPrioset设置中断优先级,中断向量表BSP_IntVectTbl注册回调具体的中断处理函数

  4. BSP_IntSrcEn/BSP_IntSrcDis:禁用使能某中断

  5. 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函数


以上是关于zynq7000 中断系统及在UCOSIII中的中断处理接口的主要内容,如果未能解决你的问题,请参考以下文章

Zynq-7000 FreeRTOS中断:解决RTOS中中断无反应问题

如何评估zynq7000的功耗

Zynq7000硬件开发之电源供电系统(PDN)设计

Xilinx Zynq-7000嵌入式系统设计与实现 学习教程

Xilinx Zynq-7000嵌入式系统设计与实现 学习教程

SylixOS下基于Zynq-7000加载FPGA程序