ZYNQ随笔——PL端按键中断之裸机设计

1. ZYNQ中断简述
ZYNQ中断类型:普通中断请求(IRQ, Interrupt Request)和快速中断请求(FIQ, Fast Interrupt Request)。
ZYNQ中断源:软件中断(SGI, Software Generated Interrupt)、CPU私有设备中断(PPI, Private Peripheral Interrupt)和共享设备中断(SPI, Shared Peripheral Interrupt)。而PL端的按键中断属于共享设备中断。

2. 硬件平台搭建
在Block Design里添加ZYNQ7 Processing System和AXI_GPIO模块,双击AXI_GPIO设置为输入,且允许中断,驱动外部IO器件(如KEY)。

双击ZYNQ,使能IRQ_F2P,如下图所示。

搭建好的系统结构如下图所示,橘×××的连线表示中断连接:

2. 软件SDK设计
SDK软件设计可以参考官方设计文档,主要API函数有,

  • int XGpio_Initialize(XGpio * InstancePtr,u16 DeviceId)
  • void XGpio_SetDataDirection(XGpio * InstancePtr,unsigned Channel,u32 DirectionMask)
  • XScuGic_Config *XScuGic_LookupConfig(u16 DeviceId)
  • s32 XScuGic_CfgInitialize(XScuGic InstancePtr,XScuGic_Config ConfigPtr,u32 EffectiveAddr)
  • void Xil_ExceptionRegisterHandler(u32 Exception_id, Xil_ExceptionHandler Handler,void *Data)
  • Xil_ExceptionEnable()
  • s32 XScuGic_Connect(XScuGic InstancePtr, u32 Int_Id,Xil_InterruptHandler Handler, void CallBackRef)
  • void XGpio_InterruptEnable(XGpio *InstancePtr, u32 Mask)
  • void XGpio_InterruptGlobalEnable(XGpio *InstancePtr)
  • void XScuGic_Enable(XScuGic *InstancePtr, u32 Int_Id)
    具体代码如下:
    
    XGpio KEYInst;
    XScuGic INTCInst;

int main(void)
{
// initial KEY
int status;
status = XGpio_Initialize(&KEYInst, KEY_DEVICE_ID);
if(status != XST_SUCCESS)
return XST_FAILURE;

// set KEY IO direction as in
XGpio_SetDataDirection(&KEYInst, 1, 0xFF);

// initial interrupt controller
status = IntcInitFunction(INTC_DEVICE_ID, &KEYInst);
if(status != XST_SUCCESS)
    return XST_FAILURE;

while(1);

return 0;

}

//----------------------------------------------------------------------------
// This is the interrupt handler routine for the GPIO for this example
//----------------------------------------------------------------------------
void GpioHandler(void CallbackRef)
{
XGpio
GpioPtr = (XGpio *)CallbackRef;

/* Clear the Interrupt */
XGpio_InterruptClear(GpioPtr, GlobalIntrMask);

}

//----------------------------------------------------------------------------
// Interrupt controller initial function
//----------------------------------------------------------------------------
static int IntcInitFunction(u16 DeviceId, XGpio GpioInstancePtr)
{
XScuGic_Config
IntcConfig;
int status;

// Interrupt controller initialization
IntcConfig = XScuGic_LookupConfig(DeviceId);
status = XScuGic_CfgInitialize(&INTCInst, IntcConfig, IntcConfig->CpuBaseAddress);
if(status != XST_SUCCESS)
    return XST_FAILURE;

// Call interrupt setup function
Xil_ExceptionInit();

Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
        (Xil_ExceptionHandler)XScuGic_InterruptHandler, XScuGicInstancePtr);

Xil_ExceptionEnable();

// Register GPIO interrupt handler
status = XScuGic_Connect(&INTCInst, INTC_GPIO_INTERRUPT_ID,
        (Xil_ExceptionHandler)GpioHandler, (void*)GpioInstancePtr);
if(status != XST_SUCCESS)
    return XST_FAILURE;

// Enable GPIO interrupts
XGpio_InterruptEnable(GpioInstancePtr, 1);
XGpio_InterruptGlobalEnable(GpioInstancePtr);

// Enable GPIO interrupts in the controller
XScuGic_Enable(&INTCInst, INTC_GPIO_INTERRUPT_ID);

return XST_SUCCESS;

}


**3. 编译运行**
下载FPGA代码,以Hardware运行软件

原文地址:https://blog.51cto.com/shugenyin/2429397

时间: 2024-07-28 20:47:16

ZYNQ随笔——PL端按键中断之裸机设计的相关文章

77.PS接收来自PL的按键中断

本篇文章主要介绍外设(PL)产生的中断请求,在PS端进行处理. 在PL端通过按键产生中断,PS接受到之后点亮相应的LED. 本文所使用的开发板是zedboardPC 开发环境版本:Vivado 2015.4 Xilinx SDK 2015.4 搭建硬件工程 建好工程后,添加ZYNQ IP 双击 ZYNQ,打开Re-customize IP对话框,使能IRQ_P2P 使能UART1 点击Run Connection Automation,按照如图所示配置,点击OK 添加一个GPIO IP,按照如图

zedboard如何从PL端控制DDR读写(五)

有了前面的一堆铺垫.现在终于开始正式准备读写DDR了,开发环境:VIVADO2014.2 + SDK. 一.首先要想在PL端通过AXI去控制DDR,我们必须要有一个AXI master,由于是测试,就不自己写了,直接用package IP生成,方法如下: 1.选择package IP工具 2.创建新的AXI外设 3.接口类型选择Full,模式选择master,如果你不关心里面的详细实现过程,那么直接finish就好了.(后面我们会继续分析里面的过程) 二.创建好了IP,自然要加入到IP库里,如图

nios II--实验4——按键中断硬件部分

按键中断 硬件开发 新建原理图 1.打开Quartus II 11.0,新建一个工程,File -> New Project Wizard-,忽略Introduction,之间单击?Next>?进入下一步.分别设置工程工作目录.工程名称.这里需要注意的是工程工作目录中请使用英文,不要含有空格等,否则在后面使用Nios II IDE的时候会出现问题.设置好后如图1所示.然后进行下一步.这里工程命名为lab3_bnt 2.添加已经存在的文件,这里没有需要添加的文件,直接单击?Next>?进入

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 中级教程-OSAL操作系统(OSAL系统解基本套路) 中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~ 中级教程-OSAL操作系统(ADC-光敏电阻) OSAL操作系统-实验16 串口波特率扩展 OSAL操作系统-实验1

STM32学习之路-按键中断测试(外部中断)

终于有时间再来学习STM32了~ 这几天都在忙着该死的考试.直接进入正题 开发板:奋斗V5 这个按键中断测试的要求是:按键2(K2)按下,LED2(V7)亮, 再一次按下就灭,循环.. 好,先看看按键和LED的原理图 好吧~ 虽然图截得不是很好看,但是能看到K2接的是PC2, LED2接的是PD6 ok,剩下的就是配置工作了.. 先来理一理思路: (1)初始化系统时钟 (2)初始化外部时钟(你所用到的东西) (3)配置LED (4)配置中断优先级 (5)配置外部中断线 (6)中断处理函数 恩,差

6.6410和210的按键中断编程

6.6410和210的按键中断编程 首先是打开6410底板原理图: 可以看到OK6410有六个按键: 可以看到OK6410的六个按键对应的引脚是KEYINT1.KEYINT2.KEYINT3.KEYINT4.KEYINT5和KEYINT6.接着在核心板的原理图里搜索这个词: 可以看到按键中断与GPN系列寄存器的引脚是互用的,接着就是在芯片手册里查看有关GPN系列寄存器的信息,重点是关注GPN控制寄存器:GPNCON: 这里我们使用到的按键对应的中断,需要配置成中断的方式,对应的GPN位设置为10

ARM实验5 —— 按键中断实验

key_int按键中断实验 实验内容: 通过开发板上的按键中断控制led灯并打印信息. 通过简单事例说明猎户座4412处理器的GIC中断处理的应用,设置key2按键连接的引脚为中断模式,当识别按键被按下时进入相应的中断处理函数 实验目的: 熟悉开发环境的使用 掌握猎户座4412处理器的中断过程及编程. 实验平台: fs4412开发板,eclipse,secureCRT. 实验步骤: 1.查看key2在开发板的位置: 2.查看UART_RING在核心板的位置: 3.查看GPX1在芯片手册的位置:

ZYNQ随笔——简述

1. 硬核处理器与软核处理器在芯片内的硅片上通过划分一定的区域来实现处理器功能称为硬核处理器.在一些对处理器性能要求不高的场合,通过使用FPGA内部资源搭建一个处理器功能称为软核处理器.如果采用硬核处理器,整个芯片的成本会较高,且灵活性相对较差,但性能较高.如果采用软核处理器,成本较低,同时灵活性较高,但性能较低.2. Zynq-7000 SOC功能结构Zynq-7000由PS(Processing System)和PL(Programmable Logic)组成,内部结构图如下图所示. 应用处

高端智能计算硬件平台开发设计 ——北京太速科技有限公司

北京太速科技有限公司,公司成立于2010年,总部位于北京亚运村.致力于高端智能计算硬件平台开发设计. 公司全力服务于研究所.高校.大型企业的科研硬件平台开发,以PMP项目管理流程实现公司知识管理.风险控制.工艺优化.实现项目的费用.进度.范围.质量的完美统一.以先进制造理念,完善的设计工艺流程和稳健的过程控制,为客户实现稳定.可靠的硬件设计服务.公司长期积累形成的智能图像计算平台.软件无线电处理平台.智能工业设备.服务器加速计算卡已经广泛运用于各领域,深受专家们的好评.公司技术骨干主要毕业于北京