KETCube
ketCube_mcu.h
Go to the documentation of this file.
1 
45 #ifndef __KETCUBE_MCU_H
46 #define __KETCUBE_MCU_H
47 
48 #include "ketCube_cfg.h"
49 
59 typedef enum ketCube_mcu_LPMode_t {
64 
69 
78 #define KETCUBE_MCU_WD_SAFE_TIMER_CNT 15
79 
87  struct {
88  volatile unsigned int r0; // Register R0
89  volatile unsigned int r1; // Register R1
90  volatile unsigned int r2; // Register R2
91  volatile unsigned int r3; // Register R3
92  volatile unsigned int r12; // Register R12
93  volatile unsigned int lr; // Link register
94  volatile unsigned int pc; // Program counter
95  union {
96  volatile unsigned int word;
97  struct {
98  unsigned int IPSR : 8; // Interrupt Program Status register (IPSR)
99  unsigned int EPSR : 19; // Execution Program Status register (EPSR)
100  unsigned int APSR : 5; // Application Program Status register (APSR)
101  } bits;
102  } psr; // Program status register.
104 
105  union {
106  volatile unsigned int word;
107  struct {
108  unsigned int MEMFAULTACT : 1; // Read as 1 if memory management fault is active
109  unsigned int BUSFAULTACT : 1; // Read as 1 if bus fault exception is active
110  unsigned int UnusedBits1 : 1;
111  unsigned int USGFAULTACT : 1; // Read as 1 if usage fault exception is active
112  unsigned int UnusedBits2 : 3;
113  unsigned int SVCALLACT : 1; // Read as 1 if SVC exception is active
114  unsigned int MONITORACT : 1; // Read as 1 if debug monitor exception is active
115  unsigned int UnusedBits3 : 1;
116  unsigned int PENDSVACT : 1; // Read as 1 if PendSV exception is active
117  unsigned int SYSTICKACT : 1; // Read as 1 if SYSTICK exception is active
118  unsigned int USGFAULTPENDED : 1; // Usage fault pended; usage fault started but was replaced by a higher-priority exception
119  unsigned int MEMFAULTPENDED : 1; // Memory management fault pended; memory management fault started but was replaced by a higher-priority exception
120  unsigned int BUSFAULTPENDED : 1; // Bus fault pended; bus fault handler was started but was replaced by a higher-priority exception
121  unsigned int SVCALLPENDED : 1; // SVC pended; SVC was started but was replaced by a higher-priority exception
122  unsigned int MEMFAULTENA : 1; // Memory management fault handler enable
123  unsigned int BUSFAULTENA : 1; // Bus fault handler enable
124  unsigned int USGFAULTENA : 1; // Usage fault handler enable
125  } bits;
126  } syshndctrl; // System Handler Control and State Register (0xE000ED24)
127 
128  union {
129  volatile unsigned char word;
130  struct {
131  unsigned char IACCVIOL : 1; // Instruction access violation
132  unsigned char DACCVIOL : 1; // Data access violation
133  unsigned char UnusedBits : 1;
134  unsigned char MUNSTKERR : 1; // Unstacking error
135  unsigned char MSTKERR : 1; // Stacking error
136  unsigned char UnusedBits2 : 2;
137  unsigned char MMARVALID : 1; // Indicates the MMAR is valid
138  } bits;
139  } mfsr; // Memory Management Fault Status Register (0xE000ED28)
140 
141  union {
142  volatile unsigned int word;
143  struct {
144  unsigned int IBUSERR : 1; // Instruction access violation
145  unsigned int PRECISERR : 1; // Precise data access violation
146  unsigned int IMPREISERR : 1; // Imprecise data access violation
147  unsigned int UNSTKERR : 1; // Unstacking error
148  unsigned int STKERR : 1; // Stacking error
149  unsigned int UnusedBits : 2;
150  unsigned int BFARVALID : 1; // Indicates BFAR is valid
151  } bits;
152  } bfsr; // Bus Fault Status Register (0xE000ED29)
153  volatile unsigned int bfar; // Bus Fault Manage Address Register (0xE000ED38)
154 
155  union {
156  volatile unsigned short word;
157  struct {
158  unsigned short UNDEFINSTR : 1; // Attempts to execute an undefined instruction
159  unsigned short INVSTATE : 1; // Attempts to switch to an invalid state (e.g., ARM)
160  unsigned short INVPC : 1; // Attempts to do an exception with a bad value in the EXC_RETURN number
161  unsigned short NOCP : 1; // Attempts to execute a coprocessor instruction
162  unsigned short UnusedBits : 4;
163  unsigned short UNALIGNED : 1; // Indicates that an unaligned access fault has taken place
164  unsigned short DIVBYZERO : 1; // Indicates a divide by zero has taken place (can be set only if DIV_0_TRP is set)
165  } bits;
166  } ufsr; // Usage Fault Status Register (0xE000ED2A)
167 
168  union {
169  volatile unsigned int word;
170  struct {
171  unsigned int UnusedBits : 1;
172  unsigned int VECTBL : 1; // Indicates hard fault is caused by failed vector fetch
173  unsigned int UnusedBits2 : 28;
174  unsigned int FORCED : 1; // Indicates hard fault is taken because of bus fault/memory management fault/usage fault
175  unsigned int DEBUGEVT : 1; // Indicates hard fault is triggered by debug event
176  } bits;
177  } hfsr; // Hard Fault Status Register (0xE000ED2C)
178 
179  union {
180  volatile unsigned int word;
181  struct {
182  unsigned int HALTED : 1; // Halt requested in NVIC
183  unsigned int BKPT : 1; // BKPT instruction executed
184  unsigned int DWTTRAP : 1; // DWT match occurred
185  unsigned int VCATCH : 1; // Vector fetch occurred
186  unsigned int EXTERNAL : 1; // EDBGRQ signal asserted
187  } bits;
188  } dfsr; // Debug Fault Status Register (0xE000ED30)
189 
190  volatile unsigned int afsr; // Auxiliary Fault Status Register (0xE000ED3C), Vendor controlled (optional)
192 
197 extern uint32_t ketCube_MCU_GetRandomSeed(void);
198 extern void ketCube_MCU_GetUniqueId(uint8_t *id);
199 
200 extern void ketCube_MCU_Sleep(void);
201 extern void ketCube_MCU_EnableSleep(void);
202 extern void ketCube_MCU_DisableSleep(void);
203 extern bool ketCube_MCU_IsSleepEnabled(void);
204 
207 
208 extern void ketCube_MCU_WD_Init(void);
209 extern void ketCube_MCU_WD_Reset(void);
210 
211 extern void ketCube_MCU_ClockConfig(void);
212 extern void ketCube_MCU_SleepClockConfig(void);
213 extern void ketCube_MCU_RunClockConfig(void);
214 
216 
227 #endif /* __KETCUBE_MCU_H */
ketCube_MCU_HardFaultRegs_t
struct ketCube_MCU_HardFaultRegs_t ketCube_MCU_HardFaultRegs_t
HardFault registers should be dumped to investigate reset reason.
ketCube_MCU_LPMode
volatile ketCube_mcu_LPMode_t ketCube_MCU_LPMode
Low-Power mode selection.
Definition: ketCube_mcu.c:87
KETCUBE_MCU_LPMODE_SLEEP
@ KETCUBE_MCU_LPMODE_SLEEP
Definition: ketCube_mcu.h:61
ketCube_MCU_HardFaultRegs_t::STKERR
unsigned int STKERR
Definition: ketCube_mcu.h:148
ketCube_MCU_HardFaultRegs_t::IBUSERR
unsigned int IBUSERR
Definition: ketCube_mcu.h:144
ketCube_MCU_HardFaultRegs_t::MEMFAULTACT
unsigned int MEMFAULTACT
Definition: ketCube_mcu.h:108
ketCube_MCU_HardFaultRegs_t::lr
volatile unsigned int lr
Definition: ketCube_mcu.h:93
ketCube_MCU_HardFaultRegs_t::NOCP
unsigned short NOCP
Definition: ketCube_mcu.h:161
ketCube_MCU_HardFaultRegs_t::word
volatile unsigned int word
Definition: ketCube_mcu.h:96
ketCube_MCU_HardFaultRegs_t::BUSFAULTACT
unsigned int BUSFAULTACT
Definition: ketCube_mcu.h:109
ketCube_MCU_HardFaultRegs_t::UnusedBits2
unsigned int UnusedBits2
Definition: ketCube_mcu.h:112
ketCube_MCU_HardFaultRegs_t::UNALIGNED
unsigned short UNALIGNED
Definition: ketCube_mcu.h:163
ketCube_mcu_LPMode_t
ketCube_mcu_LPMode_t
Low Power modes.
Definition: ketCube_mcu.h:59
ketCube_MCU_HardFaultRegs_t::word
volatile unsigned short word
Definition: ketCube_mcu.h:156
ketCube_MCU_HardFaultRegs_t
HardFault registers should be dumped to investigate reset reason.
Definition: ketCube_mcu.h:86
ketCube_MCU_DumpHardFaultRegs
void ketCube_MCU_DumpHardFaultRegs(ketCube_MCU_HardFaultRegs_t *HardFaultRegs)
Dump HardFault Register Content.
Definition: ketCube_mcu.c:670
ketCube_MCU_HardFaultRegs_t::PENDSVACT
unsigned int PENDSVACT
Definition: ketCube_mcu.h:116
ketCube_MCU_HardFaultRegs_t::APSR
unsigned int APSR
Definition: ketCube_mcu.h:100
ketCube_MCU_HardFaultRegs_t::psr
union ketCube_MCU_HardFaultRegs_t::@16::@23 psr
ketCube_MCU_IsSleepEnabled
bool ketCube_MCU_IsSleepEnabled(void)
Disable low power mode ...
Definition: ketCube_mcu.c:155
ketCube_MCU_HardFaultRegs_t::UNSTKERR
unsigned int UNSTKERR
Definition: ketCube_mcu.h:147
ketCube_MCU_HardFaultRegs_t::PRECISERR
unsigned int PRECISERR
Definition: ketCube_mcu.h:145
ketCube_MCU_GetUniqueId
void ketCube_MCU_GetUniqueId(uint8_t *id)
This function returns a unique MCU ID.
Definition: ketCube_mcu.c:104
ketCube_MCU_HardFaultRegs_t::afsr
volatile unsigned int afsr
Definition: ketCube_mcu.h:190
ketCube_MCU_HardFaultRegs_t::IPSR
unsigned int IPSR
Definition: ketCube_mcu.h:98
ketCube_MCU_HardFaultRegs_t::UNDEFINSTR
unsigned short UNDEFINSTR
Definition: ketCube_mcu.h:158
ketCube_MCU_HardFaultRegs_t::hfsr
union ketCube_MCU_HardFaultRegs_t::@21 hfsr
KETCUBE_MCU_LPMODE_STOP
@ KETCUBE_MCU_LPMODE_STOP
Definition: ketCube_mcu.h:60
ketCube_MCU_HardFaultRegs_t::DWTTRAP
unsigned int DWTTRAP
Definition: ketCube_mcu.h:184
ketCube_MCU_HardFaultRegs_t::MEMFAULTPENDED
unsigned int MEMFAULTPENDED
Definition: ketCube_mcu.h:119
ketCube_MCU_SleepClockConfig
void ketCube_MCU_SleepClockConfig(void)
Clock Configuration The system Clock is configured as follows: System Clock source = MSI MSI(Hz) = 65...
Definition: ketCube_mcu.c:375
ketCube_MCU_HardFaultRegs_t::DEBUGEVT
unsigned int DEBUGEVT
Definition: ketCube_mcu.h:175
ketCube_MCU_HardFaultRegs_t::VCATCH
unsigned int VCATCH
Definition: ketCube_mcu.h:185
ketCube_MCU_HardFaultRegs_t::USGFAULTENA
unsigned int USGFAULTENA
Definition: ketCube_mcu.h:124
ketCube_MCU_HardFaultRegs_t::BKPT
unsigned int BKPT
Definition: ketCube_mcu.h:183
ketCube_MCU_HardFaultRegs_t::BUSFAULTPENDED
unsigned int BUSFAULTPENDED
Definition: ketCube_mcu.h:120
ketCube_MCU_HardFaultRegs_t::r1
volatile unsigned int r1
Definition: ketCube_mcu.h:89
ketCube_MCU_HardFaultRegs_t::DIVBYZERO
unsigned short DIVBYZERO
Definition: ketCube_mcu.h:164
ketCube_MCU_HardFaultRegs_t::HALTED
unsigned int HALTED
Definition: ketCube_mcu.h:182
ketCube_MCU_HardFaultRegs_t::UnusedBits
unsigned char UnusedBits
Definition: ketCube_mcu.h:133
ketCube_MCU_HardFaultRegs_t::SavedRegs
struct ketCube_MCU_HardFaultRegs_t::@16 SavedRegs
ketCube_MCU_DisableSleep
void ketCube_MCU_DisableSleep(void)
Disable low power mode ...
Definition: ketCube_mcu.c:147
ketCube_MCU_HardFaultRegs_t::IACCVIOL
unsigned char IACCVIOL
Definition: ketCube_mcu.h:131
ketCube_MCU_HardFaultRegs_t::ufsr
union ketCube_MCU_HardFaultRegs_t::@20 ufsr
ketCube_MCU_HardFaultRegs_t::SVCALLPENDED
unsigned int SVCALLPENDED
Definition: ketCube_mcu.h:121
ketCube_MCU_HardFaultRegs_t::word
volatile unsigned char word
Definition: ketCube_mcu.h:129
ketCube_MCU_HardFaultRegs_t::IMPREISERR
unsigned int IMPREISERR
Definition: ketCube_mcu.h:146
ketCube_MCU_HardFaultRegs_t::EPSR
unsigned int EPSR
Definition: ketCube_mcu.h:99
ketCube_MCU_HardFaultRegs_t::bfar
volatile unsigned int bfar
Definition: ketCube_mcu.h:153
ketCube_MCU_HardFaultRegs_t::bfsr
union ketCube_MCU_HardFaultRegs_t::@19 bfsr
ketCube_MCU_HardFaultRegs_t::EXTERNAL
unsigned int EXTERNAL
Definition: ketCube_mcu.h:186
ketCube_MCU_HardFaultRegs_t::MUNSTKERR
unsigned char MUNSTKERR
Definition: ketCube_mcu.h:134
ketCube_MCU_HardFaultRegs_t::mfsr
union ketCube_MCU_HardFaultRegs_t::@18 mfsr
ketCube_MCU_HardFaultRegs_t::SVCALLACT
unsigned int SVCALLACT
Definition: ketCube_mcu.h:113
ketCube_MCU_HardFaultRegs_t::r0
volatile unsigned int r0
Definition: ketCube_mcu.h:88
ketCube_MCU_EnableSleep
void ketCube_MCU_EnableSleep(void)
Enable low power mode ...
Definition: ketCube_mcu.c:139
ketCube_MCU_GetRandomSeed
uint32_t ketCube_MCU_GetRandomSeed(void)
This function return a random seed.
Definition: ketCube_mcu.c:95
ketCube_MCU_HardFaultRegs_t::UnusedBits3
unsigned int UnusedBits3
Definition: ketCube_mcu.h:115
KETCUBE_MCU_LPMODE_NONE
@ KETCUBE_MCU_LPMODE_NONE
Definition: ketCube_mcu.h:62
ketCube_MCU_RunClockConfig
void ketCube_MCU_RunClockConfig(void)
Clock Configuration The system Clock is configured as follows: System Clock source = MSI HSI(Hz) = 32...
Definition: ketCube_mcu.c:418
ketCube_MCU_HardFaultRegs_t::MEMFAULTENA
unsigned int MEMFAULTENA
Definition: ketCube_mcu.h:122
ketCube_MCU_SetSleepMode
void ketCube_MCU_SetSleepMode(ketCube_mcu_LPMode_t mode)
Select sleep mode.
Definition: ketCube_mcu.c:121
ketCube_MCU_HardFaultRegs_t::pc
volatile unsigned int pc
Definition: ketCube_mcu.h:94
ketCube_MCU_HardFaultRegs_t::FORCED
unsigned int FORCED
Definition: ketCube_mcu.h:174
ketCube_MCU_HardFaultRegs_t::UnusedBits1
unsigned int UnusedBits1
Definition: ketCube_mcu.h:110
ketCube_MCU_GetSleepMode
ketCube_mcu_LPMode_t ketCube_MCU_GetSleepMode(void)
Get current sleep mode.
Definition: ketCube_mcu.c:131
ketCube_MCU_HardFaultRegs_t::BUSFAULTENA
unsigned int BUSFAULTENA
Definition: ketCube_mcu.h:123
ketCube_MCU_HardFaultRegs_t::SYSTICKACT
unsigned int SYSTICKACT
Definition: ketCube_mcu.h:117
ketCube_MCU_ClockConfig
void ketCube_MCU_ClockConfig(void)
Clock Configuration The system Clock is configured as follows: System Clock source = PLL (HSI) SYSCLK...
Definition: ketCube_mcu.c:329
ketCube_MCU_HardFaultRegs_t::MMARVALID
unsigned char MMARVALID
Definition: ketCube_mcu.h:137
ketCube_MCU_WD_Reset
void ketCube_MCU_WD_Reset(void)
KETCube Watchdog (IWDG) Reset.
Definition: ketCube_mcu.c:483
ketCube_MCU_HardFaultRegs_t::bits
struct ketCube_MCU_HardFaultRegs_t::@16::@23::@24 bits
ketCube_MCU_HardFaultRegs_t::USGFAULTPENDED
unsigned int USGFAULTPENDED
Definition: ketCube_mcu.h:118
ketCube_MCU_WD_Init
void ketCube_MCU_WD_Init(void)
KETCube Watchdog (IWDG) Setup.
Definition: ketCube_mcu.c:458
ketCube_MCU_HardFaultRegs_t::r2
volatile unsigned int r2
Definition: ketCube_mcu.h:90
ketCube_MCU_Sleep
void ketCube_MCU_Sleep(void)
Handle KETCube LowPower mode(s)
Definition: ketCube_mcu.c:278
ketCube_MCU_HardFaultRegs_t::dfsr
union ketCube_MCU_HardFaultRegs_t::@22 dfsr
ketCube_MCU_HardFaultRegs_t::UnusedBits2
unsigned char UnusedBits2
Definition: ketCube_mcu.h:136
ketCube_MCU_HardFaultRegs_t::r3
volatile unsigned int r3
Definition: ketCube_mcu.h:91
ketCube_MCU_HardFaultRegs_t::DACCVIOL
unsigned char DACCVIOL
Definition: ketCube_mcu.h:132
ketCube_cfg.h
This file contains definitions for the KETCube configuration.
ketCube_MCU_HardFaultRegs_t::BFARVALID
unsigned int BFARVALID
Definition: ketCube_mcu.h:150
ketCube_MCU_HardFaultRegs_t::MSTKERR
unsigned char MSTKERR
Definition: ketCube_mcu.h:135
ketCube_MCU_HardFaultRegs_t::UnusedBits
unsigned int UnusedBits
Definition: ketCube_mcu.h:149
ketCube_MCU_HardFaultRegs_t::VECTBL
unsigned int VECTBL
Definition: ketCube_mcu.h:172
ketCube_MCU_HardFaultRegs_t::UnusedBits
unsigned short UnusedBits
Definition: ketCube_mcu.h:162
ketCube_MCU_HardFaultRegs_t::INVSTATE
unsigned short INVSTATE
Definition: ketCube_mcu.h:159
ketCube_MCU_HardFaultRegs_t::USGFAULTACT
unsigned int USGFAULTACT
Definition: ketCube_mcu.h:111
ketCube_MCU_HardFaultRegs_t::MONITORACT
unsigned int MONITORACT
Definition: ketCube_mcu.h:114
ketCube_MCU_HardFaultRegs_t::INVPC
unsigned short INVPC
Definition: ketCube_mcu.h:160
ketCube_MCU_HardFaultRegs_t::syshndctrl
union ketCube_MCU_HardFaultRegs_t::@17 syshndctrl
ketCube_MCU_HardFaultRegs_t::r12
volatile unsigned int r12
Definition: ketCube_mcu.h:92