Zynq7000软件中断SGI使用摘要
type
status
date
slug
summary
tags
category
icon
password
comment_flag
SLUGS
参考文章
使用软件中断的基本流程如下:
- 1.初始化GIC中断控制器
- 2.设置中断异常
- 3.绑定中断服务函数
- 4.设置中断优先级和触发方式
- 5.绑定触发中断的CPU
- 6.允许中断
- 7.触发软件中断
相关API
1.初始化GIC中断控制器;
通过设备id查找设备的配置
DeviceID
,设备ID的唯一标识符。
返回XScuGic_Config *
型指针,指向指定设备的配置信息结构体中。对指定的中断控制器实例进行初始化。
InstancePtr
是指向XScuGic
实例的指针。
ConfigPtr
是指向所关联的特定设备的配置表的指针。
EffectiveAddr
是所关联设备的有效地址。2.设置中断异常
异常处理,在Coretex-A9中不做任何事,因为异常处理已被静态初始化。
为特定的异常注册一个handler,当处理器发生特定异常后调用对应handler。
Exception_id
异常源的id。
Handler
是异常处理函数。
Data
是异常发生时,传给对应handler的参数。允许中断的异常处理
3.绑定中断服务函数
将指定中断服务函数绑定到指定中断号上。
InstancePtr
是指向XScuGic
实例的指针。
Int_Id
是中断源的中断号。
Handler
是中断处理函数。
CallBackRef
是回调的一个引用,会传递给中断服务函数作为参数,一般是所关联的设备的实例指针,通过类型转换在中断服务函数获取设备实例。4.设置中断优先级和触发方式
为指定中断源设定中断优先级和触发类型。
InstancePtr
是指向XScuGic
实例的指针。
Int_Id
是中断源的中断号。
Priority
是要将中断源更新后的优先级,0为最高,0xF8为最低。有32个等级,以8为步长,0,8,16,...,248。
Trigger
是要将中断源更新后的触发类型。5.绑定触发中断的CPU
将中断源和目标CPU绑定
InstancePtr
是指向XScuGic
实例的指针。
Cpu_Id
目标CPU的id。
Int_Id
是中断源的中断号。6.允许中断
中断使能,在该函数调用后,可使对应id的pending的中断能够发生。
InstancePtr
是指向XScuGic
实例的指针。
Int_Id
是中断源的中断号。7.触发软件中断
通过软件模拟中断的方式在中断控制器中触发中断。
InstancePtr
是指向XScuGic
实例的指针。
Int_Id
是软件模拟的中断源的中断号。
Cpu_Id
将中断送往到的目标CPU的id。实例
搬运文章3的使用实例:
该例子中,cpu0和cpu1都注册两个软件中断,将1号软件中断注册给cpu1,表示cpu0发送中断给cpu1,将2号软件中断注册给cpu0,表示cpu1发送中断给cpu0;然后在程序运行时,cpu0触发1号软件中断,此时cpu1正在运行主程序被该中断中断,进入中断服务函数,其处理完中断后触发2号软件中断,此时该中断会中断cpu0,进入中断服务函数,cpu0处理完中断后回到主函数,再触发1号软件中断,往复运行。
代码略作修改后如下。
P0_main.c
:
P1_main.c
Loading...