📄 lpc_lib_iic.c
字号:
/*
**********************************************************************************************
*
* Embest Info&Tech Co., Ltd. All rights reserved.
* www.embedinfo.com
*
*file: lpc_lib_IIC.c
*author: embest
*establish: 2006.xx.xx
*modify: xx
*notes: xx
**********************************************************************************************
*/
/*
**********************************************************************************************
* include files
**********************************************************************************************
*/
#include "..\..\com\lpc_lib_IIC\lpc_lib_IIC.h"
/*
**********************************************************************************************
* global variable define
**********************************************************************************************
*/
/*
**********************************************************************************************
* name: IIC_init
* func: initialize IIC
* para: none
* ret: none
* modify:
* comment:
**********************************************************************************************
*/
void IIC_init(void)
{
INT32U i;
i=PINSEL0; //enable pin to IIC
i &= (~P0_IIC_PINSEL0_MASK);
i |= P0_IIC_PINSEL0_EN;
PINSEL0 = i;
I2C_I2SCLL=SCLL; //write clock parameter
I2C_I2SCLH=SCLH;
I2C_I2CONSET=I2CONSET_I2EN; //enable IIC function
}
/*
**********************************************************************************************
* name: Wr24C02
* func: write data to 24c02
* para: Deaddr: device address. addr:memory unit address. data:
* ret: none
* modify:
* comment:
**********************************************************************************************
*/
void Wr24C02(INT8U Deaddr,INT8U addr,INT8U data)
{
I2C_I2CONSET |= I2CONSET_STA; //START
while(!(I2C_I2CONSET & I2CONSET_SI)); //clear start bit
I2C_I2CONCLR = I2CONCLR_STAC;
I2C_I2DAT=(Deaddr&0xfe); //send device address
I2C_I2CONCLR = I2CONCLR_SIC;
while(!(I2C_I2CONSET & I2CONSET_SI));
I2C_I2DAT=addr; //send memory address
I2C_I2CONCLR = I2CONCLR_SIC;
while(!(I2C_I2CONSET & I2CONSET_SI));
I2C_I2DAT=data; //send data
I2C_I2CONCLR = I2CONCLR_SIC;
while(!(I2C_I2CONSET & I2CONSET_SI));
I2C_I2CONSET |= I2CONSET_STO; //stop
I2C_I2CONCLR = I2CONCLR_SIC;
time_dly(50); //delay time for data from buffer ram to rom
}
/*
**********************************************************************************************
* name: Rd24C02
* func: read data from 24c02
* para: Deaddr:device address. addr:read memory unit address. data: data pointer
* ret: none
* modify:
* comment:
**********************************************************************************************
*/
void Rd24C02(INT8U Deaddr,INT8U addr, INT8U *data)
{
INT8U rebyte;
I2C_I2CONSET |= I2CONSET_STA; //START
while(!(I2C_I2CONSET & I2CONSET_SI)); //clear start bit
I2C_I2CONCLR = I2CONCLR_STAC;
I2C_I2DAT=(Deaddr&0xfe); //send device address
I2C_I2CONCLR = I2CONCLR_SIC;
while(!(I2C_I2CONSET & I2CONSET_SI));
I2C_I2DAT=addr; //send memory address
I2C_I2CONCLR = I2CONCLR_SIC;
time_dly(10); //delay time for stability
I2C_I2CONSET |= I2CONSET_STA;
I2C_I2CONCLR = I2CONCLR_SIC;
while(!(I2C_I2CONSET & I2CONSET_SI)); //reSTART
I2C_I2CONCLR = I2CONCLR_STAC;
I2C_I2DAT=(Deaddr|0x01); //change to read mode
I2C_I2CONCLR = I2CONCLR_SIC;
while(!(I2C_I2CONSET & I2CONSET_SI)); //ask for getting data
I2C_I2CONCLR = I2CONCLR_SIC;
while(!(I2C_I2CONSET & I2CONSET_SI)); //read data
rebyte=I2C_I2DAT;
I2C_I2CONSET |= I2CONSET_STO; //stop
I2C_I2CONCLR = I2CONCLR_SIC;
*data=rebyte;
}
/*
**********************************************************************************************
* name: IIC_close
* func: close IIC function
* para: none
* ret: none
* modify:
* comment:
**********************************************************************************************
*/
void IIC_close(void)
{
INT32U i;
i=PINSEL0; //restore pin to GPIO
i &= P0_IIC_PINSEL0_MASK;
PINSEL0 = i;
I2C_I2CONCLR=I2CONCLR_I2ENC; //enable IIC function
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -