新闻  |   论坛  |   博客  |   在线研讨会
公布CC1110最简单的收发程序
0750long | 2009-07-15 13:51:06    阅读:2033   发布文章

公布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;
}

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客