mirror of https://github.com/ARMmbed/mbed-os.git
Apply the same NuMaker I2C timeout measurement to M2354
parent
99e767b4c7
commit
39e2f31176
|
@ -28,6 +28,7 @@
|
||||||
#include "nu_miscutil.h"
|
#include "nu_miscutil.h"
|
||||||
#include "nu_bitutil.h"
|
#include "nu_bitutil.h"
|
||||||
#include "mbed_critical.h"
|
#include "mbed_critical.h"
|
||||||
|
#include "us_ticker_api.h"
|
||||||
|
|
||||||
struct nu_i2c_var {
|
struct nu_i2c_var {
|
||||||
i2c_t * obj;
|
i2c_t * obj;
|
||||||
|
@ -466,6 +467,8 @@ static int i2c_poll_status_timeout(i2c_t *obj, int (*is_status)(i2c_t *obj), uin
|
||||||
{
|
{
|
||||||
uint32_t t1, t2, elapsed = 0;
|
uint32_t t1, t2, elapsed = 0;
|
||||||
int status_assert = 0;
|
int status_assert = 0;
|
||||||
|
const uint32_t bits = us_ticker_get_info()->bits;
|
||||||
|
const uint32_t mask = (1 << bits) - 1;
|
||||||
|
|
||||||
t1 = us_ticker_read();
|
t1 = us_ticker_read();
|
||||||
while (1) {
|
while (1) {
|
||||||
|
@ -475,7 +478,7 @@ static int i2c_poll_status_timeout(i2c_t *obj, int (*is_status)(i2c_t *obj), uin
|
||||||
}
|
}
|
||||||
|
|
||||||
t2 = us_ticker_read();
|
t2 = us_ticker_read();
|
||||||
elapsed = (t2 > t1) ? (t2 - t1) : ((uint64_t) t2 + 0xFFFFFFFF - t1 + 1);
|
elapsed = (t2 > t1) ? (t2 - t1) : ((uint64_t) t2 + mask - t1 + 1);
|
||||||
if (elapsed >= timeout) {
|
if (elapsed >= timeout) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -490,6 +493,8 @@ static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout)
|
||||||
int tran_started;
|
int tran_started;
|
||||||
char *tran_pos = NULL;
|
char *tran_pos = NULL;
|
||||||
char *tran_pos2 = NULL;
|
char *tran_pos2 = NULL;
|
||||||
|
const uint32_t bits = us_ticker_get_info()->bits;
|
||||||
|
const uint32_t mask = (1 << bits) - 1;
|
||||||
|
|
||||||
i2c_disable_int(obj);
|
i2c_disable_int(obj);
|
||||||
tran_pos = obj->i2c.tran_pos;
|
tran_pos = obj->i2c.tran_pos;
|
||||||
|
@ -513,7 +518,7 @@ static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
elapsed = (t2 > t1) ? (t2 - t1) : ((uint64_t) t2 + 0xFFFFFFFF - t1 + 1);
|
elapsed = (t2 > t1) ? (t2 - t1) : ((uint64_t) t2 + mask - t1 + 1);
|
||||||
if (elapsed >= timeout) { // Transfer idle
|
if (elapsed >= timeout) { // Transfer idle
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue