ZYNQ-GPIO-Interrupt
一.ZYNQ中断介绍
中断是一种当满足要求的突发事件时通知CPU处理的信号,中断可以由硬件或软件,内部或外部产生,对于软件而言,中断是一种异步事件,轮询所产生的中断是同步事件,ZYNQ中断共有三种分别为私有中断,共享中断和软件中断
中断系统框图:
每个中断源都有独立的ID,例如这次用到的是GPIO中断IRQ_ID则是52所有的中断请求,无论是私有中断,共享中断,软件中断都分配了一个唯一的ID,该ID用来中断控制器的仲裁,如果有两个优先级相同中断同时到达,那么具有最低中断ID的会优先执行
二.硬件搭建
硬件设计和上一篇文章一样,没有任何改变
参考:https://blog.csdn.net/jack_lu_0321/article/details/108125923
三.软件开发
四.总结
产生中断后首先要做的是清除当前引脚的状态,Disable当前引脚防止多次触发,运行到程序末尾要Enable当前引脚便于下次触发,中断初始化各个函数所传入的参数可以参考以下代码,亲测有效
中断初始化步骤及API讲解:
- 先初始化GPIO,参考上一篇文章
- Xil_ExceptionInit()开启异常处理初始化;
- XScuGic_LookupConfig()查找配置;
- Xil_ExceptionRegisterHandler()注册异常回调函数;
- XScuGic_Connect()连接到ID和中断触发即将跳转到的函数;
- XGpioPs_SetIntrTypePin()设置触发的类型,上升或下降触发;
- Xil_ExceptionEnable()异常检测打开;
- XScuGic_Enable()中断源,也就是检测该引脚是否有变化;
- XGpioPs_IntrEnablePin()允许该引脚中端;
回调函数API
- XGpioPs_IntrGetStatusPin();检测该引脚状态,1为触发;
- XGpioPs_IntrClearPin()清楚该引脚挂起的中断;
- XGpioPs_IntrDisablePin()关闭该引脚中断;
- XGpioPs_IntrEnablePin()打开该引脚中断;
Xil_ExceptionRegisterHandler该函数传入的参数查找较为麻烦,也是容易出错的地方,如果程序出错可以先看这部分;
谢谢~