利用GPIO中断实现的温度显示器

 硬件设计:

软件设计:

/******************************************************************************
*
* Copyright (C) 2009 - 2014 Xilinx, Inc.  All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************//** helloworld.c: simple test application** This application configures UART 16550 to baud rate 9600.* PS7 UART (Zynq) is not initialized by this application, since* bootrom/bsp configures it to baud rate 115200** ------------------------------------------------* | UART TYPE   BAUD RATE                        |* ------------------------------------------------*   uartns550   9600*   uartlite    Configurable only in HW design*   ps7_uart    115200 (configured by bootrom/bsp)*/#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xgpiops.h"
#include "xscugic.h"
#include "xiicps.h"//IIC
#define IIC_DEVICE_ID XPAR_PS7_I2C_0_DEVICE_ID
#define IIC_RATE 100000
#define IIC_SLV_ADDR 0x40
//GPIO
#define GPIO_DEVICE_ID      XPAR_XGPIOPS_0_DEVICE_ID
#define INTC_DEVICE_ID		XPAR_SCUGIC_0_DEVICE_ID
#define GPIO_BANK_2	        XGPIOPS_BANK2
#define Interrupt_ID_Gpio 52
#define XIL_EXCEPTION_ID_INT	XIL_EXCEPTION_ID_IRQ_INT#define LED0   54
#define LED1   55
#define Bottom 56
//T&H
char CMD_GET_Humid = 0xE5;
char CMD_GET_Temp =0xE3;
char Hdata[2];
char Tdata[2];
double Tout,Hout;
double avgdata[4];
//Iic
static XIicPs IIC_point_instance;
static XIicPs_Config * IIC_ConFig;
///Gpio
static  XGpioPs GPIO_Decive;
static  XGpioPs_Config *GPIO_Device_ConFig;
//Gpio gic
static  XScuGic Interrupt_Gpio_instance;
static  XScuGic_Config *Interrupt_Gpio_ConFig;
//LED
static  int LED_value = 0;//initial iic
int initIicPs();
double avgfilter(double * srcDataPtr,double inData,int count);int GPIO_init_TEST(void);
void GPIO_GIC_INIT();
static void IntrHandler(void *CallBackRef, u32 Bank, u32 Status);int main()
{int status;init_platform();status = initIicPs();avgdata[0]=0;avgdata[1]=0;avgdata[2]=0;avgdata[3]=0;if(status != XST_SUCCESS){return	XST_FAILURE;}GPIO_init_TEST();print("init done");GPIO_GIC_INIT();while (1){}cleanup_platform();return 0;
}int GPIO_init_TEST(void)
{int Status;GPIO_Device_ConFig = XGpioPs_LookupConfig(GPIO_DEVICE_ID);if (GPIO_Device_ConFig == NULL) {return XST_FAILURE;}Status = XGpioPs_CfgInitialize(&GPIO_Decive,GPIO_Device_ConFig,GPIO_Device_ConFig->BaseAddr);if (Status != XST_SUCCESS) {return XST_FAILURE;}//LED0XGpioPs_SetDirectionPin(&GPIO_Decive,LED0,0x01);XGpioPs_SetOutputEnablePin(&GPIO_Decive,LED0,0x01);//LED1XGpioPs_SetDirectionPin(&GPIO_Decive,LED1,0x01);XGpioPs_SetOutputEnablePin(&GPIO_Decive,LED1,0x01);//BottomXGpioPs_SetDirectionPin(&GPIO_Decive,Bottom,0x0);XGpioPs_SetOutputEnablePin(&GPIO_Decive,Bottom,0x01);//initXGpioPs_WritePin(&GPIO_Decive, LED0, 0x00);XGpioPs_WritePin(&GPIO_Decive, LED1, 0x00);
}void GPIO_GIC_INIT(){int Status;Xil_ExceptionInit();Interrupt_Gpio_ConFig = XScuGic_LookupConfig(GPIO_DEVICE_ID);if (NULL == Interrupt_Gpio_ConFig) {return XST_FAILURE;}Status = XScuGic_CfgInitialize(&Interrupt_Gpio_instance,Interrupt_Gpio_ConFig,Interrupt_Gpio_ConFig->CpuBaseAddress);if (Status != XST_SUCCESS) {return XST_FAILURE;}Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler) XScuGic_InterruptHandler,&Interrupt_Gpio_instance);Status = XScuGic_Connect(&Interrupt_Gpio_instance,Interrupt_ID_Gpio,(Xil_InterruptHandler )XGpioPs_IntrHandler,(void *)&GPIO_Decive);if (Status != XST_SUCCESS) {return XST_FAILURE;}XGpioPs_SetIntrType(&GPIO_Decive,GPIO_BANK_2,0xffffffff,0x00,0x00) ;XGpioPs_SetCallbackHandler(&GPIO_Decive,(void *) &GPIO_Decive,(XGpioPs_Handler )IntrHandler);XGpioPs_IntrEnable(&GPIO_Decive,GPIO_BANK_2,(1<<(Bottom-54)));XScuGic_Enable(&Interrupt_Gpio_instance,Interrupt_ID_Gpio);Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ);return XST_SUCCESS;
}static void IntrHandler(void *CallBackRef, u32 Bank, u32 Status)
{XGpioPs *Gpio = (XGpioPs *)CallBackRef;u32 DataRead;int status;unsigned short tmp =0;/* Push the switch button */DataRead = XGpioPs_ReadPin(Gpio, Bottom);if (DataRead == 0) {status = XIicPs_MasterSendPolled(&IIC_point_instance,&CMD_GET_Temp,0x01,IIC_SLV_ADDR);if(status != XST_SUCCESS){return	XST_FAILURE;}status = XIicPs_MasterRecvPolled(&IIC_point_instance,Tdata,0x02,IIC_SLV_ADDR);//read hum valuestatus = XIicPs_MasterSendPolled(&IIC_point_instance,&CMD_GET_Humid,0x01,IIC_SLV_ADDR);if(status != XST_SUCCESS){return	XST_FAILURE;}status = XIicPs_MasterRecvPolled(&IIC_point_instance,Hdata,0x02,IIC_SLV_ADDR);tmp = (Tdata[0]<<8) | (Tdata[1]&0xfc);Tout = (175.72*tmp/65536)-46.85;tmp =(Hdata[0]<<8) | (Hdata[1]&0xfc);Hout = ((125*tmp)/65536) - 6;Tout = avgfilter(avgdata,Tout,0x04);printf("Humidity = %.1f; temperature = %.1f \n",Hout,Tout);}
}int initIicPs(){int status;IIC_ConFig = XIicPs_LookupConfig(IIC_DEVICE_ID);status = XIicPs_CfgInitialize(&IIC_point_instance,IIC_ConFig,IIC_ConFig->BaseAddress);if(status != XST_SUCCESS){return	XST_FAILURE;}//set iic ratestatus = XIicPs_SetSClk(&IIC_point_instance,IIC_RATE);if(status != XST_SUCCESS){return	XST_FAILURE;}return XST_SUCCESS;
}
double avgfilter(double * srcDataPtr,double inData,int count){int i;double outdata;for(i=0;i<count;i++){if(i <(count-1)){srcDataPtr[i+1]=srcDataPtr[i];}}srcDataPtr[0] =inData;outdata = (srcDataPtr[0] + srcDataPtr[1] + srcDataPtr[2] +srcDataPtr[3])/4;return outdata;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/150969.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx高可用配置(五)

keepalived keepalived安装 1.#进入根目录下的 usr目录 cd /usr 2.#安装keepalived yum install keepalived -y 3.安装完成后在根目录etc下会有个keepalived目录 4.进入keepalived目录 cd keepalived/ 5.ll命令查看&#xff0c;会有个配置文件 keepalived.conf 6.ke…

【juc】countdownlatch实现游戏进度

目录 一、截图示例二、代码示例 一、截图示例 二、代码示例 package com.learning.countdownlatch;import java.util.Arrays; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurr…

Safran与是德科技合作为蔚来提供电动汽车中的5G和C-V2X连接测试

概述 虹科Safran GNSS模拟器助力是德科技&#xff08;Keysight&#xff09;为中国顶级电动汽车制造商之一——蔚来汽车&#xff08;NIO&#xff09;提供了业界领先的UXM 5G测试解决方案以验证5G和C-V2X的连接性&#xff0c;能够根据3GPP和其他标准组织定义的最新5G新无线电&am…

【Vue面试题七】、SPA (单页面) 首屏加载速度慢怎么解决?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;SPA首屏加载速度慢的怎么…

【JavaEE】_HTTP请求与HTTP响应

目录 1. HTTP协议 2. HTTP请求 2.1 HTTP请求首行 2.2 URL 2.3 HTTP方法 2.3.1 GET请求 2.3.2 POST请求 2.3.3 GET与POST的区别 2.3.4 其他方法 2.4 请求报头header 2.4.1 Host&#xff1a; 2.4.2 Content-Length与Content-Type&#xff1a; 2.4.3 User-Agent&…

青少年近视问题不容小觑,蔡司用专业技术助力孩子视力健康发展

根据国家卫健委公布的数据显示&#xff0c;2022年全国儿童青少年近视率达到53.6%&#xff0c;青少年近视已成为社会普遍的眼健康问题。对家长来说&#xff0c;也需要提高对孩子眼视光健康重要性的认知&#xff0c;日常培养青少年良好的用眼习惯&#xff0c;并通过矫正视力的方式…

珠宝饰品商家为什么要做微信小程序开发

珠宝饰品商家为什么要做微信小程序开发&#xff1f; 随着互联网的发展&#xff0c;微信小程序作为一种新型的应用形态&#xff0c;正逐渐成为商家们关注的热点。对于珠宝饰品商家来说&#xff0c;开发微信小程序具有以下几个方面的优势&#xff1a; 一、获取更多流量 微信小程…

数据挖掘实验(一)数据规范化【最小-最大规范化、零-均值规范化、小数定标规范化】

一、数据规范化的原理 数据规范化处理是数据挖掘的一项基础工作。不同的属性变量往往具有不同的取值范围&#xff0c;数值间的差别可能很大&#xff0c;不进行处理可能会影响到数据分析的结果。为了消除指标之间由于取值范围带来的差异&#xff0c;需要进行标准化处理。将数据…

sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验

课程1_第1周_测验题 目录&#xff1a;目录 第一题 1.“人工智能是新电力” 这个比喻指的是什么&#xff1f; A. 【  】人工智能为我们的家庭和办公室的个人设备供电&#xff0c;类似于电力。 B. 【  】通过“智能电网”&#xff0c;人工智能正在传递新一波的电力。 C. …

计算机竞赛 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域&#xff0c;在无人驾驶领域中机器学习的各种算法随处可见&#xff0c;今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂&#xff0c;看上去无从下手。那么面对这样极其…

springboot-admin整合及使用

0. 官方文档及示例 官方文档 示例代码:Spring-Boot-Admin-Demo 1. 概述 Spring Boot Admin(SBA)是一个开源的社区项目&#xff0c;用于管理和监控 Spring Boot 应用程序。应用程序可以通过 http 的方式&#xff0c;或 Spring Cloud 服务发现机制注册到 SBA 中&#xff0c;然…

【nvm】Node Version Manager(NVM)安装配置以及使用(WIN版)

NVM 包管理工具 安装 访问NVM-Windows的GitHub页面&#xff1a;点击nvm-setup.exe。 根据提示进行下一步&#xff0c;文件位置选择自定义位置 验证安装是否成功 nvm version 。如果成功&#xff0c;它将显示NVM的版本号。 使用 nvm list available查看所有的可以被下载…

柯桥生活口语学习,英语中初次见面,除了Nice to meet you,还能说什么?

第一印象非常重要。所以当你第一次见到某人时&#xff0c;留下一个好印象很重要&#xff0c;尤其是当你面对一个重要的工作或者面对某个对你来说可能非常特别的人时。 下面我列出了一些最常用的说“很高兴见到你”的表达方法&#xff0c;也包括对方的回答&#xff0c;除了nice …

OLED透明屏技术在智能手机、汽车和广告领域的市场前景

OLED透明屏技术作为一种新型的显示技术&#xff0c;具有高透明度、触摸和手势交互、高画质和图像显示效果等优势&#xff0c;引起了广泛的关注。 随着智能手机、汽车和广告等行业的快速发展&#xff0c;OLED透明屏技术也在这些领域得到了广泛的应用。 本文将介绍OLED透明屏技…

网络安全总结

前言 本文内容主要摘抄网络规划设计师的教材和腾讯-SUMMER课堂&#xff0c;主要对网络安全进行简单梳理和总结 OSI安全体系 X轴表示8种安全机制&#xff0c;Y轴表示OSI7层模型&#xff0c;Z轴表示5种安全服务&#xff0c;图中X是水平&#xff0c;Y轴竖直&#xff0c;Z轴向外…

手边酒店V2独立版小程序 1.0.21 免授权+小程序前端安装教程

手边酒店小程序独立版酒店宾馆订房系统支持创建多个小程序&#xff0c;让每一个客户单独管理属于自己的小程序。系统无需授权&#xff0c;小程序端用户授权也是采用最新接口。 缺点不开源不影响使用&#xff0c;播播资源安装测试下来未发现或出现BUG情况&#xff0c;用户授权接…

03_Node.js模块化开发

1 Node.js的基本使用 1.1 NPM nodejs安装完成后&#xff0c;会跟随着自动安装另外一个工具npm。 NPM的全称是Node Package Manager&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块&#xff08;包&#xff09;的标准。 2020年3月17日&…

网络安全面试题汇总(附答案)

作为从业多年的网络安全工程师&#xff0c;我深知在面试过程中面试官所关注的重点及考察的技能点。网络安全作为当前信息技术领域中非常重要的一部分&#xff0c;对于每一个从事网络安全工作的人员来说&#xff0c;不仅需要掌握一定的技术能力&#xff0c;更需要具备全面的综合…

SSCI及SCI撰写|立足于审稿进行论文修改

一、回复审稿意见视角下的论文改进 &#xff08;一&#xff09;常见审稿意见分类&#xff08;改进向&#xff09; 意见分类研究主题方面真实案例研究主题研完没有提供新的信息This is clearly a students paper Although it is adequately written it offers no new informat…

超自动化加速落地,助力运营效率和用户体验显著提升|爱分析报告

RPA、iPaaS、AI、低代码、BPM、流程挖掘等在帮助企业实现自动化的同时&#xff0c;也在构建一座座“自动化烟囱”。自动化工具尚未融为一体&#xff0c;协同价值没有得到释放。Gartner于2019年提出超自动化&#xff08;Hyperautomation&#xff09;概念&#xff0c;主要从技术组…