summaryrefslogtreecommitdiff
path: root/src/arch/msp430fr5969lp/driver/i2c.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/msp430fr5969lp/driver/i2c.cc')
-rw-r--r--src/arch/msp430fr5969lp/driver/i2c.cc13
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()
{