为了加深对中断的原理的理解,这次实验设计并实现一个有中断的LED控制电路,该电路能够在按钮按下时触发LED灯的闪烁,并且通过GPIO和AXI GPIO的方法去完成代码。
下列是原理部分
1.搭建硬件系统
1.1GPIO
在Interrupt里找到IRQ_F2P这个中断号(中断的原理-CSDN博客),为什么是这个中断号链接有说明。
将GPIO的中断使能打开
因为定义了一个通道需要把这个引脚给个分配(这个引脚给什么没关系,因为用的的GPIO的,用的MIO引脚)
1.2AXI GPIO
这里使用的AXI GPIO需要对通道1、2进行明确的引脚分配(自己分配,分配不一样,后面的代码不一样)
2.官方例程
2.1GPIO
/******************************************************************************
这是一个使用GPIO驱动(XGpioPs)在中断驱动模式下的设计示例。
该示例利用GPIO的中断功能来检测按钮事件,并根据输入设置输出LED。
注意: 这个示例假设硬件设计中有一个Uart设备。 这个示例仅提供对ZynqMp平台上的zcu102和Zynq平台上的zc702的支持。 对于ZynqMP平台,输入引脚是22(zcu102板上的sw19),输出引脚是23(zcu102板上的DS50)。 对于Zynq平台,输入引脚是12(zc702板上的sw14)、14(zc702板上的sw13),输出引脚是10(zc702板上的DS23)。zc702板上的SW15是sw13和sw14的组合。要操作任一输入引脚,保持SW15低电平(两个都应该是00)。
*
******************************************************************************/
/***************************** Include Files包含文件 *********************************/
#include "xparameters.h"
#include "xgpiops.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xplatform_info.h"
#include <xil_printf.h>
/************************** Constant Definitions常量定义 *****************************/
/*
下面的常量对应于在EDK XPS系统中创建的硬件实例的名称。它们在这里定义,以便用户可以轻松地在同一个地方更改所有需要的设备ID。
*/
#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID
#define INTC_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID
#define GPIO_INTERRUPT_ID XPAR_XGPIOPS_0_INTR
/* 下面的常量定义了所使用的GPIO空间 */
#define GPIO_BANK XGPIOPS_BANK0 /* Bank 0 of the GPIO Device */
/**************************** 类型定义 ********************************/
/****************** 宏(内联函数)定义 ********************************/
/************************ 函数原型 *****************************