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