| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- #ifndef __24L01_H
- #define __24L01_H
- //#include "ioremap.h"
- //#include "delay.h"
- //#include "spi.h"
- #include "Common.h"
- #include "Delay.h"
- typedef unsigned char uchar;
- //typedef unsigned char uint8;
- typedef unsigned char u8;
- typedef unsigned int uint;
- //typedef unsigned int uint16;
- typedef unsigned int u16;
- //24L01操作线
- #define NRF24L01_CE P11 //24L01片选信号
- #define NRF24L01_CSN P15 //SPI片选信号
- #define NRF24L01_IRQ P03 //IRQ主机数据输?
- #define NRF24L01_SCK P10
- #define NRF24L01_MOSI P00
- #define NRF24L01_MISO P01
- //设备地址设置
- #define ADDR1_VALUE 0X34
- #define ADDR2_VALUE 0X43
- #define ADDR3_VALUE 0X10
- #define ADDR4_VALUE 0X10
- #define ADDR5_VALUE 0X01
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- //NRF24L01寄存器操作命令
- #define READ_REG_NRF 0x00 //读配置寄存器,低5位为寄存器地址
- #define WRITE_REG_NRF 0x20 //写配置寄存器,低5位为寄存器地址
- #define RD_RX_PLOAD 0x61 //读RX有效数据,1~32字节,应用于接收模式下,读取完成后自动清除FIFO
- #define WR_TX_PLOAD 0xA0 //写TX有效数据,1~32字节,应用于发射模式下
- #define FLUSH_TX 0xE1 //清除TX FIFO寄存器.发射模式下用
- #define FLUSH_RX 0xE2 //清除RX FIFO寄存器.接收模式下用,传输应答信号过程中用这个指令会让应答数据不能完整传输
- #define REUSE_TX_PL 0xE3 //重新使用上一包数据,CE为高,数据包被不断发送.发射过程中必须禁止用这个功能
- #define NOP 0xFF //空操作,可以用来读状态寄存器
- //SPI(NRF24L01)寄存器地址
- #define CONFIG 0x00 //配置寄存器地址;
- //bit0:1接收模式,0发射模式;
- //bit1:1上电 2掉电;
- //bit2:CRC模式; 0八位CRC 1 16位CRC
- //bit3:CRC使能;1使能 0不使能(若是使能自动应答,这一位必须为高)
- //bit4 可屏蔽中断 MAX_RT 1 屏蔽 0不屏蔽 发生中断IRQ为低电平(最大重发中断)
- //bit5 可屏蔽中断TX_DS 1屏蔽 0不 数据发送完成并收到应答
- //bit6 可屏蔽中断RX_DR 接收数据完成 1屏蔽 0不屏蔽
- //bit7 默认为0
- #define EN_AA 0x01
- //bit0~5,使能自动应答功能 (自动应答必然启动CRC)对应通道0~5
- #define EN_RXADDR 0x02
- //bit0~5,接收数据通道允许,对应通道0~5
- #define SETUP_AW 0x03
- //bit1,0:设置地址宽度(所有数据通道) 01,3字节; 10,4字节; 11,5字节;(默认11)
- #define SETUP_RETR 0x04
- //建立自动重发;
- //bit3:0,自动重发计数器;0000 15次
- //bit7:4,自动重发延时 0000 250*x+86us
- #define RF_CH 0x05
- //RF通道,bit6:0,工作通道频率
- #define RF_SETUP 0x06
- //bit4: pll lock允许,仅用于测试模式,应当为1
- //bit3: 传输速率(0:1Mbps,1:2Mbps);
- //bit2:1,发射功率 11 0dbm;
- //bit0:低噪声放大器增益
- #define STATUS 0x07
- //bit0:TX FIFO满标志;
- //bit3:1,接收数据通道号(最大:6);接收到数据的通道号码
- //bit4,达到最多次重发 max_rt中断
- //bit5:数据发送完成中断;写1清除中断
- //bit6:接收数据中断; 写1清除中断
- #define OBSERVE_TX 0x08 //发送检测寄存器,
- //bit7:4,数据包丢失计数器;
- //bit3:0,重发计数器
- #define CD 0x09 //载波检测寄存器,
- //bit0,载波检测;
- #define RX_ADDR_P0 0x0A
- //数据通道0接收地址,最大长度5个字节,低字节在前
- #define RX_ADDR_P1 0x0B
- //数据通道1接收地址,最大长度5个字节,低字节在前
- #define RX_ADDR_P2 0x0C
- //数据通道2接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
- #define RX_ADDR_P3 0x0D
- //数据通道3接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
- #define RX_ADDR_P4 0x0E
- //数据通道4接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
- #define RX_ADDR_P5 0x0F
- //数据通道5接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
- #define TX_ADDR 0x10
- //发送地址(低字节在前),ShockBurstTM模式下,RX_ADDR_P0与此地址相等
- #define RX_PW_P0 0x11
- //接收数据通道0有效数据宽度(1~32字节),设置为0则非法
- #define RX_PW_P1 0x12
- //接收数据通道1有效数据宽度(1~32字节),设置为0则非法
- #define RX_PW_P2 0x13
- //接收数据通道2有效数据宽度(1~32字节),设置为0则非法
- #define RX_PW_P3 0x14
- //接收数据通道3有效数据宽度(1~32字节),设置为0则非法
- #define RX_PW_P4 0x15
- //接收数据通道4有效数据宽度(1~32字节),设置为0则非法
- #define RX_PW_P5 0x16
- //接收数据通道5有效数据宽度(1~32字节),设置为0则非法
- #define NRF_FIFO_STATUS 0x17
- //FIFO状态寄存器;
- //bit0,RX FIFO寄存器空标志;
- //bit1,RX FIFO满标志;
- //bit2,3,保留
- //bit4,TX FIFO空标志;
- //bit5,TX FIFO满标志;
- //bit6,1,循环发送上一数据包.0,不循环;
- #define MAX_TX 0x10 //达到最大发送次数中断
- #define TX_OK 0x20 //TX发送完成中断
- #define RX_OK 0x40 //接收到数据中断
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- //24L01发送接收数据宽度定义
- #define TX_ADR_WIDTH 5 //5字节的地址宽度
- #define RX_ADR_WIDTH 5 //5字节的地址宽度
- #define TX_PLOAD_WIDTH 32 //32字节的用户数据宽度
- #define RX_PLOAD_WIDTH 32 //32字节的用户数据宽度
- void Nrf24l01Init ( void ); //初始化
- void Nrf24l01RxMode ( void ); //配置为接收模式
- void Nrf24l01TxMode ( void ); //配置为发送模式
- u8 Nrf24l01WriteBuf ( u8 reg, u8 *pBuf, u8 u8s ); //写数据区
- u8 Nrf24l01ReadBuf ( u8 reg, u8 *pBuf, u8 u8s ); //读数据区
- u8 Nrf24l01ReadReg ( u8 reg ); //读寄存器
- u8 Nrf24l01WriteReg ( u8 reg, u8 value ); //写寄存器
- u8 Nrf24l01Check ( void ); //检查24L01是否存在
- u8 Nrf24l01TxPacket ( u8 *txbuf ); //发送一个包的数据
- u8 Nrf24l01RxPacket ( u8 *rxbuf ); //接收一个包的数据
- #endif
|