void NRF_ReadSingleRegister(uint8_t reg, uint8_t* data){ SPI_ClearRxBuffer(); Control_Write(0); SPI_WriteTxData(NRF_R_REGISTER | reg); SPI_WriteTxData(NRF_NOP); while(!(SPI_ReadTxStatus() & SPI_STS_SPI_IDLE)); Control_Write(1); (void)SPI_ReadRxData(); /* Dummy read, this is the STATUS Register */ *data = SPI_ReadRxData(); return; }
// Read short register uint8 zigbee_short_read(uint8 adr) { adr = adr << 1; // Setup address for read SPI_WriteTxData(adr); // Send SPI address SPI_WriteTxData(0x00); // Send dummy byte for read while( !(SPI_ReadTxStatus() & 0x01)); // while not: SPI-done, wait return SPI_ReadRxData(); // Read SPI data }
void NRF_ReadMultipleRegister(uint8_t reg, uint8_t* bufIn , uint8_t bufSize){ uint8_t i = 0, j = 0; SPI_ClearRxBuffer(); Control_Write(0); SPI_WriteTxData(NRF_R_REGISTER | reg); for(; i < bufSize; i++){ SPI_WriteTxData(NRF_NOP); } (void)SPI_ReadRxData(); /* Dummy read, this is the STATUS Register */ for(; j < bufSize; j++){ *(bufIn + j) = SPI_ReadRxData(); } while(!(SPI_ReadTxStatus() & SPI_STS_SPI_IDLE)); Control_Write(1); return; }
/** * @brief Funcion para obtener el registro STATUS. * @return Valor del registro STATUS. */ uint8_t NRF_GetStatus(void){ SPI_ClearRxBuffer(); Control_Write(0); SPI_WriteByte(NRF_NOP); while(!(SPI_ReadTxStatus() & SPI_STS_SPI_IDLE)); Control_Write(1); return (uint8_t)SPI_ReadRxData(); }
// Read long register uint8 zigbee_long_read(uint16 adr) { uint8 adrMSB, adrLSB; adr = (adr << 5) | (1 << 15); // Setup address for read adrMSB = adr >> 8; // Setup address MSB adrLSB = adr; // Setup address LSB SPI_WriteTxData(adrMSB); // Send SPI address MSB SPI_WriteTxData(adrLSB); // Send SPI address LSB SPI_WriteTxData(0x00); // Send dummy byte for read while( !(SPI_ReadTxStatus() & 0x01)); // while not: SPI-done, wait return SPI_ReadRxData(); // Read SPI data }