ATY_LIB V2_102_230218
ATY_LIB for general devices or ALGO
 
Loading...
Searching...
No Matches
xl2400.c File Reference
#include "xl2400.h"

Go to the source code of this file.

Functions

void XL2400_WriteByte (uint8_t value)
 
uint8_t XL2400_ReadByte (void)
 
void XL2400_WriteReg (uint8_t reg, uint8_t value)
 
uint8_t XL2400_ReadReg (uint8_t reg)
 
void XL2400_WriteFromBuf (uint8_t reg, const uint8_t *pBuf, uint8_t len)
 
void XL2400_ReadToBuf (uint8_t reg, uint8_t *pBuf, uint8_t len)
 
void XL2400_CE_Low (void)
 
void XL2400_CE_High (void)
 
uint8_t XL2400_SPI_Test (void)
 
void XL2400_Init (void)
 
void XL2400_SetChannel (uint8_t channel)
 
void XL2400_SetTxAddress (uint8_t *address)
 
void XL2400_SetRxAddress (uint8_t *address)
 
void XL2400_SetPower (uint8_t power)
 
void XL2400_Sleep (void)
 
void XL2400_WakeUp (void)
 
uint8_t XL2400_RxCalibrate (void)
 
void XL2400_SetTxMode (void)
 
void XL2400_SetRxMode (void)
 
uint8_t XL2400_Tx (uint8_t *ucPayload, uint8_t length)
 
uint8_t XL2400_Rx (void)
 
uint8_t XL2400_ReadStatus (void)
 
void XL2400_ClearStatus (void)
 
void XL2400_FlushRxTX (void)
 
void XL2400_CarrierTest (void)
 
uint8_t XL2400_PrintStatus (void)
 

Variables

__IDATA uint8_t cbuf [2]
 
__IDATA uint8_t xbuf [XL2400_PL_WIDTH_MAX+1]
 

Function Documentation

◆ XL2400_CarrierTest()

void XL2400_CarrierTest ( void  )

Definition at line 343 of file xl2400.c.

344{
347 *(xbuf + 12) |= 0x40;
348 *(xbuf + 4) &= ~0x04;
351 *(xbuf + 0) = 0x01;
352 *(xbuf + 1) = 0x00;
355}
void XL2400_WriteReg(uint8_t reg, uint8_t value)
Definition: xl2400.c:72
void XL2400_WriteFromBuf(uint8_t reg, const uint8_t *pBuf, uint8_t len)
Definition: xl2400.c:90
void XL2400_CE_Low(void)
Definition: xl2400.c:114
void XL2400_ReadToBuf(uint8_t reg, uint8_t *pBuf, uint8_t len)
Definition: xl2400.c:102
__IDATA uint8_t xbuf[XL2400_PL_WIDTH_MAX+1]
Definition: xl2400.c:17
void XL2400_ClearStatus(void)
Definition: xl2400.c:330
#define XL2400_REG_TXPROC_CFG
Definition: xl2400.h:83
#define XL2400_REG_ANALOG_CFG0
Definition: xl2400.h:77
#define XL2400_CMD_R_REGISTER
Definition: xl2400.h:43
#define XL2400_CMD_W_REGISTER
Definition: xl2400.h:44
#define XL2400_REG_RF_SETUP
Definition: xl2400.h:65

◆ XL2400_CE_High()

void XL2400_CE_High ( void  )

Definition at line 121 of file xl2400.c.

122{
124 *(cbuf + 1) |= 0x40;
126}
__IDATA uint8_t cbuf[2]
Definition: xl2400.c:17
#define XL2400_REG_CFG_TOP
Definition: xl2400.h:59

◆ XL2400_CE_Low()

void XL2400_CE_Low ( void  )

Definition at line 114 of file xl2400.c.

◆ XL2400_ClearStatus()

void XL2400_ClearStatus ( void  )

Definition at line 330 of file xl2400.c.

331{
335}
#define XL2400_CMD_FLUSH_TX
Definition: xl2400.h:47
#define XL2400_CMD_FLUSH_RX
Definition: xl2400.h:48
#define XL2400_CMD_NOP
Definition: xl2400.h:56
#define XL2400_REG_STATUS
Definition: xl2400.h:66

◆ XL2400_FlushRxTX()

void XL2400_FlushRxTX ( void  )

◆ XL2400_Init()

void XL2400_Init ( void  )

Definition at line 141 of file xl2400.c.

142{
143 // Analog config
145 *(xbuf + 4) &= ~0x04;
146 *(xbuf + 12) |= 0x40;
148 // Switch to software CE control, wake up RF
150 // Enable Auto ACK Pipe 0
152 // Enable Pipe 0
154 // Address Width, 5 bytes
156 // Retries and interval
158 // RF Data Rate 1Mbps
160 // Number of bytes in RX payload, pipe 0 and pipe 1
161 *(cbuf + 0) = XL2400_PLOAD_WIDTH;
162 *(cbuf + 1) = XL2400_PLOAD_WIDTH;
164 // Dynamic payload width: off
166 // Other features
167 //bit7&6=00 return status when send register address
168 //bit5=0 long data pack off
169 //bit4=1 FEC off
170 //bit3=1 FEATURE on
171 //bit2=0 Dynamic length off
172 //bit1=0 ACK without payload
173 //bit0=0 W_TX_PAYLOAD_NOACK off
175 // Enable RSSI
176 *(cbuf + 0) = 0x10;
177 *(cbuf + 1) = 0x00;
179}
void XL2400_WakeUp(void)
Definition: xl2400.c:226
#define XL2400_REG_EN_RXADDR
Definition: xl2400.h:61
#define XL2400_REG_DYNPD
Definition: xl2400.h:85
#define XL2400_REG_FEATURE
Definition: xl2400.h:86
#define XL2400_PLOAD_WIDTH
Definition: xl2400.h:25
#define XL2400_REG_RSSI
Definition: xl2400.h:68
#define XL2400_REG_SETUP_RETR
Definition: xl2400.h:63
#define XL2400_REG_SETUP_AW
Definition: xl2400.h:62
#define XL2400_REG_EN_AA
Definition: xl2400.h:60
#define XL2400_REG_RX_PW_PX
Definition: xl2400.h:76

◆ XL2400_PrintStatus()

uint8_t XL2400_PrintStatus ( void  )

Definition at line 357 of file xl2400.c.

358{
359 uint8_t i, status;
360
361 UART1_TxString("Bytes from low to high: 0,1,2,3,...\r\n[Config]");
363 for (i = 0; i < 3; i++) {
364 UART1_TxHex(*(xbuf + i));
365 }
366
367 UART1_TxString(" [EN_AA]");
369
370 UART1_TxString(" [EN_RxAddr]");
372
373 UART1_TxString(" [AddrWidth]");
375
376 UART1_TxString(" [Retry]");
378 for (i = 0; i < 4; i++) {
379 UART1_TxHex(*(xbuf + i));
380 }
381
382 UART1_TxString("\r\n[RF_Channel]");
384 for (i = 0; i < 3; i++) {
385 UART1_TxHex(*(xbuf + i));
386 }
387
388 UART1_TxString(" [RF_Setup]");
390 for (i = 0; i < 2; i++) {
391 UART1_TxHex(*(xbuf + i));
392 }
393
394 UART1_TxString(" [Observe_Tx]");
396 for (i = 0; i < 4; i++) {
397 UART1_TxHex(*(xbuf + i));
398 }
399
400 UART1_TxString(" [RSSI]");
402 for (i = 0; i < 2; i++) {
403 UART1_TxHex(*(xbuf + i));
404 }
405
406 UART1_TxString("\r\n[TxAddr] ");
408 for (i = 0; i < 5; i++) {
409 UART1_TxHex(*(xbuf + i));
410 }
411
412 UART1_TxString("\r\n[RxAddrP0]");
414 for (i = 0; i < 5; i++) {
415 UART1_TxHex(*(xbuf + i));
416 }
417 UART1_TxString(" [RxAddrP1]");
419 for (i = 0; i < 5; i++) {
420 UART1_TxHex(*(xbuf + i));
421 }
422 UART1_TxString(" [RxAddrP2-P5]");
424 for (i = 0; i < 4; i++) {
425 UART1_TxHex(*(xbuf + i));
426 }
427
428 UART1_TxString("\r\n[RxPloadWidth_P0-P5]");
430 for (i = 0; i < 6; i++) {
431 UART1_TxHex(*(xbuf + i));
432 }
433
434 UART1_TxString("\r\n[FIFO_Status]");
436 for (i = 0; i < 3; i++) {
437 UART1_TxHex(*(xbuf + i));
438 }
439 UART1_TxString(" [DynPloadWidth]");
441 UART1_TxString(" [Feature]");
443
444 status = XL2400_ReadStatus();
445 UART1_TxString("\r\n[Status]");
446 UART1_TxHex(status);
447 UART1_TxString("\r\n\r\n");
448 return status;
449}
unsigned char uint8_t
Definition: fw_types.h:18
void UART1_TxString(uint8_t *str)
Definition: fw_uart.c:85
void UART1_TxHex(uint8_t hex)
Definition: fw_uart.c:79
uint8_t XL2400_ReadStatus(void)
Definition: xl2400.c:325
uint8_t XL2400_ReadReg(uint8_t reg)
Definition: xl2400.c:80
#define XL2400_REG_RF_CH
Definition: xl2400.h:64
#define XL2400_REG_RX_ADDR_P0
Definition: xl2400.h:69
#define XL2400_REG_OBSERVE_TX
Definition: xl2400.h:67
#define XL2400_REG_FIFO_STATUS
Definition: xl2400.h:81
#define XL2400_REG_RX_ADDR_P1
Definition: xl2400.h:70
#define XL2400_REG_RX_ADDR_P2_P5
Definition: xl2400.h:71
#define XL2400_REG_TX_ADDR
Definition: xl2400.h:75
uint8_t __XDATA i

◆ XL2400_ReadByte()

uint8_t XL2400_ReadByte ( void  )

Emulate SPI Read on GPIO pins

Definition at line 48 of file xl2400.c.

49{
50 uint8_t i = 0, RxData;
51
54 for (i = 0; i < 8; i++)
55 {
56 RxData = RxData << 1;
58 if (XL2400_DATA_READ())
59 {
60 RxData |= 0x01;
61 }
62 else
63 {
64 RxData &= 0xfe;
65 }
67 }
69 return RxData;
70}
#define XL2400_CLK_HIGH()
Definition: xl2400.h:34
#define XL2400_DATA_IN()
Definition: xl2400.h:28
#define XL2400_CLK_LOW()
Definition: xl2400.h:33
#define XL2400_DATA_READ()
Definition: xl2400.h:31

◆ XL2400_ReadReg()

uint8_t XL2400_ReadReg ( uint8_t  reg)

Definition at line 80 of file xl2400.c.

81{
82 uint8_t reg_val;
85 reg_val = XL2400_ReadByte();
87 return reg_val;
88}
void XL2400_WriteByte(uint8_t value)
Definition: xl2400.c:23
uint8_t XL2400_ReadByte(void)
Definition: xl2400.c:48
#define XL2400_NSS_LOW()
Definition: xl2400.h:36
#define XL2400_NSS_HIGH()
Definition: xl2400.h:37

◆ XL2400_ReadStatus()

uint8_t XL2400_ReadStatus ( void  )

Definition at line 325 of file xl2400.c.

◆ XL2400_ReadToBuf()

void XL2400_ReadToBuf ( uint8_t  reg,
uint8_t pBuf,
uint8_t  len 
)

Definition at line 102 of file xl2400.c.

103{
104 uint8_t ctr;
106 XL2400_WriteByte(reg);
107 for (ctr = 0; ctr < len; ctr++)
108 {
109 pBuf[ctr] = XL2400_ReadByte();
110 }
112}

◆ XL2400_Rx()

uint8_t XL2400_Rx ( void  )

Definition at line 306 of file xl2400.c.

307{
308 uint8_t i, status, rxplWidth;
309 status = XL2400_ReadStatus();
310 if (status & RX_DR_FLAG)
311 {
316 // UART1_TxChar('>');
317 // for (i = 0; i < rxplWidth; i++)
318 // {
319 // UART1_TxHex(*(xbuf + i));
320 // }
321 }
322 return status;
323}
#define XL2400_CMD_R_RX_PAYLOAD
Definition: xl2400.h:45
#define RX_DR_FLAG
Definition: xl2400.h:111
#define XL2400_CMD_R_RX_PL_WID
Definition: xl2400.h:53

◆ XL2400_RxCalibrate()

uint8_t XL2400_RxCalibrate ( void  )

Definition at line 236 of file xl2400.c.

237{
238 uint8_t i, j;
239 for (i = 0; i < 10; i++)
240 {
241 SYS_Delay(2);
243 *(cbuf + 1) |= 0x90;
244 *(cbuf + 1) &= ~0x20;
246 *(cbuf + 1) |= 0x40;
248 SYS_Delay(1);
250
251 if (*(cbuf + 1) & 0x20)
252 {
253 j = *(cbuf + 1) << 3;
255 *(cbuf + 1) &= 0x8F;
256 *(cbuf + 1) |= 0x20;
257 *(cbuf + 0) &= 0x07;
258 *(cbuf + 0) |= j;
260 return HAL_OK;
261 }
262 }
263 return HAL_ERROR;
264}
void SYS_Delay(uint16_t t)
Definition: fw_sys.c:65
@ HAL_ERROR
Definition: fw_types.h:77
@ HAL_OK
Definition: fw_types.h:76
#define XL2400_REG_ANALOG_CFG3
Definition: xl2400.h:80

◆ XL2400_SetChannel()

void XL2400_SetChannel ( uint8_t  channel)

Definition at line 181 of file xl2400.c.

182{
183 if (channel > 80) channel = 80;
184 // AFC reset
186 // AFC on
188 // Frequency(MHz) 2400:0x960 -> 2480:0x9B0
189 *(cbuf + 0) = 0x60 + channel;
190 *(cbuf + 1) = 0x09;
192 // AFC Locked
193 *(cbuf + 1) |= 0x20;
195}

◆ XL2400_SetPower()

void XL2400_SetPower ( uint8_t  power)

Definition at line 208 of file xl2400.c.

◆ XL2400_SetRxAddress()

void XL2400_SetRxAddress ( uint8_t address)

Definition at line 203 of file xl2400.c.

◆ XL2400_SetRxMode()

void XL2400_SetRxMode ( void  )

Definition at line 275 of file xl2400.c.

276{
280 // XL2400_RxCalibrate();
282 SYS_Delay(1);
283}
void XL2400_CE_High(void)
Definition: xl2400.c:121

◆ XL2400_SetTxAddress()

void XL2400_SetTxAddress ( uint8_t address)

Definition at line 197 of file xl2400.c.

◆ XL2400_SetTxMode()

void XL2400_SetTxMode ( void  )

Definition at line 266 of file xl2400.c.

267{
272 SYS_Delay(2);
273}
uint8_t XL2400_RxCalibrate(void)
Definition: xl2400.c:236

◆ XL2400_Sleep()

void XL2400_Sleep ( void  )

Definition at line 215 of file xl2400.c.

216{
219
220 *(xbuf + 0) = 0x7C;
221 *(xbuf + 1) = 0x82;
222 *(xbuf + 2) = 0x03;
224}

◆ XL2400_SPI_Test()

uint8_t XL2400_SPI_Test ( void  )

Definition at line 128 of file xl2400.c.

129{
130 uint8_t i;
131 const uint8_t *ptr = (const uint8_t *)XL2400_TEST_ADDR;
134 for (i = 0; i < 5; i++) {
135 UART1_TxHex(*(xbuf + i));
136 if (*(xbuf + i) != *ptr++) return HAL_ERROR;
137 }
138 return HAL_OK;
139}
#define XL2400_TEST_ADDR
Definition: xl2400.h:116

◆ XL2400_Tx()

uint8_t XL2400_Tx ( uint8_t ucPayload,
uint8_t  length 
)

Definition at line 285 of file xl2400.c.

286{
287 uint8_t y = 100, status = 0;
291 // Retry until timeout
292 while (y--)
293 {
294 SYS_DelayUs(100);
295 status = XL2400_ReadStatus();
296 // If TX successful or retry timeout, exit
297 if ((status & (MAX_RT_FLAG | TX_DS_FLAG)) != 0)
298 {
299 break;
300 }
301 }
303 return status;
304}
void SYS_DelayUs(uint16_t t)
Definition: fw_sys.c:75
#define MAX_RT_FLAG
Definition: xl2400.h:114
#define TX_DS_FLAG
Definition: xl2400.h:112
#define XL2400_CMD_W_TX_PAYLOAD
Definition: xl2400.h:46
volatile int16_t y
Definition: main.c:34

◆ XL2400_WakeUp()

void XL2400_WakeUp ( void  )

Definition at line 226 of file xl2400.c.

227{
228 *(xbuf + 0) = 0x7E;
229 *(xbuf + 1) = 0x82;
230 *(xbuf + 2) = 0x0B;
234}

◆ XL2400_WriteByte()

void XL2400_WriteByte ( uint8_t  value)

Emulate SPI Write on GPIO pins

Definition at line 23 of file xl2400.c.

24{
25 uint8_t i = 0;
28 for (i = 0; i < 8; i++)
29 {
31 if (value & 0x80)
32 {
34 }
35 else
36 {
38 }
40 value = value << 1;
41 }
43}
value
Definition: DS18B20_ATY.c:216
#define XL2400_DATA_OUT()
Definition: xl2400.h:27
#define XL2400_DATA_HIGH()
Definition: xl2400.h:30
#define XL2400_DATA_LOW()
Definition: xl2400.h:29

◆ XL2400_WriteFromBuf()

void XL2400_WriteFromBuf ( uint8_t  reg,
const uint8_t pBuf,
uint8_t  len 
)

Definition at line 90 of file xl2400.c.

91{
92 uint8_t ctr;
95 for (ctr = 0; ctr < len; ctr++)
96 {
97 XL2400_WriteByte(*pBuf++);
98 }
100}

◆ XL2400_WriteReg()

void XL2400_WriteReg ( uint8_t  reg,
uint8_t  value 
)

Definition at line 72 of file xl2400.c.

Variable Documentation

◆ cbuf

__IDATA uint8_t cbuf[2]

Definition at line 17 of file xl2400.c.

◆ xbuf

__IDATA uint8_t xbuf[XL2400_PL_WIDTH_MAX+1]

Definition at line 17 of file xl2400.c.