From 96462e6b5be917a5146eaae62234432f1030898f Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Mon, 12 Nov 2018 10:59:38 +0100 Subject: wat --- src/arch/msp430fr5969lp/driver/i2c.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/arch/msp430fr5969lp/driver/i2c.cc') diff --git a/src/arch/msp430fr5969lp/driver/i2c.cc b/src/arch/msp430fr5969lp/driver/i2c.cc index f807d00..fe5b37b 100644 --- a/src/arch/msp430fr5969lp/driver/i2c.cc +++ b/src/arch/msp430fr5969lp/driver/i2c.cc @@ -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() { -- cgit v1.2.3