diff options
Diffstat (limited to 'rf_test/rfm.c')
| -rw-r--r-- | rf_test/rfm.c | 57 |
1 files changed, 53 insertions, 4 deletions
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) { - } |
