diff --git a/df_datalink_sp/src/networking/phy_layer/phy_layer.c b/df_datalink_sp/src/networking/phy_layer/phy_layer.c index af115ac..76c1adb 100644 --- a/df_datalink_sp/src/networking/phy_layer/phy_layer.c +++ b/df_datalink_sp/src/networking/phy_layer/phy_layer.c @@ -1119,32 +1119,66 @@ void Phy_UpdateHwSate(PHY_INST *instPtr) ASSERT(instPtr != NULL); uint32_t rawData; #ifndef EMULATION - // -- Update Chip voltage, unit mV + float evalData; + // -- Update Ps voltage, unit mV rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCPINT); - instPtr->hwSate.spVolt = (uint16_t)(XAdcPs_RawToVoltage(rawData) * 1000); + evalData = XAdcPs_RawToVoltage(rawData); + instPtr->hwSate.spPsVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) evalData/VOLTAGE_LSB; + + // -- Update Ps aux voltage, unit mV + rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCPAUX); + evalData = XAdcPs_RawToVoltage(rawData); + instPtr->hwSate.spPsAuxVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) evalData/VOLTAGE_LSB; + + // -- Update DDR voltage, unit mV + rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCPDRO); + evalData = XAdcPs_RawToVoltage(rawData); + instPtr->hwSate.spDdrVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) evalData/VOLTAGE_LSB; + + // -- Update PL voltage, unit mV + rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCINT); + evalData = XAdcPs_RawToVoltage(rawData); + instPtr->hwSate.spPlVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) evalData/VOLTAGE_LSB; + + // -- Update PL aux voltage, unit mV + rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VCCAUX); + evalData = XAdcPs_RawToVoltage(rawData); + instPtr->hwSate.spPlAuxVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) evalData/VOLTAGE_LSB; + + // -- Update Bram voltage, unit mV + rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_VBRAM); + evalData = XAdcPs_RawToVoltage(rawData); + instPtr->hwSate.spBramVolt = (evalData > VOLTAGE_MAX) ? UINT8_MAX : (uint8_t) evalData/VOLTAGE_LSB; // -- Update Chip temperature, unit 0.01 deg rawData = XAdcPs_GetAdcData(&(instPtr->hwXadc), XADCPS_CH_TEMP); - instPtr->hwSate.spTemp = (uint16_t)(XAdcPs_RawToTemperature(rawData) * 100); - - // FIXME: Chip status determine. - instPtr->hwSate.chipSt = 0; + evalData = XAdcPs_RawToTemperature(rawData); + instPtr->hwSate.spTemp = (evalData > TEMPERATURE_MAX) + ? INT8_MAX + : ((evalData < TEMPERATURE_MIN) ? INT8_MIN : (int8_t) evalData/TEMPERATURE_LSB); + // TODO: is OK? + instPtr->hwSate.isSpOk = true; #else - instPtr->hwSate.spVolt = 0; - instPtr->hwSate.spTemp = 0; - instPtr->hwSate.chipSt = 0; + instPtr->spPsVolt = 0; + instPtr->spPsAuxVolt = 0; + instPtr->spDdrVolt = 0; + instPtr->spPlVolt = 0; + instPtr->spPlAuxVolt = 0; + instPtr->spBramVolt = 0; + instPtr->spTemp = 0; + instPtr->isSpOk = true; #endif /*** Voltage and Status ***/ rawData = PhyRead(instPtr, ANT_STATUS); - // -- Update Antenna Status Code: 0xAA - normal, 0x55 - error - instPtr->hwSate.antSt = ((rawData & ANT_STATUS_CODE_MASK) == 0) ? 0xAA : 0x55; // -- Update Antenna Voltage Status: 1 - normal, 0 - error // [0] - ANT voltage status // [2] - RF voltage status // [4] - NIL voltage status - instPtr->hwSate.antVolt = (rawData & ANT_STATUS_ANT_VOLT_MASK) ? 0x01 : 0x00; - instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_RF_VOLT_MASK) ? 0x04 : 0x00; - instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_NIL_VOLT_MASK) ? 0x10 : 0x00; + // [6] - Antenna status + instPtr->hwSate.antVolt = (rawData & ANT_STATUS_ANT_VOLT_MASK != 0) ? 0x01 : 0x00; + instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_RF_VOLT_MASK!= 0) ? 0x04 : 0x00; + instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_NIL_VOLT_MASK!= 0) ? 0x10 : 0x00; + instPtr->hwSate.antVolt |= (rawData & ANT_STATUS_CODE_MASK!= 0) ? 0x40 : 0x00; /*** Temperature and Lock Status ***/ rawData = PhyRead(instPtr, RF_STATUS); @@ -1165,9 +1199,19 @@ void Phy_UpdateHwSate(PHY_INST *instPtr) // [7:4] - Channel 2 MGC // [11:8] - Channel 3 MGC // [15:12] - Channel 4 MGC - instPtr->hwSate.antMgc = (rawData & RF_MGC_CH1_MASK); - instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH2_MASK) >> 4; - instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH3_MASK) >> 8; - instPtr->hwSate.antMgc |= (rawData & RF_MGC_CH4_MASK) >> 12; - SysMonitor_UpdateHardwareStatus(&(instPtr->hwSate)); + instPtr->hwSate.antMgc0 = (rawData & RF_MGC_CH1_MASK); + instPtr->hwSate.antMgc0 |= (rawData & RF_MGC_CH2_MASK) >> 4; + instPtr->hwSate.antMgc1 = (rawData & RF_MGC_CH3_MASK) >> 16; + instPtr->hwSate.antMgc1 |= (rawData & RF_MGC_CH4_MASK) >> 24; + + // Determin if antenna is ok. + if(instPtr->hwSate.antVolt != 0x55 //01010101 + ||instPtr->hwSate.antPll != 0x15) // 00010101 + { + instPtr->hwSate.isSpOk = false; + } + else + { + instPtr->hwSate.isSpOk = true; + } }