示例#1
0
void iic_control (unsigned char addr, unsigned char loc, unsigned char *buf, int len)
{
	iic_start();

	if (iic_sendbyte(addr & 0xfe))
		goto error;

	if (iic_sendbyte(loc))
		goto error;

	if (addr & 1) {
		int i;

		for (i = 0; i < len; i++)
			if (iic_sendbyte (buf[i]))
				break;
	} else {
		int i;

		iic_stop();
		iic_start();
		iic_sendbyte(addr|1);
		for (i = 0; i < len; i++)
			buf[i] = iic_recvbyte ();
	}
error:
	iic_stop();
}
示例#2
0
/*----------------------------------------------------------------------------*/
void  iic_write(u8 chip_id,u8 iic_addr,u8 *iic_dat,u8 n)
{
    iic_busy  = 1;
    iic_start();                //I2C启动
    iic_sendbyte(chip_id);         //写命令
    if (0xff != iic_addr)
    {
        iic_sendbyte(iic_addr);   //写地址
    }
    for (;n>0;n--)
    {
        iic_sendbyte(*iic_dat++);      //写数据
    }
    iic_stop();                 //I2C停止时序
    iic_busy = 0;
}
示例#3
0
/*----------------------------------------------------------------------------*/
void iic_readn(u8 chip_id,u8 iic_addr,u8 *iic_dat,u8 n)
{

    iic_busy = 1;
    iic_start();                //I2C启动
    iic_sendbyte(chip_id);         //写命令
    if (0xff != iic_addr)
    {
        iic_sendbyte(iic_addr);   //写地址
    }
    for (;n>1;n--)
    {
        *iic_dat++ = iic_revbyte(0);      //写数据
    }
    *iic_dat++ = iic_revbyte(1);
    iic_stop();                 //I2C停止时序
    iic_busy = 0;
}
示例#4
0
/*----------------------------------------------------------------------------*/
u8 read_eerom(u16 iic_addr)
{
    u8  byte,addr=0,page=0;

    iic_busy = 1;
    addr=EEPROM_Addr_Align(iic_addr);
    page =EEPROM_Addr_to_Page(iic_addr);
	
    iic_start();                    //I2C启动
    iic_sendbyte(0xa0|page);             //写命令
    iic_sendbyte(addr);       		//写地址
    iic_start();                    			//写转为读命令,需要再次启动I2C
    iic_sendbyte(0xa1|page);             //读命令
    byte = iic_revbyte(1);
    iic_stop();                     //I2C停止
    iic_busy = 0;
    return  byte;

}
/*----------------------------------------------------------------------------*/
void backup_music_point_to_eeprom(void)
{
    u8 cnt,i;
    eeprom_page_write_start();
    if (device_active == DEVICE_SDMMC0)
    {
        cnt = 0;
        iic_sendbyte(MEM_SD_PLAYPOINT_ID1);
    }
    else if (device_active == DEVICE_UDISK)
    {
        cnt = 1;
        iic_sendbyte(MEM_USB_PLAYPOINT_ID1);
    }
    for ( i = 0;i<8;i++)
    {
        iic_sendbyte(((u8 *)(&(disk_mus_point[cnt].id1)))[i]);
    }
    eeprom_page_write_stop();
}
示例#6
0
void  eeprom_page_write_start(void)
{
    iic_busy  = 1;
    iic_start();                //I2C启动
    iic_sendbyte(0xa0);         //写命令
}