summaryrefslogtreecommitdiffstats
path: root/rf_test/send.c
diff options
context:
space:
mode:
Diffstat (limited to 'rf_test/send.c')
-rw-r--r--rf_test/send.c137
1 files changed, 3 insertions, 134 deletions
diff --git a/rf_test/send.c b/rf_test/send.c
index 71e764b..5dea8f3 100644
--- a/rf_test/send.c
+++ b/rf_test/send.c
@@ -5,135 +5,16 @@
#include <avr/interrupt.h>
#include <util/delay.h>
+#include "radio.h"
#include "serial.h"
-#define SPI_SS PB2
-#define SPI_SCK PB5
-#define SPI_MISO PB4
-#define SPI_MOSI PB3
-#define SPI_DDR DDRB
-#define SPI_PORT PORTB
-
-#define RX_PIN PB0
-#define RX_DDR DDRB
-#define RX_PORT PORTB
-#define RX_PCIE PCIE0
-#define RX_PCINT PCINT0
-#define RX_PCMSK PCMSK0
-#define RX_PCINTVEC PCINT0_vect
-
-#define PAYLOAD_LEN 32
-
-static inline uint8_t read_reg(uint8_t reg)
-{
- SPI_PORT &= ~(1 << SPI_SS);
- SPDR = reg & 0x7F;
- while (!(SPSR & (1 << SPIF)))
- ;
- SPDR = 0;
- while (!(SPSR & (1 << SPIF)))
- ;
- SPI_PORT |= (1 << SPI_SS);
-
- return SPDR;
-}
-
-static inline void write_reg(uint8_t reg, uint8_t val)
-{
- SPI_PORT &= ~(1 << SPI_SS);
- SPDR = reg | 0x80;
- while (!(SPSR & (1 << SPIF)))
- ;
- SPDR = val;
- while (!(SPSR & (1 << SPIF)))
- ;
- SPI_PORT |= (1 << SPI_SS);
-}
-
-static inline void radio_send(const char *data, uint8_t n)
-{
- uint8_t i;
-
- // STDBY + ListenAbort mode
- write_reg(0x01, 0x04);
- while ((read_reg(0x27) >> 7) != 1)
- ;
-
- SPI_PORT &= ~(1 << SPI_SS);
- SPDR = 0x00 | 0x80;
- while (!(SPSR & (1 << SPIF)))
- ;
- for (i = 0; i < n; i++) {
- SPDR = data[i];
- while (!(SPSR & (1 << SPIF)))
- ;
- }
- SPI_PORT |= (1 << SPI_SS);
-
- write_reg(0x01, 0x0C);
- while (!read_reg(0x28))
- ;
-
- write_reg(0x01, 0x04);
- while ((read_reg(0x27) >> 7) != 1)
- ;
-
- // enable ListenOn in STDBY mode
- write_reg(0x01, (read_reg(0x01) | 0x40));
-}
-
-static inline uint8_t radio_recv(char *buf, uint8_t n)
-{
- uint8_t i;
-
- i = 0;
-
- if ((read_reg(0x28) & 0x04))
- {
- write_reg(0x01, 0x04);
- while ((read_reg(0x27) >> 7) != 1)
- ;
-
- SPI_PORT &= ~(1 << SPI_SS);
- SPDR = 0x00 | 0x7F;
- while (!(SPSR & (1 << SPIF)))
- ;
- while (i < n) {
- SPDR = 0;
- while (!(SPSR & (1 << SPIF)))
- ;
- buf[i++] = SPDR;
- }
-
- SPI_PORT |= (1 << SPI_SS);
- }
- return i;
-}
-
-struct radio_cfg {
- uint8_t payload_len;
-};
-
-static inline void radio_init(struct radio_cfg *cfg)
-{
- SPI_DDR |= (1 << SPI_SS) | (1 << SPI_SCK) | (1 << SPI_MOSI);
- SPI_PORT |= (1 << SPI_SS);
- SPCR |= (1 << SPE) | (1 << MSTR);
-
- if (cfg->payload_len > 0)
- write_reg(0x38, cfg->payload_len);
-
- RX_DDR &= ~(1 << RX_PIN);
- PCICR |= (1 << RX_PCIE);
- RX_PCMSK |= (1 << RX_PCINT);
-}
+#define PAYLOAD_LEN 13
int main(void)
{
struct radio_cfg cfg;
- const char *s = "hello";
-
+ const char *s = "hello, world!";
cfg.payload_len = PAYLOAD_LEN;
serial_init();
@@ -150,15 +31,3 @@ int main(void)
return 0;
}
-ISR(RX_PCINTVEC)
-{
- uint8_t i, n;
- char buf[PAYLOAD_LEN];
-
- n = radio_recv(buf, PAYLOAD_LEN);
-
- for (i = 0; i < n; i++)
- serial_write(buf[i]);
- serial_write('\r');
- serial_write('\n');
-}