?? rf24l01.h
字號:
//-----------------------------------------------------------------------------
//
// 本文件定義RF底層接口(24L01)
//
//-----------------------------------------------------------------------------
#ifndef Rf_24L01H
#define Rf_24L01H
#include "system.h"
#include "stdint.h"
#include "string.h"
//----------------------------------------------------------
#define CSN_LOW() RFCSN = 0;
#define CSN_HIGH() RFCSN = 1;
#define CE_LOW() RFCE = 0;Timer_10Us(1);
#define CE_HIGH() RFCE = 1;
#define CE_PULSE() CE_HIGH();Timer_10Us(2);CE_LOW();
//----------------------------------------------------------
// 基頻定義
//----------------------------------------------------------
#define Def_Base_Channel 122
//----------------------------------------------------------
//----------------------------------------------------------
// Define nRF2401 RF Power switch
//----------------------------------------------------------
#define RF_POW_ON 0x02
#define RF_POW_OFF 0x00
//----------------------------------------------------------
// Define nRF24L01 interrupt flag's
//----------------------------------------------------------
#define IDLE 0x00 // Idle, no interrupt pending
#define MAX_RT 0x10 // Max #of TX retrans interrupt
#define TX_DS 0x20 // TX data sent interrupt
#define RX_DR 0x40 // RX data received
//----------------------------------------------------------
// SPI(nRF24L01) commands
//----------------------------------------------------------
#define READ_REG 0x00 // Define read command to register
#define WRITE_REG 0x20 // Define write command to register
#define ACTIVATE 0x50 // Define write command to register
#define READ_PAYLAODLEN 0x60 // Define read payload length command to register
#define RD_RX_PLOAD 0x61 // Define RX payload register address
#define WR_TX_PLOAD 0xA0 // Define TX payload register address
#define WR_TX_PLOAD_ACK 0xA8 // Write Payload to be transmitted together with ACK packet on PIPE PPP.
#define WR_TX_PLOAD_NOACK 0xB0 // Disables AUTOACK on this specific packet.
#define FLUSH_TX 0xE1 // Define flush TX register command
#define FLUSH_RX 0xE2 // Define flush RX register command
#define REUSE_TX_PL 0xE3 // Define reuse TX payload register command
#define NOP 0xFF // Define No Operation, might be used to read status register
//----------------------------------------------------------
// SPI(nRF24L01) registers(addresses)
//----------------------------------------------------------
#define CONFIG 0x00 // 'Config' register address
#define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address
#define EN_RXADDR 0x02 // 'Enabled RX addresses' register address
#define SETUP_AW 0x03 // 'Setup address width' register address
#define SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address
#define RF_CH 0x05 // 'RF channel' register address
#define RF_SETUP 0x06 // 'RF setup' register address
#define STATUS 0x07 // 'Status' register address
#define OBSERVE_TX 0x08 // 'Observe TX' register address
#define CD 0x09 // 'Carrier Detect' register address
#define RX_ADDR_P0 0x0A // 'RX address pipe0' register address
#define RX_ADDR_P1 0x0B // 'RX address pipe1' register address
#define RX_ADDR_P2 0x0C // 'RX address pipe2' register address
#define RX_ADDR_P3 0x0D // 'RX address pipe3' register address
#define RX_ADDR_P4 0x0E // 'RX address pipe4' register address
#define RX_ADDR_P5 0x0F // 'RX address pipe5' register address
#define TX_ADDR 0x10 // 'TX address' register address
#define RX_PW_P0 0x11 // 'RX payload width, pipe0' register address
#define RX_PW_P1 0x12 // 'RX payload width, pipe1' register address
#define RX_PW_P2 0x13 // 'RX payload width, pipe2' register address
#define RX_PW_P3 0x14 // 'RX payload width, pipe3' register address
#define RX_PW_P4 0x15 // 'RX payload width, pipe4' register address
#define RX_PW_P5 0x16 // 'RX payload width, pipe5' register address
#define FIFO_STATUS 0x17 // 'FIFO Status Register' register address
#define DYNPD 0x1C // 'Enable dynamic payload length' register address
#define FEATURE 0x1D // 'Feature Register' register address
//----------------------------------------------------------
//define 24L01 Transmit mode
//----------------------------------------------------------
#define PTX 0x00
#define PRX 0x01
//----------------------------------------------------------
// define 24L01 data rate
//----------------------------------------------------------
#define DATA_RATE_1M 0x00
#define DATA_RATE_2M 0x08
#define RX_P_NO 0x0e
#define MASK_IRQ_FLAGS 0x70
#define MASK_RX_DR_FLAG 0x40
#define MASK_TX_DS_FLAG 0x20
#define MASK_MAX_RT_FLAG 0x10
#define PIPE0 0x00
#define PIPE1 0x01
#define PIPE2 0x02
#define PIPE3 0x03
#define PIPE4 0x04
#define PIPE5 0x05
//----------------------------------------------------------
//FIFO_STATUS
//----------------------------------------------------------
#define MASK_TX_EMPTY 0x10
#define MASK_RX_FULL 0x02
#define MASK_RX_EMPTY 0x01
//----------------------------------------------------------
//24L01 work mode
//----------------------------------------------------------
#define Dev_Close 0
#define Dev_Normal 1
#define Dev_TX 2
#define Dev_AutoTx 3
#define Dev_RT 4
typedef struct
{
unsigned char nRecvAddr; // Enable Recv Address
// bit0->data pipe0 1:enable 0:disable
// bit1->data pipe1 1:enable 0:disable
// bit2->data pipe2 1:enable 0:disable
// bit3->data pipe3 1:enable 0:disable
// bit4->data pipe4 1:enable 0:disable
// bit5->data pipe5 1:enable 0:disable
unsigned char nAutoAck; // Enable Auto Ack
// bit0->data pipe0 1:enable 0:disable
// bit1->data pipe1 1:enable 0:disable
// bit2->data pipe2 1:enable 0:disable
// bit3->data pipe3 1:enable 0:disable
// bit4->data pipe4 1:enable 0:disable
// bit5->data pipe5 1:enable 0:disable
unsigned char aAddr1[5]; // 地址1
unsigned char aAddr2[5]; // 地址2
unsigned char nPower; // (Data rate)波特率b7~b4: 0 -- 1Mbps, 2 -- 2Mbps; 發送功率b3~b0:0 - -18dbm, 1 - -12dbm, 2 - -6dbm, 3 - 0dbm
unsigned char nChannel; // 頻道: 0~124
unsigned char nRetran; // 重發次數: 小于15 或 15的倍數
unsigned char nLen; // 數據長度 RF后續收發Payload 的長度: 小于或等于32
unsigned char nOn; // 收發器工作模式: 0--關閉,
// 1--打開設備進行正常收發,按給定參數配置收發器
// 2--打開設備只進行發送, 按給定參數配置收發器
// 3--打開設備自動發送固定數據幀,按給定參數配置收發器,在該模式下,
// 只要PC發送RF數據到設備,設備將按固定的延時時間自動發送最后
// 一幀的RF數據,每次發送的結果不提交PC
// 4--在設備工作模式2的條件下,再次發送最后的一幀RF數據;動作控制,不配置收發器
//
unsigned char nART_Factor; // 自動重傳延時因子:0~15,250us*n
} SetupData;
//----------------------------------------------------------
//extern L01_CFG L01_cfg;
//----------------------------------------------------------
#ifdef __cplusplus
extern "C" { // C Plus Plus function bindings
#define extern
#endif
void Rf24L01_OpenClose_Ctrl(unsigned char on_off);
void Rf24L01_Power_Ctrl(unsigned char on_off);// RF_POW_ON,RF_POW_OFF
void Rf24L01_RxTx_Switch(unsigned char bMode);
unsigned char Rf24L01_Polling_IRQ(unsigned char * rev_buf);
unsigned char Rf24L01_Set_Init(SetupData *drc);
unsigned char Rf24L01_GetDataPipeNumber(void);
unsigned char Rf24L01_Clear_IRQ(unsigned char irq_flag);
unsigned char Rf24L01_ReadByte(unsigned char reg);
void Rf24L01_Flush_TX(void);
void Rf24L01_TX(unsigned char *ptx_buf,unsigned char len);
void Rf24L01_RETX_LastFrame(void);
void Rf24L01_Set_Channel(unsigned char nChannel);
void Rf24L01_Flush_RX(void);
unsigned char Rf24L01_WriteByte(unsigned char reg, unsigned char value);
unsigned char Rf24L01_WriteMultiByte(unsigned char reg, unsigned char *pBuf, unsigned char len);
#ifdef __cplusplus
} // C Plus Plus function bindings
#undef extern
#endif
//-----------------------------------------------------------------------------
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -