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_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 len)
 
void XL2400_WriteBack (uint8_t reg, 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]
 
uint8_txbuf_data = xbuf + 1
 

Function Documentation

◆ XL2400_CarrierTest()

void XL2400_CarrierTest ( void  )

Definition at line 295 of file xl2400.c.

296{
299 *(xbuf_data + 12) |= 0x40;
300 *(xbuf_data + 4) &= ~0x04;
303 *(xbuf_data + 0) = 0x01;
304 *(xbuf_data + 1) = 0x00;
307}
void XL2400_WriteReg(uint8_t reg, uint8_t value)
Definition: xl2400.c:72
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
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
uint8_t * xbuf_data
Definition: xl2400.c:18
void XL2400_WriteBack(uint8_t reg, uint8_t len)
Definition: xl2400.c:57

◆ XL2400_CE_High()

void XL2400_CE_High ( void  )

Definition at line 72 of file xl2400.c.

◆ XL2400_CE_Low()

void XL2400_CE_Low ( void  )

◆ XL2400_ClearStatus()

void XL2400_ClearStatus ( void  )

Definition at line 282 of file xl2400.c.

283{
287}
#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 92 of file xl2400.c.

93{
94 // Analog config
96 *(xbuf_data + 4) &= ~0x04;
97 *(xbuf_data + 12) |= 0x40;
99 // Switch to software CE control, wake up RF
101 // Enable Auto ACK Pipe 0
103 // Enable Pipe 0
105 // Address Width, 5 bytes
107 // Retries and interval
109 // RF Data Rate 1Mbps
111 // Number of bytes in RX payload, pipe 0 and pipe 1
115 // Dynamic payload width: off
117 // Other features
118 //bit7&6=00 return status when send register address
119 //bit5=0 long data pack off
120 //bit4=1 FEC off
121 //bit3=1 FEATURE on
122 //bit2=0 Dynamic length off
123 //bit1=0 ACK without payload
124 //bit0=0 W_TX_PAYLOAD_NOACK off
126 // Enable RSSI
127 *(xbuf_data + 0) = 0x10;
128 *(xbuf_data + 1) = 0x00;
130}
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 309 of file xl2400.c.

310{
311 uint8_t i, status;
312
313 UART1_TxString("Bytes from low to high: 0,1,2,3,...\r\n[Config]");
315 for (i = 0; i < 3; i++) {
316 UART1_TxHex(*(xbuf_data + i));
317 }
318
319 UART1_TxString(" [EN_AA]");
321
322 UART1_TxString(" [EN_RxAddr]");
324
325 UART1_TxString(" [AddrWidth]");
327
328 UART1_TxString(" [Retry]");
330 for (i = 0; i < 4; i++) {
331 UART1_TxHex(*(xbuf_data + i));
332 }
333
334 UART1_TxString("\r\n[RF_Channel]");
336 for (i = 0; i < 3; i++) {
337 UART1_TxHex(*(xbuf_data + i));
338 }
339
340 UART1_TxString(" [RF_Setup]");
342 for (i = 0; i < 2; i++) {
343 UART1_TxHex(*(xbuf_data + i));
344 }
345
346 UART1_TxString(" [Observe_Tx]");
348 for (i = 0; i < 4; i++) {
349 UART1_TxHex(*(xbuf_data + i));
350 }
351
352 UART1_TxString(" [RSSI]");
354 for (i = 0; i < 2; i++) {
355 UART1_TxHex(*(xbuf_data + i));
356 }
357
358 UART1_TxString("\r\n[TxAddr] ");
360 for (i = 0; i < 5; i++) {
361 UART1_TxHex(*(xbuf_data + i));
362 }
363
364 UART1_TxString("\r\n[RxAddrP0]");
366 for (i = 0; i < 5; i++) {
367 UART1_TxHex(*(xbuf_data + i));
368 }
369 UART1_TxString(" [RxAddrP1]");
371 for (i = 0; i < 5; i++) {
372 UART1_TxHex(*(xbuf_data + i));
373 }
374 UART1_TxString(" [RxAddrP2-P5]");
376 for (i = 0; i < 4; i++) {
377 UART1_TxHex(*(xbuf_data + i));
378 }
379
380 UART1_TxString("\r\n[RxPloadWidth_P0-P5]");
382 for (i = 0; i < 6; i++) {
383 UART1_TxHex(*(xbuf_data + i));
384 }
385
386 UART1_TxString("\r\n[FIFO_Status]");
388 for (i = 0; i < 3; i++) {
389 UART1_TxHex(*(xbuf_data + i));
390 }
391 UART1_TxString(" [DynPloadWidth]");
393 UART1_TxString(" [Feature]");
395
396 status = XL2400_ReadStatus();
397 UART1_TxString("\r\n[Status]");
398 UART1_TxHex(status);
399 UART1_TxString("\r\n\r\n");
400 return status;
401}
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_ReadReg()

uint8_t XL2400_ReadReg ( uint8_t  reg)

Definition at line 29 of file xl2400.c.

30{
31 XL2400_CSN = 0;
32 cbuf[0] = reg;
35 XL2400_CSN = 1;
36 return cbuf[1];
37}
void SPI_TxRxBytes(uint8_t *pBuf, uint8_t len)
Definition: fw_spi.c:28
__IDATA uint8_t cbuf[2]
Definition: xl2400.c:17
#define XL2400_CSN
Definition: xl2400.h:21

◆ XL2400_ReadStatus()

uint8_t XL2400_ReadStatus ( void  )

Definition at line 277 of file xl2400.c.

◆ XL2400_ReadToBuf()

void XL2400_ReadToBuf ( uint8_t  reg,
uint8_t  len 
)

Definition at line 48 of file xl2400.c.

49{
50 XL2400_CSN = 0;
52 xbuf[0] = reg;
53 SPI_TxRxBytes(xbuf, len + 1);
54 XL2400_CSN = 1;
55}
__IDATA uint8_t xbuf[XL2400_PL_WIDTH_MAX+1]
Definition: xl2400.c:17
#define XL2400_PL_WIDTH_MAX
Definition: xl2400.h:92

◆ XL2400_Rx()

uint8_t XL2400_Rx ( void  )

Definition at line 258 of file xl2400.c.

259{
260 uint8_t i, status, rxplWidth;
261 status = XL2400_ReadStatus();
262 if (status & RX_DR_FLAG)
263 {
268 UART1_TxChar('>');
269 for (i = 0; i < rxplWidth; i++)
270 {
271 UART1_TxHex(*(xbuf_data + i));
272 }
273 }
274 return status;
275}
void UART1_TxChar(char dat)
Definition: fw_uart.c:72
#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 187 of file xl2400.c.

188{
189 uint8_t i, j;
190 for (i = 0; i < 10; i++)
191 {
192 SYS_Delay(2);
194 *(xbuf_data + 1) |= 0x90;
195 *(xbuf_data + 1) &= ~0x20;
197 *(xbuf_data + 1) |= 0x40;
199 SYS_Delay(1);
201
202 if (*(xbuf_data + 1) & 0x20)
203 {
204 j = *(xbuf_data + 1) << 3;
206 *(xbuf_data + 1) &= 0x8F;
207 *(xbuf_data + 1) |= 0x20;
208 *(xbuf_data + 0) &= 0x07;
209 *(xbuf_data + 0) |= j;
211 return HAL_OK;
212 }
213 }
214 return HAL_ERROR;
215}
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 132 of file xl2400.c.

133{
134 if (channel > 80) channel = 80;
135 // AFC reset
137 // AFC on
139 // Frequency(MHz) 2400:0x960 -> 2480:0x9B0
140 *(xbuf_data + 0) = 0x60 + channel;
141 *(xbuf_data + 1) = 0x09;
143 // AFC Locked
144 *(xbuf_data + 1) |= 0x20;
146}

◆ XL2400_SetPower()

void XL2400_SetPower ( uint8_t  power)

Definition at line 159 of file xl2400.c.

◆ XL2400_SetRxAddress()

void XL2400_SetRxAddress ( uint8_t address)

Definition at line 154 of file xl2400.c.

155{
157}
void XL2400_WriteFromBuf(uint8_t reg, const uint8_t *pBuf, uint8_t len)
Definition: xl2400.c:90

◆ XL2400_SetRxMode()

void XL2400_SetRxMode ( void  )

Definition at line 226 of file xl2400.c.

227{
233 SYS_Delay(1);
234}
void XL2400_CE_High(void)
Definition: xl2400.c:121
uint8_t XL2400_RxCalibrate(void)
Definition: xl2400.c:236

◆ XL2400_SetTxAddress()

void XL2400_SetTxAddress ( uint8_t address)

Definition at line 148 of file xl2400.c.

◆ XL2400_SetTxMode()

void XL2400_SetTxMode ( void  )

Definition at line 217 of file xl2400.c.

◆ XL2400_Sleep()

void XL2400_Sleep ( void  )

Definition at line 166 of file xl2400.c.

167{
170
171 *(xbuf_data + 0) = 0x7C;
172 *(xbuf_data + 1) = 0x82;
173 *(xbuf_data + 2) = 0x03;
175}

◆ XL2400_SPI_Test()

uint8_t XL2400_SPI_Test ( void  )

Definition at line 79 of file xl2400.c.

80{
81 uint8_t i;
82 const uint8_t *ptr = (const uint8_t *)XL2400_TEST_ADDR;
85 for (i = 0; i < 5; i++) {
87 if (*(xbuf_data + i) != *ptr++) return HAL_ERROR;
88 }
89 return HAL_OK;
90}
#define XL2400_TEST_ADDR
Definition: xl2400.h:116

◆ XL2400_Tx()

uint8_t XL2400_Tx ( uint8_t ucPayload,
uint8_t  length 
)

Definition at line 236 of file xl2400.c.

237{
238 uint8_t y = 100, status = 0;
242 SYS_DelayUs(100);
243 // Retry until timeout
244 while (y--)
245 {
246 SYS_DelayUs(100);
247 status = XL2400_ReadStatus();
248 // If TX successful or retry timeout, exit
249 if ((status & (MAX_RT_FLAG | TX_DS_FLAG)) != 0)
250 {
251 break;
252 }
253 }
255 return status;
256}
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 177 of file xl2400.c.

178{
179 *(xbuf_data + 0) = 0x7E;
180 *(xbuf_data + 1) = 0x82;
181 *(xbuf_data + 2) = 0x0B;
185}

◆ XL2400_WriteBack()

void XL2400_WriteBack ( uint8_t  reg,
uint8_t  len 
)

Definition at line 57 of file xl2400.c.

58{
59 XL2400_CSN = 0;
60 xbuf[0] = reg;
61 SPI_TxRxBytes(xbuf, len + 1);
62 XL2400_CSN = 1;
63}

◆ XL2400_WriteFromBuf()

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

Definition at line 39 of file xl2400.c.

40{
41 XL2400_CSN = 0;
42 xbuf[0] = reg;
43 memcpy(xbuf_data, pBuf, len);
44 SPI_TxRxBytes(xbuf, len + 1);
45 XL2400_CSN = 1;
46}

◆ XL2400_WriteReg()

void XL2400_WriteReg ( uint8_t  reg,
uint8_t  value 
)

Definition at line 20 of file xl2400.c.

21{
22 XL2400_CSN = 0;
23 cbuf[0] = reg;
24 cbuf[1] = value;
26 XL2400_CSN = 1;
27}
value
Definition: DS18B20_ATY.c:216

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.

◆ xbuf_data

uint8_t* xbuf_data = xbuf + 1

Definition at line 18 of file xl2400.c.