aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--testhal/STM32F1xx/I2C/Makefile2
-rw-r--r--testhal/STM32F1xx/I2C/fake.c6
-rw-r--r--testhal/STM32F1xx/I2C/i2c_pns.c2
-rw-r--r--testhal/STM32F1xx/I2C/lis3.c19
-rw-r--r--testhal/STM32F1xx/I2C/main.c10
5 files changed, 29 insertions, 10 deletions
diff --git a/testhal/STM32F1xx/I2C/Makefile b/testhal/STM32F1xx/I2C/Makefile
index 12eea9360..a118fb9a7 100644
--- a/testhal/STM32F1xx/I2C/Makefile
+++ b/testhal/STM32F1xx/I2C/Makefile
@@ -84,7 +84,7 @@ CSRC = $(PORTSRC) \
i2c_pns.c \
tmp75.c \
fake.c \
- #lis3.c
+ lis3.c
diff --git a/testhal/STM32F1xx/I2C/fake.c b/testhal/STM32F1xx/I2C/fake.c
index 9d46f448d..35cd54f62 100644
--- a/testhal/STM32F1xx/I2C/fake.c
+++ b/testhal/STM32F1xx/I2C/fake.c
@@ -49,8 +49,12 @@ void request_fake(void){
status = i2cMasterReceiveTimeout(&I2CD1, addr, rx_data, 2, tmo);
i2cReleaseBus(&I2CD1);
- if (status != RDY_OK){
+ if (status == RDY_RESET){
errors = i2cGetErrors(&I2CD1);
+ if (errors == I2CD_ACK_FAILURE){
+ /* there is no slave with given address on the bus, or it was die */
+ return;
+ }
}
else{
diff --git a/testhal/STM32F1xx/I2C/i2c_pns.c b/testhal/STM32F1xx/I2C/i2c_pns.c
index 94bc13da6..1c73482e3 100644
--- a/testhal/STM32F1xx/I2C/i2c_pns.c
+++ b/testhal/STM32F1xx/I2C/i2c_pns.c
@@ -45,7 +45,7 @@ void I2CInit_pns(void){
/* startups. Pauses added just to be safe */
chThdSleepMilliseconds(100);
- /*init_lis3();*/
+ init_lis3();
}
diff --git a/testhal/STM32F1xx/I2C/lis3.c b/testhal/STM32F1xx/I2C/lis3.c
index 17b1456ec..b8e9e86c7 100644
--- a/testhal/STM32F1xx/I2C/lis3.c
+++ b/testhal/STM32F1xx/I2C/lis3.c
@@ -51,6 +51,9 @@ static int16_t acceleration_z = 0;
* Init function. Here we will also start personal serving thread.
*/
int init_lis3(void){
+ msg_t status = RDY_OK;
+ systime_t tmo = MS2ST(4);
+
/* configure accelerometer */
accel_tx_data[0] = ACCEL_CTRL_REG1 | AUTO_INCREMENT_BIT; /* register address */
accel_tx_data[1] = 0b11100111;
@@ -59,8 +62,13 @@ int init_lis3(void){
/* sending */
i2cAcquireBus(&I2CD1);
- i2cMasterTransmit(&I2CD1, lis3_addr, accel_tx_data, 4, accel_rx_data, 0, &errors, TIME_INFINITE);
+ status = i2cMasterTransmitTimeout(&I2CD1, lis3_addr, accel_tx_data, 4, accel_rx_data, 0, tmo);
i2cReleaseBus(&I2CD1);
+
+ if (status != RDY_OK){
+ errors = i2cGetErrors(&I2CD1);
+ }
+
return 0;
}
@@ -68,11 +76,18 @@ int init_lis3(void){
*
*/
void request_acceleration_data(void){
+ msg_t status = RDY_OK;
+ systime_t tmo = MS2ST(4);
+
accel_tx_data[0] = ACCEL_OUT_DATA | AUTO_INCREMENT_BIT; /* register address */
i2cAcquireBus(&I2CD1);
- i2cMasterTransmit(&I2CD1, lis3_addr, accel_tx_data, 1, accel_rx_data, 6, &errors, TIME_INFINITE);
+ status = i2cMasterTransmitTimeout(&I2CD1, lis3_addr, accel_tx_data, 1, accel_rx_data, 6, tmo);
i2cReleaseBus(&I2CD1);
+ if (status != RDY_OK){
+ errors = i2cGetErrors(&I2CD1);
+ }
+
acceleration_x = accel_rx_data[0] + (accel_rx_data[1] << 8);
acceleration_y = accel_rx_data[2] + (accel_rx_data[3] << 8);
acceleration_z = accel_rx_data[4] + (accel_rx_data[5] << 8);
diff --git a/testhal/STM32F1xx/I2C/main.c b/testhal/STM32F1xx/I2C/main.c
index c4581ddf6..b779ae0b7 100644
--- a/testhal/STM32F1xx/I2C/main.c
+++ b/testhal/STM32F1xx/I2C/main.c
@@ -48,17 +48,17 @@ static msg_t Blink(void *arg) {
/*
* Accelerometer thread
*/
-/*static WORKING_AREA(PollAccelThreadWA, 256);
+static WORKING_AREA(PollAccelThreadWA, 256);
static msg_t PollAccelThread(void *arg) {
chRegSetThreadName("PollAccel");
(void)arg;
while (TRUE) {
- chThdSleepMilliseconds(rand() & 31);
+ /*chThdSleepMilliseconds(rand() & 31);*/
chThdSleepMilliseconds(32);
request_acceleration_data();
}
return 0;
-}*/
+}
/* Temperature polling thread */
@@ -103,11 +103,11 @@ int main(void) {
I2CInit_pns();
/* Create accelerometer thread */
- /*chThdCreateStatic(PollAccelThreadWA,
+ chThdCreateStatic(PollAccelThreadWA,
sizeof(PollAccelThreadWA),
NORMALPRIO,
PollAccelThread,
- NULL);*/
+ NULL);
/* Create temperature thread */
chThdCreateStatic(PollTmp75ThreadWA,