mbed library sources
Dependents: frdm_kl05z_gpio_test
Fork of mbed-src by
Diff: targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/i2c_api.c
- Revision:
- 314:b682143dd337
- Parent:
- 300:55638feb26a4
diff -r b7d035234249 -r b682143dd337 targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/i2c_api.c --- a/targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/i2c_api.c Thu Sep 11 13:00:06 2014 +0100 +++ b/targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/i2c_api.c Thu Sep 11 13:15:08 2014 +0100 @@ -30,8 +30,6 @@ {NC, NC, 0} }; -uint8_t addrSet = 0; - void i2c_interface_enable(i2c_t *obj) { obj->i2c->ENABLE = (TWI_ENABLE_ENABLE_Enabled << TWI_ENABLE_ENABLE_Pos); @@ -97,7 +95,7 @@ { int status = 0; i2c_reset(obj); - addrSet = 0; + obj->address_set = 0; return status; } @@ -113,7 +111,7 @@ return 1; } } - addrSet = 0; + obj->address_set = 0; i2c_reset(obj); return 0; } @@ -137,8 +135,13 @@ int timeOut = 100000; if (last) { - obj->i2c->TASKS_STOP = 1; + // To trigger stop task when a byte is received, + // must be set before resume task. + obj->i2c->SHORTS = 2; } + + obj->i2c->TASKS_RESUME = 1; + while (!obj->i2c->EVENTS_RXDREADY) { timeOut--; if (timeOut<0) { @@ -146,14 +149,8 @@ } } obj->i2c->EVENTS_RXDREADY = 0; - *data = obj->i2c->RXD; - for (int i = 0; i<320; i++) { - } - - obj->i2c->TASKS_RESUME = 1; - return 0; } @@ -191,7 +188,7 @@ { int status, count, errorResult; obj->i2c->ADDRESS = (address >> 1); - obj->i2c->SHORTS = 0; + obj->i2c->SHORTS = 1; // to trigger suspend task when a byte is received obj->i2c->EVENTS_RXDREADY = 0; obj->i2c->TASKS_STARTRX = 1; @@ -266,14 +263,16 @@ int i2c_byte_write(i2c_t *obj, int data) { int status = 0; - if (!addrSet) { - addrSet = 1; + if (!obj->address_set) { + obj->address_set = 1; obj->i2c->ADDRESS = (data >> 1); if (data & 1) { obj->i2c->EVENTS_RXDREADY = 0; + obj->i2c->SHORTS = 1; obj->i2c->TASKS_STARTRX = 1; } else { + obj->i2c->SHORTS = 0; obj->i2c->TASKS_STARTTX = 1; } } else {