历史上的今天
返回首页

历史上的今天

今天是:2024年10月16日(星期三)

正在发生

2019年10月16日 | nRF24L01p+AVR单片机ATmage88射频收发程序

2019-10-16 来源:eefocus

单片机源程序如下:

#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<    btmp = L01_ReadStatusReg( );

    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( );

推荐阅读

史海拾趣

General Electronic Devices公司的发展小趣事
负责产生控制信号,驱动开关元件按一定频率和占空比工作。
Data Device Corporation公司的发展小趣事

为了进一步扩大市场份额,DDC开始积极开拓国际市场。通过参加国际展会、与海外客户建立合作关系等方式,DDC逐渐在国际市场上树立了良好的品牌形象。同时,DDC还针对不同国家和地区的市场需求,推出了定制化的产品解决方案。这些举措使得DDC在国际市场上的影响力逐渐增强,为公司的发展注入了新的动力。

宜源科技(ETERNAL)公司的发展小趣事

宜源科技公司非常重视人才培养和团队建设。公司建立了一套完善的人才培养体系,为员工提供丰富的培训和发展机会。同时,宜源科技还积极引进优秀人才,打造高素质、专业化的技术和管理团队。这些团队在公司的各个领域中发挥着重要作用,为公司的长远发展提供了有力的人才保障。

D1 International Inc公司的发展小趣事

随着技术的不断成熟,D1 International Inc公司开始积极拓展市场。公司不仅在国内市场取得了显著的成果,还成功打入国际市场。与此同时,D1 International Inc公司也注重与其他企业的战略合作。通过与知名电子制造商的合作,D1 International Inc公司的产品线得到了极大的丰富,同时也提升了公司的品牌影响力。

Dolphin Interconnect Solutions Asa公司的发展小趣事

在全球化的背景下,Dolphin Interconnect Solutions ASA积极实施国际化战略。公司不仅在欧美等发达国家建立了完善的销售网络,还通过参加国际展会、举办技术研讨会等方式,提高了品牌知名度和市场影响力。同时,Dolphin还加强了与国际知名企业的合作,共同推动电子行业的发展。

Cadeka公司的发展小趣事

在竞争激烈的电子行业中,Cadeka公司为了增强自身实力,积极寻求并购与整合的机会。公司先后收购了几家具有技术优势和市场份额的小型电子企业,通过整合资源和技术,实现了优势互补和协同效应。这些并购不仅提升了Cadeka公司的技术实力和市场地位,还为公司带来了更多的发展机遇。

问答坊 | AI 解惑

车载移动电视接收的系统方案

在柏林推出的DVB T(地面数字广播)数字电视也已经影响到汽车娱乐系统中的电视接收。现在,汽车电视接收机不仅能够接收模拟电视信号(它仍将在城市以外的地区继续存在数年),而且也能够接收和处理DVB T信号。Hirschmann Electronic ...…

查看全部问答>

关于论坛的改版

论坛改版的挺好看的,从收藏夹进去是会进入新的版面的 但是如果点击了一个版块之后在点击上一根目录“电子工程世界—论坛”就还是回到了老的版面了 不知道是不是改版的一点不完善,望管理员看一下把………

查看全部问答>

nRF2401A的程序问题

本人用的是C8051F410单片机,载入2401A的程序,总共2个2401,一个主发,一个主收,无法实现接收,希望有经验的前辈能指点一下。 程序在附件中…

查看全部问答>

荧光粉提升PDP和LED技术

replyreload += \',\' + 372429;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

中9 破解升级

中9 松下科技星 tdx-668b Hi2023E+RDA5812+AVL1108E+MXT8211a+25L8005芯片组;不用拔线.直接可用,已经测试通过! 下载后,可直接使用! 增加全部46个台+4广播 [url=http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3827653&bbs_id=1000][/url] ...…

查看全部问答>

51中的端口的理解

一个51单片机的程序如下: #include main() {    int results;    results=P2*196;    .........     ......... }复制代码 我对其中的P2不能理解,看了reg51.h中P2定义为: sfr P2  = 0xA0;&nb ...…

查看全部问答>

wince 中 摄像头问题,图片问题

原贴在http://topic.eeworld.net/u/20091029/10/4e29dc9d-fbfa-4ccc-920c-2c5f23bada64.html,100求解,分光了, 急~~~…

查看全部问答>

读PHY芯片DM9161寄存器的LINK STATUS位始终显示为可用连接没有建立

最近用STM32F107+DM9161+LWIP实现一个tcpip的通讯,但是在写DM9161驱动的时候,当复位DM9161,使能自协商模式后,检测连接是够建立,也就是BMSR的link status位始终为0,我的PHY地址为0.网上有说地址设置为0的时候DM9161处于掉电模式,请问这种说法 ...…

查看全部问答>

提问+LaunchPad仿真器故障

本帖最后由 tianshuihu 于 2014-2-24 21:23 编辑 有一块LaunchPad仿真器不知什么原因无法使用了,连接电脑显示无法连接的USB设备...但是板子还可以运行原来的程序 初步怀疑MSP430F1612 或 TUSB3410 损坏 换了一块 TUSB3410 ,无果。。。 如果 ...…

查看全部问答>