예제 #1
0
int i2c_master_recv_data(unsigned int addr,
			unsigned char *data, unsigned int len)
{
	unsigned int i = 0;
	int ret = 0;

	ret = i2c_set_master();	// get iic bus, as bus master;
	if (ret) {
		putstring("\nget i2c bus error\n");
		return ret;	// error while getting bus
	}

	i2c_enable_irq();
	i2c_message_start(addr, 1);
	while (1) {
		i++;
		if (i == len) {		// last byte
			i2c_disable_ack();
			break;
		}
		*data++ = IICDS;
		IICCON &= ~(1 << 4);	// resume trasmit
		// TODO dealy ??
		for (ret = 0; ret < 30; ret++) ;	// setup time
	}

	/* last byte */
	*data++ = IICDS;
	IICCON &= ~(1 << 4);	// resume trasmit

	// TODO dealy ??
	for (ret = 0; ret < 30; ret++) ; // setup time
	return len;
}
예제 #2
0
inline void i2c_start(I2C_MemMapPtr p)
{
    i2c_set_master(p);
    i2c_set_tx(p);
}
예제 #3
0
파일: i2c.c 프로젝트: kamejoko80/BamBooOS
void i2c_start(I2C_Type *p)
{
    i2c_set_master(p);
    i2c_set_tx(p);
}