diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2024-11-23 21:52:11 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2024-11-23 21:52:11 +0800 |
| commit | 55966d2101ea7605f1e33bb1533a9debc0546121 (patch) | |
| tree | e8012e3db751d3f9a34eefc34c094cde4a8f508d | |
| parent | cbe4ea329552b9ca5eb35dccd5b180f7658781ce (diff) | |
| download | smart-home-55966d2101ea7605f1e33bb1533a9debc0546121.tar.gz | |
wip: move SPI code to rfm.c
| -rw-r--r-- | rf_test/Recv.Makefile | 2 | ||||
| -rw-r--r-- | rf_test/Send.Makefile | 2 | ||||
| -rw-r--r-- | rf_test/rfm.c | 57 | ||||
| -rw-r--r-- | rf_test/rfm.h | 2 | ||||
| -rw-r--r-- | rf_test/send.c | 2 | ||||
| -rw-r--r-- | rf_test/spi.c | 48 | ||||
| -rw-r--r-- | rf_test/spi.h | 12 |
7 files changed, 56 insertions, 69 deletions
diff --git a/rf_test/Recv.Makefile b/rf_test/Recv.Makefile index 535b2c0..bbf7a26 100644 --- a/rf_test/Recv.Makefile +++ b/rf_test/Recv.Makefile @@ -2,7 +2,7 @@ CC = avr-gcc MCU = atmega328p TARGET = recv -SRC = recv.c +SRC = rfm.c recv.c OBJ = $(SRC:.c=.o) CFLAGS = -std=gnu99 diff --git a/rf_test/Send.Makefile b/rf_test/Send.Makefile index a9aaeb0..c8c6b15 100644 --- a/rf_test/Send.Makefile +++ b/rf_test/Send.Makefile @@ -2,7 +2,7 @@ CC = avr-gcc MCU = atmega328p TARGET = send -SRC = send.c +SRC = rfm.c send.c OBJ = $(SRC:.c=.o) CFLAGS = -std=gnu99 diff --git a/rf_test/rfm.c b/rf_test/rfm.c index 1b88773..c48add4 100644 --- a/rf_test/rfm.c +++ b/rf_test/rfm.c @@ -1,9 +1,59 @@ +#include <avr/io.h> + #include "rfm.h" -#include "spi.h" + +#define SS_PIN PB2 +#define SS_DDR DDRB +#define SS_PORT PORTB + +#define SCK_PIN PB5 +#define MOSI_PIN PB3 +#define MISO_PIN PB4 + +#define SPI_DDR DDRB #define READ_MASK 0x7F #define WRITE_MASK 0x80 +static inline void spi_init(void) +{ + SS_DDR |= (1 << SS_PIN); + SS_PORT |= (1 << SS_PIN); + + SPI_DDR = (1 << MOSI_PIN) | (1 << SCK_PIN); + SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); +} + +static inline uint8_t spi_read(uint8_t addr) +{ + SS_PORT |= (1 << SS_PIN); + + SPDR = addr; + while (!(SPSR & (1 << SPIF))) + ; + + addr = SPDR; + + SS_PORT &= ~(1 << SS_PIN); + + return addr; +} + +static inline void spi_write(uint8_t addr, uint8_t data) +{ + SS_PORT |= (1 << SS_PIN); + + SPDR = addr; + while (!(SPSR & (1 << SPIF))) + ; + + SPDR = data; + while (!(SPSR & (1 << SPIF))) + ; + + SS_PORT &= ~(1 << SS_PIN); +} + static inline void send_cmd(uint8_t addr, uint8_t val) { uint8_t ra, wa; @@ -11,8 +61,8 @@ static inline void send_cmd(uint8_t addr, uint8_t val) ra = addr | READ_MASK; wa = addr | WRITE_MASK; - while (spi_recv(ra) != val) - spi_send(wa, val); + while (spi_read(ra) != val) + spi_write(wa, val); } void rfm_init(uint8_t addr) @@ -37,5 +87,4 @@ void rfm_init(uint8_t addr) void rfm_send(uint8_t addr, uint8_t data) { - } diff --git a/rf_test/rfm.h b/rf_test/rfm.h index d74dff7..ef64658 100644 --- a/rf_test/rfm.h +++ b/rf_test/rfm.h @@ -3,7 +3,7 @@ #include <stdint.h> -void rfm_init(void); +void rfm_init(uint8_t addr); void rfm_send(uint8_t addr, uint8_t data); diff --git a/rf_test/send.c b/rf_test/send.c index d0a27c7..97ebbcf 100644 --- a/rf_test/send.c +++ b/rf_test/send.c @@ -2,8 +2,6 @@ #include <avr/interrupt.h> #include <util/delay.h> -#include "spi.h" - #define LOCK_BTN PD6 #define UNLOCK_BTN PD7 diff --git a/rf_test/spi.c b/rf_test/spi.c deleted file mode 100644 index 282cdce..0000000 --- a/rf_test/spi.c +++ /dev/null @@ -1,48 +0,0 @@ -#include <avr/io.h> - -#include "spi.h" - -#define SS_PIN PB2 -#define SS_DDR DDRB -#define SS_PORT PORTB - -void spi_init(void) -{ - SS_DDR |= (1 << SS_PIN); - SS_PORT |= (1 << SS_PIN); - - DDR_SPI = (1 << DD_MOSI) | (1 << DD_SCK); - SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); -} - -uint8_t spi_send(uint8_t data) -{ - SS_PORT |= (1 << SS_PIN); - - SPDR = data; - while (!(SPSR & (1 << SPIF))) - ; - data = SPDR; - - SS_PORT &= ~(1 << SS_PIN); - - return data; -} - -uint8_t spi_send(uint8_t addr, uint8_t data) -{ - SS_PORT |= (1 << SS_PIN); - - SPDR = addr; - while (!(SPSR & (1 << SPIF))) - ; - - SPDR = data; - while (!(SPSR & (1 << SPIF))) - ; - - SS_PORT &= ~(1 << SS_PIN); - - return data; -} - diff --git a/rf_test/spi.h b/rf_test/spi.h deleted file mode 100644 index 220c08f..0000000 --- a/rf_test/spi.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef SPI_H -#define SPI_H - -#include <stdint.h> - -void spi_init(void); - -uint8_t spi_recv(uint8_t addr); - -uint8_t spi_send(uint8_t addr, data); - -#endif /* SPI_H */ |
