summaryrefslogtreecommitdiffstats
path: root/rf_test/rfm.c
diff options
context:
space:
mode:
Diffstat (limited to 'rf_test/rfm.c')
-rw-r--r--rf_test/rfm.c57
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)
{
-
}