Implement basic radio TX on fixed channel
radio_init() configures RADIO in NRF_1Mbit proprietary mode: 8-bit length field, 4-byte address (BASE0+PREFIX0), 2-byte CRC-16/CCITT, 0 dBm TX power, channel 20 (2420 MHz). READY->START and END->DISABLE shortcuts let radio_tx() trigger the full ramp-up/TX/disable sequence by writing TASKS_TXEN once, then polling EVENTS_END. main.c sends a fixed 4-byte test frame on every button press. FHSS and AES remain compiled but are not called. New bitfield unions in regs.h: radio_pcnf0_t, radio_pcnf1_t, radio_crccnf_t, radio_shorts_t.
This commit is contained in:
@@ -88,3 +88,67 @@ typedef union {
|
||||
#define RADIO_MODE_NRF_1MBIT 0u
|
||||
#define RADIO_MODE_NRF_2MBIT 1u
|
||||
#define RADIO_MODE_BLE_1MBIT 4u
|
||||
|
||||
/* PCNF0: packet configuration register 0 */
|
||||
typedef union {
|
||||
struct {
|
||||
uint32_t LFLEN : 4; /* [3:0] length of LENGTH field in bits */
|
||||
uint32_t : 4; /* [7:4] reserved */
|
||||
uint32_t S0LEN : 1; /* [8] length of S0 field in bytes (0 or 1) */
|
||||
uint32_t : 7; /* [15:9] reserved */
|
||||
uint32_t S1LEN : 4; /* [19:16] length of S1 field in bits */
|
||||
uint32_t S1INCL : 1; /* [20] include S1 field in RAM even if zero length */
|
||||
uint32_t : 3; /* [23:21] reserved */
|
||||
uint32_t PLEN : 1; /* [24] 0=8-bit preamble 1=16-bit preamble */
|
||||
uint32_t : 6; /* [30:25] reserved */
|
||||
uint32_t CRCINC : 1; /* [31] include CRC in LENGTH field */
|
||||
} bit;
|
||||
uint32_t reg;
|
||||
} radio_pcnf0_t;
|
||||
|
||||
/* PCNF1: packet configuration register 1 */
|
||||
typedef union {
|
||||
struct {
|
||||
uint32_t MAXLEN : 8; /* [7:0] maximum payload length in bytes */
|
||||
uint32_t STATLEN : 8; /* [15:8] static length added to payload */
|
||||
uint32_t BALEN : 3; /* [18:16] base address length (2-4 bytes) */
|
||||
uint32_t : 5; /* [23:19] reserved */
|
||||
uint32_t ENDIAN : 1; /* [24] 0=little-endian 1=big-endian */
|
||||
uint32_t WHITEEN : 1; /* [25] 1=enable data whitening */
|
||||
uint32_t : 6; /* [31:26] reserved */
|
||||
} bit;
|
||||
uint32_t reg;
|
||||
} radio_pcnf1_t;
|
||||
|
||||
/* CRCCNF: CRC configuration */
|
||||
typedef union {
|
||||
struct {
|
||||
uint32_t LEN : 2; /* [1:0] 0=disabled 1=1 byte 2=2 bytes 3=3 bytes */
|
||||
uint32_t : 6; /* [7:2] reserved */
|
||||
uint32_t SKIPADDR : 1; /* [8] 1=skip address field in CRC calculation */
|
||||
uint32_t : 23; /* [31:9] reserved */
|
||||
} bit;
|
||||
uint32_t reg;
|
||||
} radio_crccnf_t;
|
||||
|
||||
#define RADIO_CRCCNF_LEN_DISABLED 0u
|
||||
#define RADIO_CRCCNF_LEN_ONE 1u
|
||||
#define RADIO_CRCCNF_LEN_TWO 2u
|
||||
#define RADIO_CRCCNF_LEN_THREE 3u
|
||||
|
||||
/* SHORTS: shortcut register */
|
||||
typedef union {
|
||||
struct {
|
||||
uint32_t READY_START : 1; /* [0] READY -> TASKS_START */
|
||||
uint32_t END_DISABLE : 1; /* [1] END -> TASKS_DISABLE */
|
||||
uint32_t DISABLED_TXEN : 1; /* [2] DISABLED -> TASKS_TXEN */
|
||||
uint32_t DISABLED_RXEN : 1; /* [3] DISABLED -> TASKS_RXEN */
|
||||
uint32_t ADDRESS_RSSISTART : 1; /* [4] ADDRESS -> TASKS_RSSISTART */
|
||||
uint32_t END_START : 1; /* [5] END -> TASKS_START */
|
||||
uint32_t ADDRESS_BCSTART : 1; /* [6] ADDRESS -> TASKS_BCSTART */
|
||||
uint32_t : 1; /* [7] reserved */
|
||||
uint32_t DISABLED_RSSISTOP : 1; /* [8] DISABLED -> TASKS_RSSISTOP */
|
||||
uint32_t : 23; /* [31:9] reserved */
|
||||
} bit;
|
||||
uint32_t reg;
|
||||
} radio_shorts_t;
|
||||
|
||||
Reference in New Issue
Block a user