ATY_LIB V2_102_230218
ATY_LIB for general devices or ALGO
 
Loading...
Searching...
No Matches
nrf24l01.c
Go to the documentation of this file.
1// Copyright 2021 IOsetting <iosetting(at)outlook.com>
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#include "nrf24l01.h"
16
20
21const uint8_t TX_ADDRESS[NRF24_ADDR_WIDTH] = {0x32,0x4E,0x6F,0x64,0x22};
22const uint8_t RX_ADDRESS[NRF24_ADDR_WIDTH] = {0x32,0x4E,0x6F,0x64,0x65};
23
25{
26 NRF_CSN = 0;
27 xbuf[0] = reg;
28 xbuf[1] = value;
30 NRF_CSN = 1;
31}
32
34{
35 NRF_CSN = 0;
36 xbuf[0] = reg;
39 NRF_CSN = 1;
40 return xbuf[1];
41}
42
44{
45 NRF_CSN = 0;
47 xbuf[0] = reg;
48 SPI_TxRxBytes(xbuf, len + 1);
49 NRF_CSN = 1;
50}
51
52void NRF24L01_WriteFromBuf(uint8_t reg, const uint8_t *pBuf, uint8_t len)
53{
54 NRF_CSN = 0;
55 xbuf[0] = reg;
56 memcpy(xbuf_data, pBuf, len);
57 SPI_TxRxBytes(xbuf, len + 1);
58 NRF_CSN = 1;
59}
60
62{
63 uint8_t i;
64 for (i = 0; i < NRF24_PLOAD_WIDTH + 1; i++)
65 {
67 }
68 UART1_TxString("\r\n");
69}
70
75{
77}
78
83{
85}
86
87void NRF24L01_CheckFlag(uint8_t *tx_ds, uint8_t *max_rt, uint8_t *rx_dr)
88{
89 // Read the status & reset the status in one easy call
91 // Report to the user what happened
92 *tx_ds = xbuf[0] & NRF24_FLAG_TX_DSENT;
93 *max_rt = xbuf[0] & NRF24_FLAG_MAX_RT;
94 *rx_dr = xbuf[0] & NRF24_FLAG_RX_DREADY;
95}
96
98{
99 uint8_t pipe;
101 pipe = (xbuf[0] >> 1) & 0x07;
102 if (pipe > 5)
103 return 0;
104 // If the caller wants the pipe number, include that
105 if (pipe_num)
106 *pipe_num = pipe;
107
108 return 1;
109}
110
112{
113 uint8_t tx_ds, max_rt, rx_dr, pipe_num;
114 NRF24L01_CheckFlag(&tx_ds, &max_rt, &rx_dr);
115 if (NRF24L01_RxAvailable(&pipe_num) == 1)
116 {
119 }
120 UART1_TxHex(tx_ds);
121 UART1_TxChar(' ');
122 UART1_TxHex(max_rt);
123 UART1_TxChar(' ');
124 UART1_TxHex(rx_dr);
125 UART1_TxChar(' ');
126 UART1_TxHex(pipe_num);
127 UART1_TxString("\r\n");
129}
130
132{
133 NRF_CE = 0;
136 NRF_CE = 1;
137 SYS_Delay(10); // for reliable DS state when SETUP_RETR is 0x13
138 NRF_CE = 0;
140 NRF_CE = 1;
141}
142
143void NRF24L01_StartFastWrite(const void* pBuf)
144{
146 NRF_CE = 1;
147}
148
150{
151 //Blocking only if FIFO is full. This will loop and block until TX is successful or fail
153 if (xbuf[0] & NRF24_FLAG_MAX_RT) {
154 return 0;
155 }
156 }
158 return 1;
159}
160
162{
164 NRF_CE = 0;
165 NRF_CE = 1;
166}
167
169{
170 uint8_t i;
171 const uint8_t *ptr = (const uint8_t *)NRF24_TEST_ADDR;
174 for (i = 0; i < NRF24_ADDR_WIDTH; i++) {
175 UART1_TxHex(*(xbuf_data + i));
176 if (*(xbuf_data + i) != *ptr++) return 1;
177 }
178 return 0;
179}
180
182{
183 NRF_CE = 0;
194 switch (mode)
195 {
196 case NRF24_MODE_TX:
198 break;
199 case NRF24_MODE_RX:
200 default:
202 break;
203 }
204 NRF_CE = 1;
205}
value
Definition: DS18B20_ATY.c:216
void SPI_TxRxBytes(uint8_t *pBuf, uint8_t len)
Definition: fw_spi.c:28
void SYS_Delay(uint16_t t)
Definition: fw_sys.c:65
unsigned short uint16_t
Definition: fw_types.h:19
unsigned char uint8_t
Definition: fw_types.h:18
void UART1_TxChar(char dat)
Definition: fw_uart.c:72
void UART1_TxString(uint8_t *str)
Definition: fw_uart.c:85
void UART1_TxHex(uint8_t hex)
Definition: fw_uart.c:79
uint8_t __XDATA i
uint8_t * xbuf_data
Definition: nrf24l01.c:18
uint16_t NRF24L01_rxsn
Definition: nrf24l01.c:19
void NRF24L01_WriteReg(uint8_t reg, uint8_t value)
Definition: nrf24l01.c:24
uint8_t NRF24L01_WriteFast(const void *pBuf)
Definition: nrf24l01.c:149
const uint8_t TX_ADDRESS[NRF24_ADDR_WIDTH]
Definition: nrf24l01.c:21
uint8_t NRF24L01_ReadReg(uint8_t reg)
Definition: nrf24l01.c:33
void NRF24L01_Init(NRF24_MODE mode)
Definition: nrf24l01.c:181
void NRF24L01_ResetTX(void)
Definition: nrf24l01.c:161
void NRF24L01_PrintBuf(void)
Definition: nrf24l01.c:61
uint8_t NRF24L01_Check(void)
Definition: nrf24l01.c:168
uint8_t __IDATA xbuf[NRF24_PLOAD_WIDTH+1]
Definition: nrf24l01.c:17
const uint8_t RX_ADDRESS[NRF24_ADDR_WIDTH]
Definition: nrf24l01.c:22
void NRF24L01_FlushRX(void)
Definition: nrf24l01.c:74
void NRF24L01_WriteFromBuf(uint8_t reg, const uint8_t *pBuf, uint8_t len)
Definition: nrf24l01.c:52
void NRF24L01_Tx(uint8_t *pBuf)
Definition: nrf24l01.c:131
void NRF24L01_HandelIrqFlag(void)
Definition: nrf24l01.c:111
void NRF24L01_FlushTX(void)
Definition: nrf24l01.c:82
uint8_t NRF24L01_RxAvailable(uint8_t *pipe_num)
Definition: nrf24l01.c:97
void NRF24L01_ReadToBuf(uint8_t reg, uint8_t len)
Definition: nrf24l01.c:43
void NRF24L01_StartFastWrite(const void *pBuf)
Definition: nrf24l01.c:143
#define NRF24_REG_CONFIG
Definition: nrf24l01.h:46
#define NRF24_REG_RF_SETUP
Definition: nrf24l01.h:52
#define NRF24_TEST_ADDR
Definition: nrf24l01.h:102
#define NRF24_CMD_W_REGISTER
Definition: nrf24l01.h:31
#define NRF24_REG_EN_RXADDR
Definition: nrf24l01.h:48
#define NRF24_FLAG_MAX_RT
Definition: nrf24l01.h:81
#define NRF24_REG_RF_CH
Definition: nrf24l01.h:51
#define NRF24_ADDR_WIDTH
Definition: nrf24l01.h:100
#define NRF24_FLAG_RX_DREADY
Definition: nrf24l01.h:79
#define NRF_CE
Definition: nrf24l01.h:26
#define NRF24_CMD_NOP
Definition: nrf24l01.h:40
NRF24_MODE
Definition: nrf24l01.h:105
@ NRF24_MODE_TX
Definition: nrf24l01.h:107
@ NRF24_MODE_RX
Definition: nrf24l01.h:106
#define NRF24_REG_STATUS
Definition: nrf24l01.h:53
#define NRF24_FLAG_TX_DSENT
Definition: nrf24l01.h:80
#define NRF24_REG_EN_AA
Definition: nrf24l01.h:47
#define NRF24_CMD_R_REGISTER
Definition: nrf24l01.h:30
#define NRF24_REG_TX_ADDR
Definition: nrf24l01.h:62
#define NRF_CSN
Definition: nrf24l01.h:21
#define NRF24_REG_RX_ADDR_P0
Definition: nrf24l01.h:56
#define NRF24_REG_RX_PW_P1
Definition: nrf24l01.h:64
#define NRF24_FLAG_TX_FULL
Definition: nrf24l01.h:82
#define NRF24_REG_RX_ADDR_P1
Definition: nrf24l01.h:57
#define NRF24_REG_RX_PW_P0
Definition: nrf24l01.h:63
#define NRF24_CMD_FLUSH_RX
Definition: nrf24l01.h:35
#define NRF24_CMD_FLUSH_TX
Definition: nrf24l01.h:34
#define NRF24_CMD_R_RX_PAYLOAD
Definition: nrf24l01.h:32
#define NRF24_CMD_W_TX_PAYLOAD
Definition: nrf24l01.h:33
#define NRF24_REG_SETUP_RETR
Definition: nrf24l01.h:50
#define NRF24_PLOAD_WIDTH
Definition: nrf24l01.h:101
void NRF24L01_CheckFlag(void)
Definition: nrf24l01.c:87