diff --git a/firmware/masterchip/spi_config.h b/firmware/masterchip/spi_config.h new file mode 100644 index 0000000..30e155c --- /dev/null +++ b/firmware/masterchip/spi_config.h @@ -0,0 +1,7 @@ + +#define SPI_BAUDRATE 1000000 +#ifdef SPI_MASTER +#undef SPI_MASTER +#endif //SPI_MASTER +//#define SPI_SS_PORT D +//#define SPI_SS_PIN 7 diff --git a/firmware/shared/spi.c b/firmware/shared/spi.c index e2dc977..bcf42c8 100644 --- a/firmware/shared/spi.c +++ b/firmware/shared/spi.c @@ -1,8 +1,12 @@ #include #include #include +#include + + #include "main.h" + #include uint16_t *spi_proto_globals8[] = { @@ -80,6 +84,10 @@ void spi_init(){ #endif SPSR = spsr; SPCR = spcr; + +#ifndef SPI_MASTER + SPCR |= _BV(SPIE); //enable interrupts +#endif } @@ -114,7 +122,7 @@ void spi_mst_read(uint8_t len, uint8_t *data){ -void spi_sla_handle_packet(){ +void __attribute__((always_inline)) spi_sla_handle_packet(){ // TODO: make slave not hangup in case of partial read uint8_t opcode, addr, do_write; uint16_t data; @@ -141,7 +149,13 @@ void spi_sla_handle_packet(){ } } - +#ifndef SPI_MASTER +ISR(SPI_vect){ + SPCR &= ~(_BV(SPIE)); //disable spi interrupts + spi_sla_handle_packet(); + SPCR |= _BV(SPIE); +} +#endif //not SPI_MASTER diff --git a/firmware/shared/spi.h b/firmware/shared/spi.h index f862524..51e7290 100644 --- a/firmware/shared/spi.h +++ b/firmware/shared/spi.h @@ -3,12 +3,7 @@ #include "spi_proto.h" -#define SPI_BAUDRATE 1000000 -#define SPI_MASTER 1 -#define SPI_READBUF_LEN 32 -#define SPI_SS_PORT D -#define SPI_SS_PIN 7 - +#include "spi_config.h" // copied/adapted from usbdrv.h diff --git a/firmware/slavechip/Makefile b/firmware/slavechip/Makefile index aef3d40..c59e510 100644 --- a/firmware/slavechip/Makefile +++ b/firmware/slavechip/Makefile @@ -24,7 +24,7 @@ flash: all avrdude -c usbasp -p m88 -U flash:w:firmware.hex fuses: - avrdude -c usbasp -p m88 -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U efuse:w:0xf9:m + avrdude -c usbasp -p m88 -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m ## what are the source dependencies diff --git a/firmware/slavechip/spi_config.h b/firmware/slavechip/spi_config.h new file mode 100644 index 0000000..08250e4 --- /dev/null +++ b/firmware/slavechip/spi_config.h @@ -0,0 +1,5 @@ + +#define SPI_BAUDRATE 1000000 +#define SPI_MASTER +#define SPI_SS_PORT D +#define SPI_SS_PIN 7