原创 公布CC1110最简单的收发程序(转自emot)

2009-7-8 09:35 1539 6 6 分类: 通信

公布CC1110最简单的收发程序



/**********************************************************************
*文件: wxl_radio.c
*功能: RF发送和接收(非DMA),初版,还可能有BUG
*作者: emot
*版本: v1.0

*说明:宏来源于TI的hal.h
*修订记录
----------------------------------------------------------------------
|时间           原因                  修订人
|2009年4月05日  初写                  emot
|
|
**********************************************************************/

/**********************************************************************
*头文件
*/
#include "includes.h"

#define
//----------------------------------------------------------------------
//发送函数
//----------------------------------------------------------------------
BYTE Transmit(BYTE __xdata *buff,BYTE bytes)        //发送
{
    BYTE i,BytesToSend;                       //
    RFIF = 0;
    RFTXRXIF = 0;
    BytesToSend = bytes ;//        数据包长度就是byte,为方便实际应用中增加其他字节,定义了bytestosend变量
    if(BytesToSend <= 64)
    {
        
        SIDLE();            // Exit RX / TX, turn off frequency synthesizer and exit
        STX();             // Switch radio to TX
        while(RFTXRXIF == 0);           // 等待发送结束
        RFTXRXIF = 0;                   // 清除发送标志
        RFD = BytesToSend;
        while(RFTXRXIF == 0);           // 等待发送结束
        RFTXRXIF = 0;                   // 清除发送标志
        
        for(i=0;i<( BytesToSend-1);i++)
        {
            RFD = buff;         // 发送数据
            while(RFTXRXIF == 0);       // 等待发送结束
            RFTXRXIF = 0;               // 清除发送标志
        }
         RFD = buff;                // 发送最后一BYTE
        
         while(RFIF&IRQ_DONE == 0);   // 等待发送结束
         RFIF &= ~IRQ_DONE;           //清结束标志
        
        RFIF &= ~IRQ_DONE;        // Tx/Rx completed, clear interrupt flag
        S1CON &= ~0x03;           // Clear the general RFIF interrupt registers

        return TRUE;
    }
    else
    {
        return FALSE;
    }
}
//----------------------------------------------------------------------
//接收函数,不使用DMA的接收
//----------------------------------------------------------------------

# define  WAIT_TIME  80  //unit  ms
BYTE Receive(BYTE __xdata *buff,BYTE *bytes)        //接收
{
BYTE BytesToReceive = 0;
        BYTE address;
        BYTE i;

    RFIF = 0;
    RFTXRXIF = 0;
    SIDLE();
    SRX();
    resetTimer(APP_TIMER0);
    while(RFTXRXIF == 0){if(readTimer(APP_TIMER0)>WAIT_TIME)return FALSE;};                // 等待接收结束,如超时则强退
    BytesToReceive = RFD;               // 读取数据包总长度
    RFTXRXIF = 0;                     // 清除发送标志  

    while(RFTXRXIF == 0){if(readTimer(APP_TIMER0)>WAIT_TIME)return FALSE;};                // 等待接收结束
    address = RFD;                    // 读取匹配地址
    RFTXRXIF = 0;                       // 清除发送标志
    if((BytesToReceive >= 64)||(BytesToReceive <= 0))
    {
        return FALSE;
    }
    
    if(address)address = address;   //没用的语句,只是用来消除warning

    for(i=0;i<(BytesToReceive - 1);i++)
    {
        while(RFTXRXIF == 0){if(readTimer(APP_TIMER0)>WAIT_TIME)return FALSE;};                // 等待接收结束
        buff = RFD;                  // 读取数据包长度
        RFTXRXIF = 0;                   // 清除发送标志
    }
    
    
    *bytes = (BytesToReceive);
    SIDLE();
    return TRUE;
}
//2009年5月25日
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条