diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/spiblink/README.md | 18 | ||||
-rw-r--r-- | examples/spiblink/makefile | 30 | ||||
-rw-r--r-- | examples/spiblink/master.c | 20 | ||||
-rw-r--r-- | examples/spiblink/slave.c | 21 |
4 files changed, 89 insertions, 0 deletions
diff --git a/examples/spiblink/README.md b/examples/spiblink/README.md new file mode 100644 index 0000000..3b18a8f --- /dev/null +++ b/examples/spiblink/README.md @@ -0,0 +1,18 @@ +This example shows simple SPI communication. It uses two MCUs. One is configured +as master. Other is configured as slave. Master has button connected to its input +and slave has output led. Button status is mirrored by slave led. + +Connection +---------- +Both MCUs needs basic power connections and crystal. +Except of that, they need following other connections. + +| Mater pin | Slave pin | Other connections | Description | +|-----------|-----------|-------------------|----------------------| +| PB1 | | Led | Indication of button | +| | PB1 | Led | Receive led | +| PB2 | PB2 | | SS | +| PB3 | PB3 | | MOSI | +| PB4 | PB4 | | MISO | +| PB5 | PB5 | | SCL | +| PC1 | | Pull down button | Input button | diff --git a/examples/spiblink/makefile b/examples/spiblink/makefile new file mode 100644 index 0000000..a831f86 --- /dev/null +++ b/examples/spiblink/makefile @@ -0,0 +1,30 @@ +MAKEFLAGS += --no-builtin-rules + +MMCU = atmega328p +F_CPU = 16000000L +IOE_PREFIX = ../.. +IOE_CFLAGS ?= -Os -ffunction-sections -fdata-sections -fshort-enums -g -Wall + +.PHONY: all +all: master.hex slave.hex + @echo + @echo Flash master.hex and slave.hex to two chips and... TODO + +.PHONY: all +clean: ioeclean + $(RM) master.o slave.o + $(RM) master.elf master.hex + $(RM) slave.elf slave.hex + +include ../../avr-ioe.mk + +master.elf: master.o +slave.elf: slave.o +master.elf slave.elf: %.elf: $(IOE_OBJ_SPI) + avr-gcc -Os -mmcu=$(MMCU) $^ -o $@ + +master.hex slave.hex: %.hex: %.elf + avr-objcopy -O ihex -R .eeprom $< $@ + +master.o slave.o: %.o: %.c + avr-gcc $(IOE_CFLAGS) -c -o $@ $< diff --git a/examples/spiblink/master.c b/examples/spiblink/master.c new file mode 100644 index 0000000..267d7b2 --- /dev/null +++ b/examples/spiblink/master.c @@ -0,0 +1,20 @@ +#include <avr/io.h> +#include <util/delay.h> +#include "../../spi.h" + +int main() { + DDRB |= _BV(DDB1) | _BV(DDB2); + PORTC |= _BV(PORTC1); + spi_init(SPI_MODE_MASTER); + SREG |= _BV(7); + while (1) { + if (PINC & _BV(PINC1)) { + PORTB &= ~_BV(PORTB1); + } else { + PORTB |= _BV(PORTB1); + } + PORTB &= ~_BV(PORTB2); + spi_send(!(PINC & _BV(PINC1))); + PORTB |= _BV(PORTB2); + } +} diff --git a/examples/spiblink/slave.c b/examples/spiblink/slave.c new file mode 100644 index 0000000..cf14408 --- /dev/null +++ b/examples/spiblink/slave.c @@ -0,0 +1,21 @@ +#include <avr/io.h> +#include <util/delay.h> +#include "../../spi.h" + +void receive(uint8_t data); + +int main() { + DDRB |= _BV(DDB1); + spi_receive = receive; + spi_init(SPI_MODE_SLAVE); + SREG |= _BV(7); + while (1) { + } +} + +void receive(uint8_t data) { + if (data) + PORTB |= _BV(PORTB1); + else + PORTB &= ~_BV(PORTB1); +} |