示例#1
0
unsigned char MMA845x_readch(unsigned char address)
{
unsigned char ret = 100;
	IIC_start();		//启动
	send_ch(MMA845x_IIC_ADDRESS);	//写入设备ID及写信号
	send_ch(address);	//X地址
	IIC_start();		//重新发送开始
	send_ch(MMA845x_IIC_ADDRESS+1);	//写入设备ID及读信
	ret = read_ch();	//读取一字节
	IIC_stop();

	return ret;
}
示例#2
0
//***************************************************
//从无子地址器件读单字节数据
//function:器件地址,所读数据存在接收缓冲区当前字节
void read_from_ch(unsigned char ad_main,unsigned char *buf){
	IIC_start();
	send_ch(ad_main); //发送器件地址
	*buf=read_ch();
	IIC_ack_main(no_ack); //无需应答<no_ack=0>
	IIC_stop();
}
示例#3
0
//写入
void MMA845x_writecha(unsigned char address, unsigned char thedata)
{
	IIC_start();		//启动
	send_ch(MMA845x_IIC_ADDRESS);	//写入设备ID及写信号
	send_ch(address);	//X地址
	send_ch(thedata);	//写入设备ID及读信
	IIC_stop();
}
示例#4
0
uint8 
iic2402_read(uint8 address)
{
    uint8 tmp;
    IIC_start();
    IIC_write_byte(0xa0);
    IIC_tack();
    IIC_write_byte(address);
    IIC_tack();
    
    IIC_start();
    IIC_write_byte(0xa1);
    IIC_tack();
    tmp = IIC_read_byte();
    SCL_LOW;
    IIC_notack();
    IIC_stop();
    return tmp;
}
示例#5
0
//***************************************************
//向有子地址器件发送多字节数据
void send_to_nch(unsigned char ad_main,unsigned char ad_sub,unsigned char *buf,unsigned char num){
	unsigned char i;
	IIC_start();
	send_ch(ad_main); //发送器件地址
	send_ch(ad_sub); //发送器件子地址
	for(i=0;i<num;i++){
		send_ch(*buf); //发送数据*buf
		buf++;
	}
	IIC_stop();
}
示例#6
0
void 
iic2402_write(uint8 address, uint8 byte)
{
   IIC_start();
   IIC_write_byte(0xa0);
   IIC_tack();
   IIC_write_byte(address);
   IIC_tack();
   IIC_write_byte(byte);
   IIC_tack();
   IIC_stop();
   delay();
}
示例#7
0
//***************************************************
//从有子地址器件读多个字节数据
//function:
void read_from_nch(unsigned char ad_main,unsigned char ad_sub,unsigned char *buf,unsigned char num){
	unsigned char i;
	IIC_start();
	send_ch(ad_main);
	send_ch(ad_sub);
	for(i=0;i<num-1;i++){
		*buf=read_ch();
		IIC_ack_main(ack); //主应答<ack=1>
		buf++;
	}
	*buf=read_ch();
	buf++; //本次指针调整无意义,目的是操作后buf指向下一地址
	IIC_ack_main(no_ack); //无需应答<no_ack=0>
	IIC_stop();
}
示例#8
0
/*****************************************************************************************
*   Write_IIC_Bytes
*   Function : Write data from dev at addr
*   Action   : 
*	Input    : addr--the address which start to Write, buffer--the pointer to buffer used to store data
               len-- the length of data needed to read
*	Output   : None
*	Return   : 1--success  0--fail 
*****************************************************************************************/
uint8 Write_IIC_Bytes(const void *buffer, uint8 dev, uint16 addr, uint16 lenth)//(uint16 addr, const void *buffer, uint16 lenth, uint8 dev)
{
	uint8 * p;
	uint16 cTemp0,cTemp1;
	uint8 flag;
	
	for(cTemp1 = EE_TryTimes; cTemp1 != 0; cTemp1--)
	{
		if(cTemp1)
		{
			if (detect_sda() == FALSE)
			{
				continue;
			}
		}

		IIC_start();
		if(!EEPROM_AddrSend(dev, addr)) 
		{
			continue;
		} 

		p = (uint8 *)buffer;
		for(cTemp0 = lenth; cTemp0 > 0; cTemp0--)
		{
			flag = IIC_send400k(*p);
			if(!flag)
			{
				break;
			}
			p++;
		}
		if(cTemp0 != 0)
		{
			continue;
		}
		IIC_stop();

		return TRUE;
	}
	IIC_stop();

	return FALSE;
}
示例#9
0
/*****************************************************************************************
*   read_IIC_bytes
*   Function : Read data from dev at addr
*   Action   : 
*	Input    : addr--the address which start to read, buffer--the pointer
to buffer used to store data
               len-- the length of data needed to read, dev-- read from which 
               device
*	Output   : None
*	Return   : 1--success  0--fail 
*****************************************************************************************/
uint8 read_IIC_bytes(void *buffer, uint8 dev, uint16 addr, uint16 lenth)//(uint16 addr, void *buffer, uint16 lenth, uint8 dev)
{
	uint8 *p ;
	uint16 cTemp1,cTemp0;
	
	for(cTemp1 = EE_TryTimes; cTemp1 != 0; cTemp1--)
	{
		if(cTemp1)
		{
			if (detect_sda() == FALSE)
			{
				continue;
			}
		}

		IIC_start();
		if(!EEPROM_AddrSend(dev,addr)) 
		{
			continue;
		}

		p = (uint8 *)buffer;
		IIC_start();
#if EEPROMTYPE <= 16
		if(!IIC_send400k(dev | 0x01 | ((unsigned char)(addr / 0x100) << 1))) 
		{
			continue;
		}
#elif EEPROMTYPE <= 512
		if(!IIC_send400k(dev | 0x01)) 
		{
			continue;
		}
#else
		if(!IIC_send400k(dev | 0x01 | ((unsigned char)(addr >> 16) << 1))) 
		{
			continue;
		}
#endif
		for(cTemp0 = lenth-1; cTemp0 != 0; cTemp0--)
		{
			*p = IIC_receive400k();
			p++;
			SET_IIC_SDA_OUTPUT(); // ack
			CLR_IIC_SDA();
			SET_IIC_SCL();
			Dly1us();

			CLR_IIC_SCL();
			SET_IIC_SDA();
		}
		*p = IIC_receive400k();

		SET_IIC_SDA_OUTPUT();
		SET_IIC_SDA();
		SET_IIC_SCL();//收完最后一个字节发送NO ACK信号
		Dly1us();

		CLR_IIC_SCL();
		IIC_stop();

		return TRUE;
	}
	IIC_stop();

	return FALSE;
}
示例#10
0
//***************************************************
//向无子地址器件发送单字节数据
void send_to_ch(unsigned char ad_main,unsigned char c){
	IIC_start();
	send_ch(ad_main); //发送器件地址
	send_ch(c); //发送数据c
	IIC_stop();
}