From d162d1cfd2421509a8d6933cb93dd80ffeda9cf8 Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Tue, 3 Dec 2024 18:00:14 +0800 Subject: Move the rfm code to separate file. --- rf_test/send.c | 137 ++------------------------------------------------------- 1 file changed, 3 insertions(+), 134 deletions(-) (limited to 'rf_test/send.c') 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 #include +#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'); -} -- cgit v1.2.3