IIC 인터페이스 참조 코드

4707 단어 vivado
/****************************************************************************** *
  • 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 #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
    \r",Tout,Hout); printf("Hello World
    \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; }

    좋은 웹페이지 즐겨찾기