#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