IIC接口参考代码

/******************************************************************************
*

  • Copyright © 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 “sleep.h”
#include “xparameters.h”
#include “xiicps.h”

#define DEVICE_ID XPAR_PS7_I2C_0_DEVICE_ID
#define IIC_RATE 100000//100KHz
#define IIC_SLV_ADDR 0x40

static XIicPs IicPs;
static XIicPs_Config * IicPsCfgPtr;

int initIicPs(XIicPs *iicps,XIicPs_Config * iiccfg);
double avgFilter(double * srtDataPtr,double inData,int count);

int main()
{
int status;
double avgData[4];
status = initIicPs(&IicPs,IicPsCfgPtr);
if(status != XST_SUCCESS)
{
printf(“fail %d”,status);
return XST_FAILURE;
}
char CmdHum = 0xE5;
char CmdTemp = 0xE3;
char Hdata[2];
char Tdata[2];
double Tout,Hout;
unsigned short tmp = 0;
while (1)
{
status = XIicPs_MasterSendPolled(&IicPs,&CmdTemp,0x01,IIC_SLV_ADDR);
if(status != XST_SUCCESS)
{
printf(“fail %d”,status);
return XST_FAILURE;
}
status = XIicPs_MasterRecvPolled(&IicPs,Tdata,0x02,IIC_SLV_ADDR);

	status = XIicPs_MasterSendPolled(&IicPs,&CmdHum,0x01,IIC_SLV_ADDR);
	if(status != XST_SUCCESS)
	{
		printf("fail %d",status);
		return XST_FAILURE;
	}
	status = XIicPs_MasterRecvPolled(&IicPs,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] &0xFD);
	Hout = 125*tmp / 65536 -6;
	Tout = avgFilter(avgData,Tout,0x04);
	printf("Temp = %.1f , Hum = %.1f\n\r",Tout,Hout);
    printf("Hello World\n\r");
    usleep(1000000);
}
return 0;

}

int initIicPs(XIicPs *iicps,XIicPs_Config * iiccfg)
{
int status;
iiccfg = XIicPs_LookupConfig(DEVICE_ID);
status = XIicPs_CfgInitialize(iicps,iiccfg,iiccfg->BaseAddress);
if(status != XST_SUCCESS)
{
printf(“fail %d”,status);
return XST_FAILURE;
}
status = XIicPs_SetSClk(iicps,IIC_RATE);
if(status != XST_SUCCESS)
{
printf(“fail %d”,status);
return XST_FAILURE;
}
return XST_SUCCESS;
}

double avgFilter(double * srtDataPtr,double inData,int count)
{
int i;
double outData;
for(i = 0;i < count ; i ++)
{
if(i < count-1)
{
srtDataPtr[i+1] = srtDataPtr[i];
}
}
srtDataPtr[0] = inData;
outData = (srtDataPtr[0] + srtDataPtr[1] + srtDataPtr[2] + srtDataPtr[3])/4;
return outData;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值