zynq 中断
#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 中断的更多相关文章
- ZYNQ笔记(4):PL触发中断
一.ZYNQ中断框图 PL到PS部分的中断经过ICD控制器分发器后同时进入CPU1 和CPU0.从下面的表格中可以看到中断向量的具体值.PL到PS部分一共有20个中断可以使用.其中4个是快速中断.剩余 ...
- ZYNQ SGI、PPI、SPI三种中断的实例(含代码)
ZYNQ中断分为3类: SGI(Software Generated Interrupts)软件中断 PPI(Private Peripheral Interrupts)私有外设中断 SPI(Shar ...
- S02_CH07_ ZYNQ PL中断请求
S02_CH07_ ZYNQ PL中断请求 7.1 ZYNQ 中断介绍 7.1.1 ZYNQ中断框图 可以看到本例子中PL到PS部分的中断经过ICD控制器分发器后同时进入CPU1 和CPU0.从下面的 ...
- 第十三章 ZYNQ-MIZ702 PL中断请求
本篇文章主要介绍外设(PL)产生的中断请求,在PS端进行处理. 在PL端通过按键产生中断,PS接受到之后点亮相应的LED. 本文所使用的开发板是Miz702 PC 开发环境版本:Vivado 2015 ...
- 第十二章 ZYNQ-MIZ701 PL中断请求
本篇文章主要介绍外设(PL)产生的中断请求,在PS端进行处理. 在PL端通过按键产生中断,PS接受到之后点亮相应的LED. 本文所使用的开发板是Miz701 PC 开发环境版本:Vivado 20 ...
- zynq linux驱动之PL-PS中断【转】
转自:https://blog.csdn.net/h244259402/article/details/83993524 PC:Windows 10 虚拟机:ubuntu 16.04 vivado:2 ...
- 关于IP核中中断信号的使用---以zynq系统为例
关于IP核中中断信号的使用---以zynq系统为例 1.使能设备的中断输出信号 2.使能处理器的中断接收信号 3.连接IP核到处理器之间的中断 此处只是硬件的搭建,软件系统的编写需要进一步研究. 搭建 ...
- 79.ZYNQ内部私有定时器中断
上篇文章实现了了PS接受来自PL的中断,本片文章将在ZYNQ的纯PS里实现私有定时器中断.每个一秒中断一次,在中断函数里计数加1,通过串口打印输出. *本文所使用的开发板是Miz702(兼容zedbo ...
- 基于ZYNQ 的UART中断实验之串口写数据到DDR3中
1.参考 UG585 网络笔记 2.理论知识 参见上一次实验:基于ZYNQ 的UART中断实验 3.实验目的 练习使用UART的中断实验,并将接收到的数据写入到DDR3中. 4.实验过程 建立工程,设 ...
- ZYNQ笔记(6):普通自定义IP封装实现PL精准定时中断
软件的定时中断很难控制精准触发沿的位置,可以通过 PL-PS 的中断完成精准的定时中断.PL 的中断通过 Verilog 代码产生,这样紧密结合 PS-PL 的处理,发挥各自的优势. 一.PL 侧定时 ...
随机推荐
- 剑指 Offer II Trie前缀树
初始化 数组初始化在class外的话 要memset 在主函数里面memset 在class内不用 062. 实现前缀树 class Trie { public: /** Initialize you ...
- Docker CLI docker buildx bake 常用命令
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化.Docker是内核 ...
- go 处理json
在云原生的相关技术中, 调用 kafka 和 es等中间件,返回的结果大多是 json 格式,因此我们需要频繁的对 json 进行操作. 在go这种强类型的语言中,不同于 python 和 nodej ...
- echarts 之 source and clone函数问题hasOwnProperty is not defined
图表渲染时报错如下: echarts 实例的 setOption 方法用来加载/更新图表数据,setOption 方法内部首先使用了 zrender 的 clone 函数对 options 进行了拷贝 ...
- zuoye(借鉴)
- GrADS CTL文件 VARS字段
GrADS可以读取GRIB格式的再分析数据,如ERA5,CFSR,CRA40等.对于这些数据,借助grib2ctl/g2ctl程序,生成描述文件(*.ctl文件),再通过gribmap命令,生成索引文 ...
- linux 下安装部署redis
安装: 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 tar xzvf redis-4. ...
- 微信小程序级联选择器省市区选择器部分安卓手机兼容的问题:无法只选省份,必须选择到市
代码片段: 1 <view class="item"> 2 <view class="i-name"><text class=&q ...
- SQL Server【提高】碎片
碎片 当对索引所在的基础数据表进行增删改时,若存储的数据进行了不适当的跨页(SQL Server中存储的最小单位是页,页是不可再分的),就会导致索引碎片的产生. 外部碎片 插入的数据使页与页之间造成断 ...
- springboot集成es7(基于high level client)
环境: ES: 7.12.0 1.springboot工程引入es相关jar <dependency> <groupId>org.elasticsearch</group ...