1. 程式人生 > >zynq7000 中斷系統及在UCOSIII中的中斷處理接口

zynq7000 中斷系統及在UCOSIII中的中斷處理接口

oss efi 1.5 lis 用戶 targe 流程 int eight


一、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中的中斷處理接口