#include "stdio.h"
#include "xparameters.h"
#include "xgpiops.h"
#include "xscugic.h"
#include "sleep.h"

//ps_led
#define MIO15_LED 15

#define MIO47_KEY 47

#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID

//GPIO的中断号 52
#define GPIO_INTERRUPT_ID XPAR_XGPIOPS_0_INTR
#define INTC_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID

XGpioPs_Config *ConfigPtr;
XGpioPs Gpio;
XScuGic Intc;
XScuGic_Config *IntcConfig;

void IntrHandler();

void SetupInterruptSystem(XScuGic *GicInstancePtr, XGpioPs *Gpio,u16 GpioIntrId);

u32 key_press;

int main(){
u32 led_value = 0;
printf("GPIO interupt TEST !");

//根据器件id,查找器件的配置信息,
ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
//初始化GPIO驱动
XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);

//把gpio的方向设置为输出(0:输入,1:输出)
XGpioPs_SetDirectionPin(&Gpio, MIO15_LED, 1);

//设置输出使能(0:关闭/1:打开)
XGpioPs_SetOutputEnablePin(&Gpio, MIO15_LED, 1);

XGpioPs_SetDirectionPin(&Gpio, MIO47_KEY, 0x0);

SetupInterruptSystem(&Intc, &Gpio, GPIO_INTERRUPT_ID);

while(1){
if(key_press){
led_value = ~led_value;
key_press = 0;
XGpioPs_WritePin(&Gpio, MIO15_LED,led_value);
XGpioPs_IntrClearPin(&Gpio, MIO47_KEY);
usleep(200000);
XGpioPs_IntrEnablePin(&Gpio, MIO47_KEY);
}
}
return 0;
}

void SetupInterruptSystem(XScuGic *GicInstancePtr, XGpioPs *Gpio,u16 GpioIntrId)
{

/*
* Initialize the interrupt controller driver so that it is ready to
* use.
*/

IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
XScuGic_CfgInitialize(GicInstancePtr, IntcConfig,IntcConfig->CpuBaseAddress);

/*
* Connect the interrupt controller interrupt handler to the hardware
* interrupt handling logic in the processor.
*/
//初始化异常
Xil_ExceptionInit();
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,GicInstancePtr);
/* 使能处理器中断 */
Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ);

//关联中断处理函数
XScuGic_Connect(GicInstancePtr, GpioIntrId,(Xil_ExceptionHandler)IntrHandler,(void *)Gpio);

/*设置中断类型 */
XGpioPs_SetIntrTypePin(Gpio, MIO47_KEY, XGPIOPS_IRQ_TYPE_EDGE_FALLING);

/* 打开中断使能 */
XGpioPs_IntrEnablePin(Gpio, MIO47_KEY);

/*为GPIO器件使能中断 */
XScuGic_Enable(GicInstancePtr, GpioIntrId);
}

void IntrHandler(){
printf("interupt detected!\n\r");
key_press = 1;
XGpioPs_IntrDisablePin(&Gpio, MIO47_KEY);
}

zynq 中断的更多相关文章

  1. ZYNQ笔记(4):PL触发中断

    一.ZYNQ中断框图 PL到PS部分的中断经过ICD控制器分发器后同时进入CPU1 和CPU0.从下面的表格中可以看到中断向量的具体值.PL到PS部分一共有20个中断可以使用.其中4个是快速中断.剩余 ...

  2. ZYNQ SGI、PPI、SPI三种中断的实例(含代码)

    ZYNQ中断分为3类: SGI(Software Generated Interrupts)软件中断 PPI(Private Peripheral Interrupts)私有外设中断 SPI(Shar ...

  3. S02_CH07_ ZYNQ PL中断请求

    S02_CH07_ ZYNQ PL中断请求 7.1 ZYNQ 中断介绍 7.1.1 ZYNQ中断框图 可以看到本例子中PL到PS部分的中断经过ICD控制器分发器后同时进入CPU1 和CPU0.从下面的 ...

  4. 第十三章 ZYNQ-MIZ702 PL中断请求

    本篇文章主要介绍外设(PL)产生的中断请求,在PS端进行处理. 在PL端通过按键产生中断,PS接受到之后点亮相应的LED. 本文所使用的开发板是Miz702 PC 开发环境版本:Vivado 2015 ...

  5. 第十二章 ZYNQ-MIZ701 PL中断请求

      本篇文章主要介绍外设(PL)产生的中断请求,在PS端进行处理. 在PL端通过按键产生中断,PS接受到之后点亮相应的LED. 本文所使用的开发板是Miz701 PC 开发环境版本:Vivado 20 ...

  6. zynq linux驱动之PL-PS中断【转】

    转自:https://blog.csdn.net/h244259402/article/details/83993524 PC:Windows 10 虚拟机:ubuntu 16.04 vivado:2 ...

  7. 关于IP核中中断信号的使用---以zynq系统为例

    关于IP核中中断信号的使用---以zynq系统为例 1.使能设备的中断输出信号 2.使能处理器的中断接收信号 3.连接IP核到处理器之间的中断 此处只是硬件的搭建,软件系统的编写需要进一步研究. 搭建 ...

  8. 79.ZYNQ内部私有定时器中断

    上篇文章实现了了PS接受来自PL的中断,本片文章将在ZYNQ的纯PS里实现私有定时器中断.每个一秒中断一次,在中断函数里计数加1,通过串口打印输出. *本文所使用的开发板是Miz702(兼容zedbo ...

  9. 基于ZYNQ 的UART中断实验之串口写数据到DDR3中

    1.参考 UG585 网络笔记 2.理论知识 参见上一次实验:基于ZYNQ 的UART中断实验 3.实验目的 练习使用UART的中断实验,并将接收到的数据写入到DDR3中. 4.实验过程 建立工程,设 ...

  10. ZYNQ笔记(6):普通自定义IP封装实现PL精准定时中断

    软件的定时中断很难控制精准触发沿的位置,可以通过 PL-PS 的中断完成精准的定时中断.PL 的中断通过 Verilog 代码产生,这样紧密结合 PS-PL 的处理,发挥各自的优势. 一.PL 侧定时 ...

随机推荐

  1. 剑指 Offer II Trie前缀树

    初始化 数组初始化在class外的话 要memset 在主函数里面memset 在class内不用 062. 实现前缀树 class Trie { public: /** Initialize you ...

  2. Docker CLI docker buildx bake 常用命令

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化.Docker是内核 ...

  3. go 处理json

    在云原生的相关技术中, 调用 kafka 和 es等中间件,返回的结果大多是 json 格式,因此我们需要频繁的对 json 进行操作. 在go这种强类型的语言中,不同于 python 和 nodej ...

  4. echarts 之 source and clone函数问题hasOwnProperty is not defined

    图表渲染时报错如下: echarts 实例的 setOption 方法用来加载/更新图表数据,setOption 方法内部首先使用了 zrender 的 clone 函数对 options 进行了拷贝 ...

  5. zuoye(借鉴)

  6. GrADS CTL文件 VARS字段

    GrADS可以读取GRIB格式的再分析数据,如ERA5,CFSR,CRA40等.对于这些数据,借助grib2ctl/g2ctl程序,生成描述文件(*.ctl文件),再通过gribmap命令,生成索引文 ...

  7. linux 下安装部署redis

    安装: 1.获取redis资源   wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压   tar xzvf redis-4. ...

  8. 微信小程序级联选择器省市区选择器部分安卓手机兼容的问题:无法只选省份,必须选择到市

    代码片段: 1 <view class="item"> 2 <view class="i-name"><text class=&q ...

  9. SQL Server【提高】碎片

    碎片 当对索引所在的基础数据表进行增删改时,若存储的数据进行了不适当的跨页(SQL Server中存储的最小单位是页,页是不可再分的),就会导致索引碎片的产生. 外部碎片 插入的数据使页与页之间造成断 ...

  10. springboot集成es7(基于high level client)

    环境: ES: 7.12.0 1.springboot工程引入es相关jar <dependency> <groupId>org.elasticsearch</group ...