FuSa 8-Bit Libraries Safety Framework
Loading...
Searching...
No Matches
midware_clock_manager.h
Go to the documentation of this file.
1
27#ifndef MIDWARE_CLOCK_MANAGER_H
28#define MIDWARE_CLOCK_MANAGER_H
29
30// Standard Library Includes
31#include <stdbool.h>
32#include <stdint.h>
33
34// Framework Includes
35#include <define_error_flags.h>
36
37// Device-specific Includes
38#include <xc.h>
39
47typedef enum
48{
49 CLK_FRQ_1_MHZ = CLKCTRL_FRQSEL_1M_gc >> CLKCTRL_FRQSEL_gp,
50 CLK_FRQ_2_MHZ = CLKCTRL_FRQSEL_2M_gc >> CLKCTRL_FRQSEL_gp,
51 CLK_FRQ_3_MHZ = CLKCTRL_FRQSEL_3M_gc >> CLKCTRL_FRQSEL_gp,
52 CLK_FRQ_4_MHZ = CLKCTRL_FRQSEL_4M_gc >> CLKCTRL_FRQSEL_gp,
54 CLK_FRQ_8_MHZ = CLKCTRL_FRQSEL_8M_gc >> CLKCTRL_FRQSEL_gp,
55 CLK_FRQ_12_MHZ = CLKCTRL_FRQSEL_12M_gc >> CLKCTRL_FRQSEL_gp,
56 CLK_FRQ_16_MHZ = CLKCTRL_FRQSEL_16M_gc >> CLKCTRL_FRQSEL_gp,
57 CLK_FRQ_20_MHZ = CLKCTRL_FRQSEL_20M_gc >> CLKCTRL_FRQSEL_gp,
59} clkFrq_t;
60
67typedef enum
68{
69 CLK_FRQ_DIV2 = CLKCTRL_PDIV_DIV2_gc >> CLKCTRL_PDIV_gp,
70 CLK_FRQ_DIV4 = CLKCTRL_PDIV_DIV4_gc >> CLKCTRL_PDIV_gp,
71 CLK_FRQ_DIV8 = CLKCTRL_PDIV_DIV8_gc >> CLKCTRL_PDIV_gp,
72 CLK_FRQ_DIV16 = CLKCTRL_PDIV_DIV16_gc >> CLKCTRL_PDIV_gp,
73 CLK_FRQ_DIV32 = CLKCTRL_PDIV_DIV32_gc >> CLKCTRL_PDIV_gp,
74 CLK_FRQ_DIV64 = CLKCTRL_PDIV_DIV64_gc >> CLKCTRL_PDIV_gp,
77 CLK_FRQ_DIV6 = CLKCTRL_PDIV_DIV6_gc >> CLKCTRL_PDIV_gp,
78 CLK_FRQ_DIV10 = CLKCTRL_PDIV_DIV10_gc >> CLKCTRL_PDIV_gp,
79 CLK_FRQ_DIV12 = CLKCTRL_PDIV_DIV12_gc >> CLKCTRL_PDIV_gp,
80 CLK_FRQ_DIV24 = CLKCTRL_PDIV_DIV24_gc >> CLKCTRL_PDIV_gp,
81 CLK_FRQ_DIV48 = CLKCTRL_PDIV_DIV48_gc >> CLKCTRL_PDIV_gp,
85
93typedef enum
94{
95 CFD_SRC_MAINCLK = CLKCTRL_CFDSRC_MCLK_gc >> CLKCTRL_CFDSRC_gp,
96 CFD_SRC_OSCHF = CLKCTRL_CFDSRC_OSCHF_gc >> CLKCTRL_CFDSRC_gp,
97 CFD_SRC_OSC32K = CLKCTRL_CFDSRC_OSC32K_gc >> CLKCTRL_CFDSRC_gp,
98 CFD_SRC_XOSCHF = CLKCTRL_CFDSRC_XOSCHF_gc >> CLKCTRL_CFDSRC_gp,
99 CFD_SRC_XOSC32K = CLKCTRL_CFDSRC_XOSC32K_gc >> CLKCTRL_CFDSRC_gp,
100 CFD_SRC_EVSYS = CLKCTRL_CFDSRC_EVSYS_gc >> CLKCTRL_CFDSRC_gp,
103
111typedef enum
112{
113 CFD_REF_OSC32K = CLKCTRL_CFDREF_OSC32K_gc >> CLKCTRL_CFDREF_gp,
114 CFD_REF_ONEDIV32 = CLKCTRL_CFDREF_ONEDIV32_gc >> CLKCTRL_CFDREF_gp,
115 CFD_REF_XOSC32K = CLKCTRL_CFDREF_XOSC32K_gc >> CLKCTRL_CFDREF_gp,
118
126typedef enum
127{
128 CFM_SRC_MAINCLK = CLKCTRL_CFMSRC_CLK_MAIN_gc >> CLKCTRL_CFMSRC_gp,
129 CFM_SRC_OSCHF = CLKCTRL_CFMSRC_OSCHF_gc >> CLKCTRL_CFMSRC_gp,
130 CFM_SRC_OSC32K = CLKCTRL_CFMSRC_OSC32K_gc >> CLKCTRL_CFMSRC_gp,
131 CFM_SRC_XOSCHF = CLKCTRL_CFMSRC_XOSCHF_gc >> CLKCTRL_CFMSRC_gp,
132 CFM_SRC_XOSC32K = CLKCTRL_CFMSRC_XOSC32K_gc >> CLKCTRL_CFMSRC_gp,
133 CFM_SRC_EVSYS = CLKCTRL_CFMSRC_EVSYS_gc >> CLKCTRL_CFMSRC_gp,
136
144typedef enum
145{
146 CFM_REF_OSCHF = CLKCTRL_CFMREF_OSCHF_gc >> CLKCTRL_CFMREF_gp,
147 CFM_REF_XOSCHF = CLKCTRL_CFMREF_XOSCHF_gc >> CLKCTRL_CFMREF_gp,
148 CFM_REF_XOSC32K = CLKCTRL_CFMREF_XOSC32K_gc >> CLKCTRL_CFMREF_gp,
149 CFM_REF_OSC32K = CLKCTRL_CFMREF_OSC32K_gc >> CLKCTRL_CFMREF_gp,
152
163typedef struct
164{
165 uint16_t refCount;
166 uint16_t windowHigh;
167 uint16_t windowLow;
169
181
193
205
217
224
239
256
273
291errFlag_t MW_StartCfm0(cfmSource_t src, cfmReference_t ref, cfmWindow_t window, bool useContinuous);
292
310errFlag_t MW_StartCfm1(cfmSource_t src, cfmReference_t ref, cfmWindow_t window, bool useContinuous);
311
322void MW_EnableClockInterrupts(void);
323
324#endif // MIDWARE_CLOCK_MANAGER_H
Defines error flag type for indicating detected errors in Middleware services.
errFlag_t
Defines the error flag used by Middleware services to indicate error detection.
cfmReference_t
Type definitions for available Clock Frequency Measure (CFM) references used for configuring the CFMs...
errFlag_t MW_GetClearClockCfd0Error(void)
Reads and clears the flag indicating a clock failure detected by CFD0.
cfdSource_t
Type definitions for available Clock Failure Detection (CFD) sources used for configuring the CFDs.
void MW_EnableClockInterrupts(void)
Enables all Clock Failure Detect (CFD) and Clock Frequency Measure (CFM) interrupts.
clkFrq_t
Type definitions for available High Frequency Oscillator output frequencies used for configuring the ...
cfdReference_t
Type definitions for available Clock Failure Detection (CFD) references used for configuring the CFDs...
errFlag_t MW_StartCfd1(cfdSource_t src, cfdReference_t ref)
Starts Clock Failure Detect 1 (CFD1) to monitor the configured clock source with the configured refer...
clkFrqDiv_t
Type definitions for available pre-scaler division used for configuring the main clock.
cfmSource_t
Type definitions for available Clock Frequency Measure (CFM) sources used for configuring the CFMs.
errFlag_t MW_StartCfm0(cfmSource_t src, cfmReference_t ref, cfmWindow_t window, bool useContinuous)
Starts continuous Clock Frequency Measure 0 (CFM0) to monitor the configured clock source with the co...
errFlag_t MW_GetClearClockCfm1Error(void)
Reads and clears the flag indicating a clock frequency error measured by CFM1.
errFlag_t MW_StartCfm1(cfmSource_t src, cfmReference_t ref, cfmWindow_t window, bool useContinuous)
Starts continuous Clock Frequency Measure 1 (CFM1) to monitor the configured clock source with the co...
errFlag_t MW_StartCfd0(cfdSource_t src, cfdReference_t ref)
Starts Clock Failure Detect 0 (CFD0) to monitor the configured clock source with the configured refer...
errFlag_t MW_SetMainClockFrequency(clkFrq_t frequency, clkFrqDiv_t divider)
Initializes main clock with internal High Frequency Oscillator (OSCHF) as clock source.
void MW_ClearClockCfmDoneFlags(void)
Clears the Clock Frequency Measure Done (CFMDn) flags indicating that a clock frequency measurement i...
errFlag_t MW_GetClearClockCfd1Error(void)
Reads and clears the flag indicating a clock failure detected by CFD1.
errFlag_t MW_GetClearClockCfm0Error(void)
Reads and clears the flag indicating a clock frequency error measured by CFM0.
@ CFM_REF_XOSC32K
@ CFD_SRC_XOSCHF
@ CFD_SRC_XOSC32K
@ CFD_SRC_MAINCLK
@ CFD_SRC_OSCHF
@ CFD_SRC_OSC32K
@ CLK_FRQ_4_MHZ
@ CLK_FRQ_8_MHZ
@ CLK_FRQ_3_MHZ
@ CLK_FRQ_2_MHZ
@ CLK_FRQ_12_MHZ
@ CLK_FRQ_INVALID
@ CLK_FRQ_20_MHZ
@ CLK_FRQ_16_MHZ
@ CLK_FRQ_1_MHZ
@ CFD_REF_XOSC32K
@ CFD_REF_ONEDIV32
@ CLK_FRQ_DIV_INVALID2
@ CLK_FRQ_DIV_MAX
@ CLK_FRQ_DIV10
@ CLK_FRQ_DIV16
@ CLK_FRQ_DIV12
@ CLK_FRQ_DIV_INVALID1
@ CLK_FRQ_DIV_OFF
@ CLK_FRQ_DIV24
@ CLK_FRQ_DIV32
@ CLK_FRQ_DIV48
@ CLK_FRQ_DIV64
@ CFM_SRC_XOSC32K
@ CFM_SRC_MAINCLK
Struct for configuring the Clock Frequency Measure window.