Exemplo n.º 1
0
/*******************************************************************************
  * @brief  US2400 Tx.
  * @param  DestAddr: To
  * @param  pData: The data Tx
  * @param  DataLen: The number of data need to Tx
  * @retval Ref to system.h - StatusTypeDef.
  */
void Us2400Tx(unsigned short DestAddr, unsigned char *pData, unsigned short DataLen)
{	
	unsigned char *p = (unsigned char *)&DestAddr;
	
	memset(TxBuff, 0x00, sizeof(TxBuff));
	TxBuff[0] = 0x0B;
	TxBuff[1] = TxBuff[0] + DataLen;
	TxBuff[2] = 0x01;
	TxBuff[3] = 0x88;
    TxBuff[4] = SerialNumber++;
	TxBuff[5] = Us2400ReadShortReg(PANIDL);
	TxBuff[6] = Us2400ReadShortReg(PANIDH);
	p = (unsigned char *)&DestAddr;
	TxBuff[7] = *p++;
	TxBuff[8] = *p;
	TxBuff[9] = TxBuff[5];
	TxBuff[10] = TxBuff[6];
	TxBuff[11] = Us2400ReadShortReg(SADRL);
	TxBuff[12] = Us2400ReadShortReg(SADRH);
	memcpy(&TxBuff[TxBuff[0]+2], pData, DataLen);

  do {
    Us2400WriteLongRegBlock(TX_FIFO, TxBuff[1] + 0x02, TxBuff);
		memset(TxTempBuff, 0x00, sizeof(TxTempBuff));
		Us2400ReadLongRegBlock(TX_FIFO, TxBuff[1] + 0x02, TxTempBuff);
	} while(memcmp(TxBuff, TxTempBuff, TxBuff[1] + 0x02) != 0);

	Us2400WriteShortReg(TXNTRIG, 0x01);
}
Exemplo n.º 2
0
/*******************************************************************************
  * @brief  US2400 Into Deep Sleep.
  * @param  None
  * @retval None
  */
void Us2400IntoDeepSleep(void)
{
  Us2400WriteShortReg(RXFLUSH, 0x40);
	Us2400SetRecoveryTime(0x12, 0x42);
  Us2400WriteLongReg(RFCTRL55, 0x00);
	Us2400WriteLongReg(RFCTRL77, 0x18);
	Us2400WriteLongReg(RFCTRL50, Us2400ReadLongReg(RFCTRL50) & ~0x10);
	Us2400WriteShortReg(RXFLUSH, Us2400ReadShortReg(RXFLUSH) & ~0x80);
	Us2400WriteShortReg(SLPACK, Us2400ReadShortReg(SLPACK) | 0x80);
}
Exemplo n.º 3
0
uint8_t RF_Rx(uint8_t* RxData, uint8_t* Data_Length, uint8_t* RSSI){
	
	  int _isReceived =0;
	  int _checkFlag=0;
	
		// ============== Check RX FIFO Full/Overflow ================= //
		if (Us2400ReadShortReg(0x30) == 0x90){
			Us2400Rx(Data, &DataLen_temp, &RFLqi, &RFRssi);
			if (DataLen_temp != 0){
				DataLen = DataLen_temp;
				DataLen_temp = 0;
				
				memcpy(RxData, Data, DataLen);
				*Data_Length = DataLen;
				*RSSI = RFRssi;
				
				_checkFlag = headerCheck_AutoNet();			
				if(!_checkFlag) {							// Not For AutoNet
					_isReceived = 1;
					Us2400WriteShortReg(0x0D, Us2400ReadShortReg(0x0D) | 0x01);	
				}
			}
		}
		// ============== Packet Receive ================= //
		if (RFRxState == 1 || Us2400ReadShortReg(0x30) == 0x80){
			Us2400Rx(Data, &DataLen_temp, &RFLqi, &rssi);
			if (DataLen_temp != 0){
				DataLen = DataLen_temp;
				DataLen_temp = 0;			
				
				memcpy(RxData, Data, DataLen);
				*Data_Length = DataLen;
				*RSSI = RFRssi;
				
				_checkFlag = headerCheck_AutoNet();
				if(!_checkFlag) {    					// Not For AutoNet
					_isReceived = 1;
					RFRxState = 0;
				}
			}
		}
		return _isReceived;
}
Exemplo n.º 4
0
uint8_t RF_Rx(uint8_t* RxData, uint8_t* Data_Length){
	
	  int _rx_check_flag =0;
	  int _header_check_flag=0;
	
		// ============== Check RX FIFO Full/Overflow ================= //
		if (Us2400ReadShortReg(0x30) == 0x90){
			Us2400Rx(Data, &DataLen_temp, &RFLqi, &RFRssi);
			if (DataLen_temp != 0){
				DataLen = DataLen_temp;
				DataLen_temp = 0;
				
				memcpy(pRxData, Data, DataLen);
				memcpy(RxData, pRxData, DataLen);
				*Data_Length = DataLen;
				
				_header_check_flag = autonet_header_check();			
				if(!_header_check_flag) {							// Not For AutoNet
					_rx_check_flag = 1;
					Us2400WriteShortReg(0x0D, Us2400ReadShortReg(0x0D) | 0x01);	
				}
			}
		}
		// ============== Packet Receive ================= //
		if (RFRxState == 1 || Us2400ReadShortReg(0x30) == 0x80){
			Us2400Rx(Data, &DataLen_temp, &RFLqi, &rssi);
			if (DataLen_temp != 0){
				DataLen = DataLen_temp;
				DataLen_temp = 0;			
				
				memcpy(pRxData, Data, DataLen);
				memcpy(RxData, pRxData, DataLen);
				*Data_Length = DataLen;
				
				_header_check_flag = autonet_header_check();
				if(!_header_check_flag) {    					// Not For AutoNet
					_rx_check_flag = 1;
					RFRxState = 0;
				}
			}
		}
		return _rx_check_flag;
}
Exemplo n.º 5
0
/**
  * @brief  This function handles External lines 4 to 15 interrupt request.
  * @param  None
  * @retval None
  */
void EXTI4_15_IRQHandler(void)
{
  uint8_t IntStatus = 0;

  if(EXTI_GetITStatus(EXTI_Line8) != RESET) {
    IntStatus = Us2400ReadShortReg(ISRSTS);
    IntStatus |= Us2400ReadShortReg(ISRSTS);
    if ((IntStatus & 0x01) == 0x01) {
      RFTxState = 0x00;
    }
    if ((IntStatus & 0x08) == 0x08) {
      RFRxState = 0x01;
    }
    if ((IntStatus & 0x40) == 0x40) {
      RFSleepState = 0x00;
    }

    EXTI_ClearITPendingBit(EXTI_Line8);
  }
}
Exemplo n.º 6
0
int RF_RX_AUTONET(){
	
	  int _isReceived =0;
	  int _checkFlag=0;

		// ============== Check RX FIFO Full/Overflow ================= //
		if (Us2400ReadShortReg(0x30) == 0x90){
			Us2400Rx(Data, &DataLen_temp, &RFLqi, &RFRssi);
			if (DataLen_temp != 0){
				DataLen = DataLen_temp;
				DataLen_temp = 0;
				
				memcpy(pRxData, Data, DataLen);
				
				_checkFlag = headerCheck_AutoNet();
				if(_checkFlag) {					// For AutoNet
					_isReceived = 1;
					Us2400WriteShortReg(0x0D, Us2400ReadShortReg(0x0D) | 0x01);	
				}
			}
		}
		// ============== Packet Receive ================= //
		if (RFRxState == 1 || Us2400ReadShortReg(0x30) == 0x80){
			Us2400Rx(Data, &DataLen_temp, &RFLqi, &rssi);
			if (DataLen_temp != 0){
				DataLen = DataLen_temp;
				DataLen_temp = 0;			
				
				memcpy(pRxData, Data, DataLen);
				
				_checkFlag = headerCheck_AutoNet();	
				if(_checkFlag) {					// For AutoNet
					_isReceived = 1;
					RFRxState = 0;
				}
			}
		}
		return _isReceived;
}
Exemplo n.º 7
0
/*******************************************************************************
* Function Name  : 
* Description    : 
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RF_Tx(uint16_t destAddr, uint8_t *data, uint16_t dataLen)
{
	TimObj.TimeoutFlag &= (~TIMOUT_FLAG_100MS);
	TimObj.Tim[TIM_100MS].Ticks = TimObj.Tim[TIM_100MS].Period;
	RFTxState = 1;
	
	Us2400Tx(destAddr, data, dataLen);
	
	while (RFTxState != 0) {
		if ((TimObj.TimeoutFlag & TIMOUT_FLAG_100MS) == TIMOUT_FLAG_100MS) {
			if (Us2400ReadShortReg(0x31) == 0x09) {
	      //Us2400Rx(Data, &DataLen, &RFLqi, &RFRssi);
				if (dataLen != 0){
					//Packet_Receive();
					dataLen = 0;
				}
				RFRxState = 0;
	      Us2400WriteShortReg(0x0D, Us2400ReadShortReg(0x0D) | 0x01);
			}
			TimObj.TimeoutFlag ^= TIMOUT_FLAG_100MS;
      RFTxState = 0;
		}
	}
}
Exemplo n.º 8
0
/*******************************************************************************
  * @brief  Initialize US2400
  * @param  None
  * @retval None
  */
void Us2400Init(unsigned short Frequency, unsigned short PanID, unsigned short Addr, unsigned char Power)
{
  unsigned char *p = 0x00;

	Us2400WriteShortReg(SOFTRST, 0x07);
	Us2400WriteShortReg(GATECLK, 0x20);
  while(1) {
    if ((Us2400ReadShortReg(GATECLK) & 0x20) == 0x20) {
      break;
    }
  }

	Us2400WriteShortReg(PACON1, 0x08);
	Us2400WriteShortReg(FIFOEN, 0x94);
	Us2400WriteShortReg(TXPEMISP, 0x95);
	Us2400WriteShortReg(BBREG3, 0x50);
	Us2400WriteShortReg(BBREG5, 0x07);
	Us2400WriteShortReg(BBREG6, 0x40);

	if ((Frequency > 2400) && (Frequency < 2485)) {
  	Frequency = ((((Frequency - 2400) / 5) - 1) << 4) | 0x03;
	}
	else {
		Frequency = 0x03;
	}
	
	if(Power <= 0x1f) //0 - -8.3dBm
  {
	  Us2400WriteLongReg(RFCTRL3, (Power & 0x1f) << 3);
  }
	else {
    Us2400WriteLongReg(RFCTRL3, Us2400ReadLongReg(RFCTRL3) & 0x07);
	}
	
	Us2400WriteLongReg(RFCTRL0, Frequency);
	Us2400WriteLongReg(RFCTRL1, 0x01);
	Us2400WriteLongReg(RFCTRL2, 0x74);
	Us2400WriteLongReg(RFCTRL4, 0x06);
	Us2400WriteLongReg(RFCTRL6, 0x10);
	Us2400WriteLongReg(RFCTRL7, 0xEC);
	Us2400WriteLongReg(RFCTRL8, 0x8C);
	Us2400WriteLongReg(GPIODIR, 0x00);
	Us2400WriteLongReg(SECCTRL, 0x20);
	Us2400WriteLongReg(RFCTRL50, 0x07);
  Us2400WriteLongReg(RFCTRL51, 0xC0);
	Us2400WriteLongReg(RFCTRL52, 0x01);
	Us2400WriteLongReg(RFCTRL53, Us2400ReadLongReg(RFCTRL53) & 0xF0); // TX power
	Us2400WriteLongReg(RFCTRL59, 0x00);
	Us2400WriteLongReg(RFCTRL73, 0x80);
	Us2400WriteLongReg(RFCTRL74, 0xE5);
	Us2400WriteLongReg(RFCTRL75, 0x13);
	Us2400WriteLongReg(RFCTRL76, 0x07);

  p = (unsigned char *)&PanID;
	Us2400WriteShortReg(PANIDL, *p++);
  Us2400WriteShortReg(PANIDH, *p);
  p = (unsigned char *)&Addr;
	Us2400WriteShortReg(SADRL, *p++);
  Us2400WriteShortReg(SADRH, *p);

  Us2400WriteShortReg(INTMSK, 0x00);
	Us2400WriteShortReg(SOFTRST, 0x02);
	Us2400WriteShortReg(RFCTL, 0x04);
	Us2400WriteShortReg(RFCTL, 0x00);
	Us2400WriteShortReg(RFCTL, 0x02);
  Delay(1);
  Us2400WriteShortReg(RFCTL, 0x01);
  Delay(1);
  Us2400WriteShortReg(RFCTL, 0x00);
}