⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfreceivepacket.c

📁 TI的CC1110、CC2510、CC2430射频SOC的驱动程序
💻 C
字号:
/*------------------------------------------------------------------------------
Filename:     rfReceivePacket.c
Target:       cc1110, cc2510, cc2511
Revised:      26/10-2005
Revision:     0.1
------------------------------------------------------------------------------*/

#include "hal.h"
#include "main.h"

byte volatile length;
bool volatile isLengthByte;
uint8 index;
byte* pRssiVal;
byte  pPayload[68];
byte* pLqiVal;
byte  lengthReceived;
//-----------------------------------------------------------------------------
// See hal.h for a description of this function.
//-----------------------------------------------------------------------------

void  halRfReceivePacket(byte* pRssi, byte* pLqi) // byte timeOut)
{
    index=0;
    length = 0;
    INT_SETFLAG(INUM_RFTXRX, INT_CLR);
    INT_ENABLE(INUM_RFTXRX, INT_ON);
    INT_GLOBAL_ENABLE(INT_ON);

    RFIF = RFIF & ~IRQ_DONE;
    RFIM = 0x10;
//    RFIF=0;

    pRssiVal = pRssi;
    pLqiVal = pLqi;
    *pRssiVal = 0x00;
    *pLqiVal = 0x00;
    lengthReceived = false;
    isLengthByte = true;

     SRX();
    Timer0_Fresh(0xDE,0x98);
    while(!(RFIF & IRQ_DONE))
    {
 /*     if(timeOut)
      {
         halWait(1);
         timeOut--;
      }
      else
      {
         if(lengthReceived == true)
         {
            timeOut = 255;
            lengthReceived = false;
         }
         else
         {
            SIDLE();
            INT_ENABLE(INUM_RFTXRX, INT_OFF);
            return 0;
         }
      }   */

      if(lengthReceived==true)
      {
          Timer0_Fresh(0x2D,0x4C);
          lengthReceived = false;
      }

      if(CHKBIT(T1CTL,OVFIF))
      {
          SIDLE();
          INT_ENABLE(INUM_RFTXRX, INT_OFF);
          return;
      }
   }

   SIDLE();
   RFIF &= ~IRQ_DONE;
   INT_ENABLE(INUM_RFTXRX, INT_OFF);

   if(*pLqi & 0x80)
   {
      return;
   }
   else
   {
      index=0;
      return;
   }
}


#pragma vector=RFTXRX_VECTOR
__interrupt static void rf_txrx_IRQ(void)
{

    //The interrupt flag is cleared automatically
    if (isLengthByte)
    {
        length = RFD;
        if((length>0)&&(length<69))
        {
            isLengthByte = false;
            lengthReceived = true;
        }
        else return;
    }
    else if (index < length)
    {
        pPayload[index++] = RFD;
    }
    else if (index == length)
    {
       index++;
       *pRssiVal = RFD;
    }
    else
    {
       *pLqiVal = RFD;
       isLengthByte = true;
    }

    return;
}



/*------------------------------------------------------------------------------
										  0ooo
								ooo0     (   )
								(   )     ) /
								 \ (     (_/
	    				          \_)       Modify By:cuiqingwei [gary]
------------------------------------------------------------------------------*/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -