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

 
Iterator模式Zynq7000私有定时器使用摘要
Loading...