/** * @brief Enables or Disables the output of temperature sensor on SPIRIT GPIO_0. * @param xNewState new state for temperature sensor. * This parameter can be: S_ENABLE or S_DISABLE. * @retval None. */ void SpiritGpioTemperatureSensor(SpiritFunctionalState xNewState) { uint8_t tempRegValue = 0x00; uint8_t gpio0tempRegValue = 0x00; /* Check the parameters */ s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState)); /* Reads the ANA_FUNC_CONF0 register and mask the result to enable or disable the temperature sensor */ g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue); if(xNewState == S_ENABLE) { tempRegValue |= TEMPERATURE_SENSOR_MASK; } else { tempRegValue &= (~TEMPERATURE_SENSOR_MASK); gpio0tempRegValue = 0x0A; /* Default value */ } g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue); /* Sets the SPIRIT GPIO_0 according to input request */ g_xStatus = SpiritSpiWriteRegisters(GPIO0_CONF_BASE, 1, &gpio0tempRegValue); }
/** * @brief Updates the gState (the global variable used to maintain memory of Spirit Status) * reading the MC_STATE register of SPIRIT. * @param None * @retval None */ void SpiritRefreshStatus(void) { uint8_t tempRegValue; /* Reads the MC_STATUS register to update the g_xStatus */ g_xStatus = SpiritSpiReadRegisters(MC_STATE1_BASE, 1, &tempRegValue); }
/** * @brief Sets the battery level. * @param xBatteryLevel new state for battery level. * This parameter can be a value of @ref BatteryLevel. * @retval None. */ void SpiritGeneralSetBatteryLevel(BatteryLevel xBatteryLevel) { uint8_t tempRegValue; /* Check the parameters */ s_assert_param(IS_BLD_LVL(xBatteryLevel)); /* Reads the ANA_FUNC_CONF1_BASE register value */ g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF1_BASE, 1, &tempRegValue); /* Build the value to be stored */ tempRegValue &= ~ANA_FUNC_CONF1_SET_BLD_LVL_MASK; switch(xBatteryLevel) { case BLD_LVL_2_7_V: tempRegValue |= BLD_LVL_2_7; break; case BLD_LVL_2_5_V: tempRegValue |= BLD_LVL_2_5; break; case BLD_LVL_2_3_V: tempRegValue |= BLD_LVL_2_3; break; case BLD_LVL_2_1_V: tempRegValue |= BLD_LVL_2_1; break; } /* Writes the new value */ g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF1_BASE, 1, &tempRegValue); }
/** * @brief Verifies if a specific IRQ has been generated. * The call resets all the IRQ status, so it can't be used in case of multiple raising interrupts. * @param xFlag IRQ flag to be checked. * This parameter can be any value of @ref IrqList. * @retval SpiritBool S_TRUE or S_FALSE. */ SpiritBool SpiritIrqCheckFlag(IrqList xFlag) { uint8_t tempRegValue[4]; uint32_t tempValue = 0; SpiritBool flag; /* Check the parameters */ s_assert_param(IS_SPIRIT_IRQ_LIST(xFlag)); /* Reads registers and build the status word */ g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, tempRegValue); for(uint8_t i=0; i<4; i++) { tempValue += ((uint32_t)tempRegValue[i])<<(8*(3-i)); } if(tempValue & xFlag) { flag = S_TRUE; } else { flag = S_FALSE; } return flag; }
/** * @brief Clear the IRQ status registers. * @param None. * @retval None. */ void SpiritIrqClearStatus(void) { uint8_t tempRegValue[4]; /* Reads the IRQ_STATUS registers clearing all the flags */ g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, tempRegValue); }
void SpiritManagementWaExtraCurrent(void) { uint8_t tmp= 0xCA;SpiritSpiWriteRegisters(0xB2, 1, &tmp); tmp= 0x04;SpiritSpiWriteRegisters(0xA8, 1, &tmp); /* just a read to loose some microsecs more */ SpiritSpiReadRegisters(0xA8, 1, &tmp); tmp= 0x00;SpiritSpiWriteRegisters(0xA8, 1, &tmp); }
/** * @brief Returns the LDCR timer reload bit. * @param None. * @retval SpiritFunctionalState: value of the reload bit. */ SpiritFunctionalState SpiritTimerLdcrGetAutoReload(void) { uint8_t tempRegValue; /* Reads the register value */ g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue); return (SpiritFunctionalState)(tempRegValue & 0x80); }
/** * @brief Returns device version number. * @param None. * @retval uint8_t Device version number. */ uint8_t SpiritGeneralGetDeviceVersionNumber(void) { uint8_t tempRegValue; /* Reads the register value containing the device version number */ g_xStatus = SpiritSpiReadRegisters(DEVICE_INFO0_VERSION, 1, &tempRegValue); return tempRegValue; }
/** * @brief Returns device part number. * @param None. * @retval uint8_t Device part number. */ uint8_t SpiritGeneralGetDevicePartNumber(void) { uint8_t tempRegValue; /* Reads the register value containing the device part number */ g_xStatus = SpiritSpiReadRegisters(DEVICE_INFO1_PARTNUM, 1, &tempRegValue); return tempRegValue; }
/** * @brief Returns device part number. * @param None. * @retval uint16_t Device part number. */ uint16_t SpiritGeneralGetDevicePartNumber(void) { uint8_t tempRegValue[2]; /* Reads the register value containing the device part number */ g_xStatus = SpiritSpiReadRegisters(DEVICE_INFO1_PARTNUM, 2, tempRegValue); return ((((uint16_t)tempRegValue[0])<<8) | ((uint16_t)tempRegValue[1])); }
/** * @brief Returns the sequence number of the transmitted packet. * @param None. * @retval uint8_t Sequence number of the transmitted packet. */ uint8_t SpiritPktCommonGetTransmittedSeqNumber(void) { uint8_t tempRegValue; /* Reads the TX_PCKT_INFO register value */ g_xStatus = SpiritSpiReadRegisters(TX_PCKT_INFO_BASE, 1, &tempRegValue); /* Obtains and returns the TX sequence number */ return (tempRegValue >> 4) & 0x07; }
/** * @brief Returns the configured XO gm at startup. * @param None. * @retval GmConf Settled XO gm. This parameter can be a value of @ref GmConf. */ GmConf SpiritGeneralGetXoGm(void) { uint8_t tempRegValue; /* Reads the ANA_FUNC_CONF1_BASE register value */ g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF1_BASE, 1, &tempRegValue); /* Mask the GM_CONF field field and returns the settled transconductance of the XO at startup */ return ((GmConf)((tempRegValue & 0x1C)>>2)); }
/** * @brief Returns the settled packet format. * @param None. * @retval PacketType Settled packet type. This parameter can be a value of @ref PacketType. */ PacketType SpiritGeneralGetPktType(void) { uint8_t tempRegValue; /* Reads the PROTOCOL1 register */ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue); /* cast and return value */ return (PacketType)(tempRegValue>>6); }
/** * @brief Returns the settled battery level. * @param None. * @retval BatteryLevel Settled battery level. This parameter can be a value of @ref BatteryLevel. */ BatteryLevel SpiritGeneralGetBatteryLevel(void) { uint8_t tempRegValue; /* Reads the ANA_FUNC_CONF1_BASE register value */ g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF1_BASE, 1, &tempRegValue); /* Mask the battery level field and returns the settled battery level */ return ((BatteryLevel)(tempRegValue & ANA_FUNC_CONF1_SET_BLD_LVL_MASK)); }
/** * @brief Returns External Reference. * @param None. * @retval ModeExtRef Settled external reference. * This parameter can be: MODE_EXT_XO or MODE_EXT_XIN. */ ModeExtRef SpiritGeneralGetExtRef(void) { uint8_t tempRegValue; /* Reads the ANA_FUNC_CONF0_BASE register value and return the result */ g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue); /* Mask the EXT_REF field field and returns the settled reference signal */ return ((ModeExtRef)((tempRegValue & 0x10)>>4)); }
/** * @brief Returns the address of the present node. * @param None. * @retval uint8_t My address (address of this node). */ uint8_t SpiritPktCommonGetMyAddress(void) { uint8_t tempRegValue; /* Reads value on the PCKT_FLT_GOALS_TX_ADDR register */ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_TX_ADDR_BASE, 1, &tempRegValue); /* Return value */ return tempRegValue; }
/** * @brief Returns the multicast address. * @param None. * @retval uint8_t Multicast address. */ uint8_t SpiritPktCommonGetMulticastAddress(void) { uint8_t tempRegValue; /* Reads value on the PCKT_FLT_GOALS_MULTICAST register */ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_MULTICAST_BASE, 1, &tempRegValue); /* Return value */ return tempRegValue; }
/** * @brief Returns the CRC mode for SPIRIT packets. * @param None. * @retval PktCrcMode Crc mode. */ PktCrcMode SpiritPktCommonGetCrcMode(void) { uint8_t tempRegValue; /* Reads the PCKTCTRL1 register */ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue); /* Rebuild and return value */ return (PktCrcMode)(tempRegValue & 0xE0); }
/** * @brief Returns the variable length width (in number of bits). * @param None. * @retval uint8_t Variable length width in bits. */ uint8_t SpiritPktCommonGetVarLengthWidth(void) { uint8_t tempRegValue; /* Reads the PCKTCTRL3 register value */ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue); /* Rebuild and return value */ return (tempRegValue & PCKTCTRL3_LEN_WID_MASK)+1; }
/** * @brief Returns the source address of the received packet. * @param None. * @retval uint8_t Source address of the received packet. */ uint8_t SpiritPktCommonGetReceivedSourceAddress(void) { uint8_t tempRegValue; /* Reads the RX_ADDR_FIELD1 register value */ g_xStatus = SpiritSpiReadRegisters(RX_ADDR_FIELD1_BASE, 1, &tempRegValue); /* Returns value */ return tempRegValue; }
/** * @brief Returns the SYNC field Length for SPIRIT packets. * @param None. * @retval uint8_t Sync field length in bytes. */ uint8_t SpiritPktCommonGetSyncLength(void) { uint8_t tempRetValue; /* Reads the PCKTCTRL2 register value */ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRetValue); /* Rebuild and return value */ return ((tempRetValue & PCKTCTRL2_SYNC_LENGTH_MASK)>>1) + 1; }
/** * @brief Returns the almost full threshold for Tx FIFO. * @note The almost full threshold is encountered from the top of the FIFO. For example, if it is set to 7 the almost * full FIFO irq will be raised when the number of elements is equals to 96-7 = 89. * @param None. * @retval uint8_t Almost full threshold for Tx FIFO. */ uint8_t SpiritLinearFifoGetAlmostFullThresholdTx(void) { uint8_t tempRegValue; /* Reads the almost full threshold for Tx FIFO and returns the value */ g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG1_TXAFTHR_BASE, 1, &tempRegValue); /* Build and returns value */ return (tempRegValue & 0x7F); }
/** * @brief Returns the number of elements in the Rx FIFO. * @param None. * @retval uint8_t Number of elements in the Rx FIFO. */ uint8_t SpiritLinearFifoReadNumElementsRxFifo(void) { uint8_t tempRegValue; /* Reads the register value */ g_xStatus = SpiritSpiReadRegisters(LINEAR_FIFO_STATUS0_BASE, 1, &tempRegValue); /* Build and return value */ return (tempRegValue & 0x7F); }
/** * @brief Returns the Nack bit of the received packet * @param None. * @retval uint8_t Value of the Nack bit. */ uint8_t SpiritPktCommonGetReceivedNackRx(void) { uint8_t tempRegValue; /* Reads the RX_PCKT_INFO register value */ g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue); /* Obtains and returns the RX nack bit */ return (tempRegValue >> 2) & 0x01; }
/** * @brief Returns the sequence number of the received packet. * @param None. * @retval uint8_t Received Sequence number. */ uint8_t SpiritPktCommonGetReceivedSeqNumber(void) { uint8_t tempRegValue; /* Reads the RX_PCKT_INFO register value */ g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue); /* Obtains and returns the sequence number */ return tempRegValue & 0x03; }
/** * @brief Returns the CONTROL field length for SPIRIT packets. * @param None. * @retval uint8_t Control field length. */ uint8_t SpiritPktCommonGetControlLength(void) { uint8_t tempRegValue; /* Reads the PCKTCTRL4 register value */ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue); /* Rebuild and return value */ return (tempRegValue & PCKTCTRL4_CONTROL_LEN_MASK); }
/** * @brief Returns the number of elements in the Tx FIFO. * @param None. * @retval uint8_t Number of elements in the Tx FIFO. */ uint8_t SpiritLinearFifoReadNumElementsTxFifo(void) { uint8_t tempRegValue; /* Reads the number of elements in TX FIFO and return the value */ g_xStatus = SpiritSpiReadRegisters(LINEAR_FIFO_STATUS1_BASE, 1, &tempRegValue); /* Build and return value */ return (tempRegValue & 0x7F); }
/** * @brief Returns the number of retransmission done on the transmitted packet. * @param None. * @retval uint8_t Number of retransmissions done until now. */ uint8_t SpiritPktCommonGetNReTx(void) { uint8_t tempRetValue; /* Reads the TX_PCKT_INFO register value */ g_xStatus = SpiritSpiReadRegisters(TX_PCKT_INFO_BASE, 1, &tempRetValue); /* Obtains and returns the number of retransmission done */ return (tempRetValue & 0x0F); }
/** * @brief Returns the almost empty threshold for Tx FIFO. * @param None. * @retval uint8_t Almost empty threshold for Tx FIFO. */ uint8_t SpiritLinearFifoGetAlmostEmptyThresholdTx(void) { uint8_t tempRegValue; /* Reads the almost empty threshold for TX FIFO and returns the value */ g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG0_TXAETHR_BASE, 1, &tempRegValue); /* Build and return value */ return (tempRegValue & 0x7F); }
/** * @brief Returns the PREAMBLE field Length mode for SPIRIT packets. * @param None. * @retval uint8_t Preamble field length in bytes. */ uint8_t SpiritPktCommonGetPreambleLength(void) { uint8_t tempRegValue; /* Reads the PCKTCTRL2 register value */ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue); /* Rebuild and return value */ return ((tempRegValue & PCKTCTRL2_PREAMBLE_LENGTH_MASK)>>3) + 1; }