diff options
Diffstat (limited to 'src/arch')
| -rw-r--r-- | src/arch/msp430fr5969lp/driver/i2c.cc | 13 | 
1 files changed, 11 insertions, 2 deletions
| 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()  { | 
