NRF24L+ STM8 Compatible Library
mirf.h
Go to the documentation of this file.
1 #ifndef MAIN_MIRF_H_
2 #define MAIN_MIRF_H_
3 #include "stm8s.h"
35 /* Memory Map */
36 #define CONFIG 0x00
37 #define EN_AA 0x01
38 #define EN_RXADDR 0x02
39 #define SETUP_AW 0x03
40 #define SETUP_RETR 0x04
41 #define RF_CH 0x05
42 #define RF_SETUP 0x06
43 #define STATUS 0x07
44 #define OBSERVE_TX 0x08
45 #define CD 0x09
46 #define RX_ADDR_P0 0x0A
47 #define RX_ADDR_P1 0x0B
48 #define RX_ADDR_P2 0x0C
49 #define RX_ADDR_P3 0x0D
50 #define RX_ADDR_P4 0x0E
51 #define RX_ADDR_P5 0x0F
52 #define TX_ADDR 0x10
53 #define RX_PW_P0 0x11
54 #define RX_PW_P1 0x12
55 #define RX_PW_P2 0x13
56 #define RX_PW_P3 0x14
57 #define RX_PW_P4 0x15
58 #define RX_PW_P5 0x16
59 #define FIFO_STATUS 0x17
60 #define DYNPD 0x1C
61 #define FEATURE 0x1D
62 
63 /* Bit Mnemonics */
64 #define MASK_RX_DR 6
65 #define MASK_TX_DS 5
66 #define MASK_MAX_RT 4
67 #define EN_CRC 3
68 #define CRCO 2
69 #define PWR_UP 1
70 #define PRIM_RX 0
71 #define ENAA_P5 5
72 #define ENAA_P4 4
73 #define ENAA_P3 3
74 #define ENAA_P2 2
75 #define ENAA_P1 1
76 #define ENAA_P0 0
77 #define ERX_P5 5
78 #define ERX_P4 4
79 #define ERX_P3 3
80 #define ERX_P2 2
81 #define ERX_P1 1
82 #define ERX_P0 0
83 #define AW 0
84 #define ARD 4
85 #define ARC 0
86 #define RF_DR_LOW 5
87 #define PLL_LOCK 4
88 #define RF_DR_HIGH 3
89 #define RF_PWR 1
90 #define LNA_HCURR 0
91 #define RX_DR 6
92 #define TX_DS 5
93 #define MAX_RT 4
94 #define RX_P_NO 1
95 #define TX_FULL 0
96 #define PLOS_CNT 4
97 #define ARC_CNT 0
98 #define TX_REUSE 6
99 #define FIFO_FULL 5
100 #define TX_EMPTY 4
101 #define RX_FULL 1
102 #define RX_EMPTY 0
103 
104 /* Instruction Mnemonics */
105 #define R_REGISTER 0x00
106 #define W_REGISTER 0x20
107 #define REGISTER_MASK 0x1F
108 #define R_RX_PAYLOAD 0x61
109 #define W_TX_PAYLOAD 0xA0
110 #define FLUSH_TX 0xE1
111 #define FLUSH_RX 0xE2
112 #define REUSE_TX_PL 0xE3
113 #define NOP 0xFF
114 
115 /* Non-P omissions */
116 #define LNA_HCURR 0
117 
118 /* P model memory Map */
119 #define RPD 0x09
120 #define W_TX_PAYLOAD_NO_ACK 0xB0
121 
122 /* P model bit Mnemonics */
123 #define RF_DR_LOW 5
124 #define RF_DR_HIGH 3
125 #define RF_PWR_LOW 1
126 #define RF_PWR_HIGH 2
127 
128 /* Device addrees length:3~5 bytes */
129 #define mirf_ADDR_LEN 5
130 
131 
132 /*
133  enable interrupt caused by RX_ spi_transaction_t SPITransaction;
134 
135  if (DataLength > 0)
136  {
137  memset(&SPITransaction, 0, sizeof(spi_transaction_t));
138  SPITransaction.length = DataLength * 8;
139  SPITransaction.tx_buffer = Dataout;
140  SPITransaction.rx_buffer = NULL;
141  spi_device_transmit(dev->_SPIHandle, &SPITransaction);
142  }
143 
144 
145 // #define mirf_CONFIG ((1<<EN_CRC) | (0<<CRCO) )
146 
147  enable interrupt caused by RX_DR.
148  disable interrupt caused by TX_DS.
149  enable interrupt caused by MAX_RT.
150  enable CRC and CRC data len=1
151  mirf_CONFIG == 00101000B
152 */
153 #define mirf_CONFIG ((1 << MASK_TX_DS) | (1 << EN_CRC) | (0 << CRCO))
154 
160 typedef enum
161 {
168 
174 typedef enum
175 {
180 
186 typedef enum
187 {
192 
193 void Nrf24_init();
194 bool spi_write_byte(uint8_t *Dataout, uint8_t DataLength);
195 bool spi_read_byte(uint8_t *Datain, uint8_t DataLength);
196 uint8_t spi_transfer(uint8_t address);
197 void spi_csnLow();
198 void spi_csnHi();
199 void Nrf24_config(bool *PTX);
200 ErrorStatus Nrf24_setRADDR(uint8_t *adr);
201 ErrorStatus Nrf24_setTADDR(uint8_t *adr);
202 void Nrf24_addRADDR(uint8_t pipe, uint8_t adr);
203 bool Nrf24_dataReady();
204 uint8_t Nrf24_getDataPipe();
205 bool Nrf24_isSend(int timeout, bool *PTX);
206 bool Nrf24_isSending(bool *PTX);
207 void Nrf24_send(uint8_t *value, bool *PTX);
208 bool Nrf24_rxFifoEmpty();
210 void Nrf24_getData(uint8_t *data);
211 uint8_t Nrf24_getStatus();
212 void Nrf24_configRegister(uint8_t reg, uint8_t value);
213 void Nrf24_readRegister(uint8_t reg, uint8_t *value, uint8_t len);
214 void Nrf24_writeRegister(uint8_t reg, uint8_t *value, uint8_t len);
215 void Nrf24_powerUpRx(bool *PTX);
216 void Nrf24_powerUpTx(bool *PTX);
217 void Nrf24_powerDown();
218 void Nrf24_SetOutputRF_PWR(uint8_t val);
219 void Nrf24_SetSpeedDataRates(uint8_t val);
220 void Nrf24_setRetransmitDelay(uint8_t val);
221 void Nrf24_ceHi();
222 void Nrf24_ceLow();
223 void Nrf24_flushRx();
224 
225 #endif /* MAIN_MIRF_H_ */
uint8_t Nrf24_getDataPipe()
Get pipe number for reading.
Definition: mirf.c:279
void spi_csnLow()
Set CSN Low.
Definition: mirf.c:163
void Nrf24_configRegister(uint8_t reg, uint8_t value)
Clocks only one byte into the given MiRF register.
Definition: mirf.c:317
void Nrf24_ceHi()
Set CE High.
Definition: mirf.c:483
bool spi_read_byte(uint8_t *Datain, uint8_t DataLength)
Reads data from MISO.
Definition: mirf.c:117
void Nrf24_powerUpTx(bool *PTX)
Sets the NRF to TX mode.
Definition: mirf.c:475
void Nrf24_getData(uint8_t *data)
Reads NRF payload bytes into data array.
Definition: mirf.c:296
void Nrf24_powerUpRx(bool *PTX)
Starts up the NRF to be RX, the default.
Definition: mirf.c:457
rf24_pa_dbm_e
Definition: mirf.h:161
@ RF24_PA_ERROR
Definition: mirf.h:166
@ RF24_PA_MIN
Definition: mirf.h:162
@ RF24_PA_LOW
Definition: mirf.h:163
@ RF24_PA_MAX
Definition: mirf.h:165
@ RF24_PA_HIGH
Definition: mirf.h:164
void Nrf24_SetOutputRF_PWR(uint8_t val)
Set TX Power.
Definition: mirf.c:501
bool spi_write_byte(uint8_t *Dataout, uint8_t DataLength)
This function writes data to MOSI. It checks if it is being used.
Definition: mirf.c:87
void Nrf24_config(bool *PTX)
This sends the necessary registers to the NRF. Initially on RX mode.
Definition: mirf.c:169
bool Nrf24_isSending(bool *PTX)
Test if chip is still sending. When sending has finished return chip to listening.
Definition: mirf.c:385
bool Nrf24_dataReady()
Checks if data is available for reading.
Definition: mirf.c:265
void Nrf24_powerDown()
Power down the NRF.
Definition: mirf.c:493
rf24_datarate_e
Definition: mirf.h:175
@ RF24_2MBPS
Definition: mirf.h:177
@ RF24_250KBPS
Definition: mirf.h:178
@ RF24_1MBPS
Definition: mirf.h:176
uint8_t Nrf24_getStatus()
Get the status of the NRF.
Definition: mirf.c:449
void spi_csnHi()
Set CSN High.
Definition: mirf.c:158
ErrorStatus Nrf24_setTADDR(uint8_t *adr)
Sets the transmitting device address.
Definition: mirf.c:208
void Nrf24_writeRegister(uint8_t reg, uint8_t *value, uint8_t len)
Writes an array of bytes into inte the MiRF registers.
Definition: mirf.c:344
bool Nrf24_isSend(int timeout, bool *PTX)
Test if Sending has finished or retry is over.
Definition: mirf.c:406
void Nrf24_addRADDR(uint8_t pipe, uint8_t adr)
Add more device addresses to recieve (NOT TESTED).
Definition: mirf.c:228
void Nrf24_setRetransmitDelay(uint8_t val)
Set Auto Retransmit Delay.
Definition: mirf.c:541
void Nrf24_init()
This function initializes the CE/CS Pins and SPI.
Definition: mirf.c:52
void Nrf24_send(uint8_t *value, bool *PTX)
Sends a data package to the default address. Be sure to send the correct amount of bytes as configure...
Definition: mirf.c:355
uint8_t spi_transfer(uint8_t address)
An SPI "transfer", used in this library to simply send an address or command to the NRF.
Definition: mirf.c:144
void Nrf24_ceLow()
Set CE Low.
Definition: mirf.c:488
ErrorStatus Nrf24_setRADDR(uint8_t *adr)
Sets the recieving address (5) bytes!
Definition: mirf.c:184
void Nrf24_SetSpeedDataRates(uint8_t val)
Select between the high speed data rates.
Definition: mirf.c:516
bool Nrf24_rxFifoEmpty()
Checks if FIFO is empty.
Definition: mirf.c:287
void Nrf24_readRegister(uint8_t reg, uint8_t *value, uint8_t len)
Reads an array of bytes from the given start position in the MiRF registers.
Definition: mirf.c:330
rf24_crclength_e
Definition: mirf.h:187
@ RF24_CRC_16
Definition: mirf.h:190
@ RF24_CRC_DISABLED
Definition: mirf.h:188
@ RF24_CRC_8
Definition: mirf.h:189
bool Nrf24_txFifoEmpty()
void Nrf24_flushRx()
Flushes RX FIFO.
Definition: mirf.c:467