当前位置: 代码迷 >> 综合 >> ZYNQ-GPIO-Interrupt
  详细解决方案

ZYNQ-GPIO-Interrupt

热度:5   发布时间:2024-02-13 07:43:57.0

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讲解:

  1. 先初始化GPIO,参考上一篇文章
  2. Xil_ExceptionInit()开启异常处理初始化;
  3. XScuGic_LookupConfig()查找配置;
  4. Xil_ExceptionRegisterHandler()注册异常回调函数;
  5. XScuGic_Connect()连接到ID和中断触发即将跳转到的函数;
  6. XGpioPs_SetIntrTypePin()设置触发的类型,上升或下降触发;
  7. Xil_ExceptionEnable()异常检测打开;
  8. XScuGic_Enable()中断源,也就是检测该引脚是否有变化;
  9. XGpioPs_IntrEnablePin()允许该引脚中端;

回调函数API

  1. XGpioPs_IntrGetStatusPin();检测该引脚状态,1为触发;
  2. XGpioPs_IntrClearPin()清楚该引脚挂起的中断;
  3. XGpioPs_IntrDisablePin()关闭该引脚中断;
  4. XGpioPs_IntrEnablePin()打开该引脚中断;

Xil_ExceptionRegisterHandler该函数传入的参数查找较为麻烦,也是容易出错的地方,如果程序出错可以先看这部分;

谢谢~

  相关解决方案