⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rf24l01.h

📁 C51单片机驱动程序源代码_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 + -