/* receives a character from I2C rountine. * * @return value: character received * */ static unsigned char i2c_receive_byte(void) { int j=0; int i; unsigned char regvalue; local_irq_disable(); for (i=0; i<8; i++) { DELAY(1); i2c_clr(SCL); DELAY(1); i2c_set(SCL); regvalue = HW_REG(GPIO_0_DIR); regvalue &= (~SDA); HW_REG(GPIO_0_DIR) = regvalue; DELAY(1); if (i2c_data_read()) j+=(1<<(7-i)); DELAY(1); i2c_clr(SCL); } local_irq_enable(); DELAY(1); // i2c_clr(SDA); // DELAY(1); return j; }
/* receives an acknowledge from I2C rountine. * * @return value: 0--Ack received; 1--Nack received * */ static int i2c_receive_ack(void) { int nack; unsigned char regvalue; DELAY(1); regvalue = HW_REG(GPIO_0_DIR); regvalue &= (~SDA); HW_REG(GPIO_0_DIR) = regvalue; DELAY(1); i2c_clr(SCL); DELAY(1); i2c_set(SCL); DELAY(1); nack = i2c_data_read(); DELAY(1); i2c_clr(SCL); DELAY(1); // i2c_set(SDA); // DELAY(1); if (nack == 0) return 1; return 0; }
static int i2c_receive_ack(int Grp) { int nack; unsigned char regvalue; DELAY(1); regvalue = HW_REG(GPIO_I2C_DIR[Grp]); regvalue &= (~GPIO_I2C_BIT[Grp][PINI2C_SDA]); HW_REG(GPIO_I2C_DIR[Grp]) = regvalue; DELAY(1); i2c_clr(Grp, PINI2C_SCL); DELAY(1); i2c_set(Grp, PINI2C_SCL); DELAY(1); nack = i2c_data_read(Grp); DELAY(1); i2c_clr(Grp, PINI2C_SCL); DELAY(1); return !nack; }
static unsigned char i2c_receive_byte(int Grp) { int j = 0; int i; unsigned char regvalue; local_irq_disable(); for (i = 0; i < 8; i ++) { DELAY(1); i2c_clr(Grp, PINI2C_SCL); DELAY(2); i2c_set(Grp, PINI2C_SCL); regvalue = HW_REG(GPIO_I2C_DIR[Grp]); regvalue &= (~GPIO_I2C_BIT[Grp][PINI2C_SDA]); HW_REG(GPIO_I2C_DIR[Grp]) = regvalue; DELAY(1); if (i2c_data_read(Grp)) { j+=(1<<(7-i)); } DELAY(1); i2c_clr(Grp, PINI2C_SCL); } local_irq_enable(); DELAY(1); return j; }
static void i2c_send_byte(int Grp, unsigned char c) { int i; local_irq_disable(); for (i = 0; i < 8; i ++) { DELAY(1); i2c_clr(Grp, PINI2C_SCL); DELAY(1); if (c & (1<<(7-i))) i2c_set(Grp, PINI2C_SDA); else i2c_clr(Grp, PINI2C_SDA); DELAY(1); i2c_set(Grp, PINI2C_SCL); DELAY(1); i2c_clr(Grp, PINI2C_SCL); } local_irq_enable(); DELAY(1); }
static void i2c_send_ack(void) { DELAY(1); i2c_clr(SCL); DELAY(1); i2c_set(SDA); DELAY(1); i2c_set(SCL); DELAY(1); i2c_clr(SCL); DELAY(1); i2c_clr(SDA); DELAY(1); }
/* * sends a stop bit via I2C rountine. * */ static void i2c_stop_bit(void) { /* clock the ack */ DELAY(1); i2c_set(SCL); DELAY(1); i2c_clr(SCL); /* actual stop bit */ DELAY(1); i2c_clr(SDA); DELAY(1); i2c_set(SCL); DELAY(1); i2c_set(SDA); DELAY(1); }
/* * sends a start bit via I2C rountine. * */ static void i2c_start_bit(void) { DELAY(1); i2c_set(SDA | SCL); DELAY(1); i2c_clr(SDA); DELAY(1); }
static void i2c_send_ack(int Grp) { DELAY(1); i2c_clr(Grp, PINI2C_SCL); DELAY(1); i2c_set(Grp, PINI2C_SDA); DELAY(1); i2c_set(Grp, PINI2C_SCL); DELAY(1); i2c_clr(Grp, PINI2C_SCL); DELAY(1); i2c_clr(Grp, PINI2C_SDA); DELAY(1); }
static void i2c_start_bit(int Grp) { DELAY(1); i2c_set(Grp, PINI2C_DAT); DELAY(1); i2c_clr(Grp, PINI2C_SDA); DELAY(2); }
static void i2c_stop_bit(int Grp) { /* clock the ack */ DELAY(1); i2c_set(Grp, PINI2C_SCL); DELAY(1); i2c_clr(Grp, PINI2C_SCL); /* actual stop bit */ DELAY(1); i2c_clr(Grp, PINI2C_SDA); DELAY(1); i2c_set(Grp, PINI2C_SCL); DELAY(1); i2c_set(Grp, PINI2C_SDA); DELAY(1); }
/* * sends a character over I2C rountine. * * @param c: character to send * */ static void i2c_send_byte(unsigned char c) { int i; local_irq_disable(); for (i=0; i<8; i++) { DELAY(1); i2c_clr(SCL); DELAY(1); if (c & (1<<(7-i))) i2c_set(SDA); else i2c_clr(SDA); DELAY(1); i2c_set(SCL); DELAY(1); i2c_clr(SCL); } DELAY(1); // i2c_set(SDA); local_irq_enable(); }