Esempio n. 1
0
/*************************************************************************//**
*****************************************************************************/
static void phySetRxState(void)
{
  phyTrxSetState(TRX_CMD_TRX_OFF);

  IRQ_STATUS_REG = IRQ_CLEAR_VALUE;

  if (phyRxState)
    phyTrxSetState(TRX_CMD_RX_AACK_ON);
}
Esempio n. 2
0
/*************************************************************************//**
*****************************************************************************/
void PHY_Init(void)
{
	sysclk_enable_peripheral_clock(&TRX_CTRL_0);

	TRXPR_REG_s.trxrst = 1;

	phyRxState = false;
	phyState = PHY_STATE_IDLE;

	phyTrxSetState(TRX_CMD_TRX_OFF);

	TRX_CTRL_2_REG_s.rxSafeMode = 1;

#ifdef PHY_ENABLE_RANDOM_NUMBER_GENERATOR
	CSMA_SEED_0_REG = (uint8_t)PHY_RandomReq();
#endif

#if defined(PLATFORM_WM100) || defined(PLATFORM_WM100_DUINO)
	#if (ANTENNA_DIVERSITY == 1)
		ANT_DIV_REG_s.antCtrl = 2;
		RX_CTRL_REG_s.pdtThres = 0x03;
		ANT_DIV_REG_s.antDivEn = 1;
		ANT_DIV_REG_s.antExtSwEn = 1;
	#endif // ANTENNA_DIVERSITY
	#ifdef EXT_RF_FRONT_END_CTRL
		TRX_CTRL_1_REG_s.paExtEn = 1;
	#endif // EXT_RF_FRONT_END_CTRL
#endif // PLATFORM_WM100
}
Esempio n. 3
0
/*************************************************************************//**
*****************************************************************************/
void PHY_DataReq(uint8_t *data)
{
	phyTrxSetState(TRX_CMD_TX_ARET_ON);

	TRX_FRAME_BUFFER(0) = data[0] + PHY_CRC_SIZE;
	for (uint8_t i = 0; i < data[0]; i++) {
		TRX_FRAME_BUFFER(i + 1) = data[i + 1];
	}

	phyState = PHY_STATE_TX_WAIT_END;
	TRX_STATE_REG = TRX_CMD_TX_START;
}
Esempio n. 4
0
/*************************************************************************//**
*****************************************************************************/
uint16_t PHY_RandomReq(void)
{
  uint16_t rnd = 0;

  TRX_RPC_REG = 0x00;

  phyTrxSetState(TRX_CMD_RX_ON);

  for (uint8_t i = 0; i < 16; i += 2)
  {
    HAL_Delay(RANDOM_NUMBER_UPDATE_INTERVAL);
    rnd |= PHY_RSSI_REG_s.rndValue << i;
  }

  phyTrxSetState(TRX_CMD_TRX_OFF);

  TRX_RPC_REG = TRX_RPC_REG_VALUE;

  phySetRxState();

  return rnd;
}
Esempio n. 5
0
/*************************************************************************//**
*****************************************************************************/
void PHY_DataReq(uint8_t *data, uint8_t size)
{
  phyTrxSetState(TRX_CMD_TX_ARET_ON);

  IRQ_STATUS_REG = IRQ_CLEAR_VALUE;

  TRX_FRAME_BUFFER(0) = size + PHY_CRC_SIZE;
  for (uint8_t i = 0; i < size; i++)
    TRX_FRAME_BUFFER(i+1) = data[i];

  phyState = PHY_STATE_TX_WAIT_END;
  TRX_STATE_REG = TRX_CMD_TX_START;
}
Esempio n. 6
0
/*************************************************************************//**
*****************************************************************************/
uint16_t PHY_RandomReq(void)
{
	uint16_t rnd = 0;

	phyTrxSetState(TRX_CMD_RX_ON);

	for (uint8_t i = 0; i < 16; i += 2) {
		delay_us(RANDOM_NUMBER_UPDATE_INTERVAL);
		rnd |= PHY_RSSI_REG_s.rndValue << i;
	}

	phySetRxState();

	return rnd;
}
Esempio n. 7
0
/*************************************************************************//**
*****************************************************************************/
void PHY_Init(void)
{
  TRXPR_REG_s.trxrst = 1;

  phyRxState = false;
  phyState = PHY_STATE_IDLE;

  phyTrxSetState(TRX_CMD_TRX_OFF);

  TRX_CTRL_2_REG_s.rxSafeMode = 1;

#ifdef PHY_ENABLE_RANDOM_NUMBER_GENERATOR
  CSMA_SEED_0_REG = (uint8_t)PHY_RandomReq();
#endif
}
Esempio n. 8
0
/*************************************************************************//**
*****************************************************************************/
void PHY_Sleep(void)
{
  phyTrxSetState(TRX_CMD_TRX_OFF);
  TRXPR_REG_s.slptr = 1;
  phyState = PHY_STATE_SLEEP;
#if defined(PLATFORM_WM100) || defined(PLATFORM_WM100_DUINO)
	#if (ANTENNA_DIVERSITY == 1)
		ANT_DIV_REG_s.antExtSwEn = 0;
		ANT_DIV_REG_s.antDivEn = 0;
	#endif // ANTENNA_DIVERSITY
	#ifdef EXT_RF_FRONT_END_CTRL
		TRX_CTRL_1_REG_s.paExtEn = 0;
	#endif // EXT_RF_FRONT_END_CTRL
#endif // PLATFORM_WM100
}
Esempio n. 9
0
/*************************************************************************//**
*****************************************************************************/
int8_t PHY_EdReq(void)
{
  int8_t ed;

  phyTrxSetState(TRX_CMD_RX_ON);

  IRQ_STATUS_REG_s.ccaEdDone = 1;
  PHY_ED_LEVEL_REG = 0;
  while (0 == IRQ_STATUS_REG_s.ccaEdDone);

  ed = (int8_t)PHY_ED_LEVEL_REG + PHY_RSSI_BASE_VAL;

  phySetRxState();

  return ed;
}
Esempio n. 10
0
/*************************************************************************//**
*****************************************************************************/
void PHY_Sleep(void)
{
	phyTrxSetState(TRX_CMD_TRX_OFF);
	TRXPR_REG_s.slptr = 1;
	phyState = PHY_STATE_SLEEP;
}