diff --git a/firmware/shared/spi.c b/firmware/shared/spi.c index 0e3954a..2077c82 100644 --- a/firmware/shared/spi.c +++ b/firmware/shared/spi.c @@ -8,7 +8,7 @@ #include "main.h" -#include +#include "spi.h" /* SPI framework. * diff --git a/firmware/slavechip/Makefile b/firmware/slavechip/Makefile index aff2bd3..29f0cb2 100644 --- a/firmware/slavechip/Makefile +++ b/firmware/slavechip/Makefile @@ -2,7 +2,7 @@ include ../Makefile.inc COMPILE = avr-gcc $(CFLAGS) $(DEFINES) -OBJECTS = main.o mcp_adc.o i2c_simple.o softtimer.o spi_proto.o spi.o spi_pointers.o +OBJECTS = main.o mcp_adc.o i2c_simple.o softtimer.o spi_proto.o spi.o spi_pointers.o muxer.o # symbolic targets: all: firmware.hex diff --git a/firmware/slavechip/main.c b/firmware/slavechip/main.c index f1172b2..1088cf1 100644 --- a/firmware/slavechip/main.c +++ b/firmware/slavechip/main.c @@ -1,5 +1,6 @@ #include "main.h" #include "spi.h" +#include "muxer.h" uint8_t foo; uint16_t bar; @@ -11,6 +12,17 @@ void baz() { foo++; } +/* pinout + * - i2c: + * C5 + * C4 + * - multiplexer: + * C3: inhibit + * C0-C2: muxer select + * + * + * amp 0 is on muxer channel 2 + */ void hardinit() { /* initializes the hardware */ @@ -22,6 +34,8 @@ void hardinit() { spi_init(); + muxer_init(); + sei(); } diff --git a/firmware/slavechip/muxer.c b/firmware/slavechip/muxer.c new file mode 100644 index 0000000..53fecd4 --- /dev/null +++ b/firmware/slavechip/muxer.c @@ -0,0 +1,16 @@ +#include "muxer.h" +#include + +void muxer_init(){ + DDRC |= (_BV(0)|_BV(1)|_BV(2)|_BV(3)); // conf as outputs + PORTC |= _BV(3); // inhibit +} + +void muxer_set(uint8_t channel){ + PORTC |= _BV(3); // engage inhibit + PORTC &= ~(0x07); //mask + PORTC |= channel & 0x07; //set + PORTC &= ~(_BV(3)); // disengage inhibit + //TODO: delays, check everything, mask in register +} + diff --git a/firmware/slavechip/muxer.h b/firmware/slavechip/muxer.h new file mode 100644 index 0000000..82d04b3 --- /dev/null +++ b/firmware/slavechip/muxer.h @@ -0,0 +1,6 @@ +//TODO:guards + +#include + +void muxer_init(); +void muxer_set(uint8_t channel);