Add few prints for I2C debug

pull/3290/head
Laurent MEUNIER 2016-10-20 17:57:48 +02:00 committed by Anna Bridge
parent 8a2df8cd53
commit 2cf044dce5
1 changed files with 29 additions and 4 deletions

View File

@ -37,6 +37,17 @@
#include "pinmap.h" #include "pinmap.h"
#include "PeripheralPins.h" #include "PeripheralPins.h"
#ifndef DEBUG_STDIO
# define DEBUG_STDIO 0
#endif
#if DEBUG_STDIO
# include <stdio.h>
# define DEBUG_PRINTF(...) do { printf(__VA_ARGS__); } while(0)
#else
# define DEBUG_PRINTF(...) {}
#endif
/* Timeout values are based on core clock and I2C clock. /* Timeout values are based on core clock and I2C clock.
The BYTE_TIMEOUT is computed as twice the number of cycles it would The BYTE_TIMEOUT is computed as twice the number of cycles it would
take to send 10 bits over I2C. Most Flags should take less than that. take to send 10 bits over I2C. Most Flags should take less than that.
@ -378,11 +389,14 @@ int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) {
} }
if((timeout == 0) || (obj_s->event != I2C_EVENT_TRANSFER_COMPLETE)) { if((timeout == 0) || (obj_s->event != I2C_EVENT_TRANSFER_COMPLETE)) {
DEBUG_PRINTF(" TIMEOUT or error in i2c_read\r\n");
/* re-init IP to try and get back in a working state */ /* re-init IP to try and get back in a working state */
i2c_init(obj, obj_s->sda, obj_s->scl); i2c_init(obj, obj_s->sda, obj_s->scl);
} else { } else {
count = length; count = length;
} }
} else {
DEBUG_PRINTF("ERROR in i2c_read\r\n");
} }
return count; return count;
@ -420,11 +434,14 @@ int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop) {
} }
if((timeout == 0) || (obj_s->event != I2C_EVENT_TRANSFER_COMPLETE)) { if((timeout == 0) || (obj_s->event != I2C_EVENT_TRANSFER_COMPLETE)) {
DEBUG_PRINTF(" TIMEOUT or error in i2c_write\r\n");
/* re-init IP to try and get back in a working state */ /* re-init IP to try and get back in a working state */
i2c_init(obj, obj_s->sda, obj_s->scl); i2c_init(obj, obj_s->sda, obj_s->scl);
} else { } else {
count = length; count = length;
} }
} else {
DEBUG_PRINTF("ERROR in i2c_read\r\n");
} }
return count; return count;
@ -623,8 +640,11 @@ int i2c_slave_read(i2c_t *obj, char *data, int length) {
wait_us(1); wait_us(1);
} }
if(timeout != 0) if(timeout != 0) {
count = length; count = length;
} else {
DEBUG_PRINTF("TIMEOUT or error in i2c_slave_read\r\n");
}
} }
return count; return count;
@ -646,8 +666,11 @@ int i2c_slave_write(i2c_t *obj, const char *data, int length) {
wait_us(1); wait_us(1);
} }
if(timeout != 0) if(timeout != 0) {
count = length; count = length;
} else {
DEBUG_PRINTF("TIMEOUT or error in i2c_slave_write\r\n");
}
} }
return count; return count;
@ -694,6 +717,8 @@ void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c){
i2c_t *obj = get_i2c_obj(hi2c); i2c_t *obj = get_i2c_obj(hi2c);
struct i2c_s *obj_s = I2C_S(obj); struct i2c_s *obj_s = I2C_S(obj);
DEBUG_PRINTF("HAL_I2C_ErrorCallback:%d, index=%d\r\n", (int) hi2c->ErrorCode, obj_s->index);
/* re-init IP to try and get back in a working state */ /* re-init IP to try and get back in a working state */
i2c_init(obj, obj_s->sda, obj_s->scl); i2c_init(obj, obj_s->sda, obj_s->scl);