diff options
| -rw-r--r-- | nrfm.c | 28 | ||||
| -rw-r--r-- | recv.c | 16 |
2 files changed, 25 insertions, 19 deletions
@@ -212,7 +212,7 @@ void radio_init(const uint8_t rxaddr[ADDRLEN]) write_reg(0x05, 0b01110011); /* use 2.515GHz channel */ write_reg(0x06, 0b00001110); /* set data rate to 1Mbps */ write_reg(0x1D, 0b00000100); /* enable dynamic payload length */ - write_reg(0x1C, 0b00000001); /* enable dynamic payload length for pipe 0 */ + write_reg(0x1C, 0b00111111); /* enable dynamic payload length for all pipes */ reset_irqs(); setaddr(0x0A, rxaddr); @@ -287,24 +287,28 @@ void radio_listen(void) uint8_t radio_recv(char *buf, uint8_t n) { + char s[5]; uint8_t rxdr, readlen, pdlen, maxlen; + pdlen = 0; disable_chip(); - rxdr = read_reg(0x07) & ~(1 << 6); - if (!rxdr) { - uart_write_line("ERROR: RX_DR=0, abort read"); - return 0; - } - pdlen = rx_pdlen(); - if (pdlen > MAXPDLEN) { + if (pdlen == 0) { flush_rx(); reset_irqs(); - uart_write_line("ERROR: PDLEN > MAXPDLEN, abort read"); + uart_write_line("ERROR: PDLEN = 0, abort read"); return 0; } + // for some reason, PDLEN reads as 64 causing the below check to fail + //if (pdlen > MAXPDLEN) { + // flush_rx(); + // reset_irqs(); + // uart_write_line("ERROR: PDLEN > MAXPDLEN, abort read"); + // return 0; + //} + maxlen = pdlen < n ? pdlen : n; SPI_PORT &= ~(1 << SPI_SS); @@ -319,9 +323,9 @@ uint8_t radio_recv(char *buf, uint8_t n) } SPI_PORT |= (1 << SPI_SS); - if (pdlen != n) - flush_rx(); + flush_rx(); reset_irqs(); - + enable_chip(); + return readlen; } @@ -1,6 +1,7 @@ #include <stdint.h> #include <string.h> #include <avr/interrupt.h> +#include <util/delay.h> #include "nrfm.h" #include "uart.h" @@ -36,14 +37,17 @@ int main(void) for (;;) { if (rxdr) { + uart_write_line("IRQ recv, reading data"); n = radio_recv(buf, MAXPDLEN); buf[n] = '\0'; rxdr = 0; - uart_write("INFO: "); - uart_write_line(buf); - - radio_listen(); - sei(); + if (n > 0) { + uart_write("INFO: "); + uart_write_line(buf); + } + } else { + uart_write_line("No IRQ"); + _delay_ms(2000); } } @@ -52,7 +56,5 @@ int main(void) ISR(RX_PCINTVEC) { - cli(); - uart_write_line("IRQ detected"); rxdr = 1; } |
