diff --git a/firmware/Makefile b/firmware/Makefile index a8fbe3f..4493978 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -4,7 +4,7 @@ CFLAGS += -std=gnu99 # implements C99, for # this removes dead code and does global linker optimization #CFLAGS += -ffunction-sections -Wl,--gc-sections -Wl,--relax -OBJECTS = usbdrv/usbdrvasm.o usbdrv/usbdrv.o main.o display.o lcd/lcd.o mcp_adc.o +OBJECTS = usbdrv/usbdrvasm.o usbdrv/usbdrv.o main.o display.o lcd/lcd.o mcp_adc.o i2c_simple.o diff --git a/firmware/i2c_simple.c b/firmware/i2c_simple.c new file mode 100644 index 0000000..f946064 --- /dev/null +++ b/firmware/i2c_simple.c @@ -0,0 +1,23 @@ + +#include + +#include "i2c_simple.h" + + + +void i2c_init(){ + //TODO: implement +} + +uint8_t i2c_read(uint8_t addr, uint8_t len, uint8_t *data){ + return 0; //TODO: implement +} + +uint8_t i2c_write(uint8_t addr, uint8_t len, uint8_t *data){ + return 0; //TODO: implement +} + +uint8_t i2c_write_read(uint8_t addr, uint8_t writelen, uint8_t* writedata, uint8_t readlen, + uint8_t* readdata){ + return 0; //TODO: implement +} diff --git a/firmware/i2c_simple.h b/firmware/i2c_simple.h new file mode 100644 index 0000000..c7aee5f --- /dev/null +++ b/firmware/i2c_simple.h @@ -0,0 +1,17 @@ + + + + + +/* initializes i2c interface (master, 400kHz) */ +void i2c_init(); + +/* reads len bytes from the i2c device addr into data */ +uint8_t i2c_read(uint8_t addr, uint8_t len, uint8_t *data); + +/* writes to an i2c device */ +uint8_t i2c_write(uint8_t addr, uint8_t len, uint8_t *data); + +/* writes, followed by a repeated start and a read */ +uint8_t i2c_write_read(uint8_t addr, uint8_t writelen, uint8_t* writedata, uint8_t readlen, + uint8_t* readdata); diff --git a/firmware/mcp_adc.c b/firmware/mcp_adc.c index 04e0f83..d6d04cb 100644 --- a/firmware/mcp_adc.c +++ b/firmware/mcp_adc.c @@ -1,5 +1,9 @@ #include +#include "i2c_simple.h" + +#include "mcp_adc.h" + /* analog digital converter * scratchpad * @@ -43,7 +47,7 @@ int32_t mcpadc_get_data() value = (value << 16) | (r[0] << 8) | r[1];/*endianess ???*/ if((uint8_t) r[3] & ADC_BITS_MASK == ADC_BITS_18) { - value = (value << 8) | r[3]; + value = (value << 8) | r[2]; } return value; } @@ -52,7 +56,7 @@ int16_t mcpadc_get_data() { i2c_read(ADC_ADDR, 2, r);/* this will NOT work in 18 bit mode */ int16_t value = (r[0] << 8) | r[1];/*endianess ???*/ - return r; + return value; } #endif