110 lines
3.0 KiB
C
110 lines
3.0 KiB
C
/**
|
|
* NRF24L01+ 驱动头文件 (STC8H1K08 移植版, SDCC 兼容)
|
|
* SPI 引脚: SCK=P1.5, CE=P1.6, IRQ=P1.7, CSN=P5.4, MISO=P1.3, MOSI=P1.4
|
|
* 使用 STC8H 硬件 SPI (SPI 默认引脚)
|
|
*/
|
|
#ifndef __NRF24_H__
|
|
#define __NRF24_H__
|
|
|
|
#include "STC8_SDCC.H"
|
|
|
|
/* SDCC mcs51 模式下缺少的标准类型 */
|
|
typedef unsigned char uint8_t;
|
|
typedef unsigned int uint16_t;
|
|
typedef unsigned long uint32_t;
|
|
|
|
/* ========== 引脚定义 (SDCC 语法) ========== */
|
|
__sbit __at(0x95) NRF_SCK; /* P1^5 */
|
|
__sbit __at(0x96) NRF_CE; /* P1^6 */
|
|
__sbit __at(0x97) NRF_IRQ; /* P1^7 */
|
|
__sbit __at(0xCC) NRF_CSN; /* P5^4 */
|
|
__sbit __at(0x93) NRF_MISO; /* P1^3 */
|
|
__sbit __at(0x94) NRF_MOSI; /* P1^4 */
|
|
|
|
/* ========== 寄存器地址 ========== */
|
|
#define NRF_CONFIG 0x00
|
|
#define NRF_EN_AA 0x01
|
|
#define NRF_EN_RXADDR 0x02
|
|
#define NRF_SETUP_AW 0x03
|
|
#define NRF_SETUP_RETR 0x04
|
|
#define NRF_RF_CH 0x05
|
|
#define NRF_RF_SETUP 0x06
|
|
#define NRF_STATUS 0x07
|
|
#define NRF_OBSERVE_TX 0x08
|
|
#define NRF_RPD 0x09
|
|
#define NRF_RX_ADDR_P0 0x0A
|
|
#define NRF_RX_ADDR_P1 0x0B
|
|
#define NRF_RX_ADDR_P2 0x0C
|
|
#define NRF_RX_ADDR_P3 0x0D
|
|
#define NRF_RX_ADDR_P4 0x0E
|
|
#define NRF_RX_ADDR_P5 0x0F
|
|
#define NRF_TX_ADDR 0x10
|
|
#define NRF_RX_PW_P0 0x11
|
|
#define NRF_RX_PW_P1 0x12
|
|
#define NRF_RX_PW_P2 0x13
|
|
#define NRF_RX_PW_P3 0x14
|
|
#define NRF_RX_PW_P4 0x15
|
|
#define NRF_RX_PW_P5 0x16
|
|
#define NRF_FIFO_STATUS 0x17
|
|
#define NRF_DYNPD 0x1C
|
|
#define NRF_FEATURE 0x1D
|
|
|
|
/* ========== 命令 ========== */
|
|
#define NRF_CMD_R_REGISTER 0x00
|
|
#define NRF_CMD_W_REGISTER 0x20
|
|
#define NRF_CMD_R_RX_PAYLOAD 0x61
|
|
#define NRF_CMD_W_TX_PAYLOAD 0xA0
|
|
#define NRF_CMD_FLUSH_TX 0xE1
|
|
#define NRF_CMD_FLUSH_RX 0xE2
|
|
#define NRF_CMD_REUSE_TX_PL 0xE3
|
|
#define NRF_CMD_NOP 0xFF
|
|
|
|
/* ========== 状态标志 ========== */
|
|
#define NRF_STATUS_RX_DR 0x40
|
|
#define NRF_STATUS_TX_DS 0x20
|
|
#define NRF_STATUS_MAX_RT 0x10
|
|
|
|
/* ========== 配置常量 ========== */
|
|
#define NRF_RATE_250K 0x20
|
|
#define NRF_RATE_1M 0x00
|
|
#define NRF_RATE_2M 0x08
|
|
|
|
#define NRF_PA_MIN 0x00
|
|
#define NRF_PA_LOW 0x02
|
|
#define NRF_PA_HIGH 0x04
|
|
#define NRF_PA_MAX 0x06
|
|
|
|
#define NRF_ADDR_WIDTH 5
|
|
#define NRF_MAX_CHANNEL 125
|
|
#define NRF_PAYLOAD_SIZE 32
|
|
|
|
/* ========== 函数声明 ========== */
|
|
|
|
/* 底层 SPI */
|
|
uint8_t NRF_SPI_TransferByte(uint8_t dat);
|
|
|
|
/* 寄存器操作 */
|
|
uint8_t NRF24L01_ReadReg(uint8_t reg);
|
|
void NRF24L01_WriteReg(uint8_t reg, uint8_t value);
|
|
void NRF24L01_ReadBuf(uint8_t reg, uint8_t *buf, uint8_t len);
|
|
void NRF24L01_WriteBuf(uint8_t reg, const uint8_t *buf, uint8_t len);
|
|
|
|
/* 初始化与检测 */
|
|
void NRF24L01_Init(void);
|
|
uint8_t NRF24L01_Check(void);
|
|
|
|
/* 配置 */
|
|
void NRF24L01_SetChannel(uint8_t ch);
|
|
void NRF24L01_SetRXAddr(uint8_t pipe, const uint8_t *addr);
|
|
|
|
/* 模式切换 */
|
|
void NRF24L01_RXMode(void);
|
|
void NRF24L01_TXMode(void);
|
|
|
|
/* 数据收发 */
|
|
uint8_t NRF24L01_RxPacket(uint8_t *data);
|
|
uint8_t NRF24L01_IsDataReady(void);
|
|
void NRF24L01_FlushRX(void);
|
|
|
|
#endif /* __NRF24_H__ */
|