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中。
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函数
以上是关于zynq7000 中断系统及在UCOSIII中的中断处理接口的主要内容,如果未能解决你的问题,请参考以下文章
Zynq-7000 FreeRTOS中断:解决RTOS中中断无反应问题
Xilinx Zynq-7000嵌入式系统设计与实现 学习教程