首页 > 其他分享 >GPIO初始化,及中断代码演示

GPIO初始化,及中断代码演示

时间:2023-04-18 10:34:47浏览次数:27  
标签:初始化 Gpio 演示 void XScuGic XGpioPs GPIO ID define

 1 #define LED2        57
 2 #define LED1        56
 3 #define KEY2        55
 4 #define KEY1        54
 5 
 6 #define GPIO_DEVICE_ID        XPAR_XGPIOPS_0_DEVICE_ID
 7 XGpioPs Gpio;
 8 
 9 void Gpio_Init(void){
10     XGpioPs_Config *ConfigPtr;
11 
12     ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
13     XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);
14 
15     XGpioPs_SetDirectionPin(&Gpio, LED1, 1);        //设置为输出模式
16     XGpioPs_SetOutputEnablePin(&Gpio, LED1, 1);     //输出模式需要开启使能
17     XGpioPs_WritePin(&Gpio, LED1, 1);               //设置输出状态"1"
18 
19     XGpioPs_SetDirectionPin(&Gpio, LED2, 1);
20     XGpioPs_SetOutputEnablePin(&Gpio, LED2, 1);
21     XGpioPs_WritePin(&Gpio, LED2, 1);
22 
23     XGpioPs_SetDirectionPin(&Gpio, KEY1, 0);    //设置为输入模式
24     XGpioPs_SetDirectionPin(&Gpio, KEY2, 0);25 }

 

#include "xparameters.h"
#include "xgpiops.h"
#include "xscugic.h"
#include "xil_exception.h"


#define INTC_DEVICE_ID        XPAR_SCUGIC_SINGLE_DEVICE_ID
#define GPIO_INTERRUPT_ID    XPAR_XGPIOPS_0_INTR

static XScuGic Intc; /* The Instance of the Interrupt Controller Driver */

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

    XScuGic_Config *IntcConfig;
    Xil_ExceptionInit();

    IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);

    XScuGic_CfgInitialize(GicInstancePtr, IntcConfig,
                    IntcConfig->CpuBaseAddress);

    Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
                (Xil_ExceptionHandler)XScuGic_InterruptHandler,
                GicInstancePtr);
    XScuGic_Connect(GicInstancePtr, GpioIntrId,
                (Xil_ExceptionHandler)IntrHandler,
                (void *)Gpio);


    XScuGic_Enable(GicInstancePtr, GpioIntrId);

    XGpioPs_SetIntrTypePin(Gpio, KEY1,  XGPIOPS_IRQ_TYPE_EDGE_FALLING);
    XGpioPs_SetIntrTypePin(Gpio, KEY2,  XGPIOPS_IRQ_TYPE_EDGE_FALLING);
    
    XGpioPs_IntrEnablePin(Gpio, KEY1);
    XGpioPs_IntrEnablePin(Gpio, KEY2);

    Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ);
}

static void IntrHandler(void *CallBackRef, u32 Bank, u32 Status)
{
    XGpioPs *Gpio_cb = (XGpioPs *)CallBackRef;
    if (XGpioPs_IntrGetStatusPin(Gpio_cb, KEY1)){
        XGpioPs_WritePin(&Gpio, LED1, 1);
        XGpioPs_WritePin(&Gpio, LED2, 0);
        XGpioPs_IntrClearPin(Gpio_cb, KEY1);
    }
    else if (XGpioPs_IntrGetStatusPin(Gpio_cb, KEY2)){
        XGpioPs_WritePin(&Gpio, LED1, 0);
        XGpioPs_WritePin(&Gpio, LED2, 1);
        XGpioPs_IntrClearPin(Gpio_cb, KEY2);
    }
}

SetupInterruptSystem(&Intc, &Gpio, GPIO_INTERRUPT_ID);

 

标签:初始化,Gpio,演示,void,XScuGic,XGpioPs,GPIO,ID,define
From: https://www.cnblogs.com/tuzki9611/p/17328686.html

相关文章

  • TS初始化Demo
    初始化Demo需要的文件 初始化tsconfig.json文件tsc--init 初始化package.json文件npminit 使用rollup打包,packge.json文件中加入依赖{"scripts":{"test":"echo\"Error:notestspecified\"&&exit1","build&quo......
  • flask-sqlalchemy使用、flask-migrate使用、flask项目演示
    昨日内容回顾#1sqlalchemy创建表:Base=declarative_base()-只能创建和删除-不能创建数据库-不能修改表#2快速插入数据-借助于session对象fromsqlalchemy.ormimportsessionmakerSession=sessionmaker(bind=engine)session......
  • 初始化ArrayList的方式
    本片文章用于归纳java中初始化一个ArrayList的几种方式add方法添加最基础的方式就是我们在new一个ArrayList之后使用add方法添加元素/***第一种方式,通过add方法*@return*/publicList<String>initOne(){List<String>list=newArrayL......
  • Kubernetes(k8s)健康检查详解与实战演示(就绪性探针 和 存活性探针)
    一、概述Kubernetes中的健康检查主要使用就绪性探针(readinessProbes)和存活性探针(livenessProbes)来实现,service即为负载均衡,k8s保证service后面的pod都可用,是k8s中自愈能力的主要手段,主要基于这两种探测机制,可以实现如下需求:异常实例自动剔除,并重启新实例多种类型探针检......
  • 为什么每次建立TCP连接时初始化的序列号都要求不一样
    为了防止历史报文被下一个相同的四元组的连接接受假设每次建立连接。客户端和服务端的初始化序列号都是从0开始的客户端和服务端建立了一个TCP连接,在客户端发送数据包被网络阻塞了然后超时重传了这个数据包,而此时服务端断电重启,之前与客户端建立的连接也消失了,于是收到客户端的数......
  • 在写Python是要注意初始化函数的书写
    问题来啦!在撰写Python程序的时候,我们一定要注意,Python的初始化函数init的书写,它的名称是init,这样的话,实例化的过程中,我们才能够成功获取到我们在里面输入的数值;我起初就忽视了这个问题,将原本的四个横线写成了这样__init,主要是它也没有报出错误,我也获取不到数值,后来又仔细检查......
  • 事务-并发事务演示及隔离级别
       --查看事务隔离级别select@@transaction_isolation;--设置事务隔离级别setsessiontransactionisolationlevelrepeatableread;......
  • docker01 flask-sqlalchemy flask-migrate使用 flask项目演示 docker介绍与安装
    今日内容详细目录今日内容详细1flask-sqlalchemy使用2flask-migrate使用3flask项目演示4docker介绍4.1什么是虚拟化4.2docker是什么4.3容器与虚拟机比较4.4Docker概念5docker安装1flask-sqlalchemy使用#集成到flask中,直接使用sqlalchemy,看代码#有个第三方flask-sq......
  • Linux内核进程管理原理详解(代码演示)
    **前言:**Linux内核里大部分都是C语言。建议先看《Linux内核设计与实现(LinuxKernelDevelopment)》,RobertLove,也就是LKD。Linux是一种动态系统,能够适应不断变化的计算需求。Linux计算需求的表现是以进程的通用抽象为中心的。进程可以是短期的(从命令行执行的一个命令),也可以是......
  • 事务-简介以及操作演示
    事务:是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,,即这些操作要么同时成功,要么同时失败默认mysql的事务是自动提交的,也就是说,当执行一条DML语句,mysql会立即隐式地提交服务事务操作:查看/设置事务提交方式:selec......