GD32F30X与CS5560 I2C调试

遇到的问题

问题1:使用io模拟i2c,i2c可以写,但读不到
解决:修改CS5560电源5v转3.3v;直接使用3.3v供电;读不到数据是因为SDA数据线无电压或者电压不够,可以加上拉电阻;

问题2:使用i2c硬件时,总线处于忙状态
while(i2c_flag_get((u32_t)I2Cx, I2C_FLAG_I2CBSY));//I2C通信忙标志
解决:i2c初始化后添加一个stop信号(或者在每次读写前都加stop信号,不建议;不确定后续是否会有影响);在读写前后,添加一个相对长的延时(防止 卡在某个判断标志的while里);

代码

io模拟i2c

#define GD_I2C0_BASE ((IIC_TypeDef *)I2C0)
#define GD_I2C1_BASE ((IIC_TypeDef *)I2C1)

#define I2C_SPEED 100000 // 1K 
#define SLAVE_ADDR (0xD0>>1)

#define __i2c_io  //使用io模拟i2c

#define RCU_GPIO_I2C            RCU_GPIOB

#define RCU_GPIO_I2C_SCL        RCU_GPIOB
#define I2C_SCL_PORT            GPIOB
#define I2C0_SCL_PIN             GPIO_PIN_6
#define I2C1_SCL_PIN             GPIO_PIN_10

#define RCU_GPIO_I2C_SDA        RCU_GPIOB
#define I2C_SDA_PORT            GPIOB
#define I2C0_SDA_PIN             GPIO_PIN_7
#define I2C1_SDA_PIN             GPIO_PIN_11

#define RCU_GPIO_DRDY            RCU_GPIOC
#define I2C_DRDY_PORT            GPIOC
#define I2C_DRDY_PIN             GPIO_PIN_3
#include "main.h"
#include "gd32f30x.h"
#include "i2c_hal.h"


//#define I2C_SPEED_RATE	100   //uint khz

//I2C_HandleTypeDef i2c_test = {0};
//FlagStatus i2c_int = RESET;
//2 Quake_A
//3 Quake_B
//4 Precision

unsigned char SET_ADC_FIG=1;  //1 SET_ADC
unsigned long ADvalue=123,value;
unsigned char Rdata,AD_NEG,DO_READ_ADC;
unsigned long AD_H,AD_M,AD_L;
unsigned char DEV_Data[8]= {0};

/***************************** START *****************************/
//void I2C_Init(void)
//{
//	GPIO_InitTypeDef  gpioi2c={0};
//  /* Configure the GPIO_LED pin */
//	gpioi2c.Pin    =ADC_SDA_GPIO | ADC_SCL_GPIO;
//	gpioi2c.Mode = GPIO_MODE_AF;
//	gpioi2c.Alternate = GPIO_AF4_I2C_SCL;
//	gpioi2c.OpenDrain = GPIO_OPENDRAIN;//GPIO_PUSHPULL;
//	gpioi2c.Debounce.Enable = GPIO_DEBOUNCE_DISABLE;
//	gpioi2c.SlewRate = GPIO_SLEW_RATE_LOW;//GPIO_SLEW_RATE_HIGH;//GPIO_SLEW_RATE_LOW;
//	gpioi2c.DrvStrength = GPIO_DRV_STRENGTH_LOW;//GPIO_DRV_STRENGTH_HIGH;
//	gpioi2c.Pull = GPIO_PULLUP;
//	HAL_GPIO_Init(ADC_GPIO, &gpioi2c);
//
//	/*set init handle*/

//	i2c_test.Instance = I2C;
//
//	i2c_test.Init.master = I2C_MASTER_MODE_ENABLE;
//	i2c_test.Init.slave = I2C_SLAVE_MODE_DISABLE;
//	i2c_test.Mode = HAL_I2C_MODE_MASTER;
//	printf("Enter Test I2C Master\r\n");
//
//	i2c_test.Init.broadack = I2C_BROAD_ACK_DISABLE;
//	i2c_test.Init.speedclock = I2C_SPEED_RATE;
//	i2c_test.State = HAL_I2C_STATE_RESET;
//
//	HAL_I2C_Init(&i2c_test);
//}
///**************************************************/
//HAL_StatusTypeDef I2C_Write_EEPROM(uint8_t dev_address,uint8_t reg_address,uint8_t *wdata,uint8_t size)
//{
//	uint8_t data[17] = {0};
//	uint8_t i = 0;
//	HAL_StatusTypeDef  ret = HAL_ERROR;
//
//	data[0] = reg_address;
//	for(i=0;i<size;i++)
//		data[i+1]= wdata[i];
//	ret = HAL_I2C_Master_Transmit(&i2c_test, dev_address, data, size+1);

//	return ret;
//}
///*************************************************/
//HAL_StatusTypeDef I2C_Read_EEPROM(uint8_t dev_address,uint8_t reg_address,uint8_t *rdata,uint8_t size)
//{
//	HAL_StatusTypeDef  ret = HAL_ERROR;
//
//	ret = HAL_I2C_Master_Transmit(&i2c_test, dev_address, &reg_address, 1);
//	ret = HAL_I2C_Master_Receive(&i2c_test, dev_address, rdata, size);
//	return ret;
//}
/*****************************************************/

//#include "at24cxx.h"
#include "i2c_hal.h"

/*----------------------------------------------------------------------------*/
void delay (unsigned int time)
{   unsigned int di,dj;
    for(di=0; di<time; di++) {
        for(dj=0; dj<50; dj++);
    }
}
/*********************************************************************************/
void I2C_Start(void)
{

    GPIO_BOP(I2C_SCL_PORT)=I2C0_SDA_PIN;
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(4);
    GPIO_BC(I2C_SCL_PORT)=I2C0_SDA_PIN;
    delay(4);
    GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(4);

}
/*********************************************************************************/
void I2C_Stop(void)
{   GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
    GPIO_BC(I2C_SCL_PORT)=I2C0_SDA_PIN;
    delay(4);
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(4);
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SDA_PIN;
    delay(4);
}


//
/*********************************************************************************/
void I2C_ACK(void)
{   gpio_init(I2C_SDA_PORT, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, I2C0_SDA_PIN);
    delay(2);    //SET=IN
    delay(1);
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(4);
    GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(4);
    gpio_init(I2C_SDA_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, I2C0_SDA_PIN);
    delay(2);
}  //SET PD2.2=OUT
/*********************************************************************************/
void ByteTo_I2C(unsigned char DData)
{   unsigned char m,Pos;
    m=0x80;
    for(Pos=0; Pos<8; Pos++)
    {   if((m&DData)>=1) {
            GPIO_BOP(I2C_SCL_PORT)=I2C0_SDA_PIN;
            delay(0);
            GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
            delay(1);
            GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
            delay(2);
            GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
            delay(1);
        }
        else      	     {
            GPIO_BC(I2C_SCL_PORT)=I2C0_SDA_PIN;
            delay(0);
            GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
            delay(1);
            GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
            delay(2);
            GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
            delay(1);
        }
        m=m>>1;
    }
    delay(1);
}
/*********************************************************************************/
void I2C_Write(unsigned char DAddr,unsigned char RAddr,unsigned char WData)
{
#ifdef __i2c_io
    gpio_init(I2C_SDA_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, I2C0_SDA_PIN);
    delay(2);   //SET PD2.2=OUT
    I2C_Start();
    ByteTo_I2C(DAddr);
    I2C_ACK();
    ByteTo_I2C(RAddr);
    I2C_ACK();
    ByteTo_I2C(WData);
    I2C_ACK();
    I2C_Stop();
#else
    DEV_Data[0]=WData;
    DEV_I2C_MasterWriteData(0,DAddr,RAddr,DEV_Data,1);
#endif
}
/*********************************************************************************/
void ByteFrom_I2C(void)
{
    Rdata=0;
    GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(2);
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(20);
    if((GPIO_ISTAT(I2C_SCL_PORT)&(1<<7))!=0) {
        Rdata|=0x80;
    }
    GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(2);
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(20);
    if((GPIO_ISTAT(I2C_SCL_PORT)&(1<<7))!=0) {
        Rdata|=0x40;
    }
    GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(2);
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(20);
    if((GPIO_ISTAT(I2C_SCL_PORT)&(1<<7))!=0) {
        Rdata|=0x20;
    }
    GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(2);
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(20);
    if((GPIO_ISTAT(I2C_SCL_PORT)&(1<<7))!=0) {
        Rdata|=0x10;
    }
    GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(2);
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(20);
    if((GPIO_ISTAT(I2C_SCL_PORT)&(1<<7))!=0) {
        Rdata|=0x08;
    }
    GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(2);
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(20);
    if((GPIO_ISTAT(I2C_SCL_PORT)&(1<<7))!=0) {
        Rdata|=0x04;
    }
    GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(2);
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(20);
    if((GPIO_ISTAT(I2C_SCL_PORT)&(1<<7))!=0) {
        Rdata|=0x02;
    }
    GPIO_BC(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(2);
    GPIO_BOP(I2C_SCL_PORT)=I2C0_SCL_PIN;
    delay(20);
    if((GPIO_ISTAT(I2C_SCL_PORT)&(1<<7))!=0) {
        Rdata|=0x01;
    }
//    if(Rdata)
//        GPIO_BOP(GPIOC)=GPIO_PIN_1;
//    else
//        GPIO_BC(GPIOC)=GPIO_PIN_1;
}
/*********************************************************************************/
void I2C_Read(unsigned char DAddr,unsigned char RAddr)
{
#ifdef __i2c_io
    gpio_init(I2C_SDA_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, I2C0_SDA_PIN);
    delay(2);   //SET PD2.2=OUT
    I2C_Start();
    ByteTo_I2C(DAddr);
    I2C_ACK();
    ByteTo_I2C(RAddr);
    I2C_ACK();
    I2C_Start();
    ByteTo_I2C(DAddr+1);
    I2C_ACK();
    gpio_init(I2C_SDA_PORT, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, I2C0_SDA_PIN);
    delay(2);   //SET PD2.2=IN
    ByteFrom_I2C();
    I2C_ACK();
    gpio_init(I2C_SDA_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, I2C0_SDA_PIN);
    delay(2);   //SET PD2.2=OUT
    I2C_Stop();
#else
    DEV_I2C_MasterReadData(0,DAddr,RAddr,DEV_Data,1);
    Rdata=DEV_Data[0];
#endif

}
/*********************************************************************************/
void Read_AD_check(void)
{   I2C_Read(0xd0,0x08);
    if((Rdata&0x02)!=0) {
        DO_READ_ADC=1;
    }
    else {
        DO_READ_ADC=0;
    }
}
/*********************************************************************************/
void INIT_CS5560(void)
{
#ifdef __i2c_io
    I2C_Write(0xd0,0x11,0x01);     // HIRCC
    delay(20);
    I2C_Write(0xd0,0x0a,0xE7);
    I2C_Write(0xd0,0x00,0x28);	    // PWRC
    I2C_Write(0xd0,0x01,0x2e);	    // PGAC0
    I2C_Write(0xd0,0x02,0x00);	    // PGAC1
    I2C_Write(0xd0,0x03,0x00);	    // PGACS
    I2C_Write(0xd0,0x07,0x03);    	// ADCR0  10HZ
    I2C_Write(0xd0,0x09,0x1F);   		// ADCS
    I2C_Write(0xd0,0x08,0x00);			// ADCR1
	#else
	  I2C_Write(0xd0,0x11,0x01);     // HIRCC
    delay(2000);
    I2C_Write(0xd0,0x0a,0xE7);
	delay(2000);
    I2C_Write(0xd0,0x00,0x28);	    // PWRC
	delay(2000);
    I2C_Write(0xd0,0x01,0x2e);	    // PGAC0
	delay(2000);
    I2C_Write(0xd0,0x02,0x00);	    // PGAC1
		delay(2000);
    I2C_Write(0xd0,0x03,0x00);	    // PGACS
		delay(2000);
    I2C_Write(0xd0,0x07,0x03);    	// ADCR0  10HZ
		delay(2000);
    I2C_Write(0xd0,0x09,0x1F);   		// ADCS
		delay(2000);
    I2C_Write(0xd0,0x08,0x00);			// ADCR1
		delay(2000);
	#endif
}
/******************************   ADC Read  *****************************/
void READ_CS5560(void)
{
    AD_L=0;
    AD_M=0;
    AD_H=0;
    I2C_Read(0xd0,0x04);
    AD_L=Rdata;
    I2C_Read(0xd0,0x05);
    AD_M=Rdata;
    I2C_Read(0xd0,0x06);
    AD_H=Rdata;
    I2C_Write(0xd0,0x08,0x00);
    AD_H=AD_H<<16;
    AD_M=AD_M<<8;
    ADvalue=AD_H+AD_M+AD_L;
    ADvalue=ADvalue+0x800000;
    ADvalue=ADvalue&0xFFFFFF;
    if(ADvalue<0x800000) {
        AD_NEG=1;
    }
    else {
        AD_NEG=0;
    }
//ADvalue=ADvalue>>8;?
}
/******************************   MAIN_ADC Read  *****************************/
void MAIN_READ_ADC(void)
{   if((gpio_input_port_get(GPIOC)&(1<<3))==0) {
        READ_CS5560();
    }
    //}

//	I2C_Read(0xd0,0x08);
	ADvalue=Rdata;
//	 delay(300);
//
	int i=0;
// Read_AD_check();
// if(DO_READ_ADC==1){READ_CS5560(); DO_READ_ADC=0;}
//i=0;;

}




使用i2c硬件功能

#define GD_I2C0_BASE ((IIC_TypeDef *)I2C0)
#define GD_I2C1_BASE ((IIC_TypeDef *)I2C1)

#define I2C_SPEED 100000 // 1K 
#define SLAVE_ADDR (0xD0>>1)

//#define __i2c_io  //使用io模拟i2c

#define RCU_GPIO_I2C            RCU_GPIOB

#define RCU_GPIO_I2C_SCL        RCU_GPIOB
#define I2C_SCL_PORT            GPIOB
#define I2C0_SCL_PIN             GPIO_PIN_6
#define I2C1_SCL_PIN             GPIO_PIN_10

#define RCU_GPIO_I2C_SDA        RCU_GPIOB
#define I2C_SDA_PORT            GPIOB
#define I2C0_SDA_PIN             GPIO_PIN_7
#define I2C1_SDA_PIN             GPIO_PIN_11

#define RCU_GPIO_DRDY            RCU_GPIOC
#define I2C_DRDY_PORT            GPIOC
#define I2C_DRDY_PIN             GPIO_PIN_3
//联咏记录仪(NT983xx)硬板I2C驱动说明
//GD驱动支持2路I2C,联咏记录仪硬板仅用到1路(I2C1),用于RTC8130
#include "i2c_hal.h"

//I2C等待通讯打断超时时间(ms)
#define I2C_IRQ_TIMEOUT 200

void I2Cx_GPIO_Init(void)
{
    /* gpio simulate i2c   */
    rcu_periph_clock_enable(RCU_GPIO_I2C);
    rcu_periph_clock_enable(RCU_GPIO_DRDY);
    /* connect PB6 to I2C_SCL */
    /* connect PB7 to I2C_SDA GPIO_MODE_OUT_PP*/
    /* connect PC3 to DRDY GPIO_MODE_IPU*/
    gpio_init(I2C_SCL_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, I2C0_SCL_PIN);
    gpio_init(I2C_SDA_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, I2C0_SDA_PIN);
    gpio_init(I2C_DRDY_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, I2C_DRDY_PIN);
}

//下面代码是i2c硬件控制代码
//此版仅支持一路I2C
IIC_TypeDef* getI2cInstance(u8_t port)
{
    return GD_I2C0_BASE;
}

void MX_I2Cx_Init(u8_t port)
{
    if (0 == port)
    {
        /* enable GPIOB clock */
        rcu_periph_clock_enable(RCU_GPIO_I2C);

        /* connect PB6 to I2C_SCL */
        /* connect PB7 to I2C_SDA */
        gpio_init(I2C_SCL_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, I2C0_SCL_PIN);
        gpio_init(I2C_SDA_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, I2C0_SDA_PIN);
    }
    else
    {
        /* enable GPIOB clock */
        rcu_periph_clock_enable(RCU_GPIO_I2C);

        /* connect PB10 to I2C1_SCL */
        /* connect PB11 to I2C1_SDA */
        gpio_init(I2C_SCL_PORT, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, I2C1_SCL_PIN);
        gpio_init(I2C_SDA_PORT, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, I2C1_SDA_PIN);

    }
}

int DEV_I2C_initMaster(u8_t port, int baudrate)
{
    IIC_TypeDef* I2Cx = getI2cInstance(port);
    if (I2Cx)
    {
        MX_I2Cx_Init(port);

        if(I2C0 == (u32_t)I2Cx)
            rcu_periph_clock_enable(RCU_I2C0);      ///< 开启I2C0时钟门控
        else
            rcu_periph_clock_enable(RCU_I2C1);      ///< 开启I2C1时钟门控

        i2c_clock_config((u32_t)I2Cx, baudrate, I2C_DTCY_2);
        i2c_mode_addr_config((u32_t)I2Cx, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, SLAVE_ADDR);
        i2c_enable((u32_t)I2Cx);
        i2c_ack_config((u32_t)I2Cx, I2C_ACK_ENABLE);

				i2c_stop_on_bus((u32_t)I2Cx); 

        return DEV_RT_OK;
    }
    return DEV_RT_ERROR;
}

int DEV_I2C_MasterReadData(u8_t port, u8_t sla_addr, u8_t start_reg, u8_t *data, u16_t len)
{
    int rt = DEV_RT_ERROR;

    IIC_TypeDef* I2Cx = getI2cInstance(port);
    if (!I2Cx)
        return rt;

    while(i2c_flag_get((u32_t)I2Cx, I2C_FLAG_I2CBSY));//I2C通信忙标志
    i2c_start_on_bus((u32_t)I2Cx);//发送起始位
    while(!i2c_flag_get((u32_t)I2Cx, I2C_FLAG_SBSEND));//起始位是否发送

    i2c_master_addressing((u32_t)I2Cx, sla_addr, I2C_TRANSMITTER);//发送从机地址,设置写模式
    while(!i2c_flag_get((u32_t)I2Cx, I2C_FLAG_ADDSEND));//主机模式下地址是否发送
    i2c_flag_clear((u32_t)I2Cx, I2C_FLAG_ADDSEND);      //清除标志位

    I2C_DATA((u32_t)I2Cx)= start_reg;//发送寄存器地址

    i2c_start_on_bus((u32_t)I2Cx);//发送起始位
    while(!i2c_flag_get((u32_t)I2Cx, I2C_FLAG_SBSEND));//起始位是否发送

    i2c_master_addressing((u32_t)I2Cx, sla_addr, I2C_RECEIVER);//发送从机地址,设置为读模式
    if(1 == len)
        i2c_ack_config((u32_t)I2Cx, I2C_ACK_DISABLE);//接收一个字节时要先不发送ACK
    while(!i2c_flag_get((u32_t)I2Cx, I2C_FLAG_ADDSEND));//主机模式下地址是否发送
    i2c_flag_clear((u32_t)I2Cx, I2C_FLAG_ADDSEND);      //清除标志位

    if(1 == len)
        i2c_stop_on_bus((u32_t)I2Cx);//接收一个字节时要先发送STOP,后接收数据

    u16_t i;
    for(i=0; i<len; i++)
    {
        if(i == len-2)//接收到N-2个字节时,不发送ACK
        {
            while(!i2c_flag_get((u32_t)I2Cx, I2C_FLAG_BTC));
            i2c_ack_config((u32_t)I2Cx, I2C_ACK_DISABLE);
        }
        while(!i2c_flag_get((u32_t)I2Cx, I2C_FLAG_RBNE));
        *data++ = i2c_data_receive((u32_t)I2Cx);
    }
    if(1 != len)
        i2c_stop_on_bus((u32_t)I2Cx);     //发送结束位
    while(I2C_CTL0((u32_t)I2Cx)&0x0200);//检查结束位是否发送
    i2c_ack_config((u32_t)I2Cx, I2C_ACK_ENABLE);

    return DEV_RT_OK;
}

int DEV_I2C_MasterWriteData(u8_t port, u8_t sla_addr, u8_t start_reg, const u8_t *data, u16_t len)
{
    int rt = DEV_RT_ERROR;

    IIC_TypeDef* I2Cx = getI2cInstance(port);
    if (!I2Cx)
        return rt;
//i2c_stop_on_bus((u32_t)I2Cx); 
    while(i2c_flag_get((u32_t)I2Cx, I2C_FLAG_I2CBSY));//I2C通信忙标志

    i2c_start_on_bus((u32_t)I2Cx);//发送起始位
    while(!i2c_flag_get((u32_t)I2Cx, I2C_FLAG_SBSEND));//起始位是否发送

    i2c_master_addressing((u32_t)I2Cx, sla_addr, I2C_TRANSMITTER);  //发送从机地址,设置写模式
    while(!i2c_flag_get((u32_t)I2Cx, I2C_FLAG_ADDSEND)); //检测从机地址是否发送
    i2c_flag_clear((u32_t)I2Cx, I2C_FLAG_ADDSEND);       //清除标志位

    I2C_DATA((u32_t)I2Cx)= start_reg;//发送寄存器地址

    while(!i2c_flag_get((u32_t)I2Cx, I2C_FLAG_TBE));//发送期间I2C_DATA为空

    u16_t i;
    for(i=0; i<len; i++)
    {
        i2c_data_transmit((u32_t)I2Cx, data[i]);        //发送数据
        while(!i2c_flag_get((u32_t)I2Cx, I2C_FLAG_TBE));//发送期间I2C_DATA为空
    }
    i2c_stop_on_bus((u32_t)I2Cx);       //发送结束位
    while(I2C_CTL0((u32_t)I2Cx)&0x0200);//检查结束位是否发送

    rt = DEV_RT_OK;
    return rt;
}

main

int main(void)
{

    /* configure USART */
    gd_eval_com_init(EVAL_COM1);


    /* configure the NVIC */
//    i2c_nvic_config();

    /* configure GPIO */
//    gpio_config();

    /* configure I2C */
//    i2c_config();

    /* initialize EEPROM  */
//    i2c_eeprom_init();

//		i2c_bus_reset();

//		MX_I2Cx_Init(0);
//   DEV_I2C_initMaster(0, I2C_SPEED);
//    INIT_XM24HTP();



#ifdef __i2c_io
    /* gpio simulate i2c   */
    printf("\r\n I2Cx_GPIO_Init start!");
    I2Cx_GPIO_Init();
    printf("\r\n I2Cx_GPIO_Init done!");

#else
    DEV_I2C_initMaster(0, I2C_SPEED);
		
//	DEV_I2C_initMaster(1, I2C_SPEED);
    printf("\r\nThe I2C is hardware interface ");
    printf("\r\nThe speed is %d", I2C_SPEED);
#endif

    printf("\r\n INIT_CS5560 start!");
//    delay(30000);
    INIT_CS5560();

//    delay(30000);
//    INIT_CS5560();

//    delay(30000);
//    INIT_CS5560();
    printf("\r\n INIT_CS5560 done!");


//    if(I2C_OK == i2c_24c02_test()) {
//        while(1) {
//            /* turn off all LEDs */
//            gd_eval_led_off(LED2);
//            gd_eval_led_off(LED3);
//            gd_eval_led_off(LED4);
//            gd_eval_led_off(LED5);
//            /* turn on a LED */
//            led_turn_on(count % 4);
//            count++;
//            if(count >= 4) {
//                count = 0;
//            }
//            delay_1ms(500);
//        }
//    }

    /* turn on all LEDs */
//    gd_eval_led_on(LED2);
//    gd_eval_led_on(LED3);
//    gd_eval_led_on(LED4);
//    gd_eval_led_on(LED5);

    while(1)
    {

        MAIN_READ_ADC();

        delay(30000);
        printf("\r\nThe Value is %d", ADvalue);

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值