コード例 #1
0
ファイル: hal_nrf.c プロジェクト: ydwzj/STM32F4
uint16_t hal_nrf_read_multibyte_reg(uint8_t reg, uint8_t *buf)
{
  uint8_t ctr, length;
  uint8_t memtype;
  uint8_t read_byte, dummy = 0U; /*lint -esym(530,read_byte) symbol not initialized*/
  bool first_round;
  first_round = true;

  switch(reg)
  {
    case HAL_NRF_PIPE0:
    case HAL_NRF_PIPE1:
    case HAL_NRF_TX:
      length = ctr = hal_nrf_get_address_width();
      CSN_LOW();
      hal_nrf_rw(RX_ADDR_P0 + reg);
      break;

    case HAL_NRF_RX_PLOAD:
      reg = hal_nrf_get_rx_data_source();
      if (reg < 7U)
      {
        length = ctr = hal_nrf_read_rx_payload_width();
        CSN_LOW();
        hal_nrf_rw(R_RX_PAYLOAD);
      }
      else
      {
        ctr = length = 0U;
      }
      break;

    default:
      ctr = length = 0U;
      break;
  }    
	while( ctr-- ){
			HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)&dummy, (uint8_t *)buf++, 1, 5000);
      /*if (!first_round) \
      { \
        *buf = read_byte; \
        buf++; \
      } \
      else \
      { \
        first_round = false; \
      } \*/
      /* wait for byte transfer finished */ \
    }
    //*buf = read_byte;

  CSN_HIGH();

  return (((uint16_t) reg << 8) | length);
}
コード例 #2
0
ファイル: hal_nrf.c プロジェクト: Red-Li/stm32
uint16_t hal_nrf_read_multibyte_reg(uint8_t reg, uint8_t *pbuf)
{
  uint8_t ctr, length;
  uint8_t memtype;
  uint8_t read_byte = 0; /*lint -esym(530,read_byte) symbol not initialized*/
  bool first_round;
  first_round = true;

  memtype = *(uint8_t*)(&pbuf);

  switch(reg)
  {
    case HAL_NRF_PIPE0:
    case HAL_NRF_PIPE1:
    case HAL_NRF_TX:
      length = ctr = hal_nrf_get_address_width();
      CSN_LOW();
      hal_nrf_rw(RX_ADDR_P0 + reg);
      break;

    case HAL_NRF_RX_PLOAD:
      reg = hal_nrf_get_rx_data_source();
      if (reg < 7U)
      {
        length = ctr = hal_nrf_read_rx_payload_width();
        CSN_LOW();
        hal_nrf_rw(R_RX_PAYLOAD);
      }
      else
      {
        ctr = length = 0U;
      }
      break;

    default:
      ctr = length = 0U;
      break;
  }

  if (memtype == 0x00U)
  {
    uint8_t data *buf = (uint8_t data *)pbuf;
    NRF_READ_MULTIBYTE_REG_COMMON_BODY
  }
コード例 #3
0
ファイル: hal_nrf.c プロジェクト: olatief/Headstage
void hal_nrf_set_address(const hal_nrf_address_t address, const uint8_t *addr)
{
  switch(address)
  {
    case HAL_NRF_TX:
    case HAL_NRF_PIPE0:
    case HAL_NRF_PIPE1:
      hal_nrf_write_multibyte_reg(W_REGISTER + RX_ADDR_P0 + (uint8_t) address, addr, hal_nrf_get_address_width());
      break;
    case HAL_NRF_PIPE2:
    case HAL_NRF_PIPE3:
    case HAL_NRF_PIPE4:
    case HAL_NRF_PIPE5:
      hal_nrf_write_reg (RX_ADDR_P0 + (uint8_t) address, *addr);
      break;

    default:
      break;
  }
}
コード例 #4
0
ファイル: hal_nrf.c プロジェクト: olatief/Headstage
uint16_t hal_nrf_read_multibyte_reg(uint8_t data reg, uint8_t data *pbuf)
{
  uint8_t data ctr, length;
  switch(reg)
  {
    case HAL_NRF_PIPE0:
    case HAL_NRF_PIPE1:
    case HAL_NRF_TX:
      length = ctr = hal_nrf_get_address_width();
      CSN_LOW();
      hal_nrf_rw(RX_ADDR_P0 + reg);
      break;
      
    case HAL_NRF_RX_PLOAD:
      if( (reg = hal_nrf_get_rx_data_source()) < 7)
      {
        length = ctr = hal_nrf_read_rx_payload_width();
        CSN_LOW();
        hal_nrf_rw(R_RX_PAYLOAD);
      }
      else
      {
        ctr = length = 0;
      }
      break;

    default:
      ctr = length = 0;
      break;
  }

  while(ctr--)
  {
    *pbuf++ = hal_nrf_rw(0);
  }

  CSN_HIGH();

  return (((uint16_t) reg << 8) | length);
}