Ejemplo n.º 1
0
/*=====================================================================================================*/
void NRF24L01_Init( u8 NRF_INIT_MODE )
{
  NRF_CE = 0;
  NRF_SetAddr(NRF_TX_ADDR, TX_ADDRESS);             // 設定 TX 地址
  NRF_SetAddr(NRF_RX_ADDR_P0, RX_ADDRESS);          // 設定 RX 地址
  NRF_WriteReg(CMD_W_REG | NRF_EN_AA, 0x01);        // 致能通道0的自動應答
  NRF_WriteReg(CMD_W_REG | NRF_EN_RXADDR, 0x01);    // 致能 data Pipe 0 的接收地址
  NRF_WriteReg(CMD_W_REG | NRF_SETUP_RETR, 0x1A);   // 設定自動重發間隔時間:500us + 86us;最大自動重發次數:10次
  NRF_SetChannel(NRF_CHANAL);                       // 設定傳輸通道(頻率)
  NRF_SetDataRate(NRF_RATE_250Kbps);                // 設定傳輸速率 2Mbps
//  NRF_WriteReg(CMD_W_REG | NRF_RX_PW_P0, NRF_TX_PL_WIDTH);  // 設定通道0的有效數據寬度

  switch(NRF_INIT_MODE) {

    case NRF_MODE_FTLR:
      NRF_WriteReg(CMD_W_REG | NRF_CONFIG, 0x0E);   // Power UP,Enable 16bit CRC,TX Mode,no mask
      NRF_FlushRxFIFO();
      NRF_FlushTxFIFO();
      break;

    case NRF_MODE_FRLT:
      NRF_FlushRxFIFO();
      NRF_FlushTxFIFO();
      NRF_WriteReg(CMD_W_REG | NRF_CONFIG, 0x0F);   // Power UP,Enable 16bit CRC,RX Mode,no mask
      break;
  }

  NRF_WriteReg(CMD_RX_PL_WID, 0x73);
  NRF_WriteReg(CMD_W_REG | NRF_DYNPD, 0x01);
  NRF_WriteReg(CMD_W_REG | NRF_FEATURE, 0x07);

  NRF_CE = 1;
}
/*=====================================================================================================*/
u8 NRF_TxPacket( u8 *TxBuf )
{
  u8 Status;

  NRF_TxData(TxBuf);

  while(NRF_IRQ!=0);
  Status = NRF_ReadReg(CMD_R_REG | NRF_STATUS);
  NRF_WriteReg(CMD_W_REG | NRF_STATUS, Status);
  NRF_FlushTxFIFO();

  if(Status&NRF_STA_MAX_RT)
    return NRF_STA_MAX_RT;
  else if(Status&NRF_STA_TX_DS)
    return NRF_STA_TX_DS;
  else
    return ERROR;
}