EPC9143 300 W 16th Brick DC/DC Module Reference Design
app_fault_monitor.c
1 /*
2  * File: app_fault_monitor.c
3  * Author: M91406
4  *
5  * Created on March 12, 2020, 11:38 AM
6  */
7 
8 #include <stddef.h>
9 
10 #include "config/hal.h"
11 #include "drivers/drv_fault_handler.h"
12 #include "power_control/app_power_control.h"
13 
33 // Define fault objects
34 volatile struct FAULT_OBJECT_s fltobj_BuckUVLO;
35 volatile struct FAULT_OBJECT_s fltobj_BuckOVLO;
36 volatile struct FAULT_OBJECT_s fltobj_BuckOCP;
37 volatile struct FAULT_OBJECT_s fltobj_BuckRegErr;
38 
39 // Declare private function prototypes
40 volatile uint16_t __attribute__((always_inline)) uvlo_FaultInitialize(void);
41 volatile uint16_t __attribute__((always_inline)) ovlo_FaultInitialize(void);
42 volatile uint16_t __attribute__((always_inline)) ocp_FaultInitialize(void);
43 volatile uint16_t __attribute__((always_inline)) regerr_FaultInitialize(void);
44 
45 
46 
63 volatile uint16_t appFaultMonitor_Execute(void)
64 {
65  volatile uint16_t retval=1;
66  static bool pre_fault_active=false;
67 
68  // Call fault handler
73 
74  // Combine individual fault bits to a common fault indicator
75  buck.status.bits.fault_active = (bool) (
80  );
81 
82  // If system has recovered from a global fault condition,
83  // trigger fault recovery function
84  if ((pre_fault_active) && (!buck.status.bits.fault_active))
85  { retval = appPowerSupply_Resume(); }
86 
87  // Track global fault bit transitions
88  pre_fault_active = buck.status.bits.fault_active;
89 
90 
91  return (retval);
92 }
93 
94 
107 volatile uint16_t appFaultMonitor_Initialize(void)
108 {
109  volatile uint16_t retval=1;
110 
111  // Initialize user fault objects
112  retval &= uvlo_FaultInitialize();
113  retval &= ovlo_FaultInitialize();
114  retval &= ocp_FaultInitialize();
115  retval &= regerr_FaultInitialize();
116 
117  return(retval);
118 }
119 
120 
134 volatile uint16_t appFaultMonitor_Dispose(void)
135 {
136  fltobj_BuckUVLO = fltObjectClear; // Delete Under Voltage Lock Out object
137  fltobj_BuckOVLO = fltObjectClear; // Delete Over Voltage Lock Out object
138  fltobj_BuckRegErr = fltObjectClear; // Delete Regulation Error object
139  fltobj_BuckOCP = fltObjectClear; // Delete Over Current Protection object
140 
141  return(1);
142 }
143 
144 
145 /* *********************************************************************************
146  * PRIVATE FUNCTIONS
147  * ********************************************************************************/
148 
149 
163 volatile uint16_t uvlo_FaultInitialize(void)
164 {
165  volatile uint16_t retval=1;
166 
167  // Initialize UVLO fault object
168  fltobj_BuckUVLO = fltObjectClear; // Pre-initialize fault object
169 
170  fltobj_BuckUVLO.SourceObject.ptrObject = &buck.data.v_in; // Set pointer to variable to monitor
171  fltobj_BuckUVLO.SourceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
172  fltobj_BuckUVLO.ReferenceObject.ptrObject = NULL; // Clear pointer to "compare against" variable
173  fltobj_BuckUVLO.ReferenceObject.bitMask = 0xFFFF; // Clear pointer to "compare against" variable
174 
175  fltobj_BuckUVLO.Status.bits.CompareType = FLTCMP_LESS_THAN; // Select Compare-Type
176 
178  fltobj_BuckUVLO.TripResponse.eventThreshold = BUCK_UVLO_TDLY; // Set counter level at which a FAULT condition will be tripped
179  fltobj_BuckUVLO.TripResponse.ptrResponseFunction = &appPowerSupply_Suspend; // Set pointer to user-function which should be called when a FAULT is tripped
180 
182  fltobj_BuckUVLO.RecoveryResponse.eventThreshold = BUCK_UVLO_RDLY; // Set counter level at which a FAULT condition will be cleared
183  fltobj_BuckUVLO.RecoveryResponse.ptrResponseFunction = NULL; // Clear recovery function pointer
184 
185  fltobj_BuckUVLO.Counter = 0; // Clear fault event counter
186  fltobj_BuckUVLO.Status.bits.FaultActive = true; // Set fault condition flag (must be cleared by fault check)
187  fltobj_BuckUVLO.Status.bits.FaultStatus = true; // Set fault flag (must be cleared by fault check)
188  fltobj_BuckUVLO.Status.bits.Enabled = true; // Enable fault checks
189 
190  return(retval);
191 
192 }
193 
194 
208 volatile uint16_t ovlo_FaultInitialize(void)
209 {
210  volatile uint16_t retval=1;
211 
212  // Initialize OVLO fault object
213  fltobj_BuckOVLO = fltObjectClear; // Pre-initialize fault object
214 
215  fltobj_BuckOVLO.SourceObject.ptrObject = &buck.data.v_in; // Set pointer to variable to monitor
216  fltobj_BuckOVLO.SourceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
217  fltobj_BuckOVLO.ReferenceObject.ptrObject = NULL; // Clear pointer to "compare against" variable
218  fltobj_BuckOVLO.ReferenceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
219  fltobj_BuckOVLO.Status.bits.CompareType = FLTCMP_GREATER_THAN; // Select Compare-Type
220 
222  fltobj_BuckOVLO.TripResponse.eventThreshold = BUCK_OVLO_TDLY; // Set counter level at which a FAULT condition will be tripped
223  fltobj_BuckOVLO.TripResponse.ptrResponseFunction = &appPowerSupply_Suspend; // Set pointer to user-function which should be called when a FAULT is tripped
224 
226  fltobj_BuckOVLO.RecoveryResponse.eventThreshold = BUCK_OVLO_RDLY; // Set counter level at which a FAULT condition will be cleared
227  fltobj_BuckOVLO.RecoveryResponse.ptrResponseFunction = NULL; // Clear recovery function pointer
228 
229  fltobj_BuckOVLO.Counter = 0; // Clear fault event counter
230  fltobj_BuckOVLO.Status.bits.FaultActive = true; // Set fault condition flag (must be cleared by fault check)
231  fltobj_BuckOVLO.Status.bits.FaultStatus = true; // Set fault flag (must be cleared by fault check)
232  fltobj_BuckOVLO.Status.bits.Enabled = true; // Enable fault checks
233 
234  return(retval);
235 
236 }
237 
238 
251 volatile uint16_t regerr_FaultInitialize(void)
252 {
253  volatile uint16_t retval=1;
254 
255  // Initialize regulation error fault object
256  fltobj_BuckRegErr = fltObjectClear; // Pre-initialize fault object
257 
258  fltobj_BuckRegErr.SourceObject.ptrObject = &buck.data.v_out; // Set pointer to variable to monitor
259  fltobj_BuckRegErr.SourceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
260  fltobj_BuckRegErr.ReferenceObject.ptrObject = &buck.set_values.v_ref; // Set pointer to "compare against" variable
261  fltobj_BuckRegErr.ReferenceObject.bitMask = 0xFFFF; // Compare all bits of Reference (no bit filter)
262  fltobj_BuckRegErr.Status.bits.CompareType = FLTCMP_GREATER_THAN; // Select Compare-Type
263 
265  fltobj_BuckRegErr.TripResponse.eventThreshold = BUCK_REGERR_TDLY; // Set counter level at which a FAULT condition will be tripped
266  fltobj_BuckRegErr.TripResponse.ptrResponseFunction = &appPowerSupply_Suspend; // Set pointer to user-function which should be called when a FAULT is tripped
267 
269  fltobj_BuckRegErr.RecoveryResponse.eventThreshold = BUCK_REGERR_RDLY; // Set counter level at which a FAULT condition will be cleared
270  fltobj_BuckRegErr.RecoveryResponse.ptrResponseFunction = NULL; // Clear recovery function pointer
271 
272  fltobj_BuckRegErr.Counter = 0; // Clear fault event counter
273  fltobj_BuckRegErr.Status.bits.FaultActive = false; // Set fault condition flag (must be cleared by fault check)
274  fltobj_BuckRegErr.Status.bits.FaultStatus = false; // Set fault flag (must be cleared by fault check)
275  fltobj_BuckRegErr.Status.bits.Enabled = false; // Disable fault checks at startup
276 
277  return(retval);
278 
279 }
280 
281 
294 volatile uint16_t ocp_FaultInitialize(void)
295 {
296  volatile uint16_t retval=1;
297 
298  // Initialize OCP fault object
299  fltobj_BuckOCP = fltObjectClear; // Pre-initialize fault object
300 
301  fltobj_BuckOCP.SourceObject.ptrObject = &buck.data.i_out; // Set pointer to variable to monitor
302  fltobj_BuckOCP.SourceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
303  fltobj_BuckOCP.ReferenceObject.ptrObject = NULL; // Clear pointer to "compare against" variable
304  fltobj_BuckOCP.ReferenceObject.bitMask = 0xFFFF; // Compare all bits of SOURCE (no bit filter)
305  fltobj_BuckOCP.Status.bits.CompareType = FLTCMP_GREATER_THAN; // Select Compare-Type
306 
307  fltobj_BuckOCP.TripResponse.compareThreshold = BUCK_IOUT_OCL; // Set fault trip level
308  fltobj_BuckOCP.TripResponse.eventThreshold = BUCK_OCP_TDLY; // Set counter level at which a FAULT condition will be tripped
309  fltobj_BuckOCP.TripResponse.ptrResponseFunction = &appPowerSupply_Suspend; // Set pointer to user-function which should be called when a FAULT is tripped
310 
312  fltobj_BuckOCP.RecoveryResponse.eventThreshold = BUCK_OCP_RDLY; // Set counter level at which a FAULT condition will be cleared
313  fltobj_BuckOCP.RecoveryResponse.ptrResponseFunction = NULL; // Clear recovery function pointer
314 
315  fltobj_BuckOCP.Counter = 0; // Clear fault event counter
316  fltobj_BuckOCP.Status.bits.FaultActive = true; // Set fault condition flag (must be cleared by fault check)
317  fltobj_BuckOCP.Status.bits.FaultStatus = true; // Set fault flag (must be cleared by fault check)
318  fltobj_BuckOCP.Status.bits.Enabled = true; // Enable fault checks
319 
320  return(retval);
321 
322 }
323 
324 // end of file
BUCK_VIN_OVLO_RELEASE
#define BUCK_VIN_OVLO_RELEASE
Over Voltage LOck Out voltage.
Definition: epc9143_r40_hwdescr.h:461
FLT_COMPARE_OBJECT_s::ptrObject
volatile uint16_t * ptrObject
Pointer to register or variable which should be monitored.
Definition: drv_fault_handler.h:106
uvlo_FaultInitialize
volatile uint16_t uvlo_FaultInitialize(void)
Initializes the user-defined fault objects for under-voltage lockout.
Definition: app_fault_monitor.c:163
BUCK_VOUT_DEV_RELEASE
#define BUCK_VOUT_DEV_RELEASE
Macro calculating the integer number equivalent of the maximum allowed output voltage deviation given...
Definition: epc9143_r40_hwdescr.h:532
appFaultMonitor_Dispose
volatile uint16_t appFaultMonitor_Dispose(void)
Function clearing all fault object settings.
Definition: app_fault_monitor.c:134
FLT_OBJECT_STATUS_s::Enabled
volatile bool Enabled
Bit 15: Control bit enabling/disabling monitoring of the fault object.
Definition: drv_fault_handler.h:89
FAULT_OBJECT_s::Counter
volatile uint16_t Counter
Fault event counter (controlled by FAULT HANDLER)
Definition: drv_fault_handler.h:134
BUCK_CONVERTER_DATA_s::i_out
volatile uint16_t i_out
BUCK common output current.
Definition: dev_buck_typedef.h:299
FAULT_OBJECT_s::RecoveryResponse
volatile struct FLT_EVENT_RESPONSE_s RecoveryResponse
Settings defining the fault recovery event.
Definition: drv_fault_handler.h:138
BUCK_REGERR_RDLY
#define BUCK_REGERR_RDLY
regulation error recovery delay conversion macro
Definition: epc9143_r40_hwdescr.h:786
regerr_FaultInitialize
volatile uint16_t regerr_FaultInitialize(void)
Initializes the user-defined fault objects for regulation error.
Definition: app_fault_monitor.c:251
BUCK_VIN_UVLO_TRIP
#define BUCK_VIN_UVLO_TRIP
Under Voltage LOck Out voltage.
Definition: epc9143_r40_hwdescr.h:458
FLT_OBJECT_STATUS_s::FaultStatus
volatile bool FaultStatus
Bit 0: Flag bit indicating if FAULT has been tripped.
Definition: drv_fault_handler.h:84
appFaultMonitor_Execute
volatile uint16_t appFaultMonitor_Execute(void)
Application wide fault object monitoring routine.
Definition: app_fault_monitor.c:40
fltobj_BuckRegErr
volatile struct FAULT_OBJECT_s fltobj_BuckRegErr
Regulation Error Fault Object.
Definition: app_fault_monitor.c:37
BUCK_UVLO_TDLY
#define BUCK_UVLO_TDLY
Conversion Macros of Fault Response Timing Settings.
Definition: epc9143_r40_hwdescr.h:781
fltobj_BuckUVLO
volatile struct FAULT_OBJECT_s fltobj_BuckUVLO
Under Voltage Lock Out Fault Object.
Definition: app_fault_monitor.c:34
BUCK_IOUT_OCL
#define BUCK_IOUT_OCL
Over Current Limit.
Definition: epc9143_r40_hwdescr.h:590
fltobj_BuckOVLO
volatile struct FAULT_OBJECT_s fltobj_BuckOVLO
Over Voltage Lock Out Fault Object.
Definition: app_fault_monitor.c:35
BUCK_OVLO_TDLY
#define BUCK_OVLO_TDLY
over voltage lock out trip delay conversion nacro
Definition: epc9143_r40_hwdescr.h:783
BUCK_CONVERTER_DATA_s::v_in
volatile uint16_t v_in
BUCK input voltage.
Definition: dev_buck_typedef.h:300
FAULT_OBJECT_s::Status
volatile struct FLT_OBJECT_STATUS_s Status
Status word of this fault object.
Definition: drv_fault_handler.h:133
buck
volatile struct BUCK_CONVERTER_s buck
Global data object for a BUCK CONVERTER.
Definition: app_power_control.c:63
appFaultMonitor_Initialize
volatile uint16_t appFaultMonitor_Initialize(void)
Initialization of user-defined fault objects.
Definition: app_fault_monitor.c:107
fltobj_BuckOCP
volatile struct FAULT_OBJECT_s fltobj_BuckOCP
Over Current Protection Fault Object.
Definition: app_fault_monitor.c:36
BUCK_OCP_RDLY
#define BUCK_OCP_RDLY
over current protection recovery delay conversion nacro
Definition: epc9143_r40_hwdescr.h:788
BUCK_CONVERTER_SETTINGS_s::v_ref
volatile uint16_t v_ref
User reference setting used to control the power converter controller.
Definition: dev_buck_typedef.h:326
FLT_OBJECT_STATUS_s::CompareType
enum FLT_COMPARE_TYPE_e CompareType
Bit <10:8>: Fault check comparison type control bits.
Definition: drv_fault_handler.h:87
BUCK_OCP_TDLY
#define BUCK_OCP_TDLY
over current protection trip Delay conversion macro
Definition: epc9143_r40_hwdescr.h:787
FLT_COMPARE_OBJECT_s::bitMask
volatile uint16_t bitMask
Bit mask will be &-ed with source as value (use 0xFFFF for full value comparison)
Definition: drv_fault_handler.h:107
BUCK_CONVERTER_s::status
volatile struct BUCK_CONVERTER_STATUS_s status
BUCK operation status bits.
Definition: dev_buck_typedef.h:502
appPowerSupply_Suspend
volatile uint16_t appPowerSupply_Suspend(void)
This function stops the power supply operation.
Definition: app_power_control.c:259
drv_FaultHandler_CheckObject
volatile uint16_t drv_FaultHandler_CheckObject(volatile struct FAULT_OBJECT_s *fltObject)
Check current fault status of a user-defined fault object.
Definition: drv_fault_handler.c:168
BUCK_UVLO_RDLY
#define BUCK_UVLO_RDLY
under voltage lock out recovery delay conversion nacro
Definition: epc9143_r40_hwdescr.h:782
BUCK_IOUT_OCL_RELEASE
#define BUCK_IOUT_OCL_RELEASE
Over Current Release Level.
Definition: epc9143_r40_hwdescr.h:591
BUCK_OVLO_RDLY
#define BUCK_OVLO_RDLY
over voltage lock out recovery delay conversion nacro
Definition: epc9143_r40_hwdescr.h:784
FLT_OBJECT_STATUS_s::FaultActive
volatile bool FaultActive
Bit 1: Flag bit indicating if fault condition has been detected but FAULT has not been tripped yet.
Definition: drv_fault_handler.h:85
BUCK_CONVERTER_DATA_s::v_out
volatile uint16_t v_out
BUCK output voltage.
Definition: dev_buck_typedef.h:301
BUCK_VIN_UVLO_RELEASE
#define BUCK_VIN_UVLO_RELEASE
Under Voltage LOck Out voltage.
Definition: epc9143_r40_hwdescr.h:459
BUCK_CONVERTER_s::set_values
volatile struct BUCK_CONVERTER_SETTINGS_s set_values
Control field for global access to references.
Definition: dev_buck_typedef.h:505
appPowerSupply_Resume
volatile uint16_t appPowerSupply_Resume(void)
This function resumes the power supply operation.
Definition: app_power_control.c:280
ocp_FaultInitialize
volatile uint16_t ocp_FaultInitialize(void)
Initializes the user-defined fault objects for overcurrent protection.
Definition: app_fault_monitor.c:294
fltObjectClear
volatile struct FAULT_OBJECT_s fltObjectClear
Clears the fault objects.
Definition: drv_fault_handler.c:56
BUCK_CONVERTER_s::data
volatile struct BUCK_CONVERTER_DATA_s data
BUCK runtime data.
Definition: dev_buck_typedef.h:506
FLT_EVENT_RESPONSE_s::eventThreshold
volatile uint16_t eventThreshold
Bit mask will be &-ed with source as value (use 0xFFFF for full value comparison)
Definition: drv_fault_handler.h:121
BUCK_VOUT_DEV_TRIP
#define BUCK_VOUT_DEV_TRIP
Macro calculating the integer number equivalent of the maximum allowed output voltage deviation given...
Definition: epc9143_r40_hwdescr.h:531
FAULT_OBJECT_s::ReferenceObject
volatile struct FLT_COMPARE_OBJECT_s ReferenceObject
Reference object the source should be compared with.
Definition: drv_fault_handler.h:136
BUCK_VIN_OVLO_TRIP
#define BUCK_VIN_OVLO_TRIP
Over Voltage LOck Out voltage.
Definition: epc9143_r40_hwdescr.h:460
FLT_EVENT_RESPONSE_s::compareThreshold
volatile uint16_t compareThreshold
Signal level at which the fault condition will be detected.
Definition: drv_fault_handler.h:120
FAULT_OBJECT_s::TripResponse
volatile struct FLT_EVENT_RESPONSE_s TripResponse
Settings defining the fault trip event.
Definition: drv_fault_handler.h:137
BUCK_REGERR_TDLY
#define BUCK_REGERR_TDLY
regulation error trip delay conversion macro
Definition: epc9143_r40_hwdescr.h:785
FAULT_OBJECT_s
This data structure is a collection of data structures for fault handling.
Definition: drv_fault_handler.h:131
FLT_EVENT_RESPONSE_s::ptrResponseFunction
volatile uint16_t(* ptrResponseFunction)(void)
pointer to a user-defined function called when a defined fault monitoring event is detected
Definition: drv_fault_handler.h:122
BUCK_CONVERTER_STATUS_s::fault_active
volatile bool fault_active
Bit #5: Flag bit indicating system is in enforced shut down mode (usually due to a fault condition)
Definition: dev_buck_typedef.h:213
ovlo_FaultInitialize
volatile uint16_t ovlo_FaultInitialize(void)
Initializes the user-defined fault objects for overvoltage lockout.
Definition: app_fault_monitor.c:208
FAULT_OBJECT_s::SourceObject
volatile struct FLT_COMPARE_OBJECT_s SourceObject
Object which should be monitored.
Definition: drv_fault_handler.h:135