// returns non-zero if ACK bit seen static int eeprom_start(cyg_uint8 b) { int i; CLK_HI(); hal_delay_us(5); DATA_LO(); hal_delay_us(5); CLK_LO(); for (i = 7; i >= 0; i--) { if (b & (1 << i)) DATA_HI(); else DATA_LO(); hal_delay_us(5); CLK_HI(); hal_delay_us(5); CLK_LO(); } hal_delay_us(5); HAL_GPIO_OUTPUT_DISABLE(GPIO_EEPROM_SDA); CLK_HI(); hal_delay_us(5); i = (*IXP425_GPINR & (1 << GPIO_EEPROM_SDA)) ? 0 : 1; CLK_LO(); hal_delay_us(5); HAL_GPIO_OUTPUT_ENABLE(GPIO_EEPROM_SDA); return i; }
static cyg_uint8 eeprom_getb(int more) { int i; cyg_uint8 b = 0; HAL_GPIO_OUTPUT_DISABLE(GPIO_EEPROM_SDA); hal_delay_us(5); for (i = 7; i >= 0; i--) { b <<= 1; if (*IXP425_GPINR & (1 << GPIO_EEPROM_SDA)) b |= 1; CLK_HI(); hal_delay_us(5); CLK_LO(); hal_delay_us(5); } HAL_GPIO_OUTPUT_ENABLE(GPIO_EEPROM_SDA); if (more) DATA_LO(); else DATA_HI(); hal_delay_us(5); CLK_HI(); hal_delay_us(5); CLK_LO(); hal_delay_us(5); return b; }
static void eeprom_stop(void) { int i; hal_delay_us(5); DATA_LO(); hal_delay_us(5); CLK_HI(); hal_delay_us(5); DATA_HI(); hal_delay_us(5); CLK_LO(); hal_delay_us(5); CLK_HI(); hal_delay_us(5); }
void writeByte(u08 data) { for (u08 ii = 0; ii < 8; ii++) { CLOCK_LO(); if (data & 0x80) { DATA_HI(); } else { DATA_LO(); } //delayMicroseconds(10); CLOCK_HI(); // delayMicroseconds(10); data <<= 1; } DATA_HI(); }