Commit 96462e6b authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

wat

parent 8d19dd77
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -8,16 +8,25 @@

volatile unsigned short old_ifg = 0;

#if (F_CPU / F_I2C) < 45
inline void await_i2c_int(unsigned int ie_flags, unsigned int ifg_flags) {
	while (!(UCB0IFG & ifg_flags)) ;
	if (UCB0IFG & (UCNACKIFG | UCCLTOIFG)) {
		UCB0IFG &= ~(UCNACKIFG | UCCLTOIFG);
	}
}
#else
inline void await_i2c_int(unsigned int ie_flags, unsigned int ifg_flags)
{
	UCB0IFG = 0;
	old_ifg = 0;
	UCB0IE = ie_flags;
	while (!(old_ifg & ifg_flags)) {
	do {
		arch.idle();
	}
	} while (!(old_ifg & ifg_flags));
	UCB0IE = 0;
}
#endif

signed char I2C::setup()
{
+4 −4
Original line number Diff line number Diff line
@@ -20,10 +20,10 @@ volatile unsigned char timer_done = 0;
#define SCL_HIGH gpio.input(scl, 1)
#define SCL_LOW gpio.output(scl, 0)
#elif SOFTI2C_PULLUP_EXTERNAL
#define SDA_HIGH do { gpio.input(sda); gpio.write(sda_pull, 1); } while (0)
#define SDA_LOW do { gpio.write(sda_pull, 0); gpio.output(sda); } while (0)
#define SCL_HIGH do { gpio.input(scl); gpio.write(scl_pull, 1); } while (0)
#define SCL_LOW do { gpio.write(scl_pull, 0); gpio.output(scl); } while (0)
#define SDA_HIGH { gpio.input(sda); gpio.write(sda_pull, 1); }
#define SDA_LOW { gpio.write(sda_pull, 0); gpio.output(sda); }
#define SCL_HIGH { gpio.input(scl); gpio.write(scl_pull, 1); }
#define SCL_LOW { gpio.write(scl_pull, 0); gpio.output(scl); }
#else /* !SOFTI2C_PULLUP_{INTERNAL,EXTERNAL} */
#define SDA_HIGH gpio.input(sda)
#define SDA_LOW gpio.output(sda)