Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -rd4d21b42ee8bd292a6d9f7966fe37abe0271dfda -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision d4d21b42ee8bd292a6d9f7966fe37abe0271dfda) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -18,72 +18,73 @@ #include // For memcpy #include "FpgaRO.h" -#include "MessageSupport.h" -#include "Messaging.h" +#include "MessageSupport.h" +#include "Messaging.h" #include "TaskPriority.h" #include "Timers.h" #include "Valves.h" - -/** - * @addtogroup Valves - * @{ - */ - + +/** + * @addtogroup Valves + * @{ + */ + // ********** private definitions ********** #define DEENERGIZED 0 ///< 0 for de-energized valve. #define ENERGIZED 1 ///< 1 for energized valve. -#define ALL_VALVES_DEENERGIZED 0x0000 ///< 0 in U16 bit field for all valves. - -#define MAX_VALVE_STATE_MISMATCH_TIMER_COUNT (100 / TASK_PRIORITY_INTERVAL ) ///< Maximum time commanded valves state can fail to match read back valve states in a row. - -#define VALVES_STATE_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval ( ms / task time ) at which valves states are published on CAN bus. +#define ALL_VALVES_DEENERGIZED 0x0000 ///< 0 in U16 bit field for all valves. + +#define MAX_VALVE_STATE_MISMATCH_TIMER_COUNT (100 / TASK_PRIORITY_INTERVAL ) ///< Maximum time commanded valves state can fail to match read back valve states in a row. + +#define VALVES_STATE_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval ( ms / task time ) at which valves states are published on CAN bus. #define DATA_PUBLISH_COUNTER_START_COUNT 50 ///< Data publish counter start count. /// Bits associated with RO valves when interfacing with FPGA to command a valve position. 1=energized, 0=de-energized. -static const U08 ValveBits[ NUM_OF_VALVES ] = { - 0x01, - 0x02, - 0x04, - 0x08, - 0x10, - 0x20, - 0x40, - 0x80 +static const U16 ValveBits[ NUM_OF_VALVES ] = { + 0x0001, + 0x0002, + 0x0004, + 0x0008, + 0x0010, + 0x0020, + 0x0040, + 0x0080, + 0x0100 }; -// ********** private data ********** - -static U32 valvesStatesPublicationTimerCounter; ///< Timer counter used to schedule valve state publication to CAN bus. +// ********** private data ********** + +static U32 valvesStatesPublicationTimerCounter; ///< Timer counter used to schedule valve state publication to CAN bus. static U16 commandedValvesStates; ///< Initialize commanded valves states bit field. static U32 valveStateMismatchTimerCounter; ///< Initialize valve state mismatch timer. static U32 pendingValveStateChanges[ NUM_OF_VALVES ]; ///< Delayed (pending) valve state changes. -static U32 pendingValveStateChangeCountDowns[ NUM_OF_VALVES ]; ///< Delayed (pending) valve state change count down timers (in task intervals). +static U32 pendingValveStateChangeCountDowns[ NUM_OF_VALVES ]; ///< Delayed (pending) valve state change count down timers (in task intervals). static OVERRIDE_U32_T valveStates[ NUM_OF_VALVES ]; ///< Currently commanded valves states. -static OVERRIDE_U32_T valveSensedStates[ NUM_OF_VALVES ]; ///< Valve sensed states override. -static OVERRIDE_U32_T valvesStatesPublishInterval; ///< Interval (in ms/task interval) at which to publish valves state to CAN bus. +static OVERRIDE_U32_T valveSensedStates[ NUM_OF_VALVES ]; ///< Valve sensed states override. +static OVERRIDE_U32_T valvesStatesPublishInterval; ///< Interval (in ms/task interval) at which to publish valves state to CAN bus. -// ********** private function prototypes ********** +// ********** private function prototypes ********** static void publishValvesStates( void ); -static void readCommandedValveStates( void ); +static void updateValveStates( U16 readValveStates ); static U32 convertValveStateNameToValveState( VALVE_STATE_NAMES_T valveStateName ); static U32 getValveState( U32 valveID ); - -/*********************************************************************//** - * @brief - * The initValves function initializes the Valves unit. - * @details \b Inputs: none - * @details \b Outputs: Valves unit initialized - * @return none - *************************************************************************/ -void initValves( void ) -{ - U32 valve; +/*********************************************************************//** + * @brief + * The initValves function initializes the Valves unit. + * @details \b Inputs: none + * @details \b Outputs: Valves unit initialized + * @return none + *************************************************************************/ +void initValves( void ) +{ + VALVES_T valve; + // initialize valve states - for ( valve = 0; valve < NUM_OF_VALVES; valve++ ) + for ( valve = FIRST_VALVE; valve < NUM_OF_VALVES; valve++ ) { valveStates[ valve ].data = DEENERGIZED; valveStates[ valve ].ovInitData = DEENERGIZED; @@ -100,45 +101,45 @@ // initialize time intervals and timer counters valveStateMismatchTimerCounter = 0; valvesStatesPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; // reset valves states publication timer - valvesStatesPublishInterval.data = VALVES_STATE_PUB_INTERVAL; + valvesStatesPublishInterval.data = VALVES_STATE_PUB_INTERVAL; valvesStatesPublishInterval.ovData = VALVES_STATE_PUB_INTERVAL; valvesStatesPublishInterval.ovInitData = 0; valvesStatesPublishInterval.override = OVERRIDE_RESET; - // initially set all valves to de-energized state via FPGA - readCommandedValveStates(); + // initially set all valves to de-energized state via FPGA + updateValveStates( ALL_VALVES_DEENERGIZED ); setFPGAValveStates( commandedValvesStates ); -} - -/*********************************************************************//** - * @brief - * The execValves function executes the valves controller. +} + +/*********************************************************************//** + * @brief + * The execValves function executes the valves controller. * @details \b Inputs: valvesStates, valveStateMismatchCounter * pendingValveStateChangeCountDowns, commandedValvesStates * @details \b Outputs: valvesStates, valveStateMismatchCounter * pendingValveStateChanges, valve controls * @details \b Alarm: ALARM_ID_RO_VALVE_CONTROL_FAILURE when FPGA read back - * valve state mismatches with the commanded valve state after defined time (100ms). - * @return none - *************************************************************************/ -void execValves( void ) + * valve state mismatches with the commanded valve state after defined time (100ms). + * @return none + *************************************************************************/ +void execValves( void ) { U32 valve; U16 readValvesStates = getFPGAValveStates(); // get valves states from FPGA - // Verify read back FPGA valve states match last commanded valve states - if ( readValvesStates != commandedValvesStates ) - { - valveStateMismatchTimerCounter++; // increment valve state mismatch counter by 1 - if ( valveStateMismatchTimerCounter > MAX_VALVE_STATE_MISMATCH_TIMER_COUNT ) + // Verify read back FPGA valve states match last commanded valve states + if ( readValvesStates != commandedValvesStates ) + { + valveStateMismatchTimerCounter++; // increment valve state mismatch counter by 1 + if ( valveStateMismatchTimerCounter > MAX_VALVE_STATE_MISMATCH_TIMER_COUNT ) { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_VALVE_CONTROL_FAILURE, (U32)readValvesStates, (U32)commandedValvesStates ) - } - } - else - { - valveStateMismatchTimerCounter = 0; + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_VALVE_CONTROL_FAILURE, (U32)readValvesStates, (U32)commandedValvesStates ) + } } + else + { + valveStateMismatchTimerCounter = 0; + } // Handle pending delayed valve state changes for ( valve = 0; valve < NUM_OF_VALVES; valve++ ) @@ -152,38 +153,40 @@ pendingValveStateChanges[ valve ] = DEENERGIZED; } } - } - - // Set valves states (via FPGA) to currently commanded states - readCommandedValveStates(); + } + + // Set valves states (via FPGA) to currently commanded states + updateValveStates( readValvesStates ); setFPGAValveStates( commandedValvesStates ); - // Publish valve states on interval - publishValvesStates(); -} + // Publish valve states on interval + publishValvesStates(); +} /*********************************************************************//** * @brief - * The readCommandedValveStates function gets the hydraulics, Balancing chamber - * and Ultrafiltration valvesStates that can be passed to FPGA for setting valves. + * The updateValveStates function updates the sensed valve states from FPGA + * and sends latest commanded valve states to FPGA. * @details \b Inputs: valveStates[], ValveBits[] - * @details \b Outputs: commandedValvesStates + * @details \b Outputs: commandedValvesStates, valveSensedStates[] + * @param readValveStates bits indicating read valve states * @return none *************************************************************************/ -static void readCommandedValveStates( void ) +static void updateValveStates( U16 readValveStates ) { U32 valve; - // Initiliaze before updating commanded states + // Initialize before updating commanded states commandedValvesStates = ALL_VALVES_DEENERGIZED; - // flag RO valves that are currently commanded to be energized + // Update sensed valve states from FPGA and commanded valve state bits to FPGA for ( valve = FIRST_VALVE; valve < NUM_OF_VALVES; valve++ ) { + valveSensedStates[ valve ].data = ( ( readValveStates & ValveBits[ valve ] ) != 0 ? VALVE_STATE_OPEN : VALVE_STATE_CLOSED ); commandedValvesStates |= ( getValveState( valve ) == ENERGIZED ? ValveBits[ valve ] : 0 ); } } - + /*********************************************************************//** * @brief * The convertValveStateNameToValveState function converts valve state \n @@ -211,7 +214,7 @@ } return vState; -} +} /*********************************************************************//** * @brief @@ -294,39 +297,34 @@ return result; } - -/*********************************************************************//** - * @brief + +/*********************************************************************//** + * @brief * The getValveStateName function gets the current valve state enum for a - * given valve. - * @details \b Inputs: valveStates[] + * given valve. + * @details \b Inputs: valveStates[] * @details \b Outputs: none - * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT when invalid valve ID given. - * @param valveID ID of valve to get state for - * @return the current valve state for given valve in enum - *************************************************************************/ -VALVE_STATE_NAMES_T getValveStateName( VALVES_T valveID ) + * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT when invalid valve ID given. + * @param valveID ID of valve to get state for + * @return the current valve state for given valve in enum + *************************************************************************/ +VALVE_STATE_NAMES_T getValveStateName( VALVES_T valveID ) { // Initialized per CppCheck. VALVE_STATE_NAMES_T name = NUM_OF_VALVE_STATES; - - if ( valveID < NUM_OF_VALVES ) + + if ( valveID < NUM_OF_VALVES ) { - U32 valveState = getU32OverrideValue( &valveStates[ valveID ] ); + U32 valveState = getU32OverrideValue( &valveSensedStates[ valveID ] ); - if ( OVERRIDE_KEY == valveSensedStates[ valveID ].override ) - { - valveState = valveSensedStates[ valveID ].ovData; - } - name = ( ENERGIZED == valveState ? VALVE_STATE_OPEN : VALVE_STATE_CLOSED ); - } - else - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID3, valveID ) - } - - return name; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_VALVES_INVALID_VALVE_ID3, valveID ) + } + + return name; } /*********************************************************************//** @@ -353,57 +351,57 @@ return valveState; } - -/*********************************************************************//** - * @brief - * The publishValvesStates function publishes RO valves states at the set interval. - * @details \b Inputs: valvesStatesPublicationTimerCounter + +/*********************************************************************//** + * @brief + * The publishValvesStates function publishes RO valves states at the set interval. + * @details \b Inputs: valvesStatesPublicationTimerCounter * @details \b Outputs: valvesStatesPublicationTimerCounter - * @details \b Message \b Sent: MSG_ID_RO_VALVES_STATES_DATA to publish FPGA read valve states. - * @return none - *************************************************************************/ -static void publishValvesStates( void ) -{ - // publish valve state on interval - if ( ++valvesStatesPublicationTimerCounter >= getU32OverrideValue( &valvesStatesPublishInterval ) ) + * @details \b Message \b Sent: MSG_ID_RO_VALVES_STATES_DATA to publish FPGA read valve states. + * @return none + *************************************************************************/ +static void publishValvesStates( void ) +{ + // publish valve state on interval + if ( ++valvesStatesPublicationTimerCounter >= getU32OverrideValue( &valvesStatesPublishInterval ) ) { RO_VALVES_DATA_T data; U32 valve; - data.valvesStatus = getFPGAValveStates(); + data.valvesCmdState = commandedValvesStates; for ( valve = 0; valve < NUM_OF_VALVES; valve++ ) { data.valvesSensedState[ valve ] = (U08)getValveStateName( (VALVES_T)valve ); - } + } broadcastData( MSG_ID_RO_VALVES_STATES_DATA, COMM_BUFFER_OUT_CAN_RO_BROADCAST, (U08*)&data, sizeof( RO_VALVES_DATA_T ) ); - - valvesStatesPublicationTimerCounter = 0; - } + + valvesStatesPublicationTimerCounter = 0; + } } - -/************************************************************************* - * TEST SUPPORT FUNCTIONS - *************************************************************************/ +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ -/*********************************************************************//** - * @brief - * The testValvesStatesPublishIntervalOverride function overrides the - * valves states publish interval. - * @details \b Inputs: none - * @details \b Outputs: valvesStatesPublishInterval + +/*********************************************************************//** + * @brief + * The testValvesStatesPublishIntervalOverride function overrides the + * valves states publish interval. + * @details \b Inputs: none + * @details \b Outputs: valvesStatesPublishInterval * @param message Override message from Dialin which includes the value - * that override valves states publish interval with (in ms) - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testValvesStatesPublishIntervalOverride( MESSAGE_T *message ) -{ - BOOL result = u32BroadcastIntervalOverride( message, &valvesStatesPublishInterval, TASK_PRIORITY_INTERVAL ); - - return result; + * that override valves states publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testValvesStatesPublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = u32BroadcastIntervalOverride( message, &valvesStatesPublishInterval, TASK_PRIORITY_INTERVAL ); + + return result; } /*********************************************************************//** @@ -421,7 +419,7 @@ BOOL result = u32ArrayOverride( message, &valveStates[0], NUM_OF_VALVES - 1, 0, NUM_OF_VALVE_STATES - 1 ); return result; -} +} /*********************************************************************//** * @brief @@ -440,4 +438,4 @@ return result; } -/**@}*/ +/**@}*/ Index: firmware/App/Controllers/Valves.h =================================================================== diff -u -red8321235c296b3c2e431692cc4f3e3db8a41a81 -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Controllers/Valves.h (.../Valves.h) (revision ed8321235c296b3c2e431692cc4f3e3db8a41a81) +++ firmware/App/Controllers/Valves.h (.../Valves.h) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -14,65 +14,66 @@ * @date (original) 09-Nov-2024 * ***************************************************************************/ - -#ifndef __VALVES_H__ -#define __VALVES_H__ - + +#ifndef __VALVES_H__ +#define __VALVES_H__ + #include "ROCommon.h" - -/** - * @defgroup Valves Valves - * @brief Valves driver unit. Controls all RO valves through FPGA Interface. - * - * @addtogroup Valves - * @{ + +/** + * @defgroup Valves Valves + * @brief Valves driver unit. Controls all RO valves through FPGA Interface. + * + * @addtogroup Valves + * @{ */ - -/// Enumeration of valves. -typedef enum Valves + +/// Enumeration of valves. +typedef enum Valves { - VWI = 0, ///< Valve (M4) + VWI = 0, ///< Valve (M4 VWi) FIRST_VALVE = VWI, ///< First valve - VFB, ///< Valve (M7) - VFF, ///< Valve (P6) - VPI, ///< Valve (P11) - VCR, ///< Valve (P33) - VCB, ///< Valve (P34) - VCD, ///< Valve (P37) - VROD, ///< Valve (P39) - NUM_OF_VALVES ///< Number of valves + VROD, ///< Valve (P39 VROd) + VFF, ///< Valve (P6 VFF) + VPI, ///< Valve (P11 VPi) + VCR, ///< Valve (P33 VCr) + VCB, ///< Valve (P34 VCb) + VCD, ///< Valve (P37 VCd) + VFB, ///< Valve (M7 VFB) + SPP, ///< Valve (P20 SPP) + NUM_OF_VALVES ///< Number of valves } VALVES_T; /// Enumeration of available valve state names per valve type (from SA and DG SRS documents). typedef enum ValveStateNames { - VALVE_STATE_OPEN = 0, ///< Open valve state, - VALVE_STATE_CLOSED, ///< Closed valve state, + VALVE_STATE_CLOSED = 0, ///< Closed valve state, + VALVE_STATE_OPEN, ///< Open valve state, NUM_OF_VALVE_STATES ///< number of valve states } VALVE_STATE_NAMES_T; #pragma pack(push, 1) /// Valves publish structure typedef struct { - U16 valvesStatus; ///< 2 way valves status. - U08 valvesSensedState[ NUM_OF_VALVES ]; ///< RO valves sensed states. + U16 valvesCmdState; ///< Commanded RO valve states (bits). + U08 valvesSensedState[ NUM_OF_VALVES ]; ///< Sensed RO valve states. } RO_VALVES_DATA_T; -#pragma pack(pop) - -// ********** public function prototypes ********** - -void initValves( void ); -void execValves( void ); +#pragma pack(pop) +// ********** public function prototypes ********** + +void initValves( void ); +void execValves( void ); + BOOL setValveState( VALVES_T valve, VALVE_STATE_NAMES_T valveState ); BOOL setValveStateDelayed( VALVES_T valve, VALVE_STATE_NAMES_T valveState, U32 delayMs ); VALVE_STATE_NAMES_T getValveStateName( VALVES_T valveID ); - + BOOL testValvesStatesPublishIntervalOverride( MESSAGE_T *message ); BOOL testValveStateOverride( MESSAGE_T *message ); BOOL testValveSensedStateOverride( MESSAGE_T *message ); - -/**@}*/ - -#endif + +/**@}*/ + +#endif Index: firmware/App/Drivers/BoostPump.c =================================================================== diff -u -red8321235c296b3c2e431692cc4f3e3db8a41a81 -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Drivers/BoostPump.c (.../BoostPump.c) (revision ed8321235c296b3c2e431692cc4f3e3db8a41a81) +++ firmware/App/Drivers/BoostPump.c (.../BoostPump.c) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -124,6 +124,15 @@ if ( pumpID < NUM_OF_BOOST_PUMPS ) { + // enable/disable pump per given PWM + if ( 0 == pwm ) + { + setROPumpEnable( FALSE ); + } + else + { + setROPumpEnable( TRUE ); + } // constrain given pwm magnitude to valid range pwm = MIN( pwm, MAX_BOOST_PUMP_PWM_DUTY_CYCLE ); // set commanded duty cycle for given boost pump to given pwm magnitude Index: firmware/App/Drivers/InternalADC.c =================================================================== diff -u -r129a1c2f4343bc85efdb4767c2dec35e4ba8ce98 -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision 129a1c2f4343bc85efdb4767c2dec35e4ba8ce98) +++ firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -49,7 +49,7 @@ 0.001465, // V - INT_ADC_5V_LOGIC 0.007106, // V - INT_ADC_24V_ACTUATORS 0.007106, // V - INT_ADC_BACKUP_V - 0.000000, // V - INT_ADC_DUMMY +// 0.000000, // V - INT_ADC_DUMMY }; // ********** private data ********** Index: firmware/App/Drivers/InternalADC.h =================================================================== diff -u -r129a1c2f4343bc85efdb4767c2dec35e4ba8ce98 -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Drivers/InternalADC.h (.../InternalADC.h) (revision 129a1c2f4343bc85efdb4767c2dec35e4ba8ce98) +++ firmware/App/Drivers/InternalADC.h (.../InternalADC.h) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -33,7 +33,7 @@ INT_ADC_5V_LOGIC, ///< Internal ADC channel for 5V to logic INT_ADC_24V_ACTUATORS, ///< Internal ADC channel for 24V to actuators INT_ADC_BACKUP_V, ///< Internal ADC channel for VBackup - INT_ADC_DUMMY, ///< Internal ADC channel - not used, needed to get even number of channels +// INT_ADC_DUMMY, ///< Internal ADC channel - not used, needed to get even number of channels NUM_OF_INT_ADC_CHANNELS ///< Number of used internal ADC channels. } INT_ADC_CHANNEL_T; Index: firmware/App/Drivers/PressureSensor.c =================================================================== diff -u -r3edf8084a5028ee0d00a3fba496284e593e4254d -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision 3edf8084a5028ee0d00a3fba496284e593e4254d) +++ firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -15,34 +15,37 @@ * ***************************************************************************/ -#include "AlarmMgmtRO.h" -#include "FpgaRO.h" +#include "AlarmMgmtRO.h" +#include "FpgaRO.h" #include "Messaging.h" #include "PersistentAlarm.h" #include "PressureSensor.h" - -/** - * @addtogroup PressureSensor - * @{ - */ - -// ********** private definitions ********** +/** + * @addtogroup PressureSensor + * @{ + */ + +// ********** private definitions ********** + #define PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Pressure sensors read and error count timeout in milliseconds. #define ONE_BAR_TO_MILLI_BAR 1000 ///< 1 bar to milli-bar conversion. #define COUNTS_TO_MILLI_BAR 100 ///< Counts to milli-bar conversion. #define BAR_TO_MMHG ( 750.062F ) ///< Conversion factor for converting bar to mmHg. #define PRES_SENSORS_READ_ERR_MAX_CNT 0xFF ///< Pressure sensor read and error max count value -// ********** private data ********** - +#define PRES_MIN_PSI 0.0F ///< Minimum range of pressure sensors (in PSI) +#define PRES_MAX_PSI 145.038F ///< Maximum range of pressure sensors (in PSI) + +// ********** private data ********** + static OVERRIDE_F32_T currentPressureReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< Current pressure sensor pressure readings (overrideable). static OVERRIDE_F32_T currentPresTempReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< Current pressure sensor temperature readings (overrideable). static OVERRIDE_U32_T lastPressureReadCounter[ NUM_OF_PRESSURE_SENSORS ]; ///< Last pressure sensor read count (Overrideable). static OVERRIDE_U32_T lastPressureErrorCounter[ NUM_OF_PRESSURE_SENSORS ]; ///< Last pressure sensor error count (Overrideable). -// ********** private function prototypes ********** - +// ********** private function prototypes ********** + //static void checkPressureSensors( void ); /*********************************************************************//** @@ -100,31 +103,35 @@ void readPressureSensors( void ) { // Update and convert raw pressures to mmHg - currentPressureReadings[ PRESSURE_SENSOR_WATER_INLET_PRE_REG ].data = convertPressureReading2mmHg( getFPGAPRiRawPressure() ); - currentPressureReadings[ PRESSURE_SENSOR_WATER_INLET_POST_REG ].data = convertPressureReading2mmHg( getFPGAPRoRawPressure() ); - currentPressureReadings[ PRESSURE_SENSOR_WATER_INLET_PRE_COND ].data = convertPressureReading2mmHg( getFPGAPC2oRawPressure() ); - currentPressureReadings[ PRESSURE_SENSOR_PRE_RO_FILTER ].data = convertPressureReading2mmHg( getFPGAPPoRawPressure() ); - currentPressureReadings[ PRESSURE_SENSOR_POST_RO_FILTER ].data = convertPressureReading2mmHg( getFPGAPMpRawPressure() ); + currentPressureReadings[ PRESSURE_SENSOR_WATER_INLET_PRE_REG ].data = convertPressureReading( getFPGAPRiRawPressure(), PRES_MIN_PSI, PRES_MAX_PSI ); + currentPressureReadings[ PRESSURE_SENSOR_WATER_INLET_POST_REG ].data = convertPressureReading( getFPGAPRoRawPressure(), PRES_MIN_PSI, PRES_MAX_PSI ); + currentPressureReadings[ PRESSURE_SENSOR_WATER_INLET_PRE_COND ].data = convertPressureReading( getFPGAPC2oRawPressure(), PRES_MIN_PSI, PRES_MAX_PSI ); + currentPressureReadings[ PRESSURE_SENSOR_PRE_RO_FILTER ].data = convertPressureReading( getFPGAPPoRawPressure(), PRES_MIN_PSI, PRES_MAX_PSI ); + currentPressureReadings[ PRESSURE_SENSOR_POST_RO_FILTER ].data = convertPressureReading( getFPGAPMpRawPressure(), PRES_MIN_PSI, PRES_MAX_PSI ); + currentPressureReadings[ PRESSURE_SENSOR_PRE_RO_PUMP ].data = convertPressureReading( getFPGAPPiRawPressure(), PRES_MIN_PSI, PRES_MAX_PSI ); // Update and convert raw pressure sensor temperatures to deg C currentPresTempReadings[ PRESSURE_SENSOR_WATER_INLET_PRE_REG ].data = convertPressureTempReading2DegC( getFPGAPRiRawTemperature() ); currentPresTempReadings[ PRESSURE_SENSOR_WATER_INLET_POST_REG ].data = convertPressureTempReading2DegC( getFPGAPRoRawTemperature() ); currentPresTempReadings[ PRESSURE_SENSOR_WATER_INLET_PRE_COND ].data = convertPressureTempReading2DegC( getFPGAPC2oRawTemperature() ); currentPresTempReadings[ PRESSURE_SENSOR_PRE_RO_FILTER ].data = convertPressureTempReading2DegC( getFPGAPPoRawTemperature() ); currentPresTempReadings[ PRESSURE_SENSOR_POST_RO_FILTER ].data = convertPressureTempReading2DegC( getFPGAPMpRawTemperature() ); + currentPresTempReadings[ PRESSURE_SENSOR_PRE_RO_PUMP ].data = convertPressureTempReading2DegC( getFPGAPPiRawTemperature() ); // Update read and error counters for each pressure sensor lastPressureReadCounter[ PRESSURE_SENSOR_WATER_INLET_PRE_REG ].data = (U32)getFPGAPRiReadCount(); lastPressureReadCounter[ PRESSURE_SENSOR_WATER_INLET_POST_REG ].data = (U32)getFPGAPRoReadCount(); lastPressureReadCounter[ PRESSURE_SENSOR_WATER_INLET_PRE_COND ].data = (U32)getFPGAPC2oReadCount(); lastPressureReadCounter[ PRESSURE_SENSOR_PRE_RO_FILTER ].data = (U32)getFPGAPPoReadCount(); lastPressureReadCounter[ PRESSURE_SENSOR_POST_RO_FILTER ].data = (U32)getFPGAPMpReadCount(); + lastPressureReadCounter[ PRESSURE_SENSOR_PRE_RO_PUMP ].data = (U32)getFPGAPPiReadCount(); lastPressureErrorCounter[ PRESSURE_SENSOR_WATER_INLET_PRE_REG ].data = (U32)getFPGAPRiErrorCount(); lastPressureErrorCounter[ PRESSURE_SENSOR_WATER_INLET_POST_REG ].data = (U32)getFPGAPRoErrorCount(); lastPressureErrorCounter[ PRESSURE_SENSOR_WATER_INLET_PRE_COND ].data = (U32)getFPGAPC2oErrorCount(); lastPressureErrorCounter[ PRESSURE_SENSOR_PRE_RO_FILTER ].data = (U32)getFPGAPPoErrorCount(); lastPressureErrorCounter[ PRESSURE_SENSOR_POST_RO_FILTER ].data = (U32)getFPGAPMpErrorCount(); + lastPressureErrorCounter[ PRESSURE_SENSOR_PRE_RO_PUMP ].data = (U32)getFPGAPPiErrorCount(); // // Monitor pressure sensor health // checkPressureSensors(); @@ -287,12 +294,12 @@ return result; } - -/************************************************************************* - * TEST SUPPORT FUNCTIONS - *************************************************************************/ +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + /*********************************************************************//** * @brief * The testPressureSensorReadingsOverride function overrides the value of @@ -309,7 +316,7 @@ return result; } - + /*********************************************************************//** * @brief * The testPressureSensorTemperatureReadingsOverride function overrides the @@ -360,5 +367,5 @@ return result; } - -/**@}*/ + +/**@}*/ Index: firmware/App/Drivers/PressureSensor.h =================================================================== diff -u -rd8cd7de2f84b26aafc153e2bb665a5058a040bf0 -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Drivers/PressureSensor.h (.../PressureSensor.h) (revision d8cd7de2f84b26aafc153e2bb665a5058a040bf0) +++ firmware/App/Drivers/PressureSensor.h (.../PressureSensor.h) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -14,39 +14,40 @@ * @date (original) 18-Nov-2024 * ***************************************************************************/ - -#ifndef __PRESSURE_SENSOR_H__ -#define __PRESSURE_SENSOR_H__ - + +#ifndef __PRESSURE_SENSOR_H__ +#define __PRESSURE_SENSOR_H__ + #include "ROCommon.h" -#include "PressureCommon.h" - -/** - * @defgroup PressureSensor PressureSensor - * @brief Pressure sensors driver module. Reads the various RO pressure - * sensors raw pressure and temperature value. - * - * @addtogroup PressureSensor - * @{ - */ - +#include "PressureCommon.h" + +/** + * @defgroup PressureSensor PressureSensor + * @brief Pressure sensors driver module. Reads the various RO pressure + * sensors raw pressure and temperature value. + * + * @addtogroup PressureSensor + * @{ + */ + // ********** public definitions ********** - -/// Enumeration of pressure sensors monitored by this unit. -typedef enum PressureSensors -{ + +/// Enumeration of pressure sensors monitored by this unit. +typedef enum PressureSensors +{ PRESSURE_SENSOR_WATER_INLET_PRE_REG = 0, ///< Water inlet pressure before regulator (PRi) PRESSURE_SENSOR_FIRST = PRESSURE_SENSOR_WATER_INLET_PRE_REG, ///< First pressure to scan PRESSURE_SENSOR_WATER_INLET_POST_REG, ///< Water inlet pressure after regulator (PRo) PRESSURE_SENSOR_WATER_INLET_PRE_COND, ///< Water inlet pressure before conductivity sensor (PC2o) PRESSURE_SENSOR_PRE_RO_FILTER, ///< Pressure before RO filter (PPo) PRESSURE_SENSOR_POST_RO_FILTER, ///< Pressure after RO filter (PMp) - NUM_OF_PRESSURE_SENSORS ///< Number of pressure sensors -} PRESSURE_SENSORS_T; - -// ********** public function prototypes ********** - -void initPressureSensor( void ); + PRESSURE_SENSOR_PRE_RO_PUMP, ///< Pressure before RO pump (PPi) + NUM_OF_PRESSURE_SENSORS ///< Number of pressure sensors +} PRESSURE_SENSORS_T; + +// ********** public function prototypes ********** + +void initPressureSensor( void ); void readPressureSensors( void ); F32 getPressure( PRESSURE_SENSORS_T sensor ); F32 getPressureSensorTemperature( PRESSURE_SENSORS_T sensor ); @@ -56,8 +57,8 @@ BOOL testPressureSensorReadingsOverride( MESSAGE_T *message ); BOOL testPressureSensorTemperatureReadingsOverride( MESSAGE_T *message ); BOOL testPressureSensorReadCounterOverride( MESSAGE_T *message ); -BOOL testPressureSensorErrorCounterOverride( MESSAGE_T *message ); - -/**@}*/ - -#endif +BOOL testPressureSensorErrorCounterOverride( MESSAGE_T *message ); + +/**@}*/ + +#endif Index: firmware/App/Monitors/Pressure.c =================================================================== diff -u -r3edf8084a5028ee0d00a3fba496284e593e4254d -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision 3edf8084a5028ee0d00a3fba496284e593e4254d) +++ firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -15,27 +15,26 @@ * ***************************************************************************/ -#include "AlarmMgmtRO.h" +#include "AlarmMgmtRO.h" #include "Messaging.h" #include "Pressure.h" #include "PersistentAlarm.h" #include "TaskPriority.h" -#include "Valves.h" - -/** - * @addtogroup Pressure - * @{ - */ - -// ********** private definitions ********** +#include "Valves.h" +/** + * @addtogroup Pressure + * @{ + */ + +// ********** private definitions ********** + #define PRESSURES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the pressures data is published on the CAN bus. #define DATA_PUBLISH_COUNTER_START_COUNT ( 5 ) ///< Data publish counter start count. #define PRESSURE_SAMPLE_FILTER_MS ( 200 ) ///< Filter pressure data for given time #define PRESSURE_TEMP_SAMPLE_FILTER_MS ( 200 ) ///< Filter temperature data for given time #define SIZE_OF_PRESSURE_ROLLING_AVG ( PRESSURE_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered pressure moving average. #define SIZE_OF_PRESSURETEMP_ROLLING_AVG ( PRESSURE_TEMP_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered pressure temprature w/ 1 second moving average. -#define MMHG_TO_PSI_CONVERSION 0.0193368F ///< MMHG to PSI conversion. #define MIN_INLET_WATER_PRESSURE_WARNING_LOW_PSIG 20.0F ///< Minimum allowed Input low pressure value in psig. #define MAX_INLET_WATER_PRESSURE_WARNING_HIGH_PSIG 80.0F ///< Maximum allowed Input high pressure value in psig. @@ -74,9 +73,9 @@ F32 pressureTempReadingsTotal; ///< Rolling total - used to calc average. U32 pressureTempReadingsCount; ///< Number of samples in rolling average buffer }FILTER_PRESSURE_TEMPERATURE_READINGS_T; - -// ********** private data ********** +// ********** private data ********** + static OVERRIDE_F32_T filteredcurrentPressureReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< filtered current pressure sensor pressure readings (overrideable). static OVERRIDE_F32_T filteredcurrentPresTempReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< filtered current pressure sensor temperature readings (overrideable). //static RO_PRES_SENSORS_CAL_RECORD_T pressuresCalRecord; ///< Pressures calibration record. @@ -85,10 +84,10 @@ static FILTER_PRESSURE_TEMPERATURE_READINGS_T filteredPressureTempReadings[NUM_OF_PRESSURE_SENSORS]; ///< Filtered pressure reading for pressure sensors. static PRESSURE_STATE_T pressuresState; ///< current state of pressure monitor state machine. static U32 pressuresDataPublicationTimerCounter; ///< used to schedule pressure data publication to CAN bus. -static OVERRIDE_U32_T pressuresDataPublishInterval; ///< Pressure data publish interval. - -// ********** private function prototypes ********** +static OVERRIDE_U32_T pressuresDataPublishInterval; ///< Pressure data publish interval. +// ********** private function prototypes ********** + static void filterPressureSensors( void ); static void filterPressureSensorReadings( void ); static void filterPressureSensorTemperatureReadings( void ); @@ -304,37 +303,37 @@ // checkPersistentAlarm( ALARM_ID_DD_INLET_WATER_PRESSURE_OUT_HIGH_RANGE, FALSE, PressureOut, MAX_INLET_WATER_PRES_OUT_WARNING_HIGH_PSIG ); // } //} - -/*********************************************************************//** - * @brief + +/*********************************************************************//** + * @brief * The execPressureSensor function executes the pressure monitor state machine - * and publish pressure data. - * @details \b Inputs: pressuresState + * and publish pressure data. + * @details \b Inputs: pressuresState * @details \b Outputs: pressuresState - * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT if invalid pressure state - * @return none - *************************************************************************/ -void execPressureSensor( void ) -{ - // state machine - switch ( pressuresState ) - { - case PRESSURE_INIT_STATE: - pressuresState = handlePressuresInitState(); - break; - - case PRESSURE_CONTINUOUS_READ_STATE: - pressuresState = handlePressuresContReadState(); - break; - - default: + * @details \b Alarm: ALARM_ID_RO_SOFTWARE_FAULT if invalid pressure state + * @return none + *************************************************************************/ +void execPressureSensor( void ) +{ + // state machine + switch ( pressuresState ) + { + case PRESSURE_INIT_STATE: + pressuresState = handlePressuresInitState(); + break; + + case PRESSURE_CONTINUOUS_READ_STATE: + pressuresState = handlePressuresContReadState(); + break; + + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RO_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_INVALID_EXEC_STATE, pressuresState ) - pressuresState = PRESSURE_INIT_STATE; - break; - } - - // publish pressure/occlusion data on interval - publishPressuresData(); + pressuresState = PRESSURE_INIT_STATE; + break; + } + + // publish pressure/occlusion data on interval + publishPressuresData(); } /*********************************************************************//** @@ -406,12 +405,10 @@ *************************************************************************/ static F32 getConvertedPressure( PRESSURE_SENSORS_T sensor, F32 pressure ) { - F32 pressurePSI = pressure * MMHG_TO_PSI_CONVERSION; - // calibrate pressure - //F32 calPressure = getCalibrationAppliedPressure( sensor, pressurePSI ); // TODO + //F32 calPressure = getCalibrationAppliedPressure( sensor, pressure ); // TODO - return pressurePSI; // calPressure; + return pressure; // calPressure; } /*********************************************************************//** @@ -433,79 +430,81 @@ // pressuresCalRecord.pressureSensors[ (PRESSURE_SENSORS_T)sensorId ].offset; // return calPressure; //} - -/*********************************************************************//** - * @brief - * The handlePressuresInitState function handles the pressures initialize state - * of the pressures monitor state machine. - * @details \b Inputs: none - * @details \b Outputs: none - * @return next state - *************************************************************************/ -static PRESSURE_STATE_T handlePressuresInitState( void ) -{ - return PRESSURE_CONTINUOUS_READ_STATE; -} - -/*********************************************************************//** - * @brief - * The handlePressuresContReadState function handles the continuous read state + +/*********************************************************************//** + * @brief + * The handlePressuresInitState function handles the pressures initialize state + * of the pressures monitor state machine. + * @details \b Inputs: none + * @details \b Outputs: none + * @return next state + *************************************************************************/ +static PRESSURE_STATE_T handlePressuresInitState( void ) +{ + return PRESSURE_CONTINUOUS_READ_STATE; +} + +/*********************************************************************//** + * @brief + * The handlePressuresContReadState function handles the continuous read state * of the pressures monitor state machine. Raw readings are read from driver - * and then filtered via moving average. - * @details \b Inputs: pressureFilterCounter - * @details \b Outputs: pressure sensor values updated - * @return next state - *************************************************************************/ -static PRESSURE_STATE_T handlePressuresContReadState( void ) + * and then filtered via moving average. + * @details \b Inputs: pressureFilterCounter + * @details \b Outputs: pressure sensor values updated + * @return next state + *************************************************************************/ +static PRESSURE_STATE_T handlePressuresContReadState( void ) { PRESSURE_STATE_T result = PRESSURE_CONTINUOUS_READ_STATE; // Get raw pressure readings readPressureSensors(); // filter raw pressure readings - filterPressureSensors(); - - return result; + filterPressureSensors(); + + return result; } -/*********************************************************************//** - * @brief - * The publishPressuresData function publishes RO pressures data at a set interval. - * @details \b Inputs: pressuresDataPublicationTimerCounter +/*********************************************************************//** + * @brief + * The publishPressuresData function publishes RO pressures data at a set interval. + * @details \b Inputs: pressuresDataPublicationTimerCounter * @details \b Outputs: pressuresDataPublicationTimerCounter - * @details \b Message \b Sent: MSG_ID_RO_PRESSURES_DATA to publish pressure data. - * @return none - *************************************************************************/ -static void publishPressuresData( void ) -{ - // publish pressure/occlusion data on interval - if ( ++pressuresDataPublicationTimerCounter >= getU32OverrideValue( &pressuresDataPublishInterval ) ) + * @details \b Message \b Sent: MSG_ID_RO_PRESSURES_DATA to publish pressure data. + * @return none + *************************************************************************/ +static void publishPressuresData( void ) +{ + // publish pressure/occlusion data on interval + if ( ++pressuresDataPublicationTimerCounter >= getU32OverrideValue( &pressuresDataPublishInterval ) ) { PRESSURE_TEMP_DATA_T data; data.PressurePRi = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_PRE_REG ); - data.PressurePRo = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_POST_REG ); + data.PressurePRo = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_POST_REG ); data.PressurePC2o = getFilteredPressure( PRESSURE_SENSOR_WATER_INLET_PRE_COND ); data.PressurePPo = getFilteredPressure( PRESSURE_SENSOR_PRE_RO_FILTER ); data.PressurePMp = getFilteredPressure( PRESSURE_SENSOR_POST_RO_FILTER ); - + data.PressurePPi = getFilteredPressure( PRESSURE_SENSOR_PRE_RO_PUMP ); + data.TempPRi = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_INLET_PRE_REG ); data.TempPRo = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_INLET_POST_REG ); data.TempPC2o = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_WATER_INLET_PRE_COND ); data.TempPPo = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_PRE_RO_FILTER ); data.TempPMp = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_POST_RO_FILTER ); + data.TempPPi = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_PRE_RO_PUMP ); - broadcastData( MSG_ID_RO_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_RO_BROADCAST, (U08*)&data, sizeof( PRESSURE_TEMP_DATA_T ) ); + broadcastData( MSG_ID_RO_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_RO_BROADCAST, (U08*)&data, sizeof( PRESSURE_TEMP_DATA_T ) ); pressuresDataPublicationTimerCounter = 0; - } -} - - -/************************************************************************* - * TEST SUPPORT FUNCTIONS - *************************************************************************/ + } +} +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + /*********************************************************************//** * @brief * The testPressureSensorDataPublishIntervalOverride function overrides the @@ -556,5 +555,5 @@ // // return result; //} - -/**@}*/ + +/**@}*/ Index: firmware/App/Monitors/Pressure.h =================================================================== diff -u -ra3988128df0950e1f03dcb4a5aa53336d8fb3a6f -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Monitors/Pressure.h (.../Pressure.h) (revision a3988128df0950e1f03dcb4a5aa53336d8fb3a6f) +++ firmware/App/Monitors/Pressure.h (.../Pressure.h) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -14,22 +14,22 @@ * @date (original) 09-Nov-2024 * ***************************************************************************/ - -#ifndef __PRESSURE_H__ -#define __PRESSURE_H__ - + +#ifndef __PRESSURE_H__ +#define __PRESSURE_H__ + #include "ROCommon.h" -#include "PressureSensor.h" - -/** - * @defgroup Pressure Pressure - * @brief Pressure sensors monitor unit. Monitors the various RO pressure - * sensors. - * - * @addtogroup Pressure - * @{ - */ - +#include "PressureSensor.h" + +/** + * @defgroup Pressure Pressure + * @brief Pressure sensors monitor unit. Monitors the various RO pressure + * sensors. + * + * @addtogroup Pressure + * @{ + */ + // ********** public definitions ********** /// Pressure data struct. @@ -40,16 +40,18 @@ F32 PressurePC2o; ///< Pressure before inlet conductivity sensor (P8 PC2o) F32 PressurePPo; ///< Pressure before RO filter (P13 PPo) F32 PressurePMp; ///< Pressure after RO filter (P17 PMp) + F32 PressurePPi; ///< Pressure before RO pump (X1 PPi) F32 TempPRi; ///< Temperature before pressure regulator (M1 PRi) F32 TempPRo; ///< Temperature after pressure regulator (M3 PRo) F32 TempPC2o; ///< Temperature before inlet conductivity sensor (P8 PC2o) F32 TempPPo; ///< Temperature before RO filter (P13 PPo) F32 TempPMp; ///< Temperature after RO filter (P17 PMp) + F32 TempPPi; ///< Temperature before RO pump (X1 PPi) } PRESSURE_TEMP_DATA_T; - -// ********** public function prototypes ********** - -void initPressure( void ); + +// ********** public function prototypes ********** + +void initPressure( void ); void execPressureSensor( void ); //void checkInletWaterPressure( void ); @@ -58,8 +60,8 @@ BOOL testPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ); //BOOL testPressureSensorFilteredReadingsOverride( MESSAGE_T *message ); -//BOOL testPressureSensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ); - -/**@}*/ - -#endif +//BOOL testPressureSensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ); + +/**@}*/ + +#endif Index: firmware/App/Services/FpgaRO.c =================================================================== diff -u -rf47296145b6a0adb78df0e325587629171909fd6 -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Services/FpgaRO.c (.../FpgaRO.c) (revision f47296145b6a0adb78df0e325587629171909fd6) +++ firmware/App/Services/FpgaRO.c (.../FpgaRO.c) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -126,17 +126,18 @@ U16 roPumpTachCount; ///< Reg 360. ROP tachometer counter. U16 dsPumpTachCount; ///< Reg 362. DSP tachometer counter. U16 flowIntTempFmp; ///< Reg 364. FMP flow sensor internal temperature. - U08 valveControlReadback; ///< Reg 366. Valve control bits read back. - U08 valvePWMEnableReadback; ///< Reg 367. Valve PWM enable read back. + U16 valveControlReadback; ///< Reg 366. Valve control bits read back. U16 roPumpPWMReadback; ///< Reg 368. ROP PWM read back. U16 heaterPWMReadback; ///< Reg 370. Heater PWM read back. + U08 flowReadCount; ///< Reg 372. Flow sensor read counter. + U08 flowErrorCount; ///< Reg 373. Flow sensor error counter. + U16 valvePWMEnableReadback; ///< Reg 374. Valve PWM enable read back. } FPGA_SENSORS_T; /// Record structure for FPGA continuous priority writes. typedef struct { - U08 valveControl; ///< Reg 04. Valve control register. - U08 valvePWMEnable; ///< Reg 05. Valve PWM enable register. + U16 valveControl; ///< Reg 04. Valve control register. U08 conductivityCPiControl; ///< Reg 06. CPi conductivity control register. U08 conductivityCPoControl; ///< Reg 07. CPo conductivity control register. U16 conductivityCPiAddress; ///< Reg 08. CPi conductivity address register. @@ -146,12 +147,17 @@ U16 fpgaGenWrRd; ///< Reg 20. FPGA general write/read-back register (mirrored to a general read register in read page at addr 256). U16 descalePumpSpeed; ///< Reg 22. Descaler pump speed register. U08 descalePumpControl; ///< Reg 24. Descaler pump control register. - U08 reserved1; ///< Reg 25. Reserved. + U08 roPumpControl; ///< Reg 25. RO pump control register.. U16 valveVwiPWMLow; ///< Reg 26. Valve VWi PWM low pulse period in 0.1 uSec. U16 valveVwiPWMPeriod; ///< Reg 28. Valve VWi PWM full period in 0.1 uSec. U16 valvePWMPullIn; ///< Reg 30. Valve PWM high pulse period when valve is on in 0.1 uSec. U16 roPumpPWMDutyCyclePct; ///< Reg 32. ROP PWM duty cycle in percentage. U16 heaterPWMDutyCyclePct; ///< Reg 34. HRO PWM duty cycle in percentage. + U08 reserved1; ///< Reg 36. Not used. + U08 heaterControl; ///< Reg 37. Heater (HRO) control register. + U08 flowControl; ///< Reg 38. AVS Romer flow sensor control register. + U08 flowAddress; ///< Reg 39. AVS Romer flow sensor I2C slave address register. + U16 valvePWMEnable; ///< Reg 40. Valve PWM enable register. } FPGA_ACTUATORS_T; #pragma pack(pop) @@ -375,13 +381,26 @@ * @details \b Outputs: fpgaSensorReadings.valveControlReadback * @return none *************************************************************************/ -U08 getFPGAValveStates( void ) +U16 getFPGAValveStates( void ) { return fpgaSensorReadings.valveControlReadback; } /*********************************************************************//** * @brief + * The setROPumpEnable function enables or disables the RO pump. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.roPumpControl + * @param enable flag indicating whether to enable or disable the RO pump. + * @return none + *************************************************************************/ +void setROPumpEnable( BOOL enable ) +{ + fpgaActuatorSetPoints.roPumpControl = ( TRUE == enable ? 0x1 : 0x0 ); +} + +/*********************************************************************//** + * @brief * The setROPumpPWMPct function sets the RO pump PWM duty cycle. * The higher the PWM duty cycle (0..500), the faster the pump will go. * @details \b Inputs: none @@ -662,6 +681,54 @@ /*********************************************************************//** * @brief + * The getFPGAPPiRawPressure function gets the PPi pressure reading. + * @details \b Inputs: fpgaSensorReadings.pressurePpi + * @details \b Outputs: none + * @return PPi pressure + *************************************************************************/ +S16 getFPGAPPiRawPressure( void ) +{ + return fpgaSensorReadings.pressurePpi; +} + +/*********************************************************************//** + * @brief + * The getFPGAPPiRawTemperature function gets the PPi sensor temperature. + * @details \b Inputs: fpgaSensorReadings.temperaturePpi + * @details \b Outputs: none + * @return PPi sensor temperature + *************************************************************************/ +S16 getFPGAPPiRawTemperature( void ) +{ + return fpgaSensorReadings.temperaturePpi; +} + +/*********************************************************************//** + * @brief + * The getFPGAPPiReadCount function gets the PPi sensor read count. + * @details \b Inputs: fpgaSensorReadings.readCountPpi + * @details \b Outputs: none + * @return PPi sensor read count + *************************************************************************/ +U08 getFPGAPPiReadCount( void ) +{ + return fpgaSensorReadings.readCountPpi; +} + +/*********************************************************************//** + * @brief + * The getFPGAPPiErrorCount function gets the PPi sensor error count. + * @details \b Inputs: fpgaSensorReadings.errorCountPpi + * @details \b Outputs: none + * @return PPi sensor error count + *************************************************************************/ +U08 getFPGAPPiErrorCount( void ) +{ + return fpgaSensorReadings.errorCountPpi; +} + +/*********************************************************************//** + * @brief * The getFPGAFloaterState function gets the floater level state. * @details \b Inputs: fpgaSensorReadings.levelSwitch * @details \b Outputs: none Index: firmware/App/Services/FpgaRO.h =================================================================== diff -u -rf47296145b6a0adb78df0e325587629171909fd6 -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Services/FpgaRO.h (.../FpgaRO.h) (revision f47296145b6a0adb78df0e325587629171909fd6) +++ firmware/App/Services/FpgaRO.h (.../FpgaRO.h) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -42,8 +42,9 @@ BOOL checkFPGAFEOEFailure( void ); void setFPGAValveStates( U16 valveStates ); -U08 getFPGAValveStates( void ); +U16 getFPGAValveStates( void ); +void setROPumpEnable( BOOL enable ); void setROPumpPWMPct( U16 pwm ); U16 getROPumpPWMPct( void ); U16 getROPumpTachCount( void ); @@ -73,6 +74,11 @@ U08 getFPGAPMpReadCount( void ); U08 getFPGAPMpErrorCount( void ); +S16 getFPGAPPiRawPressure( void ); +S16 getFPGAPPiRawTemperature( void ); +U08 getFPGAPPiReadCount( void ); +U08 getFPGAPPiErrorCount( void ); + U08 getFPGAFloaterState( void ); U16 getFPGAFlowFMP( void ); Index: firmware/App/Services/Messaging.c =================================================================== diff -u -rf47296145b6a0adb78df0e325587629171909fd6 -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision f47296145b6a0adb78df0e325587629171909fd6) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -325,7 +325,7 @@ } } // ACK/NAK request - if ( message->hdr.msgID < MSG_ID_FIRST_DD_TESTER_MESSAGE ) + if ( message->hdr.msgID < MSG_ID_FIRST_TD_TESTER_MESSAGE ) { if ( respBuffer != COMM_BUFFER_NOT_USED ) { @@ -610,8 +610,6 @@ { testerLoggedIn = FALSE; } - // respond to would be tester - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, testerLoggedIn ); return testerLoggedIn; } Index: firmware/RO.dil =================================================================== diff -u -rf3646622112ca7402527b541766b92a6560f2b17 -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/RO.dil (.../RO.dil) (revision f3646622112ca7402527b541766b92a6560f2b17) +++ firmware/RO.dil (.../RO.dil) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -1,4 +1,4 @@ -# RM46L852PGE 11/11/24 16:43:52 +# RM46L852PGE 12/03/24 09:11:13 # ARCH=RM46L852PGE # @@ -3311,7 +3311,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_37_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_29_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_6_INT_ENA.VALUE=0x00000800 -DRIVER.CAN.VAR.CAN_1_RAM_PARITY_ENA.VALUE=0x00000005 +DRIVER.CAN.VAR.CAN_1_RAM_PARITY_ENA.VALUE=0x0000000A DRIVER.CAN.VAR.CAN_1_MESSAGE_59_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_64_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_3_MESSAGE_56_DLC.VALUE=8 @@ -3417,7 +3417,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_14_EOB.VALUE=0x00000080 DRIVER.CAN.VAR.CAN_1_MESSAGE_14_DIR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_13_INT_ENA_REF.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON.VALUE=0x00000000 +DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON.VALUE=0x00000200 DRIVER.CAN.VAR.CAN_2_MESSAGE_63_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_55_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_47_INT_ENA.VALUE=0x00000000 @@ -3787,7 +3787,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_45_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_1_MESSAGE_37_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_1_MESSAGE_29_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_TQ.VALUE=250.000 +DRIVER.CAN.VAR.CAN_1_TQ.VALUE=500.000 DRIVER.CAN.VAR.CAN_3_MESSAGE_63_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_55_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_47_RTR.VALUE=0x00000000 @@ -3956,7 +3956,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_11_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_1_MESSAGE_3_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT_REFERENCE.VALUE=75 -DRIVER.CAN.VAR.CAN_1_PROPAGATION_DELAY.VALUE=700 +DRIVER.CAN.VAR.CAN_1_PROPAGATION_DELAY.VALUE=1050 DRIVER.CAN.VAR.CAN_1_MESSAGE_51_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_51_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_50_INT_ENA_REF.VALUE=0x00000000 @@ -3982,7 +3982,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_5_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_1_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_11_ID.VALUE=0x404 -DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_TIME.VALUE=16 +DRIVER.CAN.VAR.CAN_1_NOMINAL_BIT_TIME.VALUE=8 DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_ENA_REF.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_ENA_REF.VALUE=0x00000000 @@ -4086,7 +4086,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_28_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_28_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_8_INT_ENA_REF.VALUE=0x00000001 -DRIVER.CAN.VAR.CAN_1_SHIFT.VALUE=0 +DRIVER.CAN.VAR.CAN_1_SHIFT.VALUE=18 DRIVER.CAN.VAR.CAN_2_MESSAGE_64_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_56_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_50_MASK.VALUE=0x000007FF @@ -4104,7 +4104,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_14_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_9_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_2_BRPE.VALUE=0 -DRIVER.CAN.VAR.CAN_1_MASK.VALUE=0x1FFFFFFF +DRIVER.CAN.VAR.CAN_1_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_3_MESSAGE_61_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_53_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_45_INT_LEVEL.VALUE=0x00000000 @@ -4148,8 +4148,8 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_45_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_1_MESSAGE_37_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_1_MESSAGE_29_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_BRPE_FREQ.VALUE=4.000 -DRIVER.CAN.VAR.CAN_1_BRP_FREQ.VALUE=4.000 +DRIVER.CAN.VAR.CAN_1_BRPE_FREQ.VALUE=2.000 +DRIVER.CAN.VAR.CAN_1_BRP_FREQ.VALUE=2.000 DRIVER.CAN.VAR.CAN_3_MESSAGE_20_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_20_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_12_EOB.VALUE=0x00000000 @@ -4420,7 +4420,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_19_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_3_MESSAGE_2_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_2_DIR.VALUE=0x20000000 -DRIVER.CAN.VAR.CAN_1_BRP.VALUE=25 +DRIVER.CAN.VAR.CAN_1_BRP.VALUE=51 DRIVER.CAN.VAR.CAN_3_MESSAGE_7_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_3_PROP_SEG.VALUE=3 DRIVER.CAN.VAR.CAN_2_MESSAGE_21_INT_ENA.VALUE=0x00000000 @@ -4441,7 +4441,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_26_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_18_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_2_ID.VALUE=0x2 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TR.VALUE=0 +DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TR.VALUE=1040000 DRIVER.CAN.VAR.CAN_3_MESSAGE_31_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_3_MESSAGE_23_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_3_MESSAGE_15_DLC.VALUE=8 @@ -4580,7 +4580,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_24_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_3_MESSAGE_16_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_1_MESSAGE_8_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_NOMINAL_AUTO_BUS_ON_TIME.VALUE=0.000 +DRIVER.CAN.VAR.CAN_1_NOMINAL_AUTO_BUS_ON_TIME.VALUE=10000000.000 DRIVER.CAN.VAR.CAN_2_SHIFT.VALUE=0 DRIVER.CAN.VAR.CAN_1_MESSAGE_64_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_64_DIR.VALUE=0x20000000 @@ -4706,7 +4706,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_6_MASK.VALUE=0x000007FF DRIVER.CAN.VAR.CAN_1_MESSAGE_57_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_49_ENA.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_PHASE_SEG.VALUE=6 +DRIVER.CAN.VAR.CAN_1_PHASE_SEG.VALUE=2 DRIVER.CAN.VAR.CAN_3_MESSAGE_30_ID.VALUE=30 DRIVER.CAN.VAR.CAN_3_MESSAGE_22_ID.VALUE=22 DRIVER.CAN.VAR.CAN_3_MESSAGE_14_ID.VALUE=14 @@ -4931,7 +4931,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_9_ID.VALUE=0x102 DRIVER.CAN.VAR.CAN_1_MESSAGE_5_RTR.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_59_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_SJW.VALUE=4 +DRIVER.CAN.VAR.CAN_1_SJW.VALUE=2 DRIVER.CAN.VAR.CAN_3_MESSAGE_50_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_50_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_42_EOB.VALUE=0x00000000 @@ -4963,7 +4963,7 @@ DRIVER.CAN.VAR.CAN_1_MESSAGE_37_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_29_INT_ENA.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_9_MASK.VALUE=0x000007FF -DRIVER.CAN.VAR.CAN_1_IDENTIFIER_MODE.VALUE=0x40000000 +DRIVER.CAN.VAR.CAN_1_IDENTIFIER_MODE.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_41_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_33_INT_LEVEL.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_25_INT_LEVEL.VALUE=0x00000000 @@ -4975,7 +4975,7 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_55_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_2_MESSAGE_47_DLC.VALUE=8 DRIVER.CAN.VAR.CAN_2_MESSAGE_39_DLC.VALUE=8 -DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TIME.VALUE=0 +DRIVER.CAN.VAR.CAN_1_AUTO_BUS_ON_TIME.VALUE=10000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_6_EOB.VALUE=0x00000000 DRIVER.CAN.VAR.CAN_3_MESSAGE_6_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_2_MESSAGE_30_INT_ENA_REF.VALUE=0x00000000 @@ -5214,7 +5214,7 @@ DRIVER.CAN.VAR.CAN_3_MESSAGE_8_DIR.VALUE=0x20000000 DRIVER.CAN.VAR.CAN_1_MESSAGE_10_EOB.VALUE=0x00000080 DRIVER.CAN.VAR.CAN_1_MESSAGE_10_DIR.VALUE=0x00000000 -DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT.VALUE=62.500 +DRIVER.CAN.VAR.CAN_1_SAMPLE_POINT.VALUE=75.000 DRIVER.CAN.VAR.CAN_2_MESSAGE_51_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_43_BOOL_ENA.VALUE=0 DRIVER.CAN.VAR.CAN_2_MESSAGE_35_BOOL_ENA.VALUE=0 @@ -5535,8 +5535,8 @@ DRIVER.CAN.VAR.CAN_2_MESSAGE_13_ID.VALUE=13 DRIVER.CAN.VAR.CAN_2_MESSAGE_8_ID.VALUE=8 DRIVER.ADC.VAR.ADC2_GROUP1_DISCHARGE_PRESCALER.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN21_ENABLE.VALUE=0x00200000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN13_ENABLE.VALUE=0x00002000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN21_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN13_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 DRIVER.ADC.VAR.ADC2_GROUP1_RESOLUTION.VALUE=12_BIT DRIVER.ADC.VAR.ADC2_GROUP0_PIN3_ENABLE.VALUE=0x00000000 @@ -5553,7 +5553,7 @@ DRIVER.ADC.VAR.ADC2_GROUP2_RAM_PARITY_ENA.VALUE=0 DRIVER.ADC.VAR.ADC1_GROUP1_PIN3_ENABLE.VALUE=0x00000008 DRIVER.ADC.VAR.ADC1_GROUP0_CHANNEL_TOTAL_TIME.VALUE=0.000000 -DRIVER.ADC.VAR.ADC1_GROUP1_FIFO_SIZE.VALUE=24 +DRIVER.ADC.VAR.ADC1_GROUP1_FIFO_SIZE.VALUE=10 DRIVER.ADC.VAR.ADC1_GROUP2_DISCHARGE_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP2_SAMPLE_PRESCALER.VALUE=0 DRIVER.ADC.VAR.ADC1_GROUP1_LENGTH.VALUE=24 @@ -5575,9 +5575,9 @@ DRIVER.ADC.VAR.ADC2_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=384.60 DRIVER.ADC.VAR.ADC2_GROUP2_SAMPLE_PRESCALER.VALUE=2 DRIVER.ADC.VAR.ADC2_GROUP2_PIN12_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN18_ENABLE.VALUE=0x00040000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN18_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP0_PIN8_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN11_ENABLE.VALUE=0x00000800 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN11_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_BND.VALUE=2 DRIVER.ADC.VAR.ADC2_GROUP0_PIN1_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP2_PIN23_ENABLE.VALUE=0x00000000 @@ -5588,7 +5588,7 @@ DRIVER.ADC.VAR.ADC2_GROUP2_PIN5_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP1_PIN8_ENABLE.VALUE=0x00000100 DRIVER.ADC.VAR.ADC1_GROUP1_ID_ENABLE.VALUE=0x00000020 -DRIVER.ADC.VAR.ADC1_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=503.22 +DRIVER.ADC.VAR.ADC1_GROUP1_EXTENDED_SAMPLE_TIME.VALUE=500.00 DRIVER.ADC.VAR.ADC1_GROUP0_CONVERSION_TIME.VALUE=3.271 DRIVER.ADC.VAR.ADC2_GROUP0_RESOLUTION.VALUE=12_BIT DRIVER.ADC.VAR.ADC1_GROUP1_PIN1_ENABLE.VALUE=0x00000002 @@ -5638,11 +5638,11 @@ DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_PRESCALER.VALUE=2 DRIVER.ADC.VAR.ADC1_GROUP0_DISCHARGE_PRESCALER.VALUE=0 DRIVER.ADC.VAR.ADC2_GROUP2_PIN3_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN6_ENABLE.VALUE=0x00000040 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN6_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_RAMBASE.VALUE=0xFF3A0000 DRIVER.ADC.VAR.ADC2_GROUP0_BND.VALUE=8 DRIVER.ADC.VAR.ADC1_PORT_BIT0_DOUT.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_SCAN_TIME.VALUE=1112.885 +DRIVER.ADC.VAR.ADC1_GROUP1_SCAN_TIME.VALUE=432.692 DRIVER.ADC.VAR.ADC1_GROUP0_RESOLUTION.VALUE=12_BIT DRIVER.ADC.VAR.ADC2_GROUP2_FIFO_SIZE.VALUE=16 DRIVER.ADC.VAR.ADC2_GROUP1_PIN7_ENABLE.VALUE=0x00000000 @@ -5665,16 +5665,16 @@ DRIVER.ADC.VAR.ADC1_GROUP2_CONTINUOUS_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP0_PIN10_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP1_PINS.VALUE=0 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN22_ENABLE.VALUE=0x00400000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN14_ENABLE.VALUE=0x00004000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN22_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN14_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP0_PIN4_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP2_PIN18_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP2_PIN8_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP2_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP2_PIN11_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP2_PIN1_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP2_FIFO_SIZE.VALUE=32 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN4_ENABLE.VALUE=0x00000010 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN4_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_RAMBASE.VALUE=0xFF3E0000 DRIVER.ADC.VAR.ADC1_BASE.VALUE=0xFFF7C000 DRIVER.ADC.VAR.ADC1_PORT_BIT0_DIR.VALUE=0 @@ -5703,14 +5703,14 @@ DRIVER.ADC.VAR.ADC1_GROUP0_PIN15_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP1_BND.VALUE=12 DRIVER.ADC.VAR.ADC2_GROUP2_PIN13_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN19_ENABLE.VALUE=0x00080000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN19_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_PORT_BIT0_DOUT.VALUE=0 DRIVER.ADC.VAR.ADC2_CYCLE_TIME.VALUE=100.00 DRIVER.ADC.VAR.ADC1_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT DRIVER.ADC.VAR.ADC1_GROUP1_DISCHARGE_PRESCALER.VALUE=0 DRIVER.ADC.VAR.ADC2_GROUP0_PIN9_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_PRESCALE.VALUE=9 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN20_ENABLE.VALUE=0x00100000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN20_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP1_PIN12_ENABLE.VALUE=0x00001000 DRIVER.ADC.VAR.ADC1_GROUP0_RAM_PARITY_ENA.VALUE=0 DRIVER.ADC.VAR.ADC2_GROUP0_SAMPLE_TIME.VALUE=300.00 @@ -5726,7 +5726,7 @@ DRIVER.ADC.VAR.ADC1_PORT_BIT0_PDR.VALUE=0 DRIVER.ADC.VAR.ADC1_GROUP1_SAMPLE_TIME.VALUE=300.00 DRIVER.ADC.VAR.ADC1_GROUP1_PIN2_ENABLE.VALUE=0x00000004 -DRIVER.ADC.VAR.ADC1_GROUP1_CONVERSION_TIME.VALUE=3.271 +DRIVER.ADC.VAR.ADC1_GROUP1_CONVERSION_TIME.VALUE=3.250 DRIVER.ADC.VAR.ADC1_GROUP0_FIFO_SIZE.VALUE=0 DRIVER.ADC.VAR.ADC1_PORT_BIT0_PULL.VALUE=2 DRIVER.ADC.VAR.ADC1_GROUP0_LENGTH.VALUE=0 @@ -5739,7 +5739,7 @@ DRIVER.ADC.VAR.ADC1_GROUP0_PIN6_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP2_SCAN_TIME.VALUE=0.000 DRIVER.ADC.VAR.ADC2_GROUP1_HW_TRIGGER_SOURCE.VALUE=EVENT -DRIVER.ADC.VAR.ADC1_GROUP1_CHANNEL_TOTAL_TIME.VALUE=91.694165 +DRIVER.ADC.VAR.ADC1_GROUP1_CHANNEL_TOTAL_TIME.VALUE=37.932692 DRIVER.ADC.VAR.ADC1_GROUP0_EXTENDED_SAMPLE_TIME.VALUE=503.22 DRIVER.ADC.VAR.ADC1_GROUP0_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT DRIVER.ADC.VAR.ADC2_GROUP1_PIN14_ENABLE.VALUE=0x00000000 @@ -5754,7 +5754,7 @@ DRIVER.ADC.VAR.ADC1_GROUP2_HW_TRIGGER_SOURCE_ALT.VALUE=EVENT DRIVER.ADC.VAR.ADC2_GROUP2_PIN11_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP1_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN17_ENABLE.VALUE=0x00020000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN17_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP1_ACTUAL_DISCHARGE_TIME.VALUE=0.00 DRIVER.ADC.VAR.ADC2_GROUP0_PIN7_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP1_PIN10_ENABLE.VALUE=0x00000400 @@ -5772,7 +5772,7 @@ DRIVER.ADC.VAR.ADC1_GROUP0_ID_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP2_DISCHARGE_TIME.VALUE=0.00 DRIVER.ADC.VAR.ADC1_GROUP2_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PINS.VALUE=24 +DRIVER.ADC.VAR.ADC1_GROUP1_PINS.VALUE=10 DRIVER.ADC.VAR.ADC1_GROUP1_TRIGGER_EDGE_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_ALT_TRIG_COMP.VALUE=1 DRIVER.ADC.VAR.ADC1_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 @@ -5791,8 +5791,8 @@ DRIVER.ADC.VAR.ADC1_GROUP2_PIN1_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP0_PIN11_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP0_SCAN_TIME.VALUE=0.000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN23_ENABLE.VALUE=0x00800000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN15_ENABLE.VALUE=0x00008000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN23_ENABLE.VALUE=0x00000000 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN15_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP0_HW_TRIGGER_SOURCE.VALUE=EVENT DRIVER.ADC.VAR.ADC2_GROUP0_PIN5_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP2_PIN19_ENABLE.VALUE=0x00000000 @@ -5808,7 +5808,7 @@ DRIVER.ADC.VAR.ADC2_GROUP1_CHANNEL_TOTAL_TIME.VALUE=0.000000 DRIVER.ADC.VAR.ADC2_GROUP2_PIN2_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC2_GROUP0_CONTINUOUS_ENABLE.VALUE=0x00000000 -DRIVER.ADC.VAR.ADC1_GROUP1_PIN5_ENABLE.VALUE=0x00000020 +DRIVER.ADC.VAR.ADC1_GROUP1_PIN5_ENABLE.VALUE=0x00000000 DRIVER.ADC.VAR.ADC1_GROUP2_ACTUAL_SAMPLE_TIME.VALUE=500.00 DRIVER.ADC.VAR.ADC1_GROUP0_SCAN_TIME.VALUE=0.000 DRIVER.ADC.VAR.ADC2_GROUP1_PIN6_ENABLE.VALUE=0x00000000 Index: firmware/include/can.h =================================================================== diff -u -r533272e6ef2873fcfe7a41338a6c88c7a601605d -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/include/can.h (.../can.h) (revision 533272e6ef2873fcfe7a41338a6c88c7a601605d) +++ firmware/include/can.h (.../can.h) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -630,16 +630,16 @@ /* Configuration registers initial value for CAN1*/ -#define CAN1_CTL_CONFIGVALUE ((uint32)0x00000000U \ +#define CAN1_CTL_CONFIGVALUE ((uint32)0x00000200U \ | (uint32)0x00000000U \ - | (uint32)((uint32)0x00000005U << 10U) | 0x00020002U) + | (uint32)((uint32)0x0000000AU << 10U) | 0x00020002U) #define CAN1_ES_CONFIGVALUE 0x00000007U #define CAN1_BTR_CONFIGVALUE ((uint32)((uint32)0U << 16U) \ - | (uint32)((uint32)(6U - 1U) << 12U) \ - | (uint32)((uint32)((3U + 6U) - 1U) << 8U) \ - | (uint32)((uint32)(4U - 1U) << 6U) | (uint32)25U) + | (uint32)((uint32)(2U - 1U) << 12U) \ + | (uint32)((uint32)((3U + 2U) - 1U) << 8U) \ + | (uint32)((uint32)(2U - 1U) << 6U) | (uint32)51U) #define CAN1_TEST_CONFIGVALUE 0x00000080U -#define CAN1_ABOTR_CONFIGVALUE ((uint32)(0U)) +#define CAN1_ABOTR_CONFIGVALUE ((uint32)(1040000U)) #define CAN1_INTMUX0_CONFIGVALUE ((uint32)0x00000000U \ | (uint32)0x00000002U \ | (uint32)0x00000004U \ Index: firmware/source/adc.c =================================================================== diff -u -r533272e6ef2873fcfe7a41338a6c88c7a601605d -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/source/adc.c (.../adc.c) (revision 533272e6ef2873fcfe7a41338a6c88c7a601605d) +++ firmware/source/adc.c (.../adc.c) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -236,32 +236,26 @@ 0x00000002U | 0x00000004U | 0x00000008U | - 0x00000010U | - 0x00000020U | - 0x00000040U | + 0x00000000U | + 0x00000000U | + 0x00000000U | 0x00000080U | 0x00000100U | 0x00000200U | 0x00000400U | - 0x00000800U | + 0x00000000U | 0x00001000U | - 0x00002000U | - 0x00004000U | - 0x00008000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | 0x00010000U | - 0x00020000U | - 0x00040000U | - 0x00080000U | - 0x00100000U | - 0x00200000U | - 0x00400000U | - 0x00800000U, 0x00000000U | 0x00000000U | 0x00000000U | 0x00000000U | 0x00000000U | 0x00000000U | + 0x00000000U, 0x00000000U | 0x00000000U | 0x00000000U | @@ -279,6 +273,12 @@ 0x00000000U | 0x00000000U | 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | + 0x00000000U | 0x00000000U}, {0x00000000U | 0x00000000U | @@ -334,7 +334,7 @@ static const uint32 s_adcFiFoSize[2U][3U] = { {0U, - 24U, + 10U, 32U}, {16U, 16U, Index: firmware/source/can.c =================================================================== diff -u -rf3646622112ca7402527b541766b92a6560f2b17 -rce66580e076bffa157868ff7e422556f78a95cac --- firmware/source/can.c (.../can.c) (revision f3646622112ca7402527b541766b92a6560f2b17) +++ firmware/source/can.c (.../can.c) (revision ce66580e076bffa157868ff7e422556f78a95cac) @@ -104,9 +104,9 @@ * - Disable status interrupts * - Enter initialization mode */ - canREG1->CTL = (uint32)0x00000000U + canREG1->CTL = (uint32)0x00000200U | (uint32)0x00000000U - | (uint32)((uint32)0x00000005U << 10U) + | (uint32)((uint32)0x0000000AU << 10U) | (uint32)0x00020043U; /** - Clear all pending error flags and reset current status */ @@ -180,7 +180,7 @@ | (uint32)0x00000000U; /** - Setup auto bus on timer period */ - canREG1->ABOTR = (uint32)0U; + canREG1->ABOTR = (uint32)1040000U; /** - Initialize message 1 * - Wait until IF1 is ready for use @@ -196,8 +196,8 @@ } /* Wait */ - canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x1U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x1U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF1CMD = (uint8) 0xF8U; canREG1->IF1NO = 1U; @@ -215,8 +215,8 @@ { } /* Wait */ - canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x2U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x2U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 2U; @@ -234,8 +234,8 @@ { } /* Wait */ - canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)0x4U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)0x4U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF1CMD = (uint8) 0xF8U; canREG1->IF1NO = 3U; @@ -253,8 +253,8 @@ { } /* Wait */ - canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x08U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x08U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 4U; @@ -272,8 +272,8 @@ { } /* Wait */ - canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x20U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x20U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF1CMD = (uint8) 0xF8U; canREG1->IF1NO = 5U; @@ -291,8 +291,8 @@ { } /* Wait */ - canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)0x21U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)0x21U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 6U; @@ -310,8 +310,8 @@ { } /* Wait */ - canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x100U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x100U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF1CMD = (uint8) 0xF8U; canREG1->IF1NO = 7U; @@ -329,8 +329,8 @@ { } /* Wait */ - canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x101U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x101U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 8U; @@ -348,8 +348,8 @@ { } /* Wait */ - canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)0x102U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)0x102U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF1CMD = (uint8) 0xF8U; canREG1->IF1NO = 9U; @@ -367,8 +367,8 @@ { } /* Wait */ - canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x103U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x103U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 10U; @@ -386,8 +386,8 @@ { } /* Wait */ - canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x404U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF1MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF1ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)0x404U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF1MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF1CMD = (uint8) 0xF8U; canREG1->IF1NO = 11U; @@ -405,8 +405,8 @@ { } /* Wait */ - canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U); - canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x40000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)0x405U & (uint32)0x1FFFFFFFU) << (uint32)0U); + canREG1->IF2MSK = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x000007FFU) << (uint32)18U); + canREG1->IF2ARB = (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)0x405U & (uint32)0x000007FFU) << (uint32)18U); canREG1->IF2MCTL = 0x00001000U | (uint32)0x00000800U | (uint32)0x00000000U | (uint32)0x00000080U | (uint32)8U; canREG1->IF2CMD = (uint8) 0xF8U; canREG1->IF2NO = 12U; @@ -439,10 +439,10 @@ * - Setup baud rate prescaler */ canREG1->BTR = (uint32)((uint32)0U << 16U) | - (uint32)((uint32)(6U - 1U) << 12U) | - (uint32)((uint32)((3U + 6U) - 1U) << 8U) | - (uint32)((uint32)(4U - 1U) << 6U) | - (uint32)25U; + (uint32)((uint32)(2U - 1U) << 12U) | + (uint32)((uint32)((3U + 2U) - 1U) << 8U) | + (uint32)((uint32)(2U - 1U) << 6U) | + (uint32)51U; /** - CAN1 Port output values */