Index: firmware/App/Services/FpgaDD.c =================================================================== diff -u -rf2511feb9d636af8a938374f96c3199125f3bdd8 -rbef932558c7e8e50ab60c5f8c0c1967b8d7d4ca4 --- firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision f2511feb9d636af8a938374f96c3199125f3bdd8) +++ firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision bef932558c7e8e50ab60c5f8c0c1967b8d7d4ca4) @@ -1,18 +1,18 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-2026 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file FpgaDD.c * -* @author (last) Vinayakam Mani -* @date (last) 05-Aug-2024 +* @author (last) “rkallala” +* @date (last) 19-Jan-2026 * * @author (original) Vinayakam Mani -* @date (original) 05-Aug-2024 +* @date (original) 26-Aug-2024 * ***************************************************************************/ @@ -235,12 +235,12 @@ U16 flowRateP7; ///< Reg 704. P7 flow sensor rate. U16 flowTempP7; ///< Reg 706. P7 flow sensor temperature. U16 p12PumpTachCount; ///< Reg 708. P12 pump tachometer counter. - U16 dsPumpTachCount; ///< Reg 710. DSP tachometer counter. + U16 d79SpeedPulseWidth; ///< Reg 710. D79 pusle width feedback. U16 flowIntTempP7; ///< Reg 712. P7 flow sensor internal temperature. - U08 valveIOControlReadback; ///< Reg 714. Valve IO control bits read back. - U08 valveFPControlReadback; ///< Reg 715. Valve FP control bits read back. - U08 valveIOPWMEnableReadback; ///< Reg 716. Valve IO PWM enable read back. - U08 valveFPPWMEnableReadback; ///< Reg 717. Valve FP PWM enable read back. + U08 valveIOControlReadback; ///< Reg 714. IO Valve control bits read back. + U08 valveFPControlReadback; ///< Reg 715. FP Valve control enable read back. + U08 valveIOPWMEnableReadback; ///< Reg 714. IO Valve PWM enable read back. + U08 valveFPPWMEnableReadback; ///< Reg 715. FP Valve PWM enable read back. U16 p12PumpPWMReadback; ///< Reg 718. P12 pump PWM read back. U16 p40PumpPWMReadback; ///< Reg 720. P40 pump PWM read back. U08 p7flowReadCount; ///< Reg 722. P7 Flow sensor read counter. @@ -295,13 +295,13 @@ U08 fpgaD42FIFOTx; ///< Reg 48. Blood leak sensor FIFO transmit control U08 fpgaD5HeaterPWMControl; ///< Reg 49. Primary heater PWM control U08 fpgaD45HeaterPWMControl; ///< Reg 50. Trimmer heater PWM control - U08 fpgaNotUsed; ///< Reg 51. Not used + U08 fpgaD79PWMPumpCtl; ///< Reg 51. Rinse pump PWM control U16 fpgaVBCPWMLow; ///< Reg 52. VBC PWM low ( Balancing chamber valves) U16 fpgaVBCPWMPeriod; ///< Reg 54. VBC PWM period - U16 fpgaVBCPWMPullin; ///< Reg 56. VBC PWM pull in + U16 fpgaVBCPWMPullIn; ///< Reg 56. VBC PWM pull in U16 fpgaVSPPWMLow; ///< Reg 58. VSP PWM low ( Spare valves ) U16 fpgaVSPPWMPeriod; ///< Reg 60. VSP PWM period - U16 fpgaVSPPWMPullin; ///< Reg 62. VSP PWM pull in + U16 fpgaVSPPWMPullIn; ///< Reg 62. VSP PWM pull in U16 fpgaD11PumpRevCount; ///< Reg 64. Acid Concentrate pump revolution count U16 fpgaD10PumpRevCount; ///< Reg 66. Bicarb Concentrate pump revolution count U08 fpgaADCControl; ///< Reg 68. FPGA internal ADC Control register for debugging @@ -313,8 +313,8 @@ U08 fpgaD76PumpControl; ///< Reg 78. UF Pump Control U08 notused; ///< Reg 79. Not used - U08 valveIOControl; ///< Reg 80. Valve IO control register. - U08 valveFPControl; ///< Reg 81. Valve FP control register. + U08 valveIOControl; ///< Reg 80. IO Valve control register. + U08 valveFPControl; ///< Reg 81. FP Valve control register. U08 conductivityP9Control; ///< Reg 82. P9 conductivity control register. U08 conductivityP18Control; ///< Reg 83. P18 conductivity control register. U16 conductivityP9Address; ///< Reg 84. P9 conductivity address register. @@ -324,9 +324,9 @@ U16 descalePumpSpeed; ///< Reg 96. Descaler pump speed register. U08 descalePumpControl; ///< Reg 98. Descaler pump control register. U08 p12PumpControl; ///< Reg 99. P12 pump control register. - U16 valveVwiPWMLow; ///< Reg 100. Valve VWi PWM low pulse period in 0.1 uSec. - U16 valveVwiPWMPeriod; ///< Reg 102. Valve VWi PWM full period in 0.1 uSec. - U16 valvePWMPullIn; ///< Reg 104. Valve PWM high pulse period when valve is on in 0.1 uSec. + U16 valveIOFPPWMLow; ///< Reg 100. Valve VWi PWM low pulse period in 0.1 uSec. + U16 valveIOFPPWMPeriod; ///< Reg 102. Valve VWi PWM full period in 0.1 uSec. + U16 valveIOFPPWMPullIn; ///< Reg 104. Valve PWM high pulse period when valve is on in 0.1 uSec. U16 p12PumpPWMDutyCyclePct; ///< Reg 106. P12 pump PWM duty cycle in percentage. U16 p40PumpPWMDutyCyclePct; ///< Reg 108. P40 pump PWM duty cycle in percentage. U08 p40PumpControl; ///< Reg 110. P40 pump control register. @@ -535,6 +535,219 @@ /*********************************************************************//** * @brief + * The setFPGAValveDDPWMEnable function sets the DD valve PWM states with + * * an 8-bit mask representing the set of states with a 1 meaning "enabled" + * and a 0 meaning "disabled" + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaValvePWMEnable + * @param valvePWMStates bit mask for requested valve states. + * @return none + *************************************************************************/ +void setFPGAValveDDPWMEnable( U16 valvePWMStates ) +{ + fpgaActuatorSetPoints.fpgaValvePWMEnable = valvePWMStates; +} + +/*********************************************************************//** + * @brief + * The getFPGAValveDDPWMEnable function gets the DD valve pwm states with + * an 8-bit mask representing the set of states with a 1 meaning "enabled" + * and a 0 meaning "disabled". + * @details \b Inputs: none + * @details \b Outputs: fpgaSensorReadings.fpgaValvePWMEnableStates + * @return none + *************************************************************************/ +U16 getFPGAValveDDPWMEnable( void ) +{ + return fpgaSensorReadings.fpgaValvePWMEnableStates; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveDDPWMPullIn function sets the DD valves Pull-in "strike" + * period where PWM is at 100% in 1ms resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaDDValvePWMPullin + * @param valvePWMPullIn Pull-in period in 1ms resolution. + * @return none + *************************************************************************/ +void setFPGAValveDDPWMPullIn( U16 valvePWMPullIn ) +{ + fpgaActuatorSetPoints.fpgaDDValvePWMPullin = valvePWMPullIn; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveDDPWMLow function sets the DD valves "low" + * period where PWM is at 0% in 0.1us resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaDDValvePWMLow + * @param valvePWMLow low period in 0.1us resolution. + * @return none + *************************************************************************/ +void setFPGAValveDDPWMLow( U16 valvePWMLow ) +{ + fpgaActuatorSetPoints.fpgaDDValvePWMLow = valvePWMLow; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveDDPWMPeriod function sets the DD valves pwm + * period in 0.1us resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaDDValvePWMPeriod + * @param valvePWMPeriod period in 0.1us resolution. + * @return none + *************************************************************************/ +void setFPGAValveDDPWMPeriod( U16 valvePWMPeriod ) +{ + fpgaActuatorSetPoints.fpgaDDValvePWMPeriod = valvePWMPeriod; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveBCPWMEnable function sets the BC valve PWM states with + * * an 8-bit mask representing the set of states with a 1 meaning "enabled" + * and a 0 meaning "disabled" + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaBCValvePWMControl + * @param valvePWMStates bit mask for requested valve states. + * @return none + *************************************************************************/ +void setFPGAValveBCPWMEnable( U08 valvePWMStates ) +{ + fpgaActuatorSetPoints.fpgaBCValvePWMControl = valvePWMStates; +} + +/*********************************************************************//** + * @brief + * The getFPGAValveBCPWMEnable function gets the BC valve pwm states with + * an 8-bit mask representing the set of states with a 1 meaning "enabled" + * and a 0 meaning "disabled". + * @details \b Inputs: none + * @details \b Outputs: fpgaSensorReadings.fpgaValveBCPWMStates + * @return none + *************************************************************************/ +U08 getFPGAValveBCPWMEnable( void ) +{ + return fpgaSensorReadings.fpgaValveBCPWMStates; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveBCPWMPullIn function sets the BC valves Pull-in "strike" + * period where PWM is at 100% in 1ms resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaVBCPWMPullin + * @param valvePWMPullIn Pull-in period in 1ms resolution. + * @return none + *************************************************************************/ +void setFPGAValveBCPWMPullIn( U16 valvePWMPullIn ) +{ + fpgaActuatorSetPoints.fpgaVBCPWMPullIn = valvePWMPullIn; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveBCPWMLow function sets the BC valves "low" + * period where PWM is at 0% in 0.1us resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaVBCPWMLow + * @param valvePWMLow low period in 0.1us resolution. + * @return none + *************************************************************************/ +void setFPGAValveBCPWMLow( U16 valvePWMLow ) +{ + fpgaActuatorSetPoints.fpgaVBCPWMLow = valvePWMLow; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveBCPWMPeriod function sets the BC valves pwm + * period in 0.1us resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaVBCPWMPeriod + * @param valvePWMPeriod period in 0.1us resolution. + * @return none + *************************************************************************/ +void setFPGAValveBCPWMPeriod( U16 valvePWMPeriod ) +{ + fpgaActuatorSetPoints.fpgaVBCPWMPeriod = valvePWMPeriod; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveSPPWMEnable function sets the Spare valve PWM states with + * * an 8-bit mask representing the set of states with a 1 meaning "enabled" + * and a 0 meaning "disabled" + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaDDSpareValvePWMControl + * @param valvePWMStates bit mask for requested valve states. + * @return none + *************************************************************************/ +void setFPGAValveSPPWMEnable( U08 valvePWMStates ) +{ + fpgaActuatorSetPoints.fpgaDDSpareValvePWMControl = valvePWMStates; +} + +/*********************************************************************//** + * @brief + * The getFPGAValveSPPWMEnable function gets the Spare valve pwm states with + * an 8-bit mask representing the set of states with a 1 meaning "enabled" + * and a 0 meaning "disabled". + * @details \b Inputs: none + * @details \b Outputs: fpgaSensorReadings.fpgaValveSpPWMStates + * @return none + *************************************************************************/ +U08 getFPGAValveSPPWMEnable( void ) +{ + return fpgaSensorReadings.fpgaValveSpPWMStates; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveSPPWMPullIn function sets the Spare valves Pull-in "strike" + * period where PWM is at 100% in 1ms resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaVSPPWMPullIn + * @param valvePWMPullIn Pull-in period in 1ms resolution. + * @return none + *************************************************************************/ +void setFPGAValveSPPWMPullIn( U16 valvePWMPullIn ) +{ + fpgaActuatorSetPoints.fpgaVSPPWMPullIn = valvePWMPullIn; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveSPPWMLow function sets the Spare valves "low" + * period where PWM is at 0% in 0.1us resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaVSPPWMLow + * @param valvePWMLow low period in 0.1us resolution. + * @return none + *************************************************************************/ +void setFPGAValveSPPWMLow( U16 valvePWMLow ) +{ + fpgaActuatorSetPoints.fpgaVSPPWMLow = valvePWMLow; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveSPPWMPeriod function sets the Spare valves pwm + * period in 0.1us resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaVSPPWMPeriod + * @param valvePWMPeriod period in 0.1us resolution. + * @return none + *************************************************************************/ +void setFPGAValveSPPWMPeriod( U16 valvePWMPeriod ) +{ + fpgaActuatorSetPoints.fpgaVSPPWMPeriod = valvePWMPeriod; +} + +/*********************************************************************//** + * @brief * The setFPGAD48PumpSpeed function sets the speed for the * spent dialysate pump (SDP). * @details \b Inputs: none @@ -2841,24 +3054,45 @@ /*********************************************************************//** * @brief - * The setFPGAIOValveStates function sets the IO valve states with an 8-bit - * mask of states - one bit per valve, with a 1 meaning "energized" and a 0 - * meaning "de-energized". The bit positions for these bit states are as follows: - * 0 - M4.\n - * 1 - M12.\n - * 2:7- Not used. \n + * The setFPGAD79RinsePumpControl function sets the control bit of the rinse + * pump to turn it on or off. * @details \b Inputs: none - * @details \b Outputs: fpgaActuatorSetPoints.valveIOControl - * @param valveStates bit mask for requested valve states + * @details \b Outputs: fpgaActuatorSetPoints.fpgaDDSpareValveControl * @return none *************************************************************************/ -void setFPGAIOValveStates( U08 valveStates ) +void setFPGAD79RinsePumpControl( U08 value ) { - fpgaActuatorSetPoints.valveIOControl = valveStates; + fpgaActuatorSetPoints.fpgaDDSpareValveControl &= value; } /*********************************************************************//** * @brief + * The setFPGAD79RinsePumpPWMControl function sets the PWM value of the rinse + * pump to turn it on or off. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaD79PWMPumpCtl + * @return none + *************************************************************************/ +void setFPGAD79RinsePumpPWMControl( U08 value ) +{ + fpgaActuatorSetPoints.fpgaD79PWMPumpCtl = value; +} + +/*********************************************************************//** + * @brief + * The getFPGAD79RinsePumpPulseWidth function returns the 4-wire rinse pump + * pulse width. + * @details \b Inputs: d79SpeedPulseWidth + * @details \b Outputs: none + * @return fpgaSensorReadings.d79SpeedPulseWidth + *************************************************************************/ +U16 getFPGAD79RinsePumpPulseWidth( void ) +{ + return fpgaSensorReadings.d79SpeedPulseWidth; +} + +/*********************************************************************//** + * @brief * The setFPGAFPValveStates function sets the FP valve states with an 8-bit * mask of states - one bit per valve, with a 1 meaning "energized" and a 0 * meaning "de-energized". The bit positions for these bit states are as follows: @@ -2868,7 +3102,7 @@ * 3 - P37.\n * 4 - P39.\n * 5 - P6.\n - * 6:7- Not used. \n + * 6:8 - Not used. \n * @details \b Inputs: none * @details \b Outputs: fpgaActuatorSetPoints.valveFPControl * @param valveStates bit mask for requested valve states @@ -2881,6 +3115,38 @@ /*********************************************************************//** * @brief + * The getFPGAFPValveStates function gets the FP valve commanded states with + * an 8-bit mask representing the set of states with a 1 meaning "energized" + * and a 0 meaning "de-energized". + * @details \b Inputs: none + * @details \b Outputs: fpgaSensorReadings.valveFPControlReadback + * @return none + *************************************************************************/ +U08 getFPGAFPValveStates( void ) +{ + return fpgaSensorReadings.valveFPControlReadback; +} + +/*********************************************************************//** + * @brief + * The setFPGAIOValveStates function sets the IO valve states with an 8-bit + * mask of states - one bit per valve, with a 1 meaning "energized" and a 0 + * meaning "de-energized". The bit positions for these bit states are as follows: + * 0 - M4_VALV.\n + * 1 - M12_VALV.\n + * 2:8 - Not used. \n + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.valveIOControl + * @param valveStates bit mask for requested valve states + * @return none + *************************************************************************/ +void setFPGAIOValveStates( U08 valveStates ) +{ + fpgaActuatorSetPoints.valveIOControl = valveStates; +} + +/*********************************************************************//** + * @brief * The getFPGAIOValveStates function gets the IO valve commanded states with * an 8-bit mask representing the set of states with a 1 meaning "energized" * and a 0 meaning "de-energized". @@ -2895,20 +3161,106 @@ /*********************************************************************//** * @brief - * The getFPGAFPValveStates function gets the FP valve commanded states with - * an 8-bit mask representing the set of states with a 1 meaning "energized" - * and a 0 meaning "de-energized". + * The setFPGAValveIOPWMEnable function sets the IO valve PWM states with + * * an 8-bit mask representing the set of states with a 1 meaning "enabled" + * and a 0 meaning "disabled" * @details \b Inputs: none - * @details \b Outputs: fpgaSensorReadings.valveFPControlReadback + * @details \b Outputs: fpgaActuatorSetPoints.valveIOPWMEnable + * @param valvePWMStates bit mask for requested valve states. * @return none *************************************************************************/ -U08 getFPGAFPValveStates( void ) +void setFPGAValveIOPWMEnable( U08 valvePWMStates ) { - return fpgaSensorReadings.valveFPControlReadback; + fpgaActuatorSetPoints.valveIOPWMEnable = valvePWMStates; } /*********************************************************************//** * @brief + * The getFPGAValveIOPWMEnable function gets the IO valve pwm states with + * an 8-bit mask representing the set of states with a 1 meaning "enabled" + * and a 0 meaning "disabled". + * @details \b Inputs: none + * @details \b Outputs: fpgaSensorReadings.valveIOPWMEnableReadback + * @return none + *************************************************************************/ +U08 getFPGAValveIOPWMEnable( void ) +{ + return fpgaSensorReadings.valveIOPWMEnableReadback; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveFPPWMEnable function sets the FP valve PWM states with + * * an 8-bit mask representing the set of states with a 1 meaning "enabled" + * and a 0 meaning "disabled" + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.valveFPPWMEnable + * @param valvePWMStates bit mask for requested valve states. + * @return none + *************************************************************************/ +void setFPGAValveFPPWMEnable( U08 valvePWMStates ) +{ + fpgaActuatorSetPoints.valveFPPWMEnable = valvePWMStates; +} + +/*********************************************************************//** + * @brief + * The getFPGAValveFPPWMEnable function gets the FP valve pwm states with + * an 8-bit mask representing the set of states with a 1 meaning "enabled" + * and a 0 meaning "disabled". + * @details \b Inputs: none + * @details \b Outputs: fpgaSensorReadings.valveFPPWMEnableReadback + * @return none + *************************************************************************/ +U08 getFPGAValveFPPWMEnable( void ) +{ + return fpgaSensorReadings.valveFPPWMEnableReadback; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveIOFPPWMPullIn function sets the IO & FP valves Pull-in "strike" + * period where PWM is at 100% in 1ms resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.valveIOFPPWMPullIn + * @param valvePWMPullIn Pull-in period in 1ms resolution. + * @return none + *************************************************************************/ +void setFPGAValveIOFPPWMPullIn( U16 valvePWMPullIn ) +{ + fpgaActuatorSetPoints.valveIOFPPWMPullIn = valvePWMPullIn; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveIOFPPWMLow function sets the IO & FP valves "low" + * period where PWM is at 0% in 0.1us resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.valveIOFPPWMLow + * @param valvePWMLow low period in 0.1us resolution. + * @return none + *************************************************************************/ +void setFPGAValveIOFPPWMLow( U16 valvePWMLow ) +{ + fpgaActuatorSetPoints.valveIOFPPWMLow = valvePWMLow; +} + +/*********************************************************************//** + * @brief + * The setFPGAValveIOFPPWMPeriod function sets the IO & FP valves pwm + * period in 0.1us resolution. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.valveIOFPPWMPeriod + * @param valvePWMPeriod period in 0.1us resolution. + * @return none + *************************************************************************/ +void setFPGAValveIOFPPWMPeriod( U16 valvePWMPeriod ) +{ + fpgaActuatorSetPoints.valveIOFPPWMPeriod = valvePWMPeriod; +} + +/*********************************************************************//** + * @brief * The setFPGAP12PumpEnable function enables or disables the P12 pump. * @details \b Inputs: none * @details \b Outputs: fpgaActuatorSetPoints.p12PumpControl @@ -3174,6 +3526,19 @@ /*********************************************************************//** * @brief + * The getFPGAFlowP16InternalTemp function gets the P16 flow sensor + * internal temperature. + * @details \b Inputs: fpgaSensorReadings.flowIntTempP16 + * @details \b Outputs: none + * @return P16 internal temperature + *************************************************************************/ +U16 getFPGAFlowP16InternalTemp( void ) +{ + return fpgaSensorReadings.flowIntTempP16; +} + +/*********************************************************************//** + * @brief * The getFPGAFlowP7 function gets the P7 flow rate (in mL/min). * @details \b Inputs: fpgaSensorReadings.flowRateP7 * @details \b Outputs: none @@ -3199,6 +3564,19 @@ /*********************************************************************//** * @brief + * The getFPGAFlowP7InternalTemp function gets the P7 flow sensor + * internal temperature. + * @details \b Inputs: fpgaSensorReadings.flowIntTempP7 + * @details \b Outputs: none + * @return P7 internal temperature + *************************************************************************/ +U16 getFPGAFlowP7InternalTemp( void ) +{ + return fpgaSensorReadings.flowIntTempP7; +} + +/*********************************************************************//** + * @brief * The setFPGAP9Control function sets the FPGA P9 sensor control register * to perform a given action. * bit 4..7: unused