用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

336 lines
7.9 KiB

10 months ago
#include "ctiic.h"
//////////////////////////////////////////////////////////////////////////////////
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ѧϰʹ<EFBFBD>ã<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>;
//ALIENTEK STM32F407<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-IIC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>@ALIENTEK
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/5/7
//<EFBFBD><EFBFBD><EFBFBD>V1.1
//<EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><EFBFBD><EFBFBD>
//Copyright(C) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD>˾ 2014-2024
//All rights reserved
//********************************************************************************
//<EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD>
//V1.1 20140721
//1,<EFBFBD>޸<EFBFBD>CT_IIC_Read_Byte<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><EFBFBD><EFBFBD>.
//2,<EFBFBD>޸<EFBFBD>CT_IIC_Wait_Ack<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>MDK<EFBFBD><EFBFBD>-O2<EFBFBD>Ż<EFBFBD>.
//////////////////////////////////////////////////////////////////////////////////
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>GPIO<EFBFBD>˿<EFBFBD>, <EFBFBD>û<EFBFBD>ֻ<EFBFBD><EFBFBD>Ҫ<EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>SCL<EFBFBD><EFBFBD>SDA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: bsp_InitI2C
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>GPIO<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>IO<EFBFBD>ķ<EFBFBD>ʽʵ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void CT_IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_I2C_PORT, ENABLE); /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIOʱ<EFBFBD><EFBFBD> */
GPIO_InitStructure.GPIO_Pin = I2C_SDA_PIN | I2C_SCL_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIO_PORT_I2C, &GPIO_InitStructure);
/* <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ֹͣ<EFBFBD>ź<EFBFBD>, <EFBFBD><EFBFBD>λI2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
CT_IIC_Stop();
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: i2c_Delay
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ӳ٣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>400KHz
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
static void i2c_Delay(void)
{
uint8_t i;
/*<EFBFBD><EFBFBD>
CPU<EFBFBD><EFBFBD>Ƶ168MHzʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, MDK<EFBFBD><EFBFBD><EFBFBD>̲<EFBFBD><EFBFBD>Ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨ʽʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۲<EFBFBD>Ρ<EFBFBD>
ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ5ʱ<EFBFBD><EFBFBD>SCLƵ<EFBFBD><EFBFBD> = 1.78MHz (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ: 92ms, <EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽ͷ<EFBFBD><EFBFBD><EFBFBD>ϾͶ<EFBFBD>дʧ<EFBFBD>ܡ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><EFBFBD>ٽ<EFBFBD>)
ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ10ʱ<EFBFBD><EFBFBD>SCLƵ<EFBFBD><EFBFBD> = 1.1MHz (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ: 138ms, <EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>: 118724B/s)
ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ30ʱ<EFBFBD><EFBFBD>SCLƵ<EFBFBD><EFBFBD> = 440KHz<EFBFBD><EFBFBD> SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD>1.0us<EFBFBD><EFBFBD>SCL<EFBFBD>͵<EFBFBD>ƽʱ<EFBFBD><EFBFBD>1.2us
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>2.2Kŷʱ<EFBFBD><EFBFBD>SCL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Լ0.5us<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ4.7<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ1us
ʵ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>400KHz<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>
*/
// for (i = 0; i < 5; i++);
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: CT_IIC_Start
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void CT_IIC_Start(void)
{
/* <EFBFBD><EFBFBD>SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD>SDA<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ʾI2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> */
I2C_SDA_1();
I2C_SCL_1();
i2c_Delay();
I2C_SDA_0();
i2c_Delay();
I2C_SCL_0();
i2c_Delay();
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: CT_IIC_Start
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<EFBFBD>ź<EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void CT_IIC_Stop(void)
{
/* <EFBFBD><EFBFBD>SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD>SDA<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ʾI2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<EFBFBD>ź<EFBFBD> */
I2C_SDA_0();
I2C_SCL_1();
i2c_Delay();
I2C_SDA_1();
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: CT_IIC_Send_Byte
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: CPU<EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8bit<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: _ucByte <EFBFBD><EFBFBD> <EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD>ֽ<EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void CT_IIC_Send_Byte(uint8_t _ucByte)
{
uint8_t i;
/* <EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵĸ<EFBFBD>λbit7 */
for (i = 0; i < 8; i++)
{
if (_ucByte & 0x80)
{
I2C_SDA_1();
}
else
{
I2C_SDA_0();
}
i2c_Delay();
I2C_SCL_1();
i2c_Delay();
I2C_SCL_0();
if (i == 7)
{
I2C_SDA_1(); // <EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
_ucByte <<= 1; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>bit */
i2c_Delay();
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: CT_IIC_Read_Byte
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: CPU<EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ8bit<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
uint8_t CT_IIC_Read_Byte(unsigned char ack)
{
uint8_t i;
uint8_t value;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>bitΪ<EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>bit7 */
value = 0;
for (i = 0; i < 8; i++)
{
value <<= 1;
I2C_SCL_1();
i2c_Delay();
if (I2C_SDA_READ())
{
value++;
}
I2C_SCL_0();
i2c_Delay();
}
if (!ack)
CT_IIC_NAck();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>nACK
else
CT_IIC_Ack(); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ACK
return value;
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: CT_IIC_Wait_Ack
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ʱ<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ACKӦ<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ȷӦ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
*********************************************************************************************************
*/
uint8_t CT_IIC_Wait_Ack(void)
{
uint8_t re;
I2C_SDA_1(); /* CPU<EFBFBD>ͷ<EFBFBD>SDA<EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
i2c_Delay();
I2C_SCL_1(); /* CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SCL = 1, <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ACKӦ<EFBFBD><EFBFBD> */
i2c_Delay();
if (I2C_SDA_READ()) /* CPU<EFBFBD><EFBFBD>ȡSDA<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ */
{
re = 1;
}
else
{
re = 0;
}
I2C_SCL_0();
i2c_Delay();
return re;
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: CT_IIC_Ack
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ACK<EFBFBD>ź<EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void CT_IIC_Ack(void)
{
I2C_SDA_0(); /* CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SDA = 0 */
i2c_Delay();
I2C_SCL_1(); /* CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> */
i2c_Delay();
I2C_SCL_0();
i2c_Delay();
I2C_SDA_1(); /* CPU<EFBFBD>ͷ<EFBFBD>SDA<EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: CT_IIC_NAck
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>NACK<EFBFBD>ź<EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void CT_IIC_NAck(void)
{
I2C_SDA_1(); /* CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SDA = 1 */
i2c_Delay();
I2C_SCL_1(); /* CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> */
i2c_Delay();
I2C_SCL_0();
i2c_Delay();
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: CT_IIC_CheckDevice
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϸ<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: _Address<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ַ
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ 0 <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ʾδ̽<EFBFBD>
*********************************************************************************************************
*/
uint8_t IIC_CheckDevice(uint8_t _Address)
{
uint8_t ucAck;
if (I2C_SDA_READ() && I2C_SCL_READ())
{
CT_IIC_Start(); /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> */
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ+<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>bit<EFBFBD><EFBFBD>0 = w<EFBFBD><EFBFBD> 1 = r) bit7 <EFBFBD>ȴ<EFBFBD> */
CT_IIC_Send_Byte((_Address<<1) | I2C_WR);
ucAck = CT_IIC_Wait_Ack(); /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ACKӦ<EFBFBD><EFBFBD> */
CT_IIC_Stop(); /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<EFBFBD>ź<EFBFBD> */
return ucAck;
}
return 1; /* I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣 */
}
u8 IIC_WriteByte(u8 add,u8 reg,u8 dat)//1100,100 1 0110 0100 0x64
{
CT_IIC_Start(); /* <EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD>ʼ<EFBFBD>ź<EFBFBD> */
CT_IIC_Send_Byte(add<<1); /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ź<EFBFBD> */
if(CT_IIC_Wait_Ack())
{
CT_IIC_Stop();
return 1;
}
CT_IIC_Send_Byte(reg); /* <EFBFBD>ڲ<EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ */
CT_IIC_Wait_Ack();
CT_IIC_Send_Byte(dat); /* <EFBFBD>ڲ<EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if(CT_IIC_Wait_Ack())
{
CT_IIC_Stop();
return 1;
}
CT_IIC_Stop();
return 0;
}
u8 IIC_ReadByte(u8 add,u8 reg)
{
uint8_t ucData;
CT_IIC_Start(); /* <EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD>ʼ<EFBFBD>ź<EFBFBD> */
CT_IIC_Send_Byte(add<<1); /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ź<EFBFBD> */
CT_IIC_Wait_Ack();
CT_IIC_Send_Byte(reg); /* <EFBFBD><EFBFBD><EFBFBD>ʹ洢<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>ַ */
CT_IIC_Wait_Ack();
CT_IIC_Start(); /* <EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD>ʼ<EFBFBD>ź<EFBFBD> */
CT_IIC_Send_Byte((add<<1)|1); /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ+<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> */
CT_IIC_Wait_Ack();
ucData = CT_IIC_Read_Byte(0); /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
CT_IIC_Stop(); /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<EFBFBD>ź<EFBFBD> */
return ucData;
}