Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r9a9d04b84f4345fca87fb14d26f09d497b08aae8 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 9a9d04b84f4345fca87fb14d26f09d497b08aae8) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -46,8 +46,6 @@ #define BP_CONTROL_INTERVAL ( 1000 / TASK_GENERAL_INTERVAL ) // interval (ms/task time) at which the blood pump is controlled #define BP_P_COEFFICIENT 0.00005 // P term for blood pump control #define BP_I_COEFFICIENT 0.00015 // I term for blood pump control -#define BP_MAX_PWM_DC_DELTA 0.01 // prevents large steps in PWM duty cycle while controlling -#define BP_MIN_PWM_DC_DELTA -0.01 #define BP_MAX_CURR_WHEN_STOPPED_MA 150.0 // motor controller current should not exceed this when pump should be stopped #define BP_MIN_CURR_WHEN_RUNNING_MA 150.0 // motor controller current should always exceed this when pump should be running @@ -100,13 +98,15 @@ // ********** private data ********** -static BLOOD_PUMP_STATE_T bloodPumpState = BLOOD_PUMP_OFF_STATE; // current state of blood flow controller state machine -static U32 bloodFlowDataPublicationTimerCounter = 0; // used to schedule blood flow data publication to CAN bus -static BOOL isBloodPumpOn = FALSE; // blood pump is currently running -static F32 bloodPumpPWMDutyCyclePct = 0.0; // initial blood pump PWM duty cycle -static F32 bloodPumpPWMDutyCyclePctSet = 0.0; // currently set blood pump PWM duty cycle -static MOTOR_DIR_T bloodPumpDirection = MOTOR_DIR_FORWARD; // requested blood flow direction -static MOTOR_DIR_T bloodPumpDirectionSet = MOTOR_DIR_FORWARD; // currently set blood flow direction +static BLOOD_PUMP_STATE_T bloodPumpState = BLOOD_PUMP_OFF_STATE; // current state of blood flow controller state machine +static U32 bloodFlowDataPublicationTimerCounter = 0; // used to schedule blood flow data publication to CAN bus +static BOOL isBloodPumpOn = FALSE; // blood pump is currently running +static F32 bloodPumpPWMDutyCyclePct = 0.0; // initial blood pump PWM duty cycle +static F32 bloodPumpPWMDutyCyclePctSet = 0.0; // currently set blood pump PWM duty cycle +static MOTOR_DIR_T bloodPumpDirection = MOTOR_DIR_FORWARD; // requested blood flow direction +static MOTOR_DIR_T bloodPumpDirectionSet = MOTOR_DIR_FORWARD; // currently set blood flow direction +static PUMP_CONTROL_MODE_T bloodPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< requested blood pump control mode. +static PUMP_CONTROL_MODE_T bloodPumpControlModeSet = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< currently set blood pump control mode. DATA_DECL( U32, BloodFlowDataPub, bloodFlowDataPublishInterval, BLOOD_FLOW_DATA_PUB_INTERVAL, BLOOD_FLOW_DATA_PUB_INTERVAL ); // interval (in ms) at which to publish blood flow data to CAN bus DATA_DECL( S32, TargetBloodFlowRate, targetBloodFlowRate, 0, 0 ); // requested blood flow rate @@ -178,9 +178,10 @@ * Outputs : targetBloodFlowRate, bloodPumpdirection, bloodPumpPWMDutyCyclePct * @param flowRate : new target blood flow rate * @param dir : new blood flow direction + * @param mode : new control mode * @return TRUE if new flow rate & dir are set, FALSE if not *************************************************************************/ -BOOL setBloodPumpTargetFlowRate( U32 flowRate, MOTOR_DIR_T dir ) +BOOL setBloodPumpTargetFlowRate( U32 flowRate, MOTOR_DIR_T dir, PUMP_CONTROL_MODE_T mode ) { BOOL result = FALSE; @@ -193,6 +194,7 @@ resetBloodFlowMovingAverage(); targetBloodFlowRate.data = ( dir == MOTOR_DIR_FORWARD ? (S32)flowRate : (S32)flowRate * -1 ); bloodPumpDirection = dir; + bloodPumpControlMode = mode; // set PWM duty cycle target to an estimated initial target to ramp to based on target flow rate - then we'll control to flow when ramp completed bloodPumpPWMDutyCyclePct = BP_PWM_FROM_ML_PER_MIN((F32)flowRate); // ~ 8% per 100 mL/min with a 10% zero offset added in (e.g. 100 mL/min = 8+10 = 18%) @@ -377,6 +379,13 @@ { resetBloodFlowMovingAverage(); resetPIController( PI_CONTROLLER_ID_BLOOD_FLOW, bloodPumpPWMDutyCyclePctSet ); + bloodPumpControlModeSet = bloodPumpControlMode; + // if open loop mode, set PWM to requested duty cycle where it will stay during control state + if ( bloodPumpControlModeSet == PUMP_CONTROL_MODE_OPEN_LOOP ) + { + bloodPumpPWMDutyCyclePctSet = bloodPumpPWMDutyCyclePct; + setBloodPumpControlSignalPWM( bloodPumpPWMDutyCyclePct ); + } result = BLOOD_PUMP_CONTROL_TO_TARGET_STATE; } // continue ramp up @@ -414,6 +423,13 @@ { resetBloodFlowMovingAverage(); resetPIController( PI_CONTROLLER_ID_BLOOD_FLOW, bloodPumpPWMDutyCyclePctSet ); + bloodPumpControlModeSet = bloodPumpControlMode; + // if open loop mode, set PWM to requested duty cycle where it will stay during control state + if ( bloodPumpControlModeSet == PUMP_CONTROL_MODE_OPEN_LOOP ) + { + bloodPumpPWMDutyCyclePctSet = bloodPumpPWMDutyCyclePct; + setBloodPumpControlSignalPWM( bloodPumpPWMDutyCyclePct ); + } result = BLOOD_PUMP_CONTROL_TO_TARGET_STATE; } // continue ramp down @@ -439,16 +455,20 @@ static BLOOD_PUMP_STATE_T handleBloodPumpControlToTargetState( void ) { BLOOD_PUMP_STATE_T result = BLOOD_PUMP_CONTROL_TO_TARGET_STATE; - F32 tgtFlow = (F32)getTargetBloodFlowRate(); - F32 actFlow = getMeasuredBloodFlowRate(); - F32 newPWM; // control at set interval if ( ++bpControlTimerCounter >= BP_CONTROL_INTERVAL ) { - newPWM = runPIController( PI_CONTROLLER_ID_BLOOD_FLOW, tgtFlow, actFlow ); - bloodPumpPWMDutyCyclePctSet = newPWM; - setBloodPumpControlSignalPWM( newPWM ); + if ( bloodPumpControlModeSet == PUMP_CONTROL_MODE_CLOSED_LOOP ) + { + F32 tgtFlow = (F32)getTargetBloodFlowRate(); + F32 actFlow = getMeasuredBloodFlowRate(); + F32 newPWM; + + newPWM = runPIController( PI_CONTROLLER_ID_BLOOD_FLOW, tgtFlow, actFlow ); + bloodPumpPWMDutyCyclePctSet = newPWM; + setBloodPumpControlSignalPWM( newPWM ); + } bpControlTimerCounter = 0; } Index: firmware/App/Controllers/BloodFlow.h =================================================================== diff -u -rf7e3018ec6ab762fe08efb42b21fb2ca970174b0 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision f7e3018ec6ab762fe08efb42b21fb2ca970174b0) +++ firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -28,7 +28,7 @@ void execBloodFlowMonitor( void ); void execBloodFlowController( void ); -BOOL setBloodPumpTargetFlowRate( U32 flowRate, MOTOR_DIR_T dir ); +BOOL setBloodPumpTargetFlowRate( U32 flowRate, MOTOR_DIR_T dir, PUMP_CONTROL_MODE_T mode ); void signalBloodPumpHardStop( void ); SELF_TEST_STATUS_T execBloodFlowTest( void ); Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -r9a9d04b84f4345fca87fb14d26f09d497b08aae8 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 9a9d04b84f4345fca87fb14d26f09d497b08aae8) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -47,8 +47,6 @@ #define DIP_CONTROL_INTERVAL ( 1000 / TASK_GENERAL_INTERVAL ) // interval (ms/task time) at which the dialIn pump is controlled #define DIP_P_COEFFICIENT 0.00005 // P term for dialIn pump control #define DIP_I_COEFFICIENT 0.00015 // I term for dialIn pump control -#define DIP_MAX_PWM_DC_DELTA 0.01 // prevents large steps in PWM duty cycle -#define DIP_MIN_PWM_DC_DELTA -0.01 #define DIP_MAX_CURR_WHEN_STOPPED_MA 150.0 // motor controller current should not exceed this when pump should be stopped #define DIP_MIN_CURR_WHEN_RUNNING_MA 150.0 // motor controller current should always exceed this when pump should be running @@ -101,13 +99,15 @@ // ********** private data ********** -static DIAL_IN_PUMP_STATE_T dialInPumpState = DIAL_IN_PUMP_OFF_STATE; // current state of dialIn flow controller state machine -static U32 dialInFlowDataPublicationTimerCounter = 5; // used to schedule dialIn flow data publication to CAN bus -static BOOL isDialInPumpOn = FALSE; // dialIn pump is currently running -static F32 dialInPumpPWMDutyCyclePct = 0.0; // initial dialIn pump PWM duty cycle -static F32 dialInPumpPWMDutyCyclePctSet = 0.0; // currently set dialIn pump PWM duty cycle -static MOTOR_DIR_T dialInPumpDirection = MOTOR_DIR_FORWARD; // requested dialIn flow direction -static MOTOR_DIR_T dialInPumpDirectionSet = MOTOR_DIR_FORWARD; // currently set dialIn flow direction +static DIAL_IN_PUMP_STATE_T dialInPumpState = DIAL_IN_PUMP_OFF_STATE; // current state of dialIn flow controller state machine +static U32 dialInFlowDataPublicationTimerCounter = 5; // used to schedule dialIn flow data publication to CAN bus +static BOOL isDialInPumpOn = FALSE; // dialIn pump is currently running +static F32 dialInPumpPWMDutyCyclePct = 0.0; // initial dialIn pump PWM duty cycle +static F32 dialInPumpPWMDutyCyclePctSet = 0.0; // currently set dialIn pump PWM duty cycle +static MOTOR_DIR_T dialInPumpDirection = MOTOR_DIR_FORWARD; // requested dialIn flow direction +static MOTOR_DIR_T dialInPumpDirectionSet = MOTOR_DIR_FORWARD; // currently set dialIn flow direction +static PUMP_CONTROL_MODE_T dialInPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< requested dialIn pump control mode. +static PUMP_CONTROL_MODE_T dialInPumpControlModeSet = PUMP_CONTROL_MODE_CLOSED_LOOP;///< currently set dialIn pump control mode. DATA_DECL( U32, DialInFlowDataPub, dialInFlowDataPublishInterval, DIAL_IN_FLOW_DATA_PUB_INTERVAL, DIAL_IN_FLOW_DATA_PUB_INTERVAL ); // interval (in ms) at which to publish dialIn flow data to CAN bus DATA_DECL( S32, TargetDialInFlowRate, targetDialInFlowRate, 0, 0 ); // requested dialIn flow rate @@ -179,9 +179,10 @@ * Outputs : targetDialInFlowRate, dialInPumpdirection, dialInPumpPWMDutyCyclePct * @param flowRate : new target dialIn flow rate * @param dir : new dialIn flow direction + * @param mode : new control mode * @return TRUE if new flow rate & dir are set, FALSE if not *************************************************************************/ -BOOL setDialInPumpTargetFlowRate( U32 flowRate, MOTOR_DIR_T dir ) +BOOL setDialInPumpTargetFlowRate( U32 flowRate, MOTOR_DIR_T dir, PUMP_CONTROL_MODE_T mode ) { BOOL result = FALSE; @@ -194,6 +195,7 @@ resetDialInFlowMovingAverage(); targetDialInFlowRate.data = ( dir == MOTOR_DIR_FORWARD ? (S32)flowRate : (S32)flowRate * -1 ); dialInPumpDirection = dir; + dialInPumpControlMode = mode; // set PWM duty cycle target to an estimated initial target to ramp to based on target flow rate - then we'll control to flow when ramp completed dialInPumpPWMDutyCyclePct = DIP_PWM_FROM_ML_PER_MIN((F32)flowRate); // ~ 8% per 100 mL/min with a 10% zero offset added in (e.g. 100 mL/min = 8+10 = 18%) @@ -377,7 +379,14 @@ else if ( dialInPumpPWMDutyCyclePctSet >= dialInPumpPWMDutyCyclePct ) { resetDialInFlowMovingAverage(); - resetPIController( PI_CONTROLLER_ID_DIALYSATE_FLOW, MIN_DIAL_IN_PUMP_PWM_DUTY_CYCLE ); + resetPIController( PI_CONTROLLER_ID_DIALYSATE_FLOW, dialInPumpPWMDutyCyclePctSet ); + dialInPumpControlModeSet = dialInPumpControlMode; + // if open loop mode, set PWM to requested duty cycle where it will stay during control state + if ( dialInPumpControlModeSet == PUMP_CONTROL_MODE_OPEN_LOOP ) + { + dialInPumpPWMDutyCyclePctSet = dialInPumpPWMDutyCyclePct; + setDialInPumpControlSignalPWM( dialInPumpPWMDutyCyclePct ); + } result = DIAL_IN_PUMP_CONTROL_TO_TARGET_STATE; } // continue ramp up @@ -414,7 +423,14 @@ else if ( dialInPumpPWMDutyCyclePctSet <= dialInPumpPWMDutyCyclePct ) { resetDialInFlowMovingAverage(); - resetPIController( PI_CONTROLLER_ID_DIALYSATE_FLOW, MIN_DIAL_IN_PUMP_PWM_DUTY_CYCLE ); + resetPIController( PI_CONTROLLER_ID_DIALYSATE_FLOW, dialInPumpPWMDutyCyclePctSet ); + dialInPumpControlModeSet = dialInPumpControlMode; + // if open loop mode, set PWM to requested duty cycle where it will stay during control state + if ( dialInPumpControlModeSet == PUMP_CONTROL_MODE_OPEN_LOOP ) + { + dialInPumpPWMDutyCyclePctSet = dialInPumpPWMDutyCyclePct; + setDialInPumpControlSignalPWM( dialInPumpPWMDutyCyclePct ); + } result = DIAL_IN_PUMP_CONTROL_TO_TARGET_STATE; } // continue ramp down @@ -440,16 +456,20 @@ static DIAL_IN_PUMP_STATE_T handleDialInPumpControlToTargetState( void ) { DIAL_IN_PUMP_STATE_T result = DIAL_IN_PUMP_CONTROL_TO_TARGET_STATE; - F32 tgtFlow = (F32)getTargetDialInFlowRate(); - F32 actFlow = getMeasuredDialInFlowRate(); - F32 newPWM; // control at set interval if ( ++dipControlTimerCounter >= DIP_CONTROL_INTERVAL ) { - newPWM = runPIController( PI_CONTROLLER_ID_DIALYSATE_FLOW, tgtFlow, actFlow ); - dialInPumpPWMDutyCyclePctSet = newPWM; - setDialInPumpControlSignalPWM( newPWM ); + if ( dialInPumpControlModeSet == PUMP_CONTROL_MODE_CLOSED_LOOP ) + { + F32 tgtFlow = (F32)getTargetDialInFlowRate(); + F32 actFlow = getMeasuredDialInFlowRate(); + F32 newPWM; + + newPWM = runPIController( PI_CONTROLLER_ID_DIALYSATE_FLOW, tgtFlow, actFlow ); + dialInPumpPWMDutyCyclePctSet = newPWM; + setDialInPumpControlSignalPWM( newPWM ); + } dipControlTimerCounter = 0; } @@ -640,11 +660,11 @@ F32 measMCCurr = getMeasuredDialInPumpMCCurrent(); F32 pumpPWMPctDutyCycle = dialInPumpPWMDutyCyclePctSet * FRACTION_TO_PERCENT_FACTOR; #ifdef DEBUG_ENABLED - // TODO - temporary debug code - remove later - char debugFlowStr[ 256 ]; - - sprintf( debugFlowStr, "Dial. Set Pt:%5d, Meas. Flow:%5d, Speed:%5d RPM, Current:%5d mA, PWM:%5d \n", flowStPt, (S32)measFlow, (S32)measMCSpd, (S32)measMCCurr, (S32)pumpPWMPctDutyCycle ); - sendDebugData( (U08*)debugFlowStr, strlen(debugFlowStr) ); +// // TODO - temporary debug code - remove later +// char debugFlowStr[ 256 ]; +// +// sprintf( debugFlowStr, "Dial. Set Pt:%5d, Meas. Flow:%5d, Speed:%5d RPM, Current:%5d mA, PWM:%5d \n", flowStPt, (S32)measFlow, (S32)measMCSpd, (S32)measMCCurr, (S32)pumpPWMPctDutyCycle ); +// sendDebugData( (U08*)debugFlowStr, strlen(debugFlowStr) ); #endif broadcastDialInFlowData( flowStPt, measFlow, measRotSpd, measSpd, measMCSpd, measMCCurr, pumpPWMPctDutyCycle ); dialInFlowDataPublicationTimerCounter = 0; Index: firmware/App/Controllers/DialInFlow.h =================================================================== diff -u -r832ca83805dc132cb753e79bdca81197331e03e6 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Controllers/DialInFlow.h (.../DialInFlow.h) (revision 832ca83805dc132cb753e79bdca81197331e03e6) +++ firmware/App/Controllers/DialInFlow.h (.../DialInFlow.h) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -28,7 +28,7 @@ void execDialInFlowMonitor( void ); void execDialInFlowController( void ); -BOOL setDialInPumpTargetFlowRate( U32 flowRate, MOTOR_DIR_T dir ); +BOOL setDialInPumpTargetFlowRate( U32 flowRate, MOTOR_DIR_T dir, PUMP_CONTROL_MODE_T mode ); void signalDialInPumpHardStop( void ); SELF_TEST_STATUS_T execDialInFlowTest( void ); Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u --- firmware/App/Controllers/DialOutFlow.c (revision 0) +++ firmware/App/Controllers/DialOutFlow.c (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -0,0 +1,877 @@ +/************************************************************************** + * + * Copyright (c) 2020-2020 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 DialOutFlow.c + * + * @date 22-Jan-2020 + * @author S. Nash + * + * @brief Monitor/Controller for dialysate outlet pump and load cell sensor. + * + **************************************************************************/ + +#ifndef _VECTORCAST_ + #include +#endif + +#include "etpwm.h" +#include "gio.h" +#include "mibspi.h" + +#include "Common.h" +#include "FPGA.h" +#include "InternalADC.h" +#include "OperationModes.h" +#include "PIControllers.h" +#include "SystemCommMessages.h" +#include "TaskGeneral.h" +#include "TaskPriority.h" +#include "Timers.h" +#include "DialOutFlow.h" + +// ********** private definitions ********** + +#define DIAL_OUT_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) // interval (ms/task time) at which the dialout vol data is published on the CAN bus + +#define MAX_DIAL_OUT_FLOW_RATE 650 // mL/min +#define MIN_DIAL_OUT_FLOW_RATE 100 // mL/min + +#define MAX_DIAL_OUT_PUMP_PWM_STEP_CHANGE 0.005 // max duty cycle change when ramping +#define MAX_DIAL_OUT_PUMP_PWM_DUTY_CYCLE 0.88 // controller will error if PWM duty cycle > 90%, so set max to 88% +#define MIN_DIAL_OUT_PUMP_PWM_DUTY_CYCLE 0.12 // controller will error if PWM duty cycle < 10%, so set min to 12% + +#define DOP_CONTROL_INTERVAL ( 1000 / TASK_GENERAL_INTERVAL ) // interval (ms/task time) at which the dialOut pump is controlled +#define DOP_P_COEFFICIENT 0.00005 // P term for dialOut pump control +#define DOP_I_COEFFICIENT 0.00015 // I term for dialOut pump control + +#define DOP_MAX_CURR_WHEN_STOPPED_MA 150.0 // motor controller current should not exceed this when pump should be stopped +#define DOP_MIN_CURR_WHEN_RUNNING_MA 150.0 // motor controller current should always exceed this when pump should be running +#define DOP_MAX_CURR_WHEN_RUNNING_MA 1000.0 // motor controller current should not exceed this when pump should be running +#define DOP_MAX_CURR_ERROR_DURATION_MS 2000 // motor controller current errors persisting beyond this duration will trigger an alarm + +#define DOP_SPEED_ADC_TO_RPM_FACTOR 1.375 // conversion factor from ADC counts to RPM for dialOut pump motor +#define DOP_CURRENT_ADC_TO_MA_FACTOR 2.65 // conversion factor from ADC counts to mA for dialOut pump motor +#define DOP_ADC_FULL_SCALE_V 3.0 // DOP analog signals are 0-3V (while int. ADC ref V is 3.3V) +#define DOP_ADC_MID_PT_BITS ( (F32)( INT_ADC_FULL_SCALE_BITS >> 1 ) * ( DOP_ADC_FULL_SCALE_V / INT_ADC_REF_V ) ) +#define SIGN_FROM_12_BIT_VALUE(v) ( (S16)(v) - (S16)DOP_ADC_MID_PT_BITS ) + + +/*** setDialOutFlowRxTotalVolumeAndRxTime ***/ +#define DOP_REV_PER_LITER 124.0 // rotor revolutions per liter +#define DOP_ML_PER_MIN_TO_PUMP_RPM_FACTOR ( DOP_REV_PER_LITER / ML_PER_LITER ) +#define DOP_GEAR_RATIO 32.0 // dialIn pump motor to dialIn pump gear ratio +#define DOP_MOTOR_RPM_TO_PWM_DC_FACTOR 0.00042 // ~24 BP motor RPM = 1% PWM duty cycle +#define DOP_PWM_ZERO_OFFSET 0.1 // 10% PWM duty cycle = zero speed +#define DOP_PWM_FROM_ML_PER_MIN(rate) ( (rate) * DOP_ML_PER_MIN_TO_PUMP_RPM_FACTOR * DOP_GEAR_RATIO * DOP_MOTOR_RPM_TO_PWM_DC_FACTOR + DOP_PWM_ZERO_OFFSET ) + +//#define MAX_RX_TOTAL_VOLUME_ML 8000 +//#define MIN_RX_TOTAL_VOLUME_ML 100 +//#define MAX_UF_RATE_ML_PER_HOUR 2500.0 + +typedef enum DialOutPump_States +{ + DIAL_OUT_PUMP_OFF_STATE = 0, + DIAL_OUT_PUMP_RAMPING_UP_STATE, + DIAL_OUT_PUMP_RAMPING_DOWN_STATE, + DIAL_OUT_PUMP_CONTROL_TO_TARGET_STATE, + NUM_OF_DIAL_OUT_PUMP_STATES +} DIAL_OUT_PUMP_STATE_T; + +typedef enum DialOut_Pump_Self_Test_States +{ + DIAL_OUT_PUMP_SELF_TEST_STATE_START = 0, + DIAL_OUT_PUMP_TEST_STATE_IN_PROGRESS, + DIAL_OUT_PUMP_TEST_STATE_COMPLETE, + NUM_OF_DIAL_OUT_PUMP_SELF_TEST_STATES +} DIAL_OUT_PUMP_SELF_TEST_STATE_T; + +// pin assignments and macros for pump stop and direction outputs +#define STOP_DO_PUMP_MIBSPI1_PORT_MASK 0x00000400 // (MIBSPI1 SIMO[0] - re-purposed as output GPIO) +#define SET_DOP_STOP() {mibspiREG1->PC3 |= STOP_DO_PUMP_MIBSPI1_PORT_MASK;} +#define CLR_DOP_STOP() {mibspiREG1->PC3 &= ~STOP_DO_PUMP_MIBSPI1_PORT_MASK;} +//#define STOP_DO_PUMP_SPI4_PORT_MASK 0x00000200 // (SPI4CLK - re-purposed as output GPIO) +//#define SET_DOP_STOP() {spiREG4->PC3 |= STOP_DO_PUMP_SPI4_PORT_MASK;} +//#define CLR_DOP_STOP() {spiREG4->PC3 &= ~STOP_DO_PUMP_SPI4_PORT_MASK;} +#define STOP_DO_PUMP_GIO_PORT_PIN 6U +#define SET_DOP_DIR() gioSetBit( gioPORTA, STOP_DO_PUMP_GIO_PORT_PIN, PIN_SIGNAL_HIGH ) +#define CLR_DOP_DIR() gioSetBit( gioPORTA, STOP_DO_PUMP_GIO_PORT_PIN, PIN_SIGNAL_LOW ) + +// ********** private data ********** + +static DIAL_OUT_PUMP_STATE_T dialOutPumpState = DIAL_OUT_PUMP_OFF_STATE; +static U32 dialOutFlowDataPublicationTimerCounter = 6; // set non-zero to phase dialout vol data publication to CAN bus +static BOOL isDialOutPumpOn = FALSE; +static U32 lastGivenRate = 0.0; +static F32 dialOutPumpPWMDutyCyclePct = 0.0; +static F32 dialOutPumpPWMDutyCyclePctSet = 0.0; +static MOTOR_DIR_T dialOutPumpDirection = MOTOR_DIR_FORWARD; +static MOTOR_DIR_T dialOutPumpDirectionSet = MOTOR_DIR_FORWARD; +static PUMP_CONTROL_MODE_T dialOutPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; +static PUMP_CONTROL_MODE_T dialOutPumpControlModeSet = PUMP_CONTROL_MODE_CLOSED_LOOP; + +DATA_DECL( U32, DialOutDataPub, DialOutDataPublishInterval, DIAL_OUT_DATA_PUB_INTERVAL, DIAL_OUT_DATA_PUB_INTERVAL ); // interval (in ms) at which to publish dialout vol data to CAN bus +DATA_ARRAY_DECL( F32, LoadCellWeightsInGrams, NUM_OF_LOAD_CELLS, loadCellWeightInGrams ); +DATA_DECL( F32, TotalTargetDialOutVolInMl, referenceUFVolumeInMl, 0.0, 0.0 ); // target dialout UF vol +DATA_DECL( F32, TotalMeasuredUFVolumeInMl, totalMeasuredUFVolumeInMl, 0.0, 0.0 ); // measured dialout UF vol +DATA_DECL( F32, MeasuredDialOutPumpMCSpeed, dialOutPumpMCSpeedRPM, 0.0, 0.0 ); // measured dialOut pump motor controller speed +DATA_DECL( F32, MeasuredDialOutPumpMCCurrent, dialOutPumpMCCurrentmA, 0.0, 0.0 );// measured dialOut pump motor controller current +DATA_DECL( F32, MeasuredDialOutPumpRotorSpeed, dialOutPumpRotorSpeedRPM, 0.0, 0.0 );// measured dialOut pump rotor speed +DATA_DECL( F32, MeasuredDialOutPumpSpeed, dialOutPumpSpeedRPM, 0.0, 0.0 ); // measured dialOut pump motor speed + +static U32 dopControlTimerCounter = 0; +static U32 dopCurrErrorDurationCtr = 0; + +static DIAL_OUT_PUMP_SELF_TEST_STATE_T dialOutPumpSelfTestState = DIAL_OUT_PUMP_SELF_TEST_STATE_START; +static U32 dialOutPumpSelfTestTimerCount = 0; + +// Broadcasting variables +DIAL_OUT_FLOW_DATA_T dialOutBroadCastVariables; + +// ********** private function prototypes ********** + +static DIAL_OUT_PUMP_STATE_T handleDialOutPumpOffState( void ); +static DIAL_OUT_PUMP_STATE_T handleDialOutPumpRampingUpState( void ); +static DIAL_OUT_PUMP_STATE_T handleDialOutPumpRampingDownState( void ); +static DIAL_OUT_PUMP_STATE_T handleDialOutPumpControlToTargetState( void ); + +static void setDialOutPumpControlSignalPWM( F32 newPWM ); +static void stopDialOutPump( void ); +static void releaseDialOutPumpStop( void ); +static void setDialOutPumpDirection( MOTOR_DIR_T dir ); + +static void publishDialOutFlowData( void ); + +//static void checkDialOutPumpDirection( void ); +//static void checkDialOutPumpMCCurrent( void ); + +static DATA_GET_PROTOTYPE( U32, getPublishDialOutDataInterval ); + +/************************************************************************* + * @brief + * The initDialOutFlow function initializes the DialOutFlow module. + * @details + * Inputs : none + * Outputs : DialOutFlow module initialized. + * @param none + * @return none + *************************************************************************/ +void initDialOutFlow( void ) +{ + U32 i; + + stopDialOutPump(); + setDialOutPumpDirection( MOTOR_DIR_FORWARD ); + + // initialize load cell weights + for ( i = 0; i < NUM_OF_LOAD_CELLS; i++ ) + { + loadCellWeightInGrams[ i ].data = 0.0; + } + + // initialize broadcast data + dialOutBroadCastVariables.refUFVolMl = 0.0; + dialOutBroadCastVariables.measUFVolMl = 0.0; + dialOutBroadCastVariables.measRotSpdRPM = 0.0; + dialOutBroadCastVariables.measSpdRPM = 0.0; + dialOutBroadCastVariables.measMCSpdRPM = 0.0; + dialOutBroadCastVariables.measMCCurrmA = 0.0; + dialOutBroadCastVariables.setPWMpct = 0.0; + + // initialize dialysate outlet flow PI controller + initializePIController( PI_CONTROLLER_ID_ULTRAFILTRATION, MIN_DIAL_OUT_PUMP_PWM_DUTY_CYCLE, + DOP_P_COEFFICIENT, DOP_I_COEFFICIENT, + MIN_DIAL_OUT_PUMP_PWM_DUTY_CYCLE, MAX_DIAL_OUT_PUMP_PWM_DUTY_CYCLE ); +} + +/************************************************************************* + * @brief + * The setDialOutPumpTargetRate function sets a new target flow rate, pump \n + * direction, and control mode. + * @details + * Inputs : isDialOutPumpOn, dialOutPumpDirectionSet + * Outputs : targetDialOutFlowRate, dialOutPumpdirection, dialOutPumpPWMDutyCyclePct + * @param flowRate : new target dialysate outlet flow rate + * @param dir : new dialysate outlet flow direction + * @param mode : new control mode + * @return TRUE if new flow rate & dir are set, FALSE if not + *************************************************************************/ +BOOL setDialOutPumpTargetRate( U32 flowRate, MOTOR_DIR_T dir, PUMP_CONTROL_MODE_T mode ) +{ + BOOL result = FALSE; + + // direction change while pump is running is not allowed + if ( ( FALSE == isDialOutPumpOn ) || ( 0 == flowRate ) || ( dir == dialOutPumpDirectionSet ) ) + { + // verify flow rate + if ( flowRate <= MAX_DIAL_OUT_FLOW_RATE ) + { + lastGivenRate = flowRate; + dialOutPumpDirection = dir; + dialOutPumpControlMode = mode; + // set PWM duty cycle target to an estimated initial target to ramp to based on target flow rate - then we'll control to flow when ramp completed + dialOutPumpPWMDutyCyclePct = DOP_PWM_FROM_ML_PER_MIN((F32)flowRate); + + switch ( dialOutPumpState ) + { + case DIAL_OUT_PUMP_RAMPING_UP_STATE: // see if we need to reverse direction of ramp + if ( dialOutPumpPWMDutyCyclePct < dialOutPumpPWMDutyCyclePctSet ) + { + dialOutPumpState = DIAL_OUT_PUMP_RAMPING_DOWN_STATE; + } + break; + case DIAL_OUT_PUMP_RAMPING_DOWN_STATE: // see if we need to reverse direction of ramp + if ( dialOutPumpPWMDutyCyclePct > dialOutPumpPWMDutyCyclePctSet ) + { + dialOutPumpState = DIAL_OUT_PUMP_RAMPING_UP_STATE; + } + break; + case DIAL_OUT_PUMP_CONTROL_TO_TARGET_STATE: // start ramp to new target in appropriate direction + if ( dialOutPumpPWMDutyCyclePctSet > dialOutPumpPWMDutyCyclePct ) + { + dialOutPumpState = DIAL_OUT_PUMP_RAMPING_DOWN_STATE; + } + else + { + dialOutPumpState = DIAL_OUT_PUMP_RAMPING_UP_STATE; + } + break; + default: + // ok - not all states need to be handled here + break; + } + result = TRUE; + } + else // requested flow rate too high + { + // TODO - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_DIAL_OUT_FLOW_SET_TOO_HIGH, flowRate ) + } + } + + return result; +} + +/************************************************************************* + * @brief + * The setDialOutUFVolumes function sets the ultrafiltration reference and \n + * measured total volumes (in mL). + * @details + * Inputs : none + * Outputs : referenceUFVolumeInMl and totalMeasuredUFVolumeInMl + * @param refVol : New ultrafiltration reference volume (in mL). + * @param totVol : New ultrafiltration total volume (in mL). + * @return none + *************************************************************************/ +void setDialOutUFVolumes( F32 refVol, F32 totVol ) +{ + referenceUFVolumeInMl.data = refVol; + totalMeasuredUFVolumeInMl.data = totVol; +} + +/************************************************************************* + * @brief + * The signalDialOutPumpHardStop function stops the dialysate outlet pump \n + * immediately. + * @details + * Inputs : none + * Outputs : Dialysate outlet pump stopped, set point reset, state changed to off + * @param none + * @return none + *************************************************************************/ +void signalDialOutPumpHardStop( void ) +{ + lastGivenRate = 0; + stopDialOutPump(); + dialOutPumpState = DIAL_OUT_PUMP_OFF_STATE; + dialOutPumpPWMDutyCyclePct = 0.0; + dopControlTimerCounter = 0; + resetPIController( PI_CONTROLLER_ID_ULTRAFILTRATION, MIN_DIAL_OUT_PUMP_PWM_DUTY_CYCLE ); +} + +/************************************************************************* + * @brief + * The setDialOutUFVolumes function sets the ultrafiltration reference and \n + * measured total volumes (in mL). + * @details + * Inputs : none + * Outputs : loadCellWeightInGrams[] + * @param res1Primary : New weight from primary load cell of reservoir 1. + * @param res1Backup : New weight from backup load cell of reservoir 1. + * @param res2Primary : New weight from primary load cell of reservoir 2. + * @param res2Backup : New weight from backup load cell of reservoir 2. + * @return none + *************************************************************************/ +void setNewLoadCellReadings( F32 res1Primary, F32 res1Backup, F32 res2Primary, F32 res2Backup ) +{ + loadCellWeightInGrams[ LOAD_CELL_RESERVOIR_1_PRIMARY ].data = res1Primary; + loadCellWeightInGrams[ LOAD_CELL_RESERVOIR_1_BACKUP ].data = res1Backup; + loadCellWeightInGrams[ LOAD_CELL_RESERVOIR_2_PRIMARY ].data = res2Primary; + loadCellWeightInGrams[ LOAD_CELL_RESERVOIR_2_BACKUP ].data = res2Backup; +} + +/************************************************************************* + * @brief execDialOutFlowMonitor + * The execDialOutFlowMonitor function executes the dialout vol monitor. + * @details + * Inputs : none + * Outputs : measuredDialOutFlowRate, dialOutPumpMCSpeedRPM, dialOutPumpMCCurrentmA + * @param none + * @return none + *************************************************************************/ +void execDialOutFlowMonitor( void ) +{ + U16 bpRPM = getIntADCReading( INT_ADC_DIAL_OUT_PUMP_SPEED ); + U16 bpmA = getIntADCReading( INT_ADC_DIAL_OUT_PUMP_MOTOR_CURRENT ); + + dialOutPumpMCSpeedRPM.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpRPM)) * DOP_SPEED_ADC_TO_RPM_FACTOR; + dialOutPumpMCCurrentmA.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpmA)) * DOP_CURRENT_ADC_TO_MA_FACTOR; + + // TODO - checks + + publishDialOutFlowData(); +} + +/************************************************************************* + * @brief execDialOutFlowController + * The execDialOutFlowController function executes the dialout vol controller. + * @details + * Inputs : dialOutPumpState + * Outputs : dialOutPumpState + * @param none + * @return none + *************************************************************************/ +void execDialOutFlowController( void ) +{ + switch ( dialOutPumpState ) + { + case DIAL_OUT_PUMP_OFF_STATE: + dialOutPumpState = handleDialOutPumpOffState(); + break; + + case DIAL_OUT_PUMP_RAMPING_UP_STATE: + dialOutPumpState = handleDialOutPumpRampingUpState(); + break; + + case DIAL_OUT_PUMP_RAMPING_DOWN_STATE: + dialOutPumpState = handleDialOutPumpRampingDownState(); + break; + + case DIAL_OUT_PUMP_CONTROL_TO_TARGET_STATE: + dialOutPumpState = handleDialOutPumpControlToTargetState(); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_DIAL_OUT_FLOW_INVALID_DIAL_OUT_PUMP_STATE, dialOutPumpState ); + break; + } +} + +/************************************************************************* + * @brief handleDialOutPumpOffState + * The handleDialOutPumpOffState function handles the dialOut pump off state \n + * of the dialOut pump controller state machine. + * @details + * Inputs : targetDialOutFlowRate, dialOutPumpDirection + * Outputs : dialOutPumpPWMDutyCyclePctSet, dialOutPumpDirectionSet, isDialOutPumpOn + * @param none + * @return next state + *************************************************************************/ +static DIAL_OUT_PUMP_STATE_T handleDialOutPumpOffState( void ) +{ + DIAL_OUT_PUMP_STATE_T result = DIAL_OUT_PUMP_OFF_STATE; + + // if we've been given a flow rate, setup ramp up and transition to ramp up state + if ( lastGivenRate > 0 ) + { + // set initial PWM duty cycle + dialOutPumpPWMDutyCyclePctSet = DOP_PWM_ZERO_OFFSET + MAX_DIAL_OUT_PUMP_PWM_STEP_CHANGE; + setDialOutPumpControlSignalPWM( dialOutPumpPWMDutyCyclePctSet ); + // allow dialOut pump to run in requested direction + setDialOutPumpDirection( dialOutPumpDirection ); + releaseDialOutPumpStop(); + isDialOutPumpOn = TRUE; + result = DIAL_OUT_PUMP_RAMPING_UP_STATE; + } + + return result; +} + +/************************************************************************* + * @brief handleDialOutPumpRampingUpState + * The handleDialOutPumpRampingUpState function handles the ramp up state \n + * of the dialOut pump controller state machine. + * @details + * Inputs : dialOutPumpPWMDutyCyclePctSet + * Outputs : dialOutPumpPWMDutyCyclePctSet + * @param none + * @return next state + *************************************************************************/ +static DIAL_OUT_PUMP_STATE_T handleDialOutPumpRampingUpState( void ) +{ + DIAL_OUT_PUMP_STATE_T result = DIAL_OUT_PUMP_RAMPING_UP_STATE; + + // have we been asked to stop the dialOut pump? + if ( dialOutPumpPWMDutyCyclePct < NEARLY_ZERO ) + { + // start ramp down to stop + dialOutPumpPWMDutyCyclePctSet -= MAX_DIAL_OUT_PUMP_PWM_STEP_CHANGE; + setDialOutPumpControlSignalPWM( dialOutPumpPWMDutyCyclePctSet ); + result = DIAL_OUT_PUMP_RAMPING_DOWN_STATE; + } + // have we reached end of ramp up? + else if ( dialOutPumpPWMDutyCyclePctSet >= dialOutPumpPWMDutyCyclePct ) + { + resetPIController( PI_CONTROLLER_ID_ULTRAFILTRATION, dialOutPumpPWMDutyCyclePctSet ); + dialOutPumpControlModeSet = dialOutPumpControlMode; + // if open loop mode, set PWM to requested duty cycle where it will stay during control state + if ( dialOutPumpControlModeSet == PUMP_CONTROL_MODE_OPEN_LOOP ) + { + dialOutPumpPWMDutyCyclePctSet = dialOutPumpPWMDutyCyclePct; + setDialOutPumpControlSignalPWM( dialOutPumpPWMDutyCyclePct ); + } + result = DIAL_OUT_PUMP_CONTROL_TO_TARGET_STATE; + } + // continue ramp up + else + { + dialOutPumpPWMDutyCyclePctSet += MAX_DIAL_OUT_PUMP_PWM_STEP_CHANGE; + setDialOutPumpControlSignalPWM( dialOutPumpPWMDutyCyclePctSet ); + } + + return result; +} + +/************************************************************************* + * @brief handleDialOutPumpRampingDownState + * The handleDialOutPumpRampingDownState function handles the ramp down state \n + * of the dialOut pump controller state machine. + * @details + * Inputs : dialOutPumpPWMDutyCyclePctSet + * Outputs : dialOutPumpPWMDutyCyclePctSet + * @param none + * @return next state + *************************************************************************/ +static DIAL_OUT_PUMP_STATE_T handleDialOutPumpRampingDownState( void ) +{ + DIAL_OUT_PUMP_STATE_T result = DIAL_OUT_PUMP_RAMPING_DOWN_STATE; + + // have we essentially reached zero speed + if ( dialOutPumpPWMDutyCyclePctSet < (MAX_DIAL_OUT_PUMP_PWM_STEP_CHANGE + DOP_PWM_ZERO_OFFSET) ) + { + stopDialOutPump(); + result = DIAL_OUT_PUMP_OFF_STATE; + } + // have we reached end of ramp down? + else if ( dialOutPumpPWMDutyCyclePctSet <= dialOutPumpPWMDutyCyclePct ) + { + resetPIController( PI_CONTROLLER_ID_ULTRAFILTRATION, dialOutPumpPWMDutyCyclePctSet ); + dialOutPumpControlModeSet = dialOutPumpControlMode; + // if open loop mode, set PWM to requested duty cycle where it will stay during control state + if ( dialOutPumpControlModeSet == PUMP_CONTROL_MODE_OPEN_LOOP ) + { + dialOutPumpPWMDutyCyclePctSet = dialOutPumpPWMDutyCyclePct; + setDialOutPumpControlSignalPWM( dialOutPumpPWMDutyCyclePct ); + } + result = DIAL_OUT_PUMP_CONTROL_TO_TARGET_STATE; + } + // continue ramp down + else + { + dialOutPumpPWMDutyCyclePctSet -= MAX_DIAL_OUT_PUMP_PWM_STEP_CHANGE; + setDialOutPumpControlSignalPWM( dialOutPumpPWMDutyCyclePctSet ); + } + + return result; +} + +/************************************************************************* + * @brief handleDialOutPumpControlToTargetState + * The handleDialOutPumpControlToTargetState function handles the "control to \n + * target" state of the dialOut pump controller state machine. + * @details + * Inputs : none + * Outputs : dialOutPumpState + * @param none + * @return next state + *************************************************************************/ +static DIAL_OUT_PUMP_STATE_T handleDialOutPumpControlToTargetState( void ) +{ + DIAL_OUT_PUMP_STATE_T result = DIAL_OUT_PUMP_CONTROL_TO_TARGET_STATE; + + // control at set interval + if ( ++dopControlTimerCounter >= DOP_CONTROL_INTERVAL ) + { + if ( dialOutPumpControlModeSet == PUMP_CONTROL_MODE_CLOSED_LOOP ) + { + F32 refVol = getTotalTargetDialOutUFVolumeInMl(); + F32 totVol = getTotalMeasuredUFVolumeInMl(); + F32 newPWM; + + newPWM = runPIController( PI_CONTROLLER_ID_ULTRAFILTRATION, refVol, totVol ); + dialOutPumpPWMDutyCyclePctSet = newPWM; + setDialOutPumpControlSignalPWM( newPWM ); + } + dopControlTimerCounter = 0; + } + + return result; +} + +/************************************************************************* + * @brief + * The setDialOutPumpControlSignalPWM function set the PWM of the dialysate \n + * outlet pump. + * + * @param newPWM a fraction of between 0.0 and 1.0. + * @return none + *************************************************************************/ +static void setDialOutPumpControlSignalPWM( F32 newPWM ) +{ + etpwmSetCmpA( etpwmREG3, (U16)( FLOAT_TO_INT_WITH_ROUND( newPWM * (F32)( etpwmREG3->TBPRD ) ) ) ); +} + +/************************************************************************* + * @brief stopDialOutPump + * The stopDialOutPump function sets the dialout flow stop signal and PWM + * duty cycle to 0.0. + * @details + * Inputs : none + * Outputs : dialOut pump stop signal activated, PWM duty cycle zeroed + * @param none + * @return none + *************************************************************************/ +static void stopDialOutPump( void ) +{ + setDialOutPumpControlSignalPWM( 0 ); + SET_DOP_STOP(); + isDialOutPumpOn = FALSE; +} + +/************************************************************************* + * @brief + * The releaseDialOutPumpStop function clears the dialysate outlet pump stop signal. + * @details + * Inputs : none + * Outputs : dialysate outlet pump stop signal + * @param none + * @return none + *************************************************************************/ +static void releaseDialOutPumpStop( void ) +{ + CLR_DOP_STOP(); +} + +/************************************************************************* + * @brief setDialOutPumpDirection + * The setDialOutPumpDirection function sets the set dialIn pump direction to \n + * the given direction. + * @details + * Inputs : dialOutPumpState + * Outputs : dialOutPumpState + * @param dir : dialIn pump direction to set + * @return none + *************************************************************************/ +static void setDialOutPumpDirection( MOTOR_DIR_T dir ) +{ + switch ( dir ) + { + case MOTOR_DIR_FORWARD: + dialOutPumpDirectionSet = dir; + SET_DOP_DIR(); + break; + + case MOTOR_DIR_REVERSE: + dialOutPumpDirectionSet = dir; + CLR_DOP_DIR(); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_DIAL_OUT_FLOW_INVALID_DIAL_OUT_PUMP_DIRECTION, dir ); + break; + } +} + +/************************************************************************* + * @brief publishDialOutFlowData + * The publishDialOutFlowData function publishes dialout vol data at the set \n + * interval. + * @details + * Inputs : target flow rate, measured flow rate, measured MC speed, \n + * measured MC current + * Outputs : dialout vol data is published to CAN bus. + * @param none + * @return none + *************************************************************************/ +static void publishDialOutFlowData( void ) +{ + // publish dialysate outlet pump and UF volume data on interval + if ( ++dialOutFlowDataPublicationTimerCounter > DIAL_OUT_DATA_PUB_INTERVAL ) + { + dialOutBroadCastVariables.refUFVolMl = getTotalTargetDialOutUFVolumeInMl(); + dialOutBroadCastVariables.measUFVolMl = getTotalMeasuredUFVolumeInMl(); + dialOutBroadCastVariables.measRotSpdRPM = getMeasuredDialOutPumpRotorSpeed(); + dialOutBroadCastVariables.measSpdRPM = getMeasuredDialOutPumpSpeed(); + dialOutBroadCastVariables.measMCSpdRPM = getMeasuredDialOutPumpMCSpeed(); + dialOutBroadCastVariables.measMCCurrmA = getMeasuredDialOutPumpMCCurrent(); + dialOutBroadCastVariables.setPWMpct = dialOutPumpPWMDutyCyclePctSet * FRACTION_TO_PERCENT_FACTOR; + + broadcastDialOutFlowData( &dialOutBroadCastVariables); + dialOutFlowDataPublicationTimerCounter = 0; + } +} + +/************************************************************************* + * GET SUPPORT FUNCTIONS + *************************************************************************/ + +/************************************************************************* + * @brief + * The getPublishDialOutFlowDataInterval function gets the dialysate out flow \n + * data publication interval. + * @details + * Inputs : DialOutDataPublishInterval + * Outputs : none + * @param none + * @return the current dialysate out flow data publication interval (in ms). + *************************************************************************/ +DATA_GET( U32, getPublishDialOutFlowDataInterval, DialOutDataPublishInterval ) + +/************************************************************************* + * @brief + * The getLoadCellWeightInGrams function gets the load cell weight. + * @details + * Inputs : loadCellWeightInGrams + * Outputs : none + * @param loadCellID : ID of load cell to get + * @return the current load cell weight in grams + *************************************************************************/ +DATA_ARRAY_GET( F32, getLoadCellWeightInGrams, loadCellID, NUM_OF_LOAD_CELLS - 1, loadCellWeightInGrams, 0.0 ) + +/************************************************************************* + * @brief + * The getTotalTargetDialOutUFVolumeInMl function gets the target UF volume. + * @details + * Inputs : referenceUFVolumeInMl + * Outputs : none + * @param none + * @return the current target UF volume in mL. + *************************************************************************/ +DATA_GET( F32, getTotalTargetDialOutUFVolumeInMl, referenceUFVolumeInMl ) + +/************************************************************************* + * @brief + * The getTotalMeasuredUFVolumeInMl function gets the measured UF volume. + * @details + * Inputs : totalMeasuredUFVolumeInMl + * Outputs : none + * @param none + * @return the current UF volume (in mL). + *************************************************************************/ +DATA_GET( F32, getTotalMeasuredUFVolumeInMl, totalMeasuredUFVolumeInMl ) + +/************************************************************************* + * @brief + * The getMeasuredDialOutPumpRotorSpeed function gets the measured dialysate \n + * outlet pump rotor speed. + * @details + * Inputs : dialOutPumpRotorSpeedRPM + * Outputs : none + * @param none + * @return the current dialysate outlet pump rotor speed (in RPM). + *************************************************************************/ +DATA_GET( F32, getMeasuredDialOutPumpRotorSpeed, dialOutPumpRotorSpeedRPM ) + +/************************************************************************* + * @brief + * The getMeasuredDialOutPumpSpeed function gets the measured dialysate outlet \n + * pump motor speed. + * @details + * Inputs : dialOutPumpSpeedRPM + * Outputs : none + * @param none + * @return the current dialysate outlet pump motor speed (in RPM). + *************************************************************************/ +DATA_GET( F32, getMeasuredDialOutPumpSpeed, dialOutPumpSpeedRPM ) + +/************************************************************************* + * @brief + * The getMeasuredDialOutPumpMCSpeed function gets the measured dialOut pump \n + * speed. + * @details + * Inputs : dialOutPumpMCSpeedRPM + * Outputs : none + * @param none + * @return the current dialOut pump speed (in RPM). + *************************************************************************/ +DATA_GET( F32, getMeasuredDialOutPumpMCSpeed, dialOutPumpMCSpeedRPM ) + +/************************************************************************* + * @brief + * The getMeasuredDialOutPumpMCCurrent function gets the measured dialOut pump \n + * current. + * @details + * Inputs : dialOutPumpMCCurrentmA + * Outputs : none + * @param none + * @return the current dialOut pump current (in mA). + *************************************************************************/ +DATA_GET( F32, getMeasuredDialOutPumpMCCurrent, dialOutPumpMCCurrentmA) + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/************************************************************************* + * @brief + * The testSetDialOutPumpAndLoadCellDataPublishIntervalOverride function overrides the \n + * dialout vol data publish interval. + * @details + * Inputs : none + * Outputs : DialOutDataPublishInterval + * @param value : override dialout vol data publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetDialOutPumpAndLoadCellDataPublishIntervalOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + U32 intvl = value / TASK_PRIORITY_INTERVAL; + + result = TRUE; + DialOutDataPublishInterval.ovData = intvl; + DialOutDataPublishInterval.override = OVERRIDE_KEY; + } + + return result; +} + +/************************************************************************* + * @brief + * The testResetDialOutPumpAndLoadCellDataPublishIntervalOverride function resets the override \n + * of the dialout vol data publish interval. + * @details + * Inputs : none + * Outputs : DialOutDataPublishInterval + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetDialOutPumpAndLoadCellDataPublishIntervalOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + DialOutDataPublishInterval.override = OVERRIDE_RESET; + DialOutDataPublishInterval.ovData = DialOutDataPublishInterval.ovInitData; + } + + return result; +} + +/************************************************************************* + * @brief + * The testSetDialOutUFRefVolumeOverride function overrides the target \n + * dialout vol rate. \n + * The testResetDialOutUFRefVolumeOverride function resets the override of the \n + * target dialout vol rate. + * @details + * Inputs : none + * Outputs : TotalTargetDialOutVolInMl + * @param value : override target dialout vol rate (in mL/min) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetDialOutUFRefVolumeOverride, testResetDialOutUFRefVolumeOverride, referenceUFVolumeInMl ) + +/************************************************************************* + * @brief + * The testSetDialOutUFTotVolumeOverride function overrides the measured \n + * dialout vol rate. \n + * The testResetDialOutUFTotVolumeOverride function resets the override of the \n + * measured dialout vol rate. + * @details + * Inputs : none + * Outputs : totalMeasuredUFVolumeInMl + * @param value : override measured dialout vol rate (in mL/min) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetDialOutUFTotVolumeOverride, testResetDialOutUFTotVolumeOverride, totalMeasuredUFVolumeInMl ) + +/************************************************************************* + * @brief testSetMeasuredDialOutPumpRotorSpeedOverride and testResetMeasuredDialOutPumpRotorSpeedOverride + * The testSetMeasuredDialOutPumpRotorSpeedOverride function overrides the measured \n + * dialIn pump rotor speed. \n + * The testResetMeasuredDialOutPumpRotorSpeedOverride function resets the override of the \n + * measured dialIn pump rotor speed. + * @details + * Inputs : none + * Outputs : DialOutPumpRotorSpeedRPM + * @param value : override measured dialIn pump rotor speed (in RPM) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetMeasuredDialOutPumpRotorSpeedOverride, testResetMeasuredDialOutPumpRotorSpeedOverride, dialOutPumpRotorSpeedRPM ) + +/************************************************************************* + * @brief testSetMeasuredDialOutPumpSpeedOverride and testResetMeasuredDialOutPumpSpeedOverride + * The testSetMeasuredDialOutPumpSpeedOverride function overrides the measured \n + * dialIn pump motor speed. \n + * The testResetMeasuredDialOutPumpSpeedOverride function resets the override of the \n + * measured dialIn pump motor speed. + * @details + * Inputs : none + * Outputs : DialOutPumpSpeedRPM + * @param value : override measured dialIn pump motor speed (in RPM) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetMeasuredDialOutPumpSpeedOverride, testResetMeasuredDialOutPumpSpeedOverride, dialOutPumpSpeedRPM ) + +/************************************************************************* + * @brief testSetMeasuredDialOutPumpMCSpeedOverride and testResetMeasuredDialOutPumpMCSpeedOverride + * The testSetMeasuredDialOutPumpMCSpeedOverride function overrides the measured \n + * dialIn pump motor speed. \n + * The testResetMeasuredDialOutPumpMCSpeedOverride function resets the override of the \n + * measured dialIn pump motor speed. + * @details + * Inputs : none + * Outputs : dialOutPumpMCSpeedRPM + * @param value : override measured dialIn pump speed (in RPM) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetMeasuredDialOutPumpMCSpeedOverride, testResetMeasuredDialOutPumpMCSpeedOverride, dialOutPumpMCSpeedRPM ) + +/************************************************************************* + * @brief testSetMeasuredDialOutPumpMCCurrentOverride and testResetMeasuredDialOutPumpMCCurrentOverride + * The testSetMeasuredDialOutPumpMCCurrentOverride function overrides the measured \n + * dialIn pump motor current. \n + * The testResetMeasuredDialOutPumpMCCurrentOverride function resets the override of the \n + * measured dialIn pump motor current. + * @details + * Inputs : none + * Outputs : dialOutPumpMCCurrentmA + * @param value : override measured dialIn pump current (in mA) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetMeasuredDialOutPumpMCCurrentOverride, testResetMeasuredDialOutPumpMCCurrentOverride, dialOutPumpMCCurrentmA ) + +/************************************************************************* + * @brief + * The testSetDialOutLoadCellWeightOverride function overrides the value of the \n + * load cell sensor with a given weight (in grams). \n + * The testResetDialOutLoadCellWeightOverride function resets the override of the \n + * load cell sensor. + * @details + * Inputs : none + * Outputs : loadCellWeightInGrams[] + * @param sensor : ID of load cell sensor to override weight for + * @param value : override weight (in grams) for the given sensor + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_ARRAY_OVERRIDE_FUNC( F32, testSetDialOutLoadCellWeightOverride, testResetDialOutLoadCellWeightOverride, loadCellWeightInGrams, sensor, NUM_OF_LOAD_CELLS-1 ) + + Index: firmware/App/Controllers/DialOutFlow.h =================================================================== diff -u --- firmware/App/Controllers/DialOutFlow.h (revision 0) +++ firmware/App/Controllers/DialOutFlow.h (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -0,0 +1,87 @@ +/************************************************************************** + * + * Copyright (c) 2019-2020 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 DialOutFlow.h + * + * @date 7-Jan-2019 + * @author L. Baloa + * + * @brief DialOutFlow header file. + * + **************************************************************************/ + +#ifndef __DIALYSATE_OUT_FLOW_H__ +#define __DIALYSATE_OUT_FLOW_H__ + +#include "Common.h" + +// ********** public definitions ********** + +typedef enum Load_Cells +{ + LOAD_CELL_RESERVOIR_1_PRIMARY = 0, + LOAD_CELL_RESERVOIR_1_BACKUP, + LOAD_CELL_RESERVOIR_2_PRIMARY, + LOAD_CELL_RESERVOIR_2_BACKUP, + NUM_OF_LOAD_CELLS +} LOAD_CELL_T; + +#pragma pack(push, 1) +typedef struct DialOutBroadcastingRecord +{ + F32 refUFVolMl; + F32 measUFVolMl; + F32 measRotSpdRPM; + F32 measSpdRPM; + F32 measMCSpdRPM; + F32 measMCCurrmA; + F32 setPWMpct; +} DIAL_OUT_FLOW_DATA_T; +#pragma pack(pop) + +// ********** public function prototypes ********** + +void initDialOutFlow( void ); +void execDialOutFlowMonitor( void ); +void execDialOutFlowController( void ); + +BOOL setDialOutPumpTargetRate( U32 flowRate, MOTOR_DIR_T dir, PUMP_CONTROL_MODE_T mode ); +void setDialOutUFVolumes( F32 refVol, F32 totVol ); + +void signalDialOutPumpHardStop( void ); + +void setNewLoadCellReadings( F32 res1Primary, F32 res1Backup, F32 res2Primary, F32 res2Backup ); + +// SELF_TEST_STATUS_T execDialOutFlowTest( void ); // TODO - implement later + +DATA_GET_PROTOTYPE( F32, getTotalTargetDialOutUFVolumeInMl ); +DATA_GET_PROTOTYPE( F32, getTotalMeasuredUFVolumeInMl); +DATA_GET_PROTOTYPE( F32, getMeasuredDialOutPumpMCSpeed ); +DATA_GET_PROTOTYPE( F32, getMeasuredDialOutPumpMCCurrent ); +DATA_ARRAY_GET_PROTOTYPE( F32, getLoadCellWeightInGrams, loadCellID ); +DATA_GET_PROTOTYPE( F32, getMeasuredDialOutPumpRotorSpeed ); +DATA_GET_PROTOTYPE( F32, getMeasuredDialOutPumpSpeed ); + +BOOL testSetDialOutPumpAndLoadCellDataPublishIntervalOverride( U32 value ); +BOOL testResetDialOutPumpAndLoadCellDataPublishIntervalOverride( void ); +BOOL testSetDialOutUFRefVolumeOverride( F32 value ); +BOOL testResetDialOutUFRefVolumeOverride( void ); +BOOL testSetDialOutUFTotVolumeOverride( F32 value ); +BOOL testResetDialOutUFTotVolumeOverride( void ); +BOOL testSetMeasuredDialOutPumpRotorSpeedOverride( F32 value ); +BOOL testResetMeasuredDialOutPumpRotorSpeedOverride( void ); +BOOL testSetMeasuredDialOutPumpSpeedOverride( F32 value ); +BOOL testResetMeasuredDialOutPumpSpeedOverride( void ); +BOOL testSetMeasuredDialOutPumpMCSpeedOverride( F32 value ); +BOOL testResetMeasuredDialOutPumpMCSpeedOverride( void ); +BOOL testSetMeasuredDialOutPumpMCCurrentOverride( F32 value ); +BOOL testResetMeasuredDialOutPumpMCCurrentOverride( void ); +BOOL testSetDialOutLoadCellWeightOverride( U32 sensor, F32 value ); +BOOL testResetDialOutLoadCellWeightOverride( U32 sensor ); + +#endif + Index: firmware/App/Drivers/InternalADC.c =================================================================== diff -u -rf7e3018ec6ab762fe08efb42b21fb2ca970174b0 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision f7e3018ec6ab762fe08efb42b21fb2ca970174b0) +++ firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -111,7 +111,7 @@ *************************************************************************/ void adcNotification( adcBASE_t *adc, uint32 group ) { - if ( adcGROUP1 == group ) + if ( adcGROUP1 == group ) { adcRawReadingsCount = adcGetData( adcREG1, adcGROUP1, adcRawReadings ); } Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r07a5add2dff254f7be3699e4efac2b99d3554847 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 07a5add2dff254f7be3699e4efac2b99d3554847) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -20,6 +20,14 @@ // ********** private data ********** +typedef enum UF_States +{ + UF_PAUSED_STATE = 0, + UF_RUNNING_STATE, + UF_COMPLETED_OR_OFF_STATE, + NUM_OF_UF_STATES +} UF_STATE_T; + // ********** private function prototypes ********** /************************************************************************* Index: firmware/App/Modes/ModeOpParams.c =================================================================== diff -u -rf7e3018ec6ab762fe08efb42b21fb2ca970174b0 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Modes/ModeOpParams.c (.../ModeOpParams.c) (revision f7e3018ec6ab762fe08efb42b21fb2ca970174b0) +++ firmware/App/Modes/ModeOpParams.c (.../ModeOpParams.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -17,6 +17,8 @@ #include "Common.h" #include "AlarmLamp.h" #include "BloodFlow.h" +#include "DialInFlow.h" +#include "DialOutFlow.h" #include "Buttons.h" #include "OperationModes.h" #include "ModeOpParams.h" @@ -55,7 +57,9 @@ void transitionToOpParamsMode( void ) { // temporary test code - alarm lamp fault - setBloodPumpTargetFlowRate( 300, MOTOR_DIR_FORWARD ); + setBloodPumpTargetFlowRate( 300, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( 300, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialOutPumpTargetRate( 325, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); #ifdef RM46_EVAL_BOARD_TARGET start = getMSTimerCount(); #endif Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -rf7e3018ec6ab762fe08efb42b21fb2ca970174b0 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision f7e3018ec6ab762fe08efb42b21fb2ca970174b0) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -17,6 +17,8 @@ #include "Common.h" #include "AlarmLamp.h" #include "BloodFlow.h" +#include "DialInFlow.h" +#include "DialOutFlow.h" #include "Buttons.h" #include "OperationModes.h" #include "ModePostTreat.h" @@ -55,7 +57,9 @@ void transitionToPostTreatmentMode( void ) { // temporary test code - alarm lamp high alarm - setBloodPumpTargetFlowRate( 100, MOTOR_DIR_REVERSE ); + setBloodPumpTargetFlowRate( 100, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( 100, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialOutPumpTargetRate( 100, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); #ifdef RM46_EVAL_BOARD_TARGET start = getMSTimerCount(); #endif Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rf7e3018ec6ab762fe08efb42b21fb2ca970174b0 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision f7e3018ec6ab762fe08efb42b21fb2ca970174b0) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -17,6 +17,8 @@ #include "Common.h" #include "AlarmLamp.h" #include "BloodFlow.h" +#include "DialInFlow.h" +#include "DialOutFlow.h" #include "Buttons.h" #include "OperationModes.h" #include "ModePreTreat.h" @@ -55,7 +57,9 @@ void transitionToPreTreatmentMode( void ) { // temporary test code - alarm lamp low alarm - setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD ); + setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); #ifdef RM46_EVAL_BOARD_TARGET start = getMSTimerCount(); #endif Index: firmware/App/Modes/ModePrescription.c =================================================================== diff -u -rf7e3018ec6ab762fe08efb42b21fb2ca970174b0 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Modes/ModePrescription.c (.../ModePrescription.c) (revision f7e3018ec6ab762fe08efb42b21fb2ca970174b0) +++ firmware/App/Modes/ModePrescription.c (.../ModePrescription.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -17,6 +17,8 @@ #include "Common.h" #include "AlarmLamp.h" #include "BloodFlow.h" +#include "DialInFlow.h" +#include "DialOutFlow.h" #include "Buttons.h" #include "OperationModes.h" #include "ModePrescription.h" @@ -55,7 +57,9 @@ void transitionToPrescriptionMode( void ) { // temporary test code - alarm lamp Off - setBloodPumpTargetFlowRate( 500, MOTOR_DIR_FORWARD ); + setBloodPumpTargetFlowRate( 300, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( 400, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialOutPumpTargetRate( 425, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); #ifdef RM46_EVAL_BOARD_TARGET // TODO - temporary test code for eval board start = getMSTimerCount(); Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rf7e3018ec6ab762fe08efb42b21fb2ca970174b0 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision f7e3018ec6ab762fe08efb42b21fb2ca970174b0) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -17,6 +17,8 @@ #include "Common.h" #include "AlarmLamp.h" #include "BloodFlow.h" +#include "DialInFlow.h" +#include "DialOutFlow.h" #include "Buttons.h" #include "OperationModes.h" #include "ModeStandby.h" @@ -54,7 +56,9 @@ void transitionToStandbyMode( void ) { // temporary test code - alarm lamp OK - setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD ); + setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); #ifdef RM46_EVAL_BOARD_TARGET start = getMSTimerCount(); #endif Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rf7e3018ec6ab762fe08efb42b21fb2ca970174b0 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision f7e3018ec6ab762fe08efb42b21fb2ca970174b0) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -17,6 +17,8 @@ #include "Common.h" #include "AlarmLamp.h" #include "BloodFlow.h" +#include "DialInFlow.h" +#include "DialOutFlow.h" #include "Buttons.h" #include "OperationModes.h" #include "ModeTreatment.h" @@ -54,7 +56,9 @@ void transitionToTreatmentMode( void ) { // temporary test code - alarm lamp medium alarm - setBloodPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE ); + setBloodPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialOutPumpTargetRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); #ifdef RM46_EVAL_BOARD_TARGET // TODO - temporary test code for eval board start = getMSTimerCount(); Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r60a95cb6e1325abd179b4a01d83b8aabe20ccda5 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 60a95cb6e1325abd179b4a01d83b8aabe20ccda5) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -570,7 +570,7 @@ // does active alarm escalate? if ( ALARM_ID_NO_ALARM != alarmTable[ a ].alarmEscalatesTo ) { - U32 secsRemaining = (S32)alarmTable[ a ].alarmEscalatesAfter - ( (S32)calcTimeSince( getAlarmStartTime( a ) / MS_PER_SECOND ) ); + U32 secsRemaining = (S32)alarmTable[ a ].alarmEscalatesAfter - ( (S32)calcTimeSince( getAlarmStartTime( a ) ) / MS_PER_SECOND ); // time to escalate? if ( secsRemaining <= 0 ) Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r60a95cb6e1325abd179b4a01d83b8aabe20ccda5 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 60a95cb6e1325abd179b4a01d83b8aabe20ccda5) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -162,6 +162,8 @@ SW_FAULT_ID_MSG_PENDING_ACK_LIST_FULL, // 50 SW_FAULT_ID_PI_CTRL_INVALID_CONTROLLER, SW_FAULT_ID_PI_CTRL_INVALID_SIGNAL, + SW_FAULT_ID_DIAL_OUT_INVALID_MEASURED_SIGNAL_STATE, + SW_FAULT_ID_DIAL_OUT_SET_RX_OUT_OF_RANGE, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/FIRFilters.c =================================================================== diff -u --- firmware/App/Services/FIRFilters.c (revision 0) +++ firmware/App/Services/FIRFilters.c (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -0,0 +1,190 @@ +/************************************************************************** + * + * Copyright (c) 2019-2019 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 FIRFilters.c + * + * @date 12-Dec-2019 + * @author L. Baloa + * + * @brief Filters service module. Creates digital filters to be used in \n + * in Controllers and it provides an API to use them. + * + **************************************************************************/ + +#include "FIRFilters.h" + +// ********** private definitions ********** + +#define N_FILTER_NUM_ORDER_LOAD_CELL_WEIGHT 100 // 100 samples of INPUT + +typedef struct { + U16* inputSignal; // input signal buffer + F32* bCoeffs; // coefficient buffer + U16 N_InputSignal; // size of the signal input buffer + U16 currentIndex; // location of the latest sample + U32 inputSum; // inputSum, only used if it is a average filter + BOOL isAverageFilter; // true if all coefficient are the same +} FIR_FILTER_T; + +// ********** private data ********** + +// [[ 0. load cell fir filter ]] + +U16 LOAD_CELL_INPUT_SIGNAL_ARRAY[ N_FILTER_NUM_ORDER_LOAD_CELL_WEIGHT ]; +F32 B_COEFF_LOAD_CELL[ N_FILTER_NUM_ORDER_LOAD_CELL_WEIGHT ] = { 1.0 / ((F32) N_FILTER_NUM_ORDER_LOAD_CELL_WEIGHT) }; + +// [[ Uploading all filters ]] + +static FIR_FILTER_T firFilters[ NUM_OF_FILTERS_IDS ] = { + + { LOAD_CELL_INPUT_SIGNAL_ARRAY, B_COEFF_LOAD_CELL, // 0. Load cell filter + N_FILTER_NUM_ORDER_LOAD_CELL_WEIGHT, 0, 0, TRUE} + + }; + +// *** modular variable needed to process filter info +static FIR_FILTER_T *m_filter; + +static void loadFilterInModularVariables(FILTER_ID_T filterID); + +/************************************************************************* + * @brief loadFilterInModularVariables + * Loads filter parameters into modular variables to be processed by + * modular functions. + * + * @param filterID - ID filter number + * + * @return none + *************************************************************************/ +static void loadFilterInModularVariables(FILTER_ID_T filterID) +{ + m_filter = &firFilters[filterID]; +} + +/************************************************************************* + * @brief initializeFilter + * Initializes the filter buffer with a initial value. Do this once. + * + * @param filterID - ID filter number + * @param initialValue - unsigned integer 16 value + * + * @return none + *************************************************************************/ +void initializeFilter(FILTER_ID_T filterID, U16 initialValue) +{ + loadFilterInModularVariables(filterID); + + F32 bWeightedCoeff; + U16 i; + + // First reset input buffer + resetFilter(filterID, initialValue); + + // If this is an average filter, + // then we set the coefficient values; + + if ( TRUE == m_filter->isAverageFilter) + { + for ( i = 0; i < m_filter->N_InputSignal; i++ ) + { + if ( i == 0 ) + { + bWeightedCoeff = m_filter->bCoeffs[0]; + } + else + { + m_filter->bCoeffs[i] = bWeightedCoeff; + } + } + } +} + +/************************************************************************* + * @brief resetFilter + * Reset the filter buffer with a reset value. + * + * @param filterID - ID filter number + * @param resetValue - unsigned integer 16 value + * + * @return none + *************************************************************************/ +void resetFilter(FILTER_ID_T filterID, U16 resetValue) +{ + loadFilterInModularVariables(filterID); + U16 i; + m_filter->inputSum = resetValue * m_filter->N_InputSignal; + + for ( i = 0; i < m_filter->N_InputSignal; i++) + { + m_filter->inputSignal[i] = resetValue; + } + + m_filter->currentIndex = m_filter->N_InputSignal - 1; +} + +/************************************************************************* + * @brief setFilterInput + * Set a new input sample to the filter buffer. + * + * @param filterID - ID filter number + * @param resetValue - unsigned integer 16 value + * + * @return none + *************************************************************************/ +void setFilterInput(FILTER_ID_T filterID, U16 inputSignalSample) +{ + loadFilterInModularVariables(filterID); + + U16 currentIndex = m_filter->currentIndex; + U16 newIndex = INC_WRAP(currentIndex, 0, m_filter->N_InputSignal - 1 ); + + m_filter->inputSum -= m_filter->inputSignal[newIndex]; + m_filter->inputSum += inputSignalSample; + + m_filter->inputSignal[newIndex] = inputSignalSample; + + m_filter->currentIndex = newIndex; +} + +/************************************************************************* + * @brief setFilterInput + * Set a new input sample to the filter buffer. + * + * @param filterID - ID filter number + * @param resetValue - unsigned integer 16 value + * + * @return none + *************************************************************************/ +U16 getFilterOuput(FILTER_ID_T filterID) +{ + loadFilterInModularVariables(filterID); + + F32 output = 0; + + if( TRUE == m_filter->isAverageFilter ) + { + output= m_filter->inputSum * m_filter->bCoeffs[0]; + } + else // It is not a average filter, thus we need to add it up + { + U16 index = m_filter->currentIndex; + U16 i; + + for ( i = 0; i < m_filter->N_InputSignal; i++) + { + + output += (m_filter->bCoeffs[i]*m_filter->inputSignal[index]); + + index = DEC_WRAP( index, 0, m_filter->N_InputSignal - 1 ); + + } + + } + + return ((U16) output); +} + Index: firmware/App/Services/FIRFilters.h =================================================================== diff -u --- firmware/App/Services/FIRFilters.h (revision 0) +++ firmware/App/Services/FIRFilters.h (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -0,0 +1,35 @@ +/************************************************************************** + * + * Copyright (c) 2019-2020 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 FIRFilters.h + * + * @date 12-Dec-2019 + * @author L. Baloa + * + * @brief Header file for the FIR filters' service (FIRFilters.c). + * + **************************************************************************/ + +#ifndef __FIR_FILTERS_H__ +#define __FIR_FILTERS_H__ + +#include "Common.h" + +typedef enum FilterList +{ + FILTER_ID_LOAD_CELL_WEIGHT = 0, + NUM_OF_FILTERS_IDS +} FILTER_ID_T; + +// ********** public function prototypes ********** +void initializeFilter(FILTER_ID_T filterID, U16 initialValue); +void resetFilter(FILTER_ID_T filterID, U16 resetValue); +U16 getFilterOuput(FILTER_ID_T filterID); +void setFilterInput(FILTER_ID_T filterID, U16 inputSignalSample); + +#endif + Index: firmware/App/Services/FPGA.c =================================================================== diff -u -r07a5add2dff254f7be3699e4efac2b99d3554847 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision 07a5add2dff254f7be3699e4efac2b99d3554847) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -940,16 +940,16 @@ U16 getFPGADialInPumpOcclusion( void ) { #ifdef DEBUG_ENABLED - { - // TODO - temporary debug code - remove later - char debugOccStr[ 60 ]; - S32 dat = fpgaSensorReadings.dialysateInOcclusionData; - S32 rct = fpgaSensorReadings.dialysateInOcclusionReadCount; - S32 ect = fpgaSensorReadings.dialysateInOcclusionErrorCount; - - sprintf( debugOccStr, "Data %5d Reads %5d Errors %5d\n", dat, rct, ect ); - sendDebugData( (U08*)debugOccStr, strlen(debugOccStr) ); - } +// { +// // TODO - temporary debug code - remove later +// char debugOccStr[ 60 ]; +// S32 dat = fpgaSensorReadings.dialysateInOcclusionData; +// S32 rct = fpgaSensorReadings.dialysateInOcclusionReadCount; +// S32 ect = fpgaSensorReadings.dialysateInOcclusionErrorCount; +// +// sprintf( debugOccStr, "Data %5d Reads %5d Errors %5d\n", dat, rct, ect ); +// sendDebugData( (U08*)debugOccStr, strlen(debugOccStr) ); +// } #endif return fpgaSensorReadings.dialysateInOcclusionData; } Index: firmware/App/Services/PIControllers.c =================================================================== diff -u -r60a95cb6e1325abd179b4a01d83b8aabe20ccda5 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Services/PIControllers.c (.../PIControllers.c) (revision 60a95cb6e1325abd179b4a01d83b8aabe20ccda5) +++ firmware/App/Services/PIControllers.c (.../PIControllers.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -54,7 +54,7 @@ /// PI Controllers -- initial configurations. static PI_CONTROLLER_T piControllers[ NUM_OF_PI_CONTROLLERS_IDS ] = { // Kp Ki uMax uMin ref meas err esw esum ctrl - { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // PI_CONTROLLER_ID_LOAD_CELL + { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // PI_CONTROLLER_ID_ULTRAFILTRATION { 0.0, 0.0, 0.90, 0.10, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, // PI_CONTROLLER_ID_BLOOD_FLOW { 0.0, 0.0, 0.90, 0.10, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 } // PI_CONTROLLER_ID_DIALYSATE_FLOW }; Index: firmware/App/Services/PIControllers.h =================================================================== diff -u -r60a95cb6e1325abd179b4a01d83b8aabe20ccda5 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Services/PIControllers.h (.../PIControllers.h) (revision 60a95cb6e1325abd179b4a01d83b8aabe20ccda5) +++ firmware/App/Services/PIControllers.h (.../PIControllers.h) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -32,7 +32,7 @@ /// Enumeration of PI controllers typedef enum ControllerList { - PI_CONTROLLER_ID_LOAD_CELL = 0, ///< Load cell controller for dialysate outlet pump. + PI_CONTROLLER_ID_ULTRAFILTRATION = 0, ///< Load cell controller for dialysate outlet pump. PI_CONTROLLER_ID_BLOOD_FLOW, ///< Flow controller for blood pump. PI_CONTROLLER_ID_DIALYSATE_FLOW, ///< Flow controller for dialysate inlet pump. NUM_OF_PI_CONTROLLERS_IDS ///< # of PI controllers. Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r1c80d60fe6a95297a8a8033a3c7eade53e72779a -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -1014,6 +1014,10 @@ handleUICheckIn( message ); break; + case MSG_ID_LOAD_CELL_READINGS: + handleLoadCellReadingsFromDG( message ); + break; + case MSG_ID_TESTER_LOGIN_REQUEST: handleTesterLogInRequest( message ); break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -re85815f8334417aa2ffac8bc366d25ed72ab4e1e -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision e85815f8334417aa2ffac8bc366d25ed72ab4e1e) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -42,6 +42,7 @@ { U08 confirmed; // 1 = confirmed, 0 = rejected/timed out } OFF_BUTTON_MESSAGE_FROM_UI_PAYLOAD_T; + typedef struct { U32 alarmState; // 0 = no alarms, 1 = low priority, 2 = medium priority, 3 = high priority @@ -71,6 +72,14 @@ F32 doPumpOcclusion; } PRESSURE_OCCLUSION_DATA_T; +typedef struct +{ + F32 res1PrimaryLoadCell; + F32 res1BackupLoadCell; + F32 res2PrimaryLoadCell; + F32 res2BackupLoadCell; +} LOAD_CELL_READINGS_PAYLOAD_T; + #pragma pack(pop) // ********** private data ********** @@ -235,6 +244,34 @@ } /************************************************************************* + * @brief handleDGCheckIn + * The handleDGCheckIn function handles a check-in from the DG. + * @details + * Inputs : none + * Outputs : check in the DG with the SystemComm module. + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleDGCheckIn( MESSAGE_T *message ) +{ + checkInFromDG(); +} + +/************************************************************************* + * @brief handleUICheckIn + * The handleUICheckIn function handles a check-in from the UI. + * @details + * Inputs : none + * Outputs : check in the UI with the SystemComm module. + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleUICheckIn( MESSAGE_T *message ) +{ + checkInFromUI(); +} + +/************************************************************************* * @brief handleOffButtonConfirmMsgFromUI * The handleOffButtonConfirmMsgFromUI function handles a response to an \n * off button message to the UI. @@ -253,6 +290,24 @@ } /************************************************************************* + * @brief + * The handleLoadCellReadingsFromDG function handles a load cell readings \n + * message from the DG. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleLoadCellReadingsFromDG( MESSAGE_T *message ) +{ + LOAD_CELL_READINGS_PAYLOAD_T payload; + + memcpy( &payload, message->payload, sizeof(LOAD_CELL_READINGS_PAYLOAD_T) ); + setNewLoadCellReadings( payload.res1PrimaryLoadCell, payload.res1BackupLoadCell, payload.res2PrimaryLoadCell, payload.res2BackupLoadCell ); +} + +/************************************************************************* * @brief broadcastAlarmStatus * The broadcastAlarmStatus function constructs an alarm status msg to \n * be broadcast and queues the msg for transmit on the appropriate CAN channel. @@ -449,6 +504,35 @@ } /************************************************************************* + * @brief broadcastDialInFlowData + * The broadcastDialInFlowData function constructs a dialysate outlet flow data \n + * msg to be broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : dialysate out flow data msg constructed and queued. + * @param dialOutFlowData : Pointer to the dialysate out flow data record. + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastDialOutFlowData( DIAL_OUT_FLOW_DATA_T *dialOutFlowData ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DIALYSATE_OUT_FLOW_DATA; + msg.hdr.payloadLen = sizeof( DIAL_OUT_FLOW_DATA_T ); + + memcpy( payloadPtr, &dialOutFlowData, sizeof( DIAL_OUT_FLOW_DATA_T ) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_BROADCAST, ACK_NOT_REQUIRED ); + + return result; +} + +/************************************************************************* * @brief broadcastPresOcclData * The broadcastPresOcclData function constructs a pres/occl data msg to \n * be broadcast and queues the msg for transmit on the appropriate CAN channel. @@ -517,36 +601,8 @@ return result; } -/************************************************************************* - * @brief handleDGCheckIn - * The handleDGCheckIn function handles a check-in from the DG. - * @details - * Inputs : none - * Outputs : check in the DG with the SystemComm module. - * @param message : a pointer to the message to handle - * @return none - *************************************************************************/ -void handleDGCheckIn( MESSAGE_T *message ) -{ - checkInFromDG(); -} /************************************************************************* - * @brief handleUICheckIn - * The handleUICheckIn function handles a check-in from the UI. - * @details - * Inputs : none - * Outputs : check in the UI with the SystemComm module. - * @param message : a pointer to the message to handle - * @return none - *************************************************************************/ -void handleUICheckIn( MESSAGE_T *message ) -{ - checkInFromUI(); -} - - -/************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r1c80d60fe6a95297a8a8033a3c7eade53e72779a -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -19,6 +19,7 @@ #include "Common.h" #include "MsgQueues.h" +#include "DialOutFlow.h" // ********** public definitions ********** @@ -35,6 +36,8 @@ MSG_ID_DIALYSATE_FLOW_DATA, // 8 MSG_ID_PRESSURE_OCCLUSION_DATA, // 9 MSG_ID_RTC_EPOCH, // 10 + MSG_ID_DIALYSATE_OUT_FLOW_DATA, // 11 + MSG_ID_LOAD_CELL_READINGS, // 12 // service/test CAN messages @@ -79,10 +82,18 @@ BOOL sendACKMsg( MESSAGE_T *message ); #endif +// MSG_ID_DG_CHECK_IN +void handleDGCheckIn( MESSAGE_T *message ); +// MSG_ID_UI_CHECK_IN +void handleUICheckIn( MESSAGE_T *message ); + // MSG_ID_OFF_BUTTON_PRESS BOOL sendOffButtonMsgToUI( U08 cmd ); void handleOffButtonConfirmMsgFromUI( MESSAGE_T *message ); +// MSG_ID_LOAD_CELL_READINGS +void handleLoadCellReadingsFromDG( MESSAGE_T *message ); + // MSG_ID_ALARM_STATUS BOOL broadcastAlarmStatus( COMP_ALARM_STATUS_T almStatus ); // MSG_ID_ALARM_TRIGGERED @@ -96,17 +107,15 @@ // MSG_ID_DIALYSATE_FLOW_DATA BOOL broadcastDialInFlowData( U32 flowStPt, F32 measFlow, F32 measRotorSpd, F32 measSpd, F32 measMCSpd, F32 measMCCurr, F32 pwmDC ); +// MSG_ID_DIALYSATE_OUT_FLOW_DATA +BOOL broadcastDialOutFlowData( DIAL_OUT_FLOW_DATA_T *dialOutFlowData ); + // MSG_ID_PRESSURE_OCCLUSION_DATA BOOL broadcastPresOcclData( F32 artPres, F32 venPres, F32 bpOccl, F32 diOccl, F32 doOccl ); // MSG_ID_RTC_EPOCH BOOL broadcastRTCEpoch( U32 epoch ); -// MSG_ID_DG_CHECK_IN -void handleDGCheckIn( MESSAGE_T *message ); -// MSG_ID_UI_CHECK_IN -void handleUICheckIn( MESSAGE_T *message ); - // *********** public test support message functions ********** // DEBUG OUTPUT Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -r60a95cb6e1325abd179b4a01d83b8aabe20ccda5 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 60a95cb6e1325abd179b4a01d83b8aabe20ccda5) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -20,6 +20,7 @@ #include "AlarmLamp.h" #include "BloodFlow.h" #include "DialInFlow.h" +#include "DialOutFlow.h" #include "OperationModes.h" #include "PresOccl.h" #include "SystemComm.h" @@ -69,8 +70,11 @@ execBloodFlowController(); // control dialysate inlet pump - //execDialInFlowController(); + execDialInFlowController(); + // control dialysate outlet pump + execDialOutFlowController(); + // manage RTC execRTC(); Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -r60a95cb6e1325abd179b4a01d83b8aabe20ccda5 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 60a95cb6e1325abd179b4a01d83b8aabe20ccda5) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -20,6 +20,7 @@ #include "BloodFlow.h" #include "Buttons.h" #include "DialInFlow.h" +#include "DialOutFlow.h" #include "FPGA.h" #include "SystemComm.h" #include "WatchdogMgmt.h" @@ -53,8 +54,11 @@ execBloodFlowMonitor(); // monitor dialysate inlet pump and flow - //execDialInFlowMonitor(); + execDialInFlowMonitor(); + // monitor dialysate outlet pump and load cells + execDialOutFlowMonitor(); + // 2nd pass for FPGA execFPGAOut(); } Index: firmware/HD.dil =================================================================== diff -u -r1c80d60fe6a95297a8a8033a3c7eade53e72779a -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/HD.dil (.../HD.dil) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) +++ firmware/HD.dil (.../HD.dil) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -1,4 +1,4 @@ -# RM46L852PGE 01/22/20 12:55:22 +# RM46L852PGE 01/24/20 19:18:23 # ARCH=RM46L852PGE # @@ -60,7 +60,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_TYPE.VALUE=FIQ DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI2_RAMPARITYCHECK_ENA.VALUE=0 DRIVER.SYSTEM.VAR.CRC_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI1_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.MIBSPI1_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.CLKT_HCLK_FREQ.VALUE=206.670 DRIVER.SYSTEM.VAR.CLKT_PLL2_FREQ.VALUE=220.00 DRIVER.SYSTEM.VAR.VIM_CHANNEL_81_MAPPING.VALUE=81 @@ -263,7 +263,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_INT_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN5_DP_PBISTCHECK_ENA.VALUE=0x00000000 DRIVER.SYSTEM.VAR.SCILIN_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.SPI_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SPI_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.ALL_DVR_ENA.VALUE=0 DRIVER.SYSTEM.VAR.CCM_MENU_VALUE.VALUE=0x0001 DRIVER.SYSTEM.VAR.PBIST_ENA1.VALUE=1 @@ -566,7 +566,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_101_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_4_INT_TYPE.VALUE=IRQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_1_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.SPI4_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.SPI4_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.CLKT_AVCLK4_POST_SOURCE.VALUE=VCLKA4_DIVR DRIVER.SYSTEM.VAR.CLKT_VCLK1_FREQ.VALUE=103.335 DRIVER.SYSTEM.VAR.CLKT_AVCLK3_FREQ1.VALUE=103.335 @@ -1567,23 +1567,23 @@ DRIVER.GIO.VAR.GIO_PORT0_BIT2_PULL.VALUE=1 DRIVER.GIO.VAR.GIO_PORT1_BIT1_PULDIS.VALUE=0 DRIVER.GIO.VAR.GIO_PORT0_BIT5_DOUT.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT0_ENA.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT0_ENA.VALUE=0 DRIVER.GIO.VAR.GIO_PORT0_BIT5_PULDIS.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT0_DIR.VALUE=1 DRIVER.GIO.VAR.GIO_PORT1_BIT2_DOUT.VALUE=0 DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT1_ENA.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT1_ENA.VALUE=0 DRIVER.GIO.VAR.GIO_PORT0_BIT6_DOUT.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT1_DIR.VALUE=1 DRIVER.GIO.VAR.GIO_PORT1_BIT6_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT1_BIT2_ENA.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT2_ENA.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT2_DIR.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT0_PDR.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT0_PULL.VALUE=1 DRIVER.GIO.VAR.GIO_PORT0_BIT3_PULDIS.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT3_DOUT.VALUE=0 DRIVER.GIO.VAR.GIO_PORT0_BIT4_PULL.VALUE=1 -DRIVER.GIO.VAR.GIO_PORT1_BIT3_ENA.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT1_BIT3_ENA.VALUE=0 DRIVER.GIO.VAR.GIO_PORT0_BIT7_DOUT.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT3_DIR.VALUE=1 DRIVER.GIO.VAR.GIO_PORT1_BIT0_LVL.VALUE=0 @@ -1606,7 +1606,7 @@ DRIVER.GIO.VAR.GIO_PORT1_BIT5_DIR.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT2_LVL.VALUE=0 DRIVER.GIO.VAR.GIO_PORT0_BIT1_PULDIS.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT0_ENA.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT0_BIT0_ENA.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT3_PDR.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT2_POL.VALUE=0 DRIVER.GIO.VAR.GIO_PORT0_BIT0_DIR.VALUE=0 @@ -1615,7 +1615,7 @@ DRIVER.GIO.VAR.GIO_PORT1_BIT6_DIR.VALUE=0 DRIVER.GIO.VAR.GIO_BASE.VALUE=0xFFF7BC00 DRIVER.GIO.VAR.GIO_PORT1_BIT3_LVL.VALUE=0 -DRIVER.GIO.VAR.GIO_PORT0_BIT1_ENA.VALUE=1 +DRIVER.GIO.VAR.GIO_PORT0_BIT1_ENA.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT4_PDR.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT3_POL.VALUE=0 DRIVER.GIO.VAR.GIO_PORT1_BIT2_PULL.VALUE=2 @@ -2254,7 +2254,7 @@ DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT9_PULL.VALUE=2 DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGEVT.VALUE=TRG_ALWAYS DRIVER.MIBSPI.VAR.MIBSPI5_MASTER.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT10_FUN.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_FUN.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_MODE.VALUE=4 DRIVER.MIBSPI.VAR.MIBSPI1_TG0_CS_ENCODE.VALUE=0xFF @@ -2431,7 +2431,7 @@ DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PSL.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAYACTUAL.VALUE=0.000 DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_FUN.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_TG0_CS_ENCODE.VALUE=0xFF DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTENA.VALUE=0 @@ -2477,7 +2477,7 @@ DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGEVT.VALUE=TRG_ALWAYS DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_FUN.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DIR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DIR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_TG2_CS_ENCODE.VALUE=0xFF @@ -2569,7 +2569,7 @@ DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL2.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_PDR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSNR.VALUE=CS_0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSNR.VALUE=CS_1 DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN2.VALUE=16 DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL3.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN3.VALUE=16 @@ -2751,7 +2751,7 @@ DRIVER.SPI.VAR.SPI3_PORT_BIT10_FUN.VALUE=1 DRIVER.SPI.VAR.SPI2_PORT_BIT0_DIR.VALUE=1 DRIVER.SPI.VAR.SPI1_PORT_BIT3_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT9_DOUT.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT9_DOUT.VALUE=0 DRIVER.SPI.VAR.SPI3_PORT_BIT5_PDR.VALUE=0 DRIVER.SPI.VAR.SPI3_C2EDELAYACTUAL.VALUE=0.000 DRIVER.SPI.VAR.SPI1_PRESCALE0.VALUE=102 @@ -2912,7 +2912,7 @@ DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE0.VALUE=1003.252 DRIVER.SPI.VAR.SPI2_SHIFTDIR3.VALUE=0 DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE1.VALUE=1003.252 -DRIVER.SPI.VAR.SPI4_PORT_BIT10_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT10_FUN.VALUE=0 DRIVER.SPI.VAR.SPI4_PORT_BIT0_DIR.VALUE=1 DRIVER.SPI.VAR.SPI2_PORT_BIT3_PULL.VALUE=2 DRIVER.SPI.VAR.SPI1_ACTUALBAUDRATE2.VALUE=1003.252 @@ -2958,7 +2958,7 @@ DRIVER.SPI.VAR.SPI5_PORT_BIT27_DOUT.VALUE=0 DRIVER.SPI.VAR.SPI5_PORT_BIT19_DOUT.VALUE=0 DRIVER.SPI.VAR.SPI5_PORT_BIT0_DOUT.VALUE=1 -DRIVER.SPI.VAR.SPI4_PORT_BIT11_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT11_FUN.VALUE=0 DRIVER.SPI.VAR.SPI4_PORT_BIT11_PULL.VALUE=2 DRIVER.SPI.VAR.SPI1_RAM_PARITY_ENA.VALUE=0 DRIVER.SPI.VAR.SPI2_PORT_BIT3_PDR.VALUE=0 @@ -2977,7 +2977,7 @@ DRIVER.SPI.VAR.SPI3_CHARLEN3.VALUE=16 DRIVER.SPI.VAR.SPI5_PORT_BIT9_DIR.VALUE=1 DRIVER.SPI.VAR.SPI4_PORT_BIT9_PULL.VALUE=2 -DRIVER.SPI.VAR.SPI4_PORT_BIT0_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT0_FUN.VALUE=0 DRIVER.SPI.VAR.SPI3_PARERRLVL.VALUE=0 DRIVER.SPI.VAR.SPI2_RXINTENA.VALUE=0 DRIVER.SPI.VAR.SPI1_PORT_BIT9_DOUT.VALUE=0 @@ -3265,7 +3265,7 @@ DRIVER.SPI.VAR.SPI1_WAITENA1.VALUE=0 DRIVER.SPI.VAR.SPI5_PARITYENA2.VALUE=0 DRIVER.SPI.VAR.SPI5_DLENERRLVL.VALUE=0 -DRIVER.SPI.VAR.SPI4_PORT_BIT8_FUN.VALUE=1 +DRIVER.SPI.VAR.SPI4_PORT_BIT8_FUN.VALUE=0 DRIVER.SPI.VAR.SPI2_DEYSNCLVL.VALUE=0 DRIVER.SPI.VAR.SPI1_PORT_BIT5_FUN.VALUE=1 DRIVER.SPI.VAR.SPI1_WAITENA2.VALUE=0 @@ -7125,7 +7125,7 @@ DRIVER.PINMUX.VAR.MUX53_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX45_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX37_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX29_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX29_OPTION1.VALUE=1 DRIVER.PINMUX.VAR.MUX7_OPTION5.VALUE=0 DRIVER.PINMUX.VAR.DMA_FIDXD_30.VALUE=0 DRIVER.PINMUX.VAR.DMA_FIDXD_22.VALUE=0 @@ -7216,7 +7216,7 @@ DRIVER.PINMUX.VAR.DMA_INTLFSEN_13.VALUE=1 DRIVER.PINMUX.VAR.MUX30_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX22_OPTION1.VALUE=1 -DRIVER.PINMUX.VAR.MUX14_OPTION1.VALUE=1 +DRIVER.PINMUX.VAR.MUX14_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.DMA_IFT_COUNT_26.VALUE=0 DRIVER.PINMUX.VAR.DMA_IFT_COUNT_18.VALUE=0 DRIVER.PINMUX.VAR.DMA_INTLFSEN_14.VALUE=1 @@ -7497,7 +7497,7 @@ DRIVER.PINMUX.VAR.DMA_TTYPE_16.VALUE=FRAME_TRANSFER DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_16.VALUE=0 DRIVER.PINMUX.VAR.DMA_STADD_2.VALUE=0 -DRIVER.PINMUX.VAR.MUX21_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX21_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX13_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.DMA_TTYPE_25.VALUE=FRAME_TRANSFER DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_25.VALUE=0 @@ -7746,7 +7746,7 @@ DRIVER.PINMUX.VAR.PIN_MUX_53_SELECT.VALUE=0 DRIVER.PINMUX.VAR.PIN_MUX_45_SELECT.VALUE=0 DRIVER.PINMUX.VAR.PIN_MUX_37_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_29_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_29_SELECT.VALUE=1 DRIVER.PINMUX.VAR.DMA_TTYPE_7_VALUE.VALUE=0x0001 DRIVER.PINMUX.VAR.MUX20_OPTION3.VALUE=0 DRIVER.PINMUX.VAR.MUX12_OPTION3.VALUE=0 @@ -7757,7 +7757,7 @@ DRIVER.PINMUX.VAR.MUX100_CONFLICT.VALUE=0 DRIVER.PINMUX.VAR.PIN_MUX_30_SELECT.VALUE=0 DRIVER.PINMUX.VAR.PIN_MUX_22_SELECT.VALUE=1 -DRIVER.PINMUX.VAR.PIN_MUX_14_SELECT.VALUE=1 +DRIVER.PINMUX.VAR.PIN_MUX_14_SELECT.VALUE=0 DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_31_VALUE.VALUE=0x0001 DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_23_VALUE.VALUE=0x0001 DRIVER.PINMUX.VAR.DMA_ADDMW_20_VALUE.VALUE=0x0001 @@ -8813,7 +8813,7 @@ DRIVER.PINMUX.VAR.DMA_FIDXD_8.VALUE=0 DRIVER.PINMUX.VAR.DMA_CHAS_14.VALUE=0 DRIVER.PINMUX.VAR.DMA_INTLFSEN_4.VALUE=1 -DRIVER.PINMUX.VAR.SPI4.VALUE=1 +DRIVER.PINMUX.VAR.SPI4.VALUE=0 DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_30_VALUE.VALUE=0x0001 DRIVER.PINMUX.VAR.DMA_CHANNEL_24_VALUE.VALUE=0x0001 DRIVER.PINMUX.VAR.DMA_WRITE_ELSIZE_22_VALUE.VALUE=0x0001 @@ -8856,7 +8856,7 @@ DRIVER.PINMUX.VAR.MUX99_OPTION4.VALUE=0 DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_21.VALUE=8BIT DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_13.VALUE=8BIT -DRIVER.PINMUX.VAR.PINMUX5.VALUE="PINMUX_PIN_25_SPI4CLK | PINMUX_PIN_30_ETPWM3A | PINMUX_PIN_31_HET1_05" +DRIVER.PINMUX.VAR.PINMUX5.VALUE="PINMUX_PIN_25_HET1_0 | PINMUX_PIN_30_ETPWM3A | PINMUX_PIN_31_HET1_05" DRIVER.PINMUX.VAR.MUX101_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_30.VALUE=8BIT DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_22.VALUE=8BIT @@ -8892,7 +8892,7 @@ DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_17.VALUE=8BIT DRIVER.PINMUX.VAR.DMA_EIDXS_13.VALUE=0 DRIVER.PINMUX.VAR.DMA_CHANNEL_3.VALUE=CHANNEL0 -DRIVER.PINMUX.VAR.PINMUX9.VALUE="PINMUX_PIN_54_MIBSPI3NENA | PINMUX_PIN_55_MIBSPI3NCS_0" +DRIVER.PINMUX.VAR.PINMUX9.VALUE="PINMUX_PIN_54_MIBSPI3NCS_5 | PINMUX_PIN_55_MIBSPI3NCS_0" DRIVER.PINMUX.VAR.MUX92_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX84_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX76_OPTION1.VALUE=0 @@ -9353,14 +9353,14 @@ DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD.VALUE=100.000 DRIVER.ETPWM.VAR.ETPWM3_PWMA_ACTUALPERIOD.VALUE=250002.419 DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD.VALUE=1000 DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_OUT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV.VALUE=0 DRIVER.ETPWM.VAR.ETPWM4_CLKDIV_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM3_SOCA_PERIOD.VALUE=1 DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_INPUT.VALUE=PWMA_RED_FED DRIVER.ETPWM.VAR.ETPWM7_BASE.VALUE=0xFCF79200 -DRIVER.ETPWM.VAR.ETPWM5_TB_ACTUALFREQUENCY.VALUE=80.000 +DRIVER.ETPWM.VAR.ETPWM5_TB_ACTUALFREQUENCY.VALUE=103.335 DRIVER.ETPWM.VAR.ETPWM6_DCBEVT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM6_DCBEVT2.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM7_ENABLE_SOCA.VALUE=0x0000 @@ -9369,14 +9369,14 @@ DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_PWMA_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD.VALUE=1000 DRIVER.ETPWM.VAR.ETPWM6_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_DUTY_NEW.VALUE=50.0 DRIVER.ETPWM.VAR.ETPWM7_SOCB_PERIOD.VALUE=1 DRIVER.ETPWM.VAR.ETPWM1_OSHT_ACTUAL_WIDTH.VALUE=77.418 DRIVER.ETPWM.VAR.ETPWM7_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_COMPARE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_PWMB_POLARITY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_OSHT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_OSHT2.VALUE=0x0000 @@ -9385,7 +9385,7 @@ DRIVER.ETPWM.VAR.ETPWM1_OSHT3.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_ENABLE_SOCB.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM5_OSHT_WIDTH_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_OSHT5.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD_REG.VALUE=25833 DRIVER.ETPWM.VAR.ETPWM1_OSHT6.VALUE=0x0000 @@ -9396,34 +9396,34 @@ DRIVER.ETPWM.VAR.ETPWM2_PWMB_ENA.VALUE=1 DRIVER.ETPWM.VAR.ETPWM4_SOCB_PERIOD.VALUE=1 DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_PWMB_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_ACTUALPERIOD.VALUE=996.758 DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCA.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM2_PWMB_DEADBAND_INVERT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_ENABLE_SOCB.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY.VALUE=50 DRIVER.ETPWM.VAR.ETPWM5_DCAEVT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM5_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_ACTUAL_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTYTIME.VALUE=38.709 +DRIVER.ETPWM.VAR.ETPWM6_OSHT_ACTUAL_WIDTH.VALUE=77.418 DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_INVERT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_PWMB_POLARITY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM6_OSHT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM2_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM6_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_OUT.VALUE=1 DRIVER.ETPWM.VAR.ETPWM1_SOCB_PERIOD.VALUE=1 DRIVER.ETPWM.VAR.ETPWM6_OSHT3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTYTIME.VALUE=503.218 DRIVER.ETPWM.VAR.ETPWM3_CBC.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM2_TB_ACTUALFREQUENCY.VALUE=103.335 DRIVER.ETPWM.VAR.ETPWM1_FDELAY_SOURCE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM6_OSHT4.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_INVERT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM6_OSHT5.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_COMPARE.VALUE=12917 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_COMPARE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM6_OSHT6.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_INPUT.VALUE=PWMA_RED_FED @@ -9435,7 +9435,7 @@ DRIVER.ETPWM.VAR.ETPWM5_PWMA_ENA.VALUE=1 DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD_REG.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD_REG.VALUE=102 DRIVER.ETPWM.VAR.ETPWM5_DCBEVT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTY.VALUE=0 @@ -9461,15 +9461,15 @@ DRIVER.ETPWM.VAR.ETPWM3_RDELAY_SOURCE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM3_PWMA_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_COMPARE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM5_PWMB_ENA.VALUE=1 DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME.VALUE=50.000 +DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_DUTYTIME.VALUE=38.709 DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM3_SELECT_EVENT.VALUE=NO_EVENT DRIVER.ETPWM.VAR.ETPWM2_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_DUTY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_ACTUALPERIOD.VALUE=996.758 DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_INPUT.VALUE=PWMA_RED_FED DRIVER.ETPWM.VAR.ETPWM5_CBC.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_CBC1.VALUE=0x0000 @@ -9481,12 +9481,12 @@ DRIVER.ETPWM.VAR.ETPWM1_CBC5.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_CBC6.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_DCAEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD_REG.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_PERIOD_REG.VALUE=102 DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME_REG.VALUE=3 DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_MODE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD.VALUE=1000 DRIVER.ETPWM.VAR.ETPWM4_DCAEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_TB_ACTUALFREQUENCY.VALUE=80.000 +DRIVER.ETPWM.VAR.ETPWM7_TB_ACTUALFREQUENCY.VALUE=103.335 DRIVER.ETPWM.VAR.ETPWM3_TB_FREQUENCY.VALUE=110.000 DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME_REG.VALUE=3 @@ -9506,12 +9506,12 @@ DRIVER.ETPWM.VAR.ETPWM3_PWMB_ACTUALPERIOD.VALUE=250002.419 DRIVER.ETPWM.VAR.ETPWM2_OSHT6.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM6_CBC.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTYTIME.VALUE=125001.209 -DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTYTIME.VALUE=0.000 +DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD.VALUE=100.000 DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD.VALUE=250000 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME.VALUE=50.000 -DRIVER.ETPWM.VAR.ETPWM5_OSHT_ACTUAL_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME.VALUE=38.709 +DRIVER.ETPWM.VAR.ETPWM5_OSHT_ACTUAL_WIDTH.VALUE=77.418 DRIVER.ETPWM.VAR.ETPWM4_DCBEVT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_SOCA_PERIOD.VALUE=1 DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_OUT.VALUE=0 @@ -9522,12 +9522,12 @@ DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM1_PWMA_ENA.VALUE=1 DRIVER.ETPWM.VAR.ETPWM7_OSHT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD_REG.VALUE=1000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD_REG.VALUE=102 DRIVER.ETPWM.VAR.ETPWM6_HSPCLKDIV_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM7_OSHT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_PERIOD.VALUE=1000 DRIVER.ETPWM.VAR.ETPWM7_CBC.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM7_OSHT3.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM2_CBC1.VALUE=0x0000 @@ -9546,12 +9546,12 @@ DRIVER.ETPWM.VAR.ETPWM1_OST.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_ACTUALPERIOD.VALUE=77.418 DRIVER.ETPWM.VAR.ETPWM1_PWMA_ACTUALPERIOD.VALUE=250002.419 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM3_FDELAY_SOURCE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_CBC5.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM7_CLKDIV.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_COMPARE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_DEADBAND_INPUT.VALUE=PWMA_RED_FED DRIVER.ETPWM.VAR.ETPWM6_INTERRUPT_PERIOD.VALUE=1 DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_ACTUALPERIOD.VALUE=77.418 @@ -9561,16 +9561,16 @@ DRIVER.ETPWM.VAR.ETPWM1_BASE.VALUE=0xFCF78C00 DRIVER.ETPWM.VAR.ETPWM6_ENABLE_SOCB.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_ACTUALPERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_ACTUALPERIOD.VALUE=77.418 DRIVER.ETPWM.VAR.ETPWM3_PWMB_PERIOD.VALUE=250000 DRIVER.ETPWM.VAR.ETPWM1_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL -DRIVER.ETPWM.VAR.ETPWM4_TB_ACTUALFREQUENCY.VALUE=80.000 +DRIVER.ETPWM.VAR.ETPWM4_TB_ACTUALFREQUENCY.VALUE=103.335 DRIVER.ETPWM.VAR.ETPWM2_OSHT_WIDTH_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_ACTUALPERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_ACTUALPERIOD.VALUE=77.418 DRIVER.ETPWM.VAR.ETPWM6_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME.VALUE=50.000 +DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_DUTYTIME.VALUE=38.709 DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM3_DCAEVT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM3_DCAEVT2.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM2_OST.VALUE=0x0000 @@ -9579,15 +9579,15 @@ DRIVER.ETPWM.VAR.ETPWM3_ENABLE_SOCB.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM7_PWMA_POLARITY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_ACTUALPERIOD.VALUE=996.758 DRIVER.ETPWM.VAR.ETPWM5_RDELAY_SOURCE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD_REG.VALUE=1000 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTYTIME.VALUE=503.218 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD_REG.VALUE=102 DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_PERIOD.VALUE=100.000 DRIVER.ETPWM.VAR.ETPWM6_PWMB_DEADBAND_OUT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM3_SOCB_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_COMPARE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM4_PWMA_ENA.VALUE=1 DRIVER.ETPWM.VAR.ETPWM2_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM1_PWMB_POLARITY.VALUE=0 @@ -9617,24 +9617,24 @@ DRIVER.ETPWM.VAR.ETPWM3_OSHT3.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTYTIME.VALUE=38.709 DRIVER.ETPWM.VAR.ETPWM5_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_ACTUAL_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM4_OSHT_ACTUAL_WIDTH.VALUE=77.418 DRIVER.ETPWM.VAR.ETPWM3_OSHT4.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH.VALUE=100 DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTY.VALUE=50 DRIVER.ETPWM.VAR.ETPWM4_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM4_PWMB_ENA.VALUE=1 DRIVER.ETPWM.VAR.ETPWM3_OSHT5.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_DEADBAND_OUT.VALUE=1 DRIVER.ETPWM.VAR.ETPWM3_OSHT6.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_TB_ACTUALFREQUENCY.VALUE=103.335 DRIVER.ETPWM.VAR.ETPWM5_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_COMPARE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM6_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM4_OST.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTYTIME.VALUE=500.000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTYTIME.VALUE=0.000 +DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD_REG.VALUE=25833 DRIVER.ETPWM.VAR.ETPWM1_PWMB_COMPARE.VALUE=0 @@ -9644,7 +9644,7 @@ DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCA.VALUE=DCAEVT1 DRIVER.ETPWM.VAR.ETPWM4_SELECT_EVENT.VALUE=NO_EVENT DRIVER.ETPWM.VAR.ETPWM2_SELECT_SOCB.VALUE=DCBEVT1 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_ACTUALPERIOD.VALUE=996.758 DRIVER.ETPWM.VAR.ETPWM2_DCAEVT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_INTERRUPT_PERIOD.VALUE=1 DRIVER.ETPWM.VAR.ETPWM2_DCAEVT2.VALUE=0x0000 @@ -9655,7 +9655,7 @@ DRIVER.ETPWM.VAR.ETPWM4_CBC3.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_MODE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD.VALUE=1000 DRIVER.ETPWM.VAR.ETPWM5_OST.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_CBC4.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_CBC5.VALUE=0x0000 @@ -9673,18 +9673,18 @@ DRIVER.ETPWM.VAR.ETPWM2_PWMA_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM1_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM4_HSPCLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_COMPARE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM1_PWMB_DEADBAND_INVERT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM2_DCBEVT1.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_ACTUALPERIOD.VALUE=1000.000 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_ACTUALPERIOD.VALUE=996.758 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_PERIOD.VALUE=1000 DRIVER.ETPWM.VAR.ETPWM2_DCBEVT2.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM3_PWMB_DEADBAND_INVERT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_SELECT_EVENT.VALUE=NO_EVENT -DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD_REG.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_PERIOD_REG.VALUE=102 DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM7_PWMB_ENA.VALUE=1 DRIVER.ETPWM.VAR.ETPWM3_OSHT_WIDTH_REG.VALUE=0 @@ -9693,17 +9693,17 @@ DRIVER.ETPWM.VAR.ETPWM6_OST.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_OUT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM5_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_TB_ACTUALFREQUENCY.VALUE=80.000 +DRIVER.ETPWM.VAR.ETPWM6_TB_ACTUALFREQUENCY.VALUE=103.335 DRIVER.ETPWM.VAR.ETPWM4_PWMB_RISING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM2_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM7_PWMB_DEADBAND_INVERT.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTY.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM3_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM6_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL DRIVER.ETPWM.VAR.ETPWM3_INTERRUPT_PERIOD.VALUE=1 DRIVER.ETPWM.VAR.ETPWM1_PWMA_PERIOD.VALUE=250000 DRIVER.ETPWM.VAR.ETPWM7_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM1_TB_FREQUENCY.VALUE=110.000 DRIVER.ETPWM.VAR.ETPWM3_CLKDIV.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_INVERT.VALUE=0 @@ -9728,8 +9728,8 @@ DRIVER.ETPWM.VAR.ETPWM6_PWMA_DEADBAND_INVERT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM5_CBC6.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM3_OSHT_ACTUAL_WIDTH.VALUE=77.418 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD.VALUE=1000 DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_INPUT.VALUE=PWMA_RED_FED DRIVER.ETPWM.VAR.ETPWM3_PWMA_DEADBAND_OUT.VALUE=1 DRIVER.ETPWM.VAR.ETPWM6_PWMB_RISING_EDGE_DELAY.VALUE=9.091 @@ -9743,27 +9743,27 @@ DRIVER.ETPWM.VAR.ETPWM1_DCAEVT2.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_OSHT3.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_OSHT4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD_REG.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_PERIOD_REG.VALUE=102 DRIVER.ETPWM.VAR.ETPWM4_OSHT5.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM4_OSHT6.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM7_PWMB_RISING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCA.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCB.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_ACTUALPERIOD.VALUE=996.758 DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD.VALUE=250000 DRIVER.ETPWM.VAR.ETPWM3_PWMA_ENA.VALUE=1 DRIVER.ETPWM.VAR.ETPWM1_PWMA_POLARITY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM5_SOCB_PERIOD.VALUE=1 DRIVER.ETPWM.VAR.ETPWM4_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL DRIVER.ETPWM.VAR.ETPWM2_INTERRUPT_PERIOD.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMB_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM2_FDELAY_SOURCE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_PWMA_RISING_EDGE_DELAY.VALUE=9.091 -DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTY.VALUE=50 -DRIVER.ETPWM.VAR.ETPWM5_PWMB_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM7_PWMB_DUTY.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_COMPARE.VALUE=52 DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTYTIME_REG.VALUE=3 DRIVER.ETPWM.VAR.ETPWM1_DCBEVT1.VALUE=0x0000 @@ -9786,10 +9786,10 @@ DRIVER.ETPWM.VAR.ETPWM2_SOCB_PERIOD.VALUE=1 DRIVER.ETPWM.VAR.ETPWM6_CBC5.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM6_CBC6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD_REG.VALUE=1000 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_PERIOD_REG.VALUE=102 DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_MODE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM3_PWMB_ENA.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_ACTUALPERIOD.VALUE=996.758 DRIVER.ETPWM.VAR.ETPWM7_SELECT_SOCA.VALUE=DCAEVT1 DRIVER.ETPWM.VAR.ETPWM5_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM5_BASE.VALUE=0xFCF79000 @@ -9803,21 +9803,21 @@ DRIVER.ETPWM.VAR.ETPWM4_PWMB_DEADBAND_OUT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_FDELAY_SOURCE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM4_RDELAY_SOURCE.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTYTIME.VALUE=500.000 +DRIVER.ETPWM.VAR.ETPWM4_PWMA_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM7_DCAEVT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_PWMA_DUTY.VALUE=50 DRIVER.ETPWM.VAR.ETPWM7_DCAEVT2.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_PWMA_RISING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV.VALUE=0 DRIVER.ETPWM.VAR.ETPWM5_CLKDIV_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_COMPARE.VALUE=12917 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_COMPARE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_DEADBAND_OUTPUT.VALUE=PWMA_PWMB_NIL DRIVER.ETPWM.VAR.ETPWM1_INTERRUPT_PERIOD.VALUE=1 DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCA.VALUE=DCAEVT1 DRIVER.ETPWM.VAR.ETPWM5_SELECT_EVENT.VALUE=NO_EVENT DRIVER.ETPWM.VAR.ETPWM4_SELECT_SOCB.VALUE=DCBEVT1 DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH.VALUE=100 -DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH_REG.VALUE=1 +DRIVER.ETPWM.VAR.ETPWM4_OSHT_WIDTH_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM5_PWMA_RISING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM6_PWMA_ENA.VALUE=1 @@ -9827,7 +9827,7 @@ DRIVER.ETPWM.VAR.ETPWM7_DCBEVT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_MODE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_ACTUALPERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM4_CHOPPER_ACTUALPERIOD.VALUE=77.418 DRIVER.ETPWM.VAR.ETPWM2_PWMA_DEADBAND_OUT.VALUE=1 DRIVER.ETPWM.VAR.ETPWM7_CBC1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM6_PWMA_RISING_EDGE_DELAY.VALUE=9.091 @@ -9836,38 +9836,38 @@ DRIVER.ETPWM.VAR.ETPWM7_CBC2.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM1_SELECT_SOCB.VALUE=DCBEVT1 DRIVER.ETPWM.VAR.ETPWM7_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD_REG.VALUE=1000 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_PERIOD_REG.VALUE=102 DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_DUTY.VALUE=50 DRIVER.ETPWM.VAR.ETPWM2_HSPCLKDIV_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_CBC4.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_ACTUALPERIOD.VALUE=100.000 +DRIVER.ETPWM.VAR.ETPWM6_CHOPPER_ACTUALPERIOD.VALUE=77.418 DRIVER.ETPWM.VAR.ETPWM7_CBC5.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM7_CBC6.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_PWMB_POLARITY.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM5_PWMA_COMPARE.VALUE=50 +DRIVER.ETPWM.VAR.ETPWM5_PWMA_COMPARE.VALUE=52 DRIVER.ETPWM.VAR.ETPWM3_PWMA_RISING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM1_CHOPPER_PERIOD_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_PWMB_PERIOD_REG.VALUE=25833 DRIVER.ETPWM.VAR.ETPWM7_PWMA_FALLING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM7_PWMA_RISING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM6_BASE.VALUE=0xFCF79100 -DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTYTIME.VALUE=125001.209 +DRIVER.ETPWM.VAR.ETPWM3_PWMB_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM6_PWMB_ENA.VALUE=1 DRIVER.ETPWM.VAR.ETPWM5_OSHT1.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM3_PWMB_RISING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM6_PWMA_PERIOD.VALUE=1000 DRIVER.ETPWM.VAR.ETPWM5_OSHT2.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_DEADBAND_INPUT.VALUE=PWMA_RED_FED -DRIVER.ETPWM.VAR.ETPWM5_PWMB_ACTUALPERIOD.VALUE=1000.000 +DRIVER.ETPWM.VAR.ETPWM5_PWMB_ACTUALPERIOD.VALUE=996.758 DRIVER.ETPWM.VAR.ETPWM5_OSHT3.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_OSHT4.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM2_SELECT_EVENT.VALUE=NO_EVENT DRIVER.ETPWM.VAR.ETPWM5_OSHT5.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_PWMB_DUTY.VALUE=50 DRIVER.ETPWM.VAR.ETPWM5_OSHT6.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM7_OSHT_ACTUAL_WIDTH.VALUE=100 +DRIVER.ETPWM.VAR.ETPWM7_OSHT_ACTUAL_WIDTH.VALUE=77.418 DRIVER.ETPWM.VAR.ETPWM6_CLKDIV.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_OUT.VALUE=0 +DRIVER.ETPWM.VAR.ETPWM7_PWMA_DEADBAND_OUT.VALUE=1 DRIVER.ETPWM.VAR.ETPWM7_HSPCLKDIV_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_DUTY_NEW.VALUE=50.0 DRIVER.ETPWM.VAR.ETPWM3_PWMA_PERIOD.VALUE=250000 Index: firmware/HD.hcg =================================================================== diff -u -r6311eb9b65fdeec7a285d25e07f3932ac0fb6cf1 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/HD.hcg (.../HD.hcg) (revision 6311eb9b65fdeec7a285d25e07f3932ac0fb6cf1) +++ firmware/HD.hcg (.../HD.hcg) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -254,8 +254,7 @@ spi.h - spi.c - + reg_can.h @@ -551,7 +550,7 @@ include\spi.h - source\spi.c + Index: firmware/include/etpwm.h =================================================================== diff -u -ref0b3f0ec00fadc50f95e0db1a6477fb4b076ea1 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/include/etpwm.h (.../etpwm.h) (revision ef0b3f0ec00fadc50f95e0db1a6477fb4b076ea1) +++ firmware/include/etpwm.h (.../etpwm.h) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -497,7 +497,7 @@ #define ETPWM2_TBPRD_CONFIGVALUE 25833U #define ETPWM2_CMPCTL_CONFIGVALUE 0x00000000U #define ETPWM2_CMPA_CONFIGVALUE 0U -#define ETPWM2_CMPB_CONFIGVALUE 12917U +#define ETPWM2_CMPB_CONFIGVALUE 0U #define ETPWM2_AQCTLA_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 4U)) #define ETPWM2_AQCTLB_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 8U)) #define ETPWM2_DBCTL_CONFIGVALUE ((uint16)((uint16)0U << 5U) | (uint16)((uint16)0u << 4U) | (uint16)((uint16)0U << 3U) | (uint16)((uint16)0U << 2U) | (uint16)((uint16)1U << 1U) | (uint16)((uint16)0U << 0U)) @@ -523,7 +523,7 @@ #define ETPWM3_TBPRD_CONFIGVALUE 25833U #define ETPWM3_CMPCTL_CONFIGVALUE 0x00000000U #define ETPWM3_CMPA_CONFIGVALUE 0U -#define ETPWM3_CMPB_CONFIGVALUE 12917U +#define ETPWM3_CMPB_CONFIGVALUE 0U #define ETPWM3_AQCTLA_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 4U)) #define ETPWM3_AQCTLB_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 8U)) #define ETPWM3_DBCTL_CONFIGVALUE ((uint16)((uint16)0U << 5U) | (uint16)((uint16)0u << 4U) | (uint16)((uint16)0U << 3U) | (uint16)((uint16)0U << 2U) | (uint16)((uint16)1U << 1U) | (uint16)((uint16)0U << 0U)) @@ -546,13 +546,13 @@ #define ETPWM4_TBCTL_CONFIGVALUE ((uint16)((uint16)0U << 7U) | (uint16)((uint16)0U << 10U)) #define ETPWM4_TBPHS_CONFIGVALUE 0x00000000U -#define ETPWM4_TBPRD_CONFIGVALUE 1000U +#define ETPWM4_TBPRD_CONFIGVALUE 102U #define ETPWM4_CMPCTL_CONFIGVALUE 0x00000000U -#define ETPWM4_CMPA_CONFIGVALUE 50U -#define ETPWM4_CMPB_CONFIGVALUE 50U +#define ETPWM4_CMPA_CONFIGVALUE 0U +#define ETPWM4_CMPB_CONFIGVALUE 0U #define ETPWM4_AQCTLA_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 4U)) #define ETPWM4_AQCTLB_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 8U)) -#define ETPWM4_DBCTL_CONFIGVALUE ((uint16)((uint16)0U << 5U) | (uint16)((uint16)0u << 4U) | (uint16)((uint16)0U << 3U) | (uint16)((uint16)0U << 2U) | (uint16)((uint16)0U << 1U) | (uint16)((uint16)0U << 0U)) +#define ETPWM4_DBCTL_CONFIGVALUE ((uint16)((uint16)0U << 5U) | (uint16)((uint16)0u << 4U) | (uint16)((uint16)0U << 3U) | (uint16)((uint16)0U << 2U) | (uint16)((uint16)1U << 1U) | (uint16)((uint16)0U << 0U)) #define ETPWM4_DBRED_CONFIGVALUE 1U #define ETPWM4_DBFED_CONFIGVALUE 1U #define ETPWM4_TZSEL_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) @@ -561,7 +561,7 @@ #define ETPWM4_TZEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U| 0x0000U) #define ETPWM4_ETSEL_CONFIGVALUE ((uint16)(((uint16)NO_EVENT == 0U)? 0x0000U : 0x0008U) | (uint16)NO_EVENT | (uint16)0x0000U | (uint16)0x0000U | (uint16)((uint16)DCAEVT1 << 8U) | (uint16)((uint16)DCBEVT1 << 12U)) #define ETPWM4_ETPS_CONFIGVALUE ((uint16)1U | (uint16)((uint16)1U << 8U) | (uint16)((uint16)1U << 12U)) -#define ETPWM4_PCCTL_CONFIGVALUE ((uint16)((uint16)0U << 0U) | (uint16)((uint16)1U << 1U) | (uint16)((uint16)3U << 8U) | (uint16)((uint16)0U << 5U)) +#define ETPWM4_PCCTL_CONFIGVALUE ((uint16)((uint16)0U << 0U) | (uint16)((uint16)0U << 1U) | (uint16)((uint16)3U << 8U) | (uint16)((uint16)0U << 5U)) #define ETPWM4_DCTRIPSEL_CONFIGVALUE 0x00000000U #define ETPWM4_DCACTL_CONFIGVALUE 0x00000000U #define ETPWM4_DCBCTL_CONFIGVALUE 0x00000000U @@ -572,10 +572,10 @@ #define ETPWM5_TBCTL_CONFIGVALUE ((uint16)((uint16)0U << 7U) | (uint16)((uint16)0U << 10U)) #define ETPWM5_TBPHS_CONFIGVALUE 0x00000000U -#define ETPWM5_TBPRD_CONFIGVALUE 1000U +#define ETPWM5_TBPRD_CONFIGVALUE 102U #define ETPWM5_CMPCTL_CONFIGVALUE 0x00000000U -#define ETPWM5_CMPA_CONFIGVALUE 50U -#define ETPWM5_CMPB_CONFIGVALUE 50U +#define ETPWM5_CMPA_CONFIGVALUE 52U +#define ETPWM5_CMPB_CONFIGVALUE 52U #define ETPWM5_AQCTLA_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 4U)) #define ETPWM5_AQCTLB_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 8U)) #define ETPWM5_DBCTL_CONFIGVALUE ((uint16)((uint16)0U << 5U) | (uint16)((uint16)0u << 4U) | (uint16)((uint16)0U << 3U) | (uint16)((uint16)0U << 2U) | (uint16)((uint16)0U << 1U) | (uint16)((uint16)0U << 0U)) @@ -587,7 +587,7 @@ #define ETPWM5_TZEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U| 0x0000U) #define ETPWM5_ETSEL_CONFIGVALUE ((uint16)(((uint16)NO_EVENT == 0U)? 0x0000U : 0x0008U) | (uint16)NO_EVENT | (uint16)0x0000U | (uint16)0x0000U | (uint16)((uint16)DCAEVT1 << 8U) | (uint16)((uint16)DCBEVT1 << 12U)) #define ETPWM5_ETPS_CONFIGVALUE ((uint16)1U | (uint16)((uint16)1U << 8U) | (uint16)((uint16)1U << 12U)) -#define ETPWM5_PCCTL_CONFIGVALUE ((uint16)((uint16)0U << 0U) | (uint16)((uint16)1U << 1U) | (uint16)((uint16)3U << 8U) | (uint16)((uint16)0U << 5U)) +#define ETPWM5_PCCTL_CONFIGVALUE ((uint16)((uint16)0U << 0U) | (uint16)((uint16)0U << 1U) | (uint16)((uint16)3U << 8U) | (uint16)((uint16)0U << 5U)) #define ETPWM5_DCTRIPSEL_CONFIGVALUE 0x00000000U #define ETPWM5_DCACTL_CONFIGVALUE 0x00000000U #define ETPWM5_DCBCTL_CONFIGVALUE 0x00000000U @@ -598,13 +598,13 @@ #define ETPWM6_TBCTL_CONFIGVALUE ((uint16)((uint16)0U << 7U) | (uint16)((uint16)0U << 10U)) #define ETPWM6_TBPHS_CONFIGVALUE 0x00000000U -#define ETPWM6_TBPRD_CONFIGVALUE 1000U +#define ETPWM6_TBPRD_CONFIGVALUE 102U #define ETPWM6_CMPCTL_CONFIGVALUE 0x00000000U -#define ETPWM6_CMPA_CONFIGVALUE 50U -#define ETPWM6_CMPB_CONFIGVALUE 50U +#define ETPWM6_CMPA_CONFIGVALUE 0U +#define ETPWM6_CMPB_CONFIGVALUE 0U #define ETPWM6_AQCTLA_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 4U)) #define ETPWM6_AQCTLB_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 8U)) -#define ETPWM6_DBCTL_CONFIGVALUE ((uint16)((uint16)0U << 5U) | (uint16)((uint16)0u << 4U) | (uint16)((uint16)0U << 3U) | (uint16)((uint16)0U << 2U) | (uint16)((uint16)0U << 1U) | (uint16)((uint16)0U << 0U)) +#define ETPWM6_DBCTL_CONFIGVALUE ((uint16)((uint16)0U << 5U) | (uint16)((uint16)0u << 4U) | (uint16)((uint16)0U << 3U) | (uint16)((uint16)0U << 2U) | (uint16)((uint16)1U << 1U) | (uint16)((uint16)0U << 0U)) #define ETPWM6_DBRED_CONFIGVALUE 1U #define ETPWM6_DBFED_CONFIGVALUE 1U #define ETPWM6_TZSEL_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) @@ -613,7 +613,7 @@ #define ETPWM6_TZEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U| 0x0000U) #define ETPWM6_ETSEL_CONFIGVALUE ((uint16)(((uint16)NO_EVENT == 0U)? 0x0000U : 0x0008U) | (uint16)NO_EVENT | (uint16)0x0000U | (uint16)0x0000U | (uint16)((uint16)DCAEVT1 << 8U) | (uint16)((uint16)DCBEVT1 << 12U)) #define ETPWM6_ETPS_CONFIGVALUE ((uint16)1U | (uint16)((uint16)1U << 8U) | (uint16)((uint16)1U << 12U)) -#define ETPWM6_PCCTL_CONFIGVALUE ((uint16)((uint16)0U << 0U) | (uint16)((uint16)1U << 1U) | (uint16)((uint16)3U << 8U) | (uint16)((uint16)0U << 5U)) +#define ETPWM6_PCCTL_CONFIGVALUE ((uint16)((uint16)0U << 0U) | (uint16)((uint16)0U << 1U) | (uint16)((uint16)3U << 8U) | (uint16)((uint16)0U << 5U)) #define ETPWM6_DCTRIPSEL_CONFIGVALUE 0x00000000U #define ETPWM6_DCACTL_CONFIGVALUE 0x00000000U #define ETPWM6_DCBCTL_CONFIGVALUE 0x00000000U @@ -624,13 +624,13 @@ #define ETPWM7_TBCTL_CONFIGVALUE ((uint16)((uint16)0U << 7U) | (uint16)((uint16)0U << 10U)) #define ETPWM7_TBPHS_CONFIGVALUE 0x00000000U -#define ETPWM7_TBPRD_CONFIGVALUE 1000U +#define ETPWM7_TBPRD_CONFIGVALUE 102U #define ETPWM7_CMPCTL_CONFIGVALUE 0x00000000U -#define ETPWM7_CMPA_CONFIGVALUE 50U -#define ETPWM7_CMPB_CONFIGVALUE 50U +#define ETPWM7_CMPA_CONFIGVALUE 0U +#define ETPWM7_CMPB_CONFIGVALUE 0U #define ETPWM7_AQCTLA_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 4U)) #define ETPWM7_AQCTLB_CONFIGVALUE ((uint16)((uint16)ActionQual_Set << 0U) | (uint16)((uint16)ActionQual_Clear << 8U)) -#define ETPWM7_DBCTL_CONFIGVALUE ((uint16)((uint16)0U << 5U) | (uint16)((uint16)0u << 4U) | (uint16)((uint16)0U << 3U) | (uint16)((uint16)0U << 2U) | (uint16)((uint16)0U << 1U) | (uint16)((uint16)0U << 0U)) +#define ETPWM7_DBCTL_CONFIGVALUE ((uint16)((uint16)0U << 5U) | (uint16)((uint16)0u << 4U) | (uint16)((uint16)0U << 3U) | (uint16)((uint16)0U << 2U) | (uint16)((uint16)1U << 1U) | (uint16)((uint16)0U << 0U)) #define ETPWM7_DBRED_CONFIGVALUE 1U #define ETPWM7_DBFED_CONFIGVALUE 1U #define ETPWM7_TZSEL_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) @@ -639,7 +639,7 @@ #define ETPWM7_TZEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U| 0x0000U) #define ETPWM7_ETSEL_CONFIGVALUE ((uint16)(((uint16)NO_EVENT == 0U)? 0x0000U : 0x0008U) | (uint16)NO_EVENT | (uint16)0x0000U | (uint16)0x0000U | (uint16)((uint16)DCAEVT1 << 8U) | (uint16)((uint16)DCBEVT1 << 12U)) #define ETPWM7_ETPS_CONFIGVALUE ((uint16)1U | (uint16)((uint16)1U << 8U) | (uint16)((uint16)1U << 12U)) -#define ETPWM7_PCCTL_CONFIGVALUE ((uint16)((uint16)0U << 0U) | (uint16)((uint16)1U << 1U) | (uint16)((uint16)3U << 8U) | (uint16)((uint16)0U << 5U)) +#define ETPWM7_PCCTL_CONFIGVALUE ((uint16)((uint16)0U << 0U) | (uint16)((uint16)0U << 1U) | (uint16)((uint16)3U << 8U) | (uint16)((uint16)0U << 5U)) #define ETPWM7_DCTRIPSEL_CONFIGVALUE 0x00000000U #define ETPWM7_DCACTL_CONFIGVALUE 0x00000000U #define ETPWM7_DCBCTL_CONFIGVALUE 0x00000000U Index: firmware/include/gio.h =================================================================== diff -u -ref0b3f0ec00fadc50f95e0db1a6477fb4b076ea1 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/include/gio.h (.../gio.h) (revision ef0b3f0ec00fadc50f95e0db1a6477fb4b076ea1) +++ firmware/include/gio.h (.../gio.h) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -89,18 +89,18 @@ | (uint32)((uint32)0U << 15U)) -#define GIO_INTENASET_CONFIGVALUE ((uint32)((uint32)1U << 0U) \ - | (uint32)((uint32)1U << 1U) \ +#define GIO_INTENASET_CONFIGVALUE ((uint32)((uint32)0U << 0U) \ + | (uint32)((uint32)0U << 1U) \ | (uint32)((uint32)0U << 2U) \ | (uint32)((uint32)0U << 3U) \ | (uint32)((uint32)0U << 4U) \ | (uint32)((uint32)0U << 5U) \ | (uint32)((uint32)0U << 6U) \ | (uint32)((uint32)0U << 7U) \ - | (uint32)((uint32)1U << 8U) \ - | (uint32)((uint32)1U << 9U) \ - | (uint32)((uint32)1U << 10U)\ - | (uint32)((uint32)1U << 11U)\ + | (uint32)((uint32)0U << 8U) \ + | (uint32)((uint32)0U << 9U) \ + | (uint32)((uint32)0U << 10U)\ + | (uint32)((uint32)0U << 11U)\ | (uint32)((uint32)0U << 12U)\ | (uint32)((uint32)0U << 13U)\ | (uint32)((uint32)0U << 14U)\ Index: firmware/include/mibspi.h =================================================================== diff -u -rfe01fd0124c0c43737474781730608d55d0f0bda -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/include/mibspi.h (.../mibspi.h) (revision fe01fd0124c0c43737474781730608d55d0f0bda) +++ firmware/include/mibspi.h (.../mibspi.h) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -188,13 +188,43 @@ uint32 CONFIG_UERRCTRL; }mibspi_config_reg_t; +#define MIBSPI1_GCR1_CONFIGVALUE (0x01000000U | (uint32)((uint32)1U << 1U) | 1U) +#define MIBSPI1_INT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) +#define MIBSPI1_LVL_CONFIGVALUE ((uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) +#define MIBSPI1_PCFUN_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)1U << 17U) | (uint32)((uint32)1U << 25U)) +#define MIBSPI1_PCDIR_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 25U)) +#define MIBSPI1_PCPDR_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 25U)) +#define MIBSPI1_PCDIS_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 25U)) +#define MIBSPI1_PCPSL_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)1U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)1U << 17U) | (uint32)((uint32)1U << 25U)) +#define MIBSPI1_DELAY_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 0U)) + +#define MIBSPI1_FMT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)102U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI1_FMT1_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)102U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI1_FMT2_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)102U << 8U) | (uint32)((uint32)16U << 0U)) +#define MIBSPI1_FMT3_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)102U << 8U) | (uint32)((uint32)16U << 0U)) + +#define MIBSPI1_MIBSPIE_CONFIGVALUE 1U +#define MIBSPI1_LTGPEND_CONFIGVALUE ((uint32)((uint32)((8U+0U+0U+0U+0U+0U+0U+0U)-1U) << 8U)) + +#define MIBSPI1_TGCTRL0_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)0U << 8U))) +#define MIBSPI1_TGCTRL1_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)8U << 8U))) +#define MIBSPI1_TGCTRL2_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U) << 8U))) +#define MIBSPI1_TGCTRL3_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U) << 8U))) +#define MIBSPI1_TGCTRL4_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U) << 8U))) +#define MIBSPI1_TGCTRL5_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U) << 8U))) +#define MIBSPI1_TGCTRL6_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U+0U) << 8U))) +#define MIBSPI1_TGCTRL7_CONFIGVALUE (0xFFFF7FFFU & ((uint32)((uint32)1U << 30U) | (uint32)((uint32)0U << 29U) | (uint32)((uint32)TRG_ALWAYS << 20U) | (uint32)((uint32)TRG_DISABLED << 16U) | (uint32)((uint32)(8U+0U+0U+0U+0U+0U+0U) << 8U))) + +#define MIBSPI1_UERRCTRL_CONFIGVALUE (0x00000005U) + + #define MIBSPI3_GCR1_CONFIGVALUE (0x01000000U | (uint32)((uint32)1U << 1U) | 1U) #define MIBSPI3_INT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 6U) | (uint32)((uint32)1U << 4U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 0U)) #define MIBSPI3_LVL_CONFIGVALUE ((uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) -#define MIBSPI3_PCFUN_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U)) +#define MIBSPI3_PCFUN_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U)) #define MIBSPI3_PCDIR_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)1U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) #define MIBSPI3_PCPDR_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) #define MIBSPI3_PCDIS_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) @@ -281,6 +311,7 @@ void mibspiEnableLoopback(mibspiBASE_t *mibspi, loopBackType_t Loopbacktype); void mibspiDisableLoopback(mibspiBASE_t *mibspi); void mibspiPmodeSet(mibspiBASE_t *mibspi, mibspiPmode_t Pmode, mibspiDFMT_t DFMT); +void mibspi1GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type); void mibspi3GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type); void mibspi5GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type); Index: firmware/include/spi.h =================================================================== diff -u -r2bb447181c2519690441d81f83563d17e0882ef2 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/include/spi.h (.../spi.h) (revision 2bb447181c2519690441d81f83563d17e0882ef2) +++ firmware/include/spi.h (.../spi.h) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -157,26 +157,9 @@ -#define SPI4_GCR1_CONFIGVALUE (0x01000000U | (uint32)((uint32)1U << 1U) | 1U) -#define SPI4_INT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) -#define SPI4_LVL_CONFIGVALUE ((uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) -#define SPI4_PC0_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U)) -#define SPI4_PC1_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) -#define SPI4_PC6_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) -#define SPI4_PC7_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U)) -#define SPI4_PC8_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U)) -#define SPI4_DELAY_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 0U)) - -#define SPI4_FMT0_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)102U << 8U) | (uint32)((uint32)16U << 0U)) -#define SPI4_FMT1_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)102U << 8U) | (uint32)((uint32)16U << 0U)) -#define SPI4_FMT2_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)102U << 8U) | (uint32)((uint32)16U << 0U)) -#define SPI4_FMT3_CONFIGVALUE ((uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)0U << 22U) | (uint32)((uint32)0U << 21U) | (uint32)((uint32)0U << 20U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)102U << 8U) | (uint32)((uint32)16U << 0U)) - - - /** * @defgroup SPI SPI * @brief Serial Peripheral Interface Module. @@ -207,7 +190,6 @@ void spiDisableLoopback(spiBASE_t *spi); SpiDataStatus_t SpiTxStatus(spiBASE_t *spi); SpiDataStatus_t SpiRxStatus(spiBASE_t *spi); -void spi4GetConfigValue(spi_config_reg_t *config_reg, config_value_type_t type); /** @fn void spiNotification(spiBASE_t *spi, uint32 flags) * @brief Interrupt callback Index: firmware/source/etpwm.c =================================================================== diff -u -ref0b3f0ec00fadc50f95e0db1a6477fb4b076ea1 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/source/etpwm.c (.../etpwm.c) (revision ef0b3f0ec00fadc50f95e0db1a6477fb4b076ea1) +++ firmware/source/etpwm.c (.../etpwm.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -183,7 +183,7 @@ etpwmREG2->CMPA = 0U; /** - Setup the duty cycle for PWMB */ - etpwmREG2->CMPB = 12917U; + etpwmREG2->CMPB = 0U; /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ etpwmREG2->AQCTLA = ((uint16)((uint16)ActionQual_Set << 0U) @@ -278,7 +278,7 @@ etpwmREG3->CMPA = 0U; /** - Setup the duty cycle for PWMB */ - etpwmREG3->CMPB = 12917U; + etpwmREG3->CMPB = 0U; /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ etpwmREG3->AQCTLA = ((uint16)((uint16)ActionQual_Set << 0U) @@ -368,13 +368,13 @@ etpwmREG4->TBCTL |= (uint16)((uint16)0U << 10U); /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ - etpwmREG4->TBPRD = 1000U; + etpwmREG4->TBPRD = 102U; /** - Setup the duty cycle for PWMA */ - etpwmREG4->CMPA = 50U; + etpwmREG4->CMPA = 0U; /** - Setup the duty cycle for PWMB */ - etpwmREG4->CMPB = 50U; + etpwmREG4->CMPB = 0U; /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ etpwmREG4->AQCTLA = ((uint16)((uint16)ActionQual_Set << 0U) @@ -393,7 +393,7 @@ | (uint16)((uint16)0U << 4U) /* Source for Rising edge delay(0-PWMA, 1-PWMB) */ | (uint16)((uint16)0U << 3U) /* Enable/Disable EPWMxB invert */ | (uint16)((uint16)0U << 2U) /* Enable/Disable EPWMxA invert */ - | (uint16)((uint16)0U << 1U) /* Enable/Disable Rising Edge Delay */ + | (uint16)((uint16)1U << 1U) /* Enable/Disable Rising Edge Delay */ | (uint16)((uint16)0U << 0U); /* Enable/Disable Falling Edge Delay */ /** - Set the rising edge delay */ @@ -408,7 +408,7 @@ * -Sets the period for the subsequent pulse train */ etpwmREG4->PCCTL = (uint16)((uint16)0U << 0U) /* Enable/Disable chopper module */ - | (uint16)((uint16)1U << 1U) /* One-shot Pulse Width */ + | (uint16)((uint16)0U << 1U) /* One-shot Pulse Width */ | (uint16)((uint16)3U << 8U) /* Chopping Clock Duty Cycle */ | (uint16)((uint16)0U << 5U); /* Chopping Clock Frequency */ @@ -463,13 +463,13 @@ etpwmREG6->TBCTL |= (uint16)((uint16)0U << 10U); /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ - etpwmREG6->TBPRD = 1000U; + etpwmREG6->TBPRD = 102U; /** - Setup the duty cycle for PWMA */ - etpwmREG6->CMPA = 50U; + etpwmREG6->CMPA = 0U; /** - Setup the duty cycle for PWMB */ - etpwmREG6->CMPB = 50U; + etpwmREG6->CMPB = 0U; /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ @@ -489,7 +489,7 @@ | (uint16)((uint16)0U << 4U) /* Source for Rising edge delay(0-PWMA, 1-PWMB) */ | (uint16)((uint16)0U << 3U) /* Enable/Disable EPWMxB invert */ | (uint16)((uint16)0U << 2U) /* Enable/Disable EPWMxA invert */ - | (uint16)((uint16)0U << 1U) /* Enable/Disable Rising Edge Delay */ + | (uint16)((uint16)1U << 1U) /* Enable/Disable Rising Edge Delay */ | (uint16)((uint16)0U << 0U); /* Enable/Disable Falling Edge Delay */ /** - Set the rising edge delay */ @@ -504,7 +504,7 @@ * -Sets the period for the subsequent pulse train */ etpwmREG6->PCCTL = (uint16)((uint16)0U << 0U) /* Enable/Disable chopper module */ - | (uint16)((uint16)1U << 1U) /* One-shot Pulse Width */ + | (uint16)((uint16)0U << 1U) /* One-shot Pulse Width */ | (uint16)((uint16)3U << 8U) /* Chopping Clock Duty Cycle */ | (uint16)((uint16)0U << 5U); /* Chopping Clock Frequency */ @@ -561,13 +561,13 @@ etpwmREG7->TBCTL |= (uint16)((uint16)0U << 10U); /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ - etpwmREG7->TBPRD = 1000U; + etpwmREG7->TBPRD = 102U; /** - Setup the duty cycle for PWMA */ - etpwmREG7->CMPA = 50U; + etpwmREG7->CMPA = 0U; /** - Setup the duty cycle for PWMB */ - etpwmREG7->CMPB = 50U; + etpwmREG7->CMPB = 0U; /** - Force EPWMxA output high when counter reaches zero and low when counter reaches Compare A value */ @@ -587,7 +587,7 @@ | (uint16)((uint16)0U << 4U) /* Source for Rising edge delay(0-PWMA, 1-PWMB) */ | (uint16)((uint16)0U << 3U) /* Enable/Disable EPWMxB invert */ | (uint16)((uint16)0U << 2U) /* Enable/Disable EPWMxA invert */ - | (uint16)((uint16)0U << 1U) /* Enable/Disable Rising Edge Delay */ + | (uint16)((uint16)1U << 1U) /* Enable/Disable Rising Edge Delay */ | (uint16)((uint16)0U << 0U); /* Enable/Disable Falling Edge Delay */ /** - Set the rising edge delay */ @@ -602,7 +602,7 @@ * -Sets the period for the subsequent pulse train */ etpwmREG7->PCCTL = (uint16)((uint16)0U << 0U) /* Enable/Disable chopper module */ - | (uint16)((uint16)1U << 1U) /* One-shot Pulse Width */ + | (uint16)((uint16)0U << 1U) /* One-shot Pulse Width */ | (uint16)((uint16)3U << 8U) /* Chopping Clock Duty Cycle */ | (uint16)((uint16)0U << 5U); /* Chopping Clock Frequency */ Index: firmware/source/gio.c =================================================================== diff -u -ref0b3f0ec00fadc50f95e0db1a6477fb4b076ea1 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/source/gio.c (.../gio.c) (revision ef0b3f0ec00fadc50f95e0db1a6477fb4b076ea1) +++ firmware/source/gio.c (.../gio.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -221,18 +221,18 @@ gioREG->FLG = 0xFFU; /** - enable interrupts */ - gioREG->ENASET = (uint32)((uint32)1U << 0U) /* Bit 0 */ - | (uint32)((uint32)1U << 1U) /* Bit 1 */ + gioREG->ENASET = (uint32)((uint32)0U << 0U) /* Bit 0 */ + | (uint32)((uint32)0U << 1U) /* Bit 1 */ | (uint32)((uint32)0U << 2U) /* Bit 2 */ | (uint32)((uint32)0U << 3U) /* Bit 3 */ | (uint32)((uint32)0U << 4U) /* Bit 4 */ | (uint32)((uint32)0U << 5U) /* Bit 5 */ | (uint32)((uint32)0U << 6U) /* Bit 6 */ | (uint32)((uint32)0U << 7U) /* Bit 7 */ - | (uint32)((uint32)1U << 8U) /* Bit 8 */ - | (uint32)((uint32)1U << 9U) /* Bit 9 */ - | (uint32)((uint32)1U << 10U) /* Bit 10 */ - | (uint32)((uint32)1U << 11U) /* Bit 11 */ + | (uint32)((uint32)0U << 8U) /* Bit 8 */ + | (uint32)((uint32)0U << 9U) /* Bit 9 */ + | (uint32)((uint32)0U << 10U) /* Bit 10 */ + | (uint32)((uint32)0U << 11U) /* Bit 11 */ | (uint32)((uint32)0U << 12U) /* Bit 12 */ | (uint32)((uint32)0U << 13U) /* Bit 13 */ | (uint32)((uint32)0U << 14U) /* Bit 14 */ Index: firmware/source/mibspi.c =================================================================== diff -u -rfe01fd0124c0c43737474781730608d55d0f0bda -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/source/mibspi.c (.../mibspi.c) (revision fe01fd0124c0c43737474781730608d55d0f0bda) +++ firmware/source/mibspi.c (.../mibspi.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -64,7 +64,489 @@ /* USER CODE END */ + /** @b initialize @b MIBSPI1 */ + /** bring MIBSPI out of reset */ + mibspiREG1->GCR0 = 0U; + mibspiREG1->GCR0 = 1U; + + /** enable MIBSPI1 multibuffered mode and enable buffer RAM */ + mibspiREG1->MIBSPIE = (mibspiREG1->MIBSPIE & 0xFFFFFFFEU) | 1U; + + /** MIBSPI1 master mode and clock configuration */ + mibspiREG1->GCR1 = (mibspiREG1->GCR1 & 0xFFFFFFFCU) | ((uint32)((uint32)1U << 1U) /* CLOKMOD */ + | 1U); /* MASTER */ + + /** MIBSPI1 enable pin configuration */ + mibspiREG1->INT0 = (mibspiREG1->INT0 & 0xFEFFFFFFU) | (uint32)((uint32)0U << 24U); /* ENABLE HIGHZ */ + + /** - Delays */ + mibspiREG1->DELAY = (uint32)((uint32)0U << 24U) /* C2TDELAY */ + | (uint32)((uint32)0U << 16U) /* T2CDELAY */ + | (uint32)((uint32)0U << 8U) /* T2EDELAY */ + | (uint32)((uint32)0U << 0U); /* C2EDELAY */ + + /** - Data Format 0 */ + mibspiREG1->FMT0 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)102U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 1 */ + mibspiREG1->FMT1 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)102U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 2 */ + mibspiREG1->FMT2 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)102U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Data Format 3 */ + mibspiREG1->FMT3 = (uint32)((uint32)0U << 24U) /* wdelay */ + | (uint32)((uint32)0U << 23U) /* parity Polarity */ + | (uint32)((uint32)0U << 22U) /* parity enable */ + | (uint32)((uint32)0U << 21U) /* wait on enable */ + | (uint32)((uint32)0U << 20U) /* shift direction */ + | (uint32)((uint32)0U << 17U) /* clock polarity */ + | (uint32)((uint32)0U << 16U) /* clock phase */ + | (uint32)((uint32)102U << 8U) /* baudrate prescale */ + | (uint32)((uint32)16U << 0U); /* data word length */ + + /** - Default Chip Select */ + mibspiREG1->DEF = (uint32)(0xFFU); + + /** - wait for buffer initialization complete before accessing MibSPI registers */ + /*SAFETYMCUSW 28 D MR:NA "Hardware status bit read check" */ + while ((mibspiREG1->FLG & 0x01000000U) != 0U) + { + } /* Wait */ + + /** enable MIBSPI RAM Parity */ + mibspiREG1->UERRCTRL = (mibspiREG1->UERRCTRL & 0xFFFFFFF0U) | (0x00000005U); + + /** - initialize transfer groups */ + mibspiREG1->TGCTRL[0U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)0U << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[1U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)8U << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[2U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U) << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[3U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U) << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[4U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[5U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[6U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U+0U) << 8U); /* start buffer */ + + mibspiREG1->TGCTRL[7U] = (uint32)((uint32)1U << 30U) /* oneshot */ + | (uint32)((uint32)0U << 29U) /* pcurrent reset */ + | (uint32)((uint32)TRG_ALWAYS << 20U) /* trigger event */ + | (uint32)((uint32)TRG_DISABLED << 16U) /* trigger source */ + | (uint32)((uint32)(8U+0U+0U+0U+0U+0U+0U) << 8U); /* start buffer */ + + + mibspiREG1->TGCTRL[8U] = (uint32)(8U+0U+0U+0U+0U+0U+0U+0U) << 8U; + + mibspiREG1->LTGPEND = (mibspiREG1->LTGPEND & 0xFFFF00FFU) | (uint32)((uint32)((8U+0U+0U+0U+0U+0U+0U+0U)-1U) << 8U); + + /** - initialize buffer ram */ + { + i = 0U; + +#if (8U > 0U) + { + +#if (8U > 1U) + + while (i < (8U-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_0)) & (uint16)0x00FFU); /* chip select */ + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_0)) & (uint16)0x00FFU); /* chip select */ + + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_1)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_1)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_2)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_2)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_3)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_3)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_4)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_4)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_5)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_5)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_6)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_6)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + +#if (0U > 0U) + { + +#if (0U > 1U) + + while (i < ((8U+0U+0U+0U+0U+0U+0U+0U)-1U)) + { + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 11U) /* lock transmission */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_7)) & (uint16)0x00FFU); /* chip select */ + + i++; + } +#endif + mibspiRAM1->tx[i].control = (uint16)((uint16)4U << 13U) /* buffer mode */ + | (uint16)((uint16)0U << 12U) /* chip select hold */ + | (uint16)((uint16)0U << 10U) /* enable WDELAY */ + | (uint16)((uint16)0U << 8U) /* data format */ + /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_7)) & (uint16)0x00FFU); /* chip select */ + i++; + } +#endif + } + + /** - set interrupt levels */ + mibspiREG1->LVL = (uint32)((uint32)0U << 9U) /* TXINT */ + | (uint32)((uint32)0U << 8U) /* RXINT */ + | (uint32)((uint32)0U << 6U) /* OVRNINT */ + | (uint32)((uint32)0U << 4U) /* BITERR */ + | (uint32)((uint32)0U << 3U) /* DESYNC */ + | (uint32)((uint32)0U << 2U) /* PARERR */ + | (uint32)((uint32)0U << 1U) /* TIMEOUT */ + | (uint32)((uint32)0U << 0U); /* DLENERR */ + + /** - clear any pending interrupts */ + mibspiREG1->FLG |= 0xFFFFU; + + /** - enable interrupts */ + mibspiREG1->INT0 = (mibspiREG1->INT0 & 0xFFFF0000U) + | (uint32)((uint32)0U << 9U) /* TXINT */ + | (uint32)((uint32)0U << 8U) /* RXINT */ + | (uint32)((uint32)0U << 6U) /* OVRNINT */ + | (uint32)((uint32)0U << 4U) /* BITERR */ + | (uint32)((uint32)0U << 3U) /* DESYNC */ + | (uint32)((uint32)0U << 2U) /* PARERR */ + | (uint32)((uint32)0U << 1U) /* TIMEOUT */ + | (uint32)((uint32)0U << 0U); /* DLENERR */ + + /** @b initialize @b MIBSPI1 @b Port */ + + /** - MIBSPI1 Port output values */ + mibspiREG1->PC3 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)1U << 4U) /* SCS[4] */ + | (uint32)((uint32)1U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 25U); /* SOMI[1] */ + + /** - MIBSPI1 Port direction */ + mibspiREG1->PC1 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 4U) /* SCS[4] */ + | (uint32)((uint32)1U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 25U); /* SOMI[1] */ + + /** - MIBSPI1 Port open drain enable */ + mibspiREG1->PC6 = (uint32)((uint32)0U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 4U) /* SCS[4] */ + | (uint32)((uint32)0U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 25U); /* SOMI[1] */ + + /** - MIBSPI1 Port pullup / pulldown selection */ + mibspiREG1->PC8 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ + | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)1U << 3U) /* SCS[3] */ + | (uint32)((uint32)1U << 4U) /* SCS[4] */ + | (uint32)((uint32)1U << 5U) /* SCS[5] */ + | (uint32)((uint32)1U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)1U << 10U) /* SIMO[0] */ + | (uint32)((uint32)1U << 11U) /* SOMI[0] */ + | (uint32)((uint32)1U << 17U) /* SIMO[1] */ + | (uint32)((uint32)1U << 25U); /* SOMI[1] */ + + /** - MIBSPI1 Port pullup / pulldown enable*/ + mibspiREG1->PC7 = (uint32)((uint32)0U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 4U) /* SCS[4] */ + | (uint32)((uint32)0U << 5U) /* SCS[5] */ + | (uint32)((uint32)0U << 8U) /* ENA */ + | (uint32)((uint32)0U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO[0] */ + | (uint32)((uint32)0U << 11U) /* SOMI[0] */ + | (uint32)((uint32)0U << 17U) /* SIMO[1] */ + | (uint32)((uint32)0U << 25U); /* SOMI[1] */ + + /* MIBSPI1 set all pins to functional */ + mibspiREG1->PC0 = (uint32)((uint32)1U << 0U) /* SCS[0] */ + | (uint32)((uint32)0U << 1U) /* SCS[1] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 3U) /* SCS[3] */ + | (uint32)((uint32)0U << 4U) /* SCS[4] */ + | (uint32)((uint32)0U << 5U) /* SCS[5] */ + | (uint32)((uint32)1U << 8U) /* ENA */ + | (uint32)((uint32)1U << 9U) /* CLK */ + | (uint32)((uint32)0U << 10U) /* SIMO[0] */ + | (uint32)((uint32)1U << 11U) /* SOMI[0] */ + | (uint32)((uint32)1U << 17U) /* SIMO[1] */ + | (uint32)((uint32)1U << 25U); /* SOMI[1] */ + + /** - Finally start MIBSPI1 */ + mibspiREG1->GCR1 = (mibspiREG1->GCR1 & 0xFEFFFFFFU) | 0x01000000U; + + + /** @b initialize @b MIBSPI3 */ /** bring MIBSPI out of reset */ @@ -214,7 +696,7 @@ | (uint16)((uint16)0U << 11U) /* lock transmission */ | (uint16)((uint16)0U << 8U) /* data format */ /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ - | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_0)) & (uint16)0x00FFU); /* chip select */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_1)) & (uint16)0x00FFU); /* chip select */ i++; } #endif @@ -223,7 +705,7 @@ | (uint16)((uint16)0U << 10U) /* enable WDELAY */ | (uint16)((uint16)0U << 8U) /* data format */ /*SAFETYMCUSW 334 S MR:10.5 "LDRA Tool issue" */ - | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_0)) & (uint16)0x00FFU); /* chip select */ + | ((uint16)(~((uint16)0xFFU ^ (uint16)CS_1)) & (uint16)0x00FFU); /* chip select */ i++; @@ -523,8 +1005,8 @@ /* MIBSPI3 set all pins to functional */ - mibspiREG3->PC0 = (uint32)((uint32)1U << 0U) /* SCS[0] */ - | (uint32)((uint32)0U << 1U) /* SCS[1] */ + mibspiREG3->PC0 = (uint32)((uint32)0U << 0U) /* SCS[0] */ + | (uint32)((uint32)1U << 1U) /* SCS[1] */ | (uint32)((uint32)0U << 2U) /* SCS[2] */ | (uint32)((uint32)0U << 3U) /* SCS[3] */ | (uint32)((uint32)0U << 4U) /* SCS[4] */ @@ -1330,6 +1812,82 @@ /* USER CODE END */ } +/** @fn void mibspi1GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type) +* @brief Get the initial or current values of the configuration registers +* +* @param[in] *config_reg: pointer to the struct to which the initial or current +* value of the configuration registers need to be stored +* @param[in] type: whether initial or current value of the configuration registers need to be stored +* - InitialValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* - CurrentValue: initial value of the configuration registers will be stored +* in the struct pointed by config_reg +* +* This function will copy the initial or current value (depending on the parameter 'type') +* of the configuration registers to the struct pointed by config_reg +* +*/ +/* SourceId : MIBSPI_SourceId_012 */ +/* DesignId : MIBSPI_DesignId_012 */ +/* Requirements : HL_SR166 */ +void mibspi1GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type) +{ + if (type == InitialValue) + { + config_reg->CONFIG_GCR1 = MIBSPI1_GCR1_CONFIGVALUE; + config_reg->CONFIG_INT0 = MIBSPI1_INT0_CONFIGVALUE; + config_reg->CONFIG_LVL = MIBSPI1_LVL_CONFIGVALUE; + config_reg->CONFIG_PCFUN = MIBSPI1_PCFUN_CONFIGVALUE; + config_reg->CONFIG_PCDIR = MIBSPI1_PCDIR_CONFIGVALUE; + config_reg->CONFIG_PCPDR = MIBSPI1_PCPDR_CONFIGVALUE; + config_reg->CONFIG_PCDIS = MIBSPI1_PCDIS_CONFIGVALUE; + config_reg->CONFIG_PCPSL = MIBSPI1_PCPSL_CONFIGVALUE; + config_reg->CONFIG_DELAY = MIBSPI1_DELAY_CONFIGVALUE; + config_reg->CONFIG_FMT0 = MIBSPI1_FMT0_CONFIGVALUE; + config_reg->CONFIG_FMT1 = MIBSPI1_FMT1_CONFIGVALUE; + config_reg->CONFIG_FMT2 = MIBSPI1_FMT2_CONFIGVALUE; + config_reg->CONFIG_FMT3 = MIBSPI1_FMT3_CONFIGVALUE; + config_reg->CONFIG_MIBSPIE = MIBSPI1_MIBSPIE_CONFIGVALUE; + config_reg->CONFIG_LTGPEND = MIBSPI1_LTGPEND_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[0U] = MIBSPI1_TGCTRL0_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[1U] = MIBSPI1_TGCTRL1_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[2U] = MIBSPI1_TGCTRL2_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[3U] = MIBSPI1_TGCTRL3_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[4U] = MIBSPI1_TGCTRL4_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[5U] = MIBSPI1_TGCTRL5_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[6U] = MIBSPI1_TGCTRL6_CONFIGVALUE; + config_reg->CONFIG_TGCTRL[7U] = MIBSPI1_TGCTRL7_CONFIGVALUE; + config_reg->CONFIG_UERRCTRL = MIBSPI1_UERRCTRL_CONFIGVALUE; + } + else + { + /*SAFETYMCUSW 134 S MR:12.2 "LDRA Tool issue" */ + config_reg->CONFIG_GCR1 = mibspiREG1->GCR1; + config_reg->CONFIG_INT0 = mibspiREG1->INT0; + config_reg->CONFIG_LVL = mibspiREG1->LVL; + config_reg->CONFIG_PCFUN = mibspiREG1->PC0; + config_reg->CONFIG_PCDIR = mibspiREG1->PC1; + config_reg->CONFIG_PCPDR = mibspiREG1->PC6; + config_reg->CONFIG_PCDIS = mibspiREG1->PC7; + config_reg->CONFIG_PCPSL = mibspiREG1->PC8; + config_reg->CONFIG_DELAY = mibspiREG1->DELAY; + config_reg->CONFIG_FMT0 = mibspiREG1->FMT0; + config_reg->CONFIG_FMT1 = mibspiREG1->FMT1; + config_reg->CONFIG_FMT2 = mibspiREG1->FMT2; + config_reg->CONFIG_FMT3 = mibspiREG1->FMT3; + config_reg->CONFIG_MIBSPIE = mibspiREG1->MIBSPIE; + config_reg->CONFIG_LTGPEND = mibspiREG1->LTGPEND; + config_reg->CONFIG_TGCTRL[0U] = mibspiREG1->TGCTRL[0U]; + config_reg->CONFIG_TGCTRL[1U] = mibspiREG1->TGCTRL[1U]; + config_reg->CONFIG_TGCTRL[2U] = mibspiREG1->TGCTRL[2U]; + config_reg->CONFIG_TGCTRL[3U] = mibspiREG1->TGCTRL[3U]; + config_reg->CONFIG_TGCTRL[4U] = mibspiREG1->TGCTRL[4U]; + config_reg->CONFIG_TGCTRL[5U] = mibspiREG1->TGCTRL[5U]; + config_reg->CONFIG_TGCTRL[6U] = mibspiREG1->TGCTRL[6U]; + config_reg->CONFIG_TGCTRL[7U] = mibspiREG1->TGCTRL[7U]; + config_reg->CONFIG_UERRCTRL = mibspiREG1->UERRCTRL; + } +} /** @fn void mibspi3GetConfigValue(mibspi_config_reg_t *config_reg, config_value_type_t type) * @brief Get the initial or current values of the configuration registers @@ -1490,3 +2048,4 @@ + Index: firmware/source/notification.c =================================================================== diff -u -r2bb447181c2519690441d81f83563d17e0882ef2 -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/source/notification.c (.../notification.c) (revision 2bb447181c2519690441d81f83563d17e0882ef2) +++ firmware/source/notification.c (.../notification.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -55,7 +55,6 @@ #include "gio.h" #include "mibspi.h" #include "sci.h" -#include "spi.h" #include "rti.h" #include "etpwm.h" #include "sys_dma.h" @@ -188,29 +187,9 @@ /* USER CODE BEGIN (30) */ /* USER CODE END */ -#pragma WEAK(spiNotification) -void spiNotification(spiBASE_t *spi, uint32 flags) -{ -/* enter user code between the USER CODE BEGIN and USER CODE END. */ -/* USER CODE BEGIN (31) */ -/* USER CODE END */ -} -/* USER CODE BEGIN (32) */ -/* USER CODE END */ -#pragma WEAK(spiEndNotification) -void spiEndNotification(spiBASE_t *spi) -{ -/* enter user code between the USER CODE BEGIN and USER CODE END. */ -/* USER CODE BEGIN (33) */ -/* USER CODE END */ -} -/* USER CODE BEGIN (34) */ -/* USER CODE END */ - - /* USER CODE BEGIN (43) */ /* USER CODE END */ Index: firmware/source/pinmux.c =================================================================== diff -u -rfe01fd0124c0c43737474781730608d55d0f0bda -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/source/pinmux.c (.../pinmux.c) (revision fe01fd0124c0c43737474781730608d55d0f0bda) +++ firmware/source/pinmux.c (.../pinmux.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -178,15 +178,15 @@ pinMuxReg->PINMMR4 = PINMUX_PIN_22_ETPWM2A | PINMUX_PIN_23_HET1_01 | PINMUX_PIN_24_HET1_03; - pinMuxReg->PINMMR5 = PINMUX_PIN_25_SPI4CLK | PINMUX_PIN_30_ETPWM3A | PINMUX_PIN_31_HET1_05; + pinMuxReg->PINMMR5 = PINMUX_PIN_25_HET1_0 | PINMUX_PIN_30_ETPWM3A | PINMUX_PIN_31_HET1_05; pinMuxReg->PINMMR6 = PINMUX_PIN_33_HET1_07 | PINMUX_PIN_35_ETPWM7A; pinMuxReg->PINMMR7 = PINMUX_PIN_37_MIBSPI3NCS_1 | PINMUX_PIN_38_SCIRX; pinMuxReg->PINMMR8 = PINMUX_PIN_39_SCITX | PINMUX_PIN_40_MIBSPI1NCS_2 | PINMUX_PIN_41_HET1_15; - pinMuxReg->PINMMR9 = ((~(pinMuxReg->PINMMR9 >> 18U) & 0x00000001U ) << 18U) | PINMUX_PIN_54_MIBSPI3NENA | PINMUX_PIN_55_MIBSPI3NCS_0; + pinMuxReg->PINMMR9 = ((~(pinMuxReg->PINMMR9 >> 18U) & 0x00000001U ) << 18U) | PINMUX_PIN_54_MIBSPI3NCS_5 | PINMUX_PIN_55_MIBSPI3NCS_0; pinMuxReg->PINMMR10 = PINMUX_PIN_86_AD1EVT; Fisheye: Tag a74a984a7059f75d86ad87d6d9499bd8f94cc976 refers to a dead (removed) revision in file `firmware/source/spi.c'. Fisheye: No comparison available. Pass `N' to diff? Index: firmware/source/sys_main.c =================================================================== diff -u -r1c80d60fe6a95297a8a8033a3c7eade53e72779a -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 --- firmware/source/sys_main.c (.../sys_main.c) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) +++ firmware/source/sys_main.c (.../sys_main.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976) @@ -67,6 +67,7 @@ #include "CommBuffers.h" #include "CPLD.h" #include "DialInFlow.h" +#include "DialOutFlow.h" #include "Dialysis.h" #include "FPGA.h" #include "InternalADC.h" @@ -173,6 +174,7 @@ initPresOccl(); initBloodFlow(); initDialInFlow(); + initDialOutFlow(); initDialysis(); initTreatmentStop(); initOperationModes();