27#ifndef LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX78002_MXC_SYS_H_
28#define LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX78002_MXC_SYS_H_
30#include "mxc_device.h"
199} mxc_sys_system_clock_div_t;
201#define MXC_SYS_USN_CHECKSUM_LEN 16
202#define MXC_SYS_USN_CSUM_FIELD_LEN 2
203#define MXC_SYS_USN_LEN 13
212static mxc_crit_state_t _state = { .ie_status = (int)0xFFFFFFFF, .in_critical = 0 };
214static inline void _mxc_crit_get_state(
void)
224 uint32_t primask = __get_PRIMASK();
225 _state.ie_status = (primask == 0);
234 uint32_t mstatus = get_mstatus();
235 _state.ie_status = ((mstatus & (1 << 3)) != 0);
252 _mxc_crit_get_state();
253 if (_state.ie_status)
255 _state.in_critical = 1;
264 if (_state.ie_status) {
267 _state.in_critical = 0;
268 _mxc_crit_get_state();
284 return _state.in_critical;
301#define MXC_CRITICAL(code) {\
302 MXC_SYS_Crit_Enter();\
304 MXC_SYS_Crit_Exit();\
Registers, Bit Masks and Bit Positions for the GCR Peripheral Module.
#define MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV64
Definition: gcr_regs.h:266
#define MXC_V_GCR_CLKCTRL_SYSCLK_SEL_EXTCLK
Definition: gcr_regs.h:286
#define MXC_V_GCR_CLKCTRL_SYSCLK_SEL_IBRO
Definition: gcr_regs.h:282
#define MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV1
Definition: gcr_regs.h:254
#define MXC_V_GCR_CLKCTRL_SYSCLK_SEL_ISO
Definition: gcr_regs.h:272
#define MXC_V_GCR_CLKCTRL_SYSCLK_SEL_EBO
Definition: gcr_regs.h:276
#define MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV128
Definition: gcr_regs.h:268
#define MXC_V_GCR_CLKCTRL_SYSCLK_SEL_IPO
Definition: gcr_regs.h:280
#define MXC_V_GCR_CLKCTRL_SYSCLK_SEL_INRO
Definition: gcr_regs.h:278
#define MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV2
Definition: gcr_regs.h:256
#define MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV8
Definition: gcr_regs.h:260
#define MXC_V_GCR_CLKCTRL_SYSCLK_SEL_ERTCO
Definition: gcr_regs.h:284
#define MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV32
Definition: gcr_regs.h:264
#define MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV16
Definition: gcr_regs.h:262
#define MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV4
Definition: gcr_regs.h:258
#define MXC_V_GCR_CLKCTRL_SYSCLK_SEL_IPLL
Definition: gcr_regs.h:274
#define MXC_F_GCR_PCLKDIS0_USB_POS
Definition: gcr_regs.h:441
#define MXC_F_GCR_PCLKDIS0_UART1_POS
Definition: gcr_regs.h:453
#define MXC_F_GCR_PCLKDIS0_GPIO1_POS
Definition: gcr_regs.h:438
#define MXC_F_GCR_PCLKDIS0_SPI1_POS
Definition: gcr_regs.h:447
#define MXC_F_GCR_PCLKDIS0_DMA_POS
Definition: gcr_regs.h:444
#define MXC_F_GCR_PCLKDIS0_I2C0_POS
Definition: gcr_regs.h:456
#define MXC_F_GCR_PCLKDIS0_PT_POS
Definition: gcr_regs.h:480
#define MXC_F_GCR_PCLKDIS0_CNN_POS
Definition: gcr_regs.h:474
#define MXC_F_GCR_PCLKDIS0_GPIO0_POS
Definition: gcr_regs.h:435
#define MXC_F_GCR_PCLKDIS0_TMR0_POS
Definition: gcr_regs.h:459
#define MXC_F_GCR_PCLKDIS0_TMR1_POS
Definition: gcr_regs.h:462
#define MXC_F_GCR_PCLKDIS0_ADC_POS
Definition: gcr_regs.h:471
#define MXC_F_GCR_PCLKDIS0_UART0_POS
Definition: gcr_regs.h:450
#define MXC_F_GCR_PCLKDIS0_TMR2_POS
Definition: gcr_regs.h:465
#define MXC_F_GCR_PCLKDIS0_TMR3_POS
Definition: gcr_regs.h:468
#define MXC_F_GCR_PCLKDIS0_I2C1_POS
Definition: gcr_regs.h:477
#define MXC_F_GCR_PCLKDIS1_SMPHR_POS
Definition: gcr_regs.h:622
#define MXC_F_GCR_PCLKDIS1_TRNG_POS
Definition: gcr_regs.h:619
#define MXC_F_GCR_PCLKDIS1_CRC_POS
Definition: gcr_regs.h:631
#define MXC_F_GCR_PCLKDIS1_I2S_POS
Definition: gcr_regs.h:643
#define MXC_F_GCR_PCLKDIS1_CSI2_POS
Definition: gcr_regs.h:652
#define MXC_F_GCR_PCLKDIS1_UART2_POS
Definition: gcr_regs.h:616
#define MXC_F_GCR_PCLKDIS1_SDHC_POS
Definition: gcr_regs.h:625
#define MXC_F_GCR_PCLKDIS1_PCIF_POS
Definition: gcr_regs.h:640
#define MXC_F_GCR_PCLKDIS1_CPU1_POS
Definition: gcr_regs.h:655
#define MXC_F_GCR_PCLKDIS1_WDT0_POS
Definition: gcr_regs.h:649
#define MXC_F_GCR_PCLKDIS1_OWM_POS
Definition: gcr_regs.h:628
#define MXC_F_GCR_PCLKDIS1_I2C2_POS
Definition: gcr_regs.h:646
#define MXC_F_GCR_PCLKDIS1_SPI0_POS
Definition: gcr_regs.h:637
#define MXC_F_GCR_PCLKDIS1_AES_POS
Definition: gcr_regs.h:634
#define MXC_F_GCR_RST0_TMR2_POS
Definition: gcr_regs.h:195
#define MXC_F_GCR_RST0_GPIO1_POS
Definition: gcr_regs.h:186
#define MXC_F_GCR_RST0_SPI1_POS
Definition: gcr_regs.h:207
#define MXC_F_GCR_RST0_UART0_POS
Definition: gcr_regs.h:201
#define MXC_F_GCR_RST0_SMPHR_POS
Definition: gcr_regs.h:216
#define MXC_F_GCR_RST0_SOFT_POS
Definition: gcr_regs.h:234
#define MXC_F_GCR_RST0_WDT0_POS
Definition: gcr_regs.h:180
#define MXC_F_GCR_RST0_TRNG_POS
Definition: gcr_regs.h:222
#define MXC_F_GCR_RST0_UART2_POS
Definition: gcr_regs.h:231
#define MXC_F_GCR_RST0_I2C0_POS
Definition: gcr_regs.h:210
#define MXC_F_GCR_RST0_CNN_POS
Definition: gcr_regs.h:225
#define MXC_F_GCR_RST0_TMR3_POS
Definition: gcr_regs.h:198
#define MXC_F_GCR_RST0_UART1_POS
Definition: gcr_regs.h:204
#define MXC_F_GCR_RST0_TMR1_POS
Definition: gcr_regs.h:192
#define MXC_F_GCR_RST0_ADC_POS
Definition: gcr_regs.h:228
#define MXC_F_GCR_RST0_RTC_POS
Definition: gcr_regs.h:213
#define MXC_F_GCR_RST0_USB
Definition: gcr_regs.h:220
#define MXC_F_GCR_RST0_SYS_POS
Definition: gcr_regs.h:240
#define MXC_F_GCR_RST0_PERIPH_POS
Definition: gcr_regs.h:237
#define MXC_F_GCR_RST0_TMR0_POS
Definition: gcr_regs.h:189
#define MXC_F_GCR_RST0_GPIO0_POS
Definition: gcr_regs.h:183
#define MXC_F_GCR_RST0_DMA_POS
Definition: gcr_regs.h:177
#define MXC_F_GCR_RST1_CSI2_POS
Definition: gcr_regs.h:602
#define MXC_F_GCR_RST1_SIMO_POS
Definition: gcr_regs.h:596
#define MXC_F_GCR_RST1_I2C2_POS
Definition: gcr_regs.h:590
#define MXC_F_GCR_RST1_CRC_POS
Definition: gcr_regs.h:572
#define MXC_F_GCR_RST1_AES_POS
Definition: gcr_regs.h:575
#define MXC_F_GCR_RST1_DVS_POS
Definition: gcr_regs.h:593
#define MXC_F_GCR_RST1_SMPHR_POS
Definition: gcr_regs.h:584
#define MXC_F_GCR_RST1_SPI0_POS
Definition: gcr_regs.h:578
#define MXC_F_GCR_RST1_I2S_POS
Definition: gcr_regs.h:587
#define MXC_F_GCR_RST1_PT_POS
Definition: gcr_regs.h:563
#define MXC_F_GCR_RST1_OWM_POS
Definition: gcr_regs.h:569
#define MXC_F_GCR_RST1_SDHC_POS
Definition: gcr_regs.h:566
#define MXC_F_GCR_RST1_CPU1_POS
Definition: gcr_regs.h:605
#define MXC_F_GCR_RST1_I2C1_POS
Definition: gcr_regs.h:560
#define MXC_F_LPGCR_PCLKDIS_GPIO2_POS
Definition: lpgcr_regs.h:125
#define MXC_F_LPGCR_PCLKDIS_UART3_POS
Definition: lpgcr_regs.h:137
#define MXC_F_LPGCR_PCLKDIS_TMR4_POS
Definition: lpgcr_regs.h:131
#define MXC_F_LPGCR_PCLKDIS_TMR5_POS
Definition: lpgcr_regs.h:134
#define MXC_F_LPGCR_PCLKDIS_LPCOMP_POS
Definition: lpgcr_regs.h:140
#define MXC_F_LPGCR_PCLKDIS_WDT1_POS
Definition: lpgcr_regs.h:128
#define MXC_F_LPGCR_RST_TMR5_POS
Definition: lpgcr_regs.h:108
#define MXC_F_LPGCR_RST_LPCOMP_POS
Definition: lpgcr_regs.h:114
#define MXC_F_LPGCR_RST_GPIO2_POS
Definition: lpgcr_regs.h:99
#define MXC_F_LPGCR_RST_TMR4_POS
Definition: lpgcr_regs.h:105
#define MXC_F_LPGCR_RST_WDT1_POS
Definition: lpgcr_regs.h:102
#define MXC_F_LPGCR_RST_UART3_POS
Definition: lpgcr_regs.h:111
int MXC_SYS_LockDAP_Permanent(void)
This function PERMANENTLY locks the Debug Access Port.
void MXC_SYS_ClockDisable(mxc_sys_periph_clock_t clock)
Disables the selected peripheral clock.
void MXC_SYS_ClockEnable(mxc_sys_periph_clock_t clock)
Enables the selected peripheral clock.
int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum)
Reads the device USN and verifies the checksum.
static void MXC_SYS_Crit_Exit(void)
Exit a critical section of code from MXC_SYS_Crit_Enter.
Definition: mxc_sys.h:262
static int MXC_SYS_In_Crit_Section(void)
Polls whether code is currently executing from a critical section.
Definition: mxc_sys.h:282
static void MXC_SYS_Crit_Enter(void)
Enter a critical section of code that cannot be interrupted. Call MXC_SYS_Crit_Exit to exit the criti...
Definition: mxc_sys.h:250
mxc_sys_periph_clock_t
System clock disable enumeration. Used in MXC_SYS_ClockDisable and MXC_SYS_ClockEnable functions.
Definition: mxc_sys.h:94
void MXC_SYS_RTCClockEnable(void)
Enables the 32kHz oscillator.
void MXC_SYS_SetClockDiv(mxc_sys_system_clock_div_t div)
Set the system clock divider.
uint32_t MXC_SYS_RiscVClockRate(void)
Returns the clock rate (in Hz) of the Risc-V core.
int MXC_SYS_ClockSourceDisable(mxc_sys_system_clock_t clock)
Disable System Clock Source.
int MXC_SYS_RTCClockDisable(void)
Disables the 32kHz oscillator.
int MXC_SYS_IsClockEnabled(mxc_sys_periph_clock_t clock)
Determines if the selected peripheral clock is enabled.
void MXC_SYS_RISCVRun(void)
Setup and run RISCV core.
mxc_sys_reset_t
System reset0 and reset1 enumeration. Used in MXC_SYS_PeriphReset0 function.
Definition: mxc_sys.h:46
void MXC_SYS_Reset_Periph(mxc_sys_reset_t reset)
Reset the peripherals and/or CPU in the rstr0 or rstr1 register.
void MXC_SYS_RISCVShutdown(void)
Shutdown the RISCV core.
mxc_sys_system_clock_t
Enumeration to select System Clock source.
Definition: mxc_sys.h:171
int MXC_SYS_ClockSourceEnable(mxc_sys_system_clock_t clock)
Enable System Clock Source without switching to it.
int MXC_SYS_Clock_Timeout(uint32_t ready)
Wait for a clock to enable with timeout.
int MXC_SYS_Clock_Select(mxc_sys_system_clock_t clock)
Select the system clock.
mxc_sys_system_clock_div_t MXC_SYS_GetClockDiv(void)
Get the system clock divider.
@ MXC_SYS_PERIPH_CLOCK_UART1
Definition: mxc_sys.h:107
@ MXC_SYS_PERIPH_CLOCK_UART3
Definition: mxc_sys.h:164
@ MXC_SYS_PERIPH_CLOCK_ADC
Definition: mxc_sys.h:119
@ MXC_SYS_PERIPH_CLOCK_UART0
Definition: mxc_sys.h:105
@ MXC_SYS_PERIPH_CLOCK_TMR4
Definition: mxc_sys.h:160
@ MXC_SYS_PERIPH_CLOCK_TMR2
Definition: mxc_sys.h:115
@ MXC_SYS_PERIPH_CLOCK_PT
Definition: mxc_sys.h:125
@ MXC_SYS_PERIPH_CLOCK_GPIO1
Definition: mxc_sys.h:97
@ MXC_SYS_PERIPH_CLOCK_TMR3
Definition: mxc_sys.h:117
@ MXC_SYS_PERIPH_CLOCK_SPI0
Definition: mxc_sys.h:143
@ MXC_SYS_PERIPH_CLOCK_CRC
Definition: mxc_sys.h:137
@ MXC_SYS_PERIPH_CLOCK_CNN
Definition: mxc_sys.h:121
@ MXC_SYS_PERIPH_CLOCK_CPU1
Definition: mxc_sys.h:153
@ MXC_SYS_PERIPH_CLOCK_I2S
Definition: mxc_sys.h:141
@ MXC_SYS_PERIPH_CLOCK_TMR0
Definition: mxc_sys.h:111
@ MXC_SYS_PERIPH_CLOCK_SMPHR
Definition: mxc_sys.h:133
@ MXC_SYS_PERIPH_CLOCK_I2C2
Definition: mxc_sys.h:147
@ MXC_SYS_PERIPH_CLOCK_UART2
Definition: mxc_sys.h:127
@ MXC_SYS_PERIPH_CLOCK_SDHC
Definition: mxc_sys.h:131
@ MXC_SYS_PERIPH_CLOCK_WDT0
Definition: mxc_sys.h:149
@ MXC_SYS_PERIPH_CLOCK_USB
Definition: mxc_sys.h:99
@ MXC_SYS_PERIPH_CLOCK_SPI1
Definition: mxc_sys.h:103
@ MXC_SYS_PERIPH_CLOCK_TRNG
Definition: mxc_sys.h:129
@ MXC_SYS_PERIPH_CLOCK_DMA
Definition: mxc_sys.h:101
@ MXC_SYS_PERIPH_CLOCK_OWIRE
Definition: mxc_sys.h:135
@ MXC_SYS_PERIPH_CLOCK_WDT1
Definition: mxc_sys.h:158
@ MXC_SYS_PERIPH_CLOCK_AES
Definition: mxc_sys.h:139
@ MXC_SYS_PERIPH_CLOCK_I2C1
Definition: mxc_sys.h:123
@ MXC_SYS_PERIPH_CLOCK_LPCOMP
Definition: mxc_sys.h:166
@ MXC_SYS_PERIPH_CLOCK_PCIF
Definition: mxc_sys.h:145
@ MXC_SYS_PERIPH_CLOCK_GPIO0
Definition: mxc_sys.h:95
@ MXC_SYS_PERIPH_CLOCK_TMR1
Definition: mxc_sys.h:113
@ MXC_SYS_PERIPH_CLOCK_TMR5
Definition: mxc_sys.h:162
@ MXC_SYS_PERIPH_CLOCK_CSI2
Definition: mxc_sys.h:151
@ MXC_SYS_PERIPH_CLOCK_GPIO2
Definition: mxc_sys.h:156
@ MXC_SYS_PERIPH_CLOCK_I2C0
Definition: mxc_sys.h:109
@ MXC_SYS_RESET0_GPIO0
Definition: mxc_sys.h:49
@ MXC_SYS_RESET0_CNN
Definition: mxc_sys.h:63
@ MXC_SYS_RESET0_I2C0
Definition: mxc_sys.h:58
@ MXC_SYS_RESET1_PT
Definition: mxc_sys.h:71
@ MXC_SYS_RESET1_CSI2
Definition: mxc_sys.h:82
@ MXC_SYS_RESET1_DVS
Definition: mxc_sys.h:79
@ MXC_SYS_RESET0_TMR2
Definition: mxc_sys.h:53
@ MXC_SYS_RESET_UART3
Definition: mxc_sys.h:89
@ MXC_SYS_RESET0_TMR3
Definition: mxc_sys.h:54
@ MXC_SYS_RESET1_AES
Definition: mxc_sys.h:74
@ MXC_SYS_RESET0_SPI1
Definition: mxc_sys.h:57
@ MXC_SYS_RESET0_RTC
Definition: mxc_sys.h:59
@ MXC_SYS_RESET1_CPU1
Definition: mxc_sys.h:83
@ MXC_SYS_RESET1_SMPHR
Definition: mxc_sys.h:76
@ MXC_SYS_RESET0_TRNG
Definition: mxc_sys.h:62
@ MXC_SYS_RESET_TMR4
Definition: mxc_sys.h:87
@ MXC_SYS_RESET_LPCOMP
Definition: mxc_sys.h:90
@ MXC_SYS_RESET0_DMA
Definition: mxc_sys.h:47
@ MXC_SYS_RESET0_UART1
Definition: mxc_sys.h:56
@ MXC_SYS_RESET0_UART2
Definition: mxc_sys.h:65
@ MXC_SYS_RESET0_SYS
Definition: mxc_sys.h:68
@ MXC_SYS_RESET0_PERIPH
Definition: mxc_sys.h:67
@ MXC_SYS_RESET0_SMPHR
Definition: mxc_sys.h:60
@ MXC_SYS_RESET0_USB
Definition: mxc_sys.h:61
@ MXC_SYS_RESET_TMR5
Definition: mxc_sys.h:88
@ MXC_SYS_RESET_GPIO2
Definition: mxc_sys.h:85
@ MXC_SYS_RESET0_WDT0
Definition: mxc_sys.h:48
@ MXC_SYS_RESET1_SPI0
Definition: mxc_sys.h:81
@ MXC_SYS_RESET_WDT1
Definition: mxc_sys.h:86
@ MXC_SYS_RESET1_I2S
Definition: mxc_sys.h:78
@ MXC_SYS_RESET1_I2C1
Definition: mxc_sys.h:70
@ MXC_SYS_RESET0_ADC
Definition: mxc_sys.h:64
@ MXC_SYS_RESET1_OWM
Definition: mxc_sys.h:72
@ MXC_SYS_RESET1_CRC
Definition: mxc_sys.h:73
@ MXC_SYS_RESET0_UART0
Definition: mxc_sys.h:55
@ MXC_SYS_RESET1_SDHC
Definition: mxc_sys.h:75
@ MXC_SYS_RESET1_SIMO
Definition: mxc_sys.h:80
@ MXC_SYS_RESET0_GPIO1
Definition: mxc_sys.h:50
@ MXC_SYS_RESET0_SOFT
Definition: mxc_sys.h:66
@ MXC_SYS_RESET1_I2C2
Definition: mxc_sys.h:77
@ MXC_SYS_RESET0_TMR0
Definition: mxc_sys.h:51
@ MXC_SYS_RESET0_TMR1
Definition: mxc_sys.h:52
@ MXC_SYS_CLOCK_EXTCLK
Definition: mxc_sys.h:186
@ MXC_SYS_CLOCK_IPLL
Definition: mxc_sys.h:178
@ MXC_SYS_CLOCK_INRO
Definition: mxc_sys.h:182
@ MXC_SYS_CLOCK_IBRO
Definition: mxc_sys.h:174
@ MXC_SYS_CLOCK_ERTCO
Definition: mxc_sys.h:184
@ MXC_SYS_CLOCK_ISO
Definition: mxc_sys.h:176
@ MXC_SYS_CLOCK_IPO
Definition: mxc_sys.h:172
@ MXC_SYS_CLOCK_EBO
Definition: mxc_sys.h:180
Registers, Bit Masks and Bit Positions for the LPGCR Peripheral Module.