单片机源程序如下:
#define _nRF24L01_C_
#include "nRF24L01.h"
INT8U CE_Status = 0;
/*
================================================================================
Function : L01_GetCEStatus( )
Description : Get the status of the CE PIN
Input : NONE
Output: 1:CE=1, 0:CE=0
================================================================================
*/
INT8U L01_GetCEStatus( void )
{
return CE_Status;
}
/*
================================================================================
Function : L01_SetCE( )
Description : Set the CE PIN as 1 or 0
Input : -status, 1: CE=1, 0: CE=0
Output: None
================================================================================
*/
void L01_SetCE( INT8U status )
{
CE_Status = status;
if( status == 0 ) { L01_CE_LOW( ); }
else { L01_CE_HIGH( ); }
}
/*
================================================================================
Function : L01_ReadSingleReg( )
Description : Read a single register of nRF24L01
Input : -Addr, The address of the register
Output: The value read from the register
================================================================================
*/
INT8U L01_ReadSingleReg( INT8U Addr )
{
INT8U btmp;
L01_CSN_LOW( );//PB2输出低电平
SPI_ExchangeByte( R_REGISTER | Addr );
btmp = SPI_ExchangeByte( 0xFF );
L01_CSN_HIGH( );//PB2输出高电平
return btmp;
}
/*
================================================================================
Function : L01_ReadMultiReg( )
Description : Read several registers of nRF24L01
Input : -StartAddr, The start address of the registers
-nBytes, How many registers do you want to read
-pBuff, The buffer to save the values
Output: None
================================================================================
*/
/*void L01_ReadMultiReg( INT8U StartAddr, INT8U nBytes, INT8U *pBuff )
{
INT8U btmp;
L01_CSN_LOW( );
SPI_ExchangeByte( R_REGISTER | StartAddr );
for( btmp = 0; btmp < nBytes; btmp ++ )
{
*( pBuff + btmp ) = SPI_ExchangeByte( 0xFF );
}
L01_CSN_HIGH( );
}
================================================================================
Function : L01_WriteSingleReg( )
Description : Write a single byte to a register
Input : -Addr, The address of the register
-Value, The value to be written
Output: None
================================================================================
*/
void L01_WriteSingleReg( INT8U Addr, INT8U Value )
{
INT8U tmp = L01_GetCEStatus( );
L01_SetCE( 0 );
L01_CSN_LOW( );
SPI_ExchangeByte( W_REGISTER | Addr );
SPI_ExchangeByte( Value );
L01_CSN_HIGH( );
L01_SetCE( tmp );
}
/*
================================================================================
Function : L01_WriteMultiReg( )
Description : Read several registers of nRF24L01
Input : -StartAddr, The start address of the registers
-pBuff, The buffer store the values
-Length, How many registers do you want to write
Output: None
================================================================================
*/
void L01_WriteMultiReg( INT8U StartAddr, INT8U *pBuff, INT8U Length )
{
INT8U i;
INT8U tmp = L01_GetCEStatus( );
L01_SetCE( 0 );
L01_CSN_LOW( );
SPI_ExchangeByte( W_REGISTER | StartAddr );
for( i = 0; i < Length; i ++ )
{
SPI_ExchangeByte( *( pBuff + i ) );
}
L01_CSN_HIGH( );
L01_SetCE( tmp );
}
/*
================================================================================
Function : L01_FlushTX( )
Description : Flush the TX buffer
Input : None
Output: None
================================================================================
*/
void L01_FlushTX( void )
{
L01_CSN_LOW( );
SPI_ExchangeByte( FLUSH_TX );
L01_CSN_HIGH( );
}
/*
================================================================================
Function : L01_FlushRX( )
Description : Flush the RX buffer
Input : None
Output: None
================================================================================
*/
void L01_FlushRX( void )
{
L01_CSN_LOW( );
SPI_ExchangeByte( FLUSH_RX );
L01_CSN_HIGH( );
}
/*
================================================================================
Function : L01_ReuseTXPayload( )
Description : Reuse the last transmitted payload
Input : None
Output: None
================================================================================
*/
void L01_ReuseTXPayload( void )
{
L01_CSN_LOW( );
SPI_ExchangeByte( REUSE_TX_PL );
L01_CSN_HIGH( );
}
/*
================================================================================
Function : L01_Nop( )
Description : nop operation of nRF24L01
Input : None
Output: None
================================================================================
*/
void L01_Nop( void )
{
L01_CSN_LOW( );
SPI_ExchangeByte( L01_NOP );
L01_CSN_HIGH( );
}
/*
================================================================================
Function : L01_ReadStatusReg( )
Description : Read statu register of nRF24L01
Input : None
Output: Statu register of nRF24L01
================================================================================
*/
INT8U L01_ReadStatusReg( void )
{
INT8U Status;
L01_CSN_LOW( );
Status = SPI_ExchangeByte( R_REGISTER + L01REG_STATUS );
L01_CSN_HIGH( );
return Status;
}
/*
================================================================================
Function : L01_ClearIRQ( )
Description : Clear IRQ cuased by nRF24L01
Input : None
Output: None
================================================================================
*/
void L01_ClearIRQ( INT8U IRQ_Source )
{
INT8U btmp = 0;
IRQ_Source &= ( 1< L01_CSN_LOW( ); L01_WriteSingleReg( L01REG_STATUS, IRQ_Source | btmp ); L01_CSN_HIGH( ); L01_ReadStatusReg( ); } /* ================================================================================ Function : L01_ReadIRQSource( ) Description : Read the IRQ source of nRF24L01+ Input : None Output: IRQ source mask code ================================================================================ */ INT8U L01_ReadIRQSource( void ) { return ( L01_ReadStatusReg( ) & ( ( 1< /* ================================================================================ Function : L01_ReadTopFIFOWidth( ) Description : Read the payload width of the top buffer of FIFO Input : None Output: The width of the pipe buffer ================================================================================ */ INT8U L01_ReadTopFIFOWidth( void ) { INT8U btmp; L01_CSN_LOW( ); SPI_ExchangeByte( R_RX_PL_WID ); btmp = SPI_ExchangeByte( 0xFF ); L01_CSN_HIGH( ); return btmp; } /* ================================================================================ Function : L01_ReadRXPayload( ) Description : Read the RX payload from internal buffer Input : -pBuff, buffer to store the data Output: The length of data read ================================================================================ */ INT8U L01_ReadRXPayload( INT8U *pBuff ) { INT8U width, PipeNum; PipeNum = ( L01_ReadSingleReg( L01REG_STATUS ) >> 1 ) & 0x07; width = L01_ReadTopFIFOWidth( ); L01_CSN_LOW( ); SPI_ExchangeByte( R_RX_PAYLOAD ); for( PipeNum = 0; PipeNum < width; PipeNum ++ ) { *( pBuff + PipeNum ) = SPI_ExchangeByte( 0xFF ); } L01_CSN_HIGH( ); L01_FlushRX( ); return width; } /* ================================================================================ Function : L01_WriteTXPayload( ) Description : Write TX payload to a pipe and prx will return ack back Input : -PipeNum, number of the pipe -pBuff, A buffer stores the data -nBytes, How many bytes to be wrote to Output: None ================================================================================ */ void L01_WriteTXPayload_Ack( INT8U *pBuff, INT8U nBytes ) { INT8U btmp; INT8U length = ( nBytes > 32 ) ? 32 : nBytes; L01_FlushTX( ); L01_CSN_LOW( ); SPI_ExchangeByte( W_TX_PAYLOAD ); for( btmp = 0; btmp < length; btmp ++ ) { SPI_ExchangeByte( *( pBuff + btmp ) ); } L01_CSN_HIGH( ); } /* ================================================================================ Function : L01_WritePayload_NoAck( ) Description : write data in tx mode, and prx won't return ack back Input : -Data, A buffer stores the address data -Data_Length, How many bytes of the data buff Output: None ================================================================================ */ void L01_WriteTXPayload_NoAck( INT8U *Data, INT8U Data_Length ) { if( Data_Length > 32 || Data_Length == 0 ) { return ; } L01_CSN_LOW( );
上一篇:avr单片机atmega16自动浇花器Proteus仿真+源程序
下一篇:基于AVR单片机的汽车空调控制系统设计
设计资源 培训 开发板 精华推荐
- DC1908A-D,具有 LTC2328-18、18 位、1Msps、真正双极低功率、单电源 ADC 的演示板
- 使用 Analog Devices 的 LTC3700 的参考设计
- TLE 4295 低压稳压器的典型应用
- 通过验证成功了:超低低低低成本迷你的浇花系统。STC15W104
- Cube-440_硬件变声器
- AN-9718 - FXMA2102 I2C 转换器应用电路
- 触摸延时开关
- 用于有刷直流电机的桥驱动IC —— TB6642FG
- EVAL-CN0399-SDPZ,评估套件基于 ADL5904 DC 至 6 GHz、45 dB TruPwr 检测器,具有包络阈值检测功能
- 用于STUSB4710A的评估板(带有板载DC-DC)
- 有奖直播:清洁水源的守护 —— ADI 水质监测方案
- 直播已结束【安森美半导体超低功耗 RSL10 蓝牙 SoC 开发板详解】
- 下载有礼:一起初探5G,赢氮化镓(GaN)充电器、柔性墨水屏等精美礼品
- 试用Vishay新型“IHLP磁芯损耗计算器”,抢楼赢好礼
- 阅读TI Think.lnnovate 神级DIY系列博文,你来畅想我送礼!
- 免费申请 | DFRobot盖革计数器模块
- ADI•世健工业嘉年华—有奖直播:ADI赋能工业4.0—助力PLC/DCS技术创新
- 4月TI两场EP直播,都挺好:超声气体流量计量创新方案+SimpleLink平台小鲜肉CC13X2/CC26X2专场
- 下载泰克高速接口标准电子书,参与翻盖有礼,惊喜多多!
- 学习Altera《SoC FPGA:体系结构重要吗?》文章,答题赢好礼!