Add MPU demo project for Nulceo-L152RE which is Coretx-M3.
diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Config/FreeRTOSConfig.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Config/FreeRTOSConfig.h
new file mode 100644
index 0000000..c8f6553
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Config/FreeRTOSConfig.h
@@ -0,0 +1,164 @@
+/*

+ * FreeRTOS Kernel V10.2.1

+ * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining a copy of

+ * this software and associated documentation files (the "Software"), to deal in

+ * the Software without restriction, including without limitation the rights to

+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of

+ * the Software, and to permit persons to whom the Software is furnished to do so,

+ * subject to the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be included in all

+ * copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS

+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR

+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER

+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ *

+ * http://www.FreeRTOS.org

+ * http://aws.amazon.com/freertos

+ *

+ * 1 tab == 4 spaces!

+ */

+

+

+#ifndef FREERTOS_CONFIG_H

+#define FREERTOS_CONFIG_H

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/*-----------------------------------------------------------

+ * Application specific definitions.

+ *

+ * These definitions should be adjusted for your particular hardware and

+ * application requirements.

+ *

+ * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE

+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.

+ *

+ * See http://www.freertos.org/a00110.html

+ *----------------------------------------------------------*/

+

+/* The MPU version of port.c includes and excludes functions depending on the

+settings within this file.  Therefore, to ensure all the functions in port.c

+build, this configuration file has all options turned on. */

+

+#define configUSE_PREEMPTION					1

+#define configTICK_RATE_HZ						( 1000 )

+#define configUSE_PORT_OPTIMISED_TASK_SELECTION	1

+#define configUSE_QUEUE_SETS					1

+#define configUSE_IDLE_HOOK						0

+#define configUSE_TICK_HOOK						0

+#define configCPU_CLOCK_HZ						48000000

+#define configMAX_PRIORITIES					( 5 )

+#define configMINIMAL_STACK_SIZE				( ( unsigned short ) 256 )

+#define configTOTAL_HEAP_SIZE					( ( size_t ) ( 16 * 1024 ) )

+#define configMAX_TASK_NAME_LEN					( 10 )

+#define configUSE_TRACE_FACILITY				1

+#define configUSE_16_BIT_TICKS					0

+#define configIDLE_SHOULD_YIELD					1

+#define configUSE_MUTEXES						1

+#define configQUEUE_REGISTRY_SIZE				5

+#define configCHECK_FOR_STACK_OVERFLOW			2

+#define configUSE_RECURSIVE_MUTEXES				1

+#define configUSE_MALLOC_FAILED_HOOK			1

+#define configUSE_APPLICATION_TASK_TAG			1

+#define configUSE_COUNTING_SEMAPHORES			1

+#define configUSE_TICKLESS_IDLE					0

+#define configNUM_THREAD_LOCAL_STORAGE_POINTERS	2

+

+/* This demo shows the MPU being used without any dynamic memory allocation. */

+#define configSUPPORT_STATIC_ALLOCATION			1

+#define configSUPPORT_DYNAMIC_ALLOCATION		1

+

+/* Run time stats gathering definitions. */

+#define configGENERATE_RUN_TIME_STATS			1

+#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()

+#define portGET_RUN_TIME_COUNTER_VALUE()		0

+

+/* This demo makes use of one or more example stats formatting functions.  These

+format the raw data provided by the uxTaskGetSystemState() function in to human

+readable ASCII form.  See the notes in the implementation of vTaskList() within

+FreeRTOS/Source/tasks.c for limitations. */

+#define configUSE_STATS_FORMATTING_FUNCTIONS	0

+

+/* Co-routine definitions. */

+#define configUSE_CO_ROUTINES			 		0

+#define configMAX_CO_ROUTINE_PRIORITIES 		( 2 )

+

+/* Software timer definitions. */

+#define configUSE_TIMERS						1

+#define configTIMER_TASK_PRIORITY				( 2 )

+#define configTIMER_QUEUE_LENGTH				5

+#define configTIMER_TASK_STACK_DEPTH			( configMINIMAL_STACK_SIZE )

+

+/* Set the following definitions to 1 to include the API function, or zero

+to exclude the API function. */

+#define INCLUDE_vTaskPrioritySet				1

+#define INCLUDE_uxTaskPriorityGet				1

+#define INCLUDE_vTaskDelete						1

+#define INCLUDE_vTaskCleanUpResources			1

+#define INCLUDE_vTaskSuspend					1

+#define INCLUDE_vTaskDelayUntil					1

+#define INCLUDE_vTaskDelay						1

+#define INCLUDE_eTaskGetState					1

+#define INCLUDE_xTimerPendFunctionCall			0

+#define INCLUDE_xSemaphoreGetMutexHolder		1

+#define INCLUDE_xTaskGetHandle					1

+#define INCLUDE_xTaskGetCurrentTaskHandle		1

+#define INCLUDE_xTaskGetIdleTaskHandle			1

+#define INCLUDE_xTaskAbortDelay					1

+#define INCLUDE_xTaskGetSchedulerState			1

+#define INCLUDE_xTaskGetIdleTaskHandle			1

+#define INCLUDE_uxTaskGetStackHighWaterMark 	1

+

+/* Cortex-M specific definitions. */

+#ifdef __NVIC_PRIO_BITS

+	/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */

+	#define configPRIO_BITS						__NVIC_PRIO_BITS

+#else

+	#define configPRIO_BITS						4	/* 15 priority levels */

+#endif

+

+/* The lowest interrupt priority that can be used in a call to a "set priority"

+function. */

+#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY			0xf

+

+/* The highest interrupt priority that can be used by any interrupt service

+routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL

+INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER

+PRIORITY THAN THIS! (higher priorities are lower numeric values. */

+#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY	5

+

+/* Interrupt priorities used by the kernel port layer itself.  These are generic

+to all Cortex-M ports, and do not rely on any particular library functions. */

+#define configKERNEL_INTERRUPT_PRIORITY		 			( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )

+/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!

+See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */

+#define configMAX_SYSCALL_INTERRUPT_PRIORITY	 		( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )

+

+

+/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS

+standard names. */

+#define xPortPendSVHandler 			PendSV_Handler

+#define vPortSVCHandler 			SVC_Handler

+#define xPortSysTickHandler 		SysTick_Handler

+

+/* Normal assert() semantics without relying on the provision of an assert.h

+header file. */

+#define configASSERT( x ) 			if( ( x ) == 0 ) { portDISABLE_INTERRUPTS(); for( ;; ); }

+

+/* Ensure that system calls can only be made from kernel code. */

+#define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY		1

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* FREERTOS_CONFIG_H */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/app_main.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/app_main.c
new file mode 100644
index 0000000..81d6f5f
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/app_main.c
@@ -0,0 +1,117 @@
+/*

+ * FreeRTOS Kernel V10.2.1

+ * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining a copy of

+ * this software and associated documentation files (the "Software"), to deal in

+ * the Software without restriction, including without limitation the rights to

+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of

+ * the Software, and to permit persons to whom the Software is furnished to do so,

+ * subject to the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be included in all

+ * copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS

+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR

+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER

+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ *

+ * http://www.FreeRTOS.org

+ * http://aws.amazon.com/freertos

+ *

+ * 1 tab == 4 spaces!

+ */

+/* Scheduler includes. */

+#include "FreeRTOS.h"

+#include "task.h"

+

+/* App includes. */

+#include "app_main.h"

+

+/* Demo includes. */

+#include "mpu_demo.h"

+

+void app_main( void )

+{

+	/* Start the MPU demo. */

+	vStartMPUDemo();

+

+	/* Start the scheduler. */

+	vTaskStartScheduler();

+

+	/* Should not get here. */

+	for( ;; );

+}

+/*-----------------------------------------------------------*/

+

+void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )

+{

+	/* If configCHECK_FOR_STACK_OVERFLOW is set to either 1 or 2 then this

+	function will automatically get called if a task overflows its stack. */

+	( void ) pxTask;

+	( void ) pcTaskName;

+	for( ;; );

+}

+/*-----------------------------------------------------------*/

+

+void vApplicationMallocFailedHook( void )

+{

+	/* If configUSE_MALLOC_FAILED_HOOK is set to 1 then this function will

+	be called automatically if a call to pvPortMalloc() fails.  pvPortMalloc()

+	is called automatically when a task, queue or semaphore is created. */

+	for( ;; );

+}

+/*-----------------------------------------------------------*/

+

+/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an

+implementation of vApplicationGetIdleTaskMemory() to provide the memory that is

+used by the Idle task. */

+void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )

+{

+/* If the buffers to be provided to the Idle task are declared inside this

+function then they must be declared static - otherwise they will be allocated on

+the stack and so not exists after this function exits. */

+static StaticTask_t xIdleTaskTCB;

+static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];

+

+	/* Pass out a pointer to the StaticTask_t structure in which the Idle task's

+	state will be stored. */

+	*ppxIdleTaskTCBBuffer = &xIdleTaskTCB;

+

+	/* Pass out the array that will be used as the Idle task's stack. */

+	*ppxIdleTaskStackBuffer = uxIdleTaskStack;

+

+	/* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer.

+	Note that, as the array is necessarily of type StackType_t,

+	configMINIMAL_STACK_SIZE is specified in words, not bytes. */

+	*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;

+}

+/*-----------------------------------------------------------*/

+

+/* configUSE_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the

+application must provide an implementation of vApplicationGetTimerTaskMemory()

+to provide the memory that is used by the Timer service task. */

+void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize )

+{

+/* If the buffers to be provided to the Timer task are declared inside this

+function then they must be declared static - otherwise they will be allocated on

+the stack and so not exists after this function exits. */

+static StaticTask_t xTimerTaskTCB;

+static StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ];

+

+	/* Pass out a pointer to the StaticTask_t structure in which the Timer

+	task's state will be stored. */

+	*ppxTimerTaskTCBBuffer = &xTimerTaskTCB;

+

+	/* Pass out the array that will be used as the Timer task's stack. */

+	*ppxTimerTaskStackBuffer = uxTimerTaskStack;

+

+	/* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.

+	Note that, as the array is necessarily of type StackType_t,

+	configMINIMAL_STACK_SIZE is specified in words, not bytes. */

+	*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;

+}

+/*-----------------------------------------------------------*/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/app_main.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/app_main.h
new file mode 100644
index 0000000..64210fc
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/app_main.h
@@ -0,0 +1,36 @@
+/*

+ * FreeRTOS Kernel V10.2.1

+ * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining a copy of

+ * this software and associated documentation files (the "Software"), to deal in

+ * the Software without restriction, including without limitation the rights to

+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of

+ * the Software, and to permit persons to whom the Software is furnished to do so,

+ * subject to the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be included in all

+ * copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS

+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR

+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER

+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ *

+ * http://www.FreeRTOS.org

+ * http://aws.amazon.com/freertos

+ *

+ * 1 tab == 4 spaces!

+ */

+

+#ifndef __APP_MAIN_H__

+#define __APP_MAIN_H__

+

+/**

+ * @brief Main app entry point.

+ */

+void app_main( void );

+

+#endif /* __APP_MAIN_H__ */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/mpu_demo.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/mpu_demo.c
new file mode 100644
index 0000000..039439a
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/mpu_demo.c
@@ -0,0 +1,301 @@
+/*

+ * FreeRTOS Kernel V10.2.1

+ * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining a copy of

+ * this software and associated documentation files (the "Software"), to deal in

+ * the Software without restriction, including without limitation the rights to

+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of

+ * the Software, and to permit persons to whom the Software is furnished to do so,

+ * subject to the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be included in all

+ * copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS

+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR

+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER

+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ *

+ * http://www.FreeRTOS.org

+ * http://aws.amazon.com/freertos

+ *

+ * 1 tab == 4 spaces!

+ */

+

+/* FreeRTOS includes. */

+#include "FreeRTOS.h"

+#include "task.h"

+

+/** ARMv7 MPU Details:

+ *

+ * - ARMv7 MPU requires that the size of a MPU region is a power of 2.

+ * - Smallest supported region size is 32 bytes.

+ * - Start address of a region must be aligned to an integer multiple of the

+ *   region size. For example, if the region size is 4 KB(0x1000), the starting

+ *   address must be N x 0x1000, where N is an integer.

+ */

+

+/**

+ * @brief Size of the shared memory region.

+ */

+#define SHARED_MEMORY_SIZE 32

+

+/**

+ * @brief Memory region shared between two tasks.

+ */

+static uint8_t ucSharedMemory[ SHARED_MEMORY_SIZE ] __attribute__( ( aligned( SHARED_MEMORY_SIZE ) ) );

+

+/**

+ * @brief Memory region used to track Memory Fault intentionally caused by the

+ * RO Access task.

+ *

+ * RO Access task sets ucROTaskFaultTracker[ 0 ] to 1 before accessing illegal

+ * memory. Illegal memory access causes Memory Fault and the fault handler

+ * checks ucROTaskFaultTracker[ 0 ] to see if this is an expected fault. We

+ * recover gracefully from an expected fault by jumping to the next instruction.

+ *

+ * @note We are declaring a region of 32 bytes even though we need only one.

+ * The reason is that the smallest supported MPU region size is 32 bytes.

+ */

+static volatile uint8_t ucROTaskFaultTracker[ SHARED_MEMORY_SIZE ] __attribute__( ( aligned( SHARED_MEMORY_SIZE ) ) ) = { 0 };

+/*-----------------------------------------------------------*/

+

+/**

+ * @brief Implements the task which has Read Only access to the memory region

+ * ucSharedMemory.

+ *

+ * @param pvParameters[in] Parameters as passed during task creation.

+ */

+static void prvROAccessTask( void * pvParameters );

+

+/**

+ * @brief Implements the task which has Read Write access to the memory region

+ * ucSharedMemory.

+ *

+ * @param pvParameters[in] Parameters as passed during task creation.

+ */

+static void prvRWAccessTask( void * pvParameters );

+

+/*-----------------------------------------------------------*/

+

+static void prvROAccessTask( void * pvParameters )

+{

+uint8_t ucVal;

+

+	/* Unused parameters. */

+	( void ) pvParameters;

+

+	for( ; ; )

+	{

+		/* This task has RO access to ucSharedMemory and therefore it can read

+		 * it but cannot modify it. */

+		ucVal = ucSharedMemory[ 0 ];

+

+		/* Silent compiler warnings about unused variables. */

+		( void ) ucVal;

+

+		/* Since this task has Read Only access to the ucSharedMemory region,

+		 * writing to it results in Memory Fault. Set ucROTaskFaultTracker[ 0 ]

+		 * to 1 to tell the Memory Fault Handler that this is an expected fault.

+		 * The handler will recover from this fault gracefully by jumping to the

+		 * next instruction. */

+		ucROTaskFaultTracker[ 0 ] = 1;

+

+		/* Illegal access to generate Memory Fault. */

+		ucSharedMemory[ 0 ] = 0;

+

+		/* Ensure that the above line did generate MemFault and the fault

+		 * handler did clear the  ucROTaskFaultTracker[ 0 ]. */

+		configASSERT( ucROTaskFaultTracker[ 0 ] == 0 );

+

+		#if( configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY == 1 )

+		{

+			/* Generate an SVC to raise the privilege. Since privilege

+			 * escalation is only allowed from kernel code, this request must

+			 * get rejected and the task must remain unprivileged. As a result,

+			 * trying to write to ucSharedMemory will still result in Memory

+			 * Fault. */

+			portRAISE_PRIVILEGE();

+

+			/* Set ucROTaskFaultTracker[ 0 ] to 1 to tell the Memory Fault

+			 * Handler that this is an expected fault. The handler will then be

+			 * able to recover from this fault gracefully by jumping to the

+			 * next instruction.*/

+			ucROTaskFaultTracker[ 0 ] = 1;

+

+			/* The following must still result in Memory Fault since the task

+			 * is still running unprivileged. */

+			ucSharedMemory[ 0 ] = 0;

+

+			/* Ensure that the above line did generate MemFault and the fault

+		 	 * handler did clear the  ucROTaskFaultTracker[ 0 ]. */

+			configASSERT( ucROTaskFaultTracker[ 0 ] == 0 );

+		}

+		#else

+		{

+			/* Generate an SVC to raise the privilege. Since

+			 * configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY is not enabled, the

+			 * task will be able to escalate privilege. */

+			portRAISE_PRIVILEGE();

+

+			/* At this point, the task is running privileged. The following

+			 * access must not result in Memory Fault. If something goes

+			 * wrong and we do get a fault, the execution will stop in fault

+			 * handler as ucROTaskFaultTracker[ 0 ] is not set (i.e.

+			 * un-expected fault). */

+			ucSharedMemory[ 0 ] = 0;

+

+			/* Lower down the privilege. */

+			portSWITCH_TO_USER_MODE();

+

+			/* Now the task is running unprivileged and therefore an attempt to

+			 * write to ucSharedMemory will result in a Memory Fault. Set

+			 * ucROTaskFaultTracker[ 0 ] to 1 to tell the Memory Fault Handler

+			 * that this is an expected fault. The handler will then be able to

+			 * recover from this fault gracefully by jumping to the next

+			 * instruction.*/

+			ucROTaskFaultTracker[ 0 ] = 1;

+

+			/* The following must result in Memory Fault since the task is now

+			 * running unprivileged. */

+			ucSharedMemory[ 0 ] = 0;

+

+			/* Ensure that the above line did generate MemFault and the fault

+			 * handler did clear the  ucROTaskFaultTracker[ 0 ]. */

+			configASSERT( ucROTaskFaultTracker[ 0 ] == 0 );

+		}

+		#endif /* #if( configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY == 1 ) */

+

+		/* Wait for a second. */

+		vTaskDelay( pdMS_TO_TICKS( 1000 ) );

+	}

+}

+/*-----------------------------------------------------------*/

+

+static void prvRWAccessTask( void * pvParameters )

+{

+	/* Unused parameters. */

+	( void ) pvParameters;

+

+	for( ; ; )

+	{

+		/* This task has RW access to ucSharedMemory and therefore can write to

+		 * it. */

+		ucSharedMemory[ 0 ] = 0;

+

+		/* Wait for a second. */

+		vTaskDelay( pdMS_TO_TICKS( 1000 ) );

+	}

+}

+/*-----------------------------------------------------------*/

+

+void vStartMPUDemo( void )

+{

+/**

+ * Since stack of a task is protected using MPU, it must satisfy MPU

+ * requirements as mentioned at the top of this file.

+ */

+static StackType_t xROAccessTaskStack[ configMINIMAL_STACK_SIZE ] __attribute__( ( aligned( configMINIMAL_STACK_SIZE * sizeof( StackType_t ) ) ) );

+static StackType_t xRWAccessTaskStack[ configMINIMAL_STACK_SIZE ] __attribute__( ( aligned( configMINIMAL_STACK_SIZE * sizeof( StackType_t ) ) ) );

+TaskParameters_t xROAccessTaskParameters =

+{

+	.pvTaskCode		= prvROAccessTask,

+	.pcName			= "ROAccess",

+	.usStackDepth	= configMINIMAL_STACK_SIZE,

+	.pvParameters	= NULL,

+	.uxPriority		= tskIDLE_PRIORITY,

+	.puxStackBuffer	= xROAccessTaskStack,

+	.xRegions		=	{

+							{ ucSharedMemory,					SHARED_MEMORY_SIZE,	portMPU_REGION_PRIVILEGED_READ_WRITE_UNPRIV_READ_ONLY | portMPU_REGION_EXECUTE_NEVER	},

+							{ ( void * ) ucROTaskFaultTracker,	SHARED_MEMORY_SIZE,	portMPU_REGION_READ_WRITE | portMPU_REGION_EXECUTE_NEVER								},

+							{ 0,								0,					0																						},

+						}

+};

+TaskParameters_t xRWAccessTaskParameters =

+{

+	.pvTaskCode		= prvRWAccessTask,

+	.pcName			= "RWAccess",

+	.usStackDepth	= configMINIMAL_STACK_SIZE,

+	.pvParameters	= NULL,

+	.uxPriority		= tskIDLE_PRIORITY,

+	.puxStackBuffer	= xRWAccessTaskStack,

+	.xRegions		=	{

+							{ ucSharedMemory,	SHARED_MEMORY_SIZE,	portMPU_REGION_READ_WRITE | portMPU_REGION_EXECUTE_NEVER},

+							{ 0,				0,					0														},

+							{ 0,				0,					0														},

+						}

+};

+

+	/* Create an unprivileged task with RO access to ucSharedMemory. */

+	xTaskCreateRestricted( &( xROAccessTaskParameters ), NULL );

+

+	/* Create an unprivileged task with RW access to ucSharedMemory. */

+	xTaskCreateRestricted( &( xRWAccessTaskParameters ), NULL );

+}

+/*-----------------------------------------------------------*/

+

+portDONT_DISCARD void vHandleMemoryFault( uint32_t * pulFaultStackAddress )

+{

+uint32_t ulPC;

+uint16_t usOffendingInstruction;

+

+	/* Is this an expected fault? */

+	if( ucROTaskFaultTracker[ 0 ] == 1 )

+	{

+		/* Read program counter. */

+		ulPC = pulFaultStackAddress[ 6 ];

+

+		/* Read the offending instruction. */

+		usOffendingInstruction = *( uint16_t * )ulPC;

+

+		/* From ARM docs:

+		 * If the value of bits[15:11] of the halfword being decoded is one of

+		 * the following, the halfword is the first halfword of a 32-bit

+		 * instruction:

+		 * - 0b11101.

+		 * - 0b11110.

+		 * - 0b11111.

+		 * Otherwise, the halfword is a 16-bit instruction.

+		 */

+

+		/* Extract bits[15:11] of the offending instruction. */

+		usOffendingInstruction = usOffendingInstruction & 0xF800;

+		usOffendingInstruction = ( usOffendingInstruction >> 11 );

+

+		/* Determine if the offending instruction is a 32-bit instruction or

+		 * a 16-bit instruction. */

+		if( usOffendingInstruction == 0x001F ||

+			usOffendingInstruction == 0x001E ||

+			usOffendingInstruction == 0x001D )

+		{

+			/* Since the offending instruction is a 32-bit instruction,

+			 * increment the program counter by 4 to move to the next

+			 * instruction. */

+			ulPC += 4;

+		}

+		else

+		{

+			/* Since the offending instruction is a 16-bit instruction,

+			 * increment the program counter by 2 to move to the next

+			 * instruction. */

+			ulPC += 2;

+		}

+

+		/* Save the new program counter on the stack. */

+		pulFaultStackAddress[ 6 ] = ulPC;

+

+		/* Mark the fault as handled. */

+		ucROTaskFaultTracker[ 0 ] = 0;

+	}

+	else

+	{

+		/* This is an unexpected fault - loop forever. */

+		for( ; ; )

+		{

+		}

+	}

+}

+/*-----------------------------------------------------------*/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/mpu_demo.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/mpu_demo.h
new file mode 100644
index 0000000..e624027
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Demo/mpu_demo.h
@@ -0,0 +1,45 @@
+/*

+ * FreeRTOS Kernel V10.2.1

+ * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining a copy of

+ * this software and associated documentation files (the "Software"), to deal in

+ * the Software without restriction, including without limitation the rights to

+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of

+ * the Software, and to permit persons to whom the Software is furnished to do so,

+ * subject to the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be included in all

+ * copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS

+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR

+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER

+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ *

+ * http://www.FreeRTOS.org

+ * http://aws.amazon.com/freertos

+ *

+ * 1 tab == 4 spaces!

+ */

+

+#ifndef __MPU_DEMO_H__

+#define __MPU_DEMO_H__

+

+/**

+ * @brief Creates all the tasks for MPU demo.

+ *

+ * The MPU demo creates 2 unprivileged tasks - One of which has Read Only access

+ * to a shared memory region while the other has Read Write access. The task

+ * with Read Only access then tries to write to the shared memory which results

+ * in a Memory fault. The fault handler examines that it is the fault generated

+ * by the task with Read Only access and if so, it recovers from the fault

+ * greacefully by moving the Program Counter to the next instruction to the one

+ * which generated the fault. If any other memory access violation occurs, the

+ * fault handler will get stuck in an inifinite loop.

+ */

+void vStartMPUDemo( void );

+

+#endif /* __MPU_DEMO_H__ */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/.cproject b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/.cproject
new file mode 100644
index 0000000..99a31fd
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/.cproject
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>

+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">

+	<storageModule moduleId="org.eclipse.cdt.core.settings">

+		<cconfiguration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1318841386">

+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1318841386" moduleId="org.eclipse.cdt.core.settings" name="Debug">

+				<externalSettings/>

+				<extensions>

+					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>

+					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>

+					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>

+					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>

+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>

+				</extensions>

+			</storageModule>

+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">

+				<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1318841386" name="Debug" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug">

+					<folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1318841386." name="/" resourcePath="">

+						<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug.650703214" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug">

+							<option id="com.st.stm32cube.ide.mcu.option.internal.toolchain.type.722819359" name="Internal Toolchain Type" superClass="com.st.stm32cube.ide.mcu.option.internal.toolchain.type" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.base.gnu-tools-for-stm32" valueType="string"/>

+							<option id="com.st.stm32cube.ide.mcu.option.internal.toolchain.version.460710722" name="Internal Toolchain Version" superClass="com.st.stm32cube.ide.mcu.option.internal.toolchain.version" value="7-2018-q2-update" valueType="string"/>

+							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.1136988352" name="Mcu" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" value="STM32L152RETx" valueType="string"/>

+							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.1289968755" name="CpuId" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" value="0" valueType="string"/>

+							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.1519380632" name="CpuCoreId" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" value="0" valueType="string"/>

+							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1907402556" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" value="NUCLEO-L152RE" valueType="string"/>

+							<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1756975208" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.3 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.base.gnu-tools-for-stm32 || NUCLEO-L152RE || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Drivers/CMSIS/Include | ../Drivers/STM32L1xx_HAL_Driver/Inc | ../Core/Inc | ../Drivers/CMSIS/Device/ST/STM32L1xx/Include | ../Drivers/STM32L1xx_HAL_Driver/Inc/Legacy ||  ||  || USE_HAL_DRIVER | STM32L152xE ||  || Drivers | Core/Startup | Core ||  ||  || ${workspace_loc:/${ProjName}/STM32L152RETX_FLASH.ld} || true || NonSecure ||  || secure_nsclib.o || " valueType="string"/>

+							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.419744268" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>

+							<builder buildPath="${workspace_loc:/FreeRTOSDemo}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.43549526" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1463052670" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">

+								<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.95569346" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g3" valueType="enumerated"/>

+								<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1311295904" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>

+							</tool>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.669670927" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">

+								<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.285876101" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g3" valueType="enumerated"/>

+								<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.470838392" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false"/>

+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1617895559" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols">

+									<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>

+									<listOptionValue builtIn="false" value="STM32L152xE"/>

+									<listOptionValue builtIn="false" value="DEBUG"/>

+								</option>

+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.535593901" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath">

+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/ST_Code/Drivers/CMSIS/Include}&quot;"/>

+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc}&quot;"/>

+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/Legacy}&quot;"/>

+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/ST_Code/Drivers/CMSIS/Device/ST/STM32L1xx/Include}&quot;"/>

+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Config}&quot;"/>

+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Demo}&quot;"/>

+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/FreeRTOS/include}&quot;"/>

+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/FreeRTOS/portable/GCC/ARM_CM3_MPU}&quot;"/>

+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/ST_Code/Core/Inc}&quot;"/>

+								</option>

+								<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.629633964" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>

+							</tool>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.731280968" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">

+								<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.1695650795" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g3" valueType="enumerated"/>

+								<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.149914812" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false"/>

+							</tool>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.691881553" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">

+								<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.570027148" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32L152RETX_FLASH.ld}" valueType="string"/>

+								<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.973039174" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">

+									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>

+									<additionalInput kind="additionalinput" paths="$(LIBS)"/>

+								</inputType>

+							</tool>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.489430767" name="MCU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker">

+								<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.option.script.1513373773" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.option.script" value="${workspace_loc:/${ProjName}/STM32L152RETX_FLASH.ld}" valueType="string"/>

+							</tool>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.1695766175" name="MCU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver"/>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.1293513435" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size"/>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.1452062046" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile"/>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.862437797" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex"/>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.1270559244" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary"/>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.1368497043" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog"/>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.591101047" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec"/>

+							<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.709828554" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/>

+						</toolChain>

+					</folderInfo>

+				</configuration>

+			</storageModule>

+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>

+		</cconfiguration>

+	</storageModule>

+	<storageModule moduleId="cdtBuildSystem" version="4.0.0">

+		<project id="FreeRTOSDemo.null.2144843828" name="FreeRTOSDemo"/>

+	</storageModule>

+	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>

+	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>

+	<storageModule moduleId="scannerConfiguration">

+		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>

+		<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.355290373;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.355290373.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1605499013;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.393297654">

+			<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>

+		</scannerConfigBuildInfo>

+		<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1318841386;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1318841386.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.669670927;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.629633964">

+			<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>

+		</scannerConfigBuildInfo>

+	</storageModule>

+</cproject>

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/.project b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/.project
new file mode 100644
index 0000000..730a7ef
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/.project
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>FreeRTOSDemo</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>

+			<triggers>clean,full,incremental,</triggers>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>

+			<triggers>full,incremental,</triggers>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>com.st.stm32cube.ide.mcu.MCUProjectNature</nature>

+		<nature>com.st.stm32cube.ide.mcu.MCUCubeProjectNature</nature>

+		<nature>org.eclipse.cdt.core.cnature</nature>

+		<nature>com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAProjectNature</nature>

+		<nature>com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature</nature>

+		<nature>com.st.stm32cube.ide.mcu.MCUEndUserDisabledTrustZoneProjectNature</nature>

+		<nature>com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature</nature>

+		<nature>com.st.stm32cube.ide.mcu.MCURootProjectNature</nature>

+		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>

+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>

+	</natures>

+	<linkedResources>

+		<link>

+			<name>Config</name>

+			<type>2</type>

+			<locationURI>PARENT-2-PROJECT_LOC/Config</locationURI>

+		</link>

+		<link>

+			<name>Demo</name>

+			<type>2</type>

+			<locationURI>PARENT-2-PROJECT_LOC/Demo</locationURI>

+		</link>

+		<link>

+			<name>FreeRTOS</name>

+			<type>2</type>

+			<locationURI>PARENT-4-PROJECT_LOC/Source</locationURI>

+		</link>

+		<link>

+			<name>ST_Code</name>

+			<type>2</type>

+			<locationURI>PARENT-2-PROJECT_LOC/ST_Code</locationURI>

+		</link>

+	</linkedResources>

+	<filteredResources>

+		<filter>

+			<id>1579730437023</id>

+			<name>FreeRTOS/portable</name>

+			<type>9</type>

+			<matcher>

+				<id>org.eclipse.ui.ide.multiFilter</id>

+				<arguments>1.0-name-matches-false-false-Common</arguments>

+			</matcher>

+		</filter>

+		<filter>

+			<id>1579730437029</id>

+			<name>FreeRTOS/portable</name>

+			<type>9</type>

+			<matcher>

+				<id>org.eclipse.ui.ide.multiFilter</id>

+				<arguments>1.0-name-matches-false-false-MemMang</arguments>

+			</matcher>

+		</filter>

+		<filter>

+			<id>1579730437034</id>

+			<name>FreeRTOS/portable</name>

+			<type>9</type>

+			<matcher>

+				<id>org.eclipse.ui.ide.multiFilter</id>

+				<arguments>1.0-name-matches-false-false-GCC</arguments>

+			</matcher>

+		</filter>

+		<filter>

+			<id>1579730469419</id>

+			<name>FreeRTOS/portable/GCC</name>

+			<type>9</type>

+			<matcher>

+				<id>org.eclipse.ui.ide.multiFilter</id>

+				<arguments>1.0-name-matches-false-false-ARM_CM3_MPU</arguments>

+			</matcher>

+		</filter>

+		<filter>

+			<id>1579730451568</id>

+			<name>FreeRTOS/portable/MemMang</name>

+			<type>5</type>

+			<matcher>

+				<id>org.eclipse.ui.ide.multiFilter</id>

+				<arguments>1.0-name-matches-false-false-heap_4.c</arguments>

+			</matcher>

+		</filter>

+	</filteredResources>

+</projectDescription>

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/STM32L152RETX_FLASH.ld b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/STM32L152RETX_FLASH.ld
new file mode 100644
index 0000000..027e293
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/STM32L152RETX_FLASH.ld
@@ -0,0 +1,254 @@
+/*
+******************************************************************************
+**
+**  File        : LinkerScript.ld
+**
+**  Author		: Auto-generated by STM32CubeIDE
+**
+**  Abstract    : Linker script for NUCLEO-L152RE Board embedding STM32L152RETx Device from STM32L1 series
+**                      512Kbytes FLASH
+**                      80Kbytes RAM
+**
+**                Set heap size, stack size and stack location according
+**                to application requirements.
+**
+**                Set memory bank area and size if external memory is used.
+**
+**  Target      : STMicroelectronics STM32
+**
+**  Distribution: The file is distributed as is without any warranty
+**                of any kind.
+**
+*****************************************************************************
+** @attention
+**
+** <h2><center>&copy; COPYRIGHT(c) 2020 STMicroelectronics</center></h2>
+**
+** Redistribution and use in source and binary forms, with or without modification,
+** are permitted provided that the following conditions are met:
+**   1. Redistributions of source code must retain the above copyright notice,
+**      this list of conditions and the following disclaimer.
+**   2. Redistributions in binary form must reproduce the above copyright notice,
+**      this list of conditions and the following disclaimer in the documentation
+**      and/or other materials provided with the distribution.
+**   3. Neither the name of STMicroelectronics nor the names of its contributors
+**      may be used to endorse or promote products derived from this software
+**      without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**
+*****************************************************************************
+*/
+
+/* Entry Point. */
+ENTRY(Reset_Handler)
+
+/* Highest address of the user mode stack. */
+_estack = ORIGIN(RAM) + LENGTH(RAM);    /* end of "RAM" Ram type memory. */
+
+_Min_Heap_Size = 0x200 ;        /* Required amount of heap. */
+_Min_Stack_Size = 0x400 ;       /* Required amount of stack. */
+
+/* Memories definition. */
+/* ARMv7M MPU requires that the base address of a MPU region must be aligned to
+ * an interger mutiple of the region size and the region size can only be a
+ * power of 2. We, therefore, are not using last 16K of RAM. */
+MEMORY
+{
+    RAM (xrw)           : ORIGIN = 0x20000000,  LENGTH = 64K
+    RAM_UNUSED (xrw)    : ORIGIN = 0x20010000,  LENGTH = 16K
+    FLASH (rx)          : ORIGIN = 0x8000000,   LENGTH = 512K
+}
+
+/* Initial 32K Flash is used to store kernel functions and
+ * initial 512 bytes of RAM is used to store kernel data. */
+__privileged_functions_region_size__  = 32K;
+__privileged_data_region_size__       = 512;
+
+__FLASH_segment_start__               = ORIGIN( FLASH );
+__FLASH_segment_end__                 = __FLASH_segment_start__ + LENGTH( FLASH );
+
+__SRAM_segment_start__                = ORIGIN( RAM );
+__SRAM_segment_end__                  = __SRAM_segment_start__ + LENGTH( RAM );
+
+__privileged_functions_start__        = __FLASH_segment_start__;
+__privileged_functions_end__          = __FLASH_segment_start__ + __privileged_functions_region_size__;
+
+__privileged_data_start__             = __SRAM_segment_start__;
+__privileged_data_end__               = __SRAM_segment_start__ + __privileged_data_region_size__;
+
+/* Sections. */
+SECTIONS
+{
+    /* The startup code and FreeRTOS kernel code are placed into privileged
+     * flash. */
+    .privileged_functions :
+    {
+        . = ALIGN(4);
+        KEEP(*(.isr_vector)) /* Startup code */
+        . = ALIGN(4);
+        *(privileged_functions)
+        . = ALIGN(4);
+        FILL(0xDEAD);
+        /* Ensure that un-privileged code is placed after the region reserved
+         * for privileged kernel code. */
+        /* Note that dot (.) actually refers to the byte offset from the start
+         * of the current section (.privileged_functions in this case). As a
+         * result, setting dot (.) to a value sets the size of the section. */
+        . = __privileged_functions_region_size__;
+    } >FLASH
+
+    /* The rest of the program code and other data into the remaining
+     * unprivileged flash. */
+    .text :
+    {
+        /* Place the FreeRTOS System Calls first in the unprivileged region. */
+        . = ALIGN(4);
+        __syscalls_flash_start__ = .;
+        *(freertos_system_calls)
+        __syscalls_flash_end__ = .;
+        . = ALIGN(4);
+        *(.text)           /* .text sections (code). */
+        *(.text*)          /* .text* sections (code). */
+        *(.glue_7)         /* glue arm to thumb code. */
+        *(.glue_7t)        /* glue thumb to arm code. */
+        *(.eh_frame)
+
+        KEEP (*(.init))
+        KEEP (*(.fini))
+
+        . = ALIGN(4);
+        _etext = .;        /* define a global symbols at end of code. */
+    } >FLASH
+
+    /* Constant data into "FLASH" Rom type memory. */
+    .rodata :
+    {
+        . = ALIGN(4);
+        *(.rodata)         /* .rodata sections (constants, strings, etc.). */
+        *(.rodata*)        /* .rodata* sections (constants, strings, etc.). */
+        . = ALIGN(4);
+    } >FLASH
+
+    .ARM.extab :
+    { 
+        . = ALIGN(4);
+        *(.ARM.extab* .gnu.linkonce.armextab.*)
+        . = ALIGN(4);
+    } >FLASH
+    
+    .ARM :
+    {
+        . = ALIGN(4);
+        __exidx_start = .;
+        *(.ARM.exidx*)
+        __exidx_end = .;
+        . = ALIGN(4);
+    } >FLASH
+
+    .preinit_array :
+    {
+        . = ALIGN(4);
+        PROVIDE_HIDDEN (__preinit_array_start = .);
+        KEEP (*(.preinit_array*))
+        PROVIDE_HIDDEN (__preinit_array_end = .);
+        . = ALIGN(4);
+    } >FLASH
+    
+    .init_array :
+    {
+        . = ALIGN(4);
+        PROVIDE_HIDDEN (__init_array_start = .);
+        KEEP (*(SORT(.init_array.*)))
+        KEEP (*(.init_array*))
+        PROVIDE_HIDDEN (__init_array_end = .);
+        . = ALIGN(4);
+    } >FLASH
+    
+    .fini_array :
+    {
+        . = ALIGN(4);
+        PROVIDE_HIDDEN (__fini_array_start = .);
+        KEEP (*(SORT(.fini_array.*)))
+        KEEP (*(.fini_array*))
+        PROVIDE_HIDDEN (__fini_array_end = .);
+        . = ALIGN(4);
+    } >FLASH
+
+    /* Used by the startup to initialize data. */
+    _sidata = LOADADDR(.privileged_data);
+
+    /* FreeRTOS kernel data. */
+    .privileged_data :
+    {
+        . = ALIGN(4);
+        _sdata = .;        /* Create a global symbol at data start. */
+        *(privileged_data)
+        . = ALIGN(4);
+        FILL(0xDEAD);
+        /* Ensure that un-privileged data is placed after the region reserved
+         * for privileged kernel data. */
+        /* Note that dot (.) actually refers to the byte offset from the start
+         * of the current section (.privileged_data in this case). As a result,
+         * setting dot (.) to a value sets the size of the section. */
+        . = __privileged_data_region_size__;
+    } >RAM AT> FLASH
+
+    /* Initialized data sections into "RAM" Ram type memory. */
+    .data : 
+    {
+        . = ALIGN(4);
+        *(.data)           /* .data sections. */
+        *(.data*)          /* .data* sections. */
+
+        . = ALIGN(4);
+        _edata = .;        /* define a global symbol at data end. */
+    } >RAM AT> FLASH
+
+    /* Uninitialized data section into "RAM" Ram type memory. */
+    . = ALIGN(4);
+    .bss :
+    {
+        /* This is used by the startup in order to initialize the .bss section. */
+        _sbss = .;         /* define a global symbol at bss start. */
+        __bss_start__ = _sbss;
+        *(.bss)
+        *(.bss*)
+        *(COMMON)
+
+        . = ALIGN(4);
+        _ebss = .;         /* define a global symbol at bss end. */
+        __bss_end__ = _ebss;
+    } >RAM
+
+    /* User_heap_stack section, used to check that there is enough "RAM" Ram
+    * type memory left. */
+    ._user_heap_stack :
+    {
+        . = ALIGN(8);
+        PROVIDE ( end = . );
+        PROVIDE ( _end = . );
+        . = . + _Min_Heap_Size;
+        . = . + _Min_Stack_Size;
+        . = ALIGN(8);
+    } >RAM
+
+    /* Remove information from the compiler libraries. */
+    /DISCARD/ :
+    {
+        libc.a ( * )
+        libm.a ( * )
+        libgcc.a ( * )
+    }
+
+    .ARM.attributes 0 : { *(.ARM.attributes) }
+}
diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/memfault_handler.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/memfault_handler.c
new file mode 100644
index 0000000..f0e1b92
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/memfault_handler.c
@@ -0,0 +1,48 @@
+/*

+ * FreeRTOS Kernel V10.2.1

+ * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining a copy of

+ * this software and associated documentation files (the "Software"), to deal in

+ * the Software without restriction, including without limitation the rights to

+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of

+ * the Software, and to permit persons to whom the Software is furnished to do so,

+ * subject to the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be included in all

+ * copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS

+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR

+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER

+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ *

+ * http://www.FreeRTOS.org

+ * http://aws.amazon.com/freertos

+ *

+ * 1 tab == 4 spaces!

+ */

+

+/**

+ * @brief Mem fault handler.

+ */

+void MemManage_Handler( void ) __attribute__ (( naked ));

+/*-----------------------------------------------------------*/

+

+void MemManage_Handler( void )

+{

+	__asm volatile

+	(

+		" tst lr, #4										\n"

+		" ite eq											\n"

+		" mrseq r0, msp										\n"

+		" mrsne r0, psp										\n"

+		" ldr r1, handler_address_const						\n"

+		" bx r1												\n"

+		"													\n"

+		" handler_address_const: .word vHandleMemoryFault	\n"

+	);

+}

+/*-----------------------------------------------------------*/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/startup_stm32l152retx.s b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/startup_stm32l152retx.s
new file mode 100644
index 0000000..c2647b4
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/startup_stm32l152retx.s
@@ -0,0 +1,409 @@
+/**

+  ******************************************************************************

+  * @file      startup_stm32l152xe.s

+  * @author    MCD Application Team

+  * @brief     STM32L152XE Devices vector table for GCC toolchain.

+  *            This module performs:

+  *                - Set the initial SP

+  *                - Set the initial PC == Reset_Handler,

+  *                - Set the vector table entries with the exceptions ISR address

+  *                - Configure the clock system

+  *                - Branches to main in the C library (which eventually

+  *                  calls main()).

+  *            After Reset the Cortex-M3 processor is in Thread mode,

+  *            priority is Privileged, and the Stack is set to Main.

+  ******************************************************************************

+  *

+  * @attention

+  *

+  * Copyright (c) 2017 STMicroelectronics. All rights reserved.

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the 

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+  .syntax unified

+  .cpu cortex-m3

+  .fpu softvfp

+  .thumb

+

+.global g_pfnVectors

+.global Default_Handler

+

+/* start address for the initialization values of the .data section.

+defined in linker script */

+.word _sidata

+/* start address for the .data section. defined in linker script */

+.word _sdata

+/* end address for the .data section. defined in linker script */

+.word _edata

+/* start address for the .bss section. defined in linker script */

+.word _sbss

+/* end address for the .bss section. defined in linker script */

+.word _ebss

+

+.equ  BootRAM, 0xF108F85F

+/**

+ * @brief  This is the code that gets called when the processor first

+ *          starts execution following a reset event. Only the absolutely

+ *          necessary set is performed, after which the application

+ *          supplied main() routine is called.

+ * @param  None

+ * @retval : None

+*/

+

+  .section .text.Reset_Handler

+  .weak Reset_Handler

+  .type Reset_Handler, %function

+Reset_Handler:

+

+/* Copy the data segment initializers from flash to SRAM */

+  movs r1, #0

+  b LoopCopyDataInit

+

+CopyDataInit:

+  ldr r3, =_sidata

+  ldr r3, [r3, r1]

+  str r3, [r0, r1]

+  adds r1, r1, #4

+

+LoopCopyDataInit:

+  ldr r0, =_sdata

+  ldr r3, =_edata

+  adds r2, r0, r1

+  cmp r2, r3

+  bcc CopyDataInit

+  ldr r2, =_sbss

+  b LoopFillZerobss

+/* Zero fill the bss segment. */

+FillZerobss:

+  movs r3, #0

+  str r3, [r2], #4

+

+LoopFillZerobss:

+  ldr r3, = _ebss

+  cmp r2, r3

+  bcc FillZerobss

+

+/* Call the clock system intitialization function.*/

+    bl  SystemInit

+/* Call static constructors */

+    bl __libc_init_array

+/* Call the application's entry point.*/

+  bl main

+  bx lr

+.size Reset_Handler, .-Reset_Handler

+

+/**

+ * @brief  This is the code that gets called when the processor receives an

+ *         unexpected interrupt.  This simply enters an infinite loop, preserving

+ *         the system state for examination by a debugger.

+ *

+ * @param  None

+ * @retval : None

+*/

+    .section .text.Default_Handler,"ax",%progbits

+Default_Handler:

+Infinite_Loop:

+  b Infinite_Loop

+  .size Default_Handler, .-Default_Handler

+/******************************************************************************

+*

+* The minimal vector table for a Cortex M3.  Note that the proper constructs

+* must be placed on this to ensure that it ends up at physical address

+* 0x0000.0000.

+*

+******************************************************************************/

+   .section .isr_vector,"a",%progbits

+  .type g_pfnVectors, %object

+  .size g_pfnVectors, .-g_pfnVectors

+

+

+g_pfnVectors:

+  .word _estack

+  .word Reset_Handler

+  .word NMI_Handler

+  .word HardFault_Handler

+  .word MemManage_Handler

+  .word BusFault_Handler

+  .word UsageFault_Handler

+  .word 0

+  .word 0

+  .word 0

+  .word 0

+  .word SVC_Handler

+  .word DebugMon_Handler

+  .word 0

+  .word PendSV_Handler

+  .word SysTick_Handler

+  .word WWDG_IRQHandler

+  .word PVD_IRQHandler

+  .word TAMPER_STAMP_IRQHandler

+  .word RTC_WKUP_IRQHandler

+  .word FLASH_IRQHandler

+  .word RCC_IRQHandler

+  .word EXTI0_IRQHandler

+  .word EXTI1_IRQHandler

+  .word EXTI2_IRQHandler

+  .word EXTI3_IRQHandler

+  .word EXTI4_IRQHandler

+  .word DMA1_Channel1_IRQHandler

+  .word DMA1_Channel2_IRQHandler

+  .word DMA1_Channel3_IRQHandler

+  .word DMA1_Channel4_IRQHandler

+  .word DMA1_Channel5_IRQHandler

+  .word DMA1_Channel6_IRQHandler

+  .word DMA1_Channel7_IRQHandler

+  .word ADC1_IRQHandler

+  .word USB_HP_IRQHandler

+  .word USB_LP_IRQHandler

+  .word DAC_IRQHandler

+  .word COMP_IRQHandler

+  .word EXTI9_5_IRQHandler

+  .word LCD_IRQHandler  

+  .word TIM9_IRQHandler

+  .word TIM10_IRQHandler

+  .word TIM11_IRQHandler

+  .word TIM2_IRQHandler

+  .word TIM3_IRQHandler

+  .word TIM4_IRQHandler

+  .word I2C1_EV_IRQHandler

+  .word I2C1_ER_IRQHandler

+  .word I2C2_EV_IRQHandler

+  .word I2C2_ER_IRQHandler

+  .word SPI1_IRQHandler

+  .word SPI2_IRQHandler

+  .word USART1_IRQHandler

+  .word USART2_IRQHandler

+  .word USART3_IRQHandler

+  .word EXTI15_10_IRQHandler

+  .word RTC_Alarm_IRQHandler

+  .word USB_FS_WKUP_IRQHandler

+  .word TIM6_IRQHandler

+  .word TIM7_IRQHandler

+  .word 0

+  .word TIM5_IRQHandler

+  .word SPI3_IRQHandler

+  .word UART4_IRQHandler

+  .word UART5_IRQHandler

+  .word DMA2_Channel1_IRQHandler

+  .word DMA2_Channel2_IRQHandler

+  .word DMA2_Channel3_IRQHandler

+  .word DMA2_Channel4_IRQHandler

+  .word DMA2_Channel5_IRQHandler

+  .word 0

+  .word COMP_ACQ_IRQHandler

+  .word 0

+  .word 0

+  .word 0

+  .word 0

+  .word 0

+  .word BootRAM          /* @0x108. This is for boot in RAM mode for 

+                            STM32L152XE devices. */

+

+/*******************************************************************************

+*

+* Provide weak aliases for each Exception handler to the Default_Handler.

+* As they are weak aliases, any function with the same name will override

+* this definition.

+*

+*******************************************************************************/

+

+  .weak NMI_Handler

+  .thumb_set NMI_Handler,Default_Handler

+

+  .weak HardFault_Handler

+  .thumb_set HardFault_Handler,Default_Handler

+

+  .weak MemManage_Handler

+  .thumb_set MemManage_Handler,Default_Handler

+

+  .weak BusFault_Handler

+  .thumb_set BusFault_Handler,Default_Handler

+

+  .weak UsageFault_Handler

+  .thumb_set UsageFault_Handler,Default_Handler

+

+  .weak SVC_Handler

+  .thumb_set SVC_Handler,Default_Handler

+

+  .weak DebugMon_Handler

+  .thumb_set DebugMon_Handler,Default_Handler

+

+  .weak PendSV_Handler

+  .thumb_set PendSV_Handler,Default_Handler

+

+  .weak SysTick_Handler

+  .thumb_set SysTick_Handler,Default_Handler

+

+  .weak WWDG_IRQHandler

+  .thumb_set WWDG_IRQHandler,Default_Handler

+

+  .weak PVD_IRQHandler

+  .thumb_set PVD_IRQHandler,Default_Handler

+

+  .weak TAMPER_STAMP_IRQHandler

+  .thumb_set TAMPER_STAMP_IRQHandler,Default_Handler

+

+  .weak RTC_WKUP_IRQHandler

+  .thumb_set RTC_WKUP_IRQHandler,Default_Handler

+

+  .weak FLASH_IRQHandler

+  .thumb_set FLASH_IRQHandler,Default_Handler

+

+  .weak RCC_IRQHandler

+  .thumb_set RCC_IRQHandler,Default_Handler

+

+  .weak EXTI0_IRQHandler

+  .thumb_set EXTI0_IRQHandler,Default_Handler

+

+  .weak EXTI1_IRQHandler

+  .thumb_set EXTI1_IRQHandler,Default_Handler

+

+  .weak EXTI2_IRQHandler

+  .thumb_set EXTI2_IRQHandler,Default_Handler

+

+  .weak EXTI3_IRQHandler

+  .thumb_set EXTI3_IRQHandler,Default_Handler

+

+  .weak EXTI4_IRQHandler

+  .thumb_set EXTI4_IRQHandler,Default_Handler

+

+  .weak DMA1_Channel1_IRQHandler

+  .thumb_set DMA1_Channel1_IRQHandler,Default_Handler

+

+  .weak DMA1_Channel2_IRQHandler

+  .thumb_set DMA1_Channel2_IRQHandler,Default_Handler

+

+  .weak DMA1_Channel3_IRQHandler

+  .thumb_set DMA1_Channel3_IRQHandler,Default_Handler

+

+  .weak DMA1_Channel4_IRQHandler

+  .thumb_set DMA1_Channel4_IRQHandler,Default_Handler

+

+  .weak DMA1_Channel5_IRQHandler

+  .thumb_set DMA1_Channel5_IRQHandler,Default_Handler

+

+  .weak DMA1_Channel6_IRQHandler

+  .thumb_set DMA1_Channel6_IRQHandler,Default_Handler

+

+  .weak DMA1_Channel7_IRQHandler

+  .thumb_set DMA1_Channel7_IRQHandler,Default_Handler

+

+  .weak ADC1_IRQHandler

+  .thumb_set ADC1_IRQHandler,Default_Handler

+

+  .weak USB_HP_IRQHandler

+  .thumb_set USB_HP_IRQHandler,Default_Handler

+

+  .weak USB_LP_IRQHandler

+  .thumb_set USB_LP_IRQHandler,Default_Handler

+

+  .weak DAC_IRQHandler

+  .thumb_set DAC_IRQHandler,Default_Handler

+

+  .weak COMP_IRQHandler

+  .thumb_set COMP_IRQHandler,Default_Handler

+

+  .weak EXTI9_5_IRQHandler

+  .thumb_set EXTI9_5_IRQHandler,Default_Handler

+

+  .weak LCD_IRQHandler

+  .thumb_set LCD_IRQHandler,Default_Handler  

+

+  .weak TIM9_IRQHandler

+  .thumb_set TIM9_IRQHandler,Default_Handler

+

+  .weak TIM10_IRQHandler

+  .thumb_set TIM10_IRQHandler,Default_Handler

+

+  .weak TIM11_IRQHandler

+  .thumb_set TIM11_IRQHandler,Default_Handler

+

+  .weak TIM2_IRQHandler

+  .thumb_set TIM2_IRQHandler,Default_Handler

+

+  .weak TIM3_IRQHandler

+  .thumb_set TIM3_IRQHandler,Default_Handler

+

+  .weak TIM4_IRQHandler

+  .thumb_set TIM4_IRQHandler,Default_Handler

+

+  .weak I2C1_EV_IRQHandler

+  .thumb_set I2C1_EV_IRQHandler,Default_Handler

+

+  .weak I2C1_ER_IRQHandler

+  .thumb_set I2C1_ER_IRQHandler,Default_Handler

+

+  .weak I2C2_EV_IRQHandler

+  .thumb_set I2C2_EV_IRQHandler,Default_Handler

+

+  .weak I2C2_ER_IRQHandler

+  .thumb_set I2C2_ER_IRQHandler,Default_Handler

+

+  .weak SPI1_IRQHandler

+  .thumb_set SPI1_IRQHandler,Default_Handler

+

+  .weak SPI2_IRQHandler

+  .thumb_set SPI2_IRQHandler,Default_Handler

+

+  .weak USART1_IRQHandler

+  .thumb_set USART1_IRQHandler,Default_Handler

+

+  .weak USART2_IRQHandler

+  .thumb_set USART2_IRQHandler,Default_Handler

+

+  .weak USART3_IRQHandler

+  .thumb_set USART3_IRQHandler,Default_Handler

+

+  .weak EXTI15_10_IRQHandler

+  .thumb_set EXTI15_10_IRQHandler,Default_Handler

+

+  .weak RTC_Alarm_IRQHandler

+  .thumb_set RTC_Alarm_IRQHandler,Default_Handler

+

+  .weak USB_FS_WKUP_IRQHandler

+  .thumb_set USB_FS_WKUP_IRQHandler,Default_Handler

+

+  .weak TIM6_IRQHandler

+  .thumb_set TIM6_IRQHandler,Default_Handler

+

+  .weak TIM7_IRQHandler

+  .thumb_set TIM7_IRQHandler,Default_Handler

+

+  .weak TIM5_IRQHandler

+  .thumb_set TIM5_IRQHandler,Default_Handler

+  

+  .weak SPI3_IRQHandler

+  .thumb_set SPI3_IRQHandler,Default_Handler

+

+  .weak UART4_IRQHandler

+  .thumb_set UART4_IRQHandler,Default_Handler

+

+  .weak UART5_IRQHandler

+  .thumb_set UART5_IRQHandler,Default_Handler

+  

+  .weak DMA2_Channel1_IRQHandler

+  .thumb_set DMA2_Channel1_IRQHandler,Default_Handler

+

+  .weak DMA2_Channel2_IRQHandler

+  .thumb_set DMA2_Channel2_IRQHandler,Default_Handler

+

+  .weak DMA2_Channel3_IRQHandler

+  .thumb_set DMA2_Channel3_IRQHandler,Default_Handler

+

+  .weak DMA2_Channel4_IRQHandler

+  .thumb_set DMA2_Channel4_IRQHandler,Default_Handler

+

+  .weak DMA2_Channel5_IRQHandler

+  .thumb_set DMA2_Channel5_IRQHandler,Default_Handler

+

+  .weak COMP_ACQ_IRQHandler

+   .thumb_set COMP_ACQ_IRQHandler,Default_Handler

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/syscalls.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/syscalls.c
new file mode 100644
index 0000000..9f32dad
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/syscalls.c
@@ -0,0 +1,184 @@
+/**
+*****************************************************************************
+**
+**  File        : syscalls.c
+**
+**  Author	    : Auto-generated by STM32CubeIDE
+**
+**  Abstract    : STM32CubeIDE Minimal System calls file
+**
+** 		          For more information about which c-functions
+**                need which of these lowlevel functions
+**                please consult the Newlib libc-manual
+**
+**  Environment : STM32CubeIDE MCU
+**
+**  Distribution: The file is distributed as is, without any warranty
+**                of any kind.
+**
+*****************************************************************************
+**
+** <h2><center>&copy; COPYRIGHT(c) 2018 STMicroelectronics</center></h2>
+**
+** Redistribution and use in source and binary forms, with or without modification,
+** are permitted provided that the following conditions are met:
+**   1. Redistributions of source code must retain the above copyright notice,
+**      this list of conditions and the following disclaimer.
+**   2. Redistributions in binary form must reproduce the above copyright notice,
+**      this list of conditions and the following disclaimer in the documentation
+**      and/or other materials provided with the distribution.
+**   3. Neither the name of STMicroelectronics nor the names of its contributors
+**      may be used to endorse or promote products derived from this software
+**      without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**
+**
+*****************************************************************************
+*/
+
+/* Includes */
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <signal.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/times.h>
+
+
+/* Variables */
+//#undef errno
+extern int errno;
+extern int __io_putchar(int ch) __attribute__((weak));
+extern int __io_getchar(void) __attribute__((weak));
+
+register char * stack_ptr asm("sp");
+
+char *__env[1] = { 0 };
+char **environ = __env;
+
+
+/* Functions */
+void initialise_monitor_handles()
+{
+}
+
+int _getpid(void)
+{
+	return 1;
+}
+
+int _kill(int pid, int sig)
+{
+	errno = EINVAL;
+	return -1;
+}
+
+void _exit (int status)
+{
+	_kill(status, -1);
+	while (1) {}		/* Make sure we hang here */
+}
+
+__attribute__((weak)) int _read(int file, char *ptr, int len)
+{
+	int DataIdx;
+
+	for (DataIdx = 0; DataIdx < len; DataIdx++)
+	{
+		*ptr++ = __io_getchar();
+	}
+
+return len;
+}
+
+__attribute__((weak)) int _write(int file, char *ptr, int len)
+{
+	int DataIdx;
+
+	for (DataIdx = 0; DataIdx < len; DataIdx++)
+	{
+		__io_putchar(*ptr++);
+	}
+	return len;
+}
+
+int _close(int file)
+{
+	return -1;
+}
+
+
+int _fstat(int file, struct stat *st)
+{
+	st->st_mode = S_IFCHR;
+	return 0;
+}
+
+int _isatty(int file)
+{
+	return 1;
+}
+
+int _lseek(int file, int ptr, int dir)
+{
+	return 0;
+}
+
+int _open(char *path, int flags, ...)
+{
+	/* Pretend like we always fail */
+	return -1;
+}
+
+int _wait(int *status)
+{
+	errno = ECHILD;
+	return -1;
+}
+
+int _unlink(char *name)
+{
+	errno = ENOENT;
+	return -1;
+}
+
+int _times(struct tms *buf)
+{
+	return -1;
+}
+
+int _stat(char *file, struct stat *st)
+{
+	st->st_mode = S_IFCHR;
+	return 0;
+}
+
+int _link(char *old, char *new)
+{
+	errno = EMLINK;
+	return -1;
+}
+
+int _fork(void)
+{
+	errno = EAGAIN;
+	return -1;
+}
+
+int _execve(char *name, char **argv, char **env)
+{
+	errno = ENOMEM;
+	return -1;
+}
diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/sysmem.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/sysmem.c
new file mode 100644
index 0000000..e5e1bc2
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/Projects/GCC/Startup/sysmem.c
@@ -0,0 +1,83 @@
+/**
+*****************************************************************************
+**
+**  File        : sysmem.c
+**
+**  Author	    : Auto-generated by STM32CubeIDE
+**
+**  Abstract    : STM32CubeIDE Minimal System Memory calls file
+**
+** 		          For more information about which c-functions
+**                need which of these lowlevel functions
+**                please consult the Newlib libc-manual
+**
+**  Environment : STM32CubeIDE MCU
+**
+**  Distribution: The file is distributed as is, without any warranty
+**                of any kind.
+**
+*****************************************************************************
+**
+** <h2><center>&copy; COPYRIGHT(c) 2018 STMicroelectronics</center></h2>
+**
+** Redistribution and use in source and binary forms, with or without modification,
+** are permitted provided that the following conditions are met:
+**   1. Redistributions of source code must retain the above copyright notice,
+**      this list of conditions and the following disclaimer.
+**   2. Redistributions in binary form must reproduce the above copyright notice,
+**      this list of conditions and the following disclaimer in the documentation
+**      and/or other materials provided with the distribution.
+**   3. Neither the name of STMicroelectronics nor the names of its contributors
+**      may be used to endorse or promote products derived from this software
+**      without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**
+**
+*****************************************************************************
+*/
+
+/* Includes */
+#include <errno.h>
+#include <stdio.h>
+
+/* Variables */
+extern int errno;
+register char * stack_ptr asm("sp");
+
+/* Functions */
+
+/**
+ _sbrk
+ Increase program data space. Malloc and related functions depend on this
+**/
+caddr_t _sbrk(int incr)
+{
+	extern char end asm("end");
+	static char *heap_end;
+	char *prev_heap_end;
+
+	if (heap_end == 0)
+		heap_end = &end;
+
+	prev_heap_end = heap_end;
+	if (heap_end + incr > stack_ptr)
+	{
+		errno = ENOMEM;
+		return (caddr_t) -1;
+	}
+
+	heap_end += incr;
+
+	return (caddr_t) prev_heap_end;
+}
+
diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Inc/main.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Inc/main.h
new file mode 100644
index 0000000..b64bd5c
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Inc/main.h
@@ -0,0 +1,85 @@
+/* USER CODE BEGIN Header */

+/**

+  ******************************************************************************

+  * @file           : main.h

+  * @brief          : Header for main.c file.

+  *                   This file contains the common defines of the application.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+/* USER CODE END Header */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __MAIN_H

+#define __MAIN_H

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/* Private includes ----------------------------------------------------------*/

+/* USER CODE BEGIN Includes */

+

+/* USER CODE END Includes */

+

+/* Exported types ------------------------------------------------------------*/

+/* USER CODE BEGIN ET */

+

+/* USER CODE END ET */

+

+/* Exported constants --------------------------------------------------------*/

+/* USER CODE BEGIN EC */

+

+/* USER CODE END EC */

+

+/* Exported macro ------------------------------------------------------------*/

+/* USER CODE BEGIN EM */

+

+/* USER CODE END EM */

+

+/* Exported functions prototypes ---------------------------------------------*/

+void Error_Handler(void);

+

+/* USER CODE BEGIN EFP */

+

+/* USER CODE END EFP */

+

+/* Private defines -----------------------------------------------------------*/

+#define B1_Pin GPIO_PIN_13

+#define B1_GPIO_Port GPIOC

+#define USART_TX_Pin GPIO_PIN_2

+#define USART_TX_GPIO_Port GPIOA

+#define USART_RX_Pin GPIO_PIN_3

+#define USART_RX_GPIO_Port GPIOA

+#define LD2_Pin GPIO_PIN_5

+#define LD2_GPIO_Port GPIOA

+#define TMS_Pin GPIO_PIN_13

+#define TMS_GPIO_Port GPIOA

+#define TCK_Pin GPIO_PIN_14

+#define TCK_GPIO_Port GPIOA

+#define SWO_Pin GPIO_PIN_3

+#define SWO_GPIO_Port GPIOB

+/* USER CODE BEGIN Private defines */

+

+/* USER CODE END Private defines */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __MAIN_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Inc/stm32l1xx_hal_conf.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Inc/stm32l1xx_hal_conf.h
new file mode 100644
index 0000000..5a7ba08
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Inc/stm32l1xx_hal_conf.h
@@ -0,0 +1,335 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_conf.h

+  * @brief   HAL configuration file.             

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; COPYRIGHT(c) 2020 STMicroelectronics</center></h2>

+  *

+  * Redistribution and use in source and binary forms, with or without modification,

+  * are permitted provided that the following conditions are met:

+  *   1. Redistributions of source code must retain the above copyright notice,

+  *      this list of conditions and the following disclaimer.

+  *   2. Redistributions in binary form must reproduce the above copyright notice,

+  *      this list of conditions and the following disclaimer in the documentation

+  *      and/or other materials provided with the distribution.

+  *   3. Neither the name of STMicroelectronics nor the names of its contributors

+  *      may be used to endorse or promote products derived from this software

+  *      without specific prior written permission.

+  *

+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE

+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL

+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR

+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER

+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,

+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+  *

+  ******************************************************************************

+  */ 

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_CONF_H

+#define __STM32L1xx_HAL_CONF_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Exported types ------------------------------------------------------------*/

+/* Exported constants --------------------------------------------------------*/

+

+/* ########################## Module Selection ############################## */

+/**

+  * @brief This is the list of modules to be used in the HAL driver 

+  */

+

+#define HAL_MODULE_ENABLED  

+/*#define HAL_ADC_MODULE_ENABLED   */

+/*#define HAL_CRYP_MODULE_ENABLED   */

+/*#define HAL_COMP_MODULE_ENABLED   */

+/*#define HAL_CRC_MODULE_ENABLED   */

+/*#define HAL_CRYP_MODULE_ENABLED   */

+/*#define HAL_DAC_MODULE_ENABLED   */

+/*#define HAL_I2C_MODULE_ENABLED   */

+/*#define HAL_I2S_MODULE_ENABLED   */

+/*#define HAL_IRDA_MODULE_ENABLED   */

+/*#define HAL_IWDG_MODULE_ENABLED   */

+/*#define HAL_LCD_MODULE_ENABLED   */

+/*#define HAL_NOR_MODULE_ENABLED   */

+/*#define HAL_OPAMP_MODULE_ENABLED   */

+/*#define HAL_PCD_MODULE_ENABLED   */

+/*#define HAL_RTC_MODULE_ENABLED   */

+/*#define HAL_SD_MODULE_ENABLED   */

+/*#define HAL_SMARTCARD_MODULE_ENABLED   */

+/*#define HAL_SPI_MODULE_ENABLED   */

+/*#define HAL_SRAM_MODULE_ENABLED   */

+#define HAL_TIM_MODULE_ENABLED

+#define HAL_UART_MODULE_ENABLED

+/*#define HAL_USART_MODULE_ENABLED   */

+/*#define HAL_WWDG_MODULE_ENABLED   */

+/*#define HAL_EXTI_MODULE_ENABLED   */

+#define HAL_GPIO_MODULE_ENABLED

+#define HAL_DMA_MODULE_ENABLED

+#define HAL_RCC_MODULE_ENABLED

+#define HAL_FLASH_MODULE_ENABLED

+#define HAL_PWR_MODULE_ENABLED

+#define HAL_CORTEX_MODULE_ENABLED

+

+/* ########################## Oscillator Values adaptation ####################*/

+/**

+  * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.

+  *        This value is used by the RCC HAL module to compute the system frequency

+  *        (when HSE is used as system clock source, directly or through the PLL).  

+  */

+#if !defined  (HSE_VALUE) 

+  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */

+#endif /* HSE_VALUE */

+

+#if !defined  (HSE_STARTUP_TIMEOUT)

+  #define HSE_STARTUP_TIMEOUT    ((uint32_t)100)   /*!< Time out for HSE start up, in ms */

+#endif /* HSE_STARTUP_TIMEOUT */

+

+/**

+  * @brief Internal Multiple Speed oscillator (MSI) default value.

+  *        This value is the default MSI range value after Reset.

+  */

+#if !defined  (MSI_VALUE)

+  #define MSI_VALUE    ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/

+#endif /* MSI_VALUE */

+/**

+  * @brief Internal High Speed oscillator (HSI) value.

+  *        This value is used by the RCC HAL module to compute the system frequency

+  *        (when HSI is used as system clock source, directly or through the PLL). 

+  */

+#if !defined  (HSI_VALUE)

+  #define HSI_VALUE    ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/

+#endif /* HSI_VALUE */

+

+/**

+  * @brief Internal Low Speed oscillator (LSI) value.

+  */

+#if !defined  (LSI_VALUE) 

+  #define LSI_VALUE    (37000U) /*!< LSI Typical Value in Hz*/

+#endif /* LSI_VALUE */          /*!< Value of the Internal Low Speed oscillator in Hz

+                                     The real value may vary depending on the variations

+                                     in voltage and temperature.*/

+                                     

+/**

+  * @brief External Low Speed oscillator (LSE) value.

+  *        This value is used by the UART, RTC HAL module to compute the system frequency

+  */

+#if !defined  (LSE_VALUE)

+  #define LSE_VALUE    ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/

+#endif /* LSE_VALUE */

+

+#if !defined  (LSE_STARTUP_TIMEOUT)

+  #define LSE_STARTUP_TIMEOUT    ((uint32_t)5000)   /*!< Time out for LSE start up, in ms */

+#endif /* HSE_STARTUP_TIMEOUT */

+

+/* Tip: To avoid modifying this file each time you need to use different HSE,

+   ===  you can define the HSE value in your toolchain compiler preprocessor. */

+

+/* ########################### System Configuration ######################### */

+/**

+  * @brief This is the HAL system configuration section

+  */     

+  

+#define  VDD_VALUE					  ((uint32_t)3300) /*!< Value of VDD in mv */           

+#define  TICK_INT_PRIORITY            ((uint32_t)0)    /*!< tick interrupt priority */            

+#define  USE_RTOS                     0     

+#define  PREFETCH_ENABLE              0

+#define  INSTRUCTION_CACHE_ENABLE     1

+#define  DATA_CACHE_ENABLE            1

+

+/* ########################## Assert Selection ############################## */

+/**

+  * @brief Uncomment the line below to expanse the "assert_param" macro in the 

+  *        HAL drivers code

+  */

+/* #define USE_FULL_ASSERT    1U */

+

+/* ################## Register callback feature configuration ############### */

+/**

+  * @brief Set below the peripheral configuration  to "1U" to add the support

+  *        of HAL callback registration/deregistration feature for the HAL

+  *        driver(s). This allows user application to provide specific callback

+  *        functions thanks to HAL_PPP_RegisterCallback() rather than overwriting

+  *        the default weak callback functions (see each stm32l0xx_hal_ppp.h file

+  *        for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef

+  *        for each PPP peripheral).

+  */

+#define USE_HAL_ADC_REGISTER_CALLBACKS        0U

+#define USE_HAL_COMP_REGISTER_CALLBACKS       0U

+#define USE_HAL_DAC_REGISTER_CALLBACKS        0U

+#define USE_HAL_I2C_REGISTER_CALLBACKS        0U

+#define USE_HAL_I2S_REGISTER_CALLBACKS        0U

+#define USE_HAL_IRDA_REGISTER_CALLBACKS       0U

+#define USE_HAL_OPAMP_REGISTER_CALLBACKS      0U

+#define USE_HAL_PCD_REGISTER_CALLBACKS        0U

+#define USE_HAL_RTC_REGISTER_CALLBACKS        0U

+#define USE_HAL_SDMMC_REGISTER_CALLBACKS      0U

+#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS  0U

+#define USE_HAL_SPI_REGISTER_CALLBACKS        0U

+#define USE_HAL_TIM_REGISTER_CALLBACKS        0U

+#define USE_HAL_UART_REGISTER_CALLBACKS       0U

+#define USE_HAL_USART_REGISTER_CALLBACKS      0U

+#define USE_HAL_WWDG_REGISTER_CALLBACKS       0U

+

+/* ################## SPI peripheral configuration ########################## */

+

+/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver

+ * Activated: CRC code is present inside driver

+ * Deactivated: CRC code cleaned from driver

+ */

+

+#define USE_SPI_CRC                   0U

+/* Includes ------------------------------------------------------------------*/

+/**

+  * @brief Include module's header file 

+  */

+

+#ifdef HAL_RCC_MODULE_ENABLED

+ #include "stm32l1xx_hal_rcc.h"

+#endif /* HAL_RCC_MODULE_ENABLED */

+

+#ifdef HAL_GPIO_MODULE_ENABLED

+ #include "stm32l1xx_hal_gpio.h"

+#endif /* HAL_GPIO_MODULE_ENABLED */

+

+#ifdef HAL_DMA_MODULE_ENABLED

+  #include "stm32l1xx_hal_dma.h"

+#endif /* HAL_DMA_MODULE_ENABLED */

+

+#ifdef HAL_CORTEX_MODULE_ENABLED

+ #include "stm32l1xx_hal_cortex.h"

+#endif /* HAL_CORTEX_MODULE_ENABLED */

+

+#ifdef HAL_ADC_MODULE_ENABLED

+ #include "stm32l1xx_hal_adc.h"

+#endif /* HAL_ADC_MODULE_ENABLED */

+

+#ifdef HAL_COMP_MODULE_ENABLED

+  #include "stm32l1xx_hal_comp.h"

+#endif /* HAL_COMP_MODULE_ENABLED */

+

+#ifdef HAL_CRC_MODULE_ENABLED

+ #include "stm32l1xx_hal_crc.h"

+#endif /* HAL_CRC_MODULE_ENABLED */

+

+#ifdef HAL_CRYP_MODULE_ENABLED

+ #include "stm32l1xx_hal_cryp.h"

+#endif /* HAL_CRYP_MODULE_ENABLED */

+

+#ifdef HAL_DAC_MODULE_ENABLED

+ #include "stm32l1xx_hal_dac.h"

+#endif /* HAL_DAC_MODULE_ENABLED */

+

+#ifdef HAL_FLASH_MODULE_ENABLED

+ #include "stm32l1xx_hal_flash.h"

+#endif /* HAL_FLASH_MODULE_ENABLED */

+

+#ifdef HAL_SRAM_MODULE_ENABLED

+ #include "stm32l1xx_hal_sram.h"

+#endif /* HAL_SRAM_MODULE_ENABLED */

+

+#ifdef HAL_NOR_MODULE_ENABLED

+ #include "stm32l1xx_hal_nor.h"

+#endif /* HAL_NOR_MODULE_ENABLED */ 

+

+#ifdef HAL_I2C_MODULE_ENABLED

+ #include "stm32l1xx_hal_i2c.h"

+#endif /* HAL_I2C_MODULE_ENABLED */

+

+#ifdef HAL_I2S_MODULE_ENABLED

+ #include "stm32l1xx_hal_i2s.h"

+#endif /* HAL_I2S_MODULE_ENABLED */

+

+#ifdef HAL_IWDG_MODULE_ENABLED

+ #include "stm32l1xx_hal_iwdg.h"

+#endif /* HAL_IWDG_MODULE_ENABLED */

+

+#ifdef HAL_LCD_MODULE_ENABLED

+ #include "stm32l1xx_hal_lcd.h"

+#endif /* HAL_LCD_MODULE_ENABLED */

+   

+#ifdef HAL_OPAMP_MODULE_ENABLED

+ #include "stm32l1xx_hal_opamp.h"

+#endif /* HAL_OPAMP_MODULE_ENABLED */

+

+#ifdef HAL_PWR_MODULE_ENABLED

+ #include "stm32l1xx_hal_pwr.h"

+#endif /* HAL_PWR_MODULE_ENABLED */

+

+#ifdef HAL_RTC_MODULE_ENABLED

+ #include "stm32l1xx_hal_rtc.h"

+#endif /* HAL_RTC_MODULE_ENABLED */

+

+#ifdef HAL_SD_MODULE_ENABLED

+ #include "stm32l1xx_hal_sd.h"

+#endif /* HAL_SD_MODULE_ENABLED */     

+

+#ifdef HAL_SPI_MODULE_ENABLED

+ #include "stm32l1xx_hal_spi.h"

+#endif /* HAL_SPI_MODULE_ENABLED */

+

+#ifdef HAL_TIM_MODULE_ENABLED

+ #include "stm32l1xx_hal_tim.h"

+#endif /* HAL_TIM_MODULE_ENABLED */

+

+#ifdef HAL_UART_MODULE_ENABLED

+ #include "stm32l1xx_hal_uart.h"

+#endif /* HAL_UART_MODULE_ENABLED */

+

+#ifdef HAL_USART_MODULE_ENABLED

+ #include "stm32l1xx_hal_usart.h"

+#endif /* HAL_USART_MODULE_ENABLED */

+

+#ifdef HAL_IRDA_MODULE_ENABLED

+ #include "stm32l1xx_hal_irda.h"

+#endif /* HAL_IRDA_MODULE_ENABLED */

+

+#ifdef HAL_SMARTCARD_MODULE_ENABLED

+ #include "stm32l1xx_hal_smartcard.h"

+#endif /* HAL_SMARTCARD_MODULE_ENABLED */

+

+#ifdef HAL_WWDG_MODULE_ENABLED

+ #include "stm32l1xx_hal_wwdg.h"

+#endif /* HAL_WWDG_MODULE_ENABLED */

+

+#ifdef HAL_PCD_MODULE_ENABLED

+ #include "stm32l1xx_hal_pcd.h"

+#endif /* HAL_PCD_MODULE_ENABLED */

+

+#ifdef HAL_EXTI_MODULE_ENABLED

+ #include "stm32l1xx_hal_exti.h"

+#endif /* HAL_EXTI_MODULE_ENABLED */

+   

+/* Exported macro ------------------------------------------------------------*/

+#ifdef  USE_FULL_ASSERT

+/**

+  * @brief  The assert_param macro is used for function's parameters check.

+  * @param  expr: If expr is false, it calls assert_failed function

+  *         which reports the name of the source file and the source

+  *         line number of the call that failed. 

+  *         If expr is true, it returns no value.

+  * @retval None

+  */

+  #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))

+/* Exported functions ------------------------------------------------------- */

+  void assert_failed(uint8_t* file, uint32_t line);

+#else

+  #define assert_param(expr) ((void)0U)

+#endif /* USE_FULL_ASSERT */   

+   

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_HAL_CONF_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Inc/stm32l1xx_it.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Inc/stm32l1xx_it.h
new file mode 100644
index 0000000..006ce63
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Inc/stm32l1xx_it.h
@@ -0,0 +1,66 @@
+/* USER CODE BEGIN Header */

+/**

+  ******************************************************************************

+  * @file    stm32l1xx_it.h

+  * @brief   This file contains the headers of the interrupt handlers.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+ ******************************************************************************

+  */

+/* USER CODE END Header */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_IT_H

+#define __STM32L1xx_IT_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif 

+

+/* Private includes ----------------------------------------------------------*/

+/* USER CODE BEGIN Includes */

+

+/* USER CODE END Includes */

+

+/* Exported types ------------------------------------------------------------*/

+/* USER CODE BEGIN ET */

+

+/* USER CODE END ET */

+

+/* Exported constants --------------------------------------------------------*/

+/* USER CODE BEGIN EC */

+

+/* USER CODE END EC */

+

+/* Exported macro ------------------------------------------------------------*/

+/* USER CODE BEGIN EM */

+

+/* USER CODE END EM */

+

+/* Exported functions prototypes ---------------------------------------------*/

+void NMI_Handler(void);

+void HardFault_Handler(void);

+void BusFault_Handler(void);

+void UsageFault_Handler(void);

+void DebugMon_Handler(void);

+void TIM6_IRQHandler(void);

+/* USER CODE BEGIN EFP */

+

+/* USER CODE END EFP */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_IT_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/main.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/main.c
new file mode 100644
index 0000000..0b4ec9c
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/main.c
@@ -0,0 +1,269 @@
+/* USER CODE BEGIN Header */

+/**

+  ******************************************************************************

+  * @file           : main.c

+  * @brief          : Main program body

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+/* USER CODE END Header */

+

+/* Includes ------------------------------------------------------------------*/

+#include "main.h"

+

+/* Private includes ----------------------------------------------------------*/

+/* USER CODE BEGIN Includes */

+#include "app_main.h"

+/* USER CODE END Includes */

+

+/* Private typedef -----------------------------------------------------------*/

+/* USER CODE BEGIN PTD */

+

+/* USER CODE END PTD */

+

+/* Private define ------------------------------------------------------------*/

+/* USER CODE BEGIN PD */

+/* USER CODE END PD */

+

+/* Private macro -------------------------------------------------------------*/

+/* USER CODE BEGIN PM */

+

+/* USER CODE END PM */

+

+/* Private variables ---------------------------------------------------------*/

+UART_HandleTypeDef huart2;

+

+/* USER CODE BEGIN PV */

+

+/* USER CODE END PV */

+

+/* Private function prototypes -----------------------------------------------*/

+void SystemClock_Config(void);

+static void MX_GPIO_Init(void);

+static void MX_USART2_UART_Init(void);

+/* USER CODE BEGIN PFP */

+

+/* USER CODE END PFP */

+

+/* Private user code ---------------------------------------------------------*/

+/* USER CODE BEGIN 0 */

+

+/* USER CODE END 0 */

+

+/**

+  * @brief  The application entry point.

+  * @retval int

+  */

+int main(void)

+{

+  /* USER CODE BEGIN 1 */

+

+  /* USER CODE END 1 */

+  

+

+  /* MCU Configuration--------------------------------------------------------*/

+

+  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

+  HAL_Init();

+

+  /* USER CODE BEGIN Init */

+

+  /* USER CODE END Init */

+

+  /* Configure the system clock */

+  SystemClock_Config();

+

+  /* USER CODE BEGIN SysInit */

+

+  /* USER CODE END SysInit */

+

+  /* Initialize all configured peripherals */

+  MX_GPIO_Init();

+  MX_USART2_UART_Init();

+  /* USER CODE BEGIN 2 */

+  /* Call our entry point. */

+  app_main();

+  /* USER CODE END 2 */

+

+  /* Infinite loop */

+  /* USER CODE BEGIN WHILE */

+  while (1)

+  {

+    /* USER CODE END WHILE */

+

+    /* USER CODE BEGIN 3 */

+  }

+  /* USER CODE END 3 */

+}

+

+/**

+  * @brief System Clock Configuration

+  * @retval None

+  */

+void SystemClock_Config(void)

+{

+  RCC_OscInitTypeDef RCC_OscInitStruct = {0};

+  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

+

+  /** Configure the main internal regulator output voltage 

+  */

+  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

+  /** Initializes the CPU, AHB and APB busses clocks 

+  */

+  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

+  RCC_OscInitStruct.HSIState = RCC_HSI_ON;

+  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

+  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

+  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;

+  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;

+  RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;

+  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

+  {

+    Error_Handler();

+  }

+  /** Initializes the CPU, AHB and APB busses clocks 

+  */

+  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

+                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

+  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

+  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

+  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

+  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

+

+  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)

+  {

+    Error_Handler();

+  }

+}

+

+/**

+  * @brief USART2 Initialization Function

+  * @param None

+  * @retval None

+  */

+static void MX_USART2_UART_Init(void)

+{

+

+  /* USER CODE BEGIN USART2_Init 0 */

+

+  /* USER CODE END USART2_Init 0 */

+

+  /* USER CODE BEGIN USART2_Init 1 */

+

+  /* USER CODE END USART2_Init 1 */

+  huart2.Instance = USART2;

+  huart2.Init.BaudRate = 115200;

+  huart2.Init.WordLength = UART_WORDLENGTH_8B;

+  huart2.Init.StopBits = UART_STOPBITS_1;

+  huart2.Init.Parity = UART_PARITY_NONE;

+  huart2.Init.Mode = UART_MODE_TX_RX;

+  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;

+  huart2.Init.OverSampling = UART_OVERSAMPLING_16;

+  if (HAL_UART_Init(&huart2) != HAL_OK)

+  {

+    Error_Handler();

+  }

+  /* USER CODE BEGIN USART2_Init 2 */

+

+  /* USER CODE END USART2_Init 2 */

+

+}

+

+/**

+  * @brief GPIO Initialization Function

+  * @param None

+  * @retval None

+  */

+static void MX_GPIO_Init(void)

+{

+  GPIO_InitTypeDef GPIO_InitStruct = {0};

+

+  /* GPIO Ports Clock Enable */

+  __HAL_RCC_GPIOC_CLK_ENABLE();

+  __HAL_RCC_GPIOH_CLK_ENABLE();

+  __HAL_RCC_GPIOA_CLK_ENABLE();

+  __HAL_RCC_GPIOB_CLK_ENABLE();

+

+  /*Configure GPIO pin Output Level */

+  HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);

+

+  /*Configure GPIO pin : B1_Pin */

+  GPIO_InitStruct.Pin = B1_Pin;

+  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;

+  GPIO_InitStruct.Pull = GPIO_NOPULL;

+  HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);

+

+  /*Configure GPIO pin : LD2_Pin */

+  GPIO_InitStruct.Pin = LD2_Pin;

+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

+  GPIO_InitStruct.Pull = GPIO_NOPULL;

+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

+  HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);

+

+}

+

+/* USER CODE BEGIN 4 */

+

+/* USER CODE END 4 */

+

+/**

+  * @brief  Period elapsed callback in non blocking mode

+  * @note   This function is called  when TIM6 interrupt took place, inside

+  * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment

+  * a global variable "uwTick" used as application time base.

+  * @param  htim : TIM handle

+  * @retval None

+  */

+void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

+{

+  /* USER CODE BEGIN Callback 0 */

+

+  /* USER CODE END Callback 0 */

+  if (htim->Instance == TIM6) {

+    HAL_IncTick();

+  }

+  /* USER CODE BEGIN Callback 1 */

+

+  /* USER CODE END Callback 1 */

+}

+

+/**

+  * @brief  This function is executed in case of error occurrence.

+  * @retval None

+  */

+void Error_Handler(void)

+{

+  /* USER CODE BEGIN Error_Handler_Debug */

+  /* User can add his own implementation to report the HAL error return state */

+

+  /* USER CODE END Error_Handler_Debug */

+}

+

+#ifdef  USE_FULL_ASSERT

+/**

+  * @brief  Reports the name of the source file and the source line number

+  *         where the assert_param error has occurred.

+  * @param  file: pointer to the source file name

+  * @param  line: assert_param error line source number

+  * @retval None

+  */

+void assert_failed(uint8_t *file, uint32_t line)

+{ 

+  /* USER CODE BEGIN 6 */

+  /* User can add his own implementation to report the file name and line number,

+     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

+  /* USER CODE END 6 */

+}

+#endif /* USE_FULL_ASSERT */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/stm32l1xx_hal_msp.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/stm32l1xx_hal_msp.c
new file mode 100644
index 0000000..d788004
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/stm32l1xx_hal_msp.c
@@ -0,0 +1,150 @@
+/* USER CODE BEGIN Header */

+/**

+  ******************************************************************************

+  * File Name          : stm32l1xx_hal_msp.c

+  * Description        : This file provides code for the MSP Initialization 

+  *                      and de-Initialization codes.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+/* USER CODE END Header */

+

+/* Includes ------------------------------------------------------------------*/

+#include "main.h"

+/* USER CODE BEGIN Includes */

+

+/* USER CODE END Includes */

+

+/* Private typedef -----------------------------------------------------------*/

+/* USER CODE BEGIN TD */

+

+/* USER CODE END TD */

+

+/* Private define ------------------------------------------------------------*/

+/* USER CODE BEGIN Define */

+ 

+/* USER CODE END Define */

+

+/* Private macro -------------------------------------------------------------*/

+/* USER CODE BEGIN Macro */

+

+/* USER CODE END Macro */

+

+/* Private variables ---------------------------------------------------------*/

+/* USER CODE BEGIN PV */

+

+/* USER CODE END PV */

+

+/* Private function prototypes -----------------------------------------------*/

+/* USER CODE BEGIN PFP */

+

+/* USER CODE END PFP */

+

+/* External functions --------------------------------------------------------*/

+/* USER CODE BEGIN ExternalFunctions */

+

+/* USER CODE END ExternalFunctions */

+

+/* USER CODE BEGIN 0 */

+

+/* USER CODE END 0 */

+/**

+  * Initializes the Global MSP.

+  */

+void HAL_MspInit(void)

+{

+  /* USER CODE BEGIN MspInit 0 */

+

+  /* USER CODE END MspInit 0 */

+

+  __HAL_RCC_COMP_CLK_ENABLE();

+  __HAL_RCC_SYSCFG_CLK_ENABLE();

+  __HAL_RCC_PWR_CLK_ENABLE();

+

+  /* System interrupt init*/

+

+  /* USER CODE BEGIN MspInit 1 */

+

+  /* USER CODE END MspInit 1 */

+}

+

+/**

+* @brief UART MSP Initialization

+* This function configures the hardware resources used in this example

+* @param huart: UART handle pointer

+* @retval None

+*/

+void HAL_UART_MspInit(UART_HandleTypeDef* huart)

+{

+  GPIO_InitTypeDef GPIO_InitStruct = {0};

+  if(huart->Instance==USART2)

+  {

+  /* USER CODE BEGIN USART2_MspInit 0 */

+

+  /* USER CODE END USART2_MspInit 0 */

+    /* Peripheral clock enable */

+    __HAL_RCC_USART2_CLK_ENABLE();

+  

+    __HAL_RCC_GPIOA_CLK_ENABLE();

+    /**USART2 GPIO Configuration    

+    PA2     ------> USART2_TX

+    PA3     ------> USART2_RX 

+    */

+    GPIO_InitStruct.Pin = USART_TX_Pin|USART_RX_Pin;

+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

+    GPIO_InitStruct.Pull = GPIO_PULLUP;

+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;

+    GPIO_InitStruct.Alternate = GPIO_AF7_USART2;

+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

+

+  /* USER CODE BEGIN USART2_MspInit 1 */

+

+  /* USER CODE END USART2_MspInit 1 */

+  }

+

+}

+

+/**

+* @brief UART MSP De-Initialization

+* This function freeze the hardware resources used in this example

+* @param huart: UART handle pointer

+* @retval None

+*/

+void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)

+{

+  if(huart->Instance==USART2)

+  {

+  /* USER CODE BEGIN USART2_MspDeInit 0 */

+

+  /* USER CODE END USART2_MspDeInit 0 */

+    /* Peripheral clock disable */

+    __HAL_RCC_USART2_CLK_DISABLE();

+  

+    /**USART2 GPIO Configuration    

+    PA2     ------> USART2_TX

+    PA3     ------> USART2_RX 

+    */

+    HAL_GPIO_DeInit(GPIOA, USART_TX_Pin|USART_RX_Pin);

+

+  /* USER CODE BEGIN USART2_MspDeInit 1 */

+

+  /* USER CODE END USART2_MspDeInit 1 */

+  }

+

+}

+

+/* USER CODE BEGIN 1 */

+

+/* USER CODE END 1 */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/stm32l1xx_hal_timebase_tim.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/stm32l1xx_hal_timebase_tim.c
new file mode 100644
index 0000000..d682909
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/stm32l1xx_hal_timebase_tim.c
@@ -0,0 +1,114 @@
+/* USER CODE BEGIN Header */

+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_timebase_TIM.c 

+  * @brief   HAL time base based on the hardware TIM.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+/* USER CODE END Header */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+#include "stm32l1xx_hal_tim.h"

+ 

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/* Private macro -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+TIM_HandleTypeDef        htim6; 

+/* Private function prototypes -----------------------------------------------*/

+/* Private functions ---------------------------------------------------------*/

+

+/**

+  * @brief  This function configures the TIM6 as a time base source. 

+  *         The time source is configured  to have 1ms time base with a dedicated 

+  *         Tick interrupt priority. 

+  * @note   This function is called  automatically at the beginning of program after

+  *         reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig(). 

+  * @param  TickPriority: Tick interrupt priority.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)

+{

+  RCC_ClkInitTypeDef    clkconfig;

+  uint32_t              uwTimclock = 0;

+  uint32_t              uwPrescalerValue = 0;

+  uint32_t              pFLatency;

+  

+  /*Configure the TIM6 IRQ priority */

+  HAL_NVIC_SetPriority(TIM6_IRQn, TickPriority ,0); 

+  

+  /* Enable the TIM6 global Interrupt */

+  HAL_NVIC_EnableIRQ(TIM6_IRQn); 

+  

+  /* Enable TIM6 clock */

+  __HAL_RCC_TIM6_CLK_ENABLE();

+  

+  /* Get clock configuration */

+  HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);

+  

+  /* Compute TIM6 clock */

+  uwTimclock = HAL_RCC_GetPCLK1Freq();

+   

+  /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */

+  uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000) - 1);

+  

+  /* Initialize TIM6 */

+  htim6.Instance = TIM6;

+  

+  /* Initialize TIMx peripheral as follow:

+  + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base.

+  + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.

+  + ClockDivision = 0

+  + Counter direction = Up

+  */

+  htim6.Init.Period = (1000000 / 1000) - 1;

+  htim6.Init.Prescaler = uwPrescalerValue;

+  htim6.Init.ClockDivision = 0;

+  htim6.Init.CounterMode = TIM_COUNTERMODE_UP;

+  if(HAL_TIM_Base_Init(&htim6) == HAL_OK)

+  {

+    /* Start the TIM time Base generation in interrupt mode */

+    return HAL_TIM_Base_Start_IT(&htim6);

+  }

+  

+  /* Return function status */

+  return HAL_ERROR;

+}

+

+/**

+  * @brief  Suspend Tick increment.

+  * @note   Disable the tick increment by disabling TIM6 update interrupt.

+  * @param  None

+  * @retval None

+  */

+void HAL_SuspendTick(void)

+{

+  /* Disable TIM6 update Interrupt */

+  __HAL_TIM_DISABLE_IT(&htim6, TIM_IT_UPDATE);                                                  

+}

+

+/**

+  * @brief  Resume Tick increment.

+  * @note   Enable the tick increment by Enabling TIM6 update interrupt.

+  * @param  None

+  * @retval None

+  */

+void HAL_ResumeTick(void)

+{

+  /* Enable TIM6 Update interrupt */

+  __HAL_TIM_ENABLE_IT(&htim6, TIM_IT_UPDATE);

+}

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/stm32l1xx_it.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/stm32l1xx_it.c
new file mode 100644
index 0000000..284b6c6
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/stm32l1xx_it.c
@@ -0,0 +1,163 @@
+/* USER CODE BEGIN Header */

+/**

+  ******************************************************************************

+  * @file    stm32l1xx_it.c

+  * @brief   Interrupt Service Routines.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+/* USER CODE END Header */

+

+/* Includes ------------------------------------------------------------------*/

+#include "main.h"

+#include "stm32l1xx_it.h"

+/* Private includes ----------------------------------------------------------*/

+/* USER CODE BEGIN Includes */

+/* USER CODE END Includes */

+

+/* Private typedef -----------------------------------------------------------*/

+/* USER CODE BEGIN TD */

+

+/* USER CODE END TD */

+

+/* Private define ------------------------------------------------------------*/

+/* USER CODE BEGIN PD */

+ 

+/* USER CODE END PD */

+

+/* Private macro -------------------------------------------------------------*/

+/* USER CODE BEGIN PM */

+

+/* USER CODE END PM */

+

+/* Private variables ---------------------------------------------------------*/

+/* USER CODE BEGIN PV */

+

+/* USER CODE END PV */

+

+/* Private function prototypes -----------------------------------------------*/

+/* USER CODE BEGIN PFP */

+

+/* USER CODE END PFP */

+

+/* Private user code ---------------------------------------------------------*/

+/* USER CODE BEGIN 0 */

+

+/* USER CODE END 0 */

+

+/* External variables --------------------------------------------------------*/

+extern TIM_HandleTypeDef htim6;

+

+/* USER CODE BEGIN EV */

+

+/* USER CODE END EV */

+

+/******************************************************************************/

+/*           Cortex-M3 Processor Interruption and Exception Handlers          */ 

+/******************************************************************************/

+/**

+  * @brief This function handles Non maskable interrupt.

+  */

+void NMI_Handler(void)

+{

+  /* USER CODE BEGIN NonMaskableInt_IRQn 0 */

+

+  /* USER CODE END NonMaskableInt_IRQn 0 */

+  /* USER CODE BEGIN NonMaskableInt_IRQn 1 */

+

+  /* USER CODE END NonMaskableInt_IRQn 1 */

+}

+

+/**

+  * @brief This function handles Hard fault interrupt.

+  */

+void HardFault_Handler(void)

+{

+  /* USER CODE BEGIN HardFault_IRQn 0 */

+

+  /* USER CODE END HardFault_IRQn 0 */

+  while (1)

+  {

+    /* USER CODE BEGIN W1_HardFault_IRQn 0 */

+    /* USER CODE END W1_HardFault_IRQn 0 */

+  }

+}

+

+/**

+  * @brief This function handles Pre-fetch fault, memory access fault.

+  */

+void BusFault_Handler(void)

+{

+  /* USER CODE BEGIN BusFault_IRQn 0 */

+

+  /* USER CODE END BusFault_IRQn 0 */

+  while (1)

+  {

+    /* USER CODE BEGIN W1_BusFault_IRQn 0 */

+    /* USER CODE END W1_BusFault_IRQn 0 */

+  }

+}

+

+/**

+  * @brief This function handles Undefined instruction or illegal state.

+  */

+void UsageFault_Handler(void)

+{

+  /* USER CODE BEGIN UsageFault_IRQn 0 */

+

+  /* USER CODE END UsageFault_IRQn 0 */

+  while (1)

+  {

+    /* USER CODE BEGIN W1_UsageFault_IRQn 0 */

+    /* USER CODE END W1_UsageFault_IRQn 0 */

+  }

+}

+

+/**

+  * @brief This function handles Debug monitor.

+  */

+void DebugMon_Handler(void)

+{

+  /* USER CODE BEGIN DebugMonitor_IRQn 0 */

+

+  /* USER CODE END DebugMonitor_IRQn 0 */

+  /* USER CODE BEGIN DebugMonitor_IRQn 1 */

+

+  /* USER CODE END DebugMonitor_IRQn 1 */

+}

+

+/******************************************************************************/

+/* STM32L1xx Peripheral Interrupt Handlers                                    */

+/* Add here the Interrupt Handlers for the used peripherals.                  */

+/* For the available peripheral interrupt handler names,                      */

+/* please refer to the startup file (startup_stm32l1xx.s).                    */

+/******************************************************************************/

+

+/**

+  * @brief This function handles TIM6 global interrupt.

+  */

+void TIM6_IRQHandler(void)

+{

+  /* USER CODE BEGIN TIM6_IRQn 0 */

+

+  /* USER CODE END TIM6_IRQn 0 */

+  HAL_TIM_IRQHandler(&htim6);

+  /* USER CODE BEGIN TIM6_IRQn 1 */

+

+  /* USER CODE END TIM6_IRQn 1 */

+}

+

+/* USER CODE BEGIN 1 */

+

+/* USER CODE END 1 */

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/system_stm32l1xx.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/system_stm32l1xx.c
new file mode 100644
index 0000000..9c58408
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Core/Src/system_stm32l1xx.c
@@ -0,0 +1,426 @@
+/**

+  ******************************************************************************

+  * @file    system_stm32l1xx.c

+  * @author  MCD Application Team

+  * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer System Source File.

+  *             

+  *   This file provides two functions and one global variable to be called from 

+  *   user application:

+  *      - SystemInit(): This function is called at startup just after reset and 

+  *                      before branch to main program. This call is made inside

+  *                      the "startup_stm32l1xx.s" file.

+  *                        

+  *      - SystemCoreClock variable: Contains the core clock (HCLK), it can be used

+  *                                  by the user application to setup the SysTick 

+  *                                  timer or configure other parameters.

+  *                                     

+  *      - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must

+  *                                 be called whenever the core clock is changed

+  *                                 during program execution.   

+  *      

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/** @addtogroup CMSIS

+  * @{

+  */

+

+/** @addtogroup stm32l1xx_system

+  * @{

+  */  

+  

+/** @addtogroup STM32L1xx_System_Private_Includes

+  * @{

+  */

+

+#include "stm32l1xx.h"

+

+/**

+  * @}

+  */

+

+/** @addtogroup STM32L1xx_System_Private_TypesDefinitions

+  * @{

+  */

+

+/**

+  * @}

+  */

+

+/** @addtogroup STM32L1xx_System_Private_Defines

+  * @{

+  */

+#if !defined  (HSE_VALUE) 

+  #define HSE_VALUE    ((uint32_t)8000000U) /*!< Default value of the External oscillator in Hz.

+                                                This value can be provided and adapted by the user application. */

+#endif /* HSE_VALUE */

+

+#if !defined  (HSI_VALUE)

+  #define HSI_VALUE    ((uint32_t)8000000U) /*!< Default value of the Internal oscillator in Hz.

+                                                This value can be provided and adapted by the user application. */

+#endif /* HSI_VALUE */

+

+/*!< Uncomment the following line if you need to use external SRAM mounted

+     on STM32L152D_EVAL board as data memory  */

+/* #define DATA_IN_ExtSRAM */

+  

+/*!< Uncomment the following line if you need to relocate your vector Table in

+     Internal SRAM. */ 

+/* #define VECT_TAB_SRAM */

+#define VECT_TAB_OFFSET  0x00U /*!< Vector Table base offset field. 

+                                  This value must be a multiple of 0x200. */

+/**

+  * @}

+  */

+

+/** @addtogroup STM32L1xx_System_Private_Macros

+  * @{

+  */

+

+/**

+  * @}

+  */

+

+/** @addtogroup STM32L1xx_System_Private_Variables

+  * @{

+  */

+  /* This variable is updated in three ways:

+      1) by calling CMSIS function SystemCoreClockUpdate()

+      2) by calling HAL API function HAL_RCC_GetHCLKFreq()

+      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency

+         Note: If you use this function to configure the system clock; then there

+               is no need to call the 2 first functions listed above, since SystemCoreClock

+               variable is updated automatically.

+  */

+uint32_t SystemCoreClock        = 2097000U;

+const uint8_t PLLMulTable[9]    = {3U, 4U, 6U, 8U, 12U, 16U, 24U, 32U, 48U};

+const uint8_t AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U};

+const uint8_t APBPrescTable[8]  = {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U};

+

+/**

+  * @}

+  */

+

+/** @addtogroup STM32L1xx_System_Private_FunctionPrototypes

+  * @{

+  */

+

+#if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)

+#ifdef DATA_IN_ExtSRAM

+  static void SystemInit_ExtMemCtl(void); 

+#endif /* DATA_IN_ExtSRAM */

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+/**

+  * @}

+  */

+

+/** @addtogroup STM32L1xx_System_Private_Functions

+  * @{

+  */

+

+/**

+  * @brief  Setup the microcontroller system.

+  *         Initialize the Embedded Flash Interface, the PLL and update the 

+  *         SystemCoreClock variable.

+  * @param  None

+  * @retval None

+  */

+void SystemInit (void)

+{

+  /*!< Set MSION bit */

+  RCC->CR |= (uint32_t)0x00000100;

+

+  /*!< Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0], MCOSEL[2:0] and MCOPRE[2:0] bits */

+  RCC->CFGR &= (uint32_t)0x88FFC00C;

+  

+  /*!< Reset HSION, HSEON, CSSON and PLLON bits */

+  RCC->CR &= (uint32_t)0xEEFEFFFE;

+

+  /*!< Reset HSEBYP bit */

+  RCC->CR &= (uint32_t)0xFFFBFFFF;

+

+  /*!< Reset PLLSRC, PLLMUL[3:0] and PLLDIV[1:0] bits */

+  RCC->CFGR &= (uint32_t)0xFF02FFFF;

+

+  /*!< Disable all interrupts */

+  RCC->CIR = 0x00000000;

+

+#ifdef DATA_IN_ExtSRAM

+  SystemInit_ExtMemCtl(); 

+#endif /* DATA_IN_ExtSRAM */

+    

+#ifdef VECT_TAB_SRAM

+  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */

+#else

+  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */

+#endif

+}

+

+/**

+  * @brief  Update SystemCoreClock according to Clock Register Values

+  *         The SystemCoreClock variable contains the core clock (HCLK), it can

+  *         be used by the user application to setup the SysTick timer or configure

+  *         other parameters.

+  *           

+  * @note   Each time the core clock (HCLK) changes, this function must be called

+  *         to update SystemCoreClock variable value. Otherwise, any configuration

+  *         based on this variable will be incorrect.         

+  *     

+  * @note   - The system frequency computed by this function is not the real 

+  *           frequency in the chip. It is calculated based on the predefined 

+  *           constant and the selected clock source:

+  *             

+  *           - If SYSCLK source is MSI, SystemCoreClock will contain the MSI 

+  *             value as defined by the MSI range.

+  *                                   

+  *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)

+  *                                              

+  *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)

+  *                          

+  *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)

+  *             or HSI_VALUE(*) multiplied/divided by the PLL factors.

+  *         

+  *         (*) HSI_VALUE is a constant defined in stm32l1xx.h file (default value

+  *             16 MHz) but the real value may vary depending on the variations

+  *             in voltage and temperature.   

+  *    

+  *         (**) HSE_VALUE is a constant defined in stm32l1xx.h file (default value

+  *              8 MHz), user has to ensure that HSE_VALUE is same as the real

+  *              frequency of the crystal used. Otherwise, this function may

+  *              have wrong result.

+  *                

+  *         - The result of this function could be not correct when using fractional

+  *           value for HSE crystal.

+  * @param  None

+  * @retval None

+  */

+void SystemCoreClockUpdate (void)

+{

+  uint32_t tmp = 0, pllmul = 0, plldiv = 0, pllsource = 0, msirange = 0;

+

+  /* Get SYSCLK source -------------------------------------------------------*/

+  tmp = RCC->CFGR & RCC_CFGR_SWS;

+  

+  switch (tmp)

+  {

+    case 0x00:  /* MSI used as system clock */

+      msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE) >> 13;

+      SystemCoreClock = (32768 * (1 << (msirange + 1)));

+      break;

+    case 0x04:  /* HSI used as system clock */

+      SystemCoreClock = HSI_VALUE;

+      break;

+    case 0x08:  /* HSE used as system clock */

+      SystemCoreClock = HSE_VALUE;

+      break;

+    case 0x0C:  /* PLL used as system clock */

+      /* Get PLL clock source and multiplication factor ----------------------*/

+      pllmul = RCC->CFGR & RCC_CFGR_PLLMUL;

+      plldiv = RCC->CFGR & RCC_CFGR_PLLDIV;

+      pllmul = PLLMulTable[(pllmul >> 18)];

+      plldiv = (plldiv >> 22) + 1;

+      

+      pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;

+

+      if (pllsource == 0x00)

+      {

+        /* HSI oscillator clock selected as PLL clock entry */

+        SystemCoreClock = (((HSI_VALUE) * pllmul) / plldiv);

+      }

+      else

+      {

+        /* HSE selected as PLL clock entry */

+        SystemCoreClock = (((HSE_VALUE) * pllmul) / plldiv);

+      }

+      break;

+    default: /* MSI used as system clock */

+      msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE) >> 13;

+      SystemCoreClock = (32768 * (1 << (msirange + 1)));

+      break;

+  }

+  /* Compute HCLK clock frequency --------------------------------------------*/

+  /* Get HCLK prescaler */

+  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];

+  /* HCLK clock frequency */

+  SystemCoreClock >>= tmp;

+}

+

+#if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)

+#ifdef DATA_IN_ExtSRAM

+/**

+  * @brief  Setup the external memory controller.

+  *         Called in SystemInit() function before jump to main.

+  *         This function configures the external SRAM mounted on STM32L152D_EVAL board

+  *         This SRAM will be used as program data memory (including heap and stack).

+  * @param  None

+  * @retval None

+  */

+void SystemInit_ExtMemCtl(void)

+{

+  __IO uint32_t tmpreg = 0;

+

+  /* Flash 1 wait state */

+  FLASH->ACR |= FLASH_ACR_LATENCY;

+  

+  /* Power enable */

+  RCC->APB1ENR |= RCC_APB1ENR_PWREN;

+  

+  /* Delay after an RCC peripheral clock enabling */

+  tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);

+

+  /* Select the Voltage Range 1 (1.8 V) */

+  PWR->CR = PWR_CR_VOS_0;

+  

+  /* Wait Until the Voltage Regulator is ready */

+  while((PWR->CSR & PWR_CSR_VOSF) != RESET)

+  {

+  }

+  

+/*-- GPIOs Configuration -----------------------------------------------------*/

+/*

+ +-------------------+--------------------+------------------+------------------+

+ +                       SRAM pins assignment                                   +

+ +-------------------+--------------------+------------------+------------------+

+ | PD0  <-> FSMC_D2  | PE0  <-> FSMC_NBL0 | PF0  <-> FSMC_A0 | PG0 <-> FSMC_A10 |

+ | PD1  <-> FSMC_D3  | PE1  <-> FSMC_NBL1 | PF1  <-> FSMC_A1 | PG1 <-> FSMC_A11 |

+ | PD4  <-> FSMC_NOE | PE7  <-> FSMC_D4   | PF2  <-> FSMC_A2 | PG2 <-> FSMC_A12 |

+ | PD5  <-> FSMC_NWE | PE8  <-> FSMC_D5   | PF3  <-> FSMC_A3 | PG3 <-> FSMC_A13 |

+ | PD8  <-> FSMC_D13 | PE9  <-> FSMC_D6   | PF4  <-> FSMC_A4 | PG4 <-> FSMC_A14 |

+ | PD9  <-> FSMC_D14 | PE10 <-> FSMC_D7   | PF5  <-> FSMC_A5 | PG5 <-> FSMC_A15 |

+ | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8   | PF12 <-> FSMC_A6 | PG10<-> FSMC_NE2 |

+ | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9   | PF13 <-> FSMC_A7 |------------------+

+ | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10  | PF14 <-> FSMC_A8 | 

+ | PD13 <-> FSMC_A18 | PE14 <-> FSMC_D11  | PF15 <-> FSMC_A9 | 

+ | PD14 <-> FSMC_D0  | PE15 <-> FSMC_D12  |------------------+

+ | PD15 <-> FSMC_D1  |--------------------+ 

+ +-------------------+

+*/

+

+  /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */

+  RCC->AHBENR   = 0x000080D8;

+  

+  /* Delay after an RCC peripheral clock enabling */

+  tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIODEN);

+  

+  /* Connect PDx pins to FSMC Alternate function */

+  GPIOD->AFR[0]  = 0x00CC00CC;

+  GPIOD->AFR[1]  = 0xCCCCCCCC;

+  /* Configure PDx pins in Alternate function mode */  

+  GPIOD->MODER   = 0xAAAA0A0A;

+  /* Configure PDx pins speed to 40 MHz */  

+  GPIOD->OSPEEDR = 0xFFFF0F0F;

+  /* Configure PDx pins Output type to push-pull */  

+  GPIOD->OTYPER  = 0x00000000;

+  /* No pull-up, pull-down for PDx pins */ 

+  GPIOD->PUPDR   = 0x00000000;

+

+  /* Connect PEx pins to FSMC Alternate function */

+  GPIOE->AFR[0]  = 0xC00000CC;

+  GPIOE->AFR[1]  = 0xCCCCCCCC;

+  /* Configure PEx pins in Alternate function mode */ 

+  GPIOE->MODER   = 0xAAAA800A;

+  /* Configure PEx pins speed to 40 MHz */ 

+  GPIOE->OSPEEDR = 0xFFFFC00F;

+  /* Configure PEx pins Output type to push-pull */  

+  GPIOE->OTYPER  = 0x00000000;

+  /* No pull-up, pull-down for PEx pins */ 

+  GPIOE->PUPDR   = 0x00000000;

+

+  /* Connect PFx pins to FSMC Alternate function */

+  GPIOF->AFR[0]  = 0x00CCCCCC;

+  GPIOF->AFR[1]  = 0xCCCC0000;

+  /* Configure PFx pins in Alternate function mode */   

+  GPIOF->MODER   = 0xAA000AAA;

+  /* Configure PFx pins speed to 40 MHz */ 

+  GPIOF->OSPEEDR = 0xFF000FFF;

+  /* Configure PFx pins Output type to push-pull */  

+  GPIOF->OTYPER  = 0x00000000;

+  /* No pull-up, pull-down for PFx pins */ 

+  GPIOF->PUPDR   = 0x00000000;

+

+  /* Connect PGx pins to FSMC Alternate function */

+  GPIOG->AFR[0]  = 0x00CCCCCC;

+  GPIOG->AFR[1]  = 0x00000C00;

+  /* Configure PGx pins in Alternate function mode */ 

+  GPIOG->MODER   = 0x00200AAA;

+  /* Configure PGx pins speed to 40 MHz */ 

+  GPIOG->OSPEEDR = 0x00300FFF;

+  /* Configure PGx pins Output type to push-pull */  

+  GPIOG->OTYPER  = 0x00000000;

+  /* No pull-up, pull-down for PGx pins */ 

+  GPIOG->PUPDR   = 0x00000000;

+  

+/*-- FSMC Configuration ------------------------------------------------------*/

+  /* Enable the FSMC interface clock */

+  RCC->AHBENR    = 0x400080D8;

+

+  /* Delay after an RCC peripheral clock enabling */

+  tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);

+  

+  (void)(tmpreg);

+  

+  /* Configure and enable Bank1_SRAM3 */

+  FSMC_Bank1->BTCR[4]  = 0x00001011;

+  FSMC_Bank1->BTCR[5]  = 0x00000300;

+  FSMC_Bank1E->BWTR[4] = 0x0FFFFFFF;

+/*

+  Bank1_SRAM3 is configured as follow:

+

+  p.FSMC_AddressSetupTime = 0;

+  p.FSMC_AddressHoldTime = 0;

+  p.FSMC_DataSetupTime = 3;

+  p.FSMC_BusTurnAroundDuration = 0;

+  p.FSMC_CLKDivision = 0;

+  p.FSMC_DataLatency = 0;

+  p.FSMC_AccessMode = FSMC_AccessMode_A;

+

+  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;

+  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;

+  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;

+  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;

+  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;

+  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;

+  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;

+  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;

+  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;

+  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;

+  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;

+  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;

+  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;

+  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;

+  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

+

+  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); 

+

+  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);

+*/

+  

+}

+#endif /* DATA_IN_ExtSRAM */

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l152xe.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l152xe.h
new file mode 100644
index 0000000..7db75d2
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l152xe.h
@@ -0,0 +1,9351 @@
+/**

+  ******************************************************************************

+  * @file    stm32l152xe.h

+  * @author  MCD Application Team

+  * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer Header File. 

+  *          This file contains all the peripheral register's definitions, bits 

+  *          definitions and memory mapping for STM32L1xx devices.            

+  *            

+  *          This file contains:

+  *           - Data structures and the address mapping for all peripherals

+  *           - Peripheral's registers declarations and bits definition

+  *           - Macros to access peripheralÂ’s registers hardware

+  *  

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/** @addtogroup CMSIS

+  * @{

+  */

+

+/** @addtogroup stm32l152xe

+  * @{

+  */

+    

+#ifndef __STM32L152xE_H

+#define __STM32L152xE_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif 

+  

+

+  /** @addtogroup Configuration_section_for_CMSIS

+  * @{

+  */

+/**

+  * @brief Configuration of the Cortex-M3 Processor and Core Peripherals 

+ */

+#define __CM3_REV                 0x200U /*!< Cortex-M3 Revision r2p0                  */

+#define __MPU_PRESENT             1U     /*!< STM32L1xx provides MPU                          */

+#define __NVIC_PRIO_BITS          4U     /*!< STM32L1xx uses 4 Bits for the Priority Levels    */

+#define __Vendor_SysTickConfig    0U     /*!< Set to 1 if different SysTick Config is used */

+ 

+/**

+  * @}

+  */

+   

+/** @addtogroup Peripheral_interrupt_number_definition

+  * @{

+  */

+

+/**

+ * @brief STM32L1xx Interrupt Number Definition, according to the selected device 

+ *        in @ref Library_configuration_section 

+ */

+

+ /*!< Interrupt Number Definition */

+typedef enum

+{

+/******  Cortex-M3 Processor Exceptions Numbers ******************************************************/

+  NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                                */

+  HardFault_IRQn              = -13,    /*!< 3 Cortex-M3 Hard Fault Interrupt                        */

+  MemoryManagement_IRQn       = -12,    /*!< 4 Cortex-M3 Memory Management Interrupt                 */

+  BusFault_IRQn               = -11,    /*!< 5 Cortex-M3 Bus Fault Interrupt                         */

+  UsageFault_IRQn             = -10,    /*!< 6 Cortex-M3 Usage Fault Interrupt                       */

+  SVC_IRQn                    = -5,     /*!< 11 Cortex-M3 SV Call Interrupt                          */

+  DebugMonitor_IRQn           = -4,     /*!< 12 Cortex-M3 Debug Monitor Interrupt                    */

+  PendSV_IRQn                 = -2,     /*!< 14 Cortex-M3 Pend SV Interrupt                          */

+  SysTick_IRQn                = -1,     /*!< 15 Cortex-M3 System Tick Interrupt                      */

+

+/******  STM32L specific Interrupt Numbers ***********************************************************/

+  WWDG_IRQn                   = 0,      /*!< Window WatchDog Interrupt                               */

+  PVD_IRQn                    = 1,      /*!< PVD through EXTI Line detection Interrupt               */

+  TAMPER_STAMP_IRQn           = 2,      /*!< Tamper and TimeStamp interrupts through the EXTI line   */

+  RTC_WKUP_IRQn               = 3,      /*!< RTC Wakeup Timer through EXTI Line Interrupt            */

+  FLASH_IRQn                  = 4,      /*!< FLASH global Interrupt                                  */

+  RCC_IRQn                    = 5,      /*!< RCC global Interrupt                                    */

+  EXTI0_IRQn                  = 6,      /*!< EXTI Line0 Interrupt                                    */

+  EXTI1_IRQn                  = 7,      /*!< EXTI Line1 Interrupt                                    */

+  EXTI2_IRQn                  = 8,      /*!< EXTI Line2 Interrupt                                    */

+  EXTI3_IRQn                  = 9,      /*!< EXTI Line3 Interrupt                                    */

+  EXTI4_IRQn                  = 10,     /*!< EXTI Line4 Interrupt                                    */

+  DMA1_Channel1_IRQn          = 11,     /*!< DMA1 Channel 1 global Interrupt                         */

+  DMA1_Channel2_IRQn          = 12,     /*!< DMA1 Channel 2 global Interrupt                         */

+  DMA1_Channel3_IRQn          = 13,     /*!< DMA1 Channel 3 global Interrupt                         */

+  DMA1_Channel4_IRQn          = 14,     /*!< DMA1 Channel 4 global Interrupt                         */

+  DMA1_Channel5_IRQn          = 15,     /*!< DMA1 Channel 5 global Interrupt                         */

+  DMA1_Channel6_IRQn          = 16,     /*!< DMA1 Channel 6 global Interrupt                         */

+  DMA1_Channel7_IRQn          = 17,     /*!< DMA1 Channel 7 global Interrupt                         */

+  ADC1_IRQn                   = 18,     /*!< ADC1 global Interrupt                                   */

+  USB_HP_IRQn                 = 19,     /*!< USB High Priority Interrupt                             */

+  USB_LP_IRQn                 = 20,     /*!< USB Low Priority Interrupt                              */

+  DAC_IRQn                    = 21,     /*!< DAC Interrupt                                           */

+  COMP_IRQn                   = 22,     /*!< Comparator through EXTI Line Interrupt                  */

+  EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                           */

+  LCD_IRQn                    = 24,     /*!< LCD Interrupt                                           */

+  TIM9_IRQn                   = 25,     /*!< TIM9 global Interrupt                                   */

+  TIM10_IRQn                  = 26,     /*!< TIM10 global Interrupt                                  */

+  TIM11_IRQn                  = 27,     /*!< TIM11 global Interrupt                                  */

+  TIM2_IRQn                   = 28,     /*!< TIM2 global Interrupt                                   */

+  TIM3_IRQn                   = 29,     /*!< TIM3 global Interrupt                                   */

+  TIM4_IRQn                   = 30,     /*!< TIM4 global Interrupt                                   */

+  I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                    */

+  I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                    */

+  I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                    */

+  I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                    */

+  SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                   */

+  SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                   */

+  USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                                 */

+  USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                                 */

+  USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                                 */

+  EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                         */

+  RTC_Alarm_IRQn              = 41,     /*!< RTC Alarm through EXTI Line Interrupt                   */

+  USB_FS_WKUP_IRQn            = 42,     /*!< USB FS WakeUp from suspend through EXTI Line Interrupt  */

+  TIM6_IRQn                   = 43,     /*!< TIM6 global Interrupt                                   */

+  TIM7_IRQn                   = 44,     /*!< TIM7 global Interrupt                                   */

+  TIM5_IRQn                   = 46,     /*!< TIM5 global Interrupt                                   */

+  SPI3_IRQn                   = 47,     /*!< SPI3 global Interrupt                                   */

+  UART4_IRQn                  = 48,     /*!< UART4 global Interrupt                                  */

+  UART5_IRQn                  = 49,     /*!< UART5 global Interrupt                                  */

+  DMA2_Channel1_IRQn          = 50,     /*!< DMA2 Channel 1 global Interrupt                         */

+  DMA2_Channel2_IRQn          = 51,     /*!< DMA2 Channel 2 global Interrupt                         */

+  DMA2_Channel3_IRQn          = 52,     /*!< DMA2 Channel 3 global Interrupt                         */

+  DMA2_Channel4_IRQn          = 53,     /*!< DMA2 Channel 4 global Interrupt                         */

+  DMA2_Channel5_IRQn          = 54,     /*!< DMA2 Channel 5 global Interrupt                         */

+  COMP_ACQ_IRQn               = 56      /*!< Comparator Channel Acquisition global Interrupt         */

+} IRQn_Type;

+

+/**

+  * @}

+  */

+

+#include "core_cm3.h"

+#include "system_stm32l1xx.h"

+#include <stdint.h>

+

+/** @addtogroup Peripheral_registers_structures

+  * @{

+  */   

+

+/** 

+  * @brief Analog to Digital Converter

+  */

+

+typedef struct

+{

+  __IO uint32_t SR;           /*!< ADC status register,                         Address offset: 0x00 */

+  __IO uint32_t CR1;          /*!< ADC control register 1,                      Address offset: 0x04 */

+  __IO uint32_t CR2;          /*!< ADC control register 2,                      Address offset: 0x08 */

+  __IO uint32_t SMPR1;        /*!< ADC sample time register 1,                  Address offset: 0x0C */

+  __IO uint32_t SMPR2;        /*!< ADC sample time register 2,                  Address offset: 0x10 */

+  __IO uint32_t SMPR3;        /*!< ADC sample time register 3,                  Address offset: 0x14 */

+  __IO uint32_t JOFR1;        /*!< ADC injected channel data offset register 1, Address offset: 0x18 */

+  __IO uint32_t JOFR2;        /*!< ADC injected channel data offset register 2, Address offset: 0x1C */

+  __IO uint32_t JOFR3;        /*!< ADC injected channel data offset register 3, Address offset: 0x20 */

+  __IO uint32_t JOFR4;        /*!< ADC injected channel data offset register 4, Address offset: 0x24 */

+  __IO uint32_t HTR;          /*!< ADC watchdog higher threshold register,      Address offset: 0x28 */

+  __IO uint32_t LTR;          /*!< ADC watchdog lower threshold register,       Address offset: 0x2C */

+  __IO uint32_t SQR1;         /*!< ADC regular sequence register 1,             Address offset: 0x30 */

+  __IO uint32_t SQR2;         /*!< ADC regular sequence register 2,             Address offset: 0x34 */

+  __IO uint32_t SQR3;         /*!< ADC regular sequence register 3,             Address offset: 0x38 */

+  __IO uint32_t SQR4;         /*!< ADC regular sequence register 4,             Address offset: 0x3C */

+  __IO uint32_t SQR5;         /*!< ADC regular sequence register 5,             Address offset: 0x40 */

+  __IO uint32_t JSQR;         /*!< ADC injected sequence register,              Address offset: 0x44 */

+  __IO uint32_t JDR1;         /*!< ADC injected data register 1,                Address offset: 0x48 */

+  __IO uint32_t JDR2;         /*!< ADC injected data register 2,                Address offset: 0x4C */

+  __IO uint32_t JDR3;         /*!< ADC injected data register 3,                Address offset: 0x50 */

+  __IO uint32_t JDR4;         /*!< ADC injected data register 4,                Address offset: 0x54 */

+  __IO uint32_t DR;           /*!< ADC regular data register,                   Address offset: 0x58 */

+  __IO uint32_t SMPR0;        /*!< ADC sample time register 0,                  Address offset: 0x5C */

+} ADC_TypeDef;

+

+typedef struct

+{

+  __IO uint32_t CSR;          /*!< ADC common status register,                  Address offset: ADC1 base address + 0x300 */

+  __IO uint32_t CCR;          /*!< ADC common control register,                 Address offset: ADC1 base address + 0x304 */

+} ADC_Common_TypeDef;

+

+/** 

+  * @brief Comparator 

+  */

+

+typedef struct

+{

+  __IO uint32_t CSR;         /*!< COMP control and status register, Address offset: 0x00 */

+} COMP_TypeDef;

+

+typedef struct

+{

+  __IO uint32_t CSR;         /*!< COMP control and status register, used for bits common to several COMP instances, Address offset: 0x00 */

+} COMP_Common_TypeDef;

+

+/** 

+  * @brief CRC calculation unit

+  */

+

+typedef struct

+{

+  __IO uint32_t DR;           /*!< CRC Data register,                           Address offset: 0x00 */

+  __IO uint8_t  IDR;          /*!< CRC Independent data register,               Address offset: 0x04 */

+  uint8_t       RESERVED0;    /*!< Reserved,                                    Address offset: 0x05 */

+  uint16_t      RESERVED1;    /*!< Reserved,                                    Address offset: 0x06 */ 

+  __IO uint32_t CR;           /*!< CRC Control register,                        Address offset: 0x08 */ 

+} CRC_TypeDef;

+

+/** 

+  * @brief Digital to Analog Converter

+  */

+

+typedef struct

+{

+  __IO uint32_t CR;           /*!< DAC control register,                                     Address offset: 0x00 */

+  __IO uint32_t SWTRIGR;      /*!< DAC software trigger register,                            Address offset: 0x04 */

+  __IO uint32_t DHR12R1;      /*!< DAC channel1 12-bit right-aligned data holding register,  Address offset: 0x08 */

+  __IO uint32_t DHR12L1;      /*!< DAC channel1 12-bit left aligned data holding register,   Address offset: 0x0C */

+  __IO uint32_t DHR8R1;       /*!< DAC channel1 8-bit right aligned data holding register,   Address offset: 0x10 */

+  __IO uint32_t DHR12R2;      /*!< DAC channel2 12-bit right aligned data holding register,  Address offset: 0x14 */

+  __IO uint32_t DHR12L2;      /*!< DAC channel2 12-bit left aligned data holding register,   Address offset: 0x18 */

+  __IO uint32_t DHR8R2;       /*!< DAC channel2 8-bit right-aligned data holding register,   Address offset: 0x1C */

+  __IO uint32_t DHR12RD;      /*!< Dual DAC 12-bit right-aligned data holding register,      Address offset: 0x20 */

+  __IO uint32_t DHR12LD;      /*!< DUAL DAC 12-bit left aligned data holding register,       Address offset: 0x24 */

+  __IO uint32_t DHR8RD;       /*!< DUAL DAC 8-bit right aligned data holding register,       Address offset: 0x28 */

+  __IO uint32_t DOR1;         /*!< DAC channel1 data output register,                        Address offset: 0x2C */

+  __IO uint32_t DOR2;         /*!< DAC channel2 data output register,                        Address offset: 0x30 */

+  __IO uint32_t SR;           /*!< DAC status register,                                      Address offset: 0x34 */

+} DAC_TypeDef;

+

+/** 

+  * @brief Debug MCU

+  */

+

+typedef struct

+{

+  __IO uint32_t IDCODE;       /*!< MCU device ID code,                          Address offset: 0x00 */

+  __IO uint32_t CR;           /*!< Debug MCU configuration register,            Address offset: 0x04 */

+  __IO uint32_t APB1FZ;       /*!< Debug MCU APB1 freeze register,              Address offset: 0x08 */

+  __IO uint32_t APB2FZ;       /*!< Debug MCU APB2 freeze register,              Address offset: 0x0C */

+}DBGMCU_TypeDef;

+

+/** 

+  * @brief DMA Controller

+  */

+

+typedef struct

+{

+  __IO uint32_t CCR;          /*!< DMA channel x configuration register        */

+  __IO uint32_t CNDTR;        /*!< DMA channel x number of data register       */

+  __IO uint32_t CPAR;         /*!< DMA channel x peripheral address register   */

+  __IO uint32_t CMAR;         /*!< DMA channel x memory address register       */

+} DMA_Channel_TypeDef;

+

+typedef struct

+{

+  __IO uint32_t ISR;          /*!< DMA interrupt status register,               Address offset: 0x00 */

+  __IO uint32_t IFCR;         /*!< DMA interrupt flag clear register,           Address offset: 0x04 */

+} DMA_TypeDef;

+

+/** 

+  * @brief External Interrupt/Event Controller

+  */

+

+typedef struct

+{

+  __IO uint32_t IMR;          /*!<EXTI Interrupt mask register,                 Address offset: 0x00 */

+  __IO uint32_t EMR;          /*!<EXTI Event mask register,                     Address offset: 0x04 */

+  __IO uint32_t RTSR;         /*!<EXTI Rising trigger selection register ,      Address offset: 0x08 */

+  __IO uint32_t FTSR;         /*!<EXTI Falling trigger selection register,      Address offset: 0x0C */

+  __IO uint32_t SWIER;        /*!<EXTI Software interrupt event register,       Address offset: 0x10 */

+  __IO uint32_t PR;           /*!<EXTI Pending register,                        Address offset: 0x14 */

+} EXTI_TypeDef;

+

+/** 

+  * @brief FLASH Registers

+  */

+typedef struct

+{

+  __IO uint32_t ACR;          /*!< Access control register,                     Address offset: 0x00 */

+  __IO uint32_t PECR;         /*!< Program/erase control register,              Address offset: 0x04 */

+  __IO uint32_t PDKEYR;       /*!< Power down key register,                     Address offset: 0x08 */

+  __IO uint32_t PEKEYR;       /*!< Program/erase key register,                  Address offset: 0x0c */

+  __IO uint32_t PRGKEYR;      /*!< Program memory key register,                 Address offset: 0x10 */

+  __IO uint32_t OPTKEYR;      /*!< Option byte key register,                    Address offset: 0x14 */

+  __IO uint32_t SR;           /*!< Status register,                             Address offset: 0x18 */

+  __IO uint32_t OBR;          /*!< Option byte register,                        Address offset: 0x1c */

+  __IO uint32_t WRPR1;        /*!< Write protection register 1,                 Address offset: 0x20 */

+  uint32_t   RESERVED[23];    /*!< Reserved,                                    Address offset: 0x24 */

+  __IO uint32_t WRPR2;        /*!< Write protection register 2,                 Address offset: 0x80 */

+  __IO uint32_t WRPR3;        /*!< Write protection register 3,                 Address offset: 0x84 */

+  __IO uint32_t WRPR4;        /*!< Write protection register 4,                 Address offset: 0x88 */

+} FLASH_TypeDef;

+

+/** 

+  * @brief Option Bytes Registers

+  */

+typedef struct

+{

+  __IO uint32_t RDP;              /*!< Read protection register,               Address offset: 0x00 */

+  __IO uint32_t USER;             /*!< user register,                          Address offset: 0x04 */

+  __IO uint32_t WRP01;            /*!< write protection register 0 1,          Address offset: 0x08 */

+  __IO uint32_t WRP23;            /*!< write protection register 2 3,          Address offset: 0x0C */

+  __IO uint32_t WRP45;            /*!< write protection register 4 5,          Address offset: 0x10 */

+  __IO uint32_t WRP67;            /*!< write protection register 6 7,          Address offset: 0x14 */

+  __IO uint32_t WRP89;            /*!< write protection register 8 9,          Address offset: 0x18 */

+  __IO uint32_t WRP1011;          /*!< write protection register 10 11,        Address offset: 0x1C */

+  uint32_t   RESERVED[24];        /*!< Reserved,                                    0x20 -> 0x7C    */

+  __IO uint32_t WRP1213;          /*!< write protection register 12 13,        Address offset: 0x80 */

+  __IO uint32_t WRP1415;          /*!< write protection register 14 15,        Address offset: 0x84 */

+} OB_TypeDef;

+

+/** 

+  * @brief Operational Amplifier (OPAMP)

+  */

+typedef struct

+{

+  __IO uint32_t CSR;          /*!< OPAMP control and status register,                 Address offset: 0x00 */

+  __IO uint32_t OTR;          /*!< OPAMP offset trimming register for normal mode,    Address offset: 0x04 */ 

+  __IO uint32_t LPOTR;        /*!< OPAMP offset trimming register for low power mode, Address offset: 0x08 */

+} OPAMP_TypeDef;

+

+typedef struct

+{

+  __IO uint32_t CSR;          /*!< OPAMP control and status register, used for bits common to several OPAMP instances,              Address offset: 0x00 */

+  __IO uint32_t OTR;          /*!< OPAMP offset trimming register for normal mode, used for bits common to several OPAMP instances, Address offset: 0x04 */ 

+} OPAMP_Common_TypeDef;

+

+/** 

+  * @brief General Purpose IO

+  */

+

+typedef struct

+{

+  __IO uint32_t MODER;        /*!< GPIO port mode register,                     Address offset: 0x00      */

+  __IO uint32_t OTYPER;       /*!< GPIO port output type register,              Address offset: 0x04      */

+  __IO uint32_t OSPEEDR;      /*!< GPIO port output speed register,             Address offset: 0x08      */

+  __IO uint32_t PUPDR;        /*!< GPIO port pull-up/pull-down register,        Address offset: 0x0C      */

+  __IO uint32_t IDR;          /*!< GPIO port input data register,               Address offset: 0x10      */

+  __IO uint32_t ODR;          /*!< GPIO port output data register,              Address offset: 0x14      */

+  __IO uint32_t BSRR;         /*!< GPIO port bit set/reset registerBSRR,        Address offset: 0x18      */

+  __IO uint32_t LCKR;         /*!< GPIO port configuration lock register,       Address offset: 0x1C      */

+  __IO uint32_t AFR[2];       /*!< GPIO alternate function register,            Address offset: 0x20-0x24 */

+  __IO uint32_t BRR;          /*!< GPIO bit reset register,                     Address offset: 0x28      */

+} GPIO_TypeDef;

+

+/** 

+  * @brief SysTem Configuration

+  */

+

+typedef struct

+{

+  __IO uint32_t MEMRMP;       /*!< SYSCFG memory remap register,                      Address offset: 0x00      */

+  __IO uint32_t PMC;          /*!< SYSCFG peripheral mode configuration register,     Address offset: 0x04      */

+  __IO uint32_t EXTICR[4];    /*!< SYSCFG external interrupt configuration registers, Address offset: 0x08-0x14 */

+} SYSCFG_TypeDef;

+

+/** 

+  * @brief Inter-integrated Circuit Interface

+  */

+

+typedef struct

+{

+  __IO uint32_t CR1;          /*!< I2C Control register 1,                      Address offset: 0x00 */

+  __IO uint32_t CR2;          /*!< I2C Control register 2,                      Address offset: 0x04 */

+  __IO uint32_t OAR1;         /*!< I2C Own address register 1,                  Address offset: 0x08 */

+  __IO uint32_t OAR2;         /*!< I2C Own address register 2,                  Address offset: 0x0C */

+  __IO uint32_t DR;           /*!< I2C Data register,                           Address offset: 0x10 */

+  __IO uint32_t SR1;          /*!< I2C Status register 1,                       Address offset: 0x14 */

+  __IO uint32_t SR2;          /*!< I2C Status register 2,                       Address offset: 0x18 */

+  __IO uint32_t CCR;          /*!< I2C Clock control register,                  Address offset: 0x1C */

+  __IO uint32_t TRISE;        /*!< I2C TRISE register,                          Address offset: 0x20 */

+} I2C_TypeDef;

+

+/** 

+  * @brief Independent WATCHDOG

+  */

+

+typedef struct

+{

+  __IO uint32_t KR;           /*!< Key register,                                Address offset: 0x00 */

+  __IO uint32_t PR;           /*!< Prescaler register,                          Address offset: 0x04 */

+  __IO uint32_t RLR;          /*!< Reload register,                             Address offset: 0x08 */

+  __IO uint32_t SR;           /*!< Status register,                             Address offset: 0x0C */

+} IWDG_TypeDef;

+

+/** 

+  * @brief LCD

+  */

+

+typedef struct

+{

+  __IO uint32_t CR;        /*!< LCD control register,                           Address offset: 0x00 */

+  __IO uint32_t FCR;       /*!< LCD frame control register,                     Address offset: 0x04 */

+  __IO uint32_t SR;        /*!< LCD status register,                            Address offset: 0x08 */

+  __IO uint32_t CLR;       /*!< LCD clear register,                             Address offset: 0x0C */

+  uint32_t RESERVED;       /*!< Reserved,                                       Address offset: 0x10 */

+  __IO uint32_t RAM[16];   /*!< LCD display memory,                             Address offset: 0x14-0x50 */

+} LCD_TypeDef;

+

+/** 

+  * @brief Power Control

+  */

+

+typedef struct

+{

+  __IO uint32_t CR;   /*!< PWR power control register,                          Address offset: 0x00 */

+  __IO uint32_t CSR;  /*!< PWR power control/status register,                   Address offset: 0x04 */

+} PWR_TypeDef;

+

+/** 

+  * @brief Reset and Clock Control

+  */

+

+typedef struct

+{

+  __IO uint32_t CR;            /*!< RCC clock control register,                                   Address offset: 0x00 */

+  __IO uint32_t ICSCR;         /*!< RCC Internal clock sources calibration register,              Address offset: 0x04 */

+  __IO uint32_t CFGR;          /*!< RCC Clock configuration register,                             Address offset: 0x08 */

+  __IO uint32_t CIR;           /*!< RCC Clock interrupt register,                                 Address offset: 0x0C */

+  __IO uint32_t AHBRSTR;       /*!< RCC AHB peripheral reset register,                            Address offset: 0x10 */

+  __IO uint32_t APB2RSTR;      /*!< RCC APB2 peripheral reset register,                           Address offset: 0x14 */

+  __IO uint32_t APB1RSTR;      /*!< RCC APB1 peripheral reset register,                           Address offset: 0x18 */

+  __IO uint32_t AHBENR;        /*!< RCC AHB peripheral clock enable register,                     Address offset: 0x1C */

+  __IO uint32_t APB2ENR;       /*!< RCC APB2 peripheral clock enable register,                    Address offset: 0x20 */

+  __IO uint32_t APB1ENR;       /*!< RCC APB1 peripheral clock enable register,                    Address offset: 0x24 */

+  __IO uint32_t AHBLPENR;      /*!< RCC AHB peripheral clock enable in low power mode register,   Address offset: 0x28 */

+  __IO uint32_t APB2LPENR;     /*!< RCC APB2 peripheral clock enable in low power mode register,  Address offset: 0x2C */

+  __IO uint32_t APB1LPENR;     /*!< RCC APB1 peripheral clock enable in low power mode register,  Address offset: 0x30 */

+  __IO uint32_t CSR;           /*!< RCC Control/status register,                                  Address offset: 0x34 */

+} RCC_TypeDef;

+

+/** 

+  * @brief Routing Interface 

+  */

+

+typedef struct

+{

+  __IO uint32_t ICR;        /*!< RI input capture register,                     Address offset: 0x00 */

+  __IO uint32_t ASCR1;      /*!< RI analog switches control register,           Address offset: 0x04 */

+  __IO uint32_t ASCR2;      /*!< RI analog switch control register 2,           Address offset: 0x08 */

+  __IO uint32_t HYSCR1;     /*!< RI hysteresis control register,                Address offset: 0x0C */

+  __IO uint32_t HYSCR2;     /*!< RI Hysteresis control register,                Address offset: 0x10 */

+  __IO uint32_t HYSCR3;     /*!< RI Hysteresis control register,                Address offset: 0x14 */

+  __IO uint32_t HYSCR4;     /*!< RI Hysteresis control register,                Address offset: 0x18 */

+  __IO uint32_t ASMR1;      /*!< RI Analog switch mode register 1,              Address offset: 0x1C */

+  __IO uint32_t CMR1;       /*!< RI Channel mask register 1,                    Address offset: 0x20 */

+  __IO uint32_t CICR1;      /*!< RI Channel Iden for capture register 1,        Address offset: 0x24 */

+  __IO uint32_t ASMR2;      /*!< RI Analog switch mode register 2,              Address offset: 0x28 */

+  __IO uint32_t CMR2;       /*!< RI Channel mask register 2,                    Address offset: 0x2C */

+  __IO uint32_t CICR2;      /*!< RI Channel Iden for capture register 2,        Address offset: 0x30 */

+  __IO uint32_t ASMR3;      /*!< RI Analog switch mode register 3,              Address offset: 0x34 */

+  __IO uint32_t CMR3;       /*!< RI Channel mask register 3,                    Address offset: 0x38 */

+  __IO uint32_t CICR3;      /*!< RI Channel Iden for capture register 3,        Address offset: 0x3C */

+  __IO uint32_t ASMR4;      /*!< RI Analog switch mode register 4,              Address offset: 0x40 */

+  __IO uint32_t CMR4;       /*!< RI Channel mask register 4,                    Address offset: 0x44 */

+  __IO uint32_t CICR4;      /*!< RI Channel Iden for capture register 4,        Address offset: 0x48 */

+  __IO uint32_t ASMR5;      /*!< RI Analog switch mode register 5,              Address offset: 0x4C */

+  __IO uint32_t CMR5;       /*!< RI Channel mask register 5,                    Address offset: 0x50 */

+  __IO uint32_t CICR5;      /*!< RI Channel Iden for capture register 5,        Address offset: 0x54 */

+} RI_TypeDef;

+

+/** 

+  * @brief Real-Time Clock

+  */

+typedef struct

+{

+  __IO uint32_t TR;         /*!< RTC time register,                                         Address offset: 0x00 */

+  __IO uint32_t DR;         /*!< RTC date register,                                         Address offset: 0x04 */

+  __IO uint32_t CR;         /*!< RTC control register,                                      Address offset: 0x08 */                                                                                            

+  __IO uint32_t ISR;        /*!< RTC initialization and status register,                    Address offset: 0x0C */

+  __IO uint32_t PRER;       /*!< RTC prescaler register,                                    Address offset: 0x10 */

+  __IO uint32_t WUTR;       /*!< RTC wakeup timer register,                                 Address offset: 0x14 */

+  __IO uint32_t CALIBR;     /*!< RTC calibration register,                                  Address offset: 0x18 */

+  __IO uint32_t ALRMAR;     /*!< RTC alarm A register,                                      Address offset: 0x1C */

+  __IO uint32_t ALRMBR;     /*!< RTC alarm B register,                                      Address offset: 0x20 */

+  __IO uint32_t WPR;        /*!< RTC write protection register,                             Address offset: 0x24 */

+  __IO uint32_t SSR;        /*!< RTC sub second register,                                   Address offset: 0x28 */

+  __IO uint32_t SHIFTR;     /*!< RTC shift control register,                                Address offset: 0x2C */

+  __IO uint32_t TSTR;       /*!< RTC time stamp time register,                              Address offset: 0x30 */

+  __IO uint32_t TSDR;       /*!< RTC time stamp date register,                              Address offset: 0x34 */

+  __IO uint32_t TSSSR;      /*!< RTC time-stamp sub second register,                        Address offset: 0x38 */

+  __IO uint32_t CALR;       /*!< RRTC calibration register,                                 Address offset: 0x3C */

+  __IO uint32_t TAFCR;      /*!< RTC tamper and alternate function configuration register,  Address offset: 0x40 */

+  __IO uint32_t ALRMASSR;   /*!< RTC alarm A sub second register,                           Address offset: 0x44 */

+  __IO uint32_t ALRMBSSR;   /*!< RTC alarm B sub second register,                           Address offset: 0x48 */

+  uint32_t RESERVED7;       /*!< Reserved, 0x4C                                                                  */

+  __IO uint32_t BKP0R;      /*!< RTC backup register 0,                                     Address offset: 0x50 */

+  __IO uint32_t BKP1R;      /*!< RTC backup register 1,                                     Address offset: 0x54 */

+  __IO uint32_t BKP2R;      /*!< RTC backup register 2,                                     Address offset: 0x58 */

+  __IO uint32_t BKP3R;      /*!< RTC backup register 3,                                     Address offset: 0x5C */

+  __IO uint32_t BKP4R;      /*!< RTC backup register 4,                                     Address offset: 0x60 */

+  __IO uint32_t BKP5R;      /*!< RTC backup register 5,                                     Address offset: 0x64 */

+  __IO uint32_t BKP6R;      /*!< RTC backup register 6,                                     Address offset: 0x68 */

+  __IO uint32_t BKP7R;      /*!< RTC backup register 7,                                     Address offset: 0x6C */

+  __IO uint32_t BKP8R;      /*!< RTC backup register 8,                                     Address offset: 0x70 */

+  __IO uint32_t BKP9R;      /*!< RTC backup register 9,                                     Address offset: 0x74 */

+  __IO uint32_t BKP10R;     /*!< RTC backup register 10,                                    Address offset: 0x78 */

+  __IO uint32_t BKP11R;     /*!< RTC backup register 11,                                    Address offset: 0x7C */

+  __IO uint32_t BKP12R;     /*!< RTC backup register 12,                                    Address offset: 0x80 */

+  __IO uint32_t BKP13R;     /*!< RTC backup register 13,                                    Address offset: 0x84 */

+  __IO uint32_t BKP14R;     /*!< RTC backup register 14,                                    Address offset: 0x88 */

+  __IO uint32_t BKP15R;     /*!< RTC backup register 15,                                    Address offset: 0x8C */

+  __IO uint32_t BKP16R;     /*!< RTC backup register 16,                                    Address offset: 0x90 */

+  __IO uint32_t BKP17R;     /*!< RTC backup register 17,                                    Address offset: 0x94 */

+  __IO uint32_t BKP18R;     /*!< RTC backup register 18,                                    Address offset: 0x98 */

+  __IO uint32_t BKP19R;     /*!< RTC backup register 19,                                    Address offset: 0x9C */

+  __IO uint32_t BKP20R;     /*!< RTC backup register 20,                                    Address offset: 0xA0 */

+  __IO uint32_t BKP21R;     /*!< RTC backup register 21,                                    Address offset: 0xA4 */

+  __IO uint32_t BKP22R;     /*!< RTC backup register 22,                                    Address offset: 0xA8 */

+  __IO uint32_t BKP23R;     /*!< RTC backup register 23,                                    Address offset: 0xAC */

+  __IO uint32_t BKP24R;     /*!< RTC backup register 24,                                    Address offset: 0xB0 */

+  __IO uint32_t BKP25R;     /*!< RTC backup register 25,                                    Address offset: 0xB4 */

+  __IO uint32_t BKP26R;     /*!< RTC backup register 26,                                    Address offset: 0xB8 */

+  __IO uint32_t BKP27R;     /*!< RTC backup register 27,                                    Address offset: 0xBC */

+  __IO uint32_t BKP28R;     /*!< RTC backup register 28,                                    Address offset: 0xC0 */

+  __IO uint32_t BKP29R;     /*!< RTC backup register 29,                                    Address offset: 0xC4 */

+  __IO uint32_t BKP30R;     /*!< RTC backup register 30,                                    Address offset: 0xC8 */

+  __IO uint32_t BKP31R;     /*!< RTC backup register 31,                                    Address offset: 0xCC */

+} RTC_TypeDef;

+

+/** 

+  * @brief Serial Peripheral Interface

+  */

+

+typedef struct

+{

+  __IO uint32_t CR1;        /*!< SPI Control register 1 (not used in I2S mode),      Address offset: 0x00 */

+  __IO uint32_t CR2;        /*!< SPI Control register 2,                             Address offset: 0x04 */

+  __IO uint32_t SR;         /*!< SPI Status register,                                Address offset: 0x08 */

+  __IO uint32_t DR;         /*!< SPI data register,                                  Address offset: 0x0C */

+  __IO uint32_t CRCPR;      /*!< SPI CRC polynomial register (not used in I2S mode), Address offset: 0x10 */

+  __IO uint32_t RXCRCR;     /*!< SPI Rx CRC register (not used in I2S mode),         Address offset: 0x14 */

+  __IO uint32_t TXCRCR;     /*!< SPI Tx CRC register (not used in I2S mode),         Address offset: 0x18 */

+  __IO uint32_t I2SCFGR;    /*!< SPI_I2S configuration register,                     Address offset: 0x1C */

+  __IO uint32_t I2SPR;      /*!< SPI_I2S prescaler register,                         Address offset: 0x20 */

+} SPI_TypeDef;

+

+/** 

+  * @brief TIM

+  */

+typedef struct

+{

+  __IO uint32_t CR1;          /*!< TIM control register 1,              Address offset: 0x00 */

+  __IO uint32_t CR2;          /*!< TIM control register 2,              Address offset: 0x04 */

+  __IO uint32_t SMCR;         /*!< TIM slave Mode Control register,     Address offset: 0x08 */

+  __IO uint32_t DIER;         /*!< TIM DMA/interrupt enable register,   Address offset: 0x0C */

+  __IO uint32_t SR;           /*!< TIM status register,                 Address offset: 0x10 */

+  __IO uint32_t EGR;          /*!< TIM event generation register,       Address offset: 0x14 */

+  __IO uint32_t CCMR1;        /*!< TIM capture/compare mode register 1, Address offset: 0x18 */

+  __IO uint32_t CCMR2;        /*!< TIM capture/compare mode register 2, Address offset: 0x1C */

+  __IO uint32_t CCER;         /*!< TIM capture/compare enable register, Address offset: 0x20 */

+  __IO uint32_t CNT;          /*!< TIM counter register,                Address offset: 0x24 */

+  __IO uint32_t PSC;          /*!< TIM prescaler register,              Address offset: 0x28 */

+  __IO uint32_t ARR;          /*!< TIM auto-reload register,            Address offset: 0x2C */

+  uint32_t      RESERVED12;   /*!< Reserved, 0x30                                            */    

+  __IO uint32_t CCR1;         /*!< TIM capture/compare register 1,      Address offset: 0x34 */    

+  __IO uint32_t CCR2;         /*!< TIM capture/compare register 2,      Address offset: 0x38 */    

+  __IO uint32_t CCR3;         /*!< TIM capture/compare register 3,      Address offset: 0x3C */

+  __IO uint32_t CCR4;         /*!< TIM capture/compare register 4,      Address offset: 0x40 */

+  uint32_t      RESERVED17;   /*!< Reserved, 0x44                                            */ 

+  __IO uint32_t DCR;          /*!< TIM DMA control register,            Address offset: 0x48 */

+  __IO uint32_t DMAR;         /*!< TIM DMA address for full transfer,   Address offset: 0x4C */

+  __IO uint32_t OR;           /*!< TIM option register,                 Address offset: 0x50 */

+} TIM_TypeDef;

+/** 

+  * @brief Universal Synchronous Asynchronous Receiver Transmitter

+  */

+ 

+typedef struct

+{

+  __IO uint32_t SR;         /*!< USART Status register,                   Address offset: 0x00 */

+  __IO uint32_t DR;         /*!< USART Data register,                     Address offset: 0x04 */

+  __IO uint32_t BRR;        /*!< USART Baud rate register,                Address offset: 0x08 */

+  __IO uint32_t CR1;        /*!< USART Control register 1,                Address offset: 0x0C */

+  __IO uint32_t CR2;        /*!< USART Control register 2,                Address offset: 0x10 */

+  __IO uint32_t CR3;        /*!< USART Control register 3,                Address offset: 0x14 */

+  __IO uint32_t GTPR;       /*!< USART Guard time and prescaler register, Address offset: 0x18 */

+} USART_TypeDef;

+

+/** 

+  * @brief Universal Serial Bus Full Speed Device

+  */

+  

+typedef struct

+{

+  __IO uint16_t EP0R;            /*!< USB Endpoint 0 register,                Address offset: 0x00 */ 

+  __IO uint16_t RESERVED0;       /*!< Reserved */     

+  __IO uint16_t EP1R;            /*!< USB Endpoint 1 register,                Address offset: 0x04 */

+  __IO uint16_t RESERVED1;       /*!< Reserved */       

+  __IO uint16_t EP2R;            /*!< USB Endpoint 2 register,                Address offset: 0x08 */

+  __IO uint16_t RESERVED2;       /*!< Reserved */       

+  __IO uint16_t EP3R;            /*!< USB Endpoint 3 register,                Address offset: 0x0C */ 

+  __IO uint16_t RESERVED3;       /*!< Reserved */       

+  __IO uint16_t EP4R;            /*!< USB Endpoint 4 register,                Address offset: 0x10 */

+  __IO uint16_t RESERVED4;       /*!< Reserved */       

+  __IO uint16_t EP5R;            /*!< USB Endpoint 5 register,                Address offset: 0x14 */

+  __IO uint16_t RESERVED5;       /*!< Reserved */       

+  __IO uint16_t EP6R;            /*!< USB Endpoint 6 register,                Address offset: 0x18 */

+  __IO uint16_t RESERVED6;       /*!< Reserved */       

+  __IO uint16_t EP7R;            /*!< USB Endpoint 7 register,                Address offset: 0x1C */

+  __IO uint16_t RESERVED7[17];   /*!< Reserved */     

+  __IO uint16_t CNTR;            /*!< Control register,                       Address offset: 0x40 */

+  __IO uint16_t RESERVED8;       /*!< Reserved */       

+  __IO uint16_t ISTR;            /*!< Interrupt status register,              Address offset: 0x44 */

+  __IO uint16_t RESERVED9;       /*!< Reserved */       

+  __IO uint16_t FNR;             /*!< Frame number register,                  Address offset: 0x48 */

+  __IO uint16_t RESERVEDA;       /*!< Reserved */       

+  __IO uint16_t DADDR;           /*!< Device address register,                Address offset: 0x4C */

+  __IO uint16_t RESERVEDB;       /*!< Reserved */       

+  __IO uint16_t BTABLE;          /*!< Buffer Table address register,          Address offset: 0x50 */

+  __IO uint16_t RESERVEDC;       /*!< Reserved */       

+} USB_TypeDef;

+

+/** 

+  * @brief Window WATCHDOG

+  */

+typedef struct

+{

+  __IO uint32_t CR;   /*!< WWDG Control register,       Address offset: 0x00 */

+  __IO uint32_t CFR;  /*!< WWDG Configuration register, Address offset: 0x04 */

+  __IO uint32_t SR;   /*!< WWDG Status register,        Address offset: 0x08 */

+} WWDG_TypeDef;

+

+/** 

+  * @brief Universal Serial Bus Full Speed Device

+  */

+/** 

+  * @}

+  */

+  

+/** @addtogroup Peripheral_memory_map

+  * @{

+  */

+

+#define FLASH_BASE            (0x08000000UL)              /*!< FLASH base address in the alias region */

+#define FLASH_EEPROM_BASE     (FLASH_BASE + 0x80000UL)    /*!< FLASH EEPROM base address in the alias region */

+#define SRAM_BASE             (0x20000000UL)              /*!< SRAM base address in the alias region */

+#define PERIPH_BASE           (0x40000000UL)              /*!< Peripheral base address in the alias region */

+#define SRAM_BB_BASE          (0x22000000UL)              /*!< SRAM base address in the bit-band region */

+#define PERIPH_BB_BASE        (0x42000000UL)              /*!< Peripheral base address in the bit-band region */

+#define FLASH_BANK2_BASE      (0x08040000UL)              /*!< FLASH BANK2 base address in the alias region */

+#define FLASH_BANK1_END       (0x0803FFFFUL)              /*!< Program end FLASH BANK1 address  */

+#define FLASH_BANK2_END       (0x0807FFFFUL)              /*!< Program end FLASH BANK2 address  */

+#define FLASH_EEPROM_END      (0x08083FFFUL)              /*!< FLASH EEPROM end address (16KB) */

+

+/*!< Peripheral memory map */

+#define APB1PERIPH_BASE       PERIPH_BASE

+#define APB2PERIPH_BASE       (PERIPH_BASE + 0x00010000UL)

+#define AHBPERIPH_BASE        (PERIPH_BASE + 0x00020000UL)

+

+/*!< APB1 peripherals */

+#define TIM2_BASE             (APB1PERIPH_BASE + 0x00000000UL)

+#define TIM3_BASE             (APB1PERIPH_BASE + 0x00000400UL)

+#define TIM4_BASE             (APB1PERIPH_BASE + 0x00000800UL)

+#define TIM5_BASE             (APB1PERIPH_BASE + 0x00000C00UL)

+#define TIM6_BASE             (APB1PERIPH_BASE + 0x00001000UL)

+#define TIM7_BASE             (APB1PERIPH_BASE + 0x00001400UL)

+#define LCD_BASE              (APB1PERIPH_BASE + 0x00002400UL)

+#define RTC_BASE              (APB1PERIPH_BASE + 0x00002800UL)

+#define WWDG_BASE             (APB1PERIPH_BASE + 0x00002C00UL)

+#define IWDG_BASE             (APB1PERIPH_BASE + 0x00003000UL)

+#define SPI2_BASE             (APB1PERIPH_BASE + 0x00003800UL)

+#define SPI3_BASE             (APB1PERIPH_BASE + 0x00003C00UL)

+#define USART2_BASE           (APB1PERIPH_BASE + 0x00004400UL)

+#define USART3_BASE           (APB1PERIPH_BASE + 0x00004800UL)

+#define UART4_BASE            (APB1PERIPH_BASE + 0x00004C00UL)

+#define UART5_BASE            (APB1PERIPH_BASE + 0x00005000UL)

+#define I2C1_BASE             (APB1PERIPH_BASE + 0x00005400UL)

+#define I2C2_BASE             (APB1PERIPH_BASE + 0x00005800UL)

+

+/* USB device FS */

+#define USB_BASE              (APB1PERIPH_BASE + 0x00005C00UL) /*!< USB_IP Peripheral Registers base address */

+#define USB_PMAADDR           (APB1PERIPH_BASE + 0x00006000UL) /*!< USB_IP Packet Memory Area base address */

+

+/* USB device FS SRAM */

+#define PWR_BASE              (APB1PERIPH_BASE + 0x00007000UL)

+#define DAC_BASE              (APB1PERIPH_BASE + 0x00007400UL)

+#define COMP_BASE             (APB1PERIPH_BASE + 0x00007C00UL)

+#define RI_BASE               (APB1PERIPH_BASE + 0x00007C04UL)

+#define OPAMP_BASE            (APB1PERIPH_BASE + 0x00007C5CUL)

+

+/*!< APB2 peripherals */

+#define SYSCFG_BASE           (APB2PERIPH_BASE + 0x00000000UL)

+#define EXTI_BASE             (APB2PERIPH_BASE + 0x00000400UL)

+#define TIM9_BASE             (APB2PERIPH_BASE + 0x00000800UL)

+#define TIM10_BASE            (APB2PERIPH_BASE + 0x00000C00UL)

+#define TIM11_BASE            (APB2PERIPH_BASE + 0x00001000UL)

+#define ADC1_BASE             (APB2PERIPH_BASE + 0x00002400UL)

+#define ADC_BASE              (APB2PERIPH_BASE + 0x00002700UL)

+#define SPI1_BASE             (APB2PERIPH_BASE + 0x00003000UL)

+#define USART1_BASE           (APB2PERIPH_BASE + 0x00003800UL)

+

+/*!< AHB peripherals */

+#define GPIOA_BASE            (AHBPERIPH_BASE + 0x00000000UL)

+#define GPIOB_BASE            (AHBPERIPH_BASE + 0x00000400UL)

+#define GPIOC_BASE            (AHBPERIPH_BASE + 0x00000800UL)

+#define GPIOD_BASE            (AHBPERIPH_BASE + 0x00000C00UL)

+#define GPIOE_BASE            (AHBPERIPH_BASE + 0x00001000UL)

+#define GPIOH_BASE            (AHBPERIPH_BASE + 0x00001400UL)

+#define GPIOF_BASE            (AHBPERIPH_BASE + 0x00001800UL)

+#define GPIOG_BASE            (AHBPERIPH_BASE + 0x00001C00UL)

+#define CRC_BASE              (AHBPERIPH_BASE + 0x00003000UL)

+#define RCC_BASE              (AHBPERIPH_BASE + 0x00003800UL)

+#define FLASH_R_BASE          (AHBPERIPH_BASE + 0x00003C00UL) /*!< FLASH registers base address */

+#define OB_BASE               (0x1FF80000UL)                  /*!< FLASH Option Bytes base address */

+#define FLASHSIZE_BASE        (0x1FF800CCUL)                  /*!< FLASH Size register base address for Cat.3, Cat.4, Cat.5 and Cat.6 devices */

+#define UID_BASE              (0x1FF800D0UL)                  /*!< Unique device ID register base address for Cat.3, Cat.4, Cat.5 and Cat.6 devices */

+#define DMA1_BASE             (AHBPERIPH_BASE + 0x00006000UL)

+#define DMA1_Channel1_BASE    (DMA1_BASE + 0x00000008UL)

+#define DMA1_Channel2_BASE    (DMA1_BASE + 0x0000001CUL)

+#define DMA1_Channel3_BASE    (DMA1_BASE + 0x00000030UL)

+#define DMA1_Channel4_BASE    (DMA1_BASE + 0x00000044UL)

+#define DMA1_Channel5_BASE    (DMA1_BASE + 0x00000058UL)

+#define DMA1_Channel6_BASE    (DMA1_BASE + 0x0000006CUL)

+#define DMA1_Channel7_BASE    (DMA1_BASE + 0x00000080UL)

+#define DMA2_BASE             (AHBPERIPH_BASE + 0x00006400UL)

+#define DMA2_Channel1_BASE    (DMA2_BASE + 0x00000008UL)

+#define DMA2_Channel2_BASE    (DMA2_BASE + 0x0000001CUL)

+#define DMA2_Channel3_BASE    (DMA2_BASE + 0x00000030UL)

+#define DMA2_Channel4_BASE    (DMA2_BASE + 0x00000044UL)

+#define DMA2_Channel5_BASE    (DMA2_BASE + 0x00000058UL)

+#define DBGMCU_BASE           (0xE0042000UL)     /*!< Debug MCU registers base address */

+

+/**

+  * @}

+  */

+  

+/** @addtogroup Peripheral_declaration

+  * @{

+  */  

+

+#define TIM2                ((TIM_TypeDef *) TIM2_BASE)

+#define TIM3                ((TIM_TypeDef *) TIM3_BASE)

+#define TIM4                ((TIM_TypeDef *) TIM4_BASE)

+#define TIM5                ((TIM_TypeDef *) TIM5_BASE)

+#define TIM6                ((TIM_TypeDef *) TIM6_BASE)

+#define TIM7                ((TIM_TypeDef *) TIM7_BASE)

+#define LCD                 ((LCD_TypeDef *) LCD_BASE)

+#define RTC                 ((RTC_TypeDef *) RTC_BASE)

+#define WWDG                ((WWDG_TypeDef *) WWDG_BASE)

+#define IWDG                ((IWDG_TypeDef *) IWDG_BASE)

+#define SPI2                ((SPI_TypeDef *) SPI2_BASE)

+#define SPI3                ((SPI_TypeDef *) SPI3_BASE)

+#define USART2              ((USART_TypeDef *) USART2_BASE)

+#define USART3              ((USART_TypeDef *) USART3_BASE)

+#define UART4               ((USART_TypeDef *) UART4_BASE)

+#define UART5               ((USART_TypeDef *) UART5_BASE)

+#define I2C1                ((I2C_TypeDef *) I2C1_BASE)

+#define I2C2                ((I2C_TypeDef *) I2C2_BASE)

+/* USB device FS */

+#define USB                   ((USB_TypeDef *) USB_BASE)

+/* USB device FS SRAM */

+#define PWR                 ((PWR_TypeDef *) PWR_BASE)

+

+#define DAC1                ((DAC_TypeDef *) DAC_BASE)

+/* Legacy define */

+#define DAC                 DAC1

+

+#define COMP                ((COMP_TypeDef *) COMP_BASE)                 /* COMP generic instance include bits of COMP1 and COMP2 mixed in the same register */

+#define COMP1               ((COMP_TypeDef *) COMP_BASE)                 /* COMP1 instance definition to differentiate COMP1 and COMP2, not to be used to access comparator register */

+#define COMP2               ((COMP_TypeDef *) (COMP_BASE + 0x00000001U)) /* COMP2 instance definition to differentiate COMP1 and COMP2, not to be used to access comparator register */

+#define COMP12_COMMON       ((COMP_Common_TypeDef *) COMP_BASE)          /* COMP common instance definition to access comparator register bits used by both comparator instances (window mode) */

+

+#define RI                  ((RI_TypeDef *) RI_BASE)

+

+#define OPAMP               ((OPAMP_TypeDef *) OPAMP_BASE)

+#define OPAMP1              ((OPAMP_TypeDef *) OPAMP_BASE)

+#define OPAMP2              ((OPAMP_TypeDef *) (OPAMP_BASE + 0x00000001U))

+#define OPAMP12_COMMON      ((OPAMP_Common_TypeDef *) OPAMP_BASE)

+#define SYSCFG              ((SYSCFG_TypeDef *) SYSCFG_BASE)

+#define EXTI                ((EXTI_TypeDef *) EXTI_BASE)

+#define TIM9                ((TIM_TypeDef *) TIM9_BASE)

+#define TIM10               ((TIM_TypeDef *) TIM10_BASE)

+#define TIM11               ((TIM_TypeDef *) TIM11_BASE)

+

+#define ADC1                ((ADC_TypeDef *) ADC1_BASE)

+#define ADC1_COMMON         ((ADC_Common_TypeDef *) ADC_BASE)

+/* Legacy defines */

+#define ADC                 ADC1_COMMON

+

+#define SPI1                ((SPI_TypeDef *) SPI1_BASE)

+#define USART1              ((USART_TypeDef *) USART1_BASE)

+#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)

+#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)

+#define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)

+#define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)

+#define GPIOE               ((GPIO_TypeDef *) GPIOE_BASE)

+#define GPIOH               ((GPIO_TypeDef *) GPIOH_BASE)

+#define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)

+#define GPIOG               ((GPIO_TypeDef *) GPIOG_BASE)

+#define CRC                 ((CRC_TypeDef *) CRC_BASE)

+#define RCC                 ((RCC_TypeDef *) RCC_BASE)

+#define FLASH               ((FLASH_TypeDef *) FLASH_R_BASE)

+#define OB                  ((OB_TypeDef *) OB_BASE) 

+#define DMA1                ((DMA_TypeDef *) DMA1_BASE)

+#define DMA1_Channel1       ((DMA_Channel_TypeDef *) DMA1_Channel1_BASE)

+#define DMA1_Channel2       ((DMA_Channel_TypeDef *) DMA1_Channel2_BASE)

+#define DMA1_Channel3       ((DMA_Channel_TypeDef *) DMA1_Channel3_BASE)

+#define DMA1_Channel4       ((DMA_Channel_TypeDef *) DMA1_Channel4_BASE)

+#define DMA1_Channel5       ((DMA_Channel_TypeDef *) DMA1_Channel5_BASE)

+#define DMA1_Channel6       ((DMA_Channel_TypeDef *) DMA1_Channel6_BASE)

+#define DMA1_Channel7       ((DMA_Channel_TypeDef *) DMA1_Channel7_BASE)

+#define DMA2                ((DMA_TypeDef *) DMA2_BASE)

+#define DMA2_Channel1       ((DMA_Channel_TypeDef *) DMA2_Channel1_BASE)

+#define DMA2_Channel2       ((DMA_Channel_TypeDef *) DMA2_Channel2_BASE)

+#define DMA2_Channel3       ((DMA_Channel_TypeDef *) DMA2_Channel3_BASE)

+#define DMA2_Channel4       ((DMA_Channel_TypeDef *) DMA2_Channel4_BASE)

+#define DMA2_Channel5       ((DMA_Channel_TypeDef *) DMA2_Channel5_BASE)

+#define DBGMCU              ((DBGMCU_TypeDef *) DBGMCU_BASE)

+

+ /**

+  * @}

+  */

+

+/** @addtogroup Exported_constants

+  * @{

+  */

+

+/** @addtogroup Peripheral_Registers_Bits_Definition

+  * @{

+  */

+    

+/******************************************************************************/

+/*                         Peripheral Registers Bits Definition               */

+/******************************************************************************/

+/******************************************************************************/

+/*                                                                            */

+/*                      Analog to Digital Converter (ADC)                     */

+/*                                                                            */

+/******************************************************************************/

+

+/********************  Bit definition for ADC_SR register  ********************/

+#define ADC_SR_AWD_Pos                       (0U)                              

+#define ADC_SR_AWD_Msk                       (0x1UL << ADC_SR_AWD_Pos)          /*!< 0x00000001 */

+#define ADC_SR_AWD                           ADC_SR_AWD_Msk                    /*!< ADC analog watchdog 1 flag */

+#define ADC_SR_EOCS_Pos                      (1U)                              

+#define ADC_SR_EOCS_Msk                      (0x1UL << ADC_SR_EOCS_Pos)         /*!< 0x00000002 */

+#define ADC_SR_EOCS                          ADC_SR_EOCS_Msk                   /*!< ADC group regular end of unitary conversion or end of sequence conversions flag */

+#define ADC_SR_JEOS_Pos                      (2U)                              

+#define ADC_SR_JEOS_Msk                      (0x1UL << ADC_SR_JEOS_Pos)         /*!< 0x00000004 */

+#define ADC_SR_JEOS                          ADC_SR_JEOS_Msk                   /*!< ADC group injected end of sequence conversions flag */

+#define ADC_SR_JSTRT_Pos                     (3U)                              

+#define ADC_SR_JSTRT_Msk                     (0x1UL << ADC_SR_JSTRT_Pos)        /*!< 0x00000008 */

+#define ADC_SR_JSTRT                         ADC_SR_JSTRT_Msk                  /*!< ADC group injected conversion start flag */

+#define ADC_SR_STRT_Pos                      (4U)                              

+#define ADC_SR_STRT_Msk                      (0x1UL << ADC_SR_STRT_Pos)         /*!< 0x00000010 */

+#define ADC_SR_STRT                          ADC_SR_STRT_Msk                   /*!< ADC group regular conversion start flag */

+#define ADC_SR_OVR_Pos                       (5U)                              

+#define ADC_SR_OVR_Msk                       (0x1UL << ADC_SR_OVR_Pos)          /*!< 0x00000020 */

+#define ADC_SR_OVR                           ADC_SR_OVR_Msk                    /*!< ADC group regular overrun flag */

+#define ADC_SR_ADONS_Pos                     (6U)                              

+#define ADC_SR_ADONS_Msk                     (0x1UL << ADC_SR_ADONS_Pos)        /*!< 0x00000040 */

+#define ADC_SR_ADONS                         ADC_SR_ADONS_Msk                  /*!< ADC ready flag */

+#define ADC_SR_RCNR_Pos                      (8U)                              

+#define ADC_SR_RCNR_Msk                      (0x1UL << ADC_SR_RCNR_Pos)         /*!< 0x00000100 */

+#define ADC_SR_RCNR                          ADC_SR_RCNR_Msk                   /*!< ADC group regular not ready flag */

+#define ADC_SR_JCNR_Pos                      (9U)                              

+#define ADC_SR_JCNR_Msk                      (0x1UL << ADC_SR_JCNR_Pos)         /*!< 0x00000200 */

+#define ADC_SR_JCNR                          ADC_SR_JCNR_Msk                   /*!< ADC group injected not ready flag */

+

+/* Legacy defines */

+#define  ADC_SR_EOC                          (ADC_SR_EOCS)

+#define  ADC_SR_JEOC                         (ADC_SR_JEOS)

+

+/*******************  Bit definition for ADC_CR1 register  ********************/

+#define ADC_CR1_AWDCH_Pos                    (0U)                              

+#define ADC_CR1_AWDCH_Msk                    (0x1FUL << ADC_CR1_AWDCH_Pos)      /*!< 0x0000001F */

+#define ADC_CR1_AWDCH                        ADC_CR1_AWDCH_Msk                 /*!< ADC analog watchdog 1 monitored channel selection */

+#define ADC_CR1_AWDCH_0                      (0x01UL << ADC_CR1_AWDCH_Pos)      /*!< 0x00000001 */

+#define ADC_CR1_AWDCH_1                      (0x02UL << ADC_CR1_AWDCH_Pos)      /*!< 0x00000002 */

+#define ADC_CR1_AWDCH_2                      (0x04UL << ADC_CR1_AWDCH_Pos)      /*!< 0x00000004 */

+#define ADC_CR1_AWDCH_3                      (0x08UL << ADC_CR1_AWDCH_Pos)      /*!< 0x00000008 */

+#define ADC_CR1_AWDCH_4                      (0x10UL << ADC_CR1_AWDCH_Pos)      /*!< 0x00000010 */

+

+#define ADC_CR1_EOCSIE_Pos                   (5U)                              

+#define ADC_CR1_EOCSIE_Msk                   (0x1UL << ADC_CR1_EOCSIE_Pos)      /*!< 0x00000020 */

+#define ADC_CR1_EOCSIE                       ADC_CR1_EOCSIE_Msk                /*!< ADC group regular end of unitary conversion or end of sequence conversions interrupt */

+#define ADC_CR1_AWDIE_Pos                    (6U)                              

+#define ADC_CR1_AWDIE_Msk                    (0x1UL << ADC_CR1_AWDIE_Pos)       /*!< 0x00000040 */

+#define ADC_CR1_AWDIE                        ADC_CR1_AWDIE_Msk                 /*!< ADC analog watchdog 1 interrupt */

+#define ADC_CR1_JEOSIE_Pos                   (7U)                              

+#define ADC_CR1_JEOSIE_Msk                   (0x1UL << ADC_CR1_JEOSIE_Pos)      /*!< 0x00000080 */

+#define ADC_CR1_JEOSIE                       ADC_CR1_JEOSIE_Msk                /*!< ADC group injected end of sequence conversions interrupt */

+#define ADC_CR1_SCAN_Pos                     (8U)                              

+#define ADC_CR1_SCAN_Msk                     (0x1UL << ADC_CR1_SCAN_Pos)        /*!< 0x00000100 */

+#define ADC_CR1_SCAN                         ADC_CR1_SCAN_Msk                  /*!< ADC scan mode */

+#define ADC_CR1_AWDSGL_Pos                   (9U)                              

+#define ADC_CR1_AWDSGL_Msk                   (0x1UL << ADC_CR1_AWDSGL_Pos)      /*!< 0x00000200 */

+#define ADC_CR1_AWDSGL                       ADC_CR1_AWDSGL_Msk                /*!< ADC analog watchdog 1 monitoring a single channel or all channels */

+#define ADC_CR1_JAUTO_Pos                    (10U)                             

+#define ADC_CR1_JAUTO_Msk                    (0x1UL << ADC_CR1_JAUTO_Pos)       /*!< 0x00000400 */

+#define ADC_CR1_JAUTO                        ADC_CR1_JAUTO_Msk                 /*!< ADC group injected automatic trigger mode */

+#define ADC_CR1_DISCEN_Pos                   (11U)                             

+#define ADC_CR1_DISCEN_Msk                   (0x1UL << ADC_CR1_DISCEN_Pos)      /*!< 0x00000800 */

+#define ADC_CR1_DISCEN                       ADC_CR1_DISCEN_Msk                /*!< ADC group regular sequencer discontinuous mode */

+#define ADC_CR1_JDISCEN_Pos                  (12U)                             

+#define ADC_CR1_JDISCEN_Msk                  (0x1UL << ADC_CR1_JDISCEN_Pos)     /*!< 0x00001000 */

+#define ADC_CR1_JDISCEN                      ADC_CR1_JDISCEN_Msk               /*!< ADC group injected sequencer discontinuous mode */

+

+#define ADC_CR1_DISCNUM_Pos                  (13U)                             

+#define ADC_CR1_DISCNUM_Msk                  (0x7UL << ADC_CR1_DISCNUM_Pos)     /*!< 0x0000E000 */

+#define ADC_CR1_DISCNUM                      ADC_CR1_DISCNUM_Msk               /*!< ADC group regular sequencer discontinuous number of ranks */

+#define ADC_CR1_DISCNUM_0                    (0x1UL << ADC_CR1_DISCNUM_Pos)     /*!< 0x00002000 */

+#define ADC_CR1_DISCNUM_1                    (0x2UL << ADC_CR1_DISCNUM_Pos)     /*!< 0x00004000 */

+#define ADC_CR1_DISCNUM_2                    (0x4UL << ADC_CR1_DISCNUM_Pos)     /*!< 0x00008000 */

+

+#define ADC_CR1_PDD_Pos                      (16U)                             

+#define ADC_CR1_PDD_Msk                      (0x1UL << ADC_CR1_PDD_Pos)         /*!< 0x00010000 */

+#define ADC_CR1_PDD                          ADC_CR1_PDD_Msk                   /*!< ADC power down during auto delay phase */

+#define ADC_CR1_PDI_Pos                      (17U)                             

+#define ADC_CR1_PDI_Msk                      (0x1UL << ADC_CR1_PDI_Pos)         /*!< 0x00020000 */

+#define ADC_CR1_PDI                          ADC_CR1_PDI_Msk                   /*!< ADC power down during idle phase */

+

+#define ADC_CR1_JAWDEN_Pos                   (22U)                             

+#define ADC_CR1_JAWDEN_Msk                   (0x1UL << ADC_CR1_JAWDEN_Pos)      /*!< 0x00400000 */

+#define ADC_CR1_JAWDEN                       ADC_CR1_JAWDEN_Msk                /*!< ADC analog watchdog 1 enable on scope ADC group injected */

+#define ADC_CR1_AWDEN_Pos                    (23U)                             

+#define ADC_CR1_AWDEN_Msk                    (0x1UL << ADC_CR1_AWDEN_Pos)       /*!< 0x00800000 */

+#define ADC_CR1_AWDEN                        ADC_CR1_AWDEN_Msk                 /*!< ADC analog watchdog 1 enable on scope ADC group regular */

+

+#define ADC_CR1_RES_Pos                      (24U)                             

+#define ADC_CR1_RES_Msk                      (0x3UL << ADC_CR1_RES_Pos)         /*!< 0x03000000 */

+#define ADC_CR1_RES                          ADC_CR1_RES_Msk                   /*!< ADC resolution */

+#define ADC_CR1_RES_0                        (0x1UL << ADC_CR1_RES_Pos)         /*!< 0x01000000 */

+#define ADC_CR1_RES_1                        (0x2UL << ADC_CR1_RES_Pos)         /*!< 0x02000000 */

+

+#define ADC_CR1_OVRIE_Pos                    (26U)                             

+#define ADC_CR1_OVRIE_Msk                    (0x1UL << ADC_CR1_OVRIE_Pos)       /*!< 0x04000000 */

+#define ADC_CR1_OVRIE                        ADC_CR1_OVRIE_Msk                 /*!< ADC group regular overrun interrupt */

+

+/* Legacy defines */

+#define  ADC_CR1_EOCIE                       (ADC_CR1_EOCSIE)

+#define  ADC_CR1_JEOCIE                      (ADC_CR1_JEOSIE)

+

+/*******************  Bit definition for ADC_CR2 register  ********************/

+#define ADC_CR2_ADON_Pos                     (0U)                              

+#define ADC_CR2_ADON_Msk                     (0x1UL << ADC_CR2_ADON_Pos)        /*!< 0x00000001 */

+#define ADC_CR2_ADON                         ADC_CR2_ADON_Msk                  /*!< ADC enable */

+#define ADC_CR2_CONT_Pos                     (1U)                              

+#define ADC_CR2_CONT_Msk                     (0x1UL << ADC_CR2_CONT_Pos)        /*!< 0x00000002 */

+#define ADC_CR2_CONT                         ADC_CR2_CONT_Msk                  /*!< ADC group regular continuous conversion mode */

+#define ADC_CR2_CFG_Pos                      (2U)                              

+#define ADC_CR2_CFG_Msk                      (0x1UL << ADC_CR2_CFG_Pos)         /*!< 0x00000004 */

+#define ADC_CR2_CFG                          ADC_CR2_CFG_Msk                   /*!< ADC channels bank selection */

+

+#define ADC_CR2_DELS_Pos                     (4U)                              

+#define ADC_CR2_DELS_Msk                     (0x7UL << ADC_CR2_DELS_Pos)        /*!< 0x00000070 */

+#define ADC_CR2_DELS                         ADC_CR2_DELS_Msk                  /*!< ADC auto delay selection */

+#define ADC_CR2_DELS_0                       (0x1UL << ADC_CR2_DELS_Pos)        /*!< 0x00000010 */

+#define ADC_CR2_DELS_1                       (0x2UL << ADC_CR2_DELS_Pos)        /*!< 0x00000020 */

+#define ADC_CR2_DELS_2                       (0x4UL << ADC_CR2_DELS_Pos)        /*!< 0x00000040 */

+

+#define ADC_CR2_DMA_Pos                      (8U)                              

+#define ADC_CR2_DMA_Msk                      (0x1UL << ADC_CR2_DMA_Pos)         /*!< 0x00000100 */

+#define ADC_CR2_DMA                          ADC_CR2_DMA_Msk                   /*!< ADC DMA transfer enable */

+#define ADC_CR2_DDS_Pos                      (9U)                              

+#define ADC_CR2_DDS_Msk                      (0x1UL << ADC_CR2_DDS_Pos)         /*!< 0x00000200 */

+#define ADC_CR2_DDS                          ADC_CR2_DDS_Msk                   /*!< ADC DMA transfer configuration */

+#define ADC_CR2_EOCS_Pos                     (10U)                             

+#define ADC_CR2_EOCS_Msk                     (0x1UL << ADC_CR2_EOCS_Pos)        /*!< 0x00000400 */

+#define ADC_CR2_EOCS                         ADC_CR2_EOCS_Msk                  /*!< ADC end of unitary or end of sequence conversions selection */

+#define ADC_CR2_ALIGN_Pos                    (11U)                             

+#define ADC_CR2_ALIGN_Msk                    (0x1UL << ADC_CR2_ALIGN_Pos)       /*!< 0x00000800 */

+#define ADC_CR2_ALIGN                        ADC_CR2_ALIGN_Msk                 /*!< ADC data alignement */

+

+#define ADC_CR2_JEXTSEL_Pos                  (16U)                             

+#define ADC_CR2_JEXTSEL_Msk                  (0xFUL << ADC_CR2_JEXTSEL_Pos)     /*!< 0x000F0000 */

+#define ADC_CR2_JEXTSEL                      ADC_CR2_JEXTSEL_Msk               /*!< ADC group injected external trigger source */

+#define ADC_CR2_JEXTSEL_0                    (0x1UL << ADC_CR2_JEXTSEL_Pos)     /*!< 0x00010000 */

+#define ADC_CR2_JEXTSEL_1                    (0x2UL << ADC_CR2_JEXTSEL_Pos)     /*!< 0x00020000 */

+#define ADC_CR2_JEXTSEL_2                    (0x4UL << ADC_CR2_JEXTSEL_Pos)     /*!< 0x00040000 */

+#define ADC_CR2_JEXTSEL_3                    (0x8UL << ADC_CR2_JEXTSEL_Pos)     /*!< 0x00080000 */

+

+#define ADC_CR2_JEXTEN_Pos                   (20U)                             

+#define ADC_CR2_JEXTEN_Msk                   (0x3UL << ADC_CR2_JEXTEN_Pos)      /*!< 0x00300000 */

+#define ADC_CR2_JEXTEN                       ADC_CR2_JEXTEN_Msk                /*!< ADC group injected external trigger polarity */

+#define ADC_CR2_JEXTEN_0                     (0x1UL << ADC_CR2_JEXTEN_Pos)      /*!< 0x00100000 */

+#define ADC_CR2_JEXTEN_1                     (0x2UL << ADC_CR2_JEXTEN_Pos)      /*!< 0x00200000 */

+

+#define ADC_CR2_JSWSTART_Pos                 (22U)                             

+#define ADC_CR2_JSWSTART_Msk                 (0x1UL << ADC_CR2_JSWSTART_Pos)    /*!< 0x00400000 */

+#define ADC_CR2_JSWSTART                     ADC_CR2_JSWSTART_Msk              /*!< ADC group injected conversion start */

+

+#define ADC_CR2_EXTSEL_Pos                   (24U)                             

+#define ADC_CR2_EXTSEL_Msk                   (0xFUL << ADC_CR2_EXTSEL_Pos)      /*!< 0x0F000000 */

+#define ADC_CR2_EXTSEL                       ADC_CR2_EXTSEL_Msk                /*!< ADC group regular external trigger source */

+#define ADC_CR2_EXTSEL_0                     (0x1UL << ADC_CR2_EXTSEL_Pos)      /*!< 0x01000000 */

+#define ADC_CR2_EXTSEL_1                     (0x2UL << ADC_CR2_EXTSEL_Pos)      /*!< 0x02000000 */

+#define ADC_CR2_EXTSEL_2                     (0x4UL << ADC_CR2_EXTSEL_Pos)      /*!< 0x04000000 */

+#define ADC_CR2_EXTSEL_3                     (0x8UL << ADC_CR2_EXTSEL_Pos)      /*!< 0x08000000 */

+

+#define ADC_CR2_EXTEN_Pos                    (28U)                             

+#define ADC_CR2_EXTEN_Msk                    (0x3UL << ADC_CR2_EXTEN_Pos)       /*!< 0x30000000 */

+#define ADC_CR2_EXTEN                        ADC_CR2_EXTEN_Msk                 /*!< ADC group regular external trigger polarity */

+#define ADC_CR2_EXTEN_0                      (0x1UL << ADC_CR2_EXTEN_Pos)       /*!< 0x10000000 */

+#define ADC_CR2_EXTEN_1                      (0x2UL << ADC_CR2_EXTEN_Pos)       /*!< 0x20000000 */

+

+#define ADC_CR2_SWSTART_Pos                  (30U)                             

+#define ADC_CR2_SWSTART_Msk                  (0x1UL << ADC_CR2_SWSTART_Pos)     /*!< 0x40000000 */

+#define ADC_CR2_SWSTART                      ADC_CR2_SWSTART_Msk               /*!< ADC group regular conversion start */

+

+/******************  Bit definition for ADC_SMPR1 register  *******************/

+#define ADC_SMPR1_SMP20_Pos                  (0U)                              

+#define ADC_SMPR1_SMP20_Msk                  (0x7UL << ADC_SMPR1_SMP20_Pos)     /*!< 0x00000007 */

+#define ADC_SMPR1_SMP20                      ADC_SMPR1_SMP20_Msk               /*!< ADC channel 20 sampling time selection */

+#define ADC_SMPR1_SMP20_0                    (0x1UL << ADC_SMPR1_SMP20_Pos)     /*!< 0x00000001 */

+#define ADC_SMPR1_SMP20_1                    (0x2UL << ADC_SMPR1_SMP20_Pos)     /*!< 0x00000002 */

+#define ADC_SMPR1_SMP20_2                    (0x4UL << ADC_SMPR1_SMP20_Pos)     /*!< 0x00000004 */

+

+#define ADC_SMPR1_SMP21_Pos                  (3U)                              

+#define ADC_SMPR1_SMP21_Msk                  (0x7UL << ADC_SMPR1_SMP21_Pos)     /*!< 0x00000038 */

+#define ADC_SMPR1_SMP21                      ADC_SMPR1_SMP21_Msk               /*!< ADC channel 21 sampling time selection */

+#define ADC_SMPR1_SMP21_0                    (0x1UL << ADC_SMPR1_SMP21_Pos)     /*!< 0x00000008 */

+#define ADC_SMPR1_SMP21_1                    (0x2UL << ADC_SMPR1_SMP21_Pos)     /*!< 0x00000010 */

+#define ADC_SMPR1_SMP21_2                    (0x4UL << ADC_SMPR1_SMP21_Pos)     /*!< 0x00000020 */

+

+#define ADC_SMPR1_SMP22_Pos                  (6U)                              

+#define ADC_SMPR1_SMP22_Msk                  (0x7UL << ADC_SMPR1_SMP22_Pos)     /*!< 0x000001C0 */

+#define ADC_SMPR1_SMP22                      ADC_SMPR1_SMP22_Msk               /*!< ADC channel 22 sampling time selection */

+#define ADC_SMPR1_SMP22_0                    (0x1UL << ADC_SMPR1_SMP22_Pos)     /*!< 0x00000040 */

+#define ADC_SMPR1_SMP22_1                    (0x2UL << ADC_SMPR1_SMP22_Pos)     /*!< 0x00000080 */

+#define ADC_SMPR1_SMP22_2                    (0x4UL << ADC_SMPR1_SMP22_Pos)     /*!< 0x00000100 */

+

+#define ADC_SMPR1_SMP23_Pos                  (9U)                              

+#define ADC_SMPR1_SMP23_Msk                  (0x7UL << ADC_SMPR1_SMP23_Pos)     /*!< 0x00000E00 */

+#define ADC_SMPR1_SMP23                      ADC_SMPR1_SMP23_Msk               /*!< ADC channel 23 sampling time selection */

+#define ADC_SMPR1_SMP23_0                    (0x1UL << ADC_SMPR1_SMP23_Pos)     /*!< 0x00000200 */

+#define ADC_SMPR1_SMP23_1                    (0x2UL << ADC_SMPR1_SMP23_Pos)     /*!< 0x00000400 */

+#define ADC_SMPR1_SMP23_2                    (0x4UL << ADC_SMPR1_SMP23_Pos)     /*!< 0x00000800 */

+

+#define ADC_SMPR1_SMP24_Pos                  (12U)                             

+#define ADC_SMPR1_SMP24_Msk                  (0x7UL << ADC_SMPR1_SMP24_Pos)     /*!< 0x00007000 */

+#define ADC_SMPR1_SMP24                      ADC_SMPR1_SMP24_Msk               /*!< ADC channel 24 sampling time selection */

+#define ADC_SMPR1_SMP24_0                    (0x1UL << ADC_SMPR1_SMP24_Pos)     /*!< 0x00001000 */

+#define ADC_SMPR1_SMP24_1                    (0x2UL << ADC_SMPR1_SMP24_Pos)     /*!< 0x00002000 */

+#define ADC_SMPR1_SMP24_2                    (0x4UL << ADC_SMPR1_SMP24_Pos)     /*!< 0x00004000 */

+

+#define ADC_SMPR1_SMP25_Pos                  (15U)                             

+#define ADC_SMPR1_SMP25_Msk                  (0x7UL << ADC_SMPR1_SMP25_Pos)     /*!< 0x00038000 */

+#define ADC_SMPR1_SMP25                      ADC_SMPR1_SMP25_Msk               /*!< ADC channel 25 sampling time selection */

+#define ADC_SMPR1_SMP25_0                    (0x1UL << ADC_SMPR1_SMP25_Pos)     /*!< 0x00008000 */

+#define ADC_SMPR1_SMP25_1                    (0x2UL << ADC_SMPR1_SMP25_Pos)     /*!< 0x00010000 */

+#define ADC_SMPR1_SMP25_2                    (0x4UL << ADC_SMPR1_SMP25_Pos)     /*!< 0x00020000 */

+

+#define ADC_SMPR1_SMP26_Pos                  (18U)                             

+#define ADC_SMPR1_SMP26_Msk                  (0x7UL << ADC_SMPR1_SMP26_Pos)     /*!< 0x001C0000 */

+#define ADC_SMPR1_SMP26                      ADC_SMPR1_SMP26_Msk               /*!< ADC channel 26 sampling time selection */

+#define ADC_SMPR1_SMP26_0                    (0x1UL << ADC_SMPR1_SMP26_Pos)     /*!< 0x00040000 */

+#define ADC_SMPR1_SMP26_1                    (0x2UL << ADC_SMPR1_SMP26_Pos)     /*!< 0x00080000 */

+#define ADC_SMPR1_SMP26_2                    (0x4UL << ADC_SMPR1_SMP26_Pos)     /*!< 0x00100000 */

+

+#define ADC_SMPR1_SMP27_Pos                  (21U)                             

+#define ADC_SMPR1_SMP27_Msk                  (0x7UL << ADC_SMPR1_SMP27_Pos)     /*!< 0x00E00000 */

+#define ADC_SMPR1_SMP27                      ADC_SMPR1_SMP27_Msk               /*!< ADC channel 27 sampling time selection */

+#define ADC_SMPR1_SMP27_0                    (0x1UL << ADC_SMPR1_SMP27_Pos)     /*!< 0x00200000 */

+#define ADC_SMPR1_SMP27_1                    (0x2UL << ADC_SMPR1_SMP27_Pos)     /*!< 0x00400000 */

+#define ADC_SMPR1_SMP27_2                    (0x4UL << ADC_SMPR1_SMP27_Pos)     /*!< 0x00800000 */

+

+#define ADC_SMPR1_SMP28_Pos                  (24U)                             

+#define ADC_SMPR1_SMP28_Msk                  (0x7UL << ADC_SMPR1_SMP28_Pos)     /*!< 0x07000000 */

+#define ADC_SMPR1_SMP28                      ADC_SMPR1_SMP28_Msk               /*!< ADC channel 28 sampling time selection */

+#define ADC_SMPR1_SMP28_0                    (0x1UL << ADC_SMPR1_SMP28_Pos)     /*!< 0x01000000 */

+#define ADC_SMPR1_SMP28_1                    (0x2UL << ADC_SMPR1_SMP28_Pos)     /*!< 0x02000000 */

+#define ADC_SMPR1_SMP28_2                    (0x4UL << ADC_SMPR1_SMP28_Pos)     /*!< 0x04000000 */

+

+#define ADC_SMPR1_SMP29_Pos                  (27U)                             

+#define ADC_SMPR1_SMP29_Msk                  (0x7UL << ADC_SMPR1_SMP29_Pos)     /*!< 0x38000000 */

+#define ADC_SMPR1_SMP29                      ADC_SMPR1_SMP29_Msk               /*!< ADC channel 29 sampling time selection */

+#define ADC_SMPR1_SMP29_0                    (0x1UL << ADC_SMPR1_SMP29_Pos)     /*!< 0x08000000 */

+#define ADC_SMPR1_SMP29_1                    (0x2UL << ADC_SMPR1_SMP29_Pos)     /*!< 0x10000000 */

+#define ADC_SMPR1_SMP29_2                    (0x4UL << ADC_SMPR1_SMP29_Pos)     /*!< 0x20000000 */

+

+/******************  Bit definition for ADC_SMPR2 register  *******************/

+#define ADC_SMPR2_SMP10_Pos                  (0U)                              

+#define ADC_SMPR2_SMP10_Msk                  (0x7UL << ADC_SMPR2_SMP10_Pos)     /*!< 0x00000007 */

+#define ADC_SMPR2_SMP10                      ADC_SMPR2_SMP10_Msk               /*!< ADC channel 10 sampling time selection */

+#define ADC_SMPR2_SMP10_0                    (0x1UL << ADC_SMPR2_SMP10_Pos)     /*!< 0x00000001 */

+#define ADC_SMPR2_SMP10_1                    (0x2UL << ADC_SMPR2_SMP10_Pos)     /*!< 0x00000002 */

+#define ADC_SMPR2_SMP10_2                    (0x4UL << ADC_SMPR2_SMP10_Pos)     /*!< 0x00000004 */

+

+#define ADC_SMPR2_SMP11_Pos                  (3U)                              

+#define ADC_SMPR2_SMP11_Msk                  (0x7UL << ADC_SMPR2_SMP11_Pos)     /*!< 0x00000038 */

+#define ADC_SMPR2_SMP11                      ADC_SMPR2_SMP11_Msk               /*!< ADC channel 11 sampling time selection */

+#define ADC_SMPR2_SMP11_0                    (0x1UL << ADC_SMPR2_SMP11_Pos)     /*!< 0x00000008 */

+#define ADC_SMPR2_SMP11_1                    (0x2UL << ADC_SMPR2_SMP11_Pos)     /*!< 0x00000010 */

+#define ADC_SMPR2_SMP11_2                    (0x4UL << ADC_SMPR2_SMP11_Pos)     /*!< 0x00000020 */

+

+#define ADC_SMPR2_SMP12_Pos                  (6U)                              

+#define ADC_SMPR2_SMP12_Msk                  (0x7UL << ADC_SMPR2_SMP12_Pos)     /*!< 0x000001C0 */

+#define ADC_SMPR2_SMP12                      ADC_SMPR2_SMP12_Msk               /*!< ADC channel 12 sampling time selection */

+#define ADC_SMPR2_SMP12_0                    (0x1UL << ADC_SMPR2_SMP12_Pos)     /*!< 0x00000040 */

+#define ADC_SMPR2_SMP12_1                    (0x2UL << ADC_SMPR2_SMP12_Pos)     /*!< 0x00000080 */

+#define ADC_SMPR2_SMP12_2                    (0x4UL << ADC_SMPR2_SMP12_Pos)     /*!< 0x00000100 */

+

+#define ADC_SMPR2_SMP13_Pos                  (9U)                              

+#define ADC_SMPR2_SMP13_Msk                  (0x7UL << ADC_SMPR2_SMP13_Pos)     /*!< 0x00000E00 */

+#define ADC_SMPR2_SMP13                      ADC_SMPR2_SMP13_Msk               /*!< ADC channel 13 sampling time selection */

+#define ADC_SMPR2_SMP13_0                    (0x1UL << ADC_SMPR2_SMP13_Pos)     /*!< 0x00000200 */

+#define ADC_SMPR2_SMP13_1                    (0x2UL << ADC_SMPR2_SMP13_Pos)     /*!< 0x00000400 */

+#define ADC_SMPR2_SMP13_2                    (0x4UL << ADC_SMPR2_SMP13_Pos)     /*!< 0x00000800 */

+

+#define ADC_SMPR2_SMP14_Pos                  (12U)                             

+#define ADC_SMPR2_SMP14_Msk                  (0x7UL << ADC_SMPR2_SMP14_Pos)     /*!< 0x00007000 */

+#define ADC_SMPR2_SMP14                      ADC_SMPR2_SMP14_Msk               /*!< ADC channel 14 sampling time selection */

+#define ADC_SMPR2_SMP14_0                    (0x1UL << ADC_SMPR2_SMP14_Pos)     /*!< 0x00001000 */

+#define ADC_SMPR2_SMP14_1                    (0x2UL << ADC_SMPR2_SMP14_Pos)     /*!< 0x00002000 */

+#define ADC_SMPR2_SMP14_2                    (0x4UL << ADC_SMPR2_SMP14_Pos)     /*!< 0x00004000 */

+

+#define ADC_SMPR2_SMP15_Pos                  (15U)                             

+#define ADC_SMPR2_SMP15_Msk                  (0x7UL << ADC_SMPR2_SMP15_Pos)     /*!< 0x00038000 */

+#define ADC_SMPR2_SMP15                      ADC_SMPR2_SMP15_Msk               /*!< ADC channel 5 sampling time selection */

+#define ADC_SMPR2_SMP15_0                    (0x1UL << ADC_SMPR2_SMP15_Pos)     /*!< 0x00008000 */

+#define ADC_SMPR2_SMP15_1                    (0x2UL << ADC_SMPR2_SMP15_Pos)     /*!< 0x00010000 */

+#define ADC_SMPR2_SMP15_2                    (0x4UL << ADC_SMPR2_SMP15_Pos)     /*!< 0x00020000 */

+

+#define ADC_SMPR2_SMP16_Pos                  (18U)                             

+#define ADC_SMPR2_SMP16_Msk                  (0x7UL << ADC_SMPR2_SMP16_Pos)     /*!< 0x001C0000 */

+#define ADC_SMPR2_SMP16                      ADC_SMPR2_SMP16_Msk               /*!< ADC channel 16 sampling time selection */

+#define ADC_SMPR2_SMP16_0                    (0x1UL << ADC_SMPR2_SMP16_Pos)     /*!< 0x00040000 */

+#define ADC_SMPR2_SMP16_1                    (0x2UL << ADC_SMPR2_SMP16_Pos)     /*!< 0x00080000 */

+#define ADC_SMPR2_SMP16_2                    (0x4UL << ADC_SMPR2_SMP16_Pos)     /*!< 0x00100000 */

+

+#define ADC_SMPR2_SMP17_Pos                  (21U)                             

+#define ADC_SMPR2_SMP17_Msk                  (0x7UL << ADC_SMPR2_SMP17_Pos)     /*!< 0x00E00000 */

+#define ADC_SMPR2_SMP17                      ADC_SMPR2_SMP17_Msk               /*!< ADC channel 17 sampling time selection */

+#define ADC_SMPR2_SMP17_0                    (0x1UL << ADC_SMPR2_SMP17_Pos)     /*!< 0x00200000 */

+#define ADC_SMPR2_SMP17_1                    (0x2UL << ADC_SMPR2_SMP17_Pos)     /*!< 0x00400000 */

+#define ADC_SMPR2_SMP17_2                    (0x4UL << ADC_SMPR2_SMP17_Pos)     /*!< 0x00800000 */

+

+#define ADC_SMPR2_SMP18_Pos                  (24U)                             

+#define ADC_SMPR2_SMP18_Msk                  (0x7UL << ADC_SMPR2_SMP18_Pos)     /*!< 0x07000000 */

+#define ADC_SMPR2_SMP18                      ADC_SMPR2_SMP18_Msk               /*!< ADC channel 18 sampling time selection */

+#define ADC_SMPR2_SMP18_0                    (0x1UL << ADC_SMPR2_SMP18_Pos)     /*!< 0x01000000 */

+#define ADC_SMPR2_SMP18_1                    (0x2UL << ADC_SMPR2_SMP18_Pos)     /*!< 0x02000000 */

+#define ADC_SMPR2_SMP18_2                    (0x4UL << ADC_SMPR2_SMP18_Pos)     /*!< 0x04000000 */

+

+#define ADC_SMPR2_SMP19_Pos                  (27U)                             

+#define ADC_SMPR2_SMP19_Msk                  (0x7UL << ADC_SMPR2_SMP19_Pos)     /*!< 0x38000000 */

+#define ADC_SMPR2_SMP19                      ADC_SMPR2_SMP19_Msk               /*!< ADC channel 19 sampling time selection */

+#define ADC_SMPR2_SMP19_0                    (0x1UL << ADC_SMPR2_SMP19_Pos)     /*!< 0x08000000 */

+#define ADC_SMPR2_SMP19_1                    (0x2UL << ADC_SMPR2_SMP19_Pos)     /*!< 0x10000000 */

+#define ADC_SMPR2_SMP19_2                    (0x4UL << ADC_SMPR2_SMP19_Pos)     /*!< 0x20000000 */

+

+/******************  Bit definition for ADC_SMPR3 register  *******************/

+#define ADC_SMPR3_SMP0_Pos                   (0U)                              

+#define ADC_SMPR3_SMP0_Msk                   (0x7UL << ADC_SMPR3_SMP0_Pos)      /*!< 0x00000007 */

+#define ADC_SMPR3_SMP0                       ADC_SMPR3_SMP0_Msk                /*!< ADC channel 0 sampling time selection */

+#define ADC_SMPR3_SMP0_0                     (0x1UL << ADC_SMPR3_SMP0_Pos)      /*!< 0x00000001 */

+#define ADC_SMPR3_SMP0_1                     (0x2UL << ADC_SMPR3_SMP0_Pos)      /*!< 0x00000002 */

+#define ADC_SMPR3_SMP0_2                     (0x4UL << ADC_SMPR3_SMP0_Pos)      /*!< 0x00000004 */

+ 

+#define ADC_SMPR3_SMP1_Pos                   (3U)                              

+#define ADC_SMPR3_SMP1_Msk                   (0x7UL << ADC_SMPR3_SMP1_Pos)      /*!< 0x00000038 */

+#define ADC_SMPR3_SMP1                       ADC_SMPR3_SMP1_Msk                /*!< ADC channel 1 sampling time selection */

+#define ADC_SMPR3_SMP1_0                     (0x1UL << ADC_SMPR3_SMP1_Pos)      /*!< 0x00000008 */

+#define ADC_SMPR3_SMP1_1                     (0x2UL << ADC_SMPR3_SMP1_Pos)      /*!< 0x00000010 */

+#define ADC_SMPR3_SMP1_2                     (0x4UL << ADC_SMPR3_SMP1_Pos)      /*!< 0x00000020 */

+

+#define ADC_SMPR3_SMP2_Pos                   (6U)                              

+#define ADC_SMPR3_SMP2_Msk                   (0x7UL << ADC_SMPR3_SMP2_Pos)      /*!< 0x000001C0 */

+#define ADC_SMPR3_SMP2                       ADC_SMPR3_SMP2_Msk                /*!< ADC channel 2 sampling time selection */

+#define ADC_SMPR3_SMP2_0                     (0x1UL << ADC_SMPR3_SMP2_Pos)      /*!< 0x00000040 */

+#define ADC_SMPR3_SMP2_1                     (0x2UL << ADC_SMPR3_SMP2_Pos)      /*!< 0x00000080 */

+#define ADC_SMPR3_SMP2_2                     (0x4UL << ADC_SMPR3_SMP2_Pos)      /*!< 0x00000100 */

+

+#define ADC_SMPR3_SMP3_Pos                   (9U)                              

+#define ADC_SMPR3_SMP3_Msk                   (0x7UL << ADC_SMPR3_SMP3_Pos)      /*!< 0x00000E00 */

+#define ADC_SMPR3_SMP3                       ADC_SMPR3_SMP3_Msk                /*!< ADC channel 3 sampling time selection */

+#define ADC_SMPR3_SMP3_0                     (0x1UL << ADC_SMPR3_SMP3_Pos)      /*!< 0x00000200 */

+#define ADC_SMPR3_SMP3_1                     (0x2UL << ADC_SMPR3_SMP3_Pos)      /*!< 0x00000400 */

+#define ADC_SMPR3_SMP3_2                     (0x4UL << ADC_SMPR3_SMP3_Pos)      /*!< 0x00000800 */

+

+#define ADC_SMPR3_SMP4_Pos                   (12U)                             

+#define ADC_SMPR3_SMP4_Msk                   (0x7UL << ADC_SMPR3_SMP4_Pos)      /*!< 0x00007000 */

+#define ADC_SMPR3_SMP4                       ADC_SMPR3_SMP4_Msk                /*!< ADC channel 4 sampling time selection */

+#define ADC_SMPR3_SMP4_0                     (0x1UL << ADC_SMPR3_SMP4_Pos)      /*!< 0x00001000 */

+#define ADC_SMPR3_SMP4_1                     (0x2UL << ADC_SMPR3_SMP4_Pos)      /*!< 0x00002000 */

+#define ADC_SMPR3_SMP4_2                     (0x4UL << ADC_SMPR3_SMP4_Pos)      /*!< 0x00004000 */

+

+#define ADC_SMPR3_SMP5_Pos                   (15U)                             

+#define ADC_SMPR3_SMP5_Msk                   (0x7UL << ADC_SMPR3_SMP5_Pos)      /*!< 0x00038000 */

+#define ADC_SMPR3_SMP5                       ADC_SMPR3_SMP5_Msk                /*!< ADC channel 5 sampling time selection */

+#define ADC_SMPR3_SMP5_0                     (0x1UL << ADC_SMPR3_SMP5_Pos)      /*!< 0x00008000 */

+#define ADC_SMPR3_SMP5_1                     (0x2UL << ADC_SMPR3_SMP5_Pos)      /*!< 0x00010000 */

+#define ADC_SMPR3_SMP5_2                     (0x4UL << ADC_SMPR3_SMP5_Pos)      /*!< 0x00020000 */

+

+#define ADC_SMPR3_SMP6_Pos                   (18U)                             

+#define ADC_SMPR3_SMP6_Msk                   (0x7UL << ADC_SMPR3_SMP6_Pos)      /*!< 0x001C0000 */

+#define ADC_SMPR3_SMP6                       ADC_SMPR3_SMP6_Msk                /*!< ADC channel 6 sampling time selection */

+#define ADC_SMPR3_SMP6_0                     (0x1UL << ADC_SMPR3_SMP6_Pos)      /*!< 0x00040000 */

+#define ADC_SMPR3_SMP6_1                     (0x2UL << ADC_SMPR3_SMP6_Pos)      /*!< 0x00080000 */

+#define ADC_SMPR3_SMP6_2                     (0x4UL << ADC_SMPR3_SMP6_Pos)      /*!< 0x00100000 */

+

+#define ADC_SMPR3_SMP7_Pos                   (21U)                             

+#define ADC_SMPR3_SMP7_Msk                   (0x7UL << ADC_SMPR3_SMP7_Pos)      /*!< 0x00E00000 */

+#define ADC_SMPR3_SMP7                       ADC_SMPR3_SMP7_Msk                /*!< ADC channel 7 sampling time selection */

+#define ADC_SMPR3_SMP7_0                     (0x1UL << ADC_SMPR3_SMP7_Pos)      /*!< 0x00200000 */

+#define ADC_SMPR3_SMP7_1                     (0x2UL << ADC_SMPR3_SMP7_Pos)      /*!< 0x00400000 */

+#define ADC_SMPR3_SMP7_2                     (0x4UL << ADC_SMPR3_SMP7_Pos)      /*!< 0x00800000 */

+

+#define ADC_SMPR3_SMP8_Pos                   (24U)                             

+#define ADC_SMPR3_SMP8_Msk                   (0x7UL << ADC_SMPR3_SMP8_Pos)      /*!< 0x07000000 */

+#define ADC_SMPR3_SMP8                       ADC_SMPR3_SMP8_Msk                /*!< ADC channel 8 sampling time selection */

+#define ADC_SMPR3_SMP8_0                     (0x1UL << ADC_SMPR3_SMP8_Pos)      /*!< 0x01000000 */

+#define ADC_SMPR3_SMP8_1                     (0x2UL << ADC_SMPR3_SMP8_Pos)      /*!< 0x02000000 */

+#define ADC_SMPR3_SMP8_2                     (0x4UL << ADC_SMPR3_SMP8_Pos)      /*!< 0x04000000 */

+

+#define ADC_SMPR3_SMP9_Pos                   (27U)                             

+#define ADC_SMPR3_SMP9_Msk                   (0x7UL << ADC_SMPR3_SMP9_Pos)      /*!< 0x38000000 */

+#define ADC_SMPR3_SMP9                       ADC_SMPR3_SMP9_Msk                /*!< ADC channel 9 sampling time selection */

+#define ADC_SMPR3_SMP9_0                     (0x1UL << ADC_SMPR3_SMP9_Pos)      /*!< 0x08000000 */

+#define ADC_SMPR3_SMP9_1                     (0x2UL << ADC_SMPR3_SMP9_Pos)      /*!< 0x10000000 */

+#define ADC_SMPR3_SMP9_2                     (0x4UL << ADC_SMPR3_SMP9_Pos)      /*!< 0x20000000 */

+

+/******************  Bit definition for ADC_JOFR1 register  *******************/

+#define ADC_JOFR1_JOFFSET1_Pos               (0U)                              

+#define ADC_JOFR1_JOFFSET1_Msk               (0xFFFUL << ADC_JOFR1_JOFFSET1_Pos) /*!< 0x00000FFF */

+#define ADC_JOFR1_JOFFSET1                   ADC_JOFR1_JOFFSET1_Msk            /*!< ADC group injected sequencer rank 1 offset value */

+

+/******************  Bit definition for ADC_JOFR2 register  *******************/

+#define ADC_JOFR2_JOFFSET2_Pos               (0U)                              

+#define ADC_JOFR2_JOFFSET2_Msk               (0xFFFUL << ADC_JOFR2_JOFFSET2_Pos) /*!< 0x00000FFF */

+#define ADC_JOFR2_JOFFSET2                   ADC_JOFR2_JOFFSET2_Msk            /*!< ADC group injected sequencer rank 2 offset value */

+

+/******************  Bit definition for ADC_JOFR3 register  *******************/

+#define ADC_JOFR3_JOFFSET3_Pos               (0U)                              

+#define ADC_JOFR3_JOFFSET3_Msk               (0xFFFUL << ADC_JOFR3_JOFFSET3_Pos) /*!< 0x00000FFF */

+#define ADC_JOFR3_JOFFSET3                   ADC_JOFR3_JOFFSET3_Msk            /*!< ADC group injected sequencer rank 3 offset value */

+

+/******************  Bit definition for ADC_JOFR4 register  *******************/

+#define ADC_JOFR4_JOFFSET4_Pos               (0U)                              

+#define ADC_JOFR4_JOFFSET4_Msk               (0xFFFUL << ADC_JOFR4_JOFFSET4_Pos) /*!< 0x00000FFF */

+#define ADC_JOFR4_JOFFSET4                   ADC_JOFR4_JOFFSET4_Msk            /*!< ADC group injected sequencer rank 4 offset value */

+

+/*******************  Bit definition for ADC_HTR register  ********************/

+#define ADC_HTR_HT_Pos                       (0U)                              

+#define ADC_HTR_HT_Msk                       (0xFFFUL << ADC_HTR_HT_Pos)        /*!< 0x00000FFF */

+#define ADC_HTR_HT                           ADC_HTR_HT_Msk                    /*!< ADC analog watchdog 1 threshold high */

+

+/*******************  Bit definition for ADC_LTR register  ********************/

+#define ADC_LTR_LT_Pos                       (0U)                              

+#define ADC_LTR_LT_Msk                       (0xFFFUL << ADC_LTR_LT_Pos)        /*!< 0x00000FFF */

+#define ADC_LTR_LT                           ADC_LTR_LT_Msk                    /*!< ADC analog watchdog 1 threshold low */

+

+/*******************  Bit definition for ADC_SQR1 register  *******************/

+#define ADC_SQR1_L_Pos                       (20U)                             

+#define ADC_SQR1_L_Msk                       (0x1FUL << ADC_SQR1_L_Pos)         /*!< 0x01F00000 */

+#define ADC_SQR1_L                           ADC_SQR1_L_Msk                    /*!< ADC group regular sequencer scan length */

+#define ADC_SQR1_L_0                         (0x01UL << ADC_SQR1_L_Pos)         /*!< 0x00100000 */

+#define ADC_SQR1_L_1                         (0x02UL << ADC_SQR1_L_Pos)         /*!< 0x00200000 */

+#define ADC_SQR1_L_2                         (0x04UL << ADC_SQR1_L_Pos)         /*!< 0x00400000 */

+#define ADC_SQR1_L_3                         (0x08UL << ADC_SQR1_L_Pos)         /*!< 0x00800000 */

+#define ADC_SQR1_L_4                         (0x10UL << ADC_SQR1_L_Pos)         /*!< 0x01000000 */

+

+#define ADC_SQR1_SQ28_Pos                    (15U)                             

+#define ADC_SQR1_SQ28_Msk                    (0x1FUL << ADC_SQR1_SQ28_Pos)      /*!< 0x000F8000 */

+#define ADC_SQR1_SQ28                        ADC_SQR1_SQ28_Msk                 /*!< ADC group regular sequencer rank 28 */

+#define ADC_SQR1_SQ28_0                      (0x01UL << ADC_SQR1_SQ28_Pos)      /*!< 0x00008000 */

+#define ADC_SQR1_SQ28_1                      (0x02UL << ADC_SQR1_SQ28_Pos)      /*!< 0x00010000 */

+#define ADC_SQR1_SQ28_2                      (0x04UL << ADC_SQR1_SQ28_Pos)      /*!< 0x00020000 */

+#define ADC_SQR1_SQ28_3                      (0x08UL << ADC_SQR1_SQ28_Pos)      /*!< 0x00040000 */

+#define ADC_SQR1_SQ28_4                      (0x10UL << ADC_SQR1_SQ28_Pos)      /*!< 0x00080000 */

+

+#define ADC_SQR1_SQ27_Pos                    (10U)                             

+#define ADC_SQR1_SQ27_Msk                    (0x1FUL << ADC_SQR1_SQ27_Pos)      /*!< 0x00007C00 */

+#define ADC_SQR1_SQ27                        ADC_SQR1_SQ27_Msk                 /*!< ADC group regular sequencer rank 27 */

+#define ADC_SQR1_SQ27_0                      (0x01UL << ADC_SQR1_SQ27_Pos)      /*!< 0x00000400 */

+#define ADC_SQR1_SQ27_1                      (0x02UL << ADC_SQR1_SQ27_Pos)      /*!< 0x00000800 */

+#define ADC_SQR1_SQ27_2                      (0x04UL << ADC_SQR1_SQ27_Pos)      /*!< 0x00001000 */

+#define ADC_SQR1_SQ27_3                      (0x08UL << ADC_SQR1_SQ27_Pos)      /*!< 0x00002000 */

+#define ADC_SQR1_SQ27_4                      (0x10UL << ADC_SQR1_SQ27_Pos)      /*!< 0x00004000 */

+

+#define ADC_SQR1_SQ26_Pos                    (5U)                              

+#define ADC_SQR1_SQ26_Msk                    (0x1FUL << ADC_SQR1_SQ26_Pos)      /*!< 0x000003E0 */

+#define ADC_SQR1_SQ26                        ADC_SQR1_SQ26_Msk                 /*!< ADC group regular sequencer rank 26 */

+#define ADC_SQR1_SQ26_0                      (0x01UL << ADC_SQR1_SQ26_Pos)      /*!< 0x00000020 */

+#define ADC_SQR1_SQ26_1                      (0x02UL << ADC_SQR1_SQ26_Pos)      /*!< 0x00000040 */

+#define ADC_SQR1_SQ26_2                      (0x04UL << ADC_SQR1_SQ26_Pos)      /*!< 0x00000080 */

+#define ADC_SQR1_SQ26_3                      (0x08UL << ADC_SQR1_SQ26_Pos)      /*!< 0x00000100 */

+#define ADC_SQR1_SQ26_4                      (0x10UL << ADC_SQR1_SQ26_Pos)      /*!< 0x00000200 */

+

+#define ADC_SQR1_SQ25_Pos                    (0U)                              

+#define ADC_SQR1_SQ25_Msk                    (0x1FUL << ADC_SQR1_SQ25_Pos)      /*!< 0x0000001F */

+#define ADC_SQR1_SQ25                        ADC_SQR1_SQ25_Msk                 /*!< ADC group regular sequencer rank 25 */

+#define ADC_SQR1_SQ25_0                      (0x01UL << ADC_SQR1_SQ25_Pos)      /*!< 0x00000001 */

+#define ADC_SQR1_SQ25_1                      (0x02UL << ADC_SQR1_SQ25_Pos)      /*!< 0x00000002 */

+#define ADC_SQR1_SQ25_2                      (0x04UL << ADC_SQR1_SQ25_Pos)      /*!< 0x00000004 */

+#define ADC_SQR1_SQ25_3                      (0x08UL << ADC_SQR1_SQ25_Pos)      /*!< 0x00000008 */

+#define ADC_SQR1_SQ25_4                      (0x10UL << ADC_SQR1_SQ25_Pos)      /*!< 0x00000010 */

+

+/*******************  Bit definition for ADC_SQR2 register  *******************/

+#define ADC_SQR2_SQ19_Pos                    (0U)                              

+#define ADC_SQR2_SQ19_Msk                    (0x1FUL << ADC_SQR2_SQ19_Pos)      /*!< 0x0000001F */

+#define ADC_SQR2_SQ19                        ADC_SQR2_SQ19_Msk                 /*!< ADC group regular sequencer rank 19 */

+#define ADC_SQR2_SQ19_0                      (0x01UL << ADC_SQR2_SQ19_Pos)      /*!< 0x00000001 */

+#define ADC_SQR2_SQ19_1                      (0x02UL << ADC_SQR2_SQ19_Pos)      /*!< 0x00000002 */

+#define ADC_SQR2_SQ19_2                      (0x04UL << ADC_SQR2_SQ19_Pos)      /*!< 0x00000004 */

+#define ADC_SQR2_SQ19_3                      (0x08UL << ADC_SQR2_SQ19_Pos)      /*!< 0x00000008 */

+#define ADC_SQR2_SQ19_4                      (0x10UL << ADC_SQR2_SQ19_Pos)      /*!< 0x00000010 */

+

+#define ADC_SQR2_SQ20_Pos                    (5U)                              

+#define ADC_SQR2_SQ20_Msk                    (0x1FUL << ADC_SQR2_SQ20_Pos)      /*!< 0x000003E0 */

+#define ADC_SQR2_SQ20                        ADC_SQR2_SQ20_Msk                 /*!< ADC group regular sequencer rank 20 */

+#define ADC_SQR2_SQ20_0                      (0x01UL << ADC_SQR2_SQ20_Pos)      /*!< 0x00000020 */

+#define ADC_SQR2_SQ20_1                      (0x02UL << ADC_SQR2_SQ20_Pos)      /*!< 0x00000040 */

+#define ADC_SQR2_SQ20_2                      (0x04UL << ADC_SQR2_SQ20_Pos)      /*!< 0x00000080 */

+#define ADC_SQR2_SQ20_3                      (0x08UL << ADC_SQR2_SQ20_Pos)      /*!< 0x00000100 */

+#define ADC_SQR2_SQ20_4                      (0x10UL << ADC_SQR2_SQ20_Pos)      /*!< 0x00000200 */

+

+#define ADC_SQR2_SQ21_Pos                    (10U)                             

+#define ADC_SQR2_SQ21_Msk                    (0x1FUL << ADC_SQR2_SQ21_Pos)      /*!< 0x00007C00 */

+#define ADC_SQR2_SQ21                        ADC_SQR2_SQ21_Msk                 /*!< ADC group regular sequencer rank 21 */

+#define ADC_SQR2_SQ21_0                      (0x01UL << ADC_SQR2_SQ21_Pos)      /*!< 0x00000400 */

+#define ADC_SQR2_SQ21_1                      (0x02UL << ADC_SQR2_SQ21_Pos)      /*!< 0x00000800 */

+#define ADC_SQR2_SQ21_2                      (0x04UL << ADC_SQR2_SQ21_Pos)      /*!< 0x00001000 */

+#define ADC_SQR2_SQ21_3                      (0x08UL << ADC_SQR2_SQ21_Pos)      /*!< 0x00002000 */

+#define ADC_SQR2_SQ21_4                      (0x10UL << ADC_SQR2_SQ21_Pos)      /*!< 0x00004000 */

+

+#define ADC_SQR2_SQ22_Pos                    (15U)                             

+#define ADC_SQR2_SQ22_Msk                    (0x1FUL << ADC_SQR2_SQ22_Pos)      /*!< 0x000F8000 */

+#define ADC_SQR2_SQ22                        ADC_SQR2_SQ22_Msk                 /*!< ADC group regular sequencer rank 22 */

+#define ADC_SQR2_SQ22_0                      (0x01UL << ADC_SQR2_SQ22_Pos)      /*!< 0x00008000 */

+#define ADC_SQR2_SQ22_1                      (0x02UL << ADC_SQR2_SQ22_Pos)      /*!< 0x00010000 */

+#define ADC_SQR2_SQ22_2                      (0x04UL << ADC_SQR2_SQ22_Pos)      /*!< 0x00020000 */

+#define ADC_SQR2_SQ22_3                      (0x08UL << ADC_SQR2_SQ22_Pos)      /*!< 0x00040000 */

+#define ADC_SQR2_SQ22_4                      (0x10UL << ADC_SQR2_SQ22_Pos)      /*!< 0x00080000 */

+

+#define ADC_SQR2_SQ23_Pos                    (20U)                             

+#define ADC_SQR2_SQ23_Msk                    (0x1FUL << ADC_SQR2_SQ23_Pos)      /*!< 0x01F00000 */

+#define ADC_SQR2_SQ23                        ADC_SQR2_SQ23_Msk                 /*!< ADC group regular sequencer rank 23 */

+#define ADC_SQR2_SQ23_0                      (0x01UL << ADC_SQR2_SQ23_Pos)      /*!< 0x00100000 */

+#define ADC_SQR2_SQ23_1                      (0x02UL << ADC_SQR2_SQ23_Pos)      /*!< 0x00200000 */

+#define ADC_SQR2_SQ23_2                      (0x04UL << ADC_SQR2_SQ23_Pos)      /*!< 0x00400000 */

+#define ADC_SQR2_SQ23_3                      (0x08UL << ADC_SQR2_SQ23_Pos)      /*!< 0x00800000 */

+#define ADC_SQR2_SQ23_4                      (0x10UL << ADC_SQR2_SQ23_Pos)      /*!< 0x01000000 */

+

+#define ADC_SQR2_SQ24_Pos                    (25U)                             

+#define ADC_SQR2_SQ24_Msk                    (0x1FUL << ADC_SQR2_SQ24_Pos)      /*!< 0x3E000000 */

+#define ADC_SQR2_SQ24                        ADC_SQR2_SQ24_Msk                 /*!< ADC group regular sequencer rank 24 */

+#define ADC_SQR2_SQ24_0                      (0x01UL << ADC_SQR2_SQ24_Pos)      /*!< 0x02000000 */

+#define ADC_SQR2_SQ24_1                      (0x02UL << ADC_SQR2_SQ24_Pos)      /*!< 0x04000000 */

+#define ADC_SQR2_SQ24_2                      (0x04UL << ADC_SQR2_SQ24_Pos)      /*!< 0x08000000 */

+#define ADC_SQR2_SQ24_3                      (0x08UL << ADC_SQR2_SQ24_Pos)      /*!< 0x10000000 */

+#define ADC_SQR2_SQ24_4                      (0x10UL << ADC_SQR2_SQ24_Pos)      /*!< 0x20000000 */

+

+/*******************  Bit definition for ADC_SQR3 register  *******************/

+#define ADC_SQR3_SQ13_Pos                    (0U)                              

+#define ADC_SQR3_SQ13_Msk                    (0x1FUL << ADC_SQR3_SQ13_Pos)      /*!< 0x0000001F */

+#define ADC_SQR3_SQ13                        ADC_SQR3_SQ13_Msk                 /*!< ADC group regular sequencer rank 13 */

+#define ADC_SQR3_SQ13_0                      (0x01UL << ADC_SQR3_SQ13_Pos)      /*!< 0x00000001 */

+#define ADC_SQR3_SQ13_1                      (0x02UL << ADC_SQR3_SQ13_Pos)      /*!< 0x00000002 */

+#define ADC_SQR3_SQ13_2                      (0x04UL << ADC_SQR3_SQ13_Pos)      /*!< 0x00000004 */

+#define ADC_SQR3_SQ13_3                      (0x08UL << ADC_SQR3_SQ13_Pos)      /*!< 0x00000008 */

+#define ADC_SQR3_SQ13_4                      (0x10UL << ADC_SQR3_SQ13_Pos)      /*!< 0x00000010 */

+

+#define ADC_SQR3_SQ14_Pos                    (5U)                              

+#define ADC_SQR3_SQ14_Msk                    (0x1FUL << ADC_SQR3_SQ14_Pos)      /*!< 0x000003E0 */

+#define ADC_SQR3_SQ14                        ADC_SQR3_SQ14_Msk                 /*!< ADC group regular sequencer rank 14 */

+#define ADC_SQR3_SQ14_0                      (0x01UL << ADC_SQR3_SQ14_Pos)      /*!< 0x00000020 */

+#define ADC_SQR3_SQ14_1                      (0x02UL << ADC_SQR3_SQ14_Pos)      /*!< 0x00000040 */

+#define ADC_SQR3_SQ14_2                      (0x04UL << ADC_SQR3_SQ14_Pos)      /*!< 0x00000080 */

+#define ADC_SQR3_SQ14_3                      (0x08UL << ADC_SQR3_SQ14_Pos)      /*!< 0x00000100 */

+#define ADC_SQR3_SQ14_4                      (0x10UL << ADC_SQR3_SQ14_Pos)      /*!< 0x00000200 */

+

+#define ADC_SQR3_SQ15_Pos                    (10U)                             

+#define ADC_SQR3_SQ15_Msk                    (0x1FUL << ADC_SQR3_SQ15_Pos)      /*!< 0x00007C00 */

+#define ADC_SQR3_SQ15                        ADC_SQR3_SQ15_Msk                 /*!< ADC group regular sequencer rank 15 */

+#define ADC_SQR3_SQ15_0                      (0x01UL << ADC_SQR3_SQ15_Pos)      /*!< 0x00000400 */

+#define ADC_SQR3_SQ15_1                      (0x02UL << ADC_SQR3_SQ15_Pos)      /*!< 0x00000800 */

+#define ADC_SQR3_SQ15_2                      (0x04UL << ADC_SQR3_SQ15_Pos)      /*!< 0x00001000 */

+#define ADC_SQR3_SQ15_3                      (0x08UL << ADC_SQR3_SQ15_Pos)      /*!< 0x00002000 */

+#define ADC_SQR3_SQ15_4                      (0x10UL << ADC_SQR3_SQ15_Pos)      /*!< 0x00004000 */

+

+#define ADC_SQR3_SQ16_Pos                    (15U)                             

+#define ADC_SQR3_SQ16_Msk                    (0x1FUL << ADC_SQR3_SQ16_Pos)      /*!< 0x000F8000 */

+#define ADC_SQR3_SQ16                        ADC_SQR3_SQ16_Msk                 /*!< ADC group regular sequencer rank 16 */

+#define ADC_SQR3_SQ16_0                      (0x01UL << ADC_SQR3_SQ16_Pos)      /*!< 0x00008000 */

+#define ADC_SQR3_SQ16_1                      (0x02UL << ADC_SQR3_SQ16_Pos)      /*!< 0x00010000 */

+#define ADC_SQR3_SQ16_2                      (0x04UL << ADC_SQR3_SQ16_Pos)      /*!< 0x00020000 */

+#define ADC_SQR3_SQ16_3                      (0x08UL << ADC_SQR3_SQ16_Pos)      /*!< 0x00040000 */

+#define ADC_SQR3_SQ16_4                      (0x10UL << ADC_SQR3_SQ16_Pos)      /*!< 0x00080000 */

+

+#define ADC_SQR3_SQ17_Pos                    (20U)                             

+#define ADC_SQR3_SQ17_Msk                    (0x1FUL << ADC_SQR3_SQ17_Pos)      /*!< 0x01F00000 */

+#define ADC_SQR3_SQ17                        ADC_SQR3_SQ17_Msk                 /*!< ADC group regular sequencer rank 17 */

+#define ADC_SQR3_SQ17_0                      (0x01UL << ADC_SQR3_SQ17_Pos)      /*!< 0x00100000 */

+#define ADC_SQR3_SQ17_1                      (0x02UL << ADC_SQR3_SQ17_Pos)      /*!< 0x00200000 */

+#define ADC_SQR3_SQ17_2                      (0x04UL << ADC_SQR3_SQ17_Pos)      /*!< 0x00400000 */

+#define ADC_SQR3_SQ17_3                      (0x08UL << ADC_SQR3_SQ17_Pos)      /*!< 0x00800000 */

+#define ADC_SQR3_SQ17_4                      (0x10UL << ADC_SQR3_SQ17_Pos)      /*!< 0x01000000 */

+

+#define ADC_SQR3_SQ18_Pos                    (25U)                             

+#define ADC_SQR3_SQ18_Msk                    (0x1FUL << ADC_SQR3_SQ18_Pos)      /*!< 0x3E000000 */

+#define ADC_SQR3_SQ18                        ADC_SQR3_SQ18_Msk                 /*!< ADC group regular sequencer rank 18 */

+#define ADC_SQR3_SQ18_0                      (0x01UL << ADC_SQR3_SQ18_Pos)      /*!< 0x02000000 */

+#define ADC_SQR3_SQ18_1                      (0x02UL << ADC_SQR3_SQ18_Pos)      /*!< 0x04000000 */

+#define ADC_SQR3_SQ18_2                      (0x04UL << ADC_SQR3_SQ18_Pos)      /*!< 0x08000000 */

+#define ADC_SQR3_SQ18_3                      (0x08UL << ADC_SQR3_SQ18_Pos)      /*!< 0x10000000 */

+#define ADC_SQR3_SQ18_4                      (0x10UL << ADC_SQR3_SQ18_Pos)      /*!< 0x20000000 */

+

+/*******************  Bit definition for ADC_SQR4 register  *******************/

+#define ADC_SQR4_SQ7_Pos                     (0U)                              

+#define ADC_SQR4_SQ7_Msk                     (0x1FUL << ADC_SQR4_SQ7_Pos)       /*!< 0x0000001F */

+#define ADC_SQR4_SQ7                         ADC_SQR4_SQ7_Msk                  /*!< ADC group regular sequencer rank 7 */

+#define ADC_SQR4_SQ7_0                       (0x01UL << ADC_SQR4_SQ7_Pos)       /*!< 0x00000001 */

+#define ADC_SQR4_SQ7_1                       (0x02UL << ADC_SQR4_SQ7_Pos)       /*!< 0x00000002 */

+#define ADC_SQR4_SQ7_2                       (0x04UL << ADC_SQR4_SQ7_Pos)       /*!< 0x00000004 */

+#define ADC_SQR4_SQ7_3                       (0x08UL << ADC_SQR4_SQ7_Pos)       /*!< 0x00000008 */

+#define ADC_SQR4_SQ7_4                       (0x10UL << ADC_SQR4_SQ7_Pos)       /*!< 0x00000010 */

+

+#define ADC_SQR4_SQ8_Pos                     (5U)                              

+#define ADC_SQR4_SQ8_Msk                     (0x1FUL << ADC_SQR4_SQ8_Pos)       /*!< 0x000003E0 */

+#define ADC_SQR4_SQ8                         ADC_SQR4_SQ8_Msk                  /*!< ADC group regular sequencer rank 8 */

+#define ADC_SQR4_SQ8_0                       (0x01UL << ADC_SQR4_SQ8_Pos)       /*!< 0x00000020 */

+#define ADC_SQR4_SQ8_1                       (0x02UL << ADC_SQR4_SQ8_Pos)       /*!< 0x00000040 */

+#define ADC_SQR4_SQ8_2                       (0x04UL << ADC_SQR4_SQ8_Pos)       /*!< 0x00000080 */

+#define ADC_SQR4_SQ8_3                       (0x08UL << ADC_SQR4_SQ8_Pos)       /*!< 0x00000100 */

+#define ADC_SQR4_SQ8_4                       (0x10UL << ADC_SQR4_SQ8_Pos)       /*!< 0x00000200 */

+

+#define ADC_SQR4_SQ9_Pos                     (10U)                             

+#define ADC_SQR4_SQ9_Msk                     (0x1FUL << ADC_SQR4_SQ9_Pos)       /*!< 0x00007C00 */

+#define ADC_SQR4_SQ9                         ADC_SQR4_SQ9_Msk                  /*!< ADC group regular sequencer rank 9 */

+#define ADC_SQR4_SQ9_0                       (0x01UL << ADC_SQR4_SQ9_Pos)       /*!< 0x00000400 */

+#define ADC_SQR4_SQ9_1                       (0x02UL << ADC_SQR4_SQ9_Pos)       /*!< 0x00000800 */

+#define ADC_SQR4_SQ9_2                       (0x04UL << ADC_SQR4_SQ9_Pos)       /*!< 0x00001000 */

+#define ADC_SQR4_SQ9_3                       (0x08UL << ADC_SQR4_SQ9_Pos)       /*!< 0x00002000 */

+#define ADC_SQR4_SQ9_4                       (0x10UL << ADC_SQR4_SQ9_Pos)       /*!< 0x00004000 */

+

+#define ADC_SQR4_SQ10_Pos                    (15U)                             

+#define ADC_SQR4_SQ10_Msk                    (0x1FUL << ADC_SQR4_SQ10_Pos)      /*!< 0x000F8000 */

+#define ADC_SQR4_SQ10                        ADC_SQR4_SQ10_Msk                 /*!< ADC group regular sequencer rank 10 */

+#define ADC_SQR4_SQ10_0                      (0x01UL << ADC_SQR4_SQ10_Pos)      /*!< 0x00008000 */

+#define ADC_SQR4_SQ10_1                      (0x02UL << ADC_SQR4_SQ10_Pos)      /*!< 0x00010000 */

+#define ADC_SQR4_SQ10_2                      (0x04UL << ADC_SQR4_SQ10_Pos)      /*!< 0x00020000 */

+#define ADC_SQR4_SQ10_3                      (0x08UL << ADC_SQR4_SQ10_Pos)      /*!< 0x00040000 */

+#define ADC_SQR4_SQ10_4                      (0x10UL << ADC_SQR4_SQ10_Pos)      /*!< 0x00080000 */

+

+#define ADC_SQR4_SQ11_Pos                    (20U)                             

+#define ADC_SQR4_SQ11_Msk                    (0x1FUL << ADC_SQR4_SQ11_Pos)      /*!< 0x01F00000 */

+#define ADC_SQR4_SQ11                        ADC_SQR4_SQ11_Msk                 /*!< ADC group regular sequencer rank 11 */

+#define ADC_SQR4_SQ11_0                      (0x01UL << ADC_SQR4_SQ11_Pos)      /*!< 0x00100000 */

+#define ADC_SQR4_SQ11_1                      (0x02UL << ADC_SQR4_SQ11_Pos)      /*!< 0x00200000 */

+#define ADC_SQR4_SQ11_2                      (0x04UL << ADC_SQR4_SQ11_Pos)      /*!< 0x00400000 */

+#define ADC_SQR4_SQ11_3                      (0x08UL << ADC_SQR4_SQ11_Pos)      /*!< 0x00800000 */

+#define ADC_SQR4_SQ11_4                      (0x10UL << ADC_SQR4_SQ11_Pos)      /*!< 0x01000000 */

+

+#define ADC_SQR4_SQ12_Pos                    (25U)                             

+#define ADC_SQR4_SQ12_Msk                    (0x1FUL << ADC_SQR4_SQ12_Pos)      /*!< 0x3E000000 */

+#define ADC_SQR4_SQ12                        ADC_SQR4_SQ12_Msk                 /*!< ADC group regular sequencer rank 12 */

+#define ADC_SQR4_SQ12_0                      (0x01UL << ADC_SQR4_SQ12_Pos)      /*!< 0x02000000 */

+#define ADC_SQR4_SQ12_1                      (0x02UL << ADC_SQR4_SQ12_Pos)      /*!< 0x04000000 */

+#define ADC_SQR4_SQ12_2                      (0x04UL << ADC_SQR4_SQ12_Pos)      /*!< 0x08000000 */

+#define ADC_SQR4_SQ12_3                      (0x08UL << ADC_SQR4_SQ12_Pos)      /*!< 0x10000000 */

+#define ADC_SQR4_SQ12_4                      (0x10UL << ADC_SQR4_SQ12_Pos)      /*!< 0x20000000 */

+

+/*******************  Bit definition for ADC_SQR5 register  *******************/

+#define ADC_SQR5_SQ1_Pos                     (0U)                              

+#define ADC_SQR5_SQ1_Msk                     (0x1FUL << ADC_SQR5_SQ1_Pos)       /*!< 0x0000001F */

+#define ADC_SQR5_SQ1                         ADC_SQR5_SQ1_Msk                  /*!< ADC group regular sequencer rank 1 */

+#define ADC_SQR5_SQ1_0                       (0x01UL << ADC_SQR5_SQ1_Pos)       /*!< 0x00000001 */

+#define ADC_SQR5_SQ1_1                       (0x02UL << ADC_SQR5_SQ1_Pos)       /*!< 0x00000002 */

+#define ADC_SQR5_SQ1_2                       (0x04UL << ADC_SQR5_SQ1_Pos)       /*!< 0x00000004 */

+#define ADC_SQR5_SQ1_3                       (0x08UL << ADC_SQR5_SQ1_Pos)       /*!< 0x00000008 */

+#define ADC_SQR5_SQ1_4                       (0x10UL << ADC_SQR5_SQ1_Pos)       /*!< 0x00000010 */

+

+#define ADC_SQR5_SQ2_Pos                     (5U)                              

+#define ADC_SQR5_SQ2_Msk                     (0x1FUL << ADC_SQR5_SQ2_Pos)       /*!< 0x000003E0 */

+#define ADC_SQR5_SQ2                         ADC_SQR5_SQ2_Msk                  /*!< ADC group regular sequencer rank 2 */

+#define ADC_SQR5_SQ2_0                       (0x01UL << ADC_SQR5_SQ2_Pos)       /*!< 0x00000020 */

+#define ADC_SQR5_SQ2_1                       (0x02UL << ADC_SQR5_SQ2_Pos)       /*!< 0x00000040 */

+#define ADC_SQR5_SQ2_2                       (0x04UL << ADC_SQR5_SQ2_Pos)       /*!< 0x00000080 */

+#define ADC_SQR5_SQ2_3                       (0x08UL << ADC_SQR5_SQ2_Pos)       /*!< 0x00000100 */

+#define ADC_SQR5_SQ2_4                       (0x10UL << ADC_SQR5_SQ2_Pos)       /*!< 0x00000200 */

+

+#define ADC_SQR5_SQ3_Pos                     (10U)                             

+#define ADC_SQR5_SQ3_Msk                     (0x1FUL << ADC_SQR5_SQ3_Pos)       /*!< 0x00007C00 */

+#define ADC_SQR5_SQ3                         ADC_SQR5_SQ3_Msk                  /*!< ADC group regular sequencer rank 3 */

+#define ADC_SQR5_SQ3_0                       (0x01UL << ADC_SQR5_SQ3_Pos)       /*!< 0x00000400 */

+#define ADC_SQR5_SQ3_1                       (0x02UL << ADC_SQR5_SQ3_Pos)       /*!< 0x00000800 */

+#define ADC_SQR5_SQ3_2                       (0x04UL << ADC_SQR5_SQ3_Pos)       /*!< 0x00001000 */

+#define ADC_SQR5_SQ3_3                       (0x08UL << ADC_SQR5_SQ3_Pos)       /*!< 0x00002000 */

+#define ADC_SQR5_SQ3_4                       (0x10UL << ADC_SQR5_SQ3_Pos)       /*!< 0x00004000 */

+

+#define ADC_SQR5_SQ4_Pos                     (15U)                             

+#define ADC_SQR5_SQ4_Msk                     (0x1FUL << ADC_SQR5_SQ4_Pos)       /*!< 0x000F8000 */

+#define ADC_SQR5_SQ4                         ADC_SQR5_SQ4_Msk                  /*!< ADC group regular sequencer rank 4 */

+#define ADC_SQR5_SQ4_0                       (0x01UL << ADC_SQR5_SQ4_Pos)       /*!< 0x00008000 */

+#define ADC_SQR5_SQ4_1                       (0x02UL << ADC_SQR5_SQ4_Pos)       /*!< 0x00010000 */

+#define ADC_SQR5_SQ4_2                       (0x04UL << ADC_SQR5_SQ4_Pos)       /*!< 0x00020000 */

+#define ADC_SQR5_SQ4_3                       (0x08UL << ADC_SQR5_SQ4_Pos)       /*!< 0x00040000 */

+#define ADC_SQR5_SQ4_4                       (0x10UL << ADC_SQR5_SQ4_Pos)       /*!< 0x00080000 */

+

+#define ADC_SQR5_SQ5_Pos                     (20U)                             

+#define ADC_SQR5_SQ5_Msk                     (0x1FUL << ADC_SQR5_SQ5_Pos)       /*!< 0x01F00000 */

+#define ADC_SQR5_SQ5                         ADC_SQR5_SQ5_Msk                  /*!< ADC group regular sequencer rank 5 */

+#define ADC_SQR5_SQ5_0                       (0x01UL << ADC_SQR5_SQ5_Pos)       /*!< 0x00100000 */

+#define ADC_SQR5_SQ5_1                       (0x02UL << ADC_SQR5_SQ5_Pos)       /*!< 0x00200000 */

+#define ADC_SQR5_SQ5_2                       (0x04UL << ADC_SQR5_SQ5_Pos)       /*!< 0x00400000 */

+#define ADC_SQR5_SQ5_3                       (0x08UL << ADC_SQR5_SQ5_Pos)       /*!< 0x00800000 */

+#define ADC_SQR5_SQ5_4                       (0x10UL << ADC_SQR5_SQ5_Pos)       /*!< 0x01000000 */

+

+#define ADC_SQR5_SQ6_Pos                     (25U)                             

+#define ADC_SQR5_SQ6_Msk                     (0x1FUL << ADC_SQR5_SQ6_Pos)       /*!< 0x3E000000 */

+#define ADC_SQR5_SQ6                         ADC_SQR5_SQ6_Msk                  /*!< ADC group regular sequencer rank 6 */

+#define ADC_SQR5_SQ6_0                       (0x01UL << ADC_SQR5_SQ6_Pos)       /*!< 0x02000000 */

+#define ADC_SQR5_SQ6_1                       (0x02UL << ADC_SQR5_SQ6_Pos)       /*!< 0x04000000 */

+#define ADC_SQR5_SQ6_2                       (0x04UL << ADC_SQR5_SQ6_Pos)       /*!< 0x08000000 */

+#define ADC_SQR5_SQ6_3                       (0x08UL << ADC_SQR5_SQ6_Pos)       /*!< 0x10000000 */

+#define ADC_SQR5_SQ6_4                       (0x10UL << ADC_SQR5_SQ6_Pos)       /*!< 0x20000000 */

+

+

+/*******************  Bit definition for ADC_JSQR register  *******************/

+#define ADC_JSQR_JSQ1_Pos                    (0U)                              

+#define ADC_JSQR_JSQ1_Msk                    (0x1FUL << ADC_JSQR_JSQ1_Pos)      /*!< 0x0000001F */

+#define ADC_JSQR_JSQ1                        ADC_JSQR_JSQ1_Msk                 /*!< ADC group injected sequencer rank 1 */

+#define ADC_JSQR_JSQ1_0                      (0x01UL << ADC_JSQR_JSQ1_Pos)      /*!< 0x00000001 */

+#define ADC_JSQR_JSQ1_1                      (0x02UL << ADC_JSQR_JSQ1_Pos)      /*!< 0x00000002 */

+#define ADC_JSQR_JSQ1_2                      (0x04UL << ADC_JSQR_JSQ1_Pos)      /*!< 0x00000004 */

+#define ADC_JSQR_JSQ1_3                      (0x08UL << ADC_JSQR_JSQ1_Pos)      /*!< 0x00000008 */

+#define ADC_JSQR_JSQ1_4                      (0x10UL << ADC_JSQR_JSQ1_Pos)      /*!< 0x00000010 */

+

+#define ADC_JSQR_JSQ2_Pos                    (5U)                              

+#define ADC_JSQR_JSQ2_Msk                    (0x1FUL << ADC_JSQR_JSQ2_Pos)      /*!< 0x000003E0 */

+#define ADC_JSQR_JSQ2                        ADC_JSQR_JSQ2_Msk                 /*!< ADC group injected sequencer rank 2 */

+#define ADC_JSQR_JSQ2_0                      (0x01UL << ADC_JSQR_JSQ2_Pos)      /*!< 0x00000020 */

+#define ADC_JSQR_JSQ2_1                      (0x02UL << ADC_JSQR_JSQ2_Pos)      /*!< 0x00000040 */

+#define ADC_JSQR_JSQ2_2                      (0x04UL << ADC_JSQR_JSQ2_Pos)      /*!< 0x00000080 */

+#define ADC_JSQR_JSQ2_3                      (0x08UL << ADC_JSQR_JSQ2_Pos)      /*!< 0x00000100 */

+#define ADC_JSQR_JSQ2_4                      (0x10UL << ADC_JSQR_JSQ2_Pos)      /*!< 0x00000200 */

+

+#define ADC_JSQR_JSQ3_Pos                    (10U)                             

+#define ADC_JSQR_JSQ3_Msk                    (0x1FUL << ADC_JSQR_JSQ3_Pos)      /*!< 0x00007C00 */

+#define ADC_JSQR_JSQ3                        ADC_JSQR_JSQ3_Msk                 /*!< ADC group injected sequencer rank 3 */

+#define ADC_JSQR_JSQ3_0                      (0x01UL << ADC_JSQR_JSQ3_Pos)      /*!< 0x00000400 */

+#define ADC_JSQR_JSQ3_1                      (0x02UL << ADC_JSQR_JSQ3_Pos)      /*!< 0x00000800 */

+#define ADC_JSQR_JSQ3_2                      (0x04UL << ADC_JSQR_JSQ3_Pos)      /*!< 0x00001000 */

+#define ADC_JSQR_JSQ3_3                      (0x08UL << ADC_JSQR_JSQ3_Pos)      /*!< 0x00002000 */

+#define ADC_JSQR_JSQ3_4                      (0x10UL << ADC_JSQR_JSQ3_Pos)      /*!< 0x00004000 */

+

+#define ADC_JSQR_JSQ4_Pos                    (15U)                             

+#define ADC_JSQR_JSQ4_Msk                    (0x1FUL << ADC_JSQR_JSQ4_Pos)      /*!< 0x000F8000 */

+#define ADC_JSQR_JSQ4                        ADC_JSQR_JSQ4_Msk                 /*!< ADC group injected sequencer rank 4 */

+#define ADC_JSQR_JSQ4_0                      (0x01UL << ADC_JSQR_JSQ4_Pos)      /*!< 0x00008000 */

+#define ADC_JSQR_JSQ4_1                      (0x02UL << ADC_JSQR_JSQ4_Pos)      /*!< 0x00010000 */

+#define ADC_JSQR_JSQ4_2                      (0x04UL << ADC_JSQR_JSQ4_Pos)      /*!< 0x00020000 */

+#define ADC_JSQR_JSQ4_3                      (0x08UL << ADC_JSQR_JSQ4_Pos)      /*!< 0x00040000 */

+#define ADC_JSQR_JSQ4_4                      (0x10UL << ADC_JSQR_JSQ4_Pos)      /*!< 0x00080000 */

+

+#define ADC_JSQR_JL_Pos                      (20U)                             

+#define ADC_JSQR_JL_Msk                      (0x3UL << ADC_JSQR_JL_Pos)         /*!< 0x00300000 */

+#define ADC_JSQR_JL                          ADC_JSQR_JL_Msk                   /*!< ADC group injected sequencer scan length */

+#define ADC_JSQR_JL_0                        (0x1UL << ADC_JSQR_JL_Pos)         /*!< 0x00100000 */

+#define ADC_JSQR_JL_1                        (0x2UL << ADC_JSQR_JL_Pos)         /*!< 0x00200000 */

+

+/*******************  Bit definition for ADC_JDR1 register  *******************/

+#define ADC_JDR1_JDATA_Pos                   (0U)                              

+#define ADC_JDR1_JDATA_Msk                   (0xFFFFUL << ADC_JDR1_JDATA_Pos)   /*!< 0x0000FFFF */

+#define ADC_JDR1_JDATA                       ADC_JDR1_JDATA_Msk                /*!< ADC group injected sequencer rank 1 conversion data */

+

+/*******************  Bit definition for ADC_JDR2 register  *******************/

+#define ADC_JDR2_JDATA_Pos                   (0U)                              

+#define ADC_JDR2_JDATA_Msk                   (0xFFFFUL << ADC_JDR2_JDATA_Pos)   /*!< 0x0000FFFF */

+#define ADC_JDR2_JDATA                       ADC_JDR2_JDATA_Msk                /*!< ADC group injected sequencer rank 2 conversion data */

+

+/*******************  Bit definition for ADC_JDR3 register  *******************/

+#define ADC_JDR3_JDATA_Pos                   (0U)                              

+#define ADC_JDR3_JDATA_Msk                   (0xFFFFUL << ADC_JDR3_JDATA_Pos)   /*!< 0x0000FFFF */

+#define ADC_JDR3_JDATA                       ADC_JDR3_JDATA_Msk                /*!< ADC group injected sequencer rank 3 conversion data */

+

+/*******************  Bit definition for ADC_JDR4 register  *******************/

+#define ADC_JDR4_JDATA_Pos                   (0U)                              

+#define ADC_JDR4_JDATA_Msk                   (0xFFFFUL << ADC_JDR4_JDATA_Pos)   /*!< 0x0000FFFF */

+#define ADC_JDR4_JDATA                       ADC_JDR4_JDATA_Msk                /*!< ADC group injected sequencer rank 4 conversion data */

+

+/********************  Bit definition for ADC_DR register  ********************/

+#define ADC_DR_DATA_Pos                      (0U)                              

+#define ADC_DR_DATA_Msk                      (0xFFFFUL << ADC_DR_DATA_Pos)      /*!< 0x0000FFFF */

+#define ADC_DR_DATA                          ADC_DR_DATA_Msk                   /*!< ADC group regular conversion data */

+

+/******************  Bit definition for ADC_SMPR0 register  *******************/

+#define ADC_SMPR0_SMP30_Pos                  (0U)                              

+#define ADC_SMPR0_SMP30_Msk                  (0x7UL << ADC_SMPR0_SMP30_Pos)     /*!< 0x00000007 */

+#define ADC_SMPR0_SMP30                      ADC_SMPR0_SMP30_Msk               /*!< ADC channel 30 sampling time selection */

+#define ADC_SMPR0_SMP30_0                    (0x1UL << ADC_SMPR0_SMP30_Pos)     /*!< 0x00000001 */

+#define ADC_SMPR0_SMP30_1                    (0x2UL << ADC_SMPR0_SMP30_Pos)     /*!< 0x00000002 */

+#define ADC_SMPR0_SMP30_2                    (0x4UL << ADC_SMPR0_SMP30_Pos)     /*!< 0x00000004 */

+ 

+#define ADC_SMPR0_SMP31_Pos                  (3U)                              

+#define ADC_SMPR0_SMP31_Msk                  (0x7UL << ADC_SMPR0_SMP31_Pos)     /*!< 0x00000038 */

+#define ADC_SMPR0_SMP31                      ADC_SMPR0_SMP31_Msk               /*!< ADC channel 31 sampling time selection */

+#define ADC_SMPR0_SMP31_0                    (0x1UL << ADC_SMPR0_SMP31_Pos)     /*!< 0x00000008 */

+#define ADC_SMPR0_SMP31_1                    (0x2UL << ADC_SMPR0_SMP31_Pos)     /*!< 0x00000010 */

+#define ADC_SMPR0_SMP31_2                    (0x4UL << ADC_SMPR0_SMP31_Pos)     /*!< 0x00000020 */

+

+/*******************  Bit definition for ADC_CSR register  ********************/

+#define ADC_CSR_AWD1_Pos                     (0U)                              

+#define ADC_CSR_AWD1_Msk                     (0x1UL << ADC_CSR_AWD1_Pos)        /*!< 0x00000001 */

+#define ADC_CSR_AWD1                         ADC_CSR_AWD1_Msk                  /*!< ADC multimode master analog watchdog 1 flag */

+#define ADC_CSR_EOCS1_Pos                    (1U)                              

+#define ADC_CSR_EOCS1_Msk                    (0x1UL << ADC_CSR_EOCS1_Pos)       /*!< 0x00000002 */

+#define ADC_CSR_EOCS1                        ADC_CSR_EOCS1_Msk                 /*!< ADC multimode master group regular end of unitary conversion or end of sequence conversions flag */

+#define ADC_CSR_JEOS1_Pos                    (2U)                              

+#define ADC_CSR_JEOS1_Msk                    (0x1UL << ADC_CSR_JEOS1_Pos)       /*!< 0x00000004 */

+#define ADC_CSR_JEOS1                        ADC_CSR_JEOS1_Msk                 /*!< ADC multimode master group injected end of sequence conversions flag */

+#define ADC_CSR_JSTRT1_Pos                   (3U)                              

+#define ADC_CSR_JSTRT1_Msk                   (0x1UL << ADC_CSR_JSTRT1_Pos)      /*!< 0x00000008 */

+#define ADC_CSR_JSTRT1                       ADC_CSR_JSTRT1_Msk                /*!< ADC multimode master group injected conversion start flag */

+#define ADC_CSR_STRT1_Pos                    (4U)                              

+#define ADC_CSR_STRT1_Msk                    (0x1UL << ADC_CSR_STRT1_Pos)       /*!< 0x00000010 */

+#define ADC_CSR_STRT1                        ADC_CSR_STRT1_Msk                 /*!< ADC multimode master group regular conversion start flag */

+#define ADC_CSR_OVR1_Pos                     (5U)                              

+#define ADC_CSR_OVR1_Msk                     (0x1UL << ADC_CSR_OVR1_Pos)        /*!< 0x00000020 */

+#define ADC_CSR_OVR1                         ADC_CSR_OVR1_Msk                  /*!< ADC multimode master group regular overrun flag */

+#define ADC_CSR_ADONS1_Pos                   (6U)                              

+#define ADC_CSR_ADONS1_Msk                   (0x1UL << ADC_CSR_ADONS1_Pos)      /*!< 0x00000040 */

+#define ADC_CSR_ADONS1                       ADC_CSR_ADONS1_Msk                /*!< ADC multimode master ready flag */

+

+/* Legacy defines */

+#define  ADC_CSR_EOC1                        (ADC_CSR_EOCS1)

+#define  ADC_CSR_JEOC1                       (ADC_CSR_JEOS1)

+

+/*******************  Bit definition for ADC_CCR register  ********************/

+#define ADC_CCR_ADCPRE_Pos                   (16U)                             

+#define ADC_CCR_ADCPRE_Msk                   (0x3UL << ADC_CCR_ADCPRE_Pos)      /*!< 0x00030000 */

+#define ADC_CCR_ADCPRE                       ADC_CCR_ADCPRE_Msk                /*!< ADC clock source asynchronous prescaler */

+#define ADC_CCR_ADCPRE_0                     (0x1UL << ADC_CCR_ADCPRE_Pos)      /*!< 0x00010000 */

+#define ADC_CCR_ADCPRE_1                     (0x2UL << ADC_CCR_ADCPRE_Pos)      /*!< 0x00020000 */

+#define ADC_CCR_TSVREFE_Pos                  (23U)                             

+#define ADC_CCR_TSVREFE_Msk                  (0x1UL << ADC_CCR_TSVREFE_Pos)     /*!< 0x00800000 */

+#define ADC_CCR_TSVREFE                      ADC_CCR_TSVREFE_Msk               /*!< ADC internal path to VrefInt and temperature sensor enable */

+

+/******************************************************************************/

+/*                                                                            */

+/*                      Analog Comparators (COMP)                             */

+/*                                                                            */

+/******************************************************************************/

+

+/******************  Bit definition for COMP_CSR register  ********************/

+#define COMP_CSR_10KPU                      (0x00000001U)                      /*!< Comparator 1 input plus 10K pull-up resistor */

+#define COMP_CSR_400KPU                     (0x00000002U)                      /*!< Comparator 1 input plus 400K pull-up resistor */

+#define COMP_CSR_10KPD                      (0x00000004U)                      /*!< Comparator 1 input plus 10K pull-down resistor */

+#define COMP_CSR_400KPD                     (0x00000008U)                      /*!< Comparator 1 input plus 400K pull-down resistor */

+#define COMP_CSR_CMP1EN_Pos                 (4U)                               

+#define COMP_CSR_CMP1EN_Msk                 (0x1UL << COMP_CSR_CMP1EN_Pos)      /*!< 0x00000010 */

+#define COMP_CSR_CMP1EN                     COMP_CSR_CMP1EN_Msk                /*!< Comparator 1 enable */

+#define COMP_CSR_CMP1OUT_Pos                (7U)                               

+#define COMP_CSR_CMP1OUT_Msk                (0x1UL << COMP_CSR_CMP1OUT_Pos)     /*!< 0x00000080 */

+#define COMP_CSR_CMP1OUT                    COMP_CSR_CMP1OUT_Msk               /*!< Comparator 1 output level */

+#define COMP_CSR_SPEED_Pos                  (12U)                              

+#define COMP_CSR_SPEED_Msk                  (0x1UL << COMP_CSR_SPEED_Pos)       /*!< 0x00001000 */

+#define COMP_CSR_SPEED                      COMP_CSR_SPEED_Msk                 /*!< Comparator 2 power mode */

+#define COMP_CSR_CMP2OUT_Pos                (13U)                              

+#define COMP_CSR_CMP2OUT_Msk                (0x1UL << COMP_CSR_CMP2OUT_Pos)     /*!< 0x00002000 */

+#define COMP_CSR_CMP2OUT                    COMP_CSR_CMP2OUT_Msk               /*!< Comparator 2 output level */

+

+#define COMP_CSR_WNDWE_Pos                  (17U)                              

+#define COMP_CSR_WNDWE_Msk                  (0x1UL << COMP_CSR_WNDWE_Pos)       /*!< 0x00020000 */

+#define COMP_CSR_WNDWE                      COMP_CSR_WNDWE_Msk                 /*!< Pair of comparators window mode. Bit intended to be used with COMP common instance (COMP_Common_TypeDef)  */

+

+#define COMP_CSR_INSEL_Pos                  (18U)                              

+#define COMP_CSR_INSEL_Msk                  (0x7UL << COMP_CSR_INSEL_Pos)       /*!< 0x001C0000 */

+#define COMP_CSR_INSEL                      COMP_CSR_INSEL_Msk                 /*!< Comparator 2 input minus selection */

+#define COMP_CSR_INSEL_0                    (0x1UL << COMP_CSR_INSEL_Pos)       /*!< 0x00040000 */

+#define COMP_CSR_INSEL_1                    (0x2UL << COMP_CSR_INSEL_Pos)       /*!< 0x00080000 */

+#define COMP_CSR_INSEL_2                    (0x4UL << COMP_CSR_INSEL_Pos)       /*!< 0x00100000 */

+#define COMP_CSR_OUTSEL_Pos                 (21U)                              

+#define COMP_CSR_OUTSEL_Msk                 (0x7UL << COMP_CSR_OUTSEL_Pos)      /*!< 0x00E00000 */

+#define COMP_CSR_OUTSEL                     COMP_CSR_OUTSEL_Msk                /*!< Comparator 2 output redirection */

+#define COMP_CSR_OUTSEL_0                   (0x1UL << COMP_CSR_OUTSEL_Pos)      /*!< 0x00200000 */

+#define COMP_CSR_OUTSEL_1                   (0x2UL << COMP_CSR_OUTSEL_Pos)      /*!< 0x00400000 */

+#define COMP_CSR_OUTSEL_2                   (0x4UL << COMP_CSR_OUTSEL_Pos)      /*!< 0x00800000 */

+

+/* Bits present in COMP register but not related to comparator */

+/* (or partially related to comparator, in addition to other peripherals) */

+#define COMP_CSR_SW1_Pos                    (5U)                               

+#define COMP_CSR_SW1_Msk                    (0x1UL << COMP_CSR_SW1_Pos)         /*!< 0x00000020 */

+#define COMP_CSR_SW1                        COMP_CSR_SW1_Msk                   /*!< SW1 analog switch enable */

+#define COMP_CSR_VREFOUTEN_Pos              (16U)                              

+#define COMP_CSR_VREFOUTEN_Msk              (0x1UL << COMP_CSR_VREFOUTEN_Pos)   /*!< 0x00010000 */

+#define COMP_CSR_VREFOUTEN                  COMP_CSR_VREFOUTEN_Msk             /*!< VrefInt output enable on GPIO group 3 */

+

+#define COMP_CSR_FCH3_Pos                   (26U)                              

+#define COMP_CSR_FCH3_Msk                   (0x1UL << COMP_CSR_FCH3_Pos)        /*!< 0x04000000 */

+#define COMP_CSR_FCH3                       COMP_CSR_FCH3_Msk                  /*!< Bit 26 */

+#define COMP_CSR_FCH8_Pos                   (27U)                              

+#define COMP_CSR_FCH8_Msk                   (0x1UL << COMP_CSR_FCH8_Pos)        /*!< 0x08000000 */

+#define COMP_CSR_FCH8                       COMP_CSR_FCH8_Msk                  /*!< Bit 27 */

+#define COMP_CSR_RCH13_Pos                  (28U)                              

+#define COMP_CSR_RCH13_Msk                  (0x1UL << COMP_CSR_RCH13_Pos)       /*!< 0x10000000 */

+#define COMP_CSR_RCH13                      COMP_CSR_RCH13_Msk                 /*!< Bit 28 */

+

+#define COMP_CSR_CAIE_Pos                   (29U)                              

+#define COMP_CSR_CAIE_Msk                   (0x1UL << COMP_CSR_CAIE_Pos)        /*!< 0x20000000 */

+#define COMP_CSR_CAIE                       COMP_CSR_CAIE_Msk                  /*!< Bit 29 */

+#define COMP_CSR_CAIF_Pos                   (30U)                              

+#define COMP_CSR_CAIF_Msk                   (0x1UL << COMP_CSR_CAIF_Pos)        /*!< 0x40000000 */

+#define COMP_CSR_CAIF                       COMP_CSR_CAIF_Msk                  /*!< Bit 30 */

+#define COMP_CSR_TSUSP_Pos                  (31U)                              

+#define COMP_CSR_TSUSP_Msk                  (0x1UL << COMP_CSR_TSUSP_Pos)       /*!< 0x80000000 */

+#define COMP_CSR_TSUSP                      COMP_CSR_TSUSP_Msk                 /*!< Bit 31 */

+

+/******************************************************************************/

+/*                                                                            */

+/*                         Operational Amplifier (OPAMP)                      */

+/*                                                                            */

+/******************************************************************************/

+/*******************  Bit definition for OPAMP_CSR register  ******************/

+#define OPAMP_CSR_OPA1PD_Pos                  (0U)                             

+#define OPAMP_CSR_OPA1PD_Msk                  (0x1UL << OPAMP_CSR_OPA1PD_Pos)   /*!< 0x00000001 */

+#define OPAMP_CSR_OPA1PD                      OPAMP_CSR_OPA1PD_Msk             /*!< OPAMP1 disable */

+#define OPAMP_CSR_S3SEL1_Pos                  (1U)                             

+#define OPAMP_CSR_S3SEL1_Msk                  (0x1UL << OPAMP_CSR_S3SEL1_Pos)   /*!< 0x00000002 */

+#define OPAMP_CSR_S3SEL1                      OPAMP_CSR_S3SEL1_Msk             /*!< Switch 3 for OPAMP1 Enable */

+#define OPAMP_CSR_S4SEL1_Pos                  (2U)                             

+#define OPAMP_CSR_S4SEL1_Msk                  (0x1UL << OPAMP_CSR_S4SEL1_Pos)   /*!< 0x00000004 */

+#define OPAMP_CSR_S4SEL1                      OPAMP_CSR_S4SEL1_Msk             /*!< Switch 4 for OPAMP1 Enable */

+#define OPAMP_CSR_S5SEL1_Pos                  (3U)                             

+#define OPAMP_CSR_S5SEL1_Msk                  (0x1UL << OPAMP_CSR_S5SEL1_Pos)   /*!< 0x00000008 */

+#define OPAMP_CSR_S5SEL1                      OPAMP_CSR_S5SEL1_Msk             /*!< Switch 5 for OPAMP1 Enable */

+#define OPAMP_CSR_S6SEL1_Pos                  (4U)                             

+#define OPAMP_CSR_S6SEL1_Msk                  (0x1UL << OPAMP_CSR_S6SEL1_Pos)   /*!< 0x00000010 */

+#define OPAMP_CSR_S6SEL1                      OPAMP_CSR_S6SEL1_Msk             /*!< Switch 6 for OPAMP1 Enable */

+#define OPAMP_CSR_OPA1CAL_L_Pos               (5U)                             

+#define OPAMP_CSR_OPA1CAL_L_Msk               (0x1UL << OPAMP_CSR_OPA1CAL_L_Pos) /*!< 0x00000020 */

+#define OPAMP_CSR_OPA1CAL_L                   OPAMP_CSR_OPA1CAL_L_Msk          /*!< OPAMP1 Offset calibration for P differential pair */

+#define OPAMP_CSR_OPA1CAL_H_Pos               (6U)                             

+#define OPAMP_CSR_OPA1CAL_H_Msk               (0x1UL << OPAMP_CSR_OPA1CAL_H_Pos) /*!< 0x00000040 */

+#define OPAMP_CSR_OPA1CAL_H                   OPAMP_CSR_OPA1CAL_H_Msk          /*!< OPAMP1 Offset calibration for N differential pair */

+#define OPAMP_CSR_OPA1LPM_Pos                 (7U)                             

+#define OPAMP_CSR_OPA1LPM_Msk                 (0x1UL << OPAMP_CSR_OPA1LPM_Pos)  /*!< 0x00000080 */

+#define OPAMP_CSR_OPA1LPM                     OPAMP_CSR_OPA1LPM_Msk            /*!< OPAMP1 Low power enable */

+#define OPAMP_CSR_OPA2PD_Pos                  (8U)                             

+#define OPAMP_CSR_OPA2PD_Msk                  (0x1UL << OPAMP_CSR_OPA2PD_Pos)   /*!< 0x00000100 */

+#define OPAMP_CSR_OPA2PD                      OPAMP_CSR_OPA2PD_Msk             /*!< OPAMP2 disable */

+#define OPAMP_CSR_S3SEL2_Pos                  (9U)                             

+#define OPAMP_CSR_S3SEL2_Msk                  (0x1UL << OPAMP_CSR_S3SEL2_Pos)   /*!< 0x00000200 */

+#define OPAMP_CSR_S3SEL2                      OPAMP_CSR_S3SEL2_Msk             /*!< Switch 3 for OPAMP2 Enable */

+#define OPAMP_CSR_S4SEL2_Pos                  (10U)                            

+#define OPAMP_CSR_S4SEL2_Msk                  (0x1UL << OPAMP_CSR_S4SEL2_Pos)   /*!< 0x00000400 */

+#define OPAMP_CSR_S4SEL2                      OPAMP_CSR_S4SEL2_Msk             /*!< Switch 4 for OPAMP2 Enable */

+#define OPAMP_CSR_S5SEL2_Pos                  (11U)                            

+#define OPAMP_CSR_S5SEL2_Msk                  (0x1UL << OPAMP_CSR_S5SEL2_Pos)   /*!< 0x00000800 */

+#define OPAMP_CSR_S5SEL2                      OPAMP_CSR_S5SEL2_Msk             /*!< Switch 5 for OPAMP2 Enable */

+#define OPAMP_CSR_S6SEL2_Pos                  (12U)                            

+#define OPAMP_CSR_S6SEL2_Msk                  (0x1UL << OPAMP_CSR_S6SEL2_Pos)   /*!< 0x00001000 */

+#define OPAMP_CSR_S6SEL2                      OPAMP_CSR_S6SEL2_Msk             /*!< Switch 6 for OPAMP2 Enable */

+#define OPAMP_CSR_OPA2CAL_L_Pos               (13U)                            

+#define OPAMP_CSR_OPA2CAL_L_Msk               (0x1UL << OPAMP_CSR_OPA2CAL_L_Pos) /*!< 0x00002000 */

+#define OPAMP_CSR_OPA2CAL_L                   OPAMP_CSR_OPA2CAL_L_Msk          /*!< OPAMP2 Offset calibration for P differential pair */

+#define OPAMP_CSR_OPA2CAL_H_Pos               (14U)                            

+#define OPAMP_CSR_OPA2CAL_H_Msk               (0x1UL << OPAMP_CSR_OPA2CAL_H_Pos) /*!< 0x00004000 */

+#define OPAMP_CSR_OPA2CAL_H                   OPAMP_CSR_OPA2CAL_H_Msk          /*!< OPAMP2 Offset calibration for N differential pair */

+#define OPAMP_CSR_OPA2LPM_Pos                 (15U)                            

+#define OPAMP_CSR_OPA2LPM_Msk                 (0x1UL << OPAMP_CSR_OPA2LPM_Pos)  /*!< 0x00008000 */

+#define OPAMP_CSR_OPA2LPM                     OPAMP_CSR_OPA2LPM_Msk            /*!< OPAMP2 Low power enable */

+#define OPAMP_CSR_ANAWSEL1_Pos                (24U)                            

+#define OPAMP_CSR_ANAWSEL1_Msk                (0x1UL << OPAMP_CSR_ANAWSEL1_Pos) /*!< 0x01000000 */

+#define OPAMP_CSR_ANAWSEL1                    OPAMP_CSR_ANAWSEL1_Msk           /*!< Switch ANA Enable for OPAMP1 */ 

+#define OPAMP_CSR_ANAWSEL2_Pos                (25U)                            

+#define OPAMP_CSR_ANAWSEL2_Msk                (0x1UL << OPAMP_CSR_ANAWSEL2_Pos) /*!< 0x02000000 */

+#define OPAMP_CSR_ANAWSEL2                    OPAMP_CSR_ANAWSEL2_Msk           /*!< Switch ANA Enable for OPAMP2 */

+#define OPAMP_CSR_S7SEL2_Pos                  (27U)                            

+#define OPAMP_CSR_S7SEL2_Msk                  (0x1UL << OPAMP_CSR_S7SEL2_Pos)   /*!< 0x08000000 */

+#define OPAMP_CSR_S7SEL2                      OPAMP_CSR_S7SEL2_Msk             /*!< Switch 7 for OPAMP2 Enable */

+#define OPAMP_CSR_AOP_RANGE_Pos               (28U)                            

+#define OPAMP_CSR_AOP_RANGE_Msk               (0x1UL << OPAMP_CSR_AOP_RANGE_Pos) /*!< 0x10000000 */

+#define OPAMP_CSR_AOP_RANGE                   OPAMP_CSR_AOP_RANGE_Msk          /*!< Common to several OPAMP instances: Operational amplifier voltage supply range. Bit intended to be used with OPAMP common instance (OPAMP_Common_TypeDef) */

+#define OPAMP_CSR_OPA1CALOUT_Pos              (29U)                            

+#define OPAMP_CSR_OPA1CALOUT_Msk              (0x1UL << OPAMP_CSR_OPA1CALOUT_Pos) /*!< 0x20000000 */

+#define OPAMP_CSR_OPA1CALOUT                  OPAMP_CSR_OPA1CALOUT_Msk         /*!< OPAMP1 calibration output */

+#define OPAMP_CSR_OPA2CALOUT_Pos              (30U)                            

+#define OPAMP_CSR_OPA2CALOUT_Msk              (0x1UL << OPAMP_CSR_OPA2CALOUT_Pos) /*!< 0x40000000 */

+#define OPAMP_CSR_OPA2CALOUT                  OPAMP_CSR_OPA2CALOUT_Msk         /*!< OPAMP2 calibration output */

+

+/*******************  Bit definition for OPAMP_OTR register  ******************/

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LOW_Pos (0U)                             

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LOW_Msk (0x1FUL << OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LOW_Pos) /*!< 0x0000001F */

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LOW     OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LOW_Msk /*!< Offset trim for transistors differential pair PMOS of OPAMP1 */

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_HIGH_Pos (5U)                            

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_HIGH_Msk (0x1FUL << OPAMP_OTR_AO1_OPT_OFFSET_TRIM_HIGH_Pos) /*!< 0x000003E0 */

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_HIGH    OPAMP_OTR_AO1_OPT_OFFSET_TRIM_HIGH_Msk /*!< Offset trim for transistors differential pair NMOS of OPAMP1 */

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LOW_Pos (10U)                            

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LOW_Msk (0x1FUL << OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LOW_Pos) /*!< 0x00007C00 */

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LOW     OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LOW_Msk /*!< Offset trim for transistors differential pair PMOS of OPAMP2 */

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_HIGH_Pos (15U)                           

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_HIGH_Msk (0x1FUL << OPAMP_OTR_AO2_OPT_OFFSET_TRIM_HIGH_Pos) /*!< 0x000F8000 */

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_HIGH    OPAMP_OTR_AO2_OPT_OFFSET_TRIM_HIGH_Msk /*!< Offset trim for transistors differential pair NMOS of OPAMP2 */

+#define OPAMP_OTR_OT_USER_Pos                 (31U)                            

+#define OPAMP_OTR_OT_USER_Msk                 (0x1UL << OPAMP_OTR_OT_USER_Pos)  /*!< 0x80000000 */

+#define OPAMP_OTR_OT_USER                     OPAMP_OTR_OT_USER_Msk            /*!< Switch to OPAMP offset user trimmed values */

+

+/*******************  Bit definition for OPAMP_LPOTR register  ****************/

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LP_LOW_Pos (0U)                          

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LP_LOW_Msk (0x1FUL << OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LP_LOW_Pos) /*!< 0x0000001F */

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LP_LOW  OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LP_LOW_Msk /*!< Offset trim for transistors differential pair PMOS of OPAMP1 */

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LP_HIGH_Pos (5U)                         

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LP_HIGH_Msk (0x1FUL << OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LP_HIGH_Pos) /*!< 0x000003E0 */

+#define OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LP_HIGH OPAMP_OTR_AO1_OPT_OFFSET_TRIM_LP_HIGH_Msk /*!< Offset trim for transistors differential pair NMOS of OPAMP1 */

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LP_LOW_Pos (10U)                         

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LP_LOW_Msk (0x1FUL << OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LP_LOW_Pos) /*!< 0x00007C00 */

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LP_LOW  OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LP_LOW_Msk /*!< Offset trim for transistors differential pair PMOS of OPAMP2 */

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LP_HIGH_Pos (15U)                        

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LP_HIGH_Msk (0x1FUL << OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LP_HIGH_Pos) /*!< 0x000F8000 */

+#define OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LP_HIGH OPAMP_OTR_AO2_OPT_OFFSET_TRIM_LP_HIGH_Msk /*!< Offset trim for transistors differential pair NMOS of OPAMP2 */

+

+/******************************************************************************/

+/*                                                                            */

+/*                       CRC calculation unit (CRC)                           */

+/*                                                                            */

+/******************************************************************************/

+

+/*******************  Bit definition for CRC_DR register  *********************/

+#define CRC_DR_DR_Pos                       (0U)                               

+#define CRC_DR_DR_Msk                       (0xFFFFFFFFUL << CRC_DR_DR_Pos)     /*!< 0xFFFFFFFF */

+#define CRC_DR_DR                           CRC_DR_DR_Msk                      /*!< Data register bits */

+

+/*******************  Bit definition for CRC_IDR register  ********************/

+#define CRC_IDR_IDR_Pos                     (0U)                               

+#define CRC_IDR_IDR_Msk                     (0xFFUL << CRC_IDR_IDR_Pos)         /*!< 0x000000FF */

+#define CRC_IDR_IDR                         CRC_IDR_IDR_Msk                    /*!< General-purpose 8-bit data register bits */

+

+/********************  Bit definition for CRC_CR register  ********************/

+#define CRC_CR_RESET_Pos                    (0U)                               

+#define CRC_CR_RESET_Msk                    (0x1UL << CRC_CR_RESET_Pos)         /*!< 0x00000001 */

+#define CRC_CR_RESET                        CRC_CR_RESET_Msk                   /*!< RESET bit */

+

+/******************************************************************************/

+/*                                                                            */

+/*                    Digital to Analog Converter (DAC)                       */

+/*                                                                            */

+/******************************************************************************/

+

+/********************  Bit definition for DAC_CR register  ********************/

+#define DAC_CR_EN1_Pos                      (0U)                               

+#define DAC_CR_EN1_Msk                      (0x1UL << DAC_CR_EN1_Pos)           /*!< 0x00000001 */

+#define DAC_CR_EN1                          DAC_CR_EN1_Msk                     /*!<DAC channel1 enable */

+#define DAC_CR_BOFF1_Pos                    (1U)                               

+#define DAC_CR_BOFF1_Msk                    (0x1UL << DAC_CR_BOFF1_Pos)         /*!< 0x00000002 */

+#define DAC_CR_BOFF1                        DAC_CR_BOFF1_Msk                   /*!<DAC channel1 output buffer disable */

+#define DAC_CR_TEN1_Pos                     (2U)                               

+#define DAC_CR_TEN1_Msk                     (0x1UL << DAC_CR_TEN1_Pos)          /*!< 0x00000004 */

+#define DAC_CR_TEN1                         DAC_CR_TEN1_Msk                    /*!<DAC channel1 Trigger enable */

+

+#define DAC_CR_TSEL1_Pos                    (3U)                               

+#define DAC_CR_TSEL1_Msk                    (0x7UL << DAC_CR_TSEL1_Pos)         /*!< 0x00000038 */

+#define DAC_CR_TSEL1                        DAC_CR_TSEL1_Msk                   /*!<TSEL1[2:0] (DAC channel1 Trigger selection) */

+#define DAC_CR_TSEL1_0                      (0x1UL << DAC_CR_TSEL1_Pos)         /*!< 0x00000008 */

+#define DAC_CR_TSEL1_1                      (0x2UL << DAC_CR_TSEL1_Pos)         /*!< 0x00000010 */

+#define DAC_CR_TSEL1_2                      (0x4UL << DAC_CR_TSEL1_Pos)         /*!< 0x00000020 */

+

+#define DAC_CR_WAVE1_Pos                    (6U)                               

+#define DAC_CR_WAVE1_Msk                    (0x3UL << DAC_CR_WAVE1_Pos)         /*!< 0x000000C0 */

+#define DAC_CR_WAVE1                        DAC_CR_WAVE1_Msk                   /*!<WAVE1[1:0] (DAC channel1 noise/triangle wave generation enable) */

+#define DAC_CR_WAVE1_0                      (0x1UL << DAC_CR_WAVE1_Pos)         /*!< 0x00000040 */

+#define DAC_CR_WAVE1_1                      (0x2UL << DAC_CR_WAVE1_Pos)         /*!< 0x00000080 */

+

+#define DAC_CR_MAMP1_Pos                    (8U)                               

+#define DAC_CR_MAMP1_Msk                    (0xFUL << DAC_CR_MAMP1_Pos)         /*!< 0x00000F00 */

+#define DAC_CR_MAMP1                        DAC_CR_MAMP1_Msk                   /*!<MAMP1[3:0] (DAC channel1 Mask/Amplitude selector) */

+#define DAC_CR_MAMP1_0                      (0x1UL << DAC_CR_MAMP1_Pos)         /*!< 0x00000100 */

+#define DAC_CR_MAMP1_1                      (0x2UL << DAC_CR_MAMP1_Pos)         /*!< 0x00000200 */

+#define DAC_CR_MAMP1_2                      (0x4UL << DAC_CR_MAMP1_Pos)         /*!< 0x00000400 */

+#define DAC_CR_MAMP1_3                      (0x8UL << DAC_CR_MAMP1_Pos)         /*!< 0x00000800 */

+

+#define DAC_CR_DMAEN1_Pos                   (12U)                              

+#define DAC_CR_DMAEN1_Msk                   (0x1UL << DAC_CR_DMAEN1_Pos)        /*!< 0x00001000 */

+#define DAC_CR_DMAEN1                       DAC_CR_DMAEN1_Msk                  /*!<DAC channel1 DMA enable */

+#define DAC_CR_DMAUDRIE1_Pos                (13U)                              

+#define DAC_CR_DMAUDRIE1_Msk                (0x1UL << DAC_CR_DMAUDRIE1_Pos)     /*!< 0x00002000 */

+#define DAC_CR_DMAUDRIE1                    DAC_CR_DMAUDRIE1_Msk               /*!<DAC channel1 DMA Interrupt enable */

+#define DAC_CR_EN2_Pos                      (16U)                              

+#define DAC_CR_EN2_Msk                      (0x1UL << DAC_CR_EN2_Pos)           /*!< 0x00010000 */

+#define DAC_CR_EN2                          DAC_CR_EN2_Msk                     /*!<DAC channel2 enable */

+#define DAC_CR_BOFF2_Pos                    (17U)                              

+#define DAC_CR_BOFF2_Msk                    (0x1UL << DAC_CR_BOFF2_Pos)         /*!< 0x00020000 */

+#define DAC_CR_BOFF2                        DAC_CR_BOFF2_Msk                   /*!<DAC channel2 output buffer disable */

+#define DAC_CR_TEN2_Pos                     (18U)                              

+#define DAC_CR_TEN2_Msk                     (0x1UL << DAC_CR_TEN2_Pos)          /*!< 0x00040000 */

+#define DAC_CR_TEN2                         DAC_CR_TEN2_Msk                    /*!<DAC channel2 Trigger enable */

+

+#define DAC_CR_TSEL2_Pos                    (19U)                              

+#define DAC_CR_TSEL2_Msk                    (0x7UL << DAC_CR_TSEL2_Pos)         /*!< 0x00380000 */

+#define DAC_CR_TSEL2                        DAC_CR_TSEL2_Msk                   /*!<TSEL2[2:0] (DAC channel2 Trigger selection) */

+#define DAC_CR_TSEL2_0                      (0x1UL << DAC_CR_TSEL2_Pos)         /*!< 0x00080000 */

+#define DAC_CR_TSEL2_1                      (0x2UL << DAC_CR_TSEL2_Pos)         /*!< 0x00100000 */

+#define DAC_CR_TSEL2_2                      (0x4UL << DAC_CR_TSEL2_Pos)         /*!< 0x00200000 */

+

+#define DAC_CR_WAVE2_Pos                    (22U)                              

+#define DAC_CR_WAVE2_Msk                    (0x3UL << DAC_CR_WAVE2_Pos)         /*!< 0x00C00000 */

+#define DAC_CR_WAVE2                        DAC_CR_WAVE2_Msk                   /*!<WAVE2[1:0] (DAC channel2 noise/triangle wave generation enable) */

+#define DAC_CR_WAVE2_0                      (0x1UL << DAC_CR_WAVE2_Pos)         /*!< 0x00400000 */

+#define DAC_CR_WAVE2_1                      (0x2UL << DAC_CR_WAVE2_Pos)         /*!< 0x00800000 */

+

+#define DAC_CR_MAMP2_Pos                    (24U)                              

+#define DAC_CR_MAMP2_Msk                    (0xFUL << DAC_CR_MAMP2_Pos)         /*!< 0x0F000000 */

+#define DAC_CR_MAMP2                        DAC_CR_MAMP2_Msk                   /*!<MAMP2[3:0] (DAC channel2 Mask/Amplitude selector) */

+#define DAC_CR_MAMP2_0                      (0x1UL << DAC_CR_MAMP2_Pos)         /*!< 0x01000000 */

+#define DAC_CR_MAMP2_1                      (0x2UL << DAC_CR_MAMP2_Pos)         /*!< 0x02000000 */

+#define DAC_CR_MAMP2_2                      (0x4UL << DAC_CR_MAMP2_Pos)         /*!< 0x04000000 */

+#define DAC_CR_MAMP2_3                      (0x8UL << DAC_CR_MAMP2_Pos)         /*!< 0x08000000 */

+

+#define DAC_CR_DMAEN2_Pos                   (28U)                              

+#define DAC_CR_DMAEN2_Msk                   (0x1UL << DAC_CR_DMAEN2_Pos)        /*!< 0x10000000 */

+#define DAC_CR_DMAEN2                       DAC_CR_DMAEN2_Msk                  /*!<DAC channel2 DMA enabled */

+#define DAC_CR_DMAUDRIE2_Pos                (29U)                              

+#define DAC_CR_DMAUDRIE2_Msk                (0x1UL << DAC_CR_DMAUDRIE2_Pos)     /*!< 0x20000000 */

+#define DAC_CR_DMAUDRIE2                    DAC_CR_DMAUDRIE2_Msk               /*!<DAC channel2 DMA underrun interrupt enable */

+/*****************  Bit definition for DAC_SWTRIGR register  ******************/

+#define DAC_SWTRIGR_SWTRIG1_Pos             (0U)                               

+#define DAC_SWTRIGR_SWTRIG1_Msk             (0x1UL << DAC_SWTRIGR_SWTRIG1_Pos)  /*!< 0x00000001 */

+#define DAC_SWTRIGR_SWTRIG1                 DAC_SWTRIGR_SWTRIG1_Msk            /*!<DAC channel1 software trigger */

+#define DAC_SWTRIGR_SWTRIG2_Pos             (1U)                               

+#define DAC_SWTRIGR_SWTRIG2_Msk             (0x1UL << DAC_SWTRIGR_SWTRIG2_Pos)  /*!< 0x00000002 */

+#define DAC_SWTRIGR_SWTRIG2                 DAC_SWTRIGR_SWTRIG2_Msk            /*!<DAC channel2 software trigger */

+

+/*****************  Bit definition for DAC_DHR12R1 register  ******************/

+#define DAC_DHR12R1_DACC1DHR_Pos            (0U)                               

+#define DAC_DHR12R1_DACC1DHR_Msk            (0xFFFUL << DAC_DHR12R1_DACC1DHR_Pos) /*!< 0x00000FFF */

+#define DAC_DHR12R1_DACC1DHR                DAC_DHR12R1_DACC1DHR_Msk           /*!<DAC channel1 12-bit Right aligned data */

+

+/*****************  Bit definition for DAC_DHR12L1 register  ******************/

+#define DAC_DHR12L1_DACC1DHR_Pos            (4U)                               

+#define DAC_DHR12L1_DACC1DHR_Msk            (0xFFFUL << DAC_DHR12L1_DACC1DHR_Pos) /*!< 0x0000FFF0 */

+#define DAC_DHR12L1_DACC1DHR                DAC_DHR12L1_DACC1DHR_Msk           /*!<DAC channel1 12-bit Left aligned data */

+

+/******************  Bit definition for DAC_DHR8R1 register  ******************/

+#define DAC_DHR8R1_DACC1DHR_Pos             (0U)                               

+#define DAC_DHR8R1_DACC1DHR_Msk             (0xFFUL << DAC_DHR8R1_DACC1DHR_Pos) /*!< 0x000000FF */

+#define DAC_DHR8R1_DACC1DHR                 DAC_DHR8R1_DACC1DHR_Msk            /*!<DAC channel1 8-bit Right aligned data */

+

+/*****************  Bit definition for DAC_DHR12R2 register  ******************/

+#define DAC_DHR12R2_DACC2DHR_Pos            (0U)                               

+#define DAC_DHR12R2_DACC2DHR_Msk            (0xFFFUL << DAC_DHR12R2_DACC2DHR_Pos) /*!< 0x00000FFF */

+#define DAC_DHR12R2_DACC2DHR                DAC_DHR12R2_DACC2DHR_Msk           /*!<DAC channel2 12-bit Right aligned data */

+

+/*****************  Bit definition for DAC_DHR12L2 register  ******************/

+#define DAC_DHR12L2_DACC2DHR_Pos            (4U)                               

+#define DAC_DHR12L2_DACC2DHR_Msk            (0xFFFUL << DAC_DHR12L2_DACC2DHR_Pos) /*!< 0x0000FFF0 */

+#define DAC_DHR12L2_DACC2DHR                DAC_DHR12L2_DACC2DHR_Msk           /*!<DAC channel2 12-bit Left aligned data */

+

+/******************  Bit definition for DAC_DHR8R2 register  ******************/

+#define DAC_DHR8R2_DACC2DHR_Pos             (0U)                               

+#define DAC_DHR8R2_DACC2DHR_Msk             (0xFFUL << DAC_DHR8R2_DACC2DHR_Pos) /*!< 0x000000FF */

+#define DAC_DHR8R2_DACC2DHR                 DAC_DHR8R2_DACC2DHR_Msk            /*!<DAC channel2 8-bit Right aligned data */

+

+/*****************  Bit definition for DAC_DHR12RD register  ******************/

+#define DAC_DHR12RD_DACC1DHR_Pos            (0U)                               

+#define DAC_DHR12RD_DACC1DHR_Msk            (0xFFFUL << DAC_DHR12RD_DACC1DHR_Pos) /*!< 0x00000FFF */

+#define DAC_DHR12RD_DACC1DHR                DAC_DHR12RD_DACC1DHR_Msk           /*!<DAC channel1 12-bit Right aligned data */

+#define DAC_DHR12RD_DACC2DHR_Pos            (16U)                              

+#define DAC_DHR12RD_DACC2DHR_Msk            (0xFFFUL << DAC_DHR12RD_DACC2DHR_Pos) /*!< 0x0FFF0000 */

+#define DAC_DHR12RD_DACC2DHR                DAC_DHR12RD_DACC2DHR_Msk           /*!<DAC channel2 12-bit Right aligned data */

+

+/*****************  Bit definition for DAC_DHR12LD register  ******************/

+#define DAC_DHR12LD_DACC1DHR_Pos            (4U)                               

+#define DAC_DHR12LD_DACC1DHR_Msk            (0xFFFUL << DAC_DHR12LD_DACC1DHR_Pos) /*!< 0x0000FFF0 */

+#define DAC_DHR12LD_DACC1DHR                DAC_DHR12LD_DACC1DHR_Msk           /*!<DAC channel1 12-bit Left aligned data */

+#define DAC_DHR12LD_DACC2DHR_Pos            (20U)                              

+#define DAC_DHR12LD_DACC2DHR_Msk            (0xFFFUL << DAC_DHR12LD_DACC2DHR_Pos) /*!< 0xFFF00000 */

+#define DAC_DHR12LD_DACC2DHR                DAC_DHR12LD_DACC2DHR_Msk           /*!<DAC channel2 12-bit Left aligned data */

+

+/******************  Bit definition for DAC_DHR8RD register  ******************/

+#define DAC_DHR8RD_DACC1DHR_Pos             (0U)                               

+#define DAC_DHR8RD_DACC1DHR_Msk             (0xFFUL << DAC_DHR8RD_DACC1DHR_Pos) /*!< 0x000000FF */

+#define DAC_DHR8RD_DACC1DHR                 DAC_DHR8RD_DACC1DHR_Msk            /*!<DAC channel1 8-bit Right aligned data */

+#define DAC_DHR8RD_DACC2DHR_Pos             (8U)                               

+#define DAC_DHR8RD_DACC2DHR_Msk             (0xFFUL << DAC_DHR8RD_DACC2DHR_Pos) /*!< 0x0000FF00 */

+#define DAC_DHR8RD_DACC2DHR                 DAC_DHR8RD_DACC2DHR_Msk            /*!<DAC channel2 8-bit Right aligned data */

+

+/*******************  Bit definition for DAC_DOR1 register  *******************/

+#define DAC_DOR1_DACC1DOR_Pos               (0U)                               

+#define DAC_DOR1_DACC1DOR_Msk               (0xFFFUL << DAC_DOR1_DACC1DOR_Pos)  /*!< 0x00000FFF */

+#define DAC_DOR1_DACC1DOR                   DAC_DOR1_DACC1DOR_Msk              /*!<DAC channel1 data output */

+

+/*******************  Bit definition for DAC_DOR2 register  *******************/

+#define DAC_DOR2_DACC2DOR_Pos               (0U)                               

+#define DAC_DOR2_DACC2DOR_Msk               (0xFFFUL << DAC_DOR2_DACC2DOR_Pos)  /*!< 0x00000FFF */

+#define DAC_DOR2_DACC2DOR                   DAC_DOR2_DACC2DOR_Msk              /*!<DAC channel2 data output */

+

+/********************  Bit definition for DAC_SR register  ********************/

+#define DAC_SR_DMAUDR1_Pos                  (13U)                              

+#define DAC_SR_DMAUDR1_Msk                  (0x1UL << DAC_SR_DMAUDR1_Pos)       /*!< 0x00002000 */

+#define DAC_SR_DMAUDR1                      DAC_SR_DMAUDR1_Msk                 /*!<DAC channel1 DMA underrun flag */

+#define DAC_SR_DMAUDR2_Pos                  (29U)                              

+#define DAC_SR_DMAUDR2_Msk                  (0x1UL << DAC_SR_DMAUDR2_Pos)       /*!< 0x20000000 */

+#define DAC_SR_DMAUDR2                      DAC_SR_DMAUDR2_Msk                 /*!<DAC channel2 DMA underrun flag */

+

+/******************************************************************************/

+/*                                                                            */

+/*                           Debug MCU (DBGMCU)                               */

+/*                                                                            */

+/******************************************************************************/

+

+/****************  Bit definition for DBGMCU_IDCODE register  *****************/

+#define DBGMCU_IDCODE_DEV_ID_Pos                 (0U)                          

+#define DBGMCU_IDCODE_DEV_ID_Msk                 (0xFFFUL << DBGMCU_IDCODE_DEV_ID_Pos) /*!< 0x00000FFF */

+#define DBGMCU_IDCODE_DEV_ID                     DBGMCU_IDCODE_DEV_ID_Msk      /*!< Device Identifier */

+

+#define DBGMCU_IDCODE_REV_ID_Pos                 (16U)                         

+#define DBGMCU_IDCODE_REV_ID_Msk                 (0xFFFFUL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0xFFFF0000 */

+#define DBGMCU_IDCODE_REV_ID                     DBGMCU_IDCODE_REV_ID_Msk      /*!< REV_ID[15:0] bits (Revision Identifier) */

+#define DBGMCU_IDCODE_REV_ID_0                   (0x0001UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00010000 */

+#define DBGMCU_IDCODE_REV_ID_1                   (0x0002UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00020000 */

+#define DBGMCU_IDCODE_REV_ID_2                   (0x0004UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00040000 */

+#define DBGMCU_IDCODE_REV_ID_3                   (0x0008UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00080000 */

+#define DBGMCU_IDCODE_REV_ID_4                   (0x0010UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00100000 */

+#define DBGMCU_IDCODE_REV_ID_5                   (0x0020UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00200000 */

+#define DBGMCU_IDCODE_REV_ID_6                   (0x0040UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00400000 */

+#define DBGMCU_IDCODE_REV_ID_7                   (0x0080UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00800000 */

+#define DBGMCU_IDCODE_REV_ID_8                   (0x0100UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x01000000 */

+#define DBGMCU_IDCODE_REV_ID_9                   (0x0200UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x02000000 */

+#define DBGMCU_IDCODE_REV_ID_10                  (0x0400UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x04000000 */

+#define DBGMCU_IDCODE_REV_ID_11                  (0x0800UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x08000000 */

+#define DBGMCU_IDCODE_REV_ID_12                  (0x1000UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x10000000 */

+#define DBGMCU_IDCODE_REV_ID_13                  (0x2000UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x20000000 */

+#define DBGMCU_IDCODE_REV_ID_14                  (0x4000UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x40000000 */

+#define DBGMCU_IDCODE_REV_ID_15                  (0x8000UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x80000000 */

+

+/******************  Bit definition for DBGMCU_CR register  *******************/

+#define DBGMCU_CR_DBG_SLEEP_Pos                  (0U)                          

+#define DBGMCU_CR_DBG_SLEEP_Msk                  (0x1UL << DBGMCU_CR_DBG_SLEEP_Pos) /*!< 0x00000001 */

+#define DBGMCU_CR_DBG_SLEEP                      DBGMCU_CR_DBG_SLEEP_Msk       /*!< Debug Sleep Mode */

+#define DBGMCU_CR_DBG_STOP_Pos                   (1U)                          

+#define DBGMCU_CR_DBG_STOP_Msk                   (0x1UL << DBGMCU_CR_DBG_STOP_Pos) /*!< 0x00000002 */

+#define DBGMCU_CR_DBG_STOP                       DBGMCU_CR_DBG_STOP_Msk        /*!< Debug Stop Mode */

+#define DBGMCU_CR_DBG_STANDBY_Pos                (2U)                          

+#define DBGMCU_CR_DBG_STANDBY_Msk                (0x1UL << DBGMCU_CR_DBG_STANDBY_Pos) /*!< 0x00000004 */

+#define DBGMCU_CR_DBG_STANDBY                    DBGMCU_CR_DBG_STANDBY_Msk     /*!< Debug Standby mode */

+#define DBGMCU_CR_TRACE_IOEN_Pos                 (5U)                          

+#define DBGMCU_CR_TRACE_IOEN_Msk                 (0x1UL << DBGMCU_CR_TRACE_IOEN_Pos) /*!< 0x00000020 */

+#define DBGMCU_CR_TRACE_IOEN                     DBGMCU_CR_TRACE_IOEN_Msk      /*!< Trace Pin Assignment Control */

+

+#define DBGMCU_CR_TRACE_MODE_Pos                 (6U)                          

+#define DBGMCU_CR_TRACE_MODE_Msk                 (0x3UL << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x000000C0 */

+#define DBGMCU_CR_TRACE_MODE                     DBGMCU_CR_TRACE_MODE_Msk      /*!< TRACE_MODE[1:0] bits (Trace Pin Assignment Control) */

+#define DBGMCU_CR_TRACE_MODE_0                   (0x1UL << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x00000040 */

+#define DBGMCU_CR_TRACE_MODE_1                   (0x2UL << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x00000080 */

+

+/******************  Bit definition for DBGMCU_APB1_FZ register  **************/

+

+#define DBGMCU_APB1_FZ_DBG_TIM2_STOP_Pos         (0U)                          

+#define DBGMCU_APB1_FZ_DBG_TIM2_STOP_Msk         (0x1UL << DBGMCU_APB1_FZ_DBG_TIM2_STOP_Pos) /*!< 0x00000001 */

+#define DBGMCU_APB1_FZ_DBG_TIM2_STOP             DBGMCU_APB1_FZ_DBG_TIM2_STOP_Msk /*!< TIM2 counter stopped when core is halted */

+#define DBGMCU_APB1_FZ_DBG_TIM3_STOP_Pos         (1U)                          

+#define DBGMCU_APB1_FZ_DBG_TIM3_STOP_Msk         (0x1UL << DBGMCU_APB1_FZ_DBG_TIM3_STOP_Pos) /*!< 0x00000002 */

+#define DBGMCU_APB1_FZ_DBG_TIM3_STOP             DBGMCU_APB1_FZ_DBG_TIM3_STOP_Msk /*!< TIM3 counter stopped when core is halted */

+#define DBGMCU_APB1_FZ_DBG_TIM4_STOP_Pos         (2U)                          

+#define DBGMCU_APB1_FZ_DBG_TIM4_STOP_Msk         (0x1UL << DBGMCU_APB1_FZ_DBG_TIM4_STOP_Pos) /*!< 0x00000004 */

+#define DBGMCU_APB1_FZ_DBG_TIM4_STOP             DBGMCU_APB1_FZ_DBG_TIM4_STOP_Msk /*!< TIM4 counter stopped when core is halted */

+#define DBGMCU_APB1_FZ_DBG_TIM5_STOP_Pos         (3U)                          

+#define DBGMCU_APB1_FZ_DBG_TIM5_STOP_Msk         (0x1UL << DBGMCU_APB1_FZ_DBG_TIM5_STOP_Pos) /*!< 0x00000008 */

+#define DBGMCU_APB1_FZ_DBG_TIM5_STOP             DBGMCU_APB1_FZ_DBG_TIM5_STOP_Msk /*!< TIM5 counter stopped when core is halted */

+#define DBGMCU_APB1_FZ_DBG_TIM6_STOP_Pos         (4U)                          

+#define DBGMCU_APB1_FZ_DBG_TIM6_STOP_Msk         (0x1UL << DBGMCU_APB1_FZ_DBG_TIM6_STOP_Pos) /*!< 0x00000010 */

+#define DBGMCU_APB1_FZ_DBG_TIM6_STOP             DBGMCU_APB1_FZ_DBG_TIM6_STOP_Msk /*!< TIM6 counter stopped when core is halted */

+#define DBGMCU_APB1_FZ_DBG_TIM7_STOP_Pos         (5U)                          

+#define DBGMCU_APB1_FZ_DBG_TIM7_STOP_Msk         (0x1UL << DBGMCU_APB1_FZ_DBG_TIM7_STOP_Pos) /*!< 0x00000020 */

+#define DBGMCU_APB1_FZ_DBG_TIM7_STOP             DBGMCU_APB1_FZ_DBG_TIM7_STOP_Msk /*!< TIM7 counter stopped when core is halted */

+#define DBGMCU_APB1_FZ_DBG_RTC_STOP_Pos          (10U)                         

+#define DBGMCU_APB1_FZ_DBG_RTC_STOP_Msk          (0x1UL << DBGMCU_APB1_FZ_DBG_RTC_STOP_Pos) /*!< 0x00000400 */

+#define DBGMCU_APB1_FZ_DBG_RTC_STOP              DBGMCU_APB1_FZ_DBG_RTC_STOP_Msk /*!< RTC Counter stopped when Core is halted */

+#define DBGMCU_APB1_FZ_DBG_WWDG_STOP_Pos         (11U)                         

+#define DBGMCU_APB1_FZ_DBG_WWDG_STOP_Msk         (0x1UL << DBGMCU_APB1_FZ_DBG_WWDG_STOP_Pos) /*!< 0x00000800 */

+#define DBGMCU_APB1_FZ_DBG_WWDG_STOP             DBGMCU_APB1_FZ_DBG_WWDG_STOP_Msk /*!< Debug Window Watchdog stopped when Core is halted */

+#define DBGMCU_APB1_FZ_DBG_IWDG_STOP_Pos         (12U)                         

+#define DBGMCU_APB1_FZ_DBG_IWDG_STOP_Msk         (0x1UL << DBGMCU_APB1_FZ_DBG_IWDG_STOP_Pos) /*!< 0x00001000 */

+#define DBGMCU_APB1_FZ_DBG_IWDG_STOP             DBGMCU_APB1_FZ_DBG_IWDG_STOP_Msk /*!< Debug Independent Watchdog stopped when Core is halted */

+#define DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT_Pos (21U)                        

+#define DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT_Msk (0x1UL << DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT_Pos) /*!< 0x00200000 */

+#define DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT    DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT_Msk /*!< SMBUS timeout mode stopped when Core is halted */

+#define DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT_Pos (22U)                        

+#define DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT_Msk (0x1UL << DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT_Pos) /*!< 0x00400000 */

+#define DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT    DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT_Msk /*!< SMBUS timeout mode stopped when Core is halted */

+

+/******************  Bit definition for DBGMCU_APB2_FZ register  **************/

+

+#define DBGMCU_APB2_FZ_DBG_TIM9_STOP_Pos         (2U)                          

+#define DBGMCU_APB2_FZ_DBG_TIM9_STOP_Msk         (0x1UL << DBGMCU_APB2_FZ_DBG_TIM9_STOP_Pos) /*!< 0x00000004 */

+#define DBGMCU_APB2_FZ_DBG_TIM9_STOP             DBGMCU_APB2_FZ_DBG_TIM9_STOP_Msk /*!< TIM9 counter stopped when core is halted */

+#define DBGMCU_APB2_FZ_DBG_TIM10_STOP_Pos        (3U)                          

+#define DBGMCU_APB2_FZ_DBG_TIM10_STOP_Msk        (0x1UL << DBGMCU_APB2_FZ_DBG_TIM10_STOP_Pos) /*!< 0x00000008 */

+#define DBGMCU_APB2_FZ_DBG_TIM10_STOP            DBGMCU_APB2_FZ_DBG_TIM10_STOP_Msk /*!< TIM10 counter stopped when core is halted */

+#define DBGMCU_APB2_FZ_DBG_TIM11_STOP_Pos        (4U)                          

+#define DBGMCU_APB2_FZ_DBG_TIM11_STOP_Msk        (0x1UL << DBGMCU_APB2_FZ_DBG_TIM11_STOP_Pos) /*!< 0x00000010 */

+#define DBGMCU_APB2_FZ_DBG_TIM11_STOP            DBGMCU_APB2_FZ_DBG_TIM11_STOP_Msk /*!< TIM11 counter stopped when core is halted */

+

+/******************************************************************************/

+/*                                                                            */

+/*                           DMA Controller (DMA)                             */

+/*                                                                            */

+/******************************************************************************/

+

+/*******************  Bit definition for DMA_ISR register  ********************/

+#define DMA_ISR_GIF1_Pos                    (0U)                               

+#define DMA_ISR_GIF1_Msk                    (0x1UL << DMA_ISR_GIF1_Pos)         /*!< 0x00000001 */

+#define DMA_ISR_GIF1                        DMA_ISR_GIF1_Msk                   /*!< Channel 1 Global interrupt flag */

+#define DMA_ISR_TCIF1_Pos                   (1U)                               

+#define DMA_ISR_TCIF1_Msk                   (0x1UL << DMA_ISR_TCIF1_Pos)        /*!< 0x00000002 */

+#define DMA_ISR_TCIF1                       DMA_ISR_TCIF1_Msk                  /*!< Channel 1 Transfer Complete flag */

+#define DMA_ISR_HTIF1_Pos                   (2U)                               

+#define DMA_ISR_HTIF1_Msk                   (0x1UL << DMA_ISR_HTIF1_Pos)        /*!< 0x00000004 */

+#define DMA_ISR_HTIF1                       DMA_ISR_HTIF1_Msk                  /*!< Channel 1 Half Transfer flag */

+#define DMA_ISR_TEIF1_Pos                   (3U)                               

+#define DMA_ISR_TEIF1_Msk                   (0x1UL << DMA_ISR_TEIF1_Pos)        /*!< 0x00000008 */

+#define DMA_ISR_TEIF1                       DMA_ISR_TEIF1_Msk                  /*!< Channel 1 Transfer Error flag */

+#define DMA_ISR_GIF2_Pos                    (4U)                               

+#define DMA_ISR_GIF2_Msk                    (0x1UL << DMA_ISR_GIF2_Pos)         /*!< 0x00000010 */

+#define DMA_ISR_GIF2                        DMA_ISR_GIF2_Msk                   /*!< Channel 2 Global interrupt flag */

+#define DMA_ISR_TCIF2_Pos                   (5U)                               

+#define DMA_ISR_TCIF2_Msk                   (0x1UL << DMA_ISR_TCIF2_Pos)        /*!< 0x00000020 */

+#define DMA_ISR_TCIF2                       DMA_ISR_TCIF2_Msk                  /*!< Channel 2 Transfer Complete flag */

+#define DMA_ISR_HTIF2_Pos                   (6U)                               

+#define DMA_ISR_HTIF2_Msk                   (0x1UL << DMA_ISR_HTIF2_Pos)        /*!< 0x00000040 */

+#define DMA_ISR_HTIF2                       DMA_ISR_HTIF2_Msk                  /*!< Channel 2 Half Transfer flag */

+#define DMA_ISR_TEIF2_Pos                   (7U)                               

+#define DMA_ISR_TEIF2_Msk                   (0x1UL << DMA_ISR_TEIF2_Pos)        /*!< 0x00000080 */

+#define DMA_ISR_TEIF2                       DMA_ISR_TEIF2_Msk                  /*!< Channel 2 Transfer Error flag */

+#define DMA_ISR_GIF3_Pos                    (8U)                               

+#define DMA_ISR_GIF3_Msk                    (0x1UL << DMA_ISR_GIF3_Pos)         /*!< 0x00000100 */

+#define DMA_ISR_GIF3                        DMA_ISR_GIF3_Msk                   /*!< Channel 3 Global interrupt flag */

+#define DMA_ISR_TCIF3_Pos                   (9U)                               

+#define DMA_ISR_TCIF3_Msk                   (0x1UL << DMA_ISR_TCIF3_Pos)        /*!< 0x00000200 */

+#define DMA_ISR_TCIF3                       DMA_ISR_TCIF3_Msk                  /*!< Channel 3 Transfer Complete flag */

+#define DMA_ISR_HTIF3_Pos                   (10U)                              

+#define DMA_ISR_HTIF3_Msk                   (0x1UL << DMA_ISR_HTIF3_Pos)        /*!< 0x00000400 */

+#define DMA_ISR_HTIF3                       DMA_ISR_HTIF3_Msk                  /*!< Channel 3 Half Transfer flag */

+#define DMA_ISR_TEIF3_Pos                   (11U)                              

+#define DMA_ISR_TEIF3_Msk                   (0x1UL << DMA_ISR_TEIF3_Pos)        /*!< 0x00000800 */

+#define DMA_ISR_TEIF3                       DMA_ISR_TEIF3_Msk                  /*!< Channel 3 Transfer Error flag */

+#define DMA_ISR_GIF4_Pos                    (12U)                              

+#define DMA_ISR_GIF4_Msk                    (0x1UL << DMA_ISR_GIF4_Pos)         /*!< 0x00001000 */

+#define DMA_ISR_GIF4                        DMA_ISR_GIF4_Msk                   /*!< Channel 4 Global interrupt flag */

+#define DMA_ISR_TCIF4_Pos                   (13U)                              

+#define DMA_ISR_TCIF4_Msk                   (0x1UL << DMA_ISR_TCIF4_Pos)        /*!< 0x00002000 */

+#define DMA_ISR_TCIF4                       DMA_ISR_TCIF4_Msk                  /*!< Channel 4 Transfer Complete flag */

+#define DMA_ISR_HTIF4_Pos                   (14U)                              

+#define DMA_ISR_HTIF4_Msk                   (0x1UL << DMA_ISR_HTIF4_Pos)        /*!< 0x00004000 */

+#define DMA_ISR_HTIF4                       DMA_ISR_HTIF4_Msk                  /*!< Channel 4 Half Transfer flag */

+#define DMA_ISR_TEIF4_Pos                   (15U)                              

+#define DMA_ISR_TEIF4_Msk                   (0x1UL << DMA_ISR_TEIF4_Pos)        /*!< 0x00008000 */

+#define DMA_ISR_TEIF4                       DMA_ISR_TEIF4_Msk                  /*!< Channel 4 Transfer Error flag */

+#define DMA_ISR_GIF5_Pos                    (16U)                              

+#define DMA_ISR_GIF5_Msk                    (0x1UL << DMA_ISR_GIF5_Pos)         /*!< 0x00010000 */

+#define DMA_ISR_GIF5                        DMA_ISR_GIF5_Msk                   /*!< Channel 5 Global interrupt flag */

+#define DMA_ISR_TCIF5_Pos                   (17U)                              

+#define DMA_ISR_TCIF5_Msk                   (0x1UL << DMA_ISR_TCIF5_Pos)        /*!< 0x00020000 */

+#define DMA_ISR_TCIF5                       DMA_ISR_TCIF5_Msk                  /*!< Channel 5 Transfer Complete flag */

+#define DMA_ISR_HTIF5_Pos                   (18U)                              

+#define DMA_ISR_HTIF5_Msk                   (0x1UL << DMA_ISR_HTIF5_Pos)        /*!< 0x00040000 */

+#define DMA_ISR_HTIF5                       DMA_ISR_HTIF5_Msk                  /*!< Channel 5 Half Transfer flag */

+#define DMA_ISR_TEIF5_Pos                   (19U)                              

+#define DMA_ISR_TEIF5_Msk                   (0x1UL << DMA_ISR_TEIF5_Pos)        /*!< 0x00080000 */

+#define DMA_ISR_TEIF5                       DMA_ISR_TEIF5_Msk                  /*!< Channel 5 Transfer Error flag */

+#define DMA_ISR_GIF6_Pos                    (20U)                              

+#define DMA_ISR_GIF6_Msk                    (0x1UL << DMA_ISR_GIF6_Pos)         /*!< 0x00100000 */

+#define DMA_ISR_GIF6                        DMA_ISR_GIF6_Msk                   /*!< Channel 6 Global interrupt flag */

+#define DMA_ISR_TCIF6_Pos                   (21U)                              

+#define DMA_ISR_TCIF6_Msk                   (0x1UL << DMA_ISR_TCIF6_Pos)        /*!< 0x00200000 */

+#define DMA_ISR_TCIF6                       DMA_ISR_TCIF6_Msk                  /*!< Channel 6 Transfer Complete flag */

+#define DMA_ISR_HTIF6_Pos                   (22U)                              

+#define DMA_ISR_HTIF6_Msk                   (0x1UL << DMA_ISR_HTIF6_Pos)        /*!< 0x00400000 */

+#define DMA_ISR_HTIF6                       DMA_ISR_HTIF6_Msk                  /*!< Channel 6 Half Transfer flag */

+#define DMA_ISR_TEIF6_Pos                   (23U)                              

+#define DMA_ISR_TEIF6_Msk                   (0x1UL << DMA_ISR_TEIF6_Pos)        /*!< 0x00800000 */

+#define DMA_ISR_TEIF6                       DMA_ISR_TEIF6_Msk                  /*!< Channel 6 Transfer Error flag */

+#define DMA_ISR_GIF7_Pos                    (24U)                              

+#define DMA_ISR_GIF7_Msk                    (0x1UL << DMA_ISR_GIF7_Pos)         /*!< 0x01000000 */

+#define DMA_ISR_GIF7                        DMA_ISR_GIF7_Msk                   /*!< Channel 7 Global interrupt flag */

+#define DMA_ISR_TCIF7_Pos                   (25U)                              

+#define DMA_ISR_TCIF7_Msk                   (0x1UL << DMA_ISR_TCIF7_Pos)        /*!< 0x02000000 */

+#define DMA_ISR_TCIF7                       DMA_ISR_TCIF7_Msk                  /*!< Channel 7 Transfer Complete flag */

+#define DMA_ISR_HTIF7_Pos                   (26U)                              

+#define DMA_ISR_HTIF7_Msk                   (0x1UL << DMA_ISR_HTIF7_Pos)        /*!< 0x04000000 */

+#define DMA_ISR_HTIF7                       DMA_ISR_HTIF7_Msk                  /*!< Channel 7 Half Transfer flag */

+#define DMA_ISR_TEIF7_Pos                   (27U)                              

+#define DMA_ISR_TEIF7_Msk                   (0x1UL << DMA_ISR_TEIF7_Pos)        /*!< 0x08000000 */

+#define DMA_ISR_TEIF7                       DMA_ISR_TEIF7_Msk                  /*!< Channel 7 Transfer Error flag */

+

+/*******************  Bit definition for DMA_IFCR register  *******************/

+#define DMA_IFCR_CGIF1_Pos                  (0U)                               

+#define DMA_IFCR_CGIF1_Msk                  (0x1UL << DMA_IFCR_CGIF1_Pos)       /*!< 0x00000001 */

+#define DMA_IFCR_CGIF1                      DMA_IFCR_CGIF1_Msk                 /*!< Channel 1 Global interrupt clear */

+#define DMA_IFCR_CTCIF1_Pos                 (1U)                               

+#define DMA_IFCR_CTCIF1_Msk                 (0x1UL << DMA_IFCR_CTCIF1_Pos)      /*!< 0x00000002 */

+#define DMA_IFCR_CTCIF1                     DMA_IFCR_CTCIF1_Msk                /*!< Channel 1 Transfer Complete clear */

+#define DMA_IFCR_CHTIF1_Pos                 (2U)                               

+#define DMA_IFCR_CHTIF1_Msk                 (0x1UL << DMA_IFCR_CHTIF1_Pos)      /*!< 0x00000004 */

+#define DMA_IFCR_CHTIF1                     DMA_IFCR_CHTIF1_Msk                /*!< Channel 1 Half Transfer clear */

+#define DMA_IFCR_CTEIF1_Pos                 (3U)                               

+#define DMA_IFCR_CTEIF1_Msk                 (0x1UL << DMA_IFCR_CTEIF1_Pos)      /*!< 0x00000008 */

+#define DMA_IFCR_CTEIF1                     DMA_IFCR_CTEIF1_Msk                /*!< Channel 1 Transfer Error clear */

+#define DMA_IFCR_CGIF2_Pos                  (4U)                               

+#define DMA_IFCR_CGIF2_Msk                  (0x1UL << DMA_IFCR_CGIF2_Pos)       /*!< 0x00000010 */

+#define DMA_IFCR_CGIF2                      DMA_IFCR_CGIF2_Msk                 /*!< Channel 2 Global interrupt clear */

+#define DMA_IFCR_CTCIF2_Pos                 (5U)                               

+#define DMA_IFCR_CTCIF2_Msk                 (0x1UL << DMA_IFCR_CTCIF2_Pos)      /*!< 0x00000020 */

+#define DMA_IFCR_CTCIF2                     DMA_IFCR_CTCIF2_Msk                /*!< Channel 2 Transfer Complete clear */

+#define DMA_IFCR_CHTIF2_Pos                 (6U)                               

+#define DMA_IFCR_CHTIF2_Msk                 (0x1UL << DMA_IFCR_CHTIF2_Pos)      /*!< 0x00000040 */

+#define DMA_IFCR_CHTIF2                     DMA_IFCR_CHTIF2_Msk                /*!< Channel 2 Half Transfer clear */

+#define DMA_IFCR_CTEIF2_Pos                 (7U)                               

+#define DMA_IFCR_CTEIF2_Msk                 (0x1UL << DMA_IFCR_CTEIF2_Pos)      /*!< 0x00000080 */

+#define DMA_IFCR_CTEIF2                     DMA_IFCR_CTEIF2_Msk                /*!< Channel 2 Transfer Error clear */

+#define DMA_IFCR_CGIF3_Pos                  (8U)                               

+#define DMA_IFCR_CGIF3_Msk                  (0x1UL << DMA_IFCR_CGIF3_Pos)       /*!< 0x00000100 */

+#define DMA_IFCR_CGIF3                      DMA_IFCR_CGIF3_Msk                 /*!< Channel 3 Global interrupt clear */

+#define DMA_IFCR_CTCIF3_Pos                 (9U)                               

+#define DMA_IFCR_CTCIF3_Msk                 (0x1UL << DMA_IFCR_CTCIF3_Pos)      /*!< 0x00000200 */

+#define DMA_IFCR_CTCIF3                     DMA_IFCR_CTCIF3_Msk                /*!< Channel 3 Transfer Complete clear */

+#define DMA_IFCR_CHTIF3_Pos                 (10U)                              

+#define DMA_IFCR_CHTIF3_Msk                 (0x1UL << DMA_IFCR_CHTIF3_Pos)      /*!< 0x00000400 */

+#define DMA_IFCR_CHTIF3                     DMA_IFCR_CHTIF3_Msk                /*!< Channel 3 Half Transfer clear */

+#define DMA_IFCR_CTEIF3_Pos                 (11U)                              

+#define DMA_IFCR_CTEIF3_Msk                 (0x1UL << DMA_IFCR_CTEIF3_Pos)      /*!< 0x00000800 */

+#define DMA_IFCR_CTEIF3                     DMA_IFCR_CTEIF3_Msk                /*!< Channel 3 Transfer Error clear */

+#define DMA_IFCR_CGIF4_Pos                  (12U)                              

+#define DMA_IFCR_CGIF4_Msk                  (0x1UL << DMA_IFCR_CGIF4_Pos)       /*!< 0x00001000 */

+#define DMA_IFCR_CGIF4                      DMA_IFCR_CGIF4_Msk                 /*!< Channel 4 Global interrupt clear */

+#define DMA_IFCR_CTCIF4_Pos                 (13U)                              

+#define DMA_IFCR_CTCIF4_Msk                 (0x1UL << DMA_IFCR_CTCIF4_Pos)      /*!< 0x00002000 */

+#define DMA_IFCR_CTCIF4                     DMA_IFCR_CTCIF4_Msk                /*!< Channel 4 Transfer Complete clear */

+#define DMA_IFCR_CHTIF4_Pos                 (14U)                              

+#define DMA_IFCR_CHTIF4_Msk                 (0x1UL << DMA_IFCR_CHTIF4_Pos)      /*!< 0x00004000 */

+#define DMA_IFCR_CHTIF4                     DMA_IFCR_CHTIF4_Msk                /*!< Channel 4 Half Transfer clear */

+#define DMA_IFCR_CTEIF4_Pos                 (15U)                              

+#define DMA_IFCR_CTEIF4_Msk                 (0x1UL << DMA_IFCR_CTEIF4_Pos)      /*!< 0x00008000 */

+#define DMA_IFCR_CTEIF4                     DMA_IFCR_CTEIF4_Msk                /*!< Channel 4 Transfer Error clear */

+#define DMA_IFCR_CGIF5_Pos                  (16U)                              

+#define DMA_IFCR_CGIF5_Msk                  (0x1UL << DMA_IFCR_CGIF5_Pos)       /*!< 0x00010000 */

+#define DMA_IFCR_CGIF5                      DMA_IFCR_CGIF5_Msk                 /*!< Channel 5 Global interrupt clear */

+#define DMA_IFCR_CTCIF5_Pos                 (17U)                              

+#define DMA_IFCR_CTCIF5_Msk                 (0x1UL << DMA_IFCR_CTCIF5_Pos)      /*!< 0x00020000 */

+#define DMA_IFCR_CTCIF5                     DMA_IFCR_CTCIF5_Msk                /*!< Channel 5 Transfer Complete clear */

+#define DMA_IFCR_CHTIF5_Pos                 (18U)                              

+#define DMA_IFCR_CHTIF5_Msk                 (0x1UL << DMA_IFCR_CHTIF5_Pos)      /*!< 0x00040000 */

+#define DMA_IFCR_CHTIF5                     DMA_IFCR_CHTIF5_Msk                /*!< Channel 5 Half Transfer clear */

+#define DMA_IFCR_CTEIF5_Pos                 (19U)                              

+#define DMA_IFCR_CTEIF5_Msk                 (0x1UL << DMA_IFCR_CTEIF5_Pos)      /*!< 0x00080000 */

+#define DMA_IFCR_CTEIF5                     DMA_IFCR_CTEIF5_Msk                /*!< Channel 5 Transfer Error clear */

+#define DMA_IFCR_CGIF6_Pos                  (20U)                              

+#define DMA_IFCR_CGIF6_Msk                  (0x1UL << DMA_IFCR_CGIF6_Pos)       /*!< 0x00100000 */

+#define DMA_IFCR_CGIF6                      DMA_IFCR_CGIF6_Msk                 /*!< Channel 6 Global interrupt clear */

+#define DMA_IFCR_CTCIF6_Pos                 (21U)                              

+#define DMA_IFCR_CTCIF6_Msk                 (0x1UL << DMA_IFCR_CTCIF6_Pos)      /*!< 0x00200000 */

+#define DMA_IFCR_CTCIF6                     DMA_IFCR_CTCIF6_Msk                /*!< Channel 6 Transfer Complete clear */

+#define DMA_IFCR_CHTIF6_Pos                 (22U)                              

+#define DMA_IFCR_CHTIF6_Msk                 (0x1UL << DMA_IFCR_CHTIF6_Pos)      /*!< 0x00400000 */

+#define DMA_IFCR_CHTIF6                     DMA_IFCR_CHTIF6_Msk                /*!< Channel 6 Half Transfer clear */

+#define DMA_IFCR_CTEIF6_Pos                 (23U)                              

+#define DMA_IFCR_CTEIF6_Msk                 (0x1UL << DMA_IFCR_CTEIF6_Pos)      /*!< 0x00800000 */

+#define DMA_IFCR_CTEIF6                     DMA_IFCR_CTEIF6_Msk                /*!< Channel 6 Transfer Error clear */

+#define DMA_IFCR_CGIF7_Pos                  (24U)                              

+#define DMA_IFCR_CGIF7_Msk                  (0x1UL << DMA_IFCR_CGIF7_Pos)       /*!< 0x01000000 */

+#define DMA_IFCR_CGIF7                      DMA_IFCR_CGIF7_Msk                 /*!< Channel 7 Global interrupt clear */

+#define DMA_IFCR_CTCIF7_Pos                 (25U)                              

+#define DMA_IFCR_CTCIF7_Msk                 (0x1UL << DMA_IFCR_CTCIF7_Pos)      /*!< 0x02000000 */

+#define DMA_IFCR_CTCIF7                     DMA_IFCR_CTCIF7_Msk                /*!< Channel 7 Transfer Complete clear */

+#define DMA_IFCR_CHTIF7_Pos                 (26U)                              

+#define DMA_IFCR_CHTIF7_Msk                 (0x1UL << DMA_IFCR_CHTIF7_Pos)      /*!< 0x04000000 */

+#define DMA_IFCR_CHTIF7                     DMA_IFCR_CHTIF7_Msk                /*!< Channel 7 Half Transfer clear */

+#define DMA_IFCR_CTEIF7_Pos                 (27U)                              

+#define DMA_IFCR_CTEIF7_Msk                 (0x1UL << DMA_IFCR_CTEIF7_Pos)      /*!< 0x08000000 */

+#define DMA_IFCR_CTEIF7                     DMA_IFCR_CTEIF7_Msk                /*!< Channel 7 Transfer Error clear */

+

+/*******************  Bit definition for DMA_CCR register  *******************/

+#define DMA_CCR_EN_Pos                      (0U)                               

+#define DMA_CCR_EN_Msk                      (0x1UL << DMA_CCR_EN_Pos)           /*!< 0x00000001 */

+#define DMA_CCR_EN                          DMA_CCR_EN_Msk                     /*!< Channel enable*/

+#define DMA_CCR_TCIE_Pos                    (1U)                               

+#define DMA_CCR_TCIE_Msk                    (0x1UL << DMA_CCR_TCIE_Pos)         /*!< 0x00000002 */

+#define DMA_CCR_TCIE                        DMA_CCR_TCIE_Msk                   /*!< Transfer complete interrupt enable */

+#define DMA_CCR_HTIE_Pos                    (2U)                               

+#define DMA_CCR_HTIE_Msk                    (0x1UL << DMA_CCR_HTIE_Pos)         /*!< 0x00000004 */

+#define DMA_CCR_HTIE                        DMA_CCR_HTIE_Msk                   /*!< Half Transfer interrupt enable */

+#define DMA_CCR_TEIE_Pos                    (3U)                               

+#define DMA_CCR_TEIE_Msk                    (0x1UL << DMA_CCR_TEIE_Pos)         /*!< 0x00000008 */

+#define DMA_CCR_TEIE                        DMA_CCR_TEIE_Msk                   /*!< Transfer error interrupt enable */

+#define DMA_CCR_DIR_Pos                     (4U)                               

+#define DMA_CCR_DIR_Msk                     (0x1UL << DMA_CCR_DIR_Pos)          /*!< 0x00000010 */

+#define DMA_CCR_DIR                         DMA_CCR_DIR_Msk                    /*!< Data transfer direction */

+#define DMA_CCR_CIRC_Pos                    (5U)                               

+#define DMA_CCR_CIRC_Msk                    (0x1UL << DMA_CCR_CIRC_Pos)         /*!< 0x00000020 */

+#define DMA_CCR_CIRC                        DMA_CCR_CIRC_Msk                   /*!< Circular mode */

+#define DMA_CCR_PINC_Pos                    (6U)                               

+#define DMA_CCR_PINC_Msk                    (0x1UL << DMA_CCR_PINC_Pos)         /*!< 0x00000040 */

+#define DMA_CCR_PINC                        DMA_CCR_PINC_Msk                   /*!< Peripheral increment mode */

+#define DMA_CCR_MINC_Pos                    (7U)                               

+#define DMA_CCR_MINC_Msk                    (0x1UL << DMA_CCR_MINC_Pos)         /*!< 0x00000080 */

+#define DMA_CCR_MINC                        DMA_CCR_MINC_Msk                   /*!< Memory increment mode */

+

+#define DMA_CCR_PSIZE_Pos                   (8U)                               

+#define DMA_CCR_PSIZE_Msk                   (0x3UL << DMA_CCR_PSIZE_Pos)        /*!< 0x00000300 */

+#define DMA_CCR_PSIZE                       DMA_CCR_PSIZE_Msk                  /*!< PSIZE[1:0] bits (Peripheral size) */

+#define DMA_CCR_PSIZE_0                     (0x1UL << DMA_CCR_PSIZE_Pos)        /*!< 0x00000100 */

+#define DMA_CCR_PSIZE_1                     (0x2UL << DMA_CCR_PSIZE_Pos)        /*!< 0x00000200 */

+

+#define DMA_CCR_MSIZE_Pos                   (10U)                              

+#define DMA_CCR_MSIZE_Msk                   (0x3UL << DMA_CCR_MSIZE_Pos)        /*!< 0x00000C00 */

+#define DMA_CCR_MSIZE                       DMA_CCR_MSIZE_Msk                  /*!< MSIZE[1:0] bits (Memory size) */

+#define DMA_CCR_MSIZE_0                     (0x1UL << DMA_CCR_MSIZE_Pos)        /*!< 0x00000400 */

+#define DMA_CCR_MSIZE_1                     (0x2UL << DMA_CCR_MSIZE_Pos)        /*!< 0x00000800 */

+

+#define DMA_CCR_PL_Pos                      (12U)                              

+#define DMA_CCR_PL_Msk                      (0x3UL << DMA_CCR_PL_Pos)           /*!< 0x00003000 */

+#define DMA_CCR_PL                          DMA_CCR_PL_Msk                     /*!< PL[1:0] bits(Channel Priority level) */

+#define DMA_CCR_PL_0                        (0x1UL << DMA_CCR_PL_Pos)           /*!< 0x00001000 */

+#define DMA_CCR_PL_1                        (0x2UL << DMA_CCR_PL_Pos)           /*!< 0x00002000 */

+

+#define DMA_CCR_MEM2MEM_Pos                 (14U)                              

+#define DMA_CCR_MEM2MEM_Msk                 (0x1UL << DMA_CCR_MEM2MEM_Pos)      /*!< 0x00004000 */

+#define DMA_CCR_MEM2MEM                     DMA_CCR_MEM2MEM_Msk                /*!< Memory to memory mode */

+

+/******************  Bit definition generic for DMA_CNDTR register  *******************/

+#define DMA_CNDTR_NDT_Pos                   (0U)                               

+#define DMA_CNDTR_NDT_Msk                   (0xFFFFUL << DMA_CNDTR_NDT_Pos)     /*!< 0x0000FFFF */

+#define DMA_CNDTR_NDT                       DMA_CNDTR_NDT_Msk                  /*!< Number of data to Transfer */

+

+/******************  Bit definition for DMA_CNDTR1 register  ******************/

+#define DMA_CNDTR1_NDT_Pos                  (0U)                               

+#define DMA_CNDTR1_NDT_Msk                  (0xFFFFUL << DMA_CNDTR1_NDT_Pos)    /*!< 0x0000FFFF */

+#define DMA_CNDTR1_NDT                      DMA_CNDTR1_NDT_Msk                 /*!< Number of data to Transfer */

+

+/******************  Bit definition for DMA_CNDTR2 register  ******************/

+#define DMA_CNDTR2_NDT_Pos                  (0U)                               

+#define DMA_CNDTR2_NDT_Msk                  (0xFFFFUL << DMA_CNDTR2_NDT_Pos)    /*!< 0x0000FFFF */

+#define DMA_CNDTR2_NDT                      DMA_CNDTR2_NDT_Msk                 /*!< Number of data to Transfer */

+

+/******************  Bit definition for DMA_CNDTR3 register  ******************/

+#define DMA_CNDTR3_NDT_Pos                  (0U)                               

+#define DMA_CNDTR3_NDT_Msk                  (0xFFFFUL << DMA_CNDTR3_NDT_Pos)    /*!< 0x0000FFFF */

+#define DMA_CNDTR3_NDT                      DMA_CNDTR3_NDT_Msk                 /*!< Number of data to Transfer */

+

+/******************  Bit definition for DMA_CNDTR4 register  ******************/

+#define DMA_CNDTR4_NDT_Pos                  (0U)                               

+#define DMA_CNDTR4_NDT_Msk                  (0xFFFFUL << DMA_CNDTR4_NDT_Pos)    /*!< 0x0000FFFF */

+#define DMA_CNDTR4_NDT                      DMA_CNDTR4_NDT_Msk                 /*!< Number of data to Transfer */

+

+/******************  Bit definition for DMA_CNDTR5 register  ******************/

+#define DMA_CNDTR5_NDT_Pos                  (0U)                               

+#define DMA_CNDTR5_NDT_Msk                  (0xFFFFUL << DMA_CNDTR5_NDT_Pos)    /*!< 0x0000FFFF */

+#define DMA_CNDTR5_NDT                      DMA_CNDTR5_NDT_Msk                 /*!< Number of data to Transfer */

+

+/******************  Bit definition for DMA_CNDTR6 register  ******************/

+#define DMA_CNDTR6_NDT_Pos                  (0U)                               

+#define DMA_CNDTR6_NDT_Msk                  (0xFFFFUL << DMA_CNDTR6_NDT_Pos)    /*!< 0x0000FFFF */

+#define DMA_CNDTR6_NDT                      DMA_CNDTR6_NDT_Msk                 /*!< Number of data to Transfer */

+

+/******************  Bit definition for DMA_CNDTR7 register  ******************/

+#define DMA_CNDTR7_NDT_Pos                  (0U)                               

+#define DMA_CNDTR7_NDT_Msk                  (0xFFFFUL << DMA_CNDTR7_NDT_Pos)    /*!< 0x0000FFFF */

+#define DMA_CNDTR7_NDT                      DMA_CNDTR7_NDT_Msk                 /*!< Number of data to Transfer */

+

+/******************  Bit definition generic for DMA_CPAR register  ********************/

+#define DMA_CPAR_PA_Pos                     (0U)                               

+#define DMA_CPAR_PA_Msk                     (0xFFFFFFFFUL << DMA_CPAR_PA_Pos)   /*!< 0xFFFFFFFF */

+#define DMA_CPAR_PA                         DMA_CPAR_PA_Msk                    /*!< Peripheral Address */

+

+/******************  Bit definition for DMA_CPAR1 register  *******************/

+#define DMA_CPAR1_PA_Pos                    (0U)                               

+#define DMA_CPAR1_PA_Msk                    (0xFFFFFFFFUL << DMA_CPAR1_PA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CPAR1_PA                        DMA_CPAR1_PA_Msk                   /*!< Peripheral Address */

+

+/******************  Bit definition for DMA_CPAR2 register  *******************/

+#define DMA_CPAR2_PA_Pos                    (0U)                               

+#define DMA_CPAR2_PA_Msk                    (0xFFFFFFFFUL << DMA_CPAR2_PA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CPAR2_PA                        DMA_CPAR2_PA_Msk                   /*!< Peripheral Address */

+

+/******************  Bit definition for DMA_CPAR3 register  *******************/

+#define DMA_CPAR3_PA_Pos                    (0U)                               

+#define DMA_CPAR3_PA_Msk                    (0xFFFFFFFFUL << DMA_CPAR3_PA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CPAR3_PA                        DMA_CPAR3_PA_Msk                   /*!< Peripheral Address */

+

+

+/******************  Bit definition for DMA_CPAR4 register  *******************/

+#define DMA_CPAR4_PA_Pos                    (0U)                               

+#define DMA_CPAR4_PA_Msk                    (0xFFFFFFFFUL << DMA_CPAR4_PA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CPAR4_PA                        DMA_CPAR4_PA_Msk                   /*!< Peripheral Address */

+

+/******************  Bit definition for DMA_CPAR5 register  *******************/

+#define DMA_CPAR5_PA_Pos                    (0U)                               

+#define DMA_CPAR5_PA_Msk                    (0xFFFFFFFFUL << DMA_CPAR5_PA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CPAR5_PA                        DMA_CPAR5_PA_Msk                   /*!< Peripheral Address */

+

+/******************  Bit definition for DMA_CPAR6 register  *******************/

+#define DMA_CPAR6_PA_Pos                    (0U)                               

+#define DMA_CPAR6_PA_Msk                    (0xFFFFFFFFUL << DMA_CPAR6_PA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CPAR6_PA                        DMA_CPAR6_PA_Msk                   /*!< Peripheral Address */

+

+

+/******************  Bit definition for DMA_CPAR7 register  *******************/

+#define DMA_CPAR7_PA_Pos                    (0U)                               

+#define DMA_CPAR7_PA_Msk                    (0xFFFFFFFFUL << DMA_CPAR7_PA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CPAR7_PA                        DMA_CPAR7_PA_Msk                   /*!< Peripheral Address */

+

+/******************  Bit definition generic for DMA_CMAR register  ********************/

+#define DMA_CMAR_MA_Pos                     (0U)                               

+#define DMA_CMAR_MA_Msk                     (0xFFFFFFFFUL << DMA_CMAR_MA_Pos)   /*!< 0xFFFFFFFF */

+#define DMA_CMAR_MA                         DMA_CMAR_MA_Msk                    /*!< Memory Address */

+

+/******************  Bit definition for DMA_CMAR1 register  *******************/

+#define DMA_CMAR1_MA_Pos                    (0U)                               

+#define DMA_CMAR1_MA_Msk                    (0xFFFFFFFFUL << DMA_CMAR1_MA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CMAR1_MA                        DMA_CMAR1_MA_Msk                   /*!< Memory Address */

+

+/******************  Bit definition for DMA_CMAR2 register  *******************/

+#define DMA_CMAR2_MA_Pos                    (0U)                               

+#define DMA_CMAR2_MA_Msk                    (0xFFFFFFFFUL << DMA_CMAR2_MA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CMAR2_MA                        DMA_CMAR2_MA_Msk                   /*!< Memory Address */

+

+/******************  Bit definition for DMA_CMAR3 register  *******************/

+#define DMA_CMAR3_MA_Pos                    (0U)                               

+#define DMA_CMAR3_MA_Msk                    (0xFFFFFFFFUL << DMA_CMAR3_MA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CMAR3_MA                        DMA_CMAR3_MA_Msk                   /*!< Memory Address */

+

+

+/******************  Bit definition for DMA_CMAR4 register  *******************/

+#define DMA_CMAR4_MA_Pos                    (0U)                               

+#define DMA_CMAR4_MA_Msk                    (0xFFFFFFFFUL << DMA_CMAR4_MA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CMAR4_MA                        DMA_CMAR4_MA_Msk                   /*!< Memory Address */

+

+/******************  Bit definition for DMA_CMAR5 register  *******************/

+#define DMA_CMAR5_MA_Pos                    (0U)                               

+#define DMA_CMAR5_MA_Msk                    (0xFFFFFFFFUL << DMA_CMAR5_MA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CMAR5_MA                        DMA_CMAR5_MA_Msk                   /*!< Memory Address */

+

+/******************  Bit definition for DMA_CMAR6 register  *******************/

+#define DMA_CMAR6_MA_Pos                    (0U)                               

+#define DMA_CMAR6_MA_Msk                    (0xFFFFFFFFUL << DMA_CMAR6_MA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CMAR6_MA                        DMA_CMAR6_MA_Msk                   /*!< Memory Address */

+

+/******************  Bit definition for DMA_CMAR7 register  *******************/

+#define DMA_CMAR7_MA_Pos                    (0U)                               

+#define DMA_CMAR7_MA_Msk                    (0xFFFFFFFFUL << DMA_CMAR7_MA_Pos)  /*!< 0xFFFFFFFF */

+#define DMA_CMAR7_MA                        DMA_CMAR7_MA_Msk                   /*!< Memory Address */

+

+/******************************************************************************/

+/*                                                                            */

+/*                  External Interrupt/Event Controller (EXTI)                */

+/*                                                                            */

+/******************************************************************************/

+

+/*******************  Bit definition for EXTI_IMR register  *******************/

+#define EXTI_IMR_MR0_Pos                    (0U)                               

+#define EXTI_IMR_MR0_Msk                    (0x1UL << EXTI_IMR_MR0_Pos)         /*!< 0x00000001 */

+#define EXTI_IMR_MR0                        EXTI_IMR_MR0_Msk                   /*!< Interrupt Mask on line 0 */

+#define EXTI_IMR_MR1_Pos                    (1U)                               

+#define EXTI_IMR_MR1_Msk                    (0x1UL << EXTI_IMR_MR1_Pos)         /*!< 0x00000002 */

+#define EXTI_IMR_MR1                        EXTI_IMR_MR1_Msk                   /*!< Interrupt Mask on line 1 */

+#define EXTI_IMR_MR2_Pos                    (2U)                               

+#define EXTI_IMR_MR2_Msk                    (0x1UL << EXTI_IMR_MR2_Pos)         /*!< 0x00000004 */

+#define EXTI_IMR_MR2                        EXTI_IMR_MR2_Msk                   /*!< Interrupt Mask on line 2 */

+#define EXTI_IMR_MR3_Pos                    (3U)                               

+#define EXTI_IMR_MR3_Msk                    (0x1UL << EXTI_IMR_MR3_Pos)         /*!< 0x00000008 */

+#define EXTI_IMR_MR3                        EXTI_IMR_MR3_Msk                   /*!< Interrupt Mask on line 3 */

+#define EXTI_IMR_MR4_Pos                    (4U)                               

+#define EXTI_IMR_MR4_Msk                    (0x1UL << EXTI_IMR_MR4_Pos)         /*!< 0x00000010 */

+#define EXTI_IMR_MR4                        EXTI_IMR_MR4_Msk                   /*!< Interrupt Mask on line 4 */

+#define EXTI_IMR_MR5_Pos                    (5U)                               

+#define EXTI_IMR_MR5_Msk                    (0x1UL << EXTI_IMR_MR5_Pos)         /*!< 0x00000020 */

+#define EXTI_IMR_MR5                        EXTI_IMR_MR5_Msk                   /*!< Interrupt Mask on line 5 */

+#define EXTI_IMR_MR6_Pos                    (6U)                               

+#define EXTI_IMR_MR6_Msk                    (0x1UL << EXTI_IMR_MR6_Pos)         /*!< 0x00000040 */

+#define EXTI_IMR_MR6                        EXTI_IMR_MR6_Msk                   /*!< Interrupt Mask on line 6 */

+#define EXTI_IMR_MR7_Pos                    (7U)                               

+#define EXTI_IMR_MR7_Msk                    (0x1UL << EXTI_IMR_MR7_Pos)         /*!< 0x00000080 */

+#define EXTI_IMR_MR7                        EXTI_IMR_MR7_Msk                   /*!< Interrupt Mask on line 7 */

+#define EXTI_IMR_MR8_Pos                    (8U)                               

+#define EXTI_IMR_MR8_Msk                    (0x1UL << EXTI_IMR_MR8_Pos)         /*!< 0x00000100 */

+#define EXTI_IMR_MR8                        EXTI_IMR_MR8_Msk                   /*!< Interrupt Mask on line 8 */

+#define EXTI_IMR_MR9_Pos                    (9U)                               

+#define EXTI_IMR_MR9_Msk                    (0x1UL << EXTI_IMR_MR9_Pos)         /*!< 0x00000200 */

+#define EXTI_IMR_MR9                        EXTI_IMR_MR9_Msk                   /*!< Interrupt Mask on line 9 */

+#define EXTI_IMR_MR10_Pos                   (10U)                              

+#define EXTI_IMR_MR10_Msk                   (0x1UL << EXTI_IMR_MR10_Pos)        /*!< 0x00000400 */

+#define EXTI_IMR_MR10                       EXTI_IMR_MR10_Msk                  /*!< Interrupt Mask on line 10 */

+#define EXTI_IMR_MR11_Pos                   (11U)                              

+#define EXTI_IMR_MR11_Msk                   (0x1UL << EXTI_IMR_MR11_Pos)        /*!< 0x00000800 */

+#define EXTI_IMR_MR11                       EXTI_IMR_MR11_Msk                  /*!< Interrupt Mask on line 11 */

+#define EXTI_IMR_MR12_Pos                   (12U)                              

+#define EXTI_IMR_MR12_Msk                   (0x1UL << EXTI_IMR_MR12_Pos)        /*!< 0x00001000 */

+#define EXTI_IMR_MR12                       EXTI_IMR_MR12_Msk                  /*!< Interrupt Mask on line 12 */

+#define EXTI_IMR_MR13_Pos                   (13U)                              

+#define EXTI_IMR_MR13_Msk                   (0x1UL << EXTI_IMR_MR13_Pos)        /*!< 0x00002000 */

+#define EXTI_IMR_MR13                       EXTI_IMR_MR13_Msk                  /*!< Interrupt Mask on line 13 */

+#define EXTI_IMR_MR14_Pos                   (14U)                              

+#define EXTI_IMR_MR14_Msk                   (0x1UL << EXTI_IMR_MR14_Pos)        /*!< 0x00004000 */

+#define EXTI_IMR_MR14                       EXTI_IMR_MR14_Msk                  /*!< Interrupt Mask on line 14 */

+#define EXTI_IMR_MR15_Pos                   (15U)                              

+#define EXTI_IMR_MR15_Msk                   (0x1UL << EXTI_IMR_MR15_Pos)        /*!< 0x00008000 */

+#define EXTI_IMR_MR15                       EXTI_IMR_MR15_Msk                  /*!< Interrupt Mask on line 15 */

+#define EXTI_IMR_MR16_Pos                   (16U)                              

+#define EXTI_IMR_MR16_Msk                   (0x1UL << EXTI_IMR_MR16_Pos)        /*!< 0x00010000 */

+#define EXTI_IMR_MR16                       EXTI_IMR_MR16_Msk                  /*!< Interrupt Mask on line 16 */

+#define EXTI_IMR_MR17_Pos                   (17U)                              

+#define EXTI_IMR_MR17_Msk                   (0x1UL << EXTI_IMR_MR17_Pos)        /*!< 0x00020000 */

+#define EXTI_IMR_MR17                       EXTI_IMR_MR17_Msk                  /*!< Interrupt Mask on line 17 */

+#define EXTI_IMR_MR18_Pos                   (18U)                              

+#define EXTI_IMR_MR18_Msk                   (0x1UL << EXTI_IMR_MR18_Pos)        /*!< 0x00040000 */

+#define EXTI_IMR_MR18                       EXTI_IMR_MR18_Msk                  /*!< Interrupt Mask on line 18 */

+#define EXTI_IMR_MR19_Pos                   (19U)                              

+#define EXTI_IMR_MR19_Msk                   (0x1UL << EXTI_IMR_MR19_Pos)        /*!< 0x00080000 */

+#define EXTI_IMR_MR19                       EXTI_IMR_MR19_Msk                  /*!< Interrupt Mask on line 19 */

+#define EXTI_IMR_MR20_Pos                   (20U)                              

+#define EXTI_IMR_MR20_Msk                   (0x1UL << EXTI_IMR_MR20_Pos)        /*!< 0x00100000 */

+#define EXTI_IMR_MR20                       EXTI_IMR_MR20_Msk                  /*!< Interrupt Mask on line 20 */

+#define EXTI_IMR_MR21_Pos                   (21U)                              

+#define EXTI_IMR_MR21_Msk                   (0x1UL << EXTI_IMR_MR21_Pos)        /*!< 0x00200000 */

+#define EXTI_IMR_MR21                       EXTI_IMR_MR21_Msk                  /*!< Interrupt Mask on line 21 */

+#define EXTI_IMR_MR22_Pos                   (22U)                              

+#define EXTI_IMR_MR22_Msk                   (0x1UL << EXTI_IMR_MR22_Pos)        /*!< 0x00400000 */

+#define EXTI_IMR_MR22                       EXTI_IMR_MR22_Msk                  /*!< Interrupt Mask on line 22 */

+#define EXTI_IMR_MR23_Pos                   (23U)                              

+#define EXTI_IMR_MR23_Msk                   (0x1UL << EXTI_IMR_MR23_Pos)        /*!< 0x00800000 */

+#define EXTI_IMR_MR23                       EXTI_IMR_MR23_Msk                  /*!< Interrupt Mask on line 23 */

+

+/* References Defines */

+#define  EXTI_IMR_IM0 EXTI_IMR_MR0

+#define  EXTI_IMR_IM1 EXTI_IMR_MR1

+#define  EXTI_IMR_IM2 EXTI_IMR_MR2

+#define  EXTI_IMR_IM3 EXTI_IMR_MR3

+#define  EXTI_IMR_IM4 EXTI_IMR_MR4

+#define  EXTI_IMR_IM5 EXTI_IMR_MR5

+#define  EXTI_IMR_IM6 EXTI_IMR_MR6

+#define  EXTI_IMR_IM7 EXTI_IMR_MR7

+#define  EXTI_IMR_IM8 EXTI_IMR_MR8

+#define  EXTI_IMR_IM9 EXTI_IMR_MR9

+#define  EXTI_IMR_IM10 EXTI_IMR_MR10

+#define  EXTI_IMR_IM11 EXTI_IMR_MR11

+#define  EXTI_IMR_IM12 EXTI_IMR_MR12

+#define  EXTI_IMR_IM13 EXTI_IMR_MR13

+#define  EXTI_IMR_IM14 EXTI_IMR_MR14

+#define  EXTI_IMR_IM15 EXTI_IMR_MR15

+#define  EXTI_IMR_IM16 EXTI_IMR_MR16

+#define  EXTI_IMR_IM17 EXTI_IMR_MR17

+#define  EXTI_IMR_IM18 EXTI_IMR_MR18

+#define  EXTI_IMR_IM19 EXTI_IMR_MR19

+#define  EXTI_IMR_IM20 EXTI_IMR_MR20

+#define  EXTI_IMR_IM21 EXTI_IMR_MR21

+#define  EXTI_IMR_IM22 EXTI_IMR_MR22

+/* Category 3, 4 & 5 */

+#define  EXTI_IMR_IM23 EXTI_IMR_MR23

+#define EXTI_IMR_IM_Pos                     (0U)                               

+#define EXTI_IMR_IM_Msk                     (0xFFFFFFUL << EXTI_IMR_IM_Pos)     /*!< 0x00FFFFFF */

+#define EXTI_IMR_IM                         EXTI_IMR_IM_Msk                    /*!< Interrupt Mask All */

+

+/*******************  Bit definition for EXTI_EMR register  *******************/

+#define EXTI_EMR_MR0_Pos                    (0U)                               

+#define EXTI_EMR_MR0_Msk                    (0x1UL << EXTI_EMR_MR0_Pos)         /*!< 0x00000001 */

+#define EXTI_EMR_MR0                        EXTI_EMR_MR0_Msk                   /*!< Event Mask on line 0 */

+#define EXTI_EMR_MR1_Pos                    (1U)                               

+#define EXTI_EMR_MR1_Msk                    (0x1UL << EXTI_EMR_MR1_Pos)         /*!< 0x00000002 */

+#define EXTI_EMR_MR1                        EXTI_EMR_MR1_Msk                   /*!< Event Mask on line 1 */

+#define EXTI_EMR_MR2_Pos                    (2U)                               

+#define EXTI_EMR_MR2_Msk                    (0x1UL << EXTI_EMR_MR2_Pos)         /*!< 0x00000004 */

+#define EXTI_EMR_MR2                        EXTI_EMR_MR2_Msk                   /*!< Event Mask on line 2 */

+#define EXTI_EMR_MR3_Pos                    (3U)                               

+#define EXTI_EMR_MR3_Msk                    (0x1UL << EXTI_EMR_MR3_Pos)         /*!< 0x00000008 */

+#define EXTI_EMR_MR3                        EXTI_EMR_MR3_Msk                   /*!< Event Mask on line 3 */

+#define EXTI_EMR_MR4_Pos                    (4U)                               

+#define EXTI_EMR_MR4_Msk                    (0x1UL << EXTI_EMR_MR4_Pos)         /*!< 0x00000010 */

+#define EXTI_EMR_MR4                        EXTI_EMR_MR4_Msk                   /*!< Event Mask on line 4 */

+#define EXTI_EMR_MR5_Pos                    (5U)                               

+#define EXTI_EMR_MR5_Msk                    (0x1UL << EXTI_EMR_MR5_Pos)         /*!< 0x00000020 */

+#define EXTI_EMR_MR5                        EXTI_EMR_MR5_Msk                   /*!< Event Mask on line 5 */

+#define EXTI_EMR_MR6_Pos                    (6U)                               

+#define EXTI_EMR_MR6_Msk                    (0x1UL << EXTI_EMR_MR6_Pos)         /*!< 0x00000040 */

+#define EXTI_EMR_MR6                        EXTI_EMR_MR6_Msk                   /*!< Event Mask on line 6 */

+#define EXTI_EMR_MR7_Pos                    (7U)                               

+#define EXTI_EMR_MR7_Msk                    (0x1UL << EXTI_EMR_MR7_Pos)         /*!< 0x00000080 */

+#define EXTI_EMR_MR7                        EXTI_EMR_MR7_Msk                   /*!< Event Mask on line 7 */

+#define EXTI_EMR_MR8_Pos                    (8U)                               

+#define EXTI_EMR_MR8_Msk                    (0x1UL << EXTI_EMR_MR8_Pos)         /*!< 0x00000100 */

+#define EXTI_EMR_MR8                        EXTI_EMR_MR8_Msk                   /*!< Event Mask on line 8 */

+#define EXTI_EMR_MR9_Pos                    (9U)                               

+#define EXTI_EMR_MR9_Msk                    (0x1UL << EXTI_EMR_MR9_Pos)         /*!< 0x00000200 */

+#define EXTI_EMR_MR9                        EXTI_EMR_MR9_Msk                   /*!< Event Mask on line 9 */

+#define EXTI_EMR_MR10_Pos                   (10U)                              

+#define EXTI_EMR_MR10_Msk                   (0x1UL << EXTI_EMR_MR10_Pos)        /*!< 0x00000400 */

+#define EXTI_EMR_MR10                       EXTI_EMR_MR10_Msk                  /*!< Event Mask on line 10 */

+#define EXTI_EMR_MR11_Pos                   (11U)                              

+#define EXTI_EMR_MR11_Msk                   (0x1UL << EXTI_EMR_MR11_Pos)        /*!< 0x00000800 */

+#define EXTI_EMR_MR11                       EXTI_EMR_MR11_Msk                  /*!< Event Mask on line 11 */

+#define EXTI_EMR_MR12_Pos                   (12U)                              

+#define EXTI_EMR_MR12_Msk                   (0x1UL << EXTI_EMR_MR12_Pos)        /*!< 0x00001000 */

+#define EXTI_EMR_MR12                       EXTI_EMR_MR12_Msk                  /*!< Event Mask on line 12 */

+#define EXTI_EMR_MR13_Pos                   (13U)                              

+#define EXTI_EMR_MR13_Msk                   (0x1UL << EXTI_EMR_MR13_Pos)        /*!< 0x00002000 */

+#define EXTI_EMR_MR13                       EXTI_EMR_MR13_Msk                  /*!< Event Mask on line 13 */

+#define EXTI_EMR_MR14_Pos                   (14U)                              

+#define EXTI_EMR_MR14_Msk                   (0x1UL << EXTI_EMR_MR14_Pos)        /*!< 0x00004000 */

+#define EXTI_EMR_MR14                       EXTI_EMR_MR14_Msk                  /*!< Event Mask on line 14 */

+#define EXTI_EMR_MR15_Pos                   (15U)                              

+#define EXTI_EMR_MR15_Msk                   (0x1UL << EXTI_EMR_MR15_Pos)        /*!< 0x00008000 */

+#define EXTI_EMR_MR15                       EXTI_EMR_MR15_Msk                  /*!< Event Mask on line 15 */

+#define EXTI_EMR_MR16_Pos                   (16U)                              

+#define EXTI_EMR_MR16_Msk                   (0x1UL << EXTI_EMR_MR16_Pos)        /*!< 0x00010000 */

+#define EXTI_EMR_MR16                       EXTI_EMR_MR16_Msk                  /*!< Event Mask on line 16 */

+#define EXTI_EMR_MR17_Pos                   (17U)                              

+#define EXTI_EMR_MR17_Msk                   (0x1UL << EXTI_EMR_MR17_Pos)        /*!< 0x00020000 */

+#define EXTI_EMR_MR17                       EXTI_EMR_MR17_Msk                  /*!< Event Mask on line 17 */

+#define EXTI_EMR_MR18_Pos                   (18U)                              

+#define EXTI_EMR_MR18_Msk                   (0x1UL << EXTI_EMR_MR18_Pos)        /*!< 0x00040000 */

+#define EXTI_EMR_MR18                       EXTI_EMR_MR18_Msk                  /*!< Event Mask on line 18 */

+#define EXTI_EMR_MR19_Pos                   (19U)                              

+#define EXTI_EMR_MR19_Msk                   (0x1UL << EXTI_EMR_MR19_Pos)        /*!< 0x00080000 */

+#define EXTI_EMR_MR19                       EXTI_EMR_MR19_Msk                  /*!< Event Mask on line 19 */

+#define EXTI_EMR_MR20_Pos                   (20U)                              

+#define EXTI_EMR_MR20_Msk                   (0x1UL << EXTI_EMR_MR20_Pos)        /*!< 0x00100000 */

+#define EXTI_EMR_MR20                       EXTI_EMR_MR20_Msk                  /*!< Event Mask on line 20 */

+#define EXTI_EMR_MR21_Pos                   (21U)                              

+#define EXTI_EMR_MR21_Msk                   (0x1UL << EXTI_EMR_MR21_Pos)        /*!< 0x00200000 */

+#define EXTI_EMR_MR21                       EXTI_EMR_MR21_Msk                  /*!< Event Mask on line 21 */

+#define EXTI_EMR_MR22_Pos                   (22U)                              

+#define EXTI_EMR_MR22_Msk                   (0x1UL << EXTI_EMR_MR22_Pos)        /*!< 0x00400000 */

+#define EXTI_EMR_MR22                       EXTI_EMR_MR22_Msk                  /*!< Event Mask on line 22 */

+#define EXTI_EMR_MR23_Pos                   (23U)                              

+#define EXTI_EMR_MR23_Msk                   (0x1UL << EXTI_EMR_MR23_Pos)        /*!< 0x00800000 */

+#define EXTI_EMR_MR23                       EXTI_EMR_MR23_Msk                  /*!< Event Mask on line 23 */

+

+/* References Defines */

+#define  EXTI_EMR_EM0 EXTI_EMR_MR0

+#define  EXTI_EMR_EM1 EXTI_EMR_MR1

+#define  EXTI_EMR_EM2 EXTI_EMR_MR2

+#define  EXTI_EMR_EM3 EXTI_EMR_MR3

+#define  EXTI_EMR_EM4 EXTI_EMR_MR4

+#define  EXTI_EMR_EM5 EXTI_EMR_MR5

+#define  EXTI_EMR_EM6 EXTI_EMR_MR6

+#define  EXTI_EMR_EM7 EXTI_EMR_MR7

+#define  EXTI_EMR_EM8 EXTI_EMR_MR8

+#define  EXTI_EMR_EM9 EXTI_EMR_MR9

+#define  EXTI_EMR_EM10 EXTI_EMR_MR10

+#define  EXTI_EMR_EM11 EXTI_EMR_MR11

+#define  EXTI_EMR_EM12 EXTI_EMR_MR12

+#define  EXTI_EMR_EM13 EXTI_EMR_MR13

+#define  EXTI_EMR_EM14 EXTI_EMR_MR14

+#define  EXTI_EMR_EM15 EXTI_EMR_MR15

+#define  EXTI_EMR_EM16 EXTI_EMR_MR16

+#define  EXTI_EMR_EM17 EXTI_EMR_MR17

+#define  EXTI_EMR_EM18 EXTI_EMR_MR18

+#define  EXTI_EMR_EM19 EXTI_EMR_MR19

+#define  EXTI_EMR_EM20 EXTI_EMR_MR20

+#define  EXTI_EMR_EM21 EXTI_EMR_MR21

+#define  EXTI_EMR_EM22 EXTI_EMR_MR22

+#define  EXTI_EMR_EM23 EXTI_EMR_MR23

+

+/******************  Bit definition for EXTI_RTSR register  *******************/

+#define EXTI_RTSR_TR0_Pos                   (0U)                               

+#define EXTI_RTSR_TR0_Msk                   (0x1UL << EXTI_RTSR_TR0_Pos)        /*!< 0x00000001 */

+#define EXTI_RTSR_TR0                       EXTI_RTSR_TR0_Msk                  /*!< Rising trigger event configuration bit of line 0 */

+#define EXTI_RTSR_TR1_Pos                   (1U)                               

+#define EXTI_RTSR_TR1_Msk                   (0x1UL << EXTI_RTSR_TR1_Pos)        /*!< 0x00000002 */

+#define EXTI_RTSR_TR1                       EXTI_RTSR_TR1_Msk                  /*!< Rising trigger event configuration bit of line 1 */

+#define EXTI_RTSR_TR2_Pos                   (2U)                               

+#define EXTI_RTSR_TR2_Msk                   (0x1UL << EXTI_RTSR_TR2_Pos)        /*!< 0x00000004 */

+#define EXTI_RTSR_TR2                       EXTI_RTSR_TR2_Msk                  /*!< Rising trigger event configuration bit of line 2 */

+#define EXTI_RTSR_TR3_Pos                   (3U)                               

+#define EXTI_RTSR_TR3_Msk                   (0x1UL << EXTI_RTSR_TR3_Pos)        /*!< 0x00000008 */

+#define EXTI_RTSR_TR3                       EXTI_RTSR_TR3_Msk                  /*!< Rising trigger event configuration bit of line 3 */

+#define EXTI_RTSR_TR4_Pos                   (4U)                               

+#define EXTI_RTSR_TR4_Msk                   (0x1UL << EXTI_RTSR_TR4_Pos)        /*!< 0x00000010 */

+#define EXTI_RTSR_TR4                       EXTI_RTSR_TR4_Msk                  /*!< Rising trigger event configuration bit of line 4 */

+#define EXTI_RTSR_TR5_Pos                   (5U)                               

+#define EXTI_RTSR_TR5_Msk                   (0x1UL << EXTI_RTSR_TR5_Pos)        /*!< 0x00000020 */

+#define EXTI_RTSR_TR5                       EXTI_RTSR_TR5_Msk                  /*!< Rising trigger event configuration bit of line 5 */

+#define EXTI_RTSR_TR6_Pos                   (6U)                               

+#define EXTI_RTSR_TR6_Msk                   (0x1UL << EXTI_RTSR_TR6_Pos)        /*!< 0x00000040 */

+#define EXTI_RTSR_TR6                       EXTI_RTSR_TR6_Msk                  /*!< Rising trigger event configuration bit of line 6 */

+#define EXTI_RTSR_TR7_Pos                   (7U)                               

+#define EXTI_RTSR_TR7_Msk                   (0x1UL << EXTI_RTSR_TR7_Pos)        /*!< 0x00000080 */

+#define EXTI_RTSR_TR7                       EXTI_RTSR_TR7_Msk                  /*!< Rising trigger event configuration bit of line 7 */

+#define EXTI_RTSR_TR8_Pos                   (8U)                               

+#define EXTI_RTSR_TR8_Msk                   (0x1UL << EXTI_RTSR_TR8_Pos)        /*!< 0x00000100 */

+#define EXTI_RTSR_TR8                       EXTI_RTSR_TR8_Msk                  /*!< Rising trigger event configuration bit of line 8 */

+#define EXTI_RTSR_TR9_Pos                   (9U)                               

+#define EXTI_RTSR_TR9_Msk                   (0x1UL << EXTI_RTSR_TR9_Pos)        /*!< 0x00000200 */

+#define EXTI_RTSR_TR9                       EXTI_RTSR_TR9_Msk                  /*!< Rising trigger event configuration bit of line 9 */

+#define EXTI_RTSR_TR10_Pos                  (10U)                              

+#define EXTI_RTSR_TR10_Msk                  (0x1UL << EXTI_RTSR_TR10_Pos)       /*!< 0x00000400 */

+#define EXTI_RTSR_TR10                      EXTI_RTSR_TR10_Msk                 /*!< Rising trigger event configuration bit of line 10 */

+#define EXTI_RTSR_TR11_Pos                  (11U)                              

+#define EXTI_RTSR_TR11_Msk                  (0x1UL << EXTI_RTSR_TR11_Pos)       /*!< 0x00000800 */

+#define EXTI_RTSR_TR11                      EXTI_RTSR_TR11_Msk                 /*!< Rising trigger event configuration bit of line 11 */

+#define EXTI_RTSR_TR12_Pos                  (12U)                              

+#define EXTI_RTSR_TR12_Msk                  (0x1UL << EXTI_RTSR_TR12_Pos)       /*!< 0x00001000 */

+#define EXTI_RTSR_TR12                      EXTI_RTSR_TR12_Msk                 /*!< Rising trigger event configuration bit of line 12 */

+#define EXTI_RTSR_TR13_Pos                  (13U)                              

+#define EXTI_RTSR_TR13_Msk                  (0x1UL << EXTI_RTSR_TR13_Pos)       /*!< 0x00002000 */

+#define EXTI_RTSR_TR13                      EXTI_RTSR_TR13_Msk                 /*!< Rising trigger event configuration bit of line 13 */

+#define EXTI_RTSR_TR14_Pos                  (14U)                              

+#define EXTI_RTSR_TR14_Msk                  (0x1UL << EXTI_RTSR_TR14_Pos)       /*!< 0x00004000 */

+#define EXTI_RTSR_TR14                      EXTI_RTSR_TR14_Msk                 /*!< Rising trigger event configuration bit of line 14 */

+#define EXTI_RTSR_TR15_Pos                  (15U)                              

+#define EXTI_RTSR_TR15_Msk                  (0x1UL << EXTI_RTSR_TR15_Pos)       /*!< 0x00008000 */

+#define EXTI_RTSR_TR15                      EXTI_RTSR_TR15_Msk                 /*!< Rising trigger event configuration bit of line 15 */

+#define EXTI_RTSR_TR16_Pos                  (16U)                              

+#define EXTI_RTSR_TR16_Msk                  (0x1UL << EXTI_RTSR_TR16_Pos)       /*!< 0x00010000 */

+#define EXTI_RTSR_TR16                      EXTI_RTSR_TR16_Msk                 /*!< Rising trigger event configuration bit of line 16 */

+#define EXTI_RTSR_TR17_Pos                  (17U)                              

+#define EXTI_RTSR_TR17_Msk                  (0x1UL << EXTI_RTSR_TR17_Pos)       /*!< 0x00020000 */

+#define EXTI_RTSR_TR17                      EXTI_RTSR_TR17_Msk                 /*!< Rising trigger event configuration bit of line 17 */

+#define EXTI_RTSR_TR18_Pos                  (18U)                              

+#define EXTI_RTSR_TR18_Msk                  (0x1UL << EXTI_RTSR_TR18_Pos)       /*!< 0x00040000 */

+#define EXTI_RTSR_TR18                      EXTI_RTSR_TR18_Msk                 /*!< Rising trigger event configuration bit of line 18 */

+#define EXTI_RTSR_TR19_Pos                  (19U)                              

+#define EXTI_RTSR_TR19_Msk                  (0x1UL << EXTI_RTSR_TR19_Pos)       /*!< 0x00080000 */

+#define EXTI_RTSR_TR19                      EXTI_RTSR_TR19_Msk                 /*!< Rising trigger event configuration bit of line 19 */

+#define EXTI_RTSR_TR20_Pos                  (20U)                              

+#define EXTI_RTSR_TR20_Msk                  (0x1UL << EXTI_RTSR_TR20_Pos)       /*!< 0x00100000 */

+#define EXTI_RTSR_TR20                      EXTI_RTSR_TR20_Msk                 /*!< Rising trigger event configuration bit of line 20 */

+#define EXTI_RTSR_TR21_Pos                  (21U)                              

+#define EXTI_RTSR_TR21_Msk                  (0x1UL << EXTI_RTSR_TR21_Pos)       /*!< 0x00200000 */

+#define EXTI_RTSR_TR21                      EXTI_RTSR_TR21_Msk                 /*!< Rising trigger event configuration bit of line 21 */

+#define EXTI_RTSR_TR22_Pos                  (22U)                              

+#define EXTI_RTSR_TR22_Msk                  (0x1UL << EXTI_RTSR_TR22_Pos)       /*!< 0x00400000 */

+#define EXTI_RTSR_TR22                      EXTI_RTSR_TR22_Msk                 /*!< Rising trigger event configuration bit of line 22 */

+#define EXTI_RTSR_TR23_Pos                  (23U)                              

+#define EXTI_RTSR_TR23_Msk                  (0x1UL << EXTI_RTSR_TR23_Pos)       /*!< 0x00800000 */

+#define EXTI_RTSR_TR23                      EXTI_RTSR_TR23_Msk                 /*!< Rising trigger event configuration bit of line 23 */

+

+/* References Defines */

+#define  EXTI_RTSR_RT0 EXTI_RTSR_TR0

+#define  EXTI_RTSR_RT1 EXTI_RTSR_TR1

+#define  EXTI_RTSR_RT2 EXTI_RTSR_TR2

+#define  EXTI_RTSR_RT3 EXTI_RTSR_TR3

+#define  EXTI_RTSR_RT4 EXTI_RTSR_TR4

+#define  EXTI_RTSR_RT5 EXTI_RTSR_TR5

+#define  EXTI_RTSR_RT6 EXTI_RTSR_TR6

+#define  EXTI_RTSR_RT7 EXTI_RTSR_TR7

+#define  EXTI_RTSR_RT8 EXTI_RTSR_TR8

+#define  EXTI_RTSR_RT9 EXTI_RTSR_TR9

+#define  EXTI_RTSR_RT10 EXTI_RTSR_TR10

+#define  EXTI_RTSR_RT11 EXTI_RTSR_TR11

+#define  EXTI_RTSR_RT12 EXTI_RTSR_TR12

+#define  EXTI_RTSR_RT13 EXTI_RTSR_TR13

+#define  EXTI_RTSR_RT14 EXTI_RTSR_TR14

+#define  EXTI_RTSR_RT15 EXTI_RTSR_TR15

+#define  EXTI_RTSR_RT16 EXTI_RTSR_TR16

+#define  EXTI_RTSR_RT17 EXTI_RTSR_TR17

+#define  EXTI_RTSR_RT18 EXTI_RTSR_TR18

+#define  EXTI_RTSR_RT19 EXTI_RTSR_TR19

+#define  EXTI_RTSR_RT20 EXTI_RTSR_TR20

+#define  EXTI_RTSR_RT21 EXTI_RTSR_TR21

+#define  EXTI_RTSR_RT22 EXTI_RTSR_TR22

+#define  EXTI_RTSR_RT23 EXTI_RTSR_TR23

+

+/******************  Bit definition for EXTI_FTSR register  *******************/

+#define EXTI_FTSR_TR0_Pos                   (0U)                               

+#define EXTI_FTSR_TR0_Msk                   (0x1UL << EXTI_FTSR_TR0_Pos)        /*!< 0x00000001 */

+#define EXTI_FTSR_TR0                       EXTI_FTSR_TR0_Msk                  /*!< Falling trigger event configuration bit of line 0 */

+#define EXTI_FTSR_TR1_Pos                   (1U)                               

+#define EXTI_FTSR_TR1_Msk                   (0x1UL << EXTI_FTSR_TR1_Pos)        /*!< 0x00000002 */

+#define EXTI_FTSR_TR1                       EXTI_FTSR_TR1_Msk                  /*!< Falling trigger event configuration bit of line 1 */

+#define EXTI_FTSR_TR2_Pos                   (2U)                               

+#define EXTI_FTSR_TR2_Msk                   (0x1UL << EXTI_FTSR_TR2_Pos)        /*!< 0x00000004 */

+#define EXTI_FTSR_TR2                       EXTI_FTSR_TR2_Msk                  /*!< Falling trigger event configuration bit of line 2 */

+#define EXTI_FTSR_TR3_Pos                   (3U)                               

+#define EXTI_FTSR_TR3_Msk                   (0x1UL << EXTI_FTSR_TR3_Pos)        /*!< 0x00000008 */

+#define EXTI_FTSR_TR3                       EXTI_FTSR_TR3_Msk                  /*!< Falling trigger event configuration bit of line 3 */

+#define EXTI_FTSR_TR4_Pos                   (4U)                               

+#define EXTI_FTSR_TR4_Msk                   (0x1UL << EXTI_FTSR_TR4_Pos)        /*!< 0x00000010 */

+#define EXTI_FTSR_TR4                       EXTI_FTSR_TR4_Msk                  /*!< Falling trigger event configuration bit of line 4 */

+#define EXTI_FTSR_TR5_Pos                   (5U)                               

+#define EXTI_FTSR_TR5_Msk                   (0x1UL << EXTI_FTSR_TR5_Pos)        /*!< 0x00000020 */

+#define EXTI_FTSR_TR5                       EXTI_FTSR_TR5_Msk                  /*!< Falling trigger event configuration bit of line 5 */

+#define EXTI_FTSR_TR6_Pos                   (6U)                               

+#define EXTI_FTSR_TR6_Msk                   (0x1UL << EXTI_FTSR_TR6_Pos)        /*!< 0x00000040 */

+#define EXTI_FTSR_TR6                       EXTI_FTSR_TR6_Msk                  /*!< Falling trigger event configuration bit of line 6 */

+#define EXTI_FTSR_TR7_Pos                   (7U)                               

+#define EXTI_FTSR_TR7_Msk                   (0x1UL << EXTI_FTSR_TR7_Pos)        /*!< 0x00000080 */

+#define EXTI_FTSR_TR7                       EXTI_FTSR_TR7_Msk                  /*!< Falling trigger event configuration bit of line 7 */

+#define EXTI_FTSR_TR8_Pos                   (8U)                               

+#define EXTI_FTSR_TR8_Msk                   (0x1UL << EXTI_FTSR_TR8_Pos)        /*!< 0x00000100 */

+#define EXTI_FTSR_TR8                       EXTI_FTSR_TR8_Msk                  /*!< Falling trigger event configuration bit of line 8 */

+#define EXTI_FTSR_TR9_Pos                   (9U)                               

+#define EXTI_FTSR_TR9_Msk                   (0x1UL << EXTI_FTSR_TR9_Pos)        /*!< 0x00000200 */

+#define EXTI_FTSR_TR9                       EXTI_FTSR_TR9_Msk                  /*!< Falling trigger event configuration bit of line 9 */

+#define EXTI_FTSR_TR10_Pos                  (10U)                              

+#define EXTI_FTSR_TR10_Msk                  (0x1UL << EXTI_FTSR_TR10_Pos)       /*!< 0x00000400 */

+#define EXTI_FTSR_TR10                      EXTI_FTSR_TR10_Msk                 /*!< Falling trigger event configuration bit of line 10 */

+#define EXTI_FTSR_TR11_Pos                  (11U)                              

+#define EXTI_FTSR_TR11_Msk                  (0x1UL << EXTI_FTSR_TR11_Pos)       /*!< 0x00000800 */

+#define EXTI_FTSR_TR11                      EXTI_FTSR_TR11_Msk                 /*!< Falling trigger event configuration bit of line 11 */

+#define EXTI_FTSR_TR12_Pos                  (12U)                              

+#define EXTI_FTSR_TR12_Msk                  (0x1UL << EXTI_FTSR_TR12_Pos)       /*!< 0x00001000 */

+#define EXTI_FTSR_TR12                      EXTI_FTSR_TR12_Msk                 /*!< Falling trigger event configuration bit of line 12 */

+#define EXTI_FTSR_TR13_Pos                  (13U)                              

+#define EXTI_FTSR_TR13_Msk                  (0x1UL << EXTI_FTSR_TR13_Pos)       /*!< 0x00002000 */

+#define EXTI_FTSR_TR13                      EXTI_FTSR_TR13_Msk                 /*!< Falling trigger event configuration bit of line 13 */

+#define EXTI_FTSR_TR14_Pos                  (14U)                              

+#define EXTI_FTSR_TR14_Msk                  (0x1UL << EXTI_FTSR_TR14_Pos)       /*!< 0x00004000 */

+#define EXTI_FTSR_TR14                      EXTI_FTSR_TR14_Msk                 /*!< Falling trigger event configuration bit of line 14 */

+#define EXTI_FTSR_TR15_Pos                  (15U)                              

+#define EXTI_FTSR_TR15_Msk                  (0x1UL << EXTI_FTSR_TR15_Pos)       /*!< 0x00008000 */

+#define EXTI_FTSR_TR15                      EXTI_FTSR_TR15_Msk                 /*!< Falling trigger event configuration bit of line 15 */

+#define EXTI_FTSR_TR16_Pos                  (16U)                              

+#define EXTI_FTSR_TR16_Msk                  (0x1UL << EXTI_FTSR_TR16_Pos)       /*!< 0x00010000 */

+#define EXTI_FTSR_TR16                      EXTI_FTSR_TR16_Msk                 /*!< Falling trigger event configuration bit of line 16 */

+#define EXTI_FTSR_TR17_Pos                  (17U)                              

+#define EXTI_FTSR_TR17_Msk                  (0x1UL << EXTI_FTSR_TR17_Pos)       /*!< 0x00020000 */

+#define EXTI_FTSR_TR17                      EXTI_FTSR_TR17_Msk                 /*!< Falling trigger event configuration bit of line 17 */

+#define EXTI_FTSR_TR18_Pos                  (18U)                              

+#define EXTI_FTSR_TR18_Msk                  (0x1UL << EXTI_FTSR_TR18_Pos)       /*!< 0x00040000 */

+#define EXTI_FTSR_TR18                      EXTI_FTSR_TR18_Msk                 /*!< Falling trigger event configuration bit of line 18 */

+#define EXTI_FTSR_TR19_Pos                  (19U)                              

+#define EXTI_FTSR_TR19_Msk                  (0x1UL << EXTI_FTSR_TR19_Pos)       /*!< 0x00080000 */

+#define EXTI_FTSR_TR19                      EXTI_FTSR_TR19_Msk                 /*!< Falling trigger event configuration bit of line 19 */

+#define EXTI_FTSR_TR20_Pos                  (20U)                              

+#define EXTI_FTSR_TR20_Msk                  (0x1UL << EXTI_FTSR_TR20_Pos)       /*!< 0x00100000 */

+#define EXTI_FTSR_TR20                      EXTI_FTSR_TR20_Msk                 /*!< Falling trigger event configuration bit of line 20 */

+#define EXTI_FTSR_TR21_Pos                  (21U)                              

+#define EXTI_FTSR_TR21_Msk                  (0x1UL << EXTI_FTSR_TR21_Pos)       /*!< 0x00200000 */

+#define EXTI_FTSR_TR21                      EXTI_FTSR_TR21_Msk                 /*!< Falling trigger event configuration bit of line 21 */

+#define EXTI_FTSR_TR22_Pos                  (22U)                              

+#define EXTI_FTSR_TR22_Msk                  (0x1UL << EXTI_FTSR_TR22_Pos)       /*!< 0x00400000 */

+#define EXTI_FTSR_TR22                      EXTI_FTSR_TR22_Msk                 /*!< Falling trigger event configuration bit of line 22 */

+#define EXTI_FTSR_TR23_Pos                  (23U)                              

+#define EXTI_FTSR_TR23_Msk                  (0x1UL << EXTI_FTSR_TR23_Pos)       /*!< 0x00800000 */

+#define EXTI_FTSR_TR23                      EXTI_FTSR_TR23_Msk                 /*!< Falling trigger event configuration bit of line 23 */

+

+/* References Defines */

+#define  EXTI_FTSR_FT0 EXTI_FTSR_TR0

+#define  EXTI_FTSR_FT1 EXTI_FTSR_TR1

+#define  EXTI_FTSR_FT2 EXTI_FTSR_TR2

+#define  EXTI_FTSR_FT3 EXTI_FTSR_TR3

+#define  EXTI_FTSR_FT4 EXTI_FTSR_TR4

+#define  EXTI_FTSR_FT5 EXTI_FTSR_TR5

+#define  EXTI_FTSR_FT6 EXTI_FTSR_TR6

+#define  EXTI_FTSR_FT7 EXTI_FTSR_TR7

+#define  EXTI_FTSR_FT8 EXTI_FTSR_TR8

+#define  EXTI_FTSR_FT9 EXTI_FTSR_TR9

+#define  EXTI_FTSR_FT10 EXTI_FTSR_TR10

+#define  EXTI_FTSR_FT11 EXTI_FTSR_TR11

+#define  EXTI_FTSR_FT12 EXTI_FTSR_TR12

+#define  EXTI_FTSR_FT13 EXTI_FTSR_TR13

+#define  EXTI_FTSR_FT14 EXTI_FTSR_TR14

+#define  EXTI_FTSR_FT15 EXTI_FTSR_TR15

+#define  EXTI_FTSR_FT16 EXTI_FTSR_TR16

+#define  EXTI_FTSR_FT17 EXTI_FTSR_TR17

+#define  EXTI_FTSR_FT18 EXTI_FTSR_TR18

+#define  EXTI_FTSR_FT19 EXTI_FTSR_TR19

+#define  EXTI_FTSR_FT20 EXTI_FTSR_TR20

+#define  EXTI_FTSR_FT21 EXTI_FTSR_TR21

+#define  EXTI_FTSR_FT22 EXTI_FTSR_TR22

+#define  EXTI_FTSR_FT23 EXTI_FTSR_TR23

+

+/******************  Bit definition for EXTI_SWIER register  ******************/

+#define EXTI_SWIER_SWIER0_Pos               (0U)                               

+#define EXTI_SWIER_SWIER0_Msk               (0x1UL << EXTI_SWIER_SWIER0_Pos)    /*!< 0x00000001 */

+#define EXTI_SWIER_SWIER0                   EXTI_SWIER_SWIER0_Msk              /*!< Software Interrupt on line 0 */

+#define EXTI_SWIER_SWIER1_Pos               (1U)                               

+#define EXTI_SWIER_SWIER1_Msk               (0x1UL << EXTI_SWIER_SWIER1_Pos)    /*!< 0x00000002 */

+#define EXTI_SWIER_SWIER1                   EXTI_SWIER_SWIER1_Msk              /*!< Software Interrupt on line 1 */

+#define EXTI_SWIER_SWIER2_Pos               (2U)                               

+#define EXTI_SWIER_SWIER2_Msk               (0x1UL << EXTI_SWIER_SWIER2_Pos)    /*!< 0x00000004 */

+#define EXTI_SWIER_SWIER2                   EXTI_SWIER_SWIER2_Msk              /*!< Software Interrupt on line 2 */

+#define EXTI_SWIER_SWIER3_Pos               (3U)                               

+#define EXTI_SWIER_SWIER3_Msk               (0x1UL << EXTI_SWIER_SWIER3_Pos)    /*!< 0x00000008 */

+#define EXTI_SWIER_SWIER3                   EXTI_SWIER_SWIER3_Msk              /*!< Software Interrupt on line 3 */

+#define EXTI_SWIER_SWIER4_Pos               (4U)                               

+#define EXTI_SWIER_SWIER4_Msk               (0x1UL << EXTI_SWIER_SWIER4_Pos)    /*!< 0x00000010 */

+#define EXTI_SWIER_SWIER4                   EXTI_SWIER_SWIER4_Msk              /*!< Software Interrupt on line 4 */

+#define EXTI_SWIER_SWIER5_Pos               (5U)                               

+#define EXTI_SWIER_SWIER5_Msk               (0x1UL << EXTI_SWIER_SWIER5_Pos)    /*!< 0x00000020 */

+#define EXTI_SWIER_SWIER5                   EXTI_SWIER_SWIER5_Msk              /*!< Software Interrupt on line 5 */

+#define EXTI_SWIER_SWIER6_Pos               (6U)                               

+#define EXTI_SWIER_SWIER6_Msk               (0x1UL << EXTI_SWIER_SWIER6_Pos)    /*!< 0x00000040 */

+#define EXTI_SWIER_SWIER6                   EXTI_SWIER_SWIER6_Msk              /*!< Software Interrupt on line 6 */

+#define EXTI_SWIER_SWIER7_Pos               (7U)                               

+#define EXTI_SWIER_SWIER7_Msk               (0x1UL << EXTI_SWIER_SWIER7_Pos)    /*!< 0x00000080 */

+#define EXTI_SWIER_SWIER7                   EXTI_SWIER_SWIER7_Msk              /*!< Software Interrupt on line 7 */

+#define EXTI_SWIER_SWIER8_Pos               (8U)                               

+#define EXTI_SWIER_SWIER8_Msk               (0x1UL << EXTI_SWIER_SWIER8_Pos)    /*!< 0x00000100 */

+#define EXTI_SWIER_SWIER8                   EXTI_SWIER_SWIER8_Msk              /*!< Software Interrupt on line 8 */

+#define EXTI_SWIER_SWIER9_Pos               (9U)                               

+#define EXTI_SWIER_SWIER9_Msk               (0x1UL << EXTI_SWIER_SWIER9_Pos)    /*!< 0x00000200 */

+#define EXTI_SWIER_SWIER9                   EXTI_SWIER_SWIER9_Msk              /*!< Software Interrupt on line 9 */

+#define EXTI_SWIER_SWIER10_Pos              (10U)                              

+#define EXTI_SWIER_SWIER10_Msk              (0x1UL << EXTI_SWIER_SWIER10_Pos)   /*!< 0x00000400 */

+#define EXTI_SWIER_SWIER10                  EXTI_SWIER_SWIER10_Msk             /*!< Software Interrupt on line 10 */

+#define EXTI_SWIER_SWIER11_Pos              (11U)                              

+#define EXTI_SWIER_SWIER11_Msk              (0x1UL << EXTI_SWIER_SWIER11_Pos)   /*!< 0x00000800 */

+#define EXTI_SWIER_SWIER11                  EXTI_SWIER_SWIER11_Msk             /*!< Software Interrupt on line 11 */

+#define EXTI_SWIER_SWIER12_Pos              (12U)                              

+#define EXTI_SWIER_SWIER12_Msk              (0x1UL << EXTI_SWIER_SWIER12_Pos)   /*!< 0x00001000 */

+#define EXTI_SWIER_SWIER12                  EXTI_SWIER_SWIER12_Msk             /*!< Software Interrupt on line 12 */

+#define EXTI_SWIER_SWIER13_Pos              (13U)                              

+#define EXTI_SWIER_SWIER13_Msk              (0x1UL << EXTI_SWIER_SWIER13_Pos)   /*!< 0x00002000 */

+#define EXTI_SWIER_SWIER13                  EXTI_SWIER_SWIER13_Msk             /*!< Software Interrupt on line 13 */

+#define EXTI_SWIER_SWIER14_Pos              (14U)                              

+#define EXTI_SWIER_SWIER14_Msk              (0x1UL << EXTI_SWIER_SWIER14_Pos)   /*!< 0x00004000 */

+#define EXTI_SWIER_SWIER14                  EXTI_SWIER_SWIER14_Msk             /*!< Software Interrupt on line 14 */

+#define EXTI_SWIER_SWIER15_Pos              (15U)                              

+#define EXTI_SWIER_SWIER15_Msk              (0x1UL << EXTI_SWIER_SWIER15_Pos)   /*!< 0x00008000 */

+#define EXTI_SWIER_SWIER15                  EXTI_SWIER_SWIER15_Msk             /*!< Software Interrupt on line 15 */

+#define EXTI_SWIER_SWIER16_Pos              (16U)                              

+#define EXTI_SWIER_SWIER16_Msk              (0x1UL << EXTI_SWIER_SWIER16_Pos)   /*!< 0x00010000 */

+#define EXTI_SWIER_SWIER16                  EXTI_SWIER_SWIER16_Msk             /*!< Software Interrupt on line 16 */

+#define EXTI_SWIER_SWIER17_Pos              (17U)                              

+#define EXTI_SWIER_SWIER17_Msk              (0x1UL << EXTI_SWIER_SWIER17_Pos)   /*!< 0x00020000 */

+#define EXTI_SWIER_SWIER17                  EXTI_SWIER_SWIER17_Msk             /*!< Software Interrupt on line 17 */

+#define EXTI_SWIER_SWIER18_Pos              (18U)                              

+#define EXTI_SWIER_SWIER18_Msk              (0x1UL << EXTI_SWIER_SWIER18_Pos)   /*!< 0x00040000 */

+#define EXTI_SWIER_SWIER18                  EXTI_SWIER_SWIER18_Msk             /*!< Software Interrupt on line 18 */

+#define EXTI_SWIER_SWIER19_Pos              (19U)                              

+#define EXTI_SWIER_SWIER19_Msk              (0x1UL << EXTI_SWIER_SWIER19_Pos)   /*!< 0x00080000 */

+#define EXTI_SWIER_SWIER19                  EXTI_SWIER_SWIER19_Msk             /*!< Software Interrupt on line 19 */

+#define EXTI_SWIER_SWIER20_Pos              (20U)                              

+#define EXTI_SWIER_SWIER20_Msk              (0x1UL << EXTI_SWIER_SWIER20_Pos)   /*!< 0x00100000 */

+#define EXTI_SWIER_SWIER20                  EXTI_SWIER_SWIER20_Msk             /*!< Software Interrupt on line 20 */

+#define EXTI_SWIER_SWIER21_Pos              (21U)                              

+#define EXTI_SWIER_SWIER21_Msk              (0x1UL << EXTI_SWIER_SWIER21_Pos)   /*!< 0x00200000 */

+#define EXTI_SWIER_SWIER21                  EXTI_SWIER_SWIER21_Msk             /*!< Software Interrupt on line 21 */

+#define EXTI_SWIER_SWIER22_Pos              (22U)                              

+#define EXTI_SWIER_SWIER22_Msk              (0x1UL << EXTI_SWIER_SWIER22_Pos)   /*!< 0x00400000 */

+#define EXTI_SWIER_SWIER22                  EXTI_SWIER_SWIER22_Msk             /*!< Software Interrupt on line 22 */

+#define EXTI_SWIER_SWIER23_Pos              (23U)                              

+#define EXTI_SWIER_SWIER23_Msk              (0x1UL << EXTI_SWIER_SWIER23_Pos)   /*!< 0x00800000 */

+#define EXTI_SWIER_SWIER23                  EXTI_SWIER_SWIER23_Msk             /*!< Software Interrupt on line 23 */

+

+/* References Defines */

+#define  EXTI_SWIER_SWI0 EXTI_SWIER_SWIER0

+#define  EXTI_SWIER_SWI1 EXTI_SWIER_SWIER1

+#define  EXTI_SWIER_SWI2 EXTI_SWIER_SWIER2

+#define  EXTI_SWIER_SWI3 EXTI_SWIER_SWIER3

+#define  EXTI_SWIER_SWI4 EXTI_SWIER_SWIER4

+#define  EXTI_SWIER_SWI5 EXTI_SWIER_SWIER5

+#define  EXTI_SWIER_SWI6 EXTI_SWIER_SWIER6

+#define  EXTI_SWIER_SWI7 EXTI_SWIER_SWIER7

+#define  EXTI_SWIER_SWI8 EXTI_SWIER_SWIER8

+#define  EXTI_SWIER_SWI9 EXTI_SWIER_SWIER9

+#define  EXTI_SWIER_SWI10 EXTI_SWIER_SWIER10

+#define  EXTI_SWIER_SWI11 EXTI_SWIER_SWIER11

+#define  EXTI_SWIER_SWI12 EXTI_SWIER_SWIER12

+#define  EXTI_SWIER_SWI13 EXTI_SWIER_SWIER13

+#define  EXTI_SWIER_SWI14 EXTI_SWIER_SWIER14

+#define  EXTI_SWIER_SWI15 EXTI_SWIER_SWIER15

+#define  EXTI_SWIER_SWI16 EXTI_SWIER_SWIER16

+#define  EXTI_SWIER_SWI17 EXTI_SWIER_SWIER17

+#define  EXTI_SWIER_SWI18 EXTI_SWIER_SWIER18

+#define  EXTI_SWIER_SWI19 EXTI_SWIER_SWIER19

+#define  EXTI_SWIER_SWI20 EXTI_SWIER_SWIER20

+#define  EXTI_SWIER_SWI21 EXTI_SWIER_SWIER21

+#define  EXTI_SWIER_SWI22 EXTI_SWIER_SWIER22

+#define  EXTI_SWIER_SWI23 EXTI_SWIER_SWIER23

+

+/*******************  Bit definition for EXTI_PR register  ********************/

+#define EXTI_PR_PR0_Pos                     (0U)                               

+#define EXTI_PR_PR0_Msk                     (0x1UL << EXTI_PR_PR0_Pos)          /*!< 0x00000001 */

+#define EXTI_PR_PR0                         EXTI_PR_PR0_Msk                    /*!< Pending bit for line 0 */

+#define EXTI_PR_PR1_Pos                     (1U)                               

+#define EXTI_PR_PR1_Msk                     (0x1UL << EXTI_PR_PR1_Pos)          /*!< 0x00000002 */

+#define EXTI_PR_PR1                         EXTI_PR_PR1_Msk                    /*!< Pending bit for line 1 */

+#define EXTI_PR_PR2_Pos                     (2U)                               

+#define EXTI_PR_PR2_Msk                     (0x1UL << EXTI_PR_PR2_Pos)          /*!< 0x00000004 */

+#define EXTI_PR_PR2                         EXTI_PR_PR2_Msk                    /*!< Pending bit for line 2 */

+#define EXTI_PR_PR3_Pos                     (3U)                               

+#define EXTI_PR_PR3_Msk                     (0x1UL << EXTI_PR_PR3_Pos)          /*!< 0x00000008 */

+#define EXTI_PR_PR3                         EXTI_PR_PR3_Msk                    /*!< Pending bit for line 3 */

+#define EXTI_PR_PR4_Pos                     (4U)                               

+#define EXTI_PR_PR4_Msk                     (0x1UL << EXTI_PR_PR4_Pos)          /*!< 0x00000010 */

+#define EXTI_PR_PR4                         EXTI_PR_PR4_Msk                    /*!< Pending bit for line 4 */

+#define EXTI_PR_PR5_Pos                     (5U)                               

+#define EXTI_PR_PR5_Msk                     (0x1UL << EXTI_PR_PR5_Pos)          /*!< 0x00000020 */

+#define EXTI_PR_PR5                         EXTI_PR_PR5_Msk                    /*!< Pending bit for line 5 */

+#define EXTI_PR_PR6_Pos                     (6U)                               

+#define EXTI_PR_PR6_Msk                     (0x1UL << EXTI_PR_PR6_Pos)          /*!< 0x00000040 */

+#define EXTI_PR_PR6                         EXTI_PR_PR6_Msk                    /*!< Pending bit for line 6 */

+#define EXTI_PR_PR7_Pos                     (7U)                               

+#define EXTI_PR_PR7_Msk                     (0x1UL << EXTI_PR_PR7_Pos)          /*!< 0x00000080 */

+#define EXTI_PR_PR7                         EXTI_PR_PR7_Msk                    /*!< Pending bit for line 7 */

+#define EXTI_PR_PR8_Pos                     (8U)                               

+#define EXTI_PR_PR8_Msk                     (0x1UL << EXTI_PR_PR8_Pos)          /*!< 0x00000100 */

+#define EXTI_PR_PR8                         EXTI_PR_PR8_Msk                    /*!< Pending bit for line 8 */

+#define EXTI_PR_PR9_Pos                     (9U)                               

+#define EXTI_PR_PR9_Msk                     (0x1UL << EXTI_PR_PR9_Pos)          /*!< 0x00000200 */

+#define EXTI_PR_PR9                         EXTI_PR_PR9_Msk                    /*!< Pending bit for line 9 */

+#define EXTI_PR_PR10_Pos                    (10U)                              

+#define EXTI_PR_PR10_Msk                    (0x1UL << EXTI_PR_PR10_Pos)         /*!< 0x00000400 */

+#define EXTI_PR_PR10                        EXTI_PR_PR10_Msk                   /*!< Pending bit for line 10 */

+#define EXTI_PR_PR11_Pos                    (11U)                              

+#define EXTI_PR_PR11_Msk                    (0x1UL << EXTI_PR_PR11_Pos)         /*!< 0x00000800 */

+#define EXTI_PR_PR11                        EXTI_PR_PR11_Msk                   /*!< Pending bit for line 11 */

+#define EXTI_PR_PR12_Pos                    (12U)                              

+#define EXTI_PR_PR12_Msk                    (0x1UL << EXTI_PR_PR12_Pos)         /*!< 0x00001000 */

+#define EXTI_PR_PR12                        EXTI_PR_PR12_Msk                   /*!< Pending bit for line 12 */

+#define EXTI_PR_PR13_Pos                    (13U)                              

+#define EXTI_PR_PR13_Msk                    (0x1UL << EXTI_PR_PR13_Pos)         /*!< 0x00002000 */

+#define EXTI_PR_PR13                        EXTI_PR_PR13_Msk                   /*!< Pending bit for line 13 */

+#define EXTI_PR_PR14_Pos                    (14U)                              

+#define EXTI_PR_PR14_Msk                    (0x1UL << EXTI_PR_PR14_Pos)         /*!< 0x00004000 */

+#define EXTI_PR_PR14                        EXTI_PR_PR14_Msk                   /*!< Pending bit for line 14 */

+#define EXTI_PR_PR15_Pos                    (15U)                              

+#define EXTI_PR_PR15_Msk                    (0x1UL << EXTI_PR_PR15_Pos)         /*!< 0x00008000 */

+#define EXTI_PR_PR15                        EXTI_PR_PR15_Msk                   /*!< Pending bit for line 15 */

+#define EXTI_PR_PR16_Pos                    (16U)                              

+#define EXTI_PR_PR16_Msk                    (0x1UL << EXTI_PR_PR16_Pos)         /*!< 0x00010000 */

+#define EXTI_PR_PR16                        EXTI_PR_PR16_Msk                   /*!< Pending bit for line 16 */

+#define EXTI_PR_PR17_Pos                    (17U)                              

+#define EXTI_PR_PR17_Msk                    (0x1UL << EXTI_PR_PR17_Pos)         /*!< 0x00020000 */

+#define EXTI_PR_PR17                        EXTI_PR_PR17_Msk                   /*!< Pending bit for line 17 */

+#define EXTI_PR_PR18_Pos                    (18U)                              

+#define EXTI_PR_PR18_Msk                    (0x1UL << EXTI_PR_PR18_Pos)         /*!< 0x00040000 */

+#define EXTI_PR_PR18                        EXTI_PR_PR18_Msk                   /*!< Pending bit for line 18 */

+#define EXTI_PR_PR19_Pos                    (19U)                              

+#define EXTI_PR_PR19_Msk                    (0x1UL << EXTI_PR_PR19_Pos)         /*!< 0x00080000 */

+#define EXTI_PR_PR19                        EXTI_PR_PR19_Msk                   /*!< Pending bit for line 19 */

+#define EXTI_PR_PR20_Pos                    (20U)                              

+#define EXTI_PR_PR20_Msk                    (0x1UL << EXTI_PR_PR20_Pos)         /*!< 0x00100000 */

+#define EXTI_PR_PR20                        EXTI_PR_PR20_Msk                   /*!< Pending bit for line 20 */

+#define EXTI_PR_PR21_Pos                    (21U)                              

+#define EXTI_PR_PR21_Msk                    (0x1UL << EXTI_PR_PR21_Pos)         /*!< 0x00200000 */

+#define EXTI_PR_PR21                        EXTI_PR_PR21_Msk                   /*!< Pending bit for line 21 */

+#define EXTI_PR_PR22_Pos                    (22U)                              

+#define EXTI_PR_PR22_Msk                    (0x1UL << EXTI_PR_PR22_Pos)         /*!< 0x00400000 */

+#define EXTI_PR_PR22                        EXTI_PR_PR22_Msk                   /*!< Pending bit for line 22 */

+#define EXTI_PR_PR23_Pos                    (23U)                              

+#define EXTI_PR_PR23_Msk                    (0x1UL << EXTI_PR_PR23_Pos)         /*!< 0x00800000 */

+#define EXTI_PR_PR23                        EXTI_PR_PR23_Msk                   /*!< Pending bit for line 23 */

+

+/* References Defines */

+#define  EXTI_PR_PIF0 EXTI_PR_PR0

+#define  EXTI_PR_PIF1 EXTI_PR_PR1

+#define  EXTI_PR_PIF2 EXTI_PR_PR2

+#define  EXTI_PR_PIF3 EXTI_PR_PR3

+#define  EXTI_PR_PIF4 EXTI_PR_PR4

+#define  EXTI_PR_PIF5 EXTI_PR_PR5

+#define  EXTI_PR_PIF6 EXTI_PR_PR6

+#define  EXTI_PR_PIF7 EXTI_PR_PR7

+#define  EXTI_PR_PIF8 EXTI_PR_PR8

+#define  EXTI_PR_PIF9 EXTI_PR_PR9

+#define  EXTI_PR_PIF10 EXTI_PR_PR10

+#define  EXTI_PR_PIF11 EXTI_PR_PR11

+#define  EXTI_PR_PIF12 EXTI_PR_PR12

+#define  EXTI_PR_PIF13 EXTI_PR_PR13

+#define  EXTI_PR_PIF14 EXTI_PR_PR14

+#define  EXTI_PR_PIF15 EXTI_PR_PR15

+#define  EXTI_PR_PIF16 EXTI_PR_PR16

+#define  EXTI_PR_PIF17 EXTI_PR_PR17

+#define  EXTI_PR_PIF18 EXTI_PR_PR18

+#define  EXTI_PR_PIF19 EXTI_PR_PR19

+#define  EXTI_PR_PIF20 EXTI_PR_PR20

+#define  EXTI_PR_PIF21 EXTI_PR_PR21

+#define  EXTI_PR_PIF22 EXTI_PR_PR22

+#define  EXTI_PR_PIF23 EXTI_PR_PR23

+

+/******************************************************************************/

+/*                                                                            */

+/*                FLASH, DATA EEPROM and Option Bytes Registers               */

+/*                        (FLASH, DATA_EEPROM, OB)                            */

+/*                                                                            */

+/******************************************************************************/

+

+/*******************  Bit definition for FLASH_ACR register  ******************/

+#define FLASH_ACR_LATENCY_Pos                (0U)                              

+#define FLASH_ACR_LATENCY_Msk                (0x1UL << FLASH_ACR_LATENCY_Pos)   /*!< 0x00000001 */

+#define FLASH_ACR_LATENCY                    FLASH_ACR_LATENCY_Msk             /*!< Latency */

+#define FLASH_ACR_PRFTEN_Pos                 (1U)                              

+#define FLASH_ACR_PRFTEN_Msk                 (0x1UL << FLASH_ACR_PRFTEN_Pos)    /*!< 0x00000002 */

+#define FLASH_ACR_PRFTEN                     FLASH_ACR_PRFTEN_Msk              /*!< Prefetch Buffer Enable */

+#define FLASH_ACR_ACC64_Pos                  (2U)                              

+#define FLASH_ACR_ACC64_Msk                  (0x1UL << FLASH_ACR_ACC64_Pos)     /*!< 0x00000004 */

+#define FLASH_ACR_ACC64                      FLASH_ACR_ACC64_Msk               /*!< Access 64 bits */

+#define FLASH_ACR_SLEEP_PD_Pos               (3U)                              

+#define FLASH_ACR_SLEEP_PD_Msk               (0x1UL << FLASH_ACR_SLEEP_PD_Pos)  /*!< 0x00000008 */

+#define FLASH_ACR_SLEEP_PD                   FLASH_ACR_SLEEP_PD_Msk            /*!< Flash mode during sleep mode */

+#define FLASH_ACR_RUN_PD_Pos                 (4U)                              

+#define FLASH_ACR_RUN_PD_Msk                 (0x1UL << FLASH_ACR_RUN_PD_Pos)    /*!< 0x00000010 */

+#define FLASH_ACR_RUN_PD                     FLASH_ACR_RUN_PD_Msk              /*!< Flash mode during RUN mode */

+

+/*******************  Bit definition for FLASH_PECR register  ******************/

+#define FLASH_PECR_PELOCK_Pos                (0U)                              

+#define FLASH_PECR_PELOCK_Msk                (0x1UL << FLASH_PECR_PELOCK_Pos)   /*!< 0x00000001 */

+#define FLASH_PECR_PELOCK                    FLASH_PECR_PELOCK_Msk             /*!< FLASH_PECR and Flash data Lock */

+#define FLASH_PECR_PRGLOCK_Pos               (1U)                              

+#define FLASH_PECR_PRGLOCK_Msk               (0x1UL << FLASH_PECR_PRGLOCK_Pos)  /*!< 0x00000002 */

+#define FLASH_PECR_PRGLOCK                   FLASH_PECR_PRGLOCK_Msk            /*!< Program matrix Lock */

+#define FLASH_PECR_OPTLOCK_Pos               (2U)                              

+#define FLASH_PECR_OPTLOCK_Msk               (0x1UL << FLASH_PECR_OPTLOCK_Pos)  /*!< 0x00000004 */

+#define FLASH_PECR_OPTLOCK                   FLASH_PECR_OPTLOCK_Msk            /*!< Option byte matrix Lock */

+#define FLASH_PECR_PROG_Pos                  (3U)                              

+#define FLASH_PECR_PROG_Msk                  (0x1UL << FLASH_PECR_PROG_Pos)     /*!< 0x00000008 */

+#define FLASH_PECR_PROG                      FLASH_PECR_PROG_Msk               /*!< Program matrix selection */

+#define FLASH_PECR_DATA_Pos                  (4U)                              

+#define FLASH_PECR_DATA_Msk                  (0x1UL << FLASH_PECR_DATA_Pos)     /*!< 0x00000010 */

+#define FLASH_PECR_DATA                      FLASH_PECR_DATA_Msk               /*!< Data matrix selection */

+#define FLASH_PECR_FTDW_Pos                  (8U)                              

+#define FLASH_PECR_FTDW_Msk                  (0x1UL << FLASH_PECR_FTDW_Pos)     /*!< 0x00000100 */

+#define FLASH_PECR_FTDW                      FLASH_PECR_FTDW_Msk               /*!< Fixed Time Data write for Word/Half Word/Byte programming */

+#define FLASH_PECR_ERASE_Pos                 (9U)                              

+#define FLASH_PECR_ERASE_Msk                 (0x1UL << FLASH_PECR_ERASE_Pos)    /*!< 0x00000200 */

+#define FLASH_PECR_ERASE                     FLASH_PECR_ERASE_Msk              /*!< Page erasing mode */

+#define FLASH_PECR_FPRG_Pos                  (10U)                             

+#define FLASH_PECR_FPRG_Msk                  (0x1UL << FLASH_PECR_FPRG_Pos)     /*!< 0x00000400 */

+#define FLASH_PECR_FPRG                      FLASH_PECR_FPRG_Msk               /*!< Fast Page/Half Page programming mode */

+#define FLASH_PECR_PARALLBANK_Pos            (15U)                             

+#define FLASH_PECR_PARALLBANK_Msk            (0x1UL << FLASH_PECR_PARALLBANK_Pos) /*!< 0x00008000 */

+#define FLASH_PECR_PARALLBANK                FLASH_PECR_PARALLBANK_Msk         /*!< Parallel Bank mode */

+#define FLASH_PECR_EOPIE_Pos                 (16U)                             

+#define FLASH_PECR_EOPIE_Msk                 (0x1UL << FLASH_PECR_EOPIE_Pos)    /*!< 0x00010000 */

+#define FLASH_PECR_EOPIE                     FLASH_PECR_EOPIE_Msk              /*!< End of programming interrupt */ 

+#define FLASH_PECR_ERRIE_Pos                 (17U)                             

+#define FLASH_PECR_ERRIE_Msk                 (0x1UL << FLASH_PECR_ERRIE_Pos)    /*!< 0x00020000 */

+#define FLASH_PECR_ERRIE                     FLASH_PECR_ERRIE_Msk              /*!< Error interrupt */ 

+#define FLASH_PECR_OBL_LAUNCH_Pos            (18U)                             

+#define FLASH_PECR_OBL_LAUNCH_Msk            (0x1UL << FLASH_PECR_OBL_LAUNCH_Pos) /*!< 0x00040000 */

+#define FLASH_PECR_OBL_LAUNCH                FLASH_PECR_OBL_LAUNCH_Msk         /*!< Launch the option byte loading */ 

+

+/******************  Bit definition for FLASH_PDKEYR register  ******************/

+#define FLASH_PDKEYR_PDKEYR_Pos              (0U)                              

+#define FLASH_PDKEYR_PDKEYR_Msk              (0xFFFFFFFFUL << FLASH_PDKEYR_PDKEYR_Pos) /*!< 0xFFFFFFFF */

+#define FLASH_PDKEYR_PDKEYR                  FLASH_PDKEYR_PDKEYR_Msk           /*!< FLASH_PEC and data matrix Key */

+

+/******************  Bit definition for FLASH_PEKEYR register  ******************/

+#define FLASH_PEKEYR_PEKEYR_Pos              (0U)                              

+#define FLASH_PEKEYR_PEKEYR_Msk              (0xFFFFFFFFUL << FLASH_PEKEYR_PEKEYR_Pos) /*!< 0xFFFFFFFF */

+#define FLASH_PEKEYR_PEKEYR                  FLASH_PEKEYR_PEKEYR_Msk           /*!< FLASH_PEC and data matrix Key */

+

+/******************  Bit definition for FLASH_PRGKEYR register  ******************/

+#define FLASH_PRGKEYR_PRGKEYR_Pos            (0U)                              

+#define FLASH_PRGKEYR_PRGKEYR_Msk            (0xFFFFFFFFUL << FLASH_PRGKEYR_PRGKEYR_Pos) /*!< 0xFFFFFFFF */

+#define FLASH_PRGKEYR_PRGKEYR                FLASH_PRGKEYR_PRGKEYR_Msk         /*!< Program matrix Key */

+

+/******************  Bit definition for FLASH_OPTKEYR register  ******************/

+#define FLASH_OPTKEYR_OPTKEYR_Pos            (0U)                              

+#define FLASH_OPTKEYR_OPTKEYR_Msk            (0xFFFFFFFFUL << FLASH_OPTKEYR_OPTKEYR_Pos) /*!< 0xFFFFFFFF */

+#define FLASH_OPTKEYR_OPTKEYR                FLASH_OPTKEYR_OPTKEYR_Msk         /*!< Option bytes matrix Key */

+

+/******************  Bit definition for FLASH_SR register  *******************/

+#define FLASH_SR_BSY_Pos                     (0U)                              

+#define FLASH_SR_BSY_Msk                     (0x1UL << FLASH_SR_BSY_Pos)        /*!< 0x00000001 */

+#define FLASH_SR_BSY                         FLASH_SR_BSY_Msk                  /*!< Busy */

+#define FLASH_SR_EOP_Pos                     (1U)                              

+#define FLASH_SR_EOP_Msk                     (0x1UL << FLASH_SR_EOP_Pos)        /*!< 0x00000002 */

+#define FLASH_SR_EOP                         FLASH_SR_EOP_Msk                  /*!< End Of Programming*/

+#define FLASH_SR_ENDHV_Pos                   (2U)                              

+#define FLASH_SR_ENDHV_Msk                   (0x1UL << FLASH_SR_ENDHV_Pos)      /*!< 0x00000004 */

+#define FLASH_SR_ENDHV                       FLASH_SR_ENDHV_Msk                /*!< End of high voltage */

+#define FLASH_SR_READY_Pos                   (3U)                              

+#define FLASH_SR_READY_Msk                   (0x1UL << FLASH_SR_READY_Pos)      /*!< 0x00000008 */

+#define FLASH_SR_READY                       FLASH_SR_READY_Msk                /*!< Flash ready after low power mode */

+

+#define FLASH_SR_WRPERR_Pos                  (8U)                              

+#define FLASH_SR_WRPERR_Msk                  (0x1UL << FLASH_SR_WRPERR_Pos)     /*!< 0x00000100 */

+#define FLASH_SR_WRPERR                      FLASH_SR_WRPERR_Msk               /*!< Write protected error */

+#define FLASH_SR_PGAERR_Pos                  (9U)                              

+#define FLASH_SR_PGAERR_Msk                  (0x1UL << FLASH_SR_PGAERR_Pos)     /*!< 0x00000200 */

+#define FLASH_SR_PGAERR                      FLASH_SR_PGAERR_Msk               /*!< Programming Alignment Error */

+#define FLASH_SR_SIZERR_Pos                  (10U)                             

+#define FLASH_SR_SIZERR_Msk                  (0x1UL << FLASH_SR_SIZERR_Pos)     /*!< 0x00000400 */

+#define FLASH_SR_SIZERR                      FLASH_SR_SIZERR_Msk               /*!< Size error */

+#define FLASH_SR_OPTVERR_Pos                 (11U)                             

+#define FLASH_SR_OPTVERR_Msk                 (0x1UL << FLASH_SR_OPTVERR_Pos)    /*!< 0x00000800 */

+#define FLASH_SR_OPTVERR                     FLASH_SR_OPTVERR_Msk              /*!< Option validity error */

+#define FLASH_SR_OPTVERRUSR_Pos              (12U)                             

+#define FLASH_SR_OPTVERRUSR_Msk              (0x1UL << FLASH_SR_OPTVERRUSR_Pos) /*!< 0x00001000 */

+#define FLASH_SR_OPTVERRUSR                  FLASH_SR_OPTVERRUSR_Msk           /*!< Option User validity error */

+

+/******************  Bit definition for FLASH_OBR register  *******************/

+#define FLASH_OBR_RDPRT_Pos                  (0U)                              

+#define FLASH_OBR_RDPRT_Msk                  (0xFFUL << FLASH_OBR_RDPRT_Pos)    /*!< 0x000000FF */

+#define FLASH_OBR_RDPRT                      FLASH_OBR_RDPRT_Msk               /*!< Read Protection */

+#define FLASH_OBR_BOR_LEV_Pos                (16U)                             

+#define FLASH_OBR_BOR_LEV_Msk                (0xFUL << FLASH_OBR_BOR_LEV_Pos)   /*!< 0x000F0000 */

+#define FLASH_OBR_BOR_LEV                    FLASH_OBR_BOR_LEV_Msk             /*!< BOR_LEV[3:0] Brown Out Reset Threshold Level*/

+#define FLASH_OBR_USER_Pos                   (20U)                             

+#define FLASH_OBR_USER_Msk                   (0xFUL << FLASH_OBR_USER_Pos)      /*!< 0x00F00000 */

+#define FLASH_OBR_USER                       FLASH_OBR_USER_Msk                /*!< User Option Bytes */

+#define FLASH_OBR_IWDG_SW_Pos                (20U)                             

+#define FLASH_OBR_IWDG_SW_Msk                (0x1UL << FLASH_OBR_IWDG_SW_Pos)   /*!< 0x00100000 */

+#define FLASH_OBR_IWDG_SW                    FLASH_OBR_IWDG_SW_Msk             /*!< IWDG_SW */

+#define FLASH_OBR_nRST_STOP_Pos              (21U)                             

+#define FLASH_OBR_nRST_STOP_Msk              (0x1UL << FLASH_OBR_nRST_STOP_Pos) /*!< 0x00200000 */

+#define FLASH_OBR_nRST_STOP                  FLASH_OBR_nRST_STOP_Msk           /*!< nRST_STOP */

+#define FLASH_OBR_nRST_STDBY_Pos             (22U)                             

+#define FLASH_OBR_nRST_STDBY_Msk             (0x1UL << FLASH_OBR_nRST_STDBY_Pos) /*!< 0x00400000 */

+#define FLASH_OBR_nRST_STDBY                 FLASH_OBR_nRST_STDBY_Msk          /*!< nRST_STDBY */

+#define FLASH_OBR_nRST_BFB2_Pos              (23U)                             

+#define FLASH_OBR_nRST_BFB2_Msk              (0x1UL << FLASH_OBR_nRST_BFB2_Pos) /*!< 0x00800000 */

+#define FLASH_OBR_nRST_BFB2                  FLASH_OBR_nRST_BFB2_Msk           /*!< BFB2 */

+

+/******************  Bit definition for FLASH_WRPR register  ******************/

+#define FLASH_WRPR1_WRP_Pos                  (0U)                              

+#define FLASH_WRPR1_WRP_Msk                  (0xFFFFFFFFUL << FLASH_WRPR1_WRP_Pos) /*!< 0xFFFFFFFF */

+#define FLASH_WRPR1_WRP                      FLASH_WRPR1_WRP_Msk               /*!< Write Protect sectors 0  to 31  */

+#define FLASH_WRPR2_WRP_Pos                  (0U)                              

+#define FLASH_WRPR2_WRP_Msk                  (0xFFFFFFFFUL << FLASH_WRPR2_WRP_Pos) /*!< 0xFFFFFFFF */

+#define FLASH_WRPR2_WRP                      FLASH_WRPR2_WRP_Msk               /*!< Write Protect sectors 32 to 63  */             

+#define FLASH_WRPR3_WRP_Pos                  (0U)                              

+#define FLASH_WRPR3_WRP_Msk                  (0xFFFFFFFFUL << FLASH_WRPR3_WRP_Pos) /*!< 0xFFFFFFFF */

+#define FLASH_WRPR3_WRP                      FLASH_WRPR3_WRP_Msk               /*!< Write Protect sectors 64 to 95  */ 

+#define FLASH_WRPR4_WRP_Pos                  (0U)                              

+#define FLASH_WRPR4_WRP_Msk                  (0xFFFFFFFFUL << FLASH_WRPR4_WRP_Pos) /*!< 0xFFFFFFFF */

+#define FLASH_WRPR4_WRP                      FLASH_WRPR4_WRP_Msk               /*!< Write Protect sectors 96 to 127 */ 

+

+/******************************************************************************/

+/*                                                                            */

+/*                            General Purpose I/O                             */

+/*                                                                            */

+/******************************************************************************/

+/******************  Bits definition for GPIO_MODER register  *****************/

+#define GPIO_MODER_MODER0_Pos                (0U)                              

+#define GPIO_MODER_MODER0_Msk                (0x3UL << GPIO_MODER_MODER0_Pos)   /*!< 0x00000003 */

+#define GPIO_MODER_MODER0                    GPIO_MODER_MODER0_Msk             

+#define GPIO_MODER_MODER0_0                  (0x1UL << GPIO_MODER_MODER0_Pos)   /*!< 0x00000001 */

+#define GPIO_MODER_MODER0_1                  (0x2UL << GPIO_MODER_MODER0_Pos)   /*!< 0x00000002 */

+

+#define GPIO_MODER_MODER1_Pos                (2U)                              

+#define GPIO_MODER_MODER1_Msk                (0x3UL << GPIO_MODER_MODER1_Pos)   /*!< 0x0000000C */

+#define GPIO_MODER_MODER1                    GPIO_MODER_MODER1_Msk             

+#define GPIO_MODER_MODER1_0                  (0x1UL << GPIO_MODER_MODER1_Pos)   /*!< 0x00000004 */

+#define GPIO_MODER_MODER1_1                  (0x2UL << GPIO_MODER_MODER1_Pos)   /*!< 0x00000008 */

+

+#define GPIO_MODER_MODER2_Pos                (4U)                              

+#define GPIO_MODER_MODER2_Msk                (0x3UL << GPIO_MODER_MODER2_Pos)   /*!< 0x00000030 */

+#define GPIO_MODER_MODER2                    GPIO_MODER_MODER2_Msk             

+#define GPIO_MODER_MODER2_0                  (0x1UL << GPIO_MODER_MODER2_Pos)   /*!< 0x00000010 */

+#define GPIO_MODER_MODER2_1                  (0x2UL << GPIO_MODER_MODER2_Pos)   /*!< 0x00000020 */

+

+#define GPIO_MODER_MODER3_Pos                (6U)                              

+#define GPIO_MODER_MODER3_Msk                (0x3UL << GPIO_MODER_MODER3_Pos)   /*!< 0x000000C0 */

+#define GPIO_MODER_MODER3                    GPIO_MODER_MODER3_Msk             

+#define GPIO_MODER_MODER3_0                  (0x1UL << GPIO_MODER_MODER3_Pos)   /*!< 0x00000040 */

+#define GPIO_MODER_MODER3_1                  (0x2UL << GPIO_MODER_MODER3_Pos)   /*!< 0x00000080 */

+

+#define GPIO_MODER_MODER4_Pos                (8U)                              

+#define GPIO_MODER_MODER4_Msk                (0x3UL << GPIO_MODER_MODER4_Pos)   /*!< 0x00000300 */

+#define GPIO_MODER_MODER4                    GPIO_MODER_MODER4_Msk             

+#define GPIO_MODER_MODER4_0                  (0x1UL << GPIO_MODER_MODER4_Pos)   /*!< 0x00000100 */

+#define GPIO_MODER_MODER4_1                  (0x2UL << GPIO_MODER_MODER4_Pos)   /*!< 0x00000200 */

+

+#define GPIO_MODER_MODER5_Pos                (10U)                             

+#define GPIO_MODER_MODER5_Msk                (0x3UL << GPIO_MODER_MODER5_Pos)   /*!< 0x00000C00 */

+#define GPIO_MODER_MODER5                    GPIO_MODER_MODER5_Msk             

+#define GPIO_MODER_MODER5_0                  (0x1UL << GPIO_MODER_MODER5_Pos)   /*!< 0x00000400 */

+#define GPIO_MODER_MODER5_1                  (0x2UL << GPIO_MODER_MODER5_Pos)   /*!< 0x00000800 */

+

+#define GPIO_MODER_MODER6_Pos                (12U)                             

+#define GPIO_MODER_MODER6_Msk                (0x3UL << GPIO_MODER_MODER6_Pos)   /*!< 0x00003000 */

+#define GPIO_MODER_MODER6                    GPIO_MODER_MODER6_Msk             

+#define GPIO_MODER_MODER6_0                  (0x1UL << GPIO_MODER_MODER6_Pos)   /*!< 0x00001000 */

+#define GPIO_MODER_MODER6_1                  (0x2UL << GPIO_MODER_MODER6_Pos)   /*!< 0x00002000 */

+

+#define GPIO_MODER_MODER7_Pos                (14U)                             

+#define GPIO_MODER_MODER7_Msk                (0x3UL << GPIO_MODER_MODER7_Pos)   /*!< 0x0000C000 */

+#define GPIO_MODER_MODER7                    GPIO_MODER_MODER7_Msk             

+#define GPIO_MODER_MODER7_0                  (0x1UL << GPIO_MODER_MODER7_Pos)   /*!< 0x00004000 */

+#define GPIO_MODER_MODER7_1                  (0x2UL << GPIO_MODER_MODER7_Pos)   /*!< 0x00008000 */

+

+#define GPIO_MODER_MODER8_Pos                (16U)                             

+#define GPIO_MODER_MODER8_Msk                (0x3UL << GPIO_MODER_MODER8_Pos)   /*!< 0x00030000 */

+#define GPIO_MODER_MODER8                    GPIO_MODER_MODER8_Msk             

+#define GPIO_MODER_MODER8_0                  (0x1UL << GPIO_MODER_MODER8_Pos)   /*!< 0x00010000 */

+#define GPIO_MODER_MODER8_1                  (0x2UL << GPIO_MODER_MODER8_Pos)   /*!< 0x00020000 */

+

+#define GPIO_MODER_MODER9_Pos                (18U)                             

+#define GPIO_MODER_MODER9_Msk                (0x3UL << GPIO_MODER_MODER9_Pos)   /*!< 0x000C0000 */

+#define GPIO_MODER_MODER9                    GPIO_MODER_MODER9_Msk             

+#define GPIO_MODER_MODER9_0                  (0x1UL << GPIO_MODER_MODER9_Pos)   /*!< 0x00040000 */

+#define GPIO_MODER_MODER9_1                  (0x2UL << GPIO_MODER_MODER9_Pos)   /*!< 0x00080000 */

+

+#define GPIO_MODER_MODER10_Pos               (20U)                             

+#define GPIO_MODER_MODER10_Msk               (0x3UL << GPIO_MODER_MODER10_Pos)  /*!< 0x00300000 */

+#define GPIO_MODER_MODER10                   GPIO_MODER_MODER10_Msk            

+#define GPIO_MODER_MODER10_0                 (0x1UL << GPIO_MODER_MODER10_Pos)  /*!< 0x00100000 */

+#define GPIO_MODER_MODER10_1                 (0x2UL << GPIO_MODER_MODER10_Pos)  /*!< 0x00200000 */

+

+#define GPIO_MODER_MODER11_Pos               (22U)                             

+#define GPIO_MODER_MODER11_Msk               (0x3UL << GPIO_MODER_MODER11_Pos)  /*!< 0x00C00000 */

+#define GPIO_MODER_MODER11                   GPIO_MODER_MODER11_Msk            

+#define GPIO_MODER_MODER11_0                 (0x1UL << GPIO_MODER_MODER11_Pos)  /*!< 0x00400000 */

+#define GPIO_MODER_MODER11_1                 (0x2UL << GPIO_MODER_MODER11_Pos)  /*!< 0x00800000 */

+

+#define GPIO_MODER_MODER12_Pos               (24U)                             

+#define GPIO_MODER_MODER12_Msk               (0x3UL << GPIO_MODER_MODER12_Pos)  /*!< 0x03000000 */

+#define GPIO_MODER_MODER12                   GPIO_MODER_MODER12_Msk            

+#define GPIO_MODER_MODER12_0                 (0x1UL << GPIO_MODER_MODER12_Pos)  /*!< 0x01000000 */

+#define GPIO_MODER_MODER12_1                 (0x2UL << GPIO_MODER_MODER12_Pos)  /*!< 0x02000000 */

+

+#define GPIO_MODER_MODER13_Pos               (26U)                             

+#define GPIO_MODER_MODER13_Msk               (0x3UL << GPIO_MODER_MODER13_Pos)  /*!< 0x0C000000 */

+#define GPIO_MODER_MODER13                   GPIO_MODER_MODER13_Msk            

+#define GPIO_MODER_MODER13_0                 (0x1UL << GPIO_MODER_MODER13_Pos)  /*!< 0x04000000 */

+#define GPIO_MODER_MODER13_1                 (0x2UL << GPIO_MODER_MODER13_Pos)  /*!< 0x08000000 */

+

+#define GPIO_MODER_MODER14_Pos               (28U)                             

+#define GPIO_MODER_MODER14_Msk               (0x3UL << GPIO_MODER_MODER14_Pos)  /*!< 0x30000000 */

+#define GPIO_MODER_MODER14                   GPIO_MODER_MODER14_Msk            

+#define GPIO_MODER_MODER14_0                 (0x1UL << GPIO_MODER_MODER14_Pos)  /*!< 0x10000000 */

+#define GPIO_MODER_MODER14_1                 (0x2UL << GPIO_MODER_MODER14_Pos)  /*!< 0x20000000 */

+

+#define GPIO_MODER_MODER15_Pos               (30U)                             

+#define GPIO_MODER_MODER15_Msk               (0x3UL << GPIO_MODER_MODER15_Pos)  /*!< 0xC0000000 */

+#define GPIO_MODER_MODER15                   GPIO_MODER_MODER15_Msk            

+#define GPIO_MODER_MODER15_0                 (0x1UL << GPIO_MODER_MODER15_Pos)  /*!< 0x40000000 */

+#define GPIO_MODER_MODER15_1                 (0x2UL << GPIO_MODER_MODER15_Pos)  /*!< 0x80000000 */

+

+/******************  Bits definition for GPIO_OTYPER register  ****************/

+#define GPIO_OTYPER_OT_0                     (0x00000001U)                     

+#define GPIO_OTYPER_OT_1                     (0x00000002U)                     

+#define GPIO_OTYPER_OT_2                     (0x00000004U)                     

+#define GPIO_OTYPER_OT_3                     (0x00000008U)                     

+#define GPIO_OTYPER_OT_4                     (0x00000010U)                     

+#define GPIO_OTYPER_OT_5                     (0x00000020U)                     

+#define GPIO_OTYPER_OT_6                     (0x00000040U)                     

+#define GPIO_OTYPER_OT_7                     (0x00000080U)                     

+#define GPIO_OTYPER_OT_8                     (0x00000100U)                     

+#define GPIO_OTYPER_OT_9                     (0x00000200U)                     

+#define GPIO_OTYPER_OT_10                    (0x00000400U)                     

+#define GPIO_OTYPER_OT_11                    (0x00000800U)                     

+#define GPIO_OTYPER_OT_12                    (0x00001000U)                     

+#define GPIO_OTYPER_OT_13                    (0x00002000U)                     

+#define GPIO_OTYPER_OT_14                    (0x00004000U)                     

+#define GPIO_OTYPER_OT_15                    (0x00008000U)                     

+

+/******************  Bits definition for GPIO_OSPEEDR register  ***************/

+#define GPIO_OSPEEDER_OSPEEDR0_Pos           (0U)                              

+#define GPIO_OSPEEDER_OSPEEDR0_Msk           (0x3UL << GPIO_OSPEEDER_OSPEEDR0_Pos) /*!< 0x00000003 */

+#define GPIO_OSPEEDER_OSPEEDR0               GPIO_OSPEEDER_OSPEEDR0_Msk        

+#define GPIO_OSPEEDER_OSPEEDR0_0             (0x1UL << GPIO_OSPEEDER_OSPEEDR0_Pos) /*!< 0x00000001 */

+#define GPIO_OSPEEDER_OSPEEDR0_1             (0x2UL << GPIO_OSPEEDER_OSPEEDR0_Pos) /*!< 0x00000002 */

+

+#define GPIO_OSPEEDER_OSPEEDR1_Pos           (2U)                              

+#define GPIO_OSPEEDER_OSPEEDR1_Msk           (0x3UL << GPIO_OSPEEDER_OSPEEDR1_Pos) /*!< 0x0000000C */

+#define GPIO_OSPEEDER_OSPEEDR1               GPIO_OSPEEDER_OSPEEDR1_Msk        

+#define GPIO_OSPEEDER_OSPEEDR1_0             (0x1UL << GPIO_OSPEEDER_OSPEEDR1_Pos) /*!< 0x00000004 */

+#define GPIO_OSPEEDER_OSPEEDR1_1             (0x2UL << GPIO_OSPEEDER_OSPEEDR1_Pos) /*!< 0x00000008 */

+

+#define GPIO_OSPEEDER_OSPEEDR2_Pos           (4U)                              

+#define GPIO_OSPEEDER_OSPEEDR2_Msk           (0x3UL << GPIO_OSPEEDER_OSPEEDR2_Pos) /*!< 0x00000030 */

+#define GPIO_OSPEEDER_OSPEEDR2               GPIO_OSPEEDER_OSPEEDR2_Msk        

+#define GPIO_OSPEEDER_OSPEEDR2_0             (0x1UL << GPIO_OSPEEDER_OSPEEDR2_Pos) /*!< 0x00000010 */

+#define GPIO_OSPEEDER_OSPEEDR2_1             (0x2UL << GPIO_OSPEEDER_OSPEEDR2_Pos) /*!< 0x00000020 */

+

+#define GPIO_OSPEEDER_OSPEEDR3_Pos           (6U)                              

+#define GPIO_OSPEEDER_OSPEEDR3_Msk           (0x3UL << GPIO_OSPEEDER_OSPEEDR3_Pos) /*!< 0x000000C0 */

+#define GPIO_OSPEEDER_OSPEEDR3               GPIO_OSPEEDER_OSPEEDR3_Msk        

+#define GPIO_OSPEEDER_OSPEEDR3_0             (0x1UL << GPIO_OSPEEDER_OSPEEDR3_Pos) /*!< 0x00000040 */

+#define GPIO_OSPEEDER_OSPEEDR3_1             (0x2UL << GPIO_OSPEEDER_OSPEEDR3_Pos) /*!< 0x00000080 */

+

+#define GPIO_OSPEEDER_OSPEEDR4_Pos           (8U)                              

+#define GPIO_OSPEEDER_OSPEEDR4_Msk           (0x3UL << GPIO_OSPEEDER_OSPEEDR4_Pos) /*!< 0x00000300 */

+#define GPIO_OSPEEDER_OSPEEDR4               GPIO_OSPEEDER_OSPEEDR4_Msk        

+#define GPIO_OSPEEDER_OSPEEDR4_0             (0x1UL << GPIO_OSPEEDER_OSPEEDR4_Pos) /*!< 0x00000100 */

+#define GPIO_OSPEEDER_OSPEEDR4_1             (0x2UL << GPIO_OSPEEDER_OSPEEDR4_Pos) /*!< 0x00000200 */

+

+#define GPIO_OSPEEDER_OSPEEDR5_Pos           (10U)                             

+#define GPIO_OSPEEDER_OSPEEDR5_Msk           (0x3UL << GPIO_OSPEEDER_OSPEEDR5_Pos) /*!< 0x00000C00 */

+#define GPIO_OSPEEDER_OSPEEDR5               GPIO_OSPEEDER_OSPEEDR5_Msk        

+#define GPIO_OSPEEDER_OSPEEDR5_0             (0x1UL << GPIO_OSPEEDER_OSPEEDR5_Pos) /*!< 0x00000400 */

+#define GPIO_OSPEEDER_OSPEEDR5_1             (0x2UL << GPIO_OSPEEDER_OSPEEDR5_Pos) /*!< 0x00000800 */

+

+#define GPIO_OSPEEDER_OSPEEDR6_Pos           (12U)                             

+#define GPIO_OSPEEDER_OSPEEDR6_Msk           (0x3UL << GPIO_OSPEEDER_OSPEEDR6_Pos) /*!< 0x00003000 */

+#define GPIO_OSPEEDER_OSPEEDR6               GPIO_OSPEEDER_OSPEEDR6_Msk        

+#define GPIO_OSPEEDER_OSPEEDR6_0             (0x1UL << GPIO_OSPEEDER_OSPEEDR6_Pos) /*!< 0x00001000 */

+#define GPIO_OSPEEDER_OSPEEDR6_1             (0x2UL << GPIO_OSPEEDER_OSPEEDR6_Pos) /*!< 0x00002000 */

+

+#define GPIO_OSPEEDER_OSPEEDR7_Pos           (14U)                             

+#define GPIO_OSPEEDER_OSPEEDR7_Msk           (0x3UL << GPIO_OSPEEDER_OSPEEDR7_Pos) /*!< 0x0000C000 */

+#define GPIO_OSPEEDER_OSPEEDR7               GPIO_OSPEEDER_OSPEEDR7_Msk        

+#define GPIO_OSPEEDER_OSPEEDR7_0             (0x1UL << GPIO_OSPEEDER_OSPEEDR7_Pos) /*!< 0x00004000 */

+#define GPIO_OSPEEDER_OSPEEDR7_1             (0x2UL << GPIO_OSPEEDER_OSPEEDR7_Pos) /*!< 0x00008000 */

+

+#define GPIO_OSPEEDER_OSPEEDR8_Pos           (16U)                             

+#define GPIO_OSPEEDER_OSPEEDR8_Msk           (0x3UL << GPIO_OSPEEDER_OSPEEDR8_Pos) /*!< 0x00030000 */

+#define GPIO_OSPEEDER_OSPEEDR8               GPIO_OSPEEDER_OSPEEDR8_Msk        

+#define GPIO_OSPEEDER_OSPEEDR8_0             (0x1UL << GPIO_OSPEEDER_OSPEEDR8_Pos) /*!< 0x00010000 */

+#define GPIO_OSPEEDER_OSPEEDR8_1             (0x2UL << GPIO_OSPEEDER_OSPEEDR8_Pos) /*!< 0x00020000 */

+

+#define GPIO_OSPEEDER_OSPEEDR9_Pos           (18U)                             

+#define GPIO_OSPEEDER_OSPEEDR9_Msk           (0x3UL << GPIO_OSPEEDER_OSPEEDR9_Pos) /*!< 0x000C0000 */

+#define GPIO_OSPEEDER_OSPEEDR9               GPIO_OSPEEDER_OSPEEDR9_Msk        

+#define GPIO_OSPEEDER_OSPEEDR9_0             (0x1UL << GPIO_OSPEEDER_OSPEEDR9_Pos) /*!< 0x00040000 */

+#define GPIO_OSPEEDER_OSPEEDR9_1             (0x2UL << GPIO_OSPEEDER_OSPEEDR9_Pos) /*!< 0x00080000 */

+

+#define GPIO_OSPEEDER_OSPEEDR10_Pos          (20U)                             

+#define GPIO_OSPEEDER_OSPEEDR10_Msk          (0x3UL << GPIO_OSPEEDER_OSPEEDR10_Pos) /*!< 0x00300000 */

+#define GPIO_OSPEEDER_OSPEEDR10              GPIO_OSPEEDER_OSPEEDR10_Msk       

+#define GPIO_OSPEEDER_OSPEEDR10_0            (0x1UL << GPIO_OSPEEDER_OSPEEDR10_Pos) /*!< 0x00100000 */

+#define GPIO_OSPEEDER_OSPEEDR10_1            (0x2UL << GPIO_OSPEEDER_OSPEEDR10_Pos) /*!< 0x00200000 */

+

+#define GPIO_OSPEEDER_OSPEEDR11_Pos          (22U)                             

+#define GPIO_OSPEEDER_OSPEEDR11_Msk          (0x3UL << GPIO_OSPEEDER_OSPEEDR11_Pos) /*!< 0x00C00000 */

+#define GPIO_OSPEEDER_OSPEEDR11              GPIO_OSPEEDER_OSPEEDR11_Msk       

+#define GPIO_OSPEEDER_OSPEEDR11_0            (0x1UL << GPIO_OSPEEDER_OSPEEDR11_Pos) /*!< 0x00400000 */

+#define GPIO_OSPEEDER_OSPEEDR11_1            (0x2UL << GPIO_OSPEEDER_OSPEEDR11_Pos) /*!< 0x00800000 */

+

+#define GPIO_OSPEEDER_OSPEEDR12_Pos          (24U)                             

+#define GPIO_OSPEEDER_OSPEEDR12_Msk          (0x3UL << GPIO_OSPEEDER_OSPEEDR12_Pos) /*!< 0x03000000 */

+#define GPIO_OSPEEDER_OSPEEDR12              GPIO_OSPEEDER_OSPEEDR12_Msk       

+#define GPIO_OSPEEDER_OSPEEDR12_0            (0x1UL << GPIO_OSPEEDER_OSPEEDR12_Pos) /*!< 0x01000000 */

+#define GPIO_OSPEEDER_OSPEEDR12_1            (0x2UL << GPIO_OSPEEDER_OSPEEDR12_Pos) /*!< 0x02000000 */

+

+#define GPIO_OSPEEDER_OSPEEDR13_Pos          (26U)                             

+#define GPIO_OSPEEDER_OSPEEDR13_Msk          (0x3UL << GPIO_OSPEEDER_OSPEEDR13_Pos) /*!< 0x0C000000 */

+#define GPIO_OSPEEDER_OSPEEDR13              GPIO_OSPEEDER_OSPEEDR13_Msk       

+#define GPIO_OSPEEDER_OSPEEDR13_0            (0x1UL << GPIO_OSPEEDER_OSPEEDR13_Pos) /*!< 0x04000000 */

+#define GPIO_OSPEEDER_OSPEEDR13_1            (0x2UL << GPIO_OSPEEDER_OSPEEDR13_Pos) /*!< 0x08000000 */

+

+#define GPIO_OSPEEDER_OSPEEDR14_Pos          (28U)                             

+#define GPIO_OSPEEDER_OSPEEDR14_Msk          (0x3UL << GPIO_OSPEEDER_OSPEEDR14_Pos) /*!< 0x30000000 */

+#define GPIO_OSPEEDER_OSPEEDR14              GPIO_OSPEEDER_OSPEEDR14_Msk       

+#define GPIO_OSPEEDER_OSPEEDR14_0            (0x1UL << GPIO_OSPEEDER_OSPEEDR14_Pos) /*!< 0x10000000 */

+#define GPIO_OSPEEDER_OSPEEDR14_1            (0x2UL << GPIO_OSPEEDER_OSPEEDR14_Pos) /*!< 0x20000000 */

+

+#define GPIO_OSPEEDER_OSPEEDR15_Pos          (30U)                             

+#define GPIO_OSPEEDER_OSPEEDR15_Msk          (0x3UL << GPIO_OSPEEDER_OSPEEDR15_Pos) /*!< 0xC0000000 */

+#define GPIO_OSPEEDER_OSPEEDR15              GPIO_OSPEEDER_OSPEEDR15_Msk       

+#define GPIO_OSPEEDER_OSPEEDR15_0            (0x1UL << GPIO_OSPEEDER_OSPEEDR15_Pos) /*!< 0x40000000 */

+#define GPIO_OSPEEDER_OSPEEDR15_1            (0x2UL << GPIO_OSPEEDER_OSPEEDR15_Pos) /*!< 0x80000000 */

+

+/******************  Bits definition for GPIO_PUPDR register  *****************/

+#define GPIO_PUPDR_PUPDR0_Pos                (0U)                              

+#define GPIO_PUPDR_PUPDR0_Msk                (0x3UL << GPIO_PUPDR_PUPDR0_Pos)   /*!< 0x00000003 */

+#define GPIO_PUPDR_PUPDR0                    GPIO_PUPDR_PUPDR0_Msk             

+#define GPIO_PUPDR_PUPDR0_0                  (0x1UL << GPIO_PUPDR_PUPDR0_Pos)   /*!< 0x00000001 */

+#define GPIO_PUPDR_PUPDR0_1                  (0x2UL << GPIO_PUPDR_PUPDR0_Pos)   /*!< 0x00000002 */

+

+#define GPIO_PUPDR_PUPDR1_Pos                (2U)                              

+#define GPIO_PUPDR_PUPDR1_Msk                (0x3UL << GPIO_PUPDR_PUPDR1_Pos)   /*!< 0x0000000C */

+#define GPIO_PUPDR_PUPDR1                    GPIO_PUPDR_PUPDR1_Msk             

+#define GPIO_PUPDR_PUPDR1_0                  (0x1UL << GPIO_PUPDR_PUPDR1_Pos)   /*!< 0x00000004 */

+#define GPIO_PUPDR_PUPDR1_1                  (0x2UL << GPIO_PUPDR_PUPDR1_Pos)   /*!< 0x00000008 */

+

+#define GPIO_PUPDR_PUPDR2_Pos                (4U)                              

+#define GPIO_PUPDR_PUPDR2_Msk                (0x3UL << GPIO_PUPDR_PUPDR2_Pos)   /*!< 0x00000030 */

+#define GPIO_PUPDR_PUPDR2                    GPIO_PUPDR_PUPDR2_Msk             

+#define GPIO_PUPDR_PUPDR2_0                  (0x1UL << GPIO_PUPDR_PUPDR2_Pos)   /*!< 0x00000010 */

+#define GPIO_PUPDR_PUPDR2_1                  (0x2UL << GPIO_PUPDR_PUPDR2_Pos)   /*!< 0x00000020 */

+

+#define GPIO_PUPDR_PUPDR3_Pos                (6U)                              

+#define GPIO_PUPDR_PUPDR3_Msk                (0x3UL << GPIO_PUPDR_PUPDR3_Pos)   /*!< 0x000000C0 */

+#define GPIO_PUPDR_PUPDR3                    GPIO_PUPDR_PUPDR3_Msk             

+#define GPIO_PUPDR_PUPDR3_0                  (0x1UL << GPIO_PUPDR_PUPDR3_Pos)   /*!< 0x00000040 */

+#define GPIO_PUPDR_PUPDR3_1                  (0x2UL << GPIO_PUPDR_PUPDR3_Pos)   /*!< 0x00000080 */

+

+#define GPIO_PUPDR_PUPDR4_Pos                (8U)                              

+#define GPIO_PUPDR_PUPDR4_Msk                (0x3UL << GPIO_PUPDR_PUPDR4_Pos)   /*!< 0x00000300 */

+#define GPIO_PUPDR_PUPDR4                    GPIO_PUPDR_PUPDR4_Msk             

+#define GPIO_PUPDR_PUPDR4_0                  (0x1UL << GPIO_PUPDR_PUPDR4_Pos)   /*!< 0x00000100 */

+#define GPIO_PUPDR_PUPDR4_1                  (0x2UL << GPIO_PUPDR_PUPDR4_Pos)   /*!< 0x00000200 */

+

+#define GPIO_PUPDR_PUPDR5_Pos                (10U)                             

+#define GPIO_PUPDR_PUPDR5_Msk                (0x3UL << GPIO_PUPDR_PUPDR5_Pos)   /*!< 0x00000C00 */

+#define GPIO_PUPDR_PUPDR5                    GPIO_PUPDR_PUPDR5_Msk             

+#define GPIO_PUPDR_PUPDR5_0                  (0x1UL << GPIO_PUPDR_PUPDR5_Pos)   /*!< 0x00000400 */

+#define GPIO_PUPDR_PUPDR5_1                  (0x2UL << GPIO_PUPDR_PUPDR5_Pos)   /*!< 0x00000800 */

+

+#define GPIO_PUPDR_PUPDR6_Pos                (12U)                             

+#define GPIO_PUPDR_PUPDR6_Msk                (0x3UL << GPIO_PUPDR_PUPDR6_Pos)   /*!< 0x00003000 */

+#define GPIO_PUPDR_PUPDR6                    GPIO_PUPDR_PUPDR6_Msk             

+#define GPIO_PUPDR_PUPDR6_0                  (0x1UL << GPIO_PUPDR_PUPDR6_Pos)   /*!< 0x00001000 */

+#define GPIO_PUPDR_PUPDR6_1                  (0x2UL << GPIO_PUPDR_PUPDR6_Pos)   /*!< 0x00002000 */

+

+#define GPIO_PUPDR_PUPDR7_Pos                (14U)                             

+#define GPIO_PUPDR_PUPDR7_Msk                (0x3UL << GPIO_PUPDR_PUPDR7_Pos)   /*!< 0x0000C000 */

+#define GPIO_PUPDR_PUPDR7                    GPIO_PUPDR_PUPDR7_Msk             

+#define GPIO_PUPDR_PUPDR7_0                  (0x1UL << GPIO_PUPDR_PUPDR7_Pos)   /*!< 0x00004000 */

+#define GPIO_PUPDR_PUPDR7_1                  (0x2UL << GPIO_PUPDR_PUPDR7_Pos)   /*!< 0x00008000 */

+

+#define GPIO_PUPDR_PUPDR8_Pos                (16U)                             

+#define GPIO_PUPDR_PUPDR8_Msk                (0x3UL << GPIO_PUPDR_PUPDR8_Pos)   /*!< 0x00030000 */

+#define GPIO_PUPDR_PUPDR8                    GPIO_PUPDR_PUPDR8_Msk             

+#define GPIO_PUPDR_PUPDR8_0                  (0x1UL << GPIO_PUPDR_PUPDR8_Pos)   /*!< 0x00010000 */

+#define GPIO_PUPDR_PUPDR8_1                  (0x2UL << GPIO_PUPDR_PUPDR8_Pos)   /*!< 0x00020000 */

+

+#define GPIO_PUPDR_PUPDR9_Pos                (18U)                             

+#define GPIO_PUPDR_PUPDR9_Msk                (0x3UL << GPIO_PUPDR_PUPDR9_Pos)   /*!< 0x000C0000 */

+#define GPIO_PUPDR_PUPDR9                    GPIO_PUPDR_PUPDR9_Msk             

+#define GPIO_PUPDR_PUPDR9_0                  (0x1UL << GPIO_PUPDR_PUPDR9_Pos)   /*!< 0x00040000 */

+#define GPIO_PUPDR_PUPDR9_1                  (0x2UL << GPIO_PUPDR_PUPDR9_Pos)   /*!< 0x00080000 */

+

+#define GPIO_PUPDR_PUPDR10_Pos               (20U)                             

+#define GPIO_PUPDR_PUPDR10_Msk               (0x3UL << GPIO_PUPDR_PUPDR10_Pos)  /*!< 0x00300000 */

+#define GPIO_PUPDR_PUPDR10                   GPIO_PUPDR_PUPDR10_Msk            

+#define GPIO_PUPDR_PUPDR10_0                 (0x1UL << GPIO_PUPDR_PUPDR10_Pos)  /*!< 0x00100000 */

+#define GPIO_PUPDR_PUPDR10_1                 (0x2UL << GPIO_PUPDR_PUPDR10_Pos)  /*!< 0x00200000 */

+

+#define GPIO_PUPDR_PUPDR11_Pos               (22U)                             

+#define GPIO_PUPDR_PUPDR11_Msk               (0x3UL << GPIO_PUPDR_PUPDR11_Pos)  /*!< 0x00C00000 */

+#define GPIO_PUPDR_PUPDR11                   GPIO_PUPDR_PUPDR11_Msk            

+#define GPIO_PUPDR_PUPDR11_0                 (0x1UL << GPIO_PUPDR_PUPDR11_Pos)  /*!< 0x00400000 */

+#define GPIO_PUPDR_PUPDR11_1                 (0x2UL << GPIO_PUPDR_PUPDR11_Pos)  /*!< 0x00800000 */

+

+#define GPIO_PUPDR_PUPDR12_Pos               (24U)                             

+#define GPIO_PUPDR_PUPDR12_Msk               (0x3UL << GPIO_PUPDR_PUPDR12_Pos)  /*!< 0x03000000 */

+#define GPIO_PUPDR_PUPDR12                   GPIO_PUPDR_PUPDR12_Msk            

+#define GPIO_PUPDR_PUPDR12_0                 (0x1UL << GPIO_PUPDR_PUPDR12_Pos)  /*!< 0x01000000 */

+#define GPIO_PUPDR_PUPDR12_1                 (0x2UL << GPIO_PUPDR_PUPDR12_Pos)  /*!< 0x02000000 */

+

+#define GPIO_PUPDR_PUPDR13_Pos               (26U)                             

+#define GPIO_PUPDR_PUPDR13_Msk               (0x3UL << GPIO_PUPDR_PUPDR13_Pos)  /*!< 0x0C000000 */

+#define GPIO_PUPDR_PUPDR13                   GPIO_PUPDR_PUPDR13_Msk            

+#define GPIO_PUPDR_PUPDR13_0                 (0x1UL << GPIO_PUPDR_PUPDR13_Pos)  /*!< 0x04000000 */

+#define GPIO_PUPDR_PUPDR13_1                 (0x2UL << GPIO_PUPDR_PUPDR13_Pos)  /*!< 0x08000000 */

+

+#define GPIO_PUPDR_PUPDR14_Pos               (28U)                             

+#define GPIO_PUPDR_PUPDR14_Msk               (0x3UL << GPIO_PUPDR_PUPDR14_Pos)  /*!< 0x30000000 */

+#define GPIO_PUPDR_PUPDR14                   GPIO_PUPDR_PUPDR14_Msk            

+#define GPIO_PUPDR_PUPDR14_0                 (0x1UL << GPIO_PUPDR_PUPDR14_Pos)  /*!< 0x10000000 */

+#define GPIO_PUPDR_PUPDR14_1                 (0x2UL << GPIO_PUPDR_PUPDR14_Pos)  /*!< 0x20000000 */

+#define GPIO_PUPDR_PUPDR15_Pos               (30U)                             

+#define GPIO_PUPDR_PUPDR15_Msk               (0x3UL << GPIO_PUPDR_PUPDR15_Pos)  /*!< 0xC0000000 */

+#define GPIO_PUPDR_PUPDR15                   GPIO_PUPDR_PUPDR15_Msk            

+#define GPIO_PUPDR_PUPDR15_0                 (0x1UL << GPIO_PUPDR_PUPDR15_Pos)  /*!< 0x40000000 */

+#define GPIO_PUPDR_PUPDR15_1                 (0x2UL << GPIO_PUPDR_PUPDR15_Pos)  /*!< 0x80000000 */

+

+/******************  Bits definition for GPIO_IDR register  *******************/

+#define GPIO_IDR_IDR_0                       (0x00000001U)                     

+#define GPIO_IDR_IDR_1                       (0x00000002U)                     

+#define GPIO_IDR_IDR_2                       (0x00000004U)                     

+#define GPIO_IDR_IDR_3                       (0x00000008U)                     

+#define GPIO_IDR_IDR_4                       (0x00000010U)                     

+#define GPIO_IDR_IDR_5                       (0x00000020U)                     

+#define GPIO_IDR_IDR_6                       (0x00000040U)                     

+#define GPIO_IDR_IDR_7                       (0x00000080U)                     

+#define GPIO_IDR_IDR_8                       (0x00000100U)                     

+#define GPIO_IDR_IDR_9                       (0x00000200U)                     

+#define GPIO_IDR_IDR_10                      (0x00000400U)                     

+#define GPIO_IDR_IDR_11                      (0x00000800U)                     

+#define GPIO_IDR_IDR_12                      (0x00001000U)                     

+#define GPIO_IDR_IDR_13                      (0x00002000U)                     

+#define GPIO_IDR_IDR_14                      (0x00004000U)                     

+#define GPIO_IDR_IDR_15                      (0x00008000U)                     

+

+/******************  Bits definition for GPIO_ODR register  *******************/

+#define GPIO_ODR_ODR_0                       (0x00000001U)                     

+#define GPIO_ODR_ODR_1                       (0x00000002U)                     

+#define GPIO_ODR_ODR_2                       (0x00000004U)                     

+#define GPIO_ODR_ODR_3                       (0x00000008U)                     

+#define GPIO_ODR_ODR_4                       (0x00000010U)                     

+#define GPIO_ODR_ODR_5                       (0x00000020U)                     

+#define GPIO_ODR_ODR_6                       (0x00000040U)                     

+#define GPIO_ODR_ODR_7                       (0x00000080U)                     

+#define GPIO_ODR_ODR_8                       (0x00000100U)                     

+#define GPIO_ODR_ODR_9                       (0x00000200U)                     

+#define GPIO_ODR_ODR_10                      (0x00000400U)                     

+#define GPIO_ODR_ODR_11                      (0x00000800U)                     

+#define GPIO_ODR_ODR_12                      (0x00001000U)                     

+#define GPIO_ODR_ODR_13                      (0x00002000U)                     

+#define GPIO_ODR_ODR_14                      (0x00004000U)                     

+#define GPIO_ODR_ODR_15                      (0x00008000U)                     

+

+/******************  Bits definition for GPIO_BSRR register  ******************/

+#define GPIO_BSRR_BS_0                       (0x00000001U)                     

+#define GPIO_BSRR_BS_1                       (0x00000002U)                     

+#define GPIO_BSRR_BS_2                       (0x00000004U)                     

+#define GPIO_BSRR_BS_3                       (0x00000008U)                     

+#define GPIO_BSRR_BS_4                       (0x00000010U)                     

+#define GPIO_BSRR_BS_5                       (0x00000020U)                     

+#define GPIO_BSRR_BS_6                       (0x00000040U)                     

+#define GPIO_BSRR_BS_7                       (0x00000080U)                     

+#define GPIO_BSRR_BS_8                       (0x00000100U)                     

+#define GPIO_BSRR_BS_9                       (0x00000200U)                     

+#define GPIO_BSRR_BS_10                      (0x00000400U)                     

+#define GPIO_BSRR_BS_11                      (0x00000800U)                     

+#define GPIO_BSRR_BS_12                      (0x00001000U)                     

+#define GPIO_BSRR_BS_13                      (0x00002000U)                     

+#define GPIO_BSRR_BS_14                      (0x00004000U)                     

+#define GPIO_BSRR_BS_15                      (0x00008000U)                     

+#define GPIO_BSRR_BR_0                       (0x00010000U)                     

+#define GPIO_BSRR_BR_1                       (0x00020000U)                     

+#define GPIO_BSRR_BR_2                       (0x00040000U)                     

+#define GPIO_BSRR_BR_3                       (0x00080000U)                     

+#define GPIO_BSRR_BR_4                       (0x00100000U)                     

+#define GPIO_BSRR_BR_5                       (0x00200000U)                     

+#define GPIO_BSRR_BR_6                       (0x00400000U)                     

+#define GPIO_BSRR_BR_7                       (0x00800000U)                     

+#define GPIO_BSRR_BR_8                       (0x01000000U)                     

+#define GPIO_BSRR_BR_9                       (0x02000000U)                     

+#define GPIO_BSRR_BR_10                      (0x04000000U)                     

+#define GPIO_BSRR_BR_11                      (0x08000000U)                     

+#define GPIO_BSRR_BR_12                      (0x10000000U)                     

+#define GPIO_BSRR_BR_13                      (0x20000000U)                     

+#define GPIO_BSRR_BR_14                      (0x40000000U)                     

+#define GPIO_BSRR_BR_15                      (0x80000000U)                     

+

+/****************** Bit definition for GPIO_LCKR register  ********************/

+#define GPIO_LCKR_LCK0_Pos                   (0U)                              

+#define GPIO_LCKR_LCK0_Msk                   (0x1UL << GPIO_LCKR_LCK0_Pos)      /*!< 0x00000001 */

+#define GPIO_LCKR_LCK0                       GPIO_LCKR_LCK0_Msk                

+#define GPIO_LCKR_LCK1_Pos                   (1U)                              

+#define GPIO_LCKR_LCK1_Msk                   (0x1UL << GPIO_LCKR_LCK1_Pos)      /*!< 0x00000002 */

+#define GPIO_LCKR_LCK1                       GPIO_LCKR_LCK1_Msk                

+#define GPIO_LCKR_LCK2_Pos                   (2U)                              

+#define GPIO_LCKR_LCK2_Msk                   (0x1UL << GPIO_LCKR_LCK2_Pos)      /*!< 0x00000004 */

+#define GPIO_LCKR_LCK2                       GPIO_LCKR_LCK2_Msk                

+#define GPIO_LCKR_LCK3_Pos                   (3U)                              

+#define GPIO_LCKR_LCK3_Msk                   (0x1UL << GPIO_LCKR_LCK3_Pos)      /*!< 0x00000008 */

+#define GPIO_LCKR_LCK3                       GPIO_LCKR_LCK3_Msk                

+#define GPIO_LCKR_LCK4_Pos                   (4U)                              

+#define GPIO_LCKR_LCK4_Msk                   (0x1UL << GPIO_LCKR_LCK4_Pos)      /*!< 0x00000010 */

+#define GPIO_LCKR_LCK4                       GPIO_LCKR_LCK4_Msk                

+#define GPIO_LCKR_LCK5_Pos                   (5U)                              

+#define GPIO_LCKR_LCK5_Msk                   (0x1UL << GPIO_LCKR_LCK5_Pos)      /*!< 0x00000020 */

+#define GPIO_LCKR_LCK5                       GPIO_LCKR_LCK5_Msk                

+#define GPIO_LCKR_LCK6_Pos                   (6U)                              

+#define GPIO_LCKR_LCK6_Msk                   (0x1UL << GPIO_LCKR_LCK6_Pos)      /*!< 0x00000040 */

+#define GPIO_LCKR_LCK6                       GPIO_LCKR_LCK6_Msk                

+#define GPIO_LCKR_LCK7_Pos                   (7U)                              

+#define GPIO_LCKR_LCK7_Msk                   (0x1UL << GPIO_LCKR_LCK7_Pos)      /*!< 0x00000080 */

+#define GPIO_LCKR_LCK7                       GPIO_LCKR_LCK7_Msk                

+#define GPIO_LCKR_LCK8_Pos                   (8U)                              

+#define GPIO_LCKR_LCK8_Msk                   (0x1UL << GPIO_LCKR_LCK8_Pos)      /*!< 0x00000100 */

+#define GPIO_LCKR_LCK8                       GPIO_LCKR_LCK8_Msk                

+#define GPIO_LCKR_LCK9_Pos                   (9U)                              

+#define GPIO_LCKR_LCK9_Msk                   (0x1UL << GPIO_LCKR_LCK9_Pos)      /*!< 0x00000200 */

+#define GPIO_LCKR_LCK9                       GPIO_LCKR_LCK9_Msk                

+#define GPIO_LCKR_LCK10_Pos                  (10U)                             

+#define GPIO_LCKR_LCK10_Msk                  (0x1UL << GPIO_LCKR_LCK10_Pos)     /*!< 0x00000400 */

+#define GPIO_LCKR_LCK10                      GPIO_LCKR_LCK10_Msk               

+#define GPIO_LCKR_LCK11_Pos                  (11U)                             

+#define GPIO_LCKR_LCK11_Msk                  (0x1UL << GPIO_LCKR_LCK11_Pos)     /*!< 0x00000800 */

+#define GPIO_LCKR_LCK11                      GPIO_LCKR_LCK11_Msk               

+#define GPIO_LCKR_LCK12_Pos                  (12U)                             

+#define GPIO_LCKR_LCK12_Msk                  (0x1UL << GPIO_LCKR_LCK12_Pos)     /*!< 0x00001000 */

+#define GPIO_LCKR_LCK12                      GPIO_LCKR_LCK12_Msk               

+#define GPIO_LCKR_LCK13_Pos                  (13U)                             

+#define GPIO_LCKR_LCK13_Msk                  (0x1UL << GPIO_LCKR_LCK13_Pos)     /*!< 0x00002000 */

+#define GPIO_LCKR_LCK13                      GPIO_LCKR_LCK13_Msk               

+#define GPIO_LCKR_LCK14_Pos                  (14U)                             

+#define GPIO_LCKR_LCK14_Msk                  (0x1UL << GPIO_LCKR_LCK14_Pos)     /*!< 0x00004000 */

+#define GPIO_LCKR_LCK14                      GPIO_LCKR_LCK14_Msk               

+#define GPIO_LCKR_LCK15_Pos                  (15U)                             

+#define GPIO_LCKR_LCK15_Msk                  (0x1UL << GPIO_LCKR_LCK15_Pos)     /*!< 0x00008000 */

+#define GPIO_LCKR_LCK15                      GPIO_LCKR_LCK15_Msk               

+#define GPIO_LCKR_LCKK_Pos                   (16U)                             

+#define GPIO_LCKR_LCKK_Msk                   (0x1UL << GPIO_LCKR_LCKK_Pos)      /*!< 0x00010000 */

+#define GPIO_LCKR_LCKK                       GPIO_LCKR_LCKK_Msk                

+

+/****************** Bit definition for GPIO_AFRL register  ********************/

+#define GPIO_AFRL_AFSEL0_Pos                  (0U)                              

+#define GPIO_AFRL_AFSEL0_Msk                  (0xFUL << GPIO_AFRL_AFSEL0_Pos)     /*!< 0x0000000F */

+#define GPIO_AFRL_AFSEL0                      GPIO_AFRL_AFSEL0_Msk               

+#define GPIO_AFRL_AFSEL1_Pos                  (4U)                              

+#define GPIO_AFRL_AFSEL1_Msk                  (0xFUL << GPIO_AFRL_AFSEL1_Pos)     /*!< 0x000000F0 */

+#define GPIO_AFRL_AFSEL1                      GPIO_AFRL_AFSEL1_Msk               

+#define GPIO_AFRL_AFSEL2_Pos                  (8U)                              

+#define GPIO_AFRL_AFSEL2_Msk                  (0xFUL << GPIO_AFRL_AFSEL2_Pos)     /*!< 0x00000F00 */

+#define GPIO_AFRL_AFSEL2                      GPIO_AFRL_AFSEL2_Msk               

+#define GPIO_AFRL_AFSEL3_Pos                  (12U)                             

+#define GPIO_AFRL_AFSEL3_Msk                  (0xFUL << GPIO_AFRL_AFSEL3_Pos)     /*!< 0x0000F000 */

+#define GPIO_AFRL_AFSEL3                      GPIO_AFRL_AFSEL3_Msk               

+#define GPIO_AFRL_AFSEL4_Pos                  (16U)                             

+#define GPIO_AFRL_AFSEL4_Msk                  (0xFUL << GPIO_AFRL_AFSEL4_Pos)     /*!< 0x000F0000 */

+#define GPIO_AFRL_AFSEL4                      GPIO_AFRL_AFSEL4_Msk               

+#define GPIO_AFRL_AFSEL5_Pos                  (20U)                             

+#define GPIO_AFRL_AFSEL5_Msk                  (0xFUL << GPIO_AFRL_AFSEL5_Pos)     /*!< 0x00F00000 */

+#define GPIO_AFRL_AFSEL5                      GPIO_AFRL_AFSEL5_Msk               

+#define GPIO_AFRL_AFSEL6_Pos                  (24U)                             

+#define GPIO_AFRL_AFSEL6_Msk                  (0xFUL << GPIO_AFRL_AFSEL6_Pos)     /*!< 0x0F000000 */

+#define GPIO_AFRL_AFSEL6                      GPIO_AFRL_AFSEL6_Msk               

+#define GPIO_AFRL_AFSEL7_Pos                  (28U)                             

+#define GPIO_AFRL_AFSEL7_Msk                  (0xFUL << GPIO_AFRL_AFSEL7_Pos)     /*!< 0xF0000000 */

+#define GPIO_AFRL_AFSEL7                      GPIO_AFRL_AFSEL7_Msk               

+

+/****************** Bit definition for GPIO_AFRH register  ********************/

+#define GPIO_AFRH_AFSEL8_Pos                  (0U)                              

+#define GPIO_AFRH_AFSEL8_Msk                  (0xFUL << GPIO_AFRH_AFSEL8_Pos)     /*!< 0x0000000F */

+#define GPIO_AFRH_AFSEL8                      GPIO_AFRH_AFSEL8_Msk               

+#define GPIO_AFRH_AFSEL9_Pos                  (4U)                              

+#define GPIO_AFRH_AFSEL9_Msk                  (0xFUL << GPIO_AFRH_AFSEL9_Pos)     /*!< 0x000000F0 */

+#define GPIO_AFRH_AFSEL9                      GPIO_AFRH_AFSEL9_Msk               

+#define GPIO_AFRH_AFSEL10_Pos                  (8U)                              

+#define GPIO_AFRH_AFSEL10_Msk                  (0xFUL << GPIO_AFRH_AFSEL10_Pos)     /*!< 0x00000F00 */

+#define GPIO_AFRH_AFSEL10                      GPIO_AFRH_AFSEL10_Msk               

+#define GPIO_AFRH_AFSEL11_Pos                  (12U)                             

+#define GPIO_AFRH_AFSEL11_Msk                  (0xFUL << GPIO_AFRH_AFSEL11_Pos)     /*!< 0x0000F000 */

+#define GPIO_AFRH_AFSEL11                      GPIO_AFRH_AFSEL11_Msk               

+#define GPIO_AFRH_AFSEL12_Pos                  (16U)                             

+#define GPIO_AFRH_AFSEL12_Msk                  (0xFUL << GPIO_AFRH_AFSEL12_Pos)     /*!< 0x000F0000 */

+#define GPIO_AFRH_AFSEL12                      GPIO_AFRH_AFSEL12_Msk               

+#define GPIO_AFRH_AFSEL13_Pos                  (20U)                             

+#define GPIO_AFRH_AFSEL13_Msk                  (0xFUL << GPIO_AFRH_AFSEL13_Pos)     /*!< 0x00F00000 */

+#define GPIO_AFRH_AFSEL13                      GPIO_AFRH_AFSEL13_Msk               

+#define GPIO_AFRH_AFSEL14_Pos                  (24U)                             

+#define GPIO_AFRH_AFSEL14_Msk                  (0xFUL << GPIO_AFRH_AFSEL14_Pos)     /*!< 0x0F000000 */

+#define GPIO_AFRH_AFSEL14                      GPIO_AFRH_AFSEL14_Msk               

+#define GPIO_AFRH_AFSEL15_Pos                  (28U)                             

+#define GPIO_AFRH_AFSEL15_Msk                  (0xFUL << GPIO_AFRH_AFSEL15_Pos)     /*!< 0xF0000000 */

+#define GPIO_AFRH_AFSEL15                      GPIO_AFRH_AFSEL15_Msk               

+

+/****************** Bit definition for GPIO_BRR register  *********************/

+#define GPIO_BRR_BR_0                        (0x00000001U)                     

+#define GPIO_BRR_BR_1                        (0x00000002U)                     

+#define GPIO_BRR_BR_2                        (0x00000004U)                     

+#define GPIO_BRR_BR_3                        (0x00000008U)                     

+#define GPIO_BRR_BR_4                        (0x00000010U)                     

+#define GPIO_BRR_BR_5                        (0x00000020U)                     

+#define GPIO_BRR_BR_6                        (0x00000040U)                     

+#define GPIO_BRR_BR_7                        (0x00000080U)                     

+#define GPIO_BRR_BR_8                        (0x00000100U)                     

+#define GPIO_BRR_BR_9                        (0x00000200U)                     

+#define GPIO_BRR_BR_10                       (0x00000400U)                     

+#define GPIO_BRR_BR_11                       (0x00000800U)                     

+#define GPIO_BRR_BR_12                       (0x00001000U)                     

+#define GPIO_BRR_BR_13                       (0x00002000U)                     

+#define GPIO_BRR_BR_14                       (0x00004000U)                     

+#define GPIO_BRR_BR_15                       (0x00008000U)                     

+

+/******************************************************************************/

+/*                                                                            */

+/*                   Inter-integrated Circuit Interface (I2C)                 */

+/*                                                                            */

+/******************************************************************************/

+

+/*******************  Bit definition for I2C_CR1 register  ********************/

+#define I2C_CR1_PE_Pos                      (0U)                               

+#define I2C_CR1_PE_Msk                      (0x1UL << I2C_CR1_PE_Pos)           /*!< 0x00000001 */

+#define I2C_CR1_PE                          I2C_CR1_PE_Msk                     /*!< Peripheral Enable */

+#define I2C_CR1_SMBUS_Pos                   (1U)                               

+#define I2C_CR1_SMBUS_Msk                   (0x1UL << I2C_CR1_SMBUS_Pos)        /*!< 0x00000002 */

+#define I2C_CR1_SMBUS                       I2C_CR1_SMBUS_Msk                  /*!< SMBus Mode */

+#define I2C_CR1_SMBTYPE_Pos                 (3U)                               

+#define I2C_CR1_SMBTYPE_Msk                 (0x1UL << I2C_CR1_SMBTYPE_Pos)      /*!< 0x00000008 */

+#define I2C_CR1_SMBTYPE                     I2C_CR1_SMBTYPE_Msk                /*!< SMBus Type */

+#define I2C_CR1_ENARP_Pos                   (4U)                               

+#define I2C_CR1_ENARP_Msk                   (0x1UL << I2C_CR1_ENARP_Pos)        /*!< 0x00000010 */

+#define I2C_CR1_ENARP                       I2C_CR1_ENARP_Msk                  /*!< ARP Enable */

+#define I2C_CR1_ENPEC_Pos                   (5U)                               

+#define I2C_CR1_ENPEC_Msk                   (0x1UL << I2C_CR1_ENPEC_Pos)        /*!< 0x00000020 */

+#define I2C_CR1_ENPEC                       I2C_CR1_ENPEC_Msk                  /*!< PEC Enable */

+#define I2C_CR1_ENGC_Pos                    (6U)                               

+#define I2C_CR1_ENGC_Msk                    (0x1UL << I2C_CR1_ENGC_Pos)         /*!< 0x00000040 */

+#define I2C_CR1_ENGC                        I2C_CR1_ENGC_Msk                   /*!< General Call Enable */

+#define I2C_CR1_NOSTRETCH_Pos               (7U)                               

+#define I2C_CR1_NOSTRETCH_Msk               (0x1UL << I2C_CR1_NOSTRETCH_Pos)    /*!< 0x00000080 */

+#define I2C_CR1_NOSTRETCH                   I2C_CR1_NOSTRETCH_Msk              /*!< Clock Stretching Disable (Slave mode) */

+#define I2C_CR1_START_Pos                   (8U)                               

+#define I2C_CR1_START_Msk                   (0x1UL << I2C_CR1_START_Pos)        /*!< 0x00000100 */

+#define I2C_CR1_START                       I2C_CR1_START_Msk                  /*!< Start Generation */

+#define I2C_CR1_STOP_Pos                    (9U)                               

+#define I2C_CR1_STOP_Msk                    (0x1UL << I2C_CR1_STOP_Pos)         /*!< 0x00000200 */

+#define I2C_CR1_STOP                        I2C_CR1_STOP_Msk                   /*!< Stop Generation */

+#define I2C_CR1_ACK_Pos                     (10U)                              

+#define I2C_CR1_ACK_Msk                     (0x1UL << I2C_CR1_ACK_Pos)          /*!< 0x00000400 */

+#define I2C_CR1_ACK                         I2C_CR1_ACK_Msk                    /*!< Acknowledge Enable */

+#define I2C_CR1_POS_Pos                     (11U)                              

+#define I2C_CR1_POS_Msk                     (0x1UL << I2C_CR1_POS_Pos)          /*!< 0x00000800 */

+#define I2C_CR1_POS                         I2C_CR1_POS_Msk                    /*!< Acknowledge/PEC Position (for data reception) */

+#define I2C_CR1_PEC_Pos                     (12U)                              

+#define I2C_CR1_PEC_Msk                     (0x1UL << I2C_CR1_PEC_Pos)          /*!< 0x00001000 */

+#define I2C_CR1_PEC                         I2C_CR1_PEC_Msk                    /*!< Packet Error Checking */

+#define I2C_CR1_ALERT_Pos                   (13U)                              

+#define I2C_CR1_ALERT_Msk                   (0x1UL << I2C_CR1_ALERT_Pos)        /*!< 0x00002000 */

+#define I2C_CR1_ALERT                       I2C_CR1_ALERT_Msk                  /*!< SMBus Alert */

+#define I2C_CR1_SWRST_Pos                   (15U)                              

+#define I2C_CR1_SWRST_Msk                   (0x1UL << I2C_CR1_SWRST_Pos)        /*!< 0x00008000 */

+#define I2C_CR1_SWRST                       I2C_CR1_SWRST_Msk                  /*!< Software Reset */

+

+/*******************  Bit definition for I2C_CR2 register  ********************/

+#define I2C_CR2_FREQ_Pos                    (0U)                               

+#define I2C_CR2_FREQ_Msk                    (0x3FUL << I2C_CR2_FREQ_Pos)        /*!< 0x0000003F */

+#define I2C_CR2_FREQ                        I2C_CR2_FREQ_Msk                   /*!< FREQ[5:0] bits (Peripheral Clock Frequency) */

+#define I2C_CR2_FREQ_0                      (0x01UL << I2C_CR2_FREQ_Pos)        /*!< 0x00000001 */

+#define I2C_CR2_FREQ_1                      (0x02UL << I2C_CR2_FREQ_Pos)        /*!< 0x00000002 */

+#define I2C_CR2_FREQ_2                      (0x04UL << I2C_CR2_FREQ_Pos)        /*!< 0x00000004 */

+#define I2C_CR2_FREQ_3                      (0x08UL << I2C_CR2_FREQ_Pos)        /*!< 0x00000008 */

+#define I2C_CR2_FREQ_4                      (0x10UL << I2C_CR2_FREQ_Pos)        /*!< 0x00000010 */

+#define I2C_CR2_FREQ_5                      (0x20UL << I2C_CR2_FREQ_Pos)        /*!< 0x00000020 */

+

+#define I2C_CR2_ITERREN_Pos                 (8U)                               

+#define I2C_CR2_ITERREN_Msk                 (0x1UL << I2C_CR2_ITERREN_Pos)      /*!< 0x00000100 */

+#define I2C_CR2_ITERREN                     I2C_CR2_ITERREN_Msk                /*!< Error Interrupt Enable */

+#define I2C_CR2_ITEVTEN_Pos                 (9U)                               

+#define I2C_CR2_ITEVTEN_Msk                 (0x1UL << I2C_CR2_ITEVTEN_Pos)      /*!< 0x00000200 */

+#define I2C_CR2_ITEVTEN                     I2C_CR2_ITEVTEN_Msk                /*!< Event Interrupt Enable */

+#define I2C_CR2_ITBUFEN_Pos                 (10U)                              

+#define I2C_CR2_ITBUFEN_Msk                 (0x1UL << I2C_CR2_ITBUFEN_Pos)      /*!< 0x00000400 */

+#define I2C_CR2_ITBUFEN                     I2C_CR2_ITBUFEN_Msk                /*!< Buffer Interrupt Enable */

+#define I2C_CR2_DMAEN_Pos                   (11U)                              

+#define I2C_CR2_DMAEN_Msk                   (0x1UL << I2C_CR2_DMAEN_Pos)        /*!< 0x00000800 */

+#define I2C_CR2_DMAEN                       I2C_CR2_DMAEN_Msk                  /*!< DMA Requests Enable */

+#define I2C_CR2_LAST_Pos                    (12U)                              

+#define I2C_CR2_LAST_Msk                    (0x1UL << I2C_CR2_LAST_Pos)         /*!< 0x00001000 */

+#define I2C_CR2_LAST                        I2C_CR2_LAST_Msk                   /*!< DMA Last Transfer */

+

+/*******************  Bit definition for I2C_OAR1 register  *******************/

+#define I2C_OAR1_ADD1_7                     (0x000000FEU)                      /*!< Interface Address */

+#define I2C_OAR1_ADD8_9                     (0x00000300U)                      /*!< Interface Address */

+

+#define I2C_OAR1_ADD0_Pos                   (0U)                               

+#define I2C_OAR1_ADD0_Msk                   (0x1UL << I2C_OAR1_ADD0_Pos)        /*!< 0x00000001 */

+#define I2C_OAR1_ADD0                       I2C_OAR1_ADD0_Msk                  /*!< Bit 0 */

+#define I2C_OAR1_ADD1_Pos                   (1U)                               

+#define I2C_OAR1_ADD1_Msk                   (0x1UL << I2C_OAR1_ADD1_Pos)        /*!< 0x00000002 */

+#define I2C_OAR1_ADD1                       I2C_OAR1_ADD1_Msk                  /*!< Bit 1 */

+#define I2C_OAR1_ADD2_Pos                   (2U)                               

+#define I2C_OAR1_ADD2_Msk                   (0x1UL << I2C_OAR1_ADD2_Pos)        /*!< 0x00000004 */

+#define I2C_OAR1_ADD2                       I2C_OAR1_ADD2_Msk                  /*!< Bit 2 */

+#define I2C_OAR1_ADD3_Pos                   (3U)                               

+#define I2C_OAR1_ADD3_Msk                   (0x1UL << I2C_OAR1_ADD3_Pos)        /*!< 0x00000008 */

+#define I2C_OAR1_ADD3                       I2C_OAR1_ADD3_Msk                  /*!< Bit 3 */

+#define I2C_OAR1_ADD4_Pos                   (4U)                               

+#define I2C_OAR1_ADD4_Msk                   (0x1UL << I2C_OAR1_ADD4_Pos)        /*!< 0x00000010 */

+#define I2C_OAR1_ADD4                       I2C_OAR1_ADD4_Msk                  /*!< Bit 4 */

+#define I2C_OAR1_ADD5_Pos                   (5U)                               

+#define I2C_OAR1_ADD5_Msk                   (0x1UL << I2C_OAR1_ADD5_Pos)        /*!< 0x00000020 */

+#define I2C_OAR1_ADD5                       I2C_OAR1_ADD5_Msk                  /*!< Bit 5 */

+#define I2C_OAR1_ADD6_Pos                   (6U)                               

+#define I2C_OAR1_ADD6_Msk                   (0x1UL << I2C_OAR1_ADD6_Pos)        /*!< 0x00000040 */

+#define I2C_OAR1_ADD6                       I2C_OAR1_ADD6_Msk                  /*!< Bit 6 */

+#define I2C_OAR1_ADD7_Pos                   (7U)                               

+#define I2C_OAR1_ADD7_Msk                   (0x1UL << I2C_OAR1_ADD7_Pos)        /*!< 0x00000080 */

+#define I2C_OAR1_ADD7                       I2C_OAR1_ADD7_Msk                  /*!< Bit 7 */

+#define I2C_OAR1_ADD8_Pos                   (8U)                               

+#define I2C_OAR1_ADD8_Msk                   (0x1UL << I2C_OAR1_ADD8_Pos)        /*!< 0x00000100 */

+#define I2C_OAR1_ADD8                       I2C_OAR1_ADD8_Msk                  /*!< Bit 8 */

+#define I2C_OAR1_ADD9_Pos                   (9U)                               

+#define I2C_OAR1_ADD9_Msk                   (0x1UL << I2C_OAR1_ADD9_Pos)        /*!< 0x00000200 */

+#define I2C_OAR1_ADD9                       I2C_OAR1_ADD9_Msk                  /*!< Bit 9 */

+

+#define I2C_OAR1_ADDMODE_Pos                (15U)                              

+#define I2C_OAR1_ADDMODE_Msk                (0x1UL << I2C_OAR1_ADDMODE_Pos)     /*!< 0x00008000 */

+#define I2C_OAR1_ADDMODE                    I2C_OAR1_ADDMODE_Msk               /*!< Addressing Mode (Slave mode) */

+

+/*******************  Bit definition for I2C_OAR2 register  *******************/

+#define I2C_OAR2_ENDUAL_Pos                 (0U)                               

+#define I2C_OAR2_ENDUAL_Msk                 (0x1UL << I2C_OAR2_ENDUAL_Pos)      /*!< 0x00000001 */

+#define I2C_OAR2_ENDUAL                     I2C_OAR2_ENDUAL_Msk                /*!< Dual addressing mode enable */

+#define I2C_OAR2_ADD2_Pos                   (1U)                               

+#define I2C_OAR2_ADD2_Msk                   (0x7FUL << I2C_OAR2_ADD2_Pos)       /*!< 0x000000FE */

+#define I2C_OAR2_ADD2                       I2C_OAR2_ADD2_Msk                  /*!< Interface address */

+

+/********************  Bit definition for I2C_DR register  ********************/

+#define I2C_DR_DR_Pos                       (0U)                               

+#define I2C_DR_DR_Msk                       (0xFFUL << I2C_DR_DR_Pos)           /*!< 0x000000FF */

+#define I2C_DR_DR                           I2C_DR_DR_Msk                      /*!< 8-bit Data Register */

+

+/*******************  Bit definition for I2C_SR1 register  ********************/

+#define I2C_SR1_SB_Pos                      (0U)                               

+#define I2C_SR1_SB_Msk                      (0x1UL << I2C_SR1_SB_Pos)           /*!< 0x00000001 */

+#define I2C_SR1_SB                          I2C_SR1_SB_Msk                     /*!< Start Bit (Master mode) */

+#define I2C_SR1_ADDR_Pos                    (1U)                               

+#define I2C_SR1_ADDR_Msk                    (0x1UL << I2C_SR1_ADDR_Pos)         /*!< 0x00000002 */

+#define I2C_SR1_ADDR                        I2C_SR1_ADDR_Msk                   /*!< Address sent (master mode)/matched (slave mode) */

+#define I2C_SR1_BTF_Pos                     (2U)                               

+#define I2C_SR1_BTF_Msk                     (0x1UL << I2C_SR1_BTF_Pos)          /*!< 0x00000004 */

+#define I2C_SR1_BTF                         I2C_SR1_BTF_Msk                    /*!< Byte Transfer Finished */

+#define I2C_SR1_ADD10_Pos                   (3U)                               

+#define I2C_SR1_ADD10_Msk                   (0x1UL << I2C_SR1_ADD10_Pos)        /*!< 0x00000008 */

+#define I2C_SR1_ADD10                       I2C_SR1_ADD10_Msk                  /*!< 10-bit header sent (Master mode) */

+#define I2C_SR1_STOPF_Pos                   (4U)                               

+#define I2C_SR1_STOPF_Msk                   (0x1UL << I2C_SR1_STOPF_Pos)        /*!< 0x00000010 */

+#define I2C_SR1_STOPF                       I2C_SR1_STOPF_Msk                  /*!< Stop detection (Slave mode) */

+#define I2C_SR1_RXNE_Pos                    (6U)                               

+#define I2C_SR1_RXNE_Msk                    (0x1UL << I2C_SR1_RXNE_Pos)         /*!< 0x00000040 */

+#define I2C_SR1_RXNE                        I2C_SR1_RXNE_Msk                   /*!< Data Register not Empty (receivers) */

+#define I2C_SR1_TXE_Pos                     (7U)                               

+#define I2C_SR1_TXE_Msk                     (0x1UL << I2C_SR1_TXE_Pos)          /*!< 0x00000080 */

+#define I2C_SR1_TXE                         I2C_SR1_TXE_Msk                    /*!< Data Register Empty (transmitters) */

+#define I2C_SR1_BERR_Pos                    (8U)                               

+#define I2C_SR1_BERR_Msk                    (0x1UL << I2C_SR1_BERR_Pos)         /*!< 0x00000100 */

+#define I2C_SR1_BERR                        I2C_SR1_BERR_Msk                   /*!< Bus Error */

+#define I2C_SR1_ARLO_Pos                    (9U)                               

+#define I2C_SR1_ARLO_Msk                    (0x1UL << I2C_SR1_ARLO_Pos)         /*!< 0x00000200 */

+#define I2C_SR1_ARLO                        I2C_SR1_ARLO_Msk                   /*!< Arbitration Lost (master mode) */

+#define I2C_SR1_AF_Pos                      (10U)                              

+#define I2C_SR1_AF_Msk                      (0x1UL << I2C_SR1_AF_Pos)           /*!< 0x00000400 */

+#define I2C_SR1_AF                          I2C_SR1_AF_Msk                     /*!< Acknowledge Failure */

+#define I2C_SR1_OVR_Pos                     (11U)                              

+#define I2C_SR1_OVR_Msk                     (0x1UL << I2C_SR1_OVR_Pos)          /*!< 0x00000800 */

+#define I2C_SR1_OVR                         I2C_SR1_OVR_Msk                    /*!< Overrun/Underrun */

+#define I2C_SR1_PECERR_Pos                  (12U)                              

+#define I2C_SR1_PECERR_Msk                  (0x1UL << I2C_SR1_PECERR_Pos)       /*!< 0x00001000 */

+#define I2C_SR1_PECERR                      I2C_SR1_PECERR_Msk                 /*!< PEC Error in reception */

+#define I2C_SR1_TIMEOUT_Pos                 (14U)                              

+#define I2C_SR1_TIMEOUT_Msk                 (0x1UL << I2C_SR1_TIMEOUT_Pos)      /*!< 0x00004000 */

+#define I2C_SR1_TIMEOUT                     I2C_SR1_TIMEOUT_Msk                /*!< Timeout or Tlow Error */

+#define I2C_SR1_SMBALERT_Pos                (15U)                              

+#define I2C_SR1_SMBALERT_Msk                (0x1UL << I2C_SR1_SMBALERT_Pos)     /*!< 0x00008000 */

+#define I2C_SR1_SMBALERT                    I2C_SR1_SMBALERT_Msk               /*!< SMBus Alert */

+

+/*******************  Bit definition for I2C_SR2 register  ********************/

+#define I2C_SR2_MSL_Pos                     (0U)                               

+#define I2C_SR2_MSL_Msk                     (0x1UL << I2C_SR2_MSL_Pos)          /*!< 0x00000001 */

+#define I2C_SR2_MSL                         I2C_SR2_MSL_Msk                    /*!< Master/Slave */

+#define I2C_SR2_BUSY_Pos                    (1U)                               

+#define I2C_SR2_BUSY_Msk                    (0x1UL << I2C_SR2_BUSY_Pos)         /*!< 0x00000002 */

+#define I2C_SR2_BUSY                        I2C_SR2_BUSY_Msk                   /*!< Bus Busy */

+#define I2C_SR2_TRA_Pos                     (2U)                               

+#define I2C_SR2_TRA_Msk                     (0x1UL << I2C_SR2_TRA_Pos)          /*!< 0x00000004 */

+#define I2C_SR2_TRA                         I2C_SR2_TRA_Msk                    /*!< Transmitter/Receiver */

+#define I2C_SR2_GENCALL_Pos                 (4U)                               

+#define I2C_SR2_GENCALL_Msk                 (0x1UL << I2C_SR2_GENCALL_Pos)      /*!< 0x00000010 */

+#define I2C_SR2_GENCALL                     I2C_SR2_GENCALL_Msk                /*!< General Call Address (Slave mode) */

+#define I2C_SR2_SMBDEFAULT_Pos              (5U)                               

+#define I2C_SR2_SMBDEFAULT_Msk              (0x1UL << I2C_SR2_SMBDEFAULT_Pos)   /*!< 0x00000020 */

+#define I2C_SR2_SMBDEFAULT                  I2C_SR2_SMBDEFAULT_Msk             /*!< SMBus Device Default Address (Slave mode) */

+#define I2C_SR2_SMBHOST_Pos                 (6U)                               

+#define I2C_SR2_SMBHOST_Msk                 (0x1UL << I2C_SR2_SMBHOST_Pos)      /*!< 0x00000040 */

+#define I2C_SR2_SMBHOST                     I2C_SR2_SMBHOST_Msk                /*!< SMBus Host Header (Slave mode) */

+#define I2C_SR2_DUALF_Pos                   (7U)                               

+#define I2C_SR2_DUALF_Msk                   (0x1UL << I2C_SR2_DUALF_Pos)        /*!< 0x00000080 */

+#define I2C_SR2_DUALF                       I2C_SR2_DUALF_Msk                  /*!< Dual Flag (Slave mode) */

+#define I2C_SR2_PEC_Pos                     (8U)                               

+#define I2C_SR2_PEC_Msk                     (0xFFUL << I2C_SR2_PEC_Pos)         /*!< 0x0000FF00 */

+#define I2C_SR2_PEC                         I2C_SR2_PEC_Msk                    /*!< Packet Error Checking Register */

+

+/*******************  Bit definition for I2C_CCR register  ********************/

+#define I2C_CCR_CCR_Pos                     (0U)                               

+#define I2C_CCR_CCR_Msk                     (0xFFFUL << I2C_CCR_CCR_Pos)        /*!< 0x00000FFF */

+#define I2C_CCR_CCR                         I2C_CCR_CCR_Msk                    /*!< Clock Control Register in Fast/Standard mode (Master mode) */

+#define I2C_CCR_DUTY_Pos                    (14U)                              

+#define I2C_CCR_DUTY_Msk                    (0x1UL << I2C_CCR_DUTY_Pos)         /*!< 0x00004000 */

+#define I2C_CCR_DUTY                        I2C_CCR_DUTY_Msk                   /*!< Fast Mode Duty Cycle */

+#define I2C_CCR_FS_Pos                      (15U)                              

+#define I2C_CCR_FS_Msk                      (0x1UL << I2C_CCR_FS_Pos)           /*!< 0x00008000 */

+#define I2C_CCR_FS                          I2C_CCR_FS_Msk                     /*!< I2C Master Mode Selection */

+

+/******************  Bit definition for I2C_TRISE register  *******************/

+#define I2C_TRISE_TRISE_Pos                 (0U)                               

+#define I2C_TRISE_TRISE_Msk                 (0x3FUL << I2C_TRISE_TRISE_Pos)     /*!< 0x0000003F */

+#define I2C_TRISE_TRISE                     I2C_TRISE_TRISE_Msk                /*!< Maximum Rise Time in Fast/Standard mode (Master mode) */

+

+/******************************************************************************/

+/*                                                                            */

+/*                        Independent WATCHDOG (IWDG)                         */

+/*                                                                            */

+/******************************************************************************/

+

+/*******************  Bit definition for IWDG_KR register  ********************/

+#define IWDG_KR_KEY_Pos                     (0U)                               

+#define IWDG_KR_KEY_Msk                     (0xFFFFUL << IWDG_KR_KEY_Pos)       /*!< 0x0000FFFF */

+#define IWDG_KR_KEY                         IWDG_KR_KEY_Msk                    /*!< Key value (write only, read 0000h) */

+

+/*******************  Bit definition for IWDG_PR register  ********************/

+#define IWDG_PR_PR_Pos                      (0U)                               

+#define IWDG_PR_PR_Msk                      (0x7UL << IWDG_PR_PR_Pos)           /*!< 0x00000007 */

+#define IWDG_PR_PR                          IWDG_PR_PR_Msk                     /*!< PR[2:0] (Prescaler divider) */

+#define IWDG_PR_PR_0                        (0x1UL << IWDG_PR_PR_Pos)           /*!< 0x00000001 */

+#define IWDG_PR_PR_1                        (0x2UL << IWDG_PR_PR_Pos)           /*!< 0x00000002 */

+#define IWDG_PR_PR_2                        (0x4UL << IWDG_PR_PR_Pos)           /*!< 0x00000004 */

+

+/*******************  Bit definition for IWDG_RLR register  *******************/

+#define IWDG_RLR_RL_Pos                     (0U)                               

+#define IWDG_RLR_RL_Msk                     (0xFFFUL << IWDG_RLR_RL_Pos)        /*!< 0x00000FFF */

+#define IWDG_RLR_RL                         IWDG_RLR_RL_Msk                    /*!< Watchdog counter reload value */

+

+/*******************  Bit definition for IWDG_SR register  ********************/

+#define IWDG_SR_PVU_Pos                     (0U)                               

+#define IWDG_SR_PVU_Msk                     (0x1UL << IWDG_SR_PVU_Pos)          /*!< 0x00000001 */

+#define IWDG_SR_PVU                         IWDG_SR_PVU_Msk                    /*!< Watchdog prescaler value update */

+#define IWDG_SR_RVU_Pos                     (1U)                               

+#define IWDG_SR_RVU_Msk                     (0x1UL << IWDG_SR_RVU_Pos)          /*!< 0x00000002 */

+#define IWDG_SR_RVU                         IWDG_SR_RVU_Msk                    /*!< Watchdog counter reload value update */

+

+/******************************************************************************/

+/*                                                                            */

+/*                          LCD Controller (LCD)                              */

+/*                                                                            */

+/******************************************************************************/

+

+/*******************  Bit definition for LCD_CR register  *********************/

+#define LCD_CR_LCDEN_Pos           (0U)                                        

+#define LCD_CR_LCDEN_Msk           (0x1UL << LCD_CR_LCDEN_Pos)                  /*!< 0x00000001 */

+#define LCD_CR_LCDEN               LCD_CR_LCDEN_Msk                            /*!< LCD Enable Bit */

+#define LCD_CR_VSEL_Pos            (1U)                                        

+#define LCD_CR_VSEL_Msk            (0x1UL << LCD_CR_VSEL_Pos)                   /*!< 0x00000002 */

+#define LCD_CR_VSEL                LCD_CR_VSEL_Msk                             /*!< Voltage source selector Bit */

+

+#define LCD_CR_DUTY_Pos            (2U)                                        

+#define LCD_CR_DUTY_Msk            (0x7UL << LCD_CR_DUTY_Pos)                   /*!< 0x0000001C */

+#define LCD_CR_DUTY                LCD_CR_DUTY_Msk                             /*!< DUTY[2:0] bits (Duty selector) */

+#define LCD_CR_DUTY_0              (0x1UL << LCD_CR_DUTY_Pos)                   /*!< 0x00000004 */

+#define LCD_CR_DUTY_1              (0x2UL << LCD_CR_DUTY_Pos)                   /*!< 0x00000008 */

+#define LCD_CR_DUTY_2              (0x4UL << LCD_CR_DUTY_Pos)                   /*!< 0x00000010 */

+

+#define LCD_CR_BIAS_Pos            (5U)                                        

+#define LCD_CR_BIAS_Msk            (0x3UL << LCD_CR_BIAS_Pos)                   /*!< 0x00000060 */

+#define LCD_CR_BIAS                LCD_CR_BIAS_Msk                             /*!< BIAS[1:0] bits (Bias selector) */

+#define LCD_CR_BIAS_0              (0x1UL << LCD_CR_BIAS_Pos)                   /*!< 0x00000020 */

+#define LCD_CR_BIAS_1              (0x2UL << LCD_CR_BIAS_Pos)                   /*!< 0x00000040 */

+

+#define LCD_CR_MUX_SEG_Pos         (7U)                                        

+#define LCD_CR_MUX_SEG_Msk         (0x1UL << LCD_CR_MUX_SEG_Pos)                /*!< 0x00000080 */

+#define LCD_CR_MUX_SEG             LCD_CR_MUX_SEG_Msk                          /*!< Mux Segment Enable Bit */

+

+/*******************  Bit definition for LCD_FCR register  ********************/

+#define LCD_FCR_HD_Pos             (0U)                                        

+#define LCD_FCR_HD_Msk             (0x1UL << LCD_FCR_HD_Pos)                    /*!< 0x00000001 */

+#define LCD_FCR_HD                 LCD_FCR_HD_Msk                              /*!< High Drive Enable Bit */

+#define LCD_FCR_SOFIE_Pos          (1U)                                        

+#define LCD_FCR_SOFIE_Msk          (0x1UL << LCD_FCR_SOFIE_Pos)                 /*!< 0x00000002 */

+#define LCD_FCR_SOFIE              LCD_FCR_SOFIE_Msk                           /*!< Start of Frame Interrupt Enable Bit */

+#define LCD_FCR_UDDIE_Pos          (3U)                                        

+#define LCD_FCR_UDDIE_Msk          (0x1UL << LCD_FCR_UDDIE_Pos)                 /*!< 0x00000008 */

+#define LCD_FCR_UDDIE              LCD_FCR_UDDIE_Msk                           /*!< Update Display Done Interrupt Enable Bit */

+

+#define LCD_FCR_PON_Pos            (4U)                                        

+#define LCD_FCR_PON_Msk            (0x7UL << LCD_FCR_PON_Pos)                   /*!< 0x00000070 */

+#define LCD_FCR_PON                LCD_FCR_PON_Msk                             /*!< PON[2:0] bits (Puls ON Duration) */

+#define LCD_FCR_PON_0              (0x1UL << LCD_FCR_PON_Pos)                   /*!< 0x00000010 */

+#define LCD_FCR_PON_1              (0x2UL << LCD_FCR_PON_Pos)                   /*!< 0x00000020 */

+#define LCD_FCR_PON_2              (0x4UL << LCD_FCR_PON_Pos)                   /*!< 0x00000040 */

+

+#define LCD_FCR_DEAD_Pos           (7U)                                        

+#define LCD_FCR_DEAD_Msk           (0x7UL << LCD_FCR_DEAD_Pos)                  /*!< 0x00000380 */

+#define LCD_FCR_DEAD               LCD_FCR_DEAD_Msk                            /*!< DEAD[2:0] bits (DEAD Time) */

+#define LCD_FCR_DEAD_0             (0x1UL << LCD_FCR_DEAD_Pos)                  /*!< 0x00000080 */

+#define LCD_FCR_DEAD_1             (0x2UL << LCD_FCR_DEAD_Pos)                  /*!< 0x00000100 */

+#define LCD_FCR_DEAD_2             (0x4UL << LCD_FCR_DEAD_Pos)                  /*!< 0x00000200 */

+

+#define LCD_FCR_CC_Pos             (10U)                                       

+#define LCD_FCR_CC_Msk             (0x7UL << LCD_FCR_CC_Pos)                    /*!< 0x00001C00 */

+#define LCD_FCR_CC                 LCD_FCR_CC_Msk                              /*!< CC[2:0] bits (Contrast Control) */

+#define LCD_FCR_CC_0               (0x1UL << LCD_FCR_CC_Pos)                    /*!< 0x00000400 */

+#define LCD_FCR_CC_1               (0x2UL << LCD_FCR_CC_Pos)                    /*!< 0x00000800 */

+#define LCD_FCR_CC_2               (0x4UL << LCD_FCR_CC_Pos)                    /*!< 0x00001000 */

+

+#define LCD_FCR_BLINKF_Pos         (13U)                                       

+#define LCD_FCR_BLINKF_Msk         (0x7UL << LCD_FCR_BLINKF_Pos)                /*!< 0x0000E000 */

+#define LCD_FCR_BLINKF             LCD_FCR_BLINKF_Msk                          /*!< BLINKF[2:0] bits (Blink Frequency) */

+#define LCD_FCR_BLINKF_0           (0x1UL << LCD_FCR_BLINKF_Pos)                /*!< 0x00002000 */

+#define LCD_FCR_BLINKF_1           (0x2UL << LCD_FCR_BLINKF_Pos)                /*!< 0x00004000 */

+#define LCD_FCR_BLINKF_2           (0x4UL << LCD_FCR_BLINKF_Pos)                /*!< 0x00008000 */

+

+#define LCD_FCR_BLINK_Pos          (16U)                                       

+#define LCD_FCR_BLINK_Msk          (0x3UL << LCD_FCR_BLINK_Pos)                 /*!< 0x00030000 */

+#define LCD_FCR_BLINK              LCD_FCR_BLINK_Msk                           /*!< BLINK[1:0] bits (Blink Enable) */

+#define LCD_FCR_BLINK_0            (0x1UL << LCD_FCR_BLINK_Pos)                 /*!< 0x00010000 */

+#define LCD_FCR_BLINK_1            (0x2UL << LCD_FCR_BLINK_Pos)                 /*!< 0x00020000 */

+

+#define LCD_FCR_DIV_Pos            (18U)                                       

+#define LCD_FCR_DIV_Msk            (0xFUL << LCD_FCR_DIV_Pos)                   /*!< 0x003C0000 */

+#define LCD_FCR_DIV                LCD_FCR_DIV_Msk                             /*!< DIV[3:0] bits (Divider) */

+#define LCD_FCR_PS_Pos             (22U)                                       

+#define LCD_FCR_PS_Msk             (0xFUL << LCD_FCR_PS_Pos)                    /*!< 0x03C00000 */

+#define LCD_FCR_PS                 LCD_FCR_PS_Msk                              /*!< PS[3:0] bits (Prescaler) */

+

+/*******************  Bit definition for LCD_SR register  *********************/

+#define LCD_SR_ENS_Pos             (0U)                                        

+#define LCD_SR_ENS_Msk             (0x1UL << LCD_SR_ENS_Pos)                    /*!< 0x00000001 */

+#define LCD_SR_ENS                 LCD_SR_ENS_Msk                              /*!< LCD Enabled Bit */

+#define LCD_SR_SOF_Pos             (1U)                                        

+#define LCD_SR_SOF_Msk             (0x1UL << LCD_SR_SOF_Pos)                    /*!< 0x00000002 */

+#define LCD_SR_SOF                 LCD_SR_SOF_Msk                              /*!< Start Of Frame Flag Bit */

+#define LCD_SR_UDR_Pos             (2U)                                        

+#define LCD_SR_UDR_Msk             (0x1UL << LCD_SR_UDR_Pos)                    /*!< 0x00000004 */

+#define LCD_SR_UDR                 LCD_SR_UDR_Msk                              /*!< Update Display Request Bit */

+#define LCD_SR_UDD_Pos             (3U)                                        

+#define LCD_SR_UDD_Msk             (0x1UL << LCD_SR_UDD_Pos)                    /*!< 0x00000008 */

+#define LCD_SR_UDD                 LCD_SR_UDD_Msk                              /*!< Update Display Done Flag Bit */

+#define LCD_SR_RDY_Pos             (4U)                                        

+#define LCD_SR_RDY_Msk             (0x1UL << LCD_SR_RDY_Pos)                    /*!< 0x00000010 */

+#define LCD_SR_RDY                 LCD_SR_RDY_Msk                              /*!< Ready Flag Bit */

+#define LCD_SR_FCRSR_Pos           (5U)                                        

+#define LCD_SR_FCRSR_Msk           (0x1UL << LCD_SR_FCRSR_Pos)                  /*!< 0x00000020 */

+#define LCD_SR_FCRSR               LCD_SR_FCRSR_Msk                            /*!< LCD FCR Register Synchronization Flag Bit */

+

+/*******************  Bit definition for LCD_CLR register  ********************/

+#define LCD_CLR_SOFC_Pos           (1U)                                        

+#define LCD_CLR_SOFC_Msk           (0x1UL << LCD_CLR_SOFC_Pos)                  /*!< 0x00000002 */

+#define LCD_CLR_SOFC               LCD_CLR_SOFC_Msk                            /*!< Start Of Frame Flag Clear Bit */

+#define LCD_CLR_UDDC_Pos           (3U)                                        

+#define LCD_CLR_UDDC_Msk           (0x1UL << LCD_CLR_UDDC_Pos)                  /*!< 0x00000008 */

+#define LCD_CLR_UDDC               LCD_CLR_UDDC_Msk                            /*!< Update Display Done Flag Clear Bit */

+

+/*******************  Bit definition for LCD_RAM register  ********************/

+#define LCD_RAM_SEGMENT_DATA_Pos   (0U)                                        

+#define LCD_RAM_SEGMENT_DATA_Msk   (0xFFFFFFFFUL << LCD_RAM_SEGMENT_DATA_Pos)   /*!< 0xFFFFFFFF */

+#define LCD_RAM_SEGMENT_DATA       LCD_RAM_SEGMENT_DATA_Msk                    /*!< Segment Data Bits */

+

+/******************************************************************************/

+/*                                                                            */

+/*                          Power Control (PWR)                               */

+/*                                                                            */

+/******************************************************************************/

+

+#define PWR_PVD_SUPPORT                       /*!< PWR feature available only on specific devices: Power Voltage Detection feature */

+

+/********************  Bit definition for PWR_CR register  ********************/

+#define PWR_CR_LPSDSR_Pos                   (0U)                               

+#define PWR_CR_LPSDSR_Msk                   (0x1UL << PWR_CR_LPSDSR_Pos)        /*!< 0x00000001 */

+#define PWR_CR_LPSDSR                       PWR_CR_LPSDSR_Msk                  /*!< Low-power deepsleep/sleep/low power run */

+#define PWR_CR_PDDS_Pos                     (1U)                               

+#define PWR_CR_PDDS_Msk                     (0x1UL << PWR_CR_PDDS_Pos)          /*!< 0x00000002 */

+#define PWR_CR_PDDS                         PWR_CR_PDDS_Msk                    /*!< Power Down Deepsleep */

+#define PWR_CR_CWUF_Pos                     (2U)                               

+#define PWR_CR_CWUF_Msk                     (0x1UL << PWR_CR_CWUF_Pos)          /*!< 0x00000004 */

+#define PWR_CR_CWUF                         PWR_CR_CWUF_Msk                    /*!< Clear Wakeup Flag */

+#define PWR_CR_CSBF_Pos                     (3U)                               

+#define PWR_CR_CSBF_Msk                     (0x1UL << PWR_CR_CSBF_Pos)          /*!< 0x00000008 */

+#define PWR_CR_CSBF                         PWR_CR_CSBF_Msk                    /*!< Clear Standby Flag */

+#define PWR_CR_PVDE_Pos                     (4U)                               

+#define PWR_CR_PVDE_Msk                     (0x1UL << PWR_CR_PVDE_Pos)          /*!< 0x00000010 */

+#define PWR_CR_PVDE                         PWR_CR_PVDE_Msk                    /*!< Power Voltage Detector Enable */

+

+#define PWR_CR_PLS_Pos                      (5U)                               

+#define PWR_CR_PLS_Msk                      (0x7UL << PWR_CR_PLS_Pos)           /*!< 0x000000E0 */

+#define PWR_CR_PLS                          PWR_CR_PLS_Msk                     /*!< PLS[2:0] bits (PVD Level Selection) */

+#define PWR_CR_PLS_0                        (0x1UL << PWR_CR_PLS_Pos)           /*!< 0x00000020 */

+#define PWR_CR_PLS_1                        (0x2UL << PWR_CR_PLS_Pos)           /*!< 0x00000040 */

+#define PWR_CR_PLS_2                        (0x4UL << PWR_CR_PLS_Pos)           /*!< 0x00000080 */

+

+/*!< PVD level configuration */

+#define PWR_CR_PLS_LEV0                     (0x00000000U)                      /*!< PVD level 0 */

+#define PWR_CR_PLS_LEV1                     (0x00000020U)                      /*!< PVD level 1 */

+#define PWR_CR_PLS_LEV2                     (0x00000040U)                      /*!< PVD level 2 */

+#define PWR_CR_PLS_LEV3                     (0x00000060U)                      /*!< PVD level 3 */

+#define PWR_CR_PLS_LEV4                     (0x00000080U)                      /*!< PVD level 4 */

+#define PWR_CR_PLS_LEV5                     (0x000000A0U)                      /*!< PVD level 5 */

+#define PWR_CR_PLS_LEV6                     (0x000000C0U)                      /*!< PVD level 6 */

+#define PWR_CR_PLS_LEV7                     (0x000000E0U)                      /*!< PVD level 7 */

+

+#define PWR_CR_DBP_Pos                      (8U)                               

+#define PWR_CR_DBP_Msk                      (0x1UL << PWR_CR_DBP_Pos)           /*!< 0x00000100 */

+#define PWR_CR_DBP                          PWR_CR_DBP_Msk                     /*!< Disable Backup Domain write protection */

+#define PWR_CR_ULP_Pos                      (9U)                               

+#define PWR_CR_ULP_Msk                      (0x1UL << PWR_CR_ULP_Pos)           /*!< 0x00000200 */

+#define PWR_CR_ULP                          PWR_CR_ULP_Msk                     /*!< Ultra Low Power mode */

+#define PWR_CR_FWU_Pos                      (10U)                              

+#define PWR_CR_FWU_Msk                      (0x1UL << PWR_CR_FWU_Pos)           /*!< 0x00000400 */

+#define PWR_CR_FWU                          PWR_CR_FWU_Msk                     /*!< Fast wakeup */

+

+#define PWR_CR_VOS_Pos                      (11U)                              

+#define PWR_CR_VOS_Msk                      (0x3UL << PWR_CR_VOS_Pos)           /*!< 0x00001800 */

+#define PWR_CR_VOS                          PWR_CR_VOS_Msk                     /*!< VOS[1:0] bits (Voltage scaling range selection) */

+#define PWR_CR_VOS_0                        (0x1UL << PWR_CR_VOS_Pos)           /*!< 0x00000800 */

+#define PWR_CR_VOS_1                        (0x2UL << PWR_CR_VOS_Pos)           /*!< 0x00001000 */

+#define PWR_CR_LPRUN_Pos                    (14U)                              

+#define PWR_CR_LPRUN_Msk                    (0x1UL << PWR_CR_LPRUN_Pos)         /*!< 0x00004000 */

+#define PWR_CR_LPRUN                        PWR_CR_LPRUN_Msk                   /*!< Low power run mode */

+

+/*******************  Bit definition for PWR_CSR register  ********************/

+#define PWR_CSR_WUF_Pos                     (0U)                               

+#define PWR_CSR_WUF_Msk                     (0x1UL << PWR_CSR_WUF_Pos)          /*!< 0x00000001 */

+#define PWR_CSR_WUF                         PWR_CSR_WUF_Msk                    /*!< Wakeup Flag */

+#define PWR_CSR_SBF_Pos                     (1U)                               

+#define PWR_CSR_SBF_Msk                     (0x1UL << PWR_CSR_SBF_Pos)          /*!< 0x00000002 */

+#define PWR_CSR_SBF                         PWR_CSR_SBF_Msk                    /*!< Standby Flag */

+#define PWR_CSR_PVDO_Pos                    (2U)                               

+#define PWR_CSR_PVDO_Msk                    (0x1UL << PWR_CSR_PVDO_Pos)         /*!< 0x00000004 */

+#define PWR_CSR_PVDO                        PWR_CSR_PVDO_Msk                   /*!< PVD Output */

+#define PWR_CSR_VREFINTRDYF_Pos             (3U)                               

+#define PWR_CSR_VREFINTRDYF_Msk             (0x1UL << PWR_CSR_VREFINTRDYF_Pos)  /*!< 0x00000008 */

+#define PWR_CSR_VREFINTRDYF                 PWR_CSR_VREFINTRDYF_Msk            /*!< Internal voltage reference (VREFINT) ready flag */

+#define PWR_CSR_VOSF_Pos                    (4U)                               

+#define PWR_CSR_VOSF_Msk                    (0x1UL << PWR_CSR_VOSF_Pos)         /*!< 0x00000010 */

+#define PWR_CSR_VOSF                        PWR_CSR_VOSF_Msk                   /*!< Voltage Scaling select flag */

+#define PWR_CSR_REGLPF_Pos                  (5U)                               

+#define PWR_CSR_REGLPF_Msk                  (0x1UL << PWR_CSR_REGLPF_Pos)       /*!< 0x00000020 */

+#define PWR_CSR_REGLPF                      PWR_CSR_REGLPF_Msk                 /*!< Regulator LP flag */

+

+#define PWR_CSR_EWUP1_Pos                   (8U)                               

+#define PWR_CSR_EWUP1_Msk                   (0x1UL << PWR_CSR_EWUP1_Pos)        /*!< 0x00000100 */

+#define PWR_CSR_EWUP1                       PWR_CSR_EWUP1_Msk                  /*!< Enable WKUP pin 1 */

+#define PWR_CSR_EWUP2_Pos                   (9U)                               

+#define PWR_CSR_EWUP2_Msk                   (0x1UL << PWR_CSR_EWUP2_Pos)        /*!< 0x00000200 */

+#define PWR_CSR_EWUP2                       PWR_CSR_EWUP2_Msk                  /*!< Enable WKUP pin 2 */

+#define PWR_CSR_EWUP3_Pos                   (10U)                              

+#define PWR_CSR_EWUP3_Msk                   (0x1UL << PWR_CSR_EWUP3_Pos)        /*!< 0x00000400 */

+#define PWR_CSR_EWUP3                       PWR_CSR_EWUP3_Msk                  /*!< Enable WKUP pin 3 */

+

+/******************************************************************************/

+/*                                                                            */

+/*                      Reset and Clock Control (RCC)                         */

+/*                                                                            */

+/******************************************************************************/

+/*

+* @brief Specific device feature definitions  (not present on all devices in the STM32F0 serie)

+*/

+#define RCC_LSECSS_SUPPORT          /*!< LSE CSS feature support */

+

+/********************  Bit definition for RCC_CR register  ********************/

+#define RCC_CR_HSION_Pos                    (0U)                               

+#define RCC_CR_HSION_Msk                    (0x1UL << RCC_CR_HSION_Pos)         /*!< 0x00000001 */

+#define RCC_CR_HSION                        RCC_CR_HSION_Msk                   /*!< Internal High Speed clock enable */

+#define RCC_CR_HSIRDY_Pos                   (1U)                               

+#define RCC_CR_HSIRDY_Msk                   (0x1UL << RCC_CR_HSIRDY_Pos)        /*!< 0x00000002 */

+#define RCC_CR_HSIRDY                       RCC_CR_HSIRDY_Msk                  /*!< Internal High Speed clock ready flag */

+

+#define RCC_CR_MSION_Pos                    (8U)                               

+#define RCC_CR_MSION_Msk                    (0x1UL << RCC_CR_MSION_Pos)         /*!< 0x00000100 */

+#define RCC_CR_MSION                        RCC_CR_MSION_Msk                   /*!< Internal Multi Speed clock enable */

+#define RCC_CR_MSIRDY_Pos                   (9U)                               

+#define RCC_CR_MSIRDY_Msk                   (0x1UL << RCC_CR_MSIRDY_Pos)        /*!< 0x00000200 */

+#define RCC_CR_MSIRDY                       RCC_CR_MSIRDY_Msk                  /*!< Internal Multi Speed clock ready flag */

+

+#define RCC_CR_HSEON_Pos                    (16U)                              

+#define RCC_CR_HSEON_Msk                    (0x1UL << RCC_CR_HSEON_Pos)         /*!< 0x00010000 */

+#define RCC_CR_HSEON                        RCC_CR_HSEON_Msk                   /*!< External High Speed clock enable */

+#define RCC_CR_HSERDY_Pos                   (17U)                              

+#define RCC_CR_HSERDY_Msk                   (0x1UL << RCC_CR_HSERDY_Pos)        /*!< 0x00020000 */

+#define RCC_CR_HSERDY                       RCC_CR_HSERDY_Msk                  /*!< External High Speed clock ready flag */

+#define RCC_CR_HSEBYP_Pos                   (18U)                              

+#define RCC_CR_HSEBYP_Msk                   (0x1UL << RCC_CR_HSEBYP_Pos)        /*!< 0x00040000 */

+#define RCC_CR_HSEBYP                       RCC_CR_HSEBYP_Msk                  /*!< External High Speed clock Bypass */

+

+#define RCC_CR_PLLON_Pos                    (24U)                              

+#define RCC_CR_PLLON_Msk                    (0x1UL << RCC_CR_PLLON_Pos)         /*!< 0x01000000 */

+#define RCC_CR_PLLON                        RCC_CR_PLLON_Msk                   /*!< PLL enable */

+#define RCC_CR_PLLRDY_Pos                   (25U)                              

+#define RCC_CR_PLLRDY_Msk                   (0x1UL << RCC_CR_PLLRDY_Pos)        /*!< 0x02000000 */

+#define RCC_CR_PLLRDY                       RCC_CR_PLLRDY_Msk                  /*!< PLL clock ready flag */

+#define RCC_CR_CSSON_Pos                    (28U)                              

+#define RCC_CR_CSSON_Msk                    (0x1UL << RCC_CR_CSSON_Pos)         /*!< 0x10000000 */

+#define RCC_CR_CSSON                        RCC_CR_CSSON_Msk                   /*!< Clock Security System enable */

+

+#define RCC_CR_RTCPRE_Pos                   (29U)                              

+#define RCC_CR_RTCPRE_Msk                   (0x3UL << RCC_CR_RTCPRE_Pos)        /*!< 0x60000000 */

+#define RCC_CR_RTCPRE                       RCC_CR_RTCPRE_Msk                  /*!< RTC/LCD Prescaler */

+#define RCC_CR_RTCPRE_0                     (0x20000000U)                      /*!< Bit0 */

+#define RCC_CR_RTCPRE_1                     (0x40000000U)                      /*!< Bit1 */

+

+/********************  Bit definition for RCC_ICSCR register  *****************/

+#define RCC_ICSCR_HSICAL_Pos                (0U)                               

+#define RCC_ICSCR_HSICAL_Msk                (0xFFUL << RCC_ICSCR_HSICAL_Pos)    /*!< 0x000000FF */

+#define RCC_ICSCR_HSICAL                    RCC_ICSCR_HSICAL_Msk               /*!< Internal High Speed clock Calibration */

+#define RCC_ICSCR_HSITRIM_Pos               (8U)                               

+#define RCC_ICSCR_HSITRIM_Msk               (0x1FUL << RCC_ICSCR_HSITRIM_Pos)   /*!< 0x00001F00 */

+#define RCC_ICSCR_HSITRIM                   RCC_ICSCR_HSITRIM_Msk              /*!< Internal High Speed clock trimming */

+

+#define RCC_ICSCR_MSIRANGE_Pos              (13U)                              

+#define RCC_ICSCR_MSIRANGE_Msk              (0x7UL << RCC_ICSCR_MSIRANGE_Pos)   /*!< 0x0000E000 */

+#define RCC_ICSCR_MSIRANGE                  RCC_ICSCR_MSIRANGE_Msk             /*!< Internal Multi Speed clock Range */

+#define RCC_ICSCR_MSIRANGE_0                (0x0UL << RCC_ICSCR_MSIRANGE_Pos)   /*!< 0x00000000 */

+#define RCC_ICSCR_MSIRANGE_1                (0x1UL << RCC_ICSCR_MSIRANGE_Pos)   /*!< 0x00002000 */

+#define RCC_ICSCR_MSIRANGE_2                (0x2UL << RCC_ICSCR_MSIRANGE_Pos)   /*!< 0x00004000 */

+#define RCC_ICSCR_MSIRANGE_3                (0x3UL << RCC_ICSCR_MSIRANGE_Pos)   /*!< 0x00006000 */

+#define RCC_ICSCR_MSIRANGE_4                (0x4UL << RCC_ICSCR_MSIRANGE_Pos)   /*!< 0x00008000 */

+#define RCC_ICSCR_MSIRANGE_5                (0x5UL << RCC_ICSCR_MSIRANGE_Pos)   /*!< 0x0000A000 */

+#define RCC_ICSCR_MSIRANGE_6                (0x6UL << RCC_ICSCR_MSIRANGE_Pos)   /*!< 0x0000C000 */

+#define RCC_ICSCR_MSICAL_Pos                (16U)                              

+#define RCC_ICSCR_MSICAL_Msk                (0xFFUL << RCC_ICSCR_MSICAL_Pos)    /*!< 0x00FF0000 */

+#define RCC_ICSCR_MSICAL                    RCC_ICSCR_MSICAL_Msk               /*!< Internal Multi Speed clock Calibration */

+#define RCC_ICSCR_MSITRIM_Pos               (24U)                              

+#define RCC_ICSCR_MSITRIM_Msk               (0xFFUL << RCC_ICSCR_MSITRIM_Pos)   /*!< 0xFF000000 */

+#define RCC_ICSCR_MSITRIM                   RCC_ICSCR_MSITRIM_Msk              /*!< Internal Multi Speed clock trimming */

+

+/********************  Bit definition for RCC_CFGR register  ******************/

+#define RCC_CFGR_SW_Pos                     (0U)                               

+#define RCC_CFGR_SW_Msk                     (0x3UL << RCC_CFGR_SW_Pos)          /*!< 0x00000003 */

+#define RCC_CFGR_SW                         RCC_CFGR_SW_Msk                    /*!< SW[1:0] bits (System clock Switch) */

+#define RCC_CFGR_SW_0                       (0x1UL << RCC_CFGR_SW_Pos)          /*!< 0x00000001 */

+#define RCC_CFGR_SW_1                       (0x2UL << RCC_CFGR_SW_Pos)          /*!< 0x00000002 */

+

+/*!< SW configuration */

+#define RCC_CFGR_SW_MSI                     (0x00000000U)                      /*!< MSI selected as system clock */

+#define RCC_CFGR_SW_HSI                     (0x00000001U)                      /*!< HSI selected as system clock */

+#define RCC_CFGR_SW_HSE                     (0x00000002U)                      /*!< HSE selected as system clock */

+#define RCC_CFGR_SW_PLL                     (0x00000003U)                      /*!< PLL selected as system clock */

+

+#define RCC_CFGR_SWS_Pos                    (2U)                               

+#define RCC_CFGR_SWS_Msk                    (0x3UL << RCC_CFGR_SWS_Pos)         /*!< 0x0000000C */

+#define RCC_CFGR_SWS                        RCC_CFGR_SWS_Msk                   /*!< SWS[1:0] bits (System Clock Switch Status) */

+#define RCC_CFGR_SWS_0                      (0x1UL << RCC_CFGR_SWS_Pos)         /*!< 0x00000004 */

+#define RCC_CFGR_SWS_1                      (0x2UL << RCC_CFGR_SWS_Pos)         /*!< 0x00000008 */

+

+/*!< SWS configuration */

+#define RCC_CFGR_SWS_MSI                    (0x00000000U)                      /*!< MSI oscillator used as system clock */

+#define RCC_CFGR_SWS_HSI                    (0x00000004U)                      /*!< HSI oscillator used as system clock */

+#define RCC_CFGR_SWS_HSE                    (0x00000008U)                      /*!< HSE oscillator used as system clock */

+#define RCC_CFGR_SWS_PLL                    (0x0000000CU)                      /*!< PLL used as system clock */

+

+#define RCC_CFGR_HPRE_Pos                   (4U)                               

+#define RCC_CFGR_HPRE_Msk                   (0xFUL << RCC_CFGR_HPRE_Pos)        /*!< 0x000000F0 */

+#define RCC_CFGR_HPRE                       RCC_CFGR_HPRE_Msk                  /*!< HPRE[3:0] bits (AHB prescaler) */

+#define RCC_CFGR_HPRE_0                     (0x1UL << RCC_CFGR_HPRE_Pos)        /*!< 0x00000010 */

+#define RCC_CFGR_HPRE_1                     (0x2UL << RCC_CFGR_HPRE_Pos)        /*!< 0x00000020 */

+#define RCC_CFGR_HPRE_2                     (0x4UL << RCC_CFGR_HPRE_Pos)        /*!< 0x00000040 */

+#define RCC_CFGR_HPRE_3                     (0x8UL << RCC_CFGR_HPRE_Pos)        /*!< 0x00000080 */

+

+/*!< HPRE configuration */

+#define RCC_CFGR_HPRE_DIV1                  (0x00000000U)                      /*!< SYSCLK not divided */

+#define RCC_CFGR_HPRE_DIV2                  (0x00000080U)                      /*!< SYSCLK divided by 2 */

+#define RCC_CFGR_HPRE_DIV4                  (0x00000090U)                      /*!< SYSCLK divided by 4 */

+#define RCC_CFGR_HPRE_DIV8                  (0x000000A0U)                      /*!< SYSCLK divided by 8 */

+#define RCC_CFGR_HPRE_DIV16                 (0x000000B0U)                      /*!< SYSCLK divided by 16 */

+#define RCC_CFGR_HPRE_DIV64                 (0x000000C0U)                      /*!< SYSCLK divided by 64 */

+#define RCC_CFGR_HPRE_DIV128                (0x000000D0U)                      /*!< SYSCLK divided by 128 */

+#define RCC_CFGR_HPRE_DIV256                (0x000000E0U)                      /*!< SYSCLK divided by 256 */

+#define RCC_CFGR_HPRE_DIV512                (0x000000F0U)                      /*!< SYSCLK divided by 512 */

+

+#define RCC_CFGR_PPRE1_Pos                  (8U)                               

+#define RCC_CFGR_PPRE1_Msk                  (0x7UL << RCC_CFGR_PPRE1_Pos)       /*!< 0x00000700 */

+#define RCC_CFGR_PPRE1                      RCC_CFGR_PPRE1_Msk                 /*!< PRE1[2:0] bits (APB1 prescaler) */

+#define RCC_CFGR_PPRE1_0                    (0x1UL << RCC_CFGR_PPRE1_Pos)       /*!< 0x00000100 */

+#define RCC_CFGR_PPRE1_1                    (0x2UL << RCC_CFGR_PPRE1_Pos)       /*!< 0x00000200 */

+#define RCC_CFGR_PPRE1_2                    (0x4UL << RCC_CFGR_PPRE1_Pos)       /*!< 0x00000400 */

+

+/*!< PPRE1 configuration */

+#define RCC_CFGR_PPRE1_DIV1                 (0x00000000U)                      /*!< HCLK not divided */

+#define RCC_CFGR_PPRE1_DIV2                 (0x00000400U)                      /*!< HCLK divided by 2 */

+#define RCC_CFGR_PPRE1_DIV4                 (0x00000500U)                      /*!< HCLK divided by 4 */

+#define RCC_CFGR_PPRE1_DIV8                 (0x00000600U)                      /*!< HCLK divided by 8 */

+#define RCC_CFGR_PPRE1_DIV16                (0x00000700U)                      /*!< HCLK divided by 16 */

+

+#define RCC_CFGR_PPRE2_Pos                  (11U)                              

+#define RCC_CFGR_PPRE2_Msk                  (0x7UL << RCC_CFGR_PPRE2_Pos)       /*!< 0x00003800 */

+#define RCC_CFGR_PPRE2                      RCC_CFGR_PPRE2_Msk                 /*!< PRE2[2:0] bits (APB2 prescaler) */

+#define RCC_CFGR_PPRE2_0                    (0x1UL << RCC_CFGR_PPRE2_Pos)       /*!< 0x00000800 */

+#define RCC_CFGR_PPRE2_1                    (0x2UL << RCC_CFGR_PPRE2_Pos)       /*!< 0x00001000 */

+#define RCC_CFGR_PPRE2_2                    (0x4UL << RCC_CFGR_PPRE2_Pos)       /*!< 0x00002000 */

+

+/*!< PPRE2 configuration */

+#define RCC_CFGR_PPRE2_DIV1                 (0x00000000U)                      /*!< HCLK not divided */

+#define RCC_CFGR_PPRE2_DIV2                 (0x00002000U)                      /*!< HCLK divided by 2 */

+#define RCC_CFGR_PPRE2_DIV4                 (0x00002800U)                      /*!< HCLK divided by 4 */

+#define RCC_CFGR_PPRE2_DIV8                 (0x00003000U)                      /*!< HCLK divided by 8 */

+#define RCC_CFGR_PPRE2_DIV16                (0x00003800U)                      /*!< HCLK divided by 16 */

+

+/*!< PLL entry clock source*/

+#define RCC_CFGR_PLLSRC_Pos                 (16U)                              

+#define RCC_CFGR_PLLSRC_Msk                 (0x1UL << RCC_CFGR_PLLSRC_Pos)      /*!< 0x00010000 */

+#define RCC_CFGR_PLLSRC                     RCC_CFGR_PLLSRC_Msk                /*!< PLL entry clock source */

+

+#define RCC_CFGR_PLLSRC_HSI                 (0x00000000U)                      /*!< HSI as PLL entry clock source */

+#define RCC_CFGR_PLLSRC_HSE                 (0x00010000U)                      /*!< HSE as PLL entry clock source */

+

+

+/*!< PLLMUL configuration */

+#define RCC_CFGR_PLLMUL_Pos                 (18U)                              

+#define RCC_CFGR_PLLMUL_Msk                 (0xFUL << RCC_CFGR_PLLMUL_Pos)      /*!< 0x003C0000 */

+#define RCC_CFGR_PLLMUL                     RCC_CFGR_PLLMUL_Msk                /*!< PLLMUL[3:0] bits (PLL multiplication factor) */

+#define RCC_CFGR_PLLMUL_0                   (0x1UL << RCC_CFGR_PLLMUL_Pos)      /*!< 0x00040000 */

+#define RCC_CFGR_PLLMUL_1                   (0x2UL << RCC_CFGR_PLLMUL_Pos)      /*!< 0x00080000 */

+#define RCC_CFGR_PLLMUL_2                   (0x4UL << RCC_CFGR_PLLMUL_Pos)      /*!< 0x00100000 */

+#define RCC_CFGR_PLLMUL_3                   (0x8UL << RCC_CFGR_PLLMUL_Pos)      /*!< 0x00200000 */

+

+/*!< PLLMUL configuration */

+#define RCC_CFGR_PLLMUL3                    (0x00000000U)                      /*!< PLL input clock * 3 */

+#define RCC_CFGR_PLLMUL4                    (0x00040000U)                      /*!< PLL input clock * 4 */

+#define RCC_CFGR_PLLMUL6                    (0x00080000U)                      /*!< PLL input clock * 6 */

+#define RCC_CFGR_PLLMUL8                    (0x000C0000U)                      /*!< PLL input clock * 8 */

+#define RCC_CFGR_PLLMUL12                   (0x00100000U)                      /*!< PLL input clock * 12 */

+#define RCC_CFGR_PLLMUL16                   (0x00140000U)                      /*!< PLL input clock * 16 */

+#define RCC_CFGR_PLLMUL24                   (0x00180000U)                      /*!< PLL input clock * 24 */

+#define RCC_CFGR_PLLMUL32                   (0x001C0000U)                      /*!< PLL input clock * 32 */

+#define RCC_CFGR_PLLMUL48                   (0x00200000U)                      /*!< PLL input clock * 48 */

+

+/*!< PLLDIV configuration */

+#define RCC_CFGR_PLLDIV_Pos                 (22U)                              

+#define RCC_CFGR_PLLDIV_Msk                 (0x3UL << RCC_CFGR_PLLDIV_Pos)      /*!< 0x00C00000 */

+#define RCC_CFGR_PLLDIV                     RCC_CFGR_PLLDIV_Msk                /*!< PLLDIV[1:0] bits (PLL Output Division) */

+#define RCC_CFGR_PLLDIV_0                   (0x1UL << RCC_CFGR_PLLDIV_Pos)      /*!< 0x00400000 */

+#define RCC_CFGR_PLLDIV_1                   (0x2UL << RCC_CFGR_PLLDIV_Pos)      /*!< 0x00800000 */

+

+

+/*!< PLLDIV configuration */

+#define RCC_CFGR_PLLDIV1                    (0x00000000U)                      /*!< PLL clock output = CKVCO / 1 */

+#define RCC_CFGR_PLLDIV2_Pos                (22U)                              

+#define RCC_CFGR_PLLDIV2_Msk                (0x1UL << RCC_CFGR_PLLDIV2_Pos)     /*!< 0x00400000 */

+#define RCC_CFGR_PLLDIV2                    RCC_CFGR_PLLDIV2_Msk               /*!< PLL clock output = CKVCO / 2 */

+#define RCC_CFGR_PLLDIV3_Pos                (23U)                              

+#define RCC_CFGR_PLLDIV3_Msk                (0x1UL << RCC_CFGR_PLLDIV3_Pos)     /*!< 0x00800000 */

+#define RCC_CFGR_PLLDIV3                    RCC_CFGR_PLLDIV3_Msk               /*!< PLL clock output = CKVCO / 3 */

+#define RCC_CFGR_PLLDIV4_Pos                (22U)                              

+#define RCC_CFGR_PLLDIV4_Msk                (0x3UL << RCC_CFGR_PLLDIV4_Pos)     /*!< 0x00C00000 */

+#define RCC_CFGR_PLLDIV4                    RCC_CFGR_PLLDIV4_Msk               /*!< PLL clock output = CKVCO / 4 */

+

+

+#define RCC_CFGR_MCOSEL_Pos                 (24U)                              

+#define RCC_CFGR_MCOSEL_Msk                 (0x7UL << RCC_CFGR_MCOSEL_Pos)      /*!< 0x07000000 */

+#define RCC_CFGR_MCOSEL                     RCC_CFGR_MCOSEL_Msk                /*!< MCO[2:0] bits (Microcontroller Clock Output) */

+#define RCC_CFGR_MCOSEL_0                   (0x1UL << RCC_CFGR_MCOSEL_Pos)      /*!< 0x01000000 */

+#define RCC_CFGR_MCOSEL_1                   (0x2UL << RCC_CFGR_MCOSEL_Pos)      /*!< 0x02000000 */

+#define RCC_CFGR_MCOSEL_2                   (0x4UL << RCC_CFGR_MCOSEL_Pos)      /*!< 0x04000000 */

+

+/*!< MCO configuration */

+#define RCC_CFGR_MCOSEL_NOCLOCK             (0x00000000U)                      /*!< No clock */

+#define RCC_CFGR_MCOSEL_SYSCLK_Pos          (24U)                              

+#define RCC_CFGR_MCOSEL_SYSCLK_Msk          (0x1UL << RCC_CFGR_MCOSEL_SYSCLK_Pos) /*!< 0x01000000 */

+#define RCC_CFGR_MCOSEL_SYSCLK              RCC_CFGR_MCOSEL_SYSCLK_Msk         /*!< System clock selected */

+#define RCC_CFGR_MCOSEL_HSI_Pos             (25U)                              

+#define RCC_CFGR_MCOSEL_HSI_Msk             (0x1UL << RCC_CFGR_MCOSEL_HSI_Pos)  /*!< 0x02000000 */

+#define RCC_CFGR_MCOSEL_HSI                 RCC_CFGR_MCOSEL_HSI_Msk            /*!< Internal 16 MHz RC oscillator clock selected */

+#define RCC_CFGR_MCOSEL_MSI_Pos             (24U)                              

+#define RCC_CFGR_MCOSEL_MSI_Msk             (0x3UL << RCC_CFGR_MCOSEL_MSI_Pos)  /*!< 0x03000000 */

+#define RCC_CFGR_MCOSEL_MSI                 RCC_CFGR_MCOSEL_MSI_Msk            /*!< Internal Medium Speed RC oscillator clock selected */

+#define RCC_CFGR_MCOSEL_HSE_Pos             (26U)                              

+#define RCC_CFGR_MCOSEL_HSE_Msk             (0x1UL << RCC_CFGR_MCOSEL_HSE_Pos)  /*!< 0x04000000 */

+#define RCC_CFGR_MCOSEL_HSE                 RCC_CFGR_MCOSEL_HSE_Msk            /*!< External 1-25 MHz oscillator clock selected */

+#define RCC_CFGR_MCOSEL_PLL_Pos             (24U)                              

+#define RCC_CFGR_MCOSEL_PLL_Msk             (0x5UL << RCC_CFGR_MCOSEL_PLL_Pos)  /*!< 0x05000000 */

+#define RCC_CFGR_MCOSEL_PLL                 RCC_CFGR_MCOSEL_PLL_Msk            /*!< PLL clock divided */

+#define RCC_CFGR_MCOSEL_LSI_Pos             (25U)                              

+#define RCC_CFGR_MCOSEL_LSI_Msk             (0x3UL << RCC_CFGR_MCOSEL_LSI_Pos)  /*!< 0x06000000 */

+#define RCC_CFGR_MCOSEL_LSI                 RCC_CFGR_MCOSEL_LSI_Msk            /*!< LSI selected */

+#define RCC_CFGR_MCOSEL_LSE_Pos             (24U)                              

+#define RCC_CFGR_MCOSEL_LSE_Msk             (0x7UL << RCC_CFGR_MCOSEL_LSE_Pos)  /*!< 0x07000000 */

+#define RCC_CFGR_MCOSEL_LSE                 RCC_CFGR_MCOSEL_LSE_Msk            /*!< LSE selected */

+

+#define RCC_CFGR_MCOPRE_Pos                 (28U)                              

+#define RCC_CFGR_MCOPRE_Msk                 (0x7UL << RCC_CFGR_MCOPRE_Pos)      /*!< 0x70000000 */

+#define RCC_CFGR_MCOPRE                     RCC_CFGR_MCOPRE_Msk                /*!< MCOPRE[2:0] bits (Microcontroller Clock Output Prescaler) */

+#define RCC_CFGR_MCOPRE_0                   (0x1UL << RCC_CFGR_MCOPRE_Pos)      /*!< 0x10000000 */

+#define RCC_CFGR_MCOPRE_1                   (0x2UL << RCC_CFGR_MCOPRE_Pos)      /*!< 0x20000000 */

+#define RCC_CFGR_MCOPRE_2                   (0x4UL << RCC_CFGR_MCOPRE_Pos)      /*!< 0x40000000 */

+

+/*!< MCO Prescaler configuration */ 

+#define RCC_CFGR_MCOPRE_DIV1                (0x00000000U)                      /*!< MCO is divided by 1 */

+#define RCC_CFGR_MCOPRE_DIV2                (0x10000000U)                      /*!< MCO is divided by 2 */

+#define RCC_CFGR_MCOPRE_DIV4                (0x20000000U)                      /*!< MCO is divided by 4 */

+#define RCC_CFGR_MCOPRE_DIV8                (0x30000000U)                      /*!< MCO is divided by 8 */

+#define RCC_CFGR_MCOPRE_DIV16               (0x40000000U)                      /*!< MCO is divided by 16 */

+ 

+/* Legacy aliases */

+#define  RCC_CFGR_MCO_DIV1                  RCC_CFGR_MCOPRE_DIV1

+#define  RCC_CFGR_MCO_DIV2                  RCC_CFGR_MCOPRE_DIV2

+#define  RCC_CFGR_MCO_DIV4                  RCC_CFGR_MCOPRE_DIV4

+#define  RCC_CFGR_MCO_DIV8                  RCC_CFGR_MCOPRE_DIV8

+#define  RCC_CFGR_MCO_DIV16                 RCC_CFGR_MCOPRE_DIV16

+#define  RCC_CFGR_MCO_NOCLOCK               RCC_CFGR_MCOSEL_NOCLOCK

+#define  RCC_CFGR_MCO_SYSCLK                RCC_CFGR_MCOSEL_SYSCLK

+#define  RCC_CFGR_MCO_HSI                   RCC_CFGR_MCOSEL_HSI

+#define  RCC_CFGR_MCO_MSI                   RCC_CFGR_MCOSEL_MSI

+#define  RCC_CFGR_MCO_HSE                   RCC_CFGR_MCOSEL_HSE

+#define  RCC_CFGR_MCO_PLL                   RCC_CFGR_MCOSEL_PLL

+#define  RCC_CFGR_MCO_LSI                   RCC_CFGR_MCOSEL_LSI

+#define  RCC_CFGR_MCO_LSE                   RCC_CFGR_MCOSEL_LSE

+

+/*!<******************  Bit definition for RCC_CIR register  ********************/

+#define RCC_CIR_LSIRDYF_Pos                 (0U)                               

+#define RCC_CIR_LSIRDYF_Msk                 (0x1UL << RCC_CIR_LSIRDYF_Pos)      /*!< 0x00000001 */

+#define RCC_CIR_LSIRDYF                     RCC_CIR_LSIRDYF_Msk                /*!< LSI Ready Interrupt flag */

+#define RCC_CIR_LSERDYF_Pos                 (1U)                               

+#define RCC_CIR_LSERDYF_Msk                 (0x1UL << RCC_CIR_LSERDYF_Pos)      /*!< 0x00000002 */

+#define RCC_CIR_LSERDYF                     RCC_CIR_LSERDYF_Msk                /*!< LSE Ready Interrupt flag */

+#define RCC_CIR_HSIRDYF_Pos                 (2U)                               

+#define RCC_CIR_HSIRDYF_Msk                 (0x1UL << RCC_CIR_HSIRDYF_Pos)      /*!< 0x00000004 */

+#define RCC_CIR_HSIRDYF                     RCC_CIR_HSIRDYF_Msk                /*!< HSI Ready Interrupt flag */

+#define RCC_CIR_HSERDYF_Pos                 (3U)                               

+#define RCC_CIR_HSERDYF_Msk                 (0x1UL << RCC_CIR_HSERDYF_Pos)      /*!< 0x00000008 */

+#define RCC_CIR_HSERDYF                     RCC_CIR_HSERDYF_Msk                /*!< HSE Ready Interrupt flag */

+#define RCC_CIR_PLLRDYF_Pos                 (4U)                               

+#define RCC_CIR_PLLRDYF_Msk                 (0x1UL << RCC_CIR_PLLRDYF_Pos)      /*!< 0x00000010 */

+#define RCC_CIR_PLLRDYF                     RCC_CIR_PLLRDYF_Msk                /*!< PLL Ready Interrupt flag */

+#define RCC_CIR_MSIRDYF_Pos                 (5U)                               

+#define RCC_CIR_MSIRDYF_Msk                 (0x1UL << RCC_CIR_MSIRDYF_Pos)      /*!< 0x00000020 */

+#define RCC_CIR_MSIRDYF                     RCC_CIR_MSIRDYF_Msk                /*!< MSI Ready Interrupt flag */

+#define RCC_CIR_LSECSSF_Pos                 (6U)                               

+#define RCC_CIR_LSECSSF_Msk                 (0x1UL << RCC_CIR_LSECSSF_Pos)      /*!< 0x00000040 */

+#define RCC_CIR_LSECSSF                     RCC_CIR_LSECSSF_Msk                /*!< LSE CSS Interrupt flag */

+#define RCC_CIR_CSSF_Pos                    (7U)                               

+#define RCC_CIR_CSSF_Msk                    (0x1UL << RCC_CIR_CSSF_Pos)         /*!< 0x00000080 */

+#define RCC_CIR_CSSF                        RCC_CIR_CSSF_Msk                   /*!< Clock Security System Interrupt flag */

+

+#define RCC_CIR_LSIRDYIE_Pos                (8U)                               

+#define RCC_CIR_LSIRDYIE_Msk                (0x1UL << RCC_CIR_LSIRDYIE_Pos)     /*!< 0x00000100 */

+#define RCC_CIR_LSIRDYIE                    RCC_CIR_LSIRDYIE_Msk               /*!< LSI Ready Interrupt Enable */

+#define RCC_CIR_LSERDYIE_Pos                (9U)                               

+#define RCC_CIR_LSERDYIE_Msk                (0x1UL << RCC_CIR_LSERDYIE_Pos)     /*!< 0x00000200 */

+#define RCC_CIR_LSERDYIE                    RCC_CIR_LSERDYIE_Msk               /*!< LSE Ready Interrupt Enable */

+#define RCC_CIR_HSIRDYIE_Pos                (10U)                              

+#define RCC_CIR_HSIRDYIE_Msk                (0x1UL << RCC_CIR_HSIRDYIE_Pos)     /*!< 0x00000400 */

+#define RCC_CIR_HSIRDYIE                    RCC_CIR_HSIRDYIE_Msk               /*!< HSI Ready Interrupt Enable */

+#define RCC_CIR_HSERDYIE_Pos                (11U)                              

+#define RCC_CIR_HSERDYIE_Msk                (0x1UL << RCC_CIR_HSERDYIE_Pos)     /*!< 0x00000800 */

+#define RCC_CIR_HSERDYIE                    RCC_CIR_HSERDYIE_Msk               /*!< HSE Ready Interrupt Enable */

+#define RCC_CIR_PLLRDYIE_Pos                (12U)                              

+#define RCC_CIR_PLLRDYIE_Msk                (0x1UL << RCC_CIR_PLLRDYIE_Pos)     /*!< 0x00001000 */

+#define RCC_CIR_PLLRDYIE                    RCC_CIR_PLLRDYIE_Msk               /*!< PLL Ready Interrupt Enable */

+#define RCC_CIR_MSIRDYIE_Pos                (13U)                              

+#define RCC_CIR_MSIRDYIE_Msk                (0x1UL << RCC_CIR_MSIRDYIE_Pos)     /*!< 0x00002000 */

+#define RCC_CIR_MSIRDYIE                    RCC_CIR_MSIRDYIE_Msk               /*!< MSI Ready Interrupt Enable */

+#define RCC_CIR_LSECSSIE_Pos                (14U)                              

+#define RCC_CIR_LSECSSIE_Msk                (0x1UL << RCC_CIR_LSECSSIE_Pos)     /*!< 0x00004000 */

+#define RCC_CIR_LSECSSIE                    RCC_CIR_LSECSSIE_Msk               /*!< LSE CSS Interrupt Enable */

+

+#define RCC_CIR_LSIRDYC_Pos                 (16U)                              

+#define RCC_CIR_LSIRDYC_Msk                 (0x1UL << RCC_CIR_LSIRDYC_Pos)      /*!< 0x00010000 */

+#define RCC_CIR_LSIRDYC                     RCC_CIR_LSIRDYC_Msk                /*!< LSI Ready Interrupt Clear */

+#define RCC_CIR_LSERDYC_Pos                 (17U)                              

+#define RCC_CIR_LSERDYC_Msk                 (0x1UL << RCC_CIR_LSERDYC_Pos)      /*!< 0x00020000 */

+#define RCC_CIR_LSERDYC                     RCC_CIR_LSERDYC_Msk                /*!< LSE Ready Interrupt Clear */

+#define RCC_CIR_HSIRDYC_Pos                 (18U)                              

+#define RCC_CIR_HSIRDYC_Msk                 (0x1UL << RCC_CIR_HSIRDYC_Pos)      /*!< 0x00040000 */

+#define RCC_CIR_HSIRDYC                     RCC_CIR_HSIRDYC_Msk                /*!< HSI Ready Interrupt Clear */

+#define RCC_CIR_HSERDYC_Pos                 (19U)                              

+#define RCC_CIR_HSERDYC_Msk                 (0x1UL << RCC_CIR_HSERDYC_Pos)      /*!< 0x00080000 */

+#define RCC_CIR_HSERDYC                     RCC_CIR_HSERDYC_Msk                /*!< HSE Ready Interrupt Clear */

+#define RCC_CIR_PLLRDYC_Pos                 (20U)                              

+#define RCC_CIR_PLLRDYC_Msk                 (0x1UL << RCC_CIR_PLLRDYC_Pos)      /*!< 0x00100000 */

+#define RCC_CIR_PLLRDYC                     RCC_CIR_PLLRDYC_Msk                /*!< PLL Ready Interrupt Clear */

+#define RCC_CIR_MSIRDYC_Pos                 (21U)                              

+#define RCC_CIR_MSIRDYC_Msk                 (0x1UL << RCC_CIR_MSIRDYC_Pos)      /*!< 0x00200000 */

+#define RCC_CIR_MSIRDYC                     RCC_CIR_MSIRDYC_Msk                /*!< MSI Ready Interrupt Clear */

+#define RCC_CIR_LSECSSC_Pos                 (22U)                              

+#define RCC_CIR_LSECSSC_Msk                 (0x1UL << RCC_CIR_LSECSSC_Pos)      /*!< 0x00400000 */

+#define RCC_CIR_LSECSSC                     RCC_CIR_LSECSSC_Msk                /*!< LSE CSS Interrupt Clear */

+#define RCC_CIR_CSSC_Pos                    (23U)                              

+#define RCC_CIR_CSSC_Msk                    (0x1UL << RCC_CIR_CSSC_Pos)         /*!< 0x00800000 */

+#define RCC_CIR_CSSC                        RCC_CIR_CSSC_Msk                   /*!< Clock Security System Interrupt Clear */

+

+/*****************  Bit definition for RCC_AHBRSTR register  ******************/

+#define RCC_AHBRSTR_GPIOARST_Pos            (0U)                               

+#define RCC_AHBRSTR_GPIOARST_Msk            (0x1UL << RCC_AHBRSTR_GPIOARST_Pos) /*!< 0x00000001 */

+#define RCC_AHBRSTR_GPIOARST                RCC_AHBRSTR_GPIOARST_Msk           /*!< GPIO port A reset */

+#define RCC_AHBRSTR_GPIOBRST_Pos            (1U)                               

+#define RCC_AHBRSTR_GPIOBRST_Msk            (0x1UL << RCC_AHBRSTR_GPIOBRST_Pos) /*!< 0x00000002 */

+#define RCC_AHBRSTR_GPIOBRST                RCC_AHBRSTR_GPIOBRST_Msk           /*!< GPIO port B reset */

+#define RCC_AHBRSTR_GPIOCRST_Pos            (2U)                               

+#define RCC_AHBRSTR_GPIOCRST_Msk            (0x1UL << RCC_AHBRSTR_GPIOCRST_Pos) /*!< 0x00000004 */

+#define RCC_AHBRSTR_GPIOCRST                RCC_AHBRSTR_GPIOCRST_Msk           /*!< GPIO port C reset */

+#define RCC_AHBRSTR_GPIODRST_Pos            (3U)                               

+#define RCC_AHBRSTR_GPIODRST_Msk            (0x1UL << RCC_AHBRSTR_GPIODRST_Pos) /*!< 0x00000008 */

+#define RCC_AHBRSTR_GPIODRST                RCC_AHBRSTR_GPIODRST_Msk           /*!< GPIO port D reset */

+#define RCC_AHBRSTR_GPIOERST_Pos            (4U)                               

+#define RCC_AHBRSTR_GPIOERST_Msk            (0x1UL << RCC_AHBRSTR_GPIOERST_Pos) /*!< 0x00000010 */

+#define RCC_AHBRSTR_GPIOERST                RCC_AHBRSTR_GPIOERST_Msk           /*!< GPIO port E reset */

+#define RCC_AHBRSTR_GPIOHRST_Pos            (5U)                               

+#define RCC_AHBRSTR_GPIOHRST_Msk            (0x1UL << RCC_AHBRSTR_GPIOHRST_Pos) /*!< 0x00000020 */

+#define RCC_AHBRSTR_GPIOHRST                RCC_AHBRSTR_GPIOHRST_Msk           /*!< GPIO port H reset */

+#define RCC_AHBRSTR_GPIOFRST_Pos            (6U)                               

+#define RCC_AHBRSTR_GPIOFRST_Msk            (0x1UL << RCC_AHBRSTR_GPIOFRST_Pos) /*!< 0x00000040 */

+#define RCC_AHBRSTR_GPIOFRST                RCC_AHBRSTR_GPIOFRST_Msk           /*!< GPIO port F reset */

+#define RCC_AHBRSTR_GPIOGRST_Pos            (7U)                               

+#define RCC_AHBRSTR_GPIOGRST_Msk            (0x1UL << RCC_AHBRSTR_GPIOGRST_Pos) /*!< 0x00000080 */

+#define RCC_AHBRSTR_GPIOGRST                RCC_AHBRSTR_GPIOGRST_Msk           /*!< GPIO port G reset */

+#define RCC_AHBRSTR_CRCRST_Pos              (12U)                              

+#define RCC_AHBRSTR_CRCRST_Msk              (0x1UL << RCC_AHBRSTR_CRCRST_Pos)   /*!< 0x00001000 */

+#define RCC_AHBRSTR_CRCRST                  RCC_AHBRSTR_CRCRST_Msk             /*!< CRC reset */

+#define RCC_AHBRSTR_FLITFRST_Pos            (15U)                              

+#define RCC_AHBRSTR_FLITFRST_Msk            (0x1UL << RCC_AHBRSTR_FLITFRST_Pos) /*!< 0x00008000 */

+#define RCC_AHBRSTR_FLITFRST                RCC_AHBRSTR_FLITFRST_Msk           /*!< FLITF reset */

+#define RCC_AHBRSTR_DMA1RST_Pos             (24U)                              

+#define RCC_AHBRSTR_DMA1RST_Msk             (0x1UL << RCC_AHBRSTR_DMA1RST_Pos)  /*!< 0x01000000 */

+#define RCC_AHBRSTR_DMA1RST                 RCC_AHBRSTR_DMA1RST_Msk            /*!< DMA1 reset */

+#define RCC_AHBRSTR_DMA2RST_Pos             (25U)                              

+#define RCC_AHBRSTR_DMA2RST_Msk             (0x1UL << RCC_AHBRSTR_DMA2RST_Pos)  /*!< 0x02000000 */

+#define RCC_AHBRSTR_DMA2RST                 RCC_AHBRSTR_DMA2RST_Msk            /*!< DMA2 reset */

+ 

+/*****************  Bit definition for RCC_APB2RSTR register  *****************/

+#define RCC_APB2RSTR_SYSCFGRST_Pos          (0U)                               

+#define RCC_APB2RSTR_SYSCFGRST_Msk          (0x1UL << RCC_APB2RSTR_SYSCFGRST_Pos) /*!< 0x00000001 */

+#define RCC_APB2RSTR_SYSCFGRST              RCC_APB2RSTR_SYSCFGRST_Msk         /*!< System Configuration SYSCFG reset */

+#define RCC_APB2RSTR_TIM9RST_Pos            (2U)                               

+#define RCC_APB2RSTR_TIM9RST_Msk            (0x1UL << RCC_APB2RSTR_TIM9RST_Pos) /*!< 0x00000004 */

+#define RCC_APB2RSTR_TIM9RST                RCC_APB2RSTR_TIM9RST_Msk           /*!< TIM9 reset */

+#define RCC_APB2RSTR_TIM10RST_Pos           (3U)                               

+#define RCC_APB2RSTR_TIM10RST_Msk           (0x1UL << RCC_APB2RSTR_TIM10RST_Pos) /*!< 0x00000008 */

+#define RCC_APB2RSTR_TIM10RST               RCC_APB2RSTR_TIM10RST_Msk          /*!< TIM10 reset */

+#define RCC_APB2RSTR_TIM11RST_Pos           (4U)                               

+#define RCC_APB2RSTR_TIM11RST_Msk           (0x1UL << RCC_APB2RSTR_TIM11RST_Pos) /*!< 0x00000010 */

+#define RCC_APB2RSTR_TIM11RST               RCC_APB2RSTR_TIM11RST_Msk          /*!< TIM11 reset */

+#define RCC_APB2RSTR_ADC1RST_Pos            (9U)                               

+#define RCC_APB2RSTR_ADC1RST_Msk            (0x1UL << RCC_APB2RSTR_ADC1RST_Pos) /*!< 0x00000200 */

+#define RCC_APB2RSTR_ADC1RST                RCC_APB2RSTR_ADC1RST_Msk           /*!< ADC1 reset */

+#define RCC_APB2RSTR_SPI1RST_Pos            (12U)                              

+#define RCC_APB2RSTR_SPI1RST_Msk            (0x1UL << RCC_APB2RSTR_SPI1RST_Pos) /*!< 0x00001000 */

+#define RCC_APB2RSTR_SPI1RST                RCC_APB2RSTR_SPI1RST_Msk           /*!< SPI1 reset */

+#define RCC_APB2RSTR_USART1RST_Pos          (14U)                              

+#define RCC_APB2RSTR_USART1RST_Msk          (0x1UL << RCC_APB2RSTR_USART1RST_Pos) /*!< 0x00004000 */

+#define RCC_APB2RSTR_USART1RST              RCC_APB2RSTR_USART1RST_Msk         /*!< USART1 reset */

+

+/*****************  Bit definition for RCC_APB1RSTR register  *****************/

+#define RCC_APB1RSTR_TIM2RST_Pos            (0U)                               

+#define RCC_APB1RSTR_TIM2RST_Msk            (0x1UL << RCC_APB1RSTR_TIM2RST_Pos) /*!< 0x00000001 */

+#define RCC_APB1RSTR_TIM2RST                RCC_APB1RSTR_TIM2RST_Msk           /*!< Timer 2 reset */

+#define RCC_APB1RSTR_TIM3RST_Pos            (1U)                               

+#define RCC_APB1RSTR_TIM3RST_Msk            (0x1UL << RCC_APB1RSTR_TIM3RST_Pos) /*!< 0x00000002 */

+#define RCC_APB1RSTR_TIM3RST                RCC_APB1RSTR_TIM3RST_Msk           /*!< Timer 3 reset */

+#define RCC_APB1RSTR_TIM4RST_Pos            (2U)                               

+#define RCC_APB1RSTR_TIM4RST_Msk            (0x1UL << RCC_APB1RSTR_TIM4RST_Pos) /*!< 0x00000004 */

+#define RCC_APB1RSTR_TIM4RST                RCC_APB1RSTR_TIM4RST_Msk           /*!< Timer 4 reset */

+#define RCC_APB1RSTR_TIM5RST_Pos            (3U)                               

+#define RCC_APB1RSTR_TIM5RST_Msk            (0x1UL << RCC_APB1RSTR_TIM5RST_Pos) /*!< 0x00000008 */

+#define RCC_APB1RSTR_TIM5RST                RCC_APB1RSTR_TIM5RST_Msk           /*!< Timer 5 reset */

+#define RCC_APB1RSTR_TIM6RST_Pos            (4U)                               

+#define RCC_APB1RSTR_TIM6RST_Msk            (0x1UL << RCC_APB1RSTR_TIM6RST_Pos) /*!< 0x00000010 */

+#define RCC_APB1RSTR_TIM6RST                RCC_APB1RSTR_TIM6RST_Msk           /*!< Timer 6 reset */

+#define RCC_APB1RSTR_TIM7RST_Pos            (5U)                               

+#define RCC_APB1RSTR_TIM7RST_Msk            (0x1UL << RCC_APB1RSTR_TIM7RST_Pos) /*!< 0x00000020 */

+#define RCC_APB1RSTR_TIM7RST                RCC_APB1RSTR_TIM7RST_Msk           /*!< Timer 7 reset */

+#define RCC_APB1RSTR_LCDRST_Pos             (9U)                               

+#define RCC_APB1RSTR_LCDRST_Msk             (0x1UL << RCC_APB1RSTR_LCDRST_Pos)  /*!< 0x00000200 */

+#define RCC_APB1RSTR_LCDRST                 RCC_APB1RSTR_LCDRST_Msk            /*!< LCD reset */

+#define RCC_APB1RSTR_WWDGRST_Pos            (11U)                              

+#define RCC_APB1RSTR_WWDGRST_Msk            (0x1UL << RCC_APB1RSTR_WWDGRST_Pos) /*!< 0x00000800 */

+#define RCC_APB1RSTR_WWDGRST                RCC_APB1RSTR_WWDGRST_Msk           /*!< Window Watchdog reset */

+#define RCC_APB1RSTR_SPI2RST_Pos            (14U)                              

+#define RCC_APB1RSTR_SPI2RST_Msk            (0x1UL << RCC_APB1RSTR_SPI2RST_Pos) /*!< 0x00004000 */

+#define RCC_APB1RSTR_SPI2RST                RCC_APB1RSTR_SPI2RST_Msk           /*!< SPI 2 reset */

+#define RCC_APB1RSTR_SPI3RST_Pos            (15U)                              

+#define RCC_APB1RSTR_SPI3RST_Msk            (0x1UL << RCC_APB1RSTR_SPI3RST_Pos) /*!< 0x00008000 */

+#define RCC_APB1RSTR_SPI3RST                RCC_APB1RSTR_SPI3RST_Msk           /*!< SPI 3 reset */

+#define RCC_APB1RSTR_USART2RST_Pos          (17U)                              

+#define RCC_APB1RSTR_USART2RST_Msk          (0x1UL << RCC_APB1RSTR_USART2RST_Pos) /*!< 0x00020000 */

+#define RCC_APB1RSTR_USART2RST              RCC_APB1RSTR_USART2RST_Msk         /*!< USART 2 reset */

+#define RCC_APB1RSTR_USART3RST_Pos          (18U)                              

+#define RCC_APB1RSTR_USART3RST_Msk          (0x1UL << RCC_APB1RSTR_USART3RST_Pos) /*!< 0x00040000 */

+#define RCC_APB1RSTR_USART3RST              RCC_APB1RSTR_USART3RST_Msk         /*!< USART 3 reset */

+#define RCC_APB1RSTR_UART4RST_Pos           (19U)                              

+#define RCC_APB1RSTR_UART4RST_Msk           (0x1UL << RCC_APB1RSTR_UART4RST_Pos) /*!< 0x00080000 */

+#define RCC_APB1RSTR_UART4RST               RCC_APB1RSTR_UART4RST_Msk          /*!< UART 4 reset */

+#define RCC_APB1RSTR_UART5RST_Pos           (20U)                              

+#define RCC_APB1RSTR_UART5RST_Msk           (0x1UL << RCC_APB1RSTR_UART5RST_Pos) /*!< 0x00100000 */

+#define RCC_APB1RSTR_UART5RST               RCC_APB1RSTR_UART5RST_Msk          /*!< UART 5 reset */

+#define RCC_APB1RSTR_I2C1RST_Pos            (21U)                              

+#define RCC_APB1RSTR_I2C1RST_Msk            (0x1UL << RCC_APB1RSTR_I2C1RST_Pos) /*!< 0x00200000 */

+#define RCC_APB1RSTR_I2C1RST                RCC_APB1RSTR_I2C1RST_Msk           /*!< I2C 1 reset */

+#define RCC_APB1RSTR_I2C2RST_Pos            (22U)                              

+#define RCC_APB1RSTR_I2C2RST_Msk            (0x1UL << RCC_APB1RSTR_I2C2RST_Pos) /*!< 0x00400000 */

+#define RCC_APB1RSTR_I2C2RST                RCC_APB1RSTR_I2C2RST_Msk           /*!< I2C 2 reset */

+#define RCC_APB1RSTR_USBRST_Pos             (23U)                              

+#define RCC_APB1RSTR_USBRST_Msk             (0x1UL << RCC_APB1RSTR_USBRST_Pos)  /*!< 0x00800000 */

+#define RCC_APB1RSTR_USBRST                 RCC_APB1RSTR_USBRST_Msk            /*!< USB reset */

+#define RCC_APB1RSTR_PWRRST_Pos             (28U)                              

+#define RCC_APB1RSTR_PWRRST_Msk             (0x1UL << RCC_APB1RSTR_PWRRST_Pos)  /*!< 0x10000000 */

+#define RCC_APB1RSTR_PWRRST                 RCC_APB1RSTR_PWRRST_Msk            /*!< Power interface reset */

+#define RCC_APB1RSTR_DACRST_Pos             (29U)                              

+#define RCC_APB1RSTR_DACRST_Msk             (0x1UL << RCC_APB1RSTR_DACRST_Pos)  /*!< 0x20000000 */

+#define RCC_APB1RSTR_DACRST                 RCC_APB1RSTR_DACRST_Msk            /*!< DAC interface reset */

+#define RCC_APB1RSTR_COMPRST_Pos            (31U)                              

+#define RCC_APB1RSTR_COMPRST_Msk            (0x1UL << RCC_APB1RSTR_COMPRST_Pos) /*!< 0x80000000 */

+#define RCC_APB1RSTR_COMPRST                RCC_APB1RSTR_COMPRST_Msk           /*!< Comparator interface reset */

+

+/******************  Bit definition for RCC_AHBENR register  ******************/

+#define RCC_AHBENR_GPIOAEN_Pos              (0U)                               

+#define RCC_AHBENR_GPIOAEN_Msk              (0x1UL << RCC_AHBENR_GPIOAEN_Pos)   /*!< 0x00000001 */

+#define RCC_AHBENR_GPIOAEN                  RCC_AHBENR_GPIOAEN_Msk             /*!< GPIO port A clock enable */

+#define RCC_AHBENR_GPIOBEN_Pos              (1U)                               

+#define RCC_AHBENR_GPIOBEN_Msk              (0x1UL << RCC_AHBENR_GPIOBEN_Pos)   /*!< 0x00000002 */

+#define RCC_AHBENR_GPIOBEN                  RCC_AHBENR_GPIOBEN_Msk             /*!< GPIO port B clock enable */

+#define RCC_AHBENR_GPIOCEN_Pos              (2U)                               

+#define RCC_AHBENR_GPIOCEN_Msk              (0x1UL << RCC_AHBENR_GPIOCEN_Pos)   /*!< 0x00000004 */

+#define RCC_AHBENR_GPIOCEN                  RCC_AHBENR_GPIOCEN_Msk             /*!< GPIO port C clock enable */

+#define RCC_AHBENR_GPIODEN_Pos              (3U)                               

+#define RCC_AHBENR_GPIODEN_Msk              (0x1UL << RCC_AHBENR_GPIODEN_Pos)   /*!< 0x00000008 */

+#define RCC_AHBENR_GPIODEN                  RCC_AHBENR_GPIODEN_Msk             /*!< GPIO port D clock enable */

+#define RCC_AHBENR_GPIOEEN_Pos              (4U)                               

+#define RCC_AHBENR_GPIOEEN_Msk              (0x1UL << RCC_AHBENR_GPIOEEN_Pos)   /*!< 0x00000010 */

+#define RCC_AHBENR_GPIOEEN                  RCC_AHBENR_GPIOEEN_Msk             /*!< GPIO port E clock enable */

+#define RCC_AHBENR_GPIOHEN_Pos              (5U)                               

+#define RCC_AHBENR_GPIOHEN_Msk              (0x1UL << RCC_AHBENR_GPIOHEN_Pos)   /*!< 0x00000020 */

+#define RCC_AHBENR_GPIOHEN                  RCC_AHBENR_GPIOHEN_Msk             /*!< GPIO port H clock enable */

+#define RCC_AHBENR_GPIOFEN_Pos              (6U)                               

+#define RCC_AHBENR_GPIOFEN_Msk              (0x1UL << RCC_AHBENR_GPIOFEN_Pos)   /*!< 0x00000040 */

+#define RCC_AHBENR_GPIOFEN                  RCC_AHBENR_GPIOFEN_Msk             /*!< GPIO port F clock enable */

+#define RCC_AHBENR_GPIOGEN_Pos              (7U)                               

+#define RCC_AHBENR_GPIOGEN_Msk              (0x1UL << RCC_AHBENR_GPIOGEN_Pos)   /*!< 0x00000080 */

+#define RCC_AHBENR_GPIOGEN                  RCC_AHBENR_GPIOGEN_Msk             /*!< GPIO port G clock enable */

+#define RCC_AHBENR_CRCEN_Pos                (12U)                              

+#define RCC_AHBENR_CRCEN_Msk                (0x1UL << RCC_AHBENR_CRCEN_Pos)     /*!< 0x00001000 */

+#define RCC_AHBENR_CRCEN                    RCC_AHBENR_CRCEN_Msk               /*!< CRC clock enable */

+#define RCC_AHBENR_FLITFEN_Pos              (15U)                              

+#define RCC_AHBENR_FLITFEN_Msk              (0x1UL << RCC_AHBENR_FLITFEN_Pos)   /*!< 0x00008000 */

+#define RCC_AHBENR_FLITFEN                  RCC_AHBENR_FLITFEN_Msk             /*!< FLITF clock enable (has effect only when

+                                                                                the Flash memory is in power down mode) */

+#define RCC_AHBENR_DMA1EN_Pos               (24U)                              

+#define RCC_AHBENR_DMA1EN_Msk               (0x1UL << RCC_AHBENR_DMA1EN_Pos)    /*!< 0x01000000 */

+#define RCC_AHBENR_DMA1EN                   RCC_AHBENR_DMA1EN_Msk              /*!< DMA1 clock enable */

+#define RCC_AHBENR_DMA2EN_Pos               (25U)                              

+#define RCC_AHBENR_DMA2EN_Msk               (0x1UL << RCC_AHBENR_DMA2EN_Pos)    /*!< 0x02000000 */

+#define RCC_AHBENR_DMA2EN                   RCC_AHBENR_DMA2EN_Msk              /*!< DMA2 clock enable */

+

+/******************  Bit definition for RCC_APB2ENR register  *****************/

+#define RCC_APB2ENR_SYSCFGEN_Pos            (0U)                               

+#define RCC_APB2ENR_SYSCFGEN_Msk            (0x1UL << RCC_APB2ENR_SYSCFGEN_Pos) /*!< 0x00000001 */

+#define RCC_APB2ENR_SYSCFGEN                RCC_APB2ENR_SYSCFGEN_Msk           /*!< System Configuration SYSCFG clock enable */

+#define RCC_APB2ENR_TIM9EN_Pos              (2U)                               

+#define RCC_APB2ENR_TIM9EN_Msk              (0x1UL << RCC_APB2ENR_TIM9EN_Pos)   /*!< 0x00000004 */

+#define RCC_APB2ENR_TIM9EN                  RCC_APB2ENR_TIM9EN_Msk             /*!< TIM9 interface clock enable */

+#define RCC_APB2ENR_TIM10EN_Pos             (3U)                               

+#define RCC_APB2ENR_TIM10EN_Msk             (0x1UL << RCC_APB2ENR_TIM10EN_Pos)  /*!< 0x00000008 */

+#define RCC_APB2ENR_TIM10EN                 RCC_APB2ENR_TIM10EN_Msk            /*!< TIM10 interface clock enable */

+#define RCC_APB2ENR_TIM11EN_Pos             (4U)                               

+#define RCC_APB2ENR_TIM11EN_Msk             (0x1UL << RCC_APB2ENR_TIM11EN_Pos)  /*!< 0x00000010 */

+#define RCC_APB2ENR_TIM11EN                 RCC_APB2ENR_TIM11EN_Msk            /*!< TIM11 Timer clock enable */

+#define RCC_APB2ENR_ADC1EN_Pos              (9U)                               

+#define RCC_APB2ENR_ADC1EN_Msk              (0x1UL << RCC_APB2ENR_ADC1EN_Pos)   /*!< 0x00000200 */

+#define RCC_APB2ENR_ADC1EN                  RCC_APB2ENR_ADC1EN_Msk             /*!< ADC1 clock enable */

+#define RCC_APB2ENR_SPI1EN_Pos              (12U)                              

+#define RCC_APB2ENR_SPI1EN_Msk              (0x1UL << RCC_APB2ENR_SPI1EN_Pos)   /*!< 0x00001000 */

+#define RCC_APB2ENR_SPI1EN                  RCC_APB2ENR_SPI1EN_Msk             /*!< SPI1 clock enable */

+#define RCC_APB2ENR_USART1EN_Pos            (14U)                              

+#define RCC_APB2ENR_USART1EN_Msk            (0x1UL << RCC_APB2ENR_USART1EN_Pos) /*!< 0x00004000 */

+#define RCC_APB2ENR_USART1EN                RCC_APB2ENR_USART1EN_Msk           /*!< USART1 clock enable */

+

+/*****************  Bit definition for RCC_APB1ENR register  ******************/

+#define RCC_APB1ENR_TIM2EN_Pos              (0U)                               

+#define RCC_APB1ENR_TIM2EN_Msk              (0x1UL << RCC_APB1ENR_TIM2EN_Pos)   /*!< 0x00000001 */

+#define RCC_APB1ENR_TIM2EN                  RCC_APB1ENR_TIM2EN_Msk             /*!< Timer 2 clock enabled*/

+#define RCC_APB1ENR_TIM3EN_Pos              (1U)                               

+#define RCC_APB1ENR_TIM3EN_Msk              (0x1UL << RCC_APB1ENR_TIM3EN_Pos)   /*!< 0x00000002 */

+#define RCC_APB1ENR_TIM3EN                  RCC_APB1ENR_TIM3EN_Msk             /*!< Timer 3 clock enable */

+#define RCC_APB1ENR_TIM4EN_Pos              (2U)                               

+#define RCC_APB1ENR_TIM4EN_Msk              (0x1UL << RCC_APB1ENR_TIM4EN_Pos)   /*!< 0x00000004 */

+#define RCC_APB1ENR_TIM4EN                  RCC_APB1ENR_TIM4EN_Msk             /*!< Timer 4 clock enable */

+#define RCC_APB1ENR_TIM5EN_Pos              (3U)                               

+#define RCC_APB1ENR_TIM5EN_Msk              (0x1UL << RCC_APB1ENR_TIM5EN_Pos)   /*!< 0x00000008 */

+#define RCC_APB1ENR_TIM5EN                  RCC_APB1ENR_TIM5EN_Msk             /*!< Timer 5 clock enable */

+#define RCC_APB1ENR_TIM6EN_Pos              (4U)                               

+#define RCC_APB1ENR_TIM6EN_Msk              (0x1UL << RCC_APB1ENR_TIM6EN_Pos)   /*!< 0x00000010 */

+#define RCC_APB1ENR_TIM6EN                  RCC_APB1ENR_TIM6EN_Msk             /*!< Timer 6 clock enable */

+#define RCC_APB1ENR_TIM7EN_Pos              (5U)                               

+#define RCC_APB1ENR_TIM7EN_Msk              (0x1UL << RCC_APB1ENR_TIM7EN_Pos)   /*!< 0x00000020 */

+#define RCC_APB1ENR_TIM7EN                  RCC_APB1ENR_TIM7EN_Msk             /*!< Timer 7 clock enable */

+#define RCC_APB1ENR_LCDEN_Pos               (9U)                               

+#define RCC_APB1ENR_LCDEN_Msk               (0x1UL << RCC_APB1ENR_LCDEN_Pos)    /*!< 0x00000200 */

+#define RCC_APB1ENR_LCDEN                   RCC_APB1ENR_LCDEN_Msk              /*!< LCD clock enable */

+#define RCC_APB1ENR_WWDGEN_Pos              (11U)                              

+#define RCC_APB1ENR_WWDGEN_Msk              (0x1UL << RCC_APB1ENR_WWDGEN_Pos)   /*!< 0x00000800 */

+#define RCC_APB1ENR_WWDGEN                  RCC_APB1ENR_WWDGEN_Msk             /*!< Window Watchdog clock enable */

+#define RCC_APB1ENR_SPI2EN_Pos              (14U)                              

+#define RCC_APB1ENR_SPI2EN_Msk              (0x1UL << RCC_APB1ENR_SPI2EN_Pos)   /*!< 0x00004000 */

+#define RCC_APB1ENR_SPI2EN                  RCC_APB1ENR_SPI2EN_Msk             /*!< SPI 2 clock enable */

+#define RCC_APB1ENR_SPI3EN_Pos              (15U)                              

+#define RCC_APB1ENR_SPI3EN_Msk              (0x1UL << RCC_APB1ENR_SPI3EN_Pos)   /*!< 0x00008000 */

+#define RCC_APB1ENR_SPI3EN                  RCC_APB1ENR_SPI3EN_Msk             /*!< SPI 3 clock enable */

+#define RCC_APB1ENR_USART2EN_Pos            (17U)                              

+#define RCC_APB1ENR_USART2EN_Msk            (0x1UL << RCC_APB1ENR_USART2EN_Pos) /*!< 0x00020000 */

+#define RCC_APB1ENR_USART2EN                RCC_APB1ENR_USART2EN_Msk           /*!< USART 2 clock enable */

+#define RCC_APB1ENR_USART3EN_Pos            (18U)                              

+#define RCC_APB1ENR_USART3EN_Msk            (0x1UL << RCC_APB1ENR_USART3EN_Pos) /*!< 0x00040000 */

+#define RCC_APB1ENR_USART3EN                RCC_APB1ENR_USART3EN_Msk           /*!< USART 3 clock enable */

+#define RCC_APB1ENR_UART4EN_Pos             (19U)                              

+#define RCC_APB1ENR_UART4EN_Msk             (0x1UL << RCC_APB1ENR_UART4EN_Pos)  /*!< 0x00080000 */

+#define RCC_APB1ENR_UART4EN                 RCC_APB1ENR_UART4EN_Msk            /*!< UART 4 clock enable */

+#define RCC_APB1ENR_UART5EN_Pos             (20U)                              

+#define RCC_APB1ENR_UART5EN_Msk             (0x1UL << RCC_APB1ENR_UART5EN_Pos)  /*!< 0x00100000 */

+#define RCC_APB1ENR_UART5EN                 RCC_APB1ENR_UART5EN_Msk            /*!< UART 5 clock enable */

+#define RCC_APB1ENR_I2C1EN_Pos              (21U)                              

+#define RCC_APB1ENR_I2C1EN_Msk              (0x1UL << RCC_APB1ENR_I2C1EN_Pos)   /*!< 0x00200000 */

+#define RCC_APB1ENR_I2C1EN                  RCC_APB1ENR_I2C1EN_Msk             /*!< I2C 1 clock enable */

+#define RCC_APB1ENR_I2C2EN_Pos              (22U)                              

+#define RCC_APB1ENR_I2C2EN_Msk              (0x1UL << RCC_APB1ENR_I2C2EN_Pos)   /*!< 0x00400000 */

+#define RCC_APB1ENR_I2C2EN                  RCC_APB1ENR_I2C2EN_Msk             /*!< I2C 2 clock enable */

+#define RCC_APB1ENR_USBEN_Pos               (23U)                              

+#define RCC_APB1ENR_USBEN_Msk               (0x1UL << RCC_APB1ENR_USBEN_Pos)    /*!< 0x00800000 */

+#define RCC_APB1ENR_USBEN                   RCC_APB1ENR_USBEN_Msk              /*!< USB clock enable */

+#define RCC_APB1ENR_PWREN_Pos               (28U)                              

+#define RCC_APB1ENR_PWREN_Msk               (0x1UL << RCC_APB1ENR_PWREN_Pos)    /*!< 0x10000000 */

+#define RCC_APB1ENR_PWREN                   RCC_APB1ENR_PWREN_Msk              /*!< Power interface clock enable */

+#define RCC_APB1ENR_DACEN_Pos               (29U)                              

+#define RCC_APB1ENR_DACEN_Msk               (0x1UL << RCC_APB1ENR_DACEN_Pos)    /*!< 0x20000000 */

+#define RCC_APB1ENR_DACEN                   RCC_APB1ENR_DACEN_Msk              /*!< DAC interface clock enable */

+#define RCC_APB1ENR_COMPEN_Pos              (31U)                              

+#define RCC_APB1ENR_COMPEN_Msk              (0x1UL << RCC_APB1ENR_COMPEN_Pos)   /*!< 0x80000000 */

+#define RCC_APB1ENR_COMPEN                  RCC_APB1ENR_COMPEN_Msk             /*!< Comparator interface clock enable */

+

+/******************  Bit definition for RCC_AHBLPENR register  ****************/

+#define RCC_AHBLPENR_GPIOALPEN_Pos          (0U)                               

+#define RCC_AHBLPENR_GPIOALPEN_Msk          (0x1UL << RCC_AHBLPENR_GPIOALPEN_Pos) /*!< 0x00000001 */

+#define RCC_AHBLPENR_GPIOALPEN              RCC_AHBLPENR_GPIOALPEN_Msk         /*!< GPIO port A clock enabled in sleep mode */

+#define RCC_AHBLPENR_GPIOBLPEN_Pos          (1U)                               

+#define RCC_AHBLPENR_GPIOBLPEN_Msk          (0x1UL << RCC_AHBLPENR_GPIOBLPEN_Pos) /*!< 0x00000002 */

+#define RCC_AHBLPENR_GPIOBLPEN              RCC_AHBLPENR_GPIOBLPEN_Msk         /*!< GPIO port B clock enabled in sleep mode */

+#define RCC_AHBLPENR_GPIOCLPEN_Pos          (2U)                               

+#define RCC_AHBLPENR_GPIOCLPEN_Msk          (0x1UL << RCC_AHBLPENR_GPIOCLPEN_Pos) /*!< 0x00000004 */

+#define RCC_AHBLPENR_GPIOCLPEN              RCC_AHBLPENR_GPIOCLPEN_Msk         /*!< GPIO port C clock enabled in sleep mode */

+#define RCC_AHBLPENR_GPIODLPEN_Pos          (3U)                               

+#define RCC_AHBLPENR_GPIODLPEN_Msk          (0x1UL << RCC_AHBLPENR_GPIODLPEN_Pos) /*!< 0x00000008 */

+#define RCC_AHBLPENR_GPIODLPEN              RCC_AHBLPENR_GPIODLPEN_Msk         /*!< GPIO port D clock enabled in sleep mode */

+#define RCC_AHBLPENR_GPIOELPEN_Pos          (4U)                               

+#define RCC_AHBLPENR_GPIOELPEN_Msk          (0x1UL << RCC_AHBLPENR_GPIOELPEN_Pos) /*!< 0x00000010 */

+#define RCC_AHBLPENR_GPIOELPEN              RCC_AHBLPENR_GPIOELPEN_Msk         /*!< GPIO port E clock enabled in sleep mode */

+#define RCC_AHBLPENR_GPIOHLPEN_Pos          (5U)                               

+#define RCC_AHBLPENR_GPIOHLPEN_Msk          (0x1UL << RCC_AHBLPENR_GPIOHLPEN_Pos) /*!< 0x00000020 */

+#define RCC_AHBLPENR_GPIOHLPEN              RCC_AHBLPENR_GPIOHLPEN_Msk         /*!< GPIO port H clock enabled in sleep mode */

+#define RCC_AHBLPENR_GPIOFLPEN_Pos          (6U)                               

+#define RCC_AHBLPENR_GPIOFLPEN_Msk          (0x1UL << RCC_AHBLPENR_GPIOFLPEN_Pos) /*!< 0x00000040 */

+#define RCC_AHBLPENR_GPIOFLPEN              RCC_AHBLPENR_GPIOFLPEN_Msk         /*!< GPIO port F clock enabled in sleep mode */

+#define RCC_AHBLPENR_GPIOGLPEN_Pos          (7U)                               

+#define RCC_AHBLPENR_GPIOGLPEN_Msk          (0x1UL << RCC_AHBLPENR_GPIOGLPEN_Pos) /*!< 0x00000080 */

+#define RCC_AHBLPENR_GPIOGLPEN              RCC_AHBLPENR_GPIOGLPEN_Msk         /*!< GPIO port G clock enabled in sleep mode */

+#define RCC_AHBLPENR_CRCLPEN_Pos            (12U)                              

+#define RCC_AHBLPENR_CRCLPEN_Msk            (0x1UL << RCC_AHBLPENR_CRCLPEN_Pos) /*!< 0x00001000 */

+#define RCC_AHBLPENR_CRCLPEN                RCC_AHBLPENR_CRCLPEN_Msk           /*!< CRC clock enabled in sleep mode */

+#define RCC_AHBLPENR_FLITFLPEN_Pos          (15U)                              

+#define RCC_AHBLPENR_FLITFLPEN_Msk          (0x1UL << RCC_AHBLPENR_FLITFLPEN_Pos) /*!< 0x00008000 */

+#define RCC_AHBLPENR_FLITFLPEN              RCC_AHBLPENR_FLITFLPEN_Msk         /*!< Flash Interface clock enabled in sleep mode

+                                                                                (has effect only when the Flash memory is

+                                                                                 in power down mode) */

+#define RCC_AHBLPENR_SRAMLPEN_Pos           (16U)                              

+#define RCC_AHBLPENR_SRAMLPEN_Msk           (0x1UL << RCC_AHBLPENR_SRAMLPEN_Pos) /*!< 0x00010000 */

+#define RCC_AHBLPENR_SRAMLPEN               RCC_AHBLPENR_SRAMLPEN_Msk          /*!< SRAM clock enabled in sleep mode */

+#define RCC_AHBLPENR_DMA1LPEN_Pos           (24U)                              

+#define RCC_AHBLPENR_DMA1LPEN_Msk           (0x1UL << RCC_AHBLPENR_DMA1LPEN_Pos) /*!< 0x01000000 */

+#define RCC_AHBLPENR_DMA1LPEN               RCC_AHBLPENR_DMA1LPEN_Msk          /*!< DMA1 clock enabled in sleep mode */

+#define RCC_AHBLPENR_DMA2LPEN_Pos           (25U)                              

+#define RCC_AHBLPENR_DMA2LPEN_Msk           (0x1UL << RCC_AHBLPENR_DMA2LPEN_Pos) /*!< 0x02000000 */

+#define RCC_AHBLPENR_DMA2LPEN               RCC_AHBLPENR_DMA2LPEN_Msk          /*!< DMA2 clock enabled in sleep mode */

+

+/******************  Bit definition for RCC_APB2LPENR register  ***************/

+#define RCC_APB2LPENR_SYSCFGLPEN_Pos        (0U)                               

+#define RCC_APB2LPENR_SYSCFGLPEN_Msk        (0x1UL << RCC_APB2LPENR_SYSCFGLPEN_Pos) /*!< 0x00000001 */

+#define RCC_APB2LPENR_SYSCFGLPEN            RCC_APB2LPENR_SYSCFGLPEN_Msk       /*!< System Configuration SYSCFG clock enabled in sleep mode */

+#define RCC_APB2LPENR_TIM9LPEN_Pos          (2U)                               

+#define RCC_APB2LPENR_TIM9LPEN_Msk          (0x1UL << RCC_APB2LPENR_TIM9LPEN_Pos) /*!< 0x00000004 */

+#define RCC_APB2LPENR_TIM9LPEN              RCC_APB2LPENR_TIM9LPEN_Msk         /*!< TIM9 interface clock enabled in sleep mode */

+#define RCC_APB2LPENR_TIM10LPEN_Pos         (3U)                               

+#define RCC_APB2LPENR_TIM10LPEN_Msk         (0x1UL << RCC_APB2LPENR_TIM10LPEN_Pos) /*!< 0x00000008 */

+#define RCC_APB2LPENR_TIM10LPEN             RCC_APB2LPENR_TIM10LPEN_Msk        /*!< TIM10 interface clock enabled in sleep mode */

+#define RCC_APB2LPENR_TIM11LPEN_Pos         (4U)                               

+#define RCC_APB2LPENR_TIM11LPEN_Msk         (0x1UL << RCC_APB2LPENR_TIM11LPEN_Pos) /*!< 0x00000010 */

+#define RCC_APB2LPENR_TIM11LPEN             RCC_APB2LPENR_TIM11LPEN_Msk        /*!< TIM11 Timer clock enabled in sleep mode */

+#define RCC_APB2LPENR_ADC1LPEN_Pos          (9U)                               

+#define RCC_APB2LPENR_ADC1LPEN_Msk          (0x1UL << RCC_APB2LPENR_ADC1LPEN_Pos) /*!< 0x00000200 */

+#define RCC_APB2LPENR_ADC1LPEN              RCC_APB2LPENR_ADC1LPEN_Msk         /*!< ADC1 clock enabled in sleep mode */

+#define RCC_APB2LPENR_SPI1LPEN_Pos          (12U)                              

+#define RCC_APB2LPENR_SPI1LPEN_Msk          (0x1UL << RCC_APB2LPENR_SPI1LPEN_Pos) /*!< 0x00001000 */

+#define RCC_APB2LPENR_SPI1LPEN              RCC_APB2LPENR_SPI1LPEN_Msk         /*!< SPI1 clock enabled in sleep mode */

+#define RCC_APB2LPENR_USART1LPEN_Pos        (14U)                              

+#define RCC_APB2LPENR_USART1LPEN_Msk        (0x1UL << RCC_APB2LPENR_USART1LPEN_Pos) /*!< 0x00004000 */

+#define RCC_APB2LPENR_USART1LPEN            RCC_APB2LPENR_USART1LPEN_Msk       /*!< USART1 clock enabled in sleep mode */

+

+/*****************  Bit definition for RCC_APB1LPENR register  ****************/

+#define RCC_APB1LPENR_TIM2LPEN_Pos          (0U)                               

+#define RCC_APB1LPENR_TIM2LPEN_Msk          (0x1UL << RCC_APB1LPENR_TIM2LPEN_Pos) /*!< 0x00000001 */

+#define RCC_APB1LPENR_TIM2LPEN              RCC_APB1LPENR_TIM2LPEN_Msk         /*!< Timer 2 clock enabled in sleep mode */

+#define RCC_APB1LPENR_TIM3LPEN_Pos          (1U)                               

+#define RCC_APB1LPENR_TIM3LPEN_Msk          (0x1UL << RCC_APB1LPENR_TIM3LPEN_Pos) /*!< 0x00000002 */

+#define RCC_APB1LPENR_TIM3LPEN              RCC_APB1LPENR_TIM3LPEN_Msk         /*!< Timer 3 clock enabled in sleep mode */

+#define RCC_APB1LPENR_TIM4LPEN_Pos          (2U)                               

+#define RCC_APB1LPENR_TIM4LPEN_Msk          (0x1UL << RCC_APB1LPENR_TIM4LPEN_Pos) /*!< 0x00000004 */

+#define RCC_APB1LPENR_TIM4LPEN              RCC_APB1LPENR_TIM4LPEN_Msk         /*!< Timer 4 clock enabled in sleep mode */

+#define RCC_APB1LPENR_TIM5LPEN_Pos          (3U)                               

+#define RCC_APB1LPENR_TIM5LPEN_Msk          (0x1UL << RCC_APB1LPENR_TIM5LPEN_Pos) /*!< 0x00000008 */

+#define RCC_APB1LPENR_TIM5LPEN              RCC_APB1LPENR_TIM5LPEN_Msk         /*!< Timer 5 clock enabled in sleep mode */

+#define RCC_APB1LPENR_TIM6LPEN_Pos          (4U)                               

+#define RCC_APB1LPENR_TIM6LPEN_Msk          (0x1UL << RCC_APB1LPENR_TIM6LPEN_Pos) /*!< 0x00000010 */

+#define RCC_APB1LPENR_TIM6LPEN              RCC_APB1LPENR_TIM6LPEN_Msk         /*!< Timer 6 clock enabled in sleep mode */

+#define RCC_APB1LPENR_TIM7LPEN_Pos          (5U)                               

+#define RCC_APB1LPENR_TIM7LPEN_Msk          (0x1UL << RCC_APB1LPENR_TIM7LPEN_Pos) /*!< 0x00000020 */

+#define RCC_APB1LPENR_TIM7LPEN              RCC_APB1LPENR_TIM7LPEN_Msk         /*!< Timer 7 clock enabled in sleep mode */

+#define RCC_APB1LPENR_LCDLPEN_Pos           (9U)                               

+#define RCC_APB1LPENR_LCDLPEN_Msk           (0x1UL << RCC_APB1LPENR_LCDLPEN_Pos) /*!< 0x00000200 */

+#define RCC_APB1LPENR_LCDLPEN               RCC_APB1LPENR_LCDLPEN_Msk          /*!< LCD clock enabled in sleep mode */

+#define RCC_APB1LPENR_WWDGLPEN_Pos          (11U)                              

+#define RCC_APB1LPENR_WWDGLPEN_Msk          (0x1UL << RCC_APB1LPENR_WWDGLPEN_Pos) /*!< 0x00000800 */

+#define RCC_APB1LPENR_WWDGLPEN              RCC_APB1LPENR_WWDGLPEN_Msk         /*!< Window Watchdog clock enabled in sleep mode */

+#define RCC_APB1LPENR_SPI2LPEN_Pos          (14U)                              

+#define RCC_APB1LPENR_SPI2LPEN_Msk          (0x1UL << RCC_APB1LPENR_SPI2LPEN_Pos) /*!< 0x00004000 */

+#define RCC_APB1LPENR_SPI2LPEN              RCC_APB1LPENR_SPI2LPEN_Msk         /*!< SPI 2 clock enabled in sleep mode */

+#define RCC_APB1LPENR_SPI3LPEN_Pos          (15U)                              

+#define RCC_APB1LPENR_SPI3LPEN_Msk          (0x1UL << RCC_APB1LPENR_SPI3LPEN_Pos) /*!< 0x00008000 */

+#define RCC_APB1LPENR_SPI3LPEN              RCC_APB1LPENR_SPI3LPEN_Msk         /*!< SPI 3 clock enabled in sleep mode */

+#define RCC_APB1LPENR_USART2LPEN_Pos        (17U)                              

+#define RCC_APB1LPENR_USART2LPEN_Msk        (0x1UL << RCC_APB1LPENR_USART2LPEN_Pos) /*!< 0x00020000 */

+#define RCC_APB1LPENR_USART2LPEN            RCC_APB1LPENR_USART2LPEN_Msk       /*!< USART 2 clock enabled in sleep mode */

+#define RCC_APB1LPENR_USART3LPEN_Pos        (18U)                              

+#define RCC_APB1LPENR_USART3LPEN_Msk        (0x1UL << RCC_APB1LPENR_USART3LPEN_Pos) /*!< 0x00040000 */

+#define RCC_APB1LPENR_USART3LPEN            RCC_APB1LPENR_USART3LPEN_Msk       /*!< USART 3 clock enabled in sleep mode */

+#define RCC_APB1LPENR_UART4LPEN_Pos         (19U)                              

+#define RCC_APB1LPENR_UART4LPEN_Msk         (0x1UL << RCC_APB1LPENR_UART4LPEN_Pos) /*!< 0x00080000 */

+#define RCC_APB1LPENR_UART4LPEN             RCC_APB1LPENR_UART4LPEN_Msk        /*!< UART 4 clock enabled in sleep mode */

+#define RCC_APB1LPENR_UART5LPEN_Pos         (20U)                              

+#define RCC_APB1LPENR_UART5LPEN_Msk         (0x1UL << RCC_APB1LPENR_UART5LPEN_Pos) /*!< 0x00100000 */

+#define RCC_APB1LPENR_UART5LPEN             RCC_APB1LPENR_UART5LPEN_Msk        /*!< UART 5 clock enabled in sleep mode */

+#define RCC_APB1LPENR_I2C1LPEN_Pos          (21U)                              

+#define RCC_APB1LPENR_I2C1LPEN_Msk          (0x1UL << RCC_APB1LPENR_I2C1LPEN_Pos) /*!< 0x00200000 */

+#define RCC_APB1LPENR_I2C1LPEN              RCC_APB1LPENR_I2C1LPEN_Msk         /*!< I2C 1 clock enabled in sleep mode */

+#define RCC_APB1LPENR_I2C2LPEN_Pos          (22U)                              

+#define RCC_APB1LPENR_I2C2LPEN_Msk          (0x1UL << RCC_APB1LPENR_I2C2LPEN_Pos) /*!< 0x00400000 */

+#define RCC_APB1LPENR_I2C2LPEN              RCC_APB1LPENR_I2C2LPEN_Msk         /*!< I2C 2 clock enabled in sleep mode */

+#define RCC_APB1LPENR_USBLPEN_Pos           (23U)                              

+#define RCC_APB1LPENR_USBLPEN_Msk           (0x1UL << RCC_APB1LPENR_USBLPEN_Pos) /*!< 0x00800000 */

+#define RCC_APB1LPENR_USBLPEN               RCC_APB1LPENR_USBLPEN_Msk          /*!< USB clock enabled in sleep mode */

+#define RCC_APB1LPENR_PWRLPEN_Pos           (28U)                              

+#define RCC_APB1LPENR_PWRLPEN_Msk           (0x1UL << RCC_APB1LPENR_PWRLPEN_Pos) /*!< 0x10000000 */

+#define RCC_APB1LPENR_PWRLPEN               RCC_APB1LPENR_PWRLPEN_Msk          /*!< Power interface clock enabled in sleep mode */

+#define RCC_APB1LPENR_DACLPEN_Pos           (29U)                              

+#define RCC_APB1LPENR_DACLPEN_Msk           (0x1UL << RCC_APB1LPENR_DACLPEN_Pos) /*!< 0x20000000 */

+#define RCC_APB1LPENR_DACLPEN               RCC_APB1LPENR_DACLPEN_Msk          /*!< DAC interface clock enabled in sleep mode */

+#define RCC_APB1LPENR_COMPLPEN_Pos          (31U)                              

+#define RCC_APB1LPENR_COMPLPEN_Msk          (0x1UL << RCC_APB1LPENR_COMPLPEN_Pos) /*!< 0x80000000 */

+#define RCC_APB1LPENR_COMPLPEN              RCC_APB1LPENR_COMPLPEN_Msk         /*!< Comparator interface clock enabled in sleep mode*/

+

+/*******************  Bit definition for RCC_CSR register  ********************/

+#define RCC_CSR_LSION_Pos                   (0U)                               

+#define RCC_CSR_LSION_Msk                   (0x1UL << RCC_CSR_LSION_Pos)        /*!< 0x00000001 */

+#define RCC_CSR_LSION                       RCC_CSR_LSION_Msk                  /*!< Internal Low Speed oscillator enable */

+#define RCC_CSR_LSIRDY_Pos                  (1U)                               

+#define RCC_CSR_LSIRDY_Msk                  (0x1UL << RCC_CSR_LSIRDY_Pos)       /*!< 0x00000002 */

+#define RCC_CSR_LSIRDY                      RCC_CSR_LSIRDY_Msk                 /*!< Internal Low Speed oscillator Ready */

+

+#define RCC_CSR_LSEON_Pos                   (8U)                               

+#define RCC_CSR_LSEON_Msk                   (0x1UL << RCC_CSR_LSEON_Pos)        /*!< 0x00000100 */

+#define RCC_CSR_LSEON                       RCC_CSR_LSEON_Msk                  /*!< External Low Speed oscillator enable */

+#define RCC_CSR_LSERDY_Pos                  (9U)                               

+#define RCC_CSR_LSERDY_Msk                  (0x1UL << RCC_CSR_LSERDY_Pos)       /*!< 0x00000200 */

+#define RCC_CSR_LSERDY                      RCC_CSR_LSERDY_Msk                 /*!< External Low Speed oscillator Ready */

+#define RCC_CSR_LSEBYP_Pos                  (10U)                              

+#define RCC_CSR_LSEBYP_Msk                  (0x1UL << RCC_CSR_LSEBYP_Pos)       /*!< 0x00000400 */

+#define RCC_CSR_LSEBYP                      RCC_CSR_LSEBYP_Msk                 /*!< External Low Speed oscillator Bypass */

+

+#define RCC_CSR_LSECSSON_Pos                (11U)                              

+#define RCC_CSR_LSECSSON_Msk                (0x1UL << RCC_CSR_LSECSSON_Pos)     /*!< 0x00000800 */

+#define RCC_CSR_LSECSSON                    RCC_CSR_LSECSSON_Msk               /*!< External Low Speed oscillator CSS Enable */

+#define RCC_CSR_LSECSSD_Pos                 (12U)                              

+#define RCC_CSR_LSECSSD_Msk                 (0x1UL << RCC_CSR_LSECSSD_Pos)      /*!< 0x00001000 */

+#define RCC_CSR_LSECSSD                     RCC_CSR_LSECSSD_Msk                /*!< External Low Speed oscillator CSS Detected */

+

+#define RCC_CSR_RTCSEL_Pos                  (16U)                              

+#define RCC_CSR_RTCSEL_Msk                  (0x3UL << RCC_CSR_RTCSEL_Pos)       /*!< 0x00030000 */

+#define RCC_CSR_RTCSEL                      RCC_CSR_RTCSEL_Msk                 /*!< RTCSEL[1:0] bits (RTC clock source selection) */

+#define RCC_CSR_RTCSEL_0                    (0x1UL << RCC_CSR_RTCSEL_Pos)       /*!< 0x00010000 */

+#define RCC_CSR_RTCSEL_1                    (0x2UL << RCC_CSR_RTCSEL_Pos)       /*!< 0x00020000 */

+

+/*!< RTC congiguration */

+#define RCC_CSR_RTCSEL_NOCLOCK              (0x00000000U)                      /*!< No clock */

+#define RCC_CSR_RTCSEL_LSE_Pos              (16U)                              

+#define RCC_CSR_RTCSEL_LSE_Msk              (0x1UL << RCC_CSR_RTCSEL_LSE_Pos)   /*!< 0x00010000 */

+#define RCC_CSR_RTCSEL_LSE                  RCC_CSR_RTCSEL_LSE_Msk             /*!< LSE oscillator clock used as RTC clock */

+#define RCC_CSR_RTCSEL_LSI_Pos              (17U)                              

+#define RCC_CSR_RTCSEL_LSI_Msk              (0x1UL << RCC_CSR_RTCSEL_LSI_Pos)   /*!< 0x00020000 */

+#define RCC_CSR_RTCSEL_LSI                  RCC_CSR_RTCSEL_LSI_Msk             /*!< LSI oscillator clock used as RTC clock */

+#define RCC_CSR_RTCSEL_HSE_Pos              (16U)                              

+#define RCC_CSR_RTCSEL_HSE_Msk              (0x3UL << RCC_CSR_RTCSEL_HSE_Pos)   /*!< 0x00030000 */

+#define RCC_CSR_RTCSEL_HSE                  RCC_CSR_RTCSEL_HSE_Msk             /*!< HSE oscillator clock divided by 2, 4, 8 or 16 by RTCPRE used as RTC clock */

+

+#define RCC_CSR_RTCEN_Pos                   (22U)                              

+#define RCC_CSR_RTCEN_Msk                   (0x1UL << RCC_CSR_RTCEN_Pos)        /*!< 0x00400000 */

+#define RCC_CSR_RTCEN                       RCC_CSR_RTCEN_Msk                  /*!< RTC clock enable */

+#define RCC_CSR_RTCRST_Pos                  (23U)                              

+#define RCC_CSR_RTCRST_Msk                  (0x1UL << RCC_CSR_RTCRST_Pos)       /*!< 0x00800000 */

+#define RCC_CSR_RTCRST                      RCC_CSR_RTCRST_Msk                 /*!< RTC reset  */

+ 

+#define RCC_CSR_RMVF_Pos                    (24U)                              

+#define RCC_CSR_RMVF_Msk                    (0x1UL << RCC_CSR_RMVF_Pos)         /*!< 0x01000000 */

+#define RCC_CSR_RMVF                        RCC_CSR_RMVF_Msk                   /*!< Remove reset flag */

+#define RCC_CSR_OBLRSTF_Pos                 (25U)                              

+#define RCC_CSR_OBLRSTF_Msk                 (0x1UL << RCC_CSR_OBLRSTF_Pos)      /*!< 0x02000000 */

+#define RCC_CSR_OBLRSTF                     RCC_CSR_OBLRSTF_Msk                /*!< Option Bytes Loader reset flag */

+#define RCC_CSR_PINRSTF_Pos                 (26U)                              

+#define RCC_CSR_PINRSTF_Msk                 (0x1UL << RCC_CSR_PINRSTF_Pos)      /*!< 0x04000000 */

+#define RCC_CSR_PINRSTF                     RCC_CSR_PINRSTF_Msk                /*!< PIN reset flag */

+#define RCC_CSR_PORRSTF_Pos                 (27U)                              

+#define RCC_CSR_PORRSTF_Msk                 (0x1UL << RCC_CSR_PORRSTF_Pos)      /*!< 0x08000000 */

+#define RCC_CSR_PORRSTF                     RCC_CSR_PORRSTF_Msk                /*!< POR/PDR reset flag */

+#define RCC_CSR_SFTRSTF_Pos                 (28U)                              

+#define RCC_CSR_SFTRSTF_Msk                 (0x1UL << RCC_CSR_SFTRSTF_Pos)      /*!< 0x10000000 */

+#define RCC_CSR_SFTRSTF                     RCC_CSR_SFTRSTF_Msk                /*!< Software Reset flag */

+#define RCC_CSR_IWDGRSTF_Pos                (29U)                              

+#define RCC_CSR_IWDGRSTF_Msk                (0x1UL << RCC_CSR_IWDGRSTF_Pos)     /*!< 0x20000000 */

+#define RCC_CSR_IWDGRSTF                    RCC_CSR_IWDGRSTF_Msk               /*!< Independent Watchdog reset flag */

+#define RCC_CSR_WWDGRSTF_Pos                (30U)                              

+#define RCC_CSR_WWDGRSTF_Msk                (0x1UL << RCC_CSR_WWDGRSTF_Pos)     /*!< 0x40000000 */

+#define RCC_CSR_WWDGRSTF                    RCC_CSR_WWDGRSTF_Msk               /*!< Window watchdog reset flag */

+#define RCC_CSR_LPWRRSTF_Pos                (31U)                              

+#define RCC_CSR_LPWRRSTF_Msk                (0x1UL << RCC_CSR_LPWRRSTF_Pos)     /*!< 0x80000000 */

+#define RCC_CSR_LPWRRSTF                    RCC_CSR_LPWRRSTF_Msk               /*!< Low-Power reset flag */

+

+/******************************************************************************/

+/*                                                                            */

+/*                           Real-Time Clock (RTC)                            */

+/*                                                                            */

+/******************************************************************************/

+/*

+* @brief Specific device feature definitions  (not present on all devices in the STM32F0 serie)

+*/

+#define RTC_TAMPER1_SUPPORT       /*!< TAMPER 1 feature support */

+#define RTC_TAMPER2_SUPPORT       /*!< TAMPER 2 feature support */

+#define RTC_TAMPER3_SUPPORT       /*!< TAMPER 3 feature support */

+#define RTC_BACKUP_SUPPORT        /*!< BACKUP register feature support */

+#define RTC_WAKEUP_SUPPORT        /*!< WAKEUP feature support */

+#define RTC_SMOOTHCALIB_SUPPORT   /*!< Smooth digital calibration feature support */

+#define RTC_SUBSECOND_SUPPORT     /*!< Sub-second feature support */

+

+/********************  Bits definition for RTC_TR register  *******************/

+#define RTC_TR_PM_Pos                        (22U)                             

+#define RTC_TR_PM_Msk                        (0x1UL << RTC_TR_PM_Pos)           /*!< 0x00400000 */

+#define RTC_TR_PM                            RTC_TR_PM_Msk                     

+#define RTC_TR_HT_Pos                        (20U)                             

+#define RTC_TR_HT_Msk                        (0x3UL << RTC_TR_HT_Pos)           /*!< 0x00300000 */

+#define RTC_TR_HT                            RTC_TR_HT_Msk                     

+#define RTC_TR_HT_0                          (0x1UL << RTC_TR_HT_Pos)           /*!< 0x00100000 */

+#define RTC_TR_HT_1                          (0x2UL << RTC_TR_HT_Pos)           /*!< 0x00200000 */

+#define RTC_TR_HU_Pos                        (16U)                             

+#define RTC_TR_HU_Msk                        (0xFUL << RTC_TR_HU_Pos)           /*!< 0x000F0000 */

+#define RTC_TR_HU                            RTC_TR_HU_Msk                     

+#define RTC_TR_HU_0                          (0x1UL << RTC_TR_HU_Pos)           /*!< 0x00010000 */

+#define RTC_TR_HU_1                          (0x2UL << RTC_TR_HU_Pos)           /*!< 0x00020000 */

+#define RTC_TR_HU_2                          (0x4UL << RTC_TR_HU_Pos)           /*!< 0x00040000 */

+#define RTC_TR_HU_3                          (0x8UL << RTC_TR_HU_Pos)           /*!< 0x00080000 */

+#define RTC_TR_MNT_Pos                       (12U)                             

+#define RTC_TR_MNT_Msk                       (0x7UL << RTC_TR_MNT_Pos)          /*!< 0x00007000 */

+#define RTC_TR_MNT                           RTC_TR_MNT_Msk                    

+#define RTC_TR_MNT_0                         (0x1UL << RTC_TR_MNT_Pos)          /*!< 0x00001000 */

+#define RTC_TR_MNT_1                         (0x2UL << RTC_TR_MNT_Pos)          /*!< 0x00002000 */

+#define RTC_TR_MNT_2                         (0x4UL << RTC_TR_MNT_Pos)          /*!< 0x00004000 */

+#define RTC_TR_MNU_Pos                       (8U)                              

+#define RTC_TR_MNU_Msk                       (0xFUL << RTC_TR_MNU_Pos)          /*!< 0x00000F00 */

+#define RTC_TR_MNU                           RTC_TR_MNU_Msk                    

+#define RTC_TR_MNU_0                         (0x1UL << RTC_TR_MNU_Pos)          /*!< 0x00000100 */

+#define RTC_TR_MNU_1                         (0x2UL << RTC_TR_MNU_Pos)          /*!< 0x00000200 */

+#define RTC_TR_MNU_2                         (0x4UL << RTC_TR_MNU_Pos)          /*!< 0x00000400 */

+#define RTC_TR_MNU_3                         (0x8UL << RTC_TR_MNU_Pos)          /*!< 0x00000800 */

+#define RTC_TR_ST_Pos                        (4U)                              

+#define RTC_TR_ST_Msk                        (0x7UL << RTC_TR_ST_Pos)           /*!< 0x00000070 */

+#define RTC_TR_ST                            RTC_TR_ST_Msk                     

+#define RTC_TR_ST_0                          (0x1UL << RTC_TR_ST_Pos)           /*!< 0x00000010 */

+#define RTC_TR_ST_1                          (0x2UL << RTC_TR_ST_Pos)           /*!< 0x00000020 */

+#define RTC_TR_ST_2                          (0x4UL << RTC_TR_ST_Pos)           /*!< 0x00000040 */

+#define RTC_TR_SU_Pos                        (0U)                              

+#define RTC_TR_SU_Msk                        (0xFUL << RTC_TR_SU_Pos)           /*!< 0x0000000F */

+#define RTC_TR_SU                            RTC_TR_SU_Msk                     

+#define RTC_TR_SU_0                          (0x1UL << RTC_TR_SU_Pos)           /*!< 0x00000001 */

+#define RTC_TR_SU_1                          (0x2UL << RTC_TR_SU_Pos)           /*!< 0x00000002 */

+#define RTC_TR_SU_2                          (0x4UL << RTC_TR_SU_Pos)           /*!< 0x00000004 */

+#define RTC_TR_SU_3                          (0x8UL << RTC_TR_SU_Pos)           /*!< 0x00000008 */

+

+/********************  Bits definition for RTC_DR register  *******************/

+#define RTC_DR_YT_Pos                        (20U)                             

+#define RTC_DR_YT_Msk                        (0xFUL << RTC_DR_YT_Pos)           /*!< 0x00F00000 */

+#define RTC_DR_YT                            RTC_DR_YT_Msk                     

+#define RTC_DR_YT_0                          (0x1UL << RTC_DR_YT_Pos)           /*!< 0x00100000 */

+#define RTC_DR_YT_1                          (0x2UL << RTC_DR_YT_Pos)           /*!< 0x00200000 */

+#define RTC_DR_YT_2                          (0x4UL << RTC_DR_YT_Pos)           /*!< 0x00400000 */

+#define RTC_DR_YT_3                          (0x8UL << RTC_DR_YT_Pos)           /*!< 0x00800000 */

+#define RTC_DR_YU_Pos                        (16U)                             

+#define RTC_DR_YU_Msk                        (0xFUL << RTC_DR_YU_Pos)           /*!< 0x000F0000 */

+#define RTC_DR_YU                            RTC_DR_YU_Msk                     

+#define RTC_DR_YU_0                          (0x1UL << RTC_DR_YU_Pos)           /*!< 0x00010000 */

+#define RTC_DR_YU_1                          (0x2UL << RTC_DR_YU_Pos)           /*!< 0x00020000 */

+#define RTC_DR_YU_2                          (0x4UL << RTC_DR_YU_Pos)           /*!< 0x00040000 */

+#define RTC_DR_YU_3                          (0x8UL << RTC_DR_YU_Pos)           /*!< 0x00080000 */

+#define RTC_DR_WDU_Pos                       (13U)                             

+#define RTC_DR_WDU_Msk                       (0x7UL << RTC_DR_WDU_Pos)          /*!< 0x0000E000 */

+#define RTC_DR_WDU                           RTC_DR_WDU_Msk                    

+#define RTC_DR_WDU_0                         (0x1UL << RTC_DR_WDU_Pos)          /*!< 0x00002000 */

+#define RTC_DR_WDU_1                         (0x2UL << RTC_DR_WDU_Pos)          /*!< 0x00004000 */

+#define RTC_DR_WDU_2                         (0x4UL << RTC_DR_WDU_Pos)          /*!< 0x00008000 */

+#define RTC_DR_MT_Pos                        (12U)                             

+#define RTC_DR_MT_Msk                        (0x1UL << RTC_DR_MT_Pos)           /*!< 0x00001000 */

+#define RTC_DR_MT                            RTC_DR_MT_Msk                     

+#define RTC_DR_MU_Pos                        (8U)                              

+#define RTC_DR_MU_Msk                        (0xFUL << RTC_DR_MU_Pos)           /*!< 0x00000F00 */

+#define RTC_DR_MU                            RTC_DR_MU_Msk                     

+#define RTC_DR_MU_0                          (0x1UL << RTC_DR_MU_Pos)           /*!< 0x00000100 */

+#define RTC_DR_MU_1                          (0x2UL << RTC_DR_MU_Pos)           /*!< 0x00000200 */

+#define RTC_DR_MU_2                          (0x4UL << RTC_DR_MU_Pos)           /*!< 0x00000400 */

+#define RTC_DR_MU_3                          (0x8UL << RTC_DR_MU_Pos)           /*!< 0x00000800 */

+#define RTC_DR_DT_Pos                        (4U)                              

+#define RTC_DR_DT_Msk                        (0x3UL << RTC_DR_DT_Pos)           /*!< 0x00000030 */

+#define RTC_DR_DT                            RTC_DR_DT_Msk                     

+#define RTC_DR_DT_0                          (0x1UL << RTC_DR_DT_Pos)           /*!< 0x00000010 */

+#define RTC_DR_DT_1                          (0x2UL << RTC_DR_DT_Pos)           /*!< 0x00000020 */

+#define RTC_DR_DU_Pos                        (0U)                              

+#define RTC_DR_DU_Msk                        (0xFUL << RTC_DR_DU_Pos)           /*!< 0x0000000F */

+#define RTC_DR_DU                            RTC_DR_DU_Msk                     

+#define RTC_DR_DU_0                          (0x1UL << RTC_DR_DU_Pos)           /*!< 0x00000001 */

+#define RTC_DR_DU_1                          (0x2UL << RTC_DR_DU_Pos)           /*!< 0x00000002 */

+#define RTC_DR_DU_2                          (0x4UL << RTC_DR_DU_Pos)           /*!< 0x00000004 */

+#define RTC_DR_DU_3                          (0x8UL << RTC_DR_DU_Pos)           /*!< 0x00000008 */

+

+/********************  Bits definition for RTC_CR register  *******************/

+#define RTC_CR_COE_Pos                       (23U)                             

+#define RTC_CR_COE_Msk                       (0x1UL << RTC_CR_COE_Pos)          /*!< 0x00800000 */

+#define RTC_CR_COE                           RTC_CR_COE_Msk                    

+#define RTC_CR_OSEL_Pos                      (21U)                             

+#define RTC_CR_OSEL_Msk                      (0x3UL << RTC_CR_OSEL_Pos)         /*!< 0x00600000 */

+#define RTC_CR_OSEL                          RTC_CR_OSEL_Msk                   

+#define RTC_CR_OSEL_0                        (0x1UL << RTC_CR_OSEL_Pos)         /*!< 0x00200000 */

+#define RTC_CR_OSEL_1                        (0x2UL << RTC_CR_OSEL_Pos)         /*!< 0x00400000 */

+#define RTC_CR_POL_Pos                       (20U)                             

+#define RTC_CR_POL_Msk                       (0x1UL << RTC_CR_POL_Pos)          /*!< 0x00100000 */

+#define RTC_CR_POL                           RTC_CR_POL_Msk                    

+#define RTC_CR_COSEL_Pos                     (19U)                             

+#define RTC_CR_COSEL_Msk                     (0x1UL << RTC_CR_COSEL_Pos)        /*!< 0x00080000 */

+#define RTC_CR_COSEL                         RTC_CR_COSEL_Msk                  

+#define RTC_CR_BKP_Pos                       (18U)                             

+#define RTC_CR_BKP_Msk                       (0x1UL << RTC_CR_BKP_Pos)          /*!< 0x00040000 */

+#define RTC_CR_BKP                           RTC_CR_BKP_Msk                    

+#define RTC_CR_SUB1H_Pos                     (17U)                             

+#define RTC_CR_SUB1H_Msk                     (0x1UL << RTC_CR_SUB1H_Pos)        /*!< 0x00020000 */

+#define RTC_CR_SUB1H                         RTC_CR_SUB1H_Msk                  

+#define RTC_CR_ADD1H_Pos                     (16U)                             

+#define RTC_CR_ADD1H_Msk                     (0x1UL << RTC_CR_ADD1H_Pos)        /*!< 0x00010000 */

+#define RTC_CR_ADD1H                         RTC_CR_ADD1H_Msk                  

+#define RTC_CR_TSIE_Pos                      (15U)                             

+#define RTC_CR_TSIE_Msk                      (0x1UL << RTC_CR_TSIE_Pos)         /*!< 0x00008000 */

+#define RTC_CR_TSIE                          RTC_CR_TSIE_Msk                   

+#define RTC_CR_WUTIE_Pos                     (14U)                             

+#define RTC_CR_WUTIE_Msk                     (0x1UL << RTC_CR_WUTIE_Pos)        /*!< 0x00004000 */

+#define RTC_CR_WUTIE                         RTC_CR_WUTIE_Msk                  

+#define RTC_CR_ALRBIE_Pos                    (13U)                             

+#define RTC_CR_ALRBIE_Msk                    (0x1UL << RTC_CR_ALRBIE_Pos)       /*!< 0x00002000 */

+#define RTC_CR_ALRBIE                        RTC_CR_ALRBIE_Msk                 

+#define RTC_CR_ALRAIE_Pos                    (12U)                             

+#define RTC_CR_ALRAIE_Msk                    (0x1UL << RTC_CR_ALRAIE_Pos)       /*!< 0x00001000 */

+#define RTC_CR_ALRAIE                        RTC_CR_ALRAIE_Msk                 

+#define RTC_CR_TSE_Pos                       (11U)                             

+#define RTC_CR_TSE_Msk                       (0x1UL << RTC_CR_TSE_Pos)          /*!< 0x00000800 */

+#define RTC_CR_TSE                           RTC_CR_TSE_Msk                    

+#define RTC_CR_WUTE_Pos                      (10U)                             

+#define RTC_CR_WUTE_Msk                      (0x1UL << RTC_CR_WUTE_Pos)         /*!< 0x00000400 */

+#define RTC_CR_WUTE                          RTC_CR_WUTE_Msk                   

+#define RTC_CR_ALRBE_Pos                     (9U)                              

+#define RTC_CR_ALRBE_Msk                     (0x1UL << RTC_CR_ALRBE_Pos)        /*!< 0x00000200 */

+#define RTC_CR_ALRBE                         RTC_CR_ALRBE_Msk                  

+#define RTC_CR_ALRAE_Pos                     (8U)                              

+#define RTC_CR_ALRAE_Msk                     (0x1UL << RTC_CR_ALRAE_Pos)        /*!< 0x00000100 */

+#define RTC_CR_ALRAE                         RTC_CR_ALRAE_Msk                  

+#define RTC_CR_DCE_Pos                       (7U)                              

+#define RTC_CR_DCE_Msk                       (0x1UL << RTC_CR_DCE_Pos)          /*!< 0x00000080 */

+#define RTC_CR_DCE                           RTC_CR_DCE_Msk                    

+#define RTC_CR_FMT_Pos                       (6U)                              

+#define RTC_CR_FMT_Msk                       (0x1UL << RTC_CR_FMT_Pos)          /*!< 0x00000040 */

+#define RTC_CR_FMT                           RTC_CR_FMT_Msk                    

+#define RTC_CR_BYPSHAD_Pos                   (5U)                              

+#define RTC_CR_BYPSHAD_Msk                   (0x1UL << RTC_CR_BYPSHAD_Pos)      /*!< 0x00000020 */

+#define RTC_CR_BYPSHAD                       RTC_CR_BYPSHAD_Msk                

+#define RTC_CR_REFCKON_Pos                   (4U)                              

+#define RTC_CR_REFCKON_Msk                   (0x1UL << RTC_CR_REFCKON_Pos)      /*!< 0x00000010 */

+#define RTC_CR_REFCKON                       RTC_CR_REFCKON_Msk                

+#define RTC_CR_TSEDGE_Pos                    (3U)                              

+#define RTC_CR_TSEDGE_Msk                    (0x1UL << RTC_CR_TSEDGE_Pos)       /*!< 0x00000008 */

+#define RTC_CR_TSEDGE                        RTC_CR_TSEDGE_Msk                 

+#define RTC_CR_WUCKSEL_Pos                   (0U)                              

+#define RTC_CR_WUCKSEL_Msk                   (0x7UL << RTC_CR_WUCKSEL_Pos)      /*!< 0x00000007 */

+#define RTC_CR_WUCKSEL                       RTC_CR_WUCKSEL_Msk                

+#define RTC_CR_WUCKSEL_0                     (0x1UL << RTC_CR_WUCKSEL_Pos)      /*!< 0x00000001 */

+#define RTC_CR_WUCKSEL_1                     (0x2UL << RTC_CR_WUCKSEL_Pos)      /*!< 0x00000002 */

+#define RTC_CR_WUCKSEL_2                     (0x4UL << RTC_CR_WUCKSEL_Pos)      /*!< 0x00000004 */

+

+/* Legacy defines */

+#define  RTC_CR_BCK_Pos RTC_CR_BKP_Pos

+#define  RTC_CR_BCK_Msk RTC_CR_BKP_Msk

+#define  RTC_CR_BCK     RTC_CR_BKP

+

+/********************  Bits definition for RTC_ISR register  ******************/

+#define RTC_ISR_RECALPF_Pos                  (16U)                             

+#define RTC_ISR_RECALPF_Msk                  (0x1UL << RTC_ISR_RECALPF_Pos)     /*!< 0x00010000 */

+#define RTC_ISR_RECALPF                      RTC_ISR_RECALPF_Msk               

+#define RTC_ISR_TAMP3F_Pos                   (15U)                             

+#define RTC_ISR_TAMP3F_Msk                   (0x1UL << RTC_ISR_TAMP3F_Pos)      /*!< 0x00008000 */

+#define RTC_ISR_TAMP3F                       RTC_ISR_TAMP3F_Msk                

+#define RTC_ISR_TAMP2F_Pos                   (14U)                             

+#define RTC_ISR_TAMP2F_Msk                   (0x1UL << RTC_ISR_TAMP2F_Pos)      /*!< 0x00004000 */

+#define RTC_ISR_TAMP2F                       RTC_ISR_TAMP2F_Msk                

+#define RTC_ISR_TAMP1F_Pos                   (13U)                             

+#define RTC_ISR_TAMP1F_Msk                   (0x1UL << RTC_ISR_TAMP1F_Pos)      /*!< 0x00002000 */

+#define RTC_ISR_TAMP1F                       RTC_ISR_TAMP1F_Msk                

+#define RTC_ISR_TSOVF_Pos                    (12U)                             

+#define RTC_ISR_TSOVF_Msk                    (0x1UL << RTC_ISR_TSOVF_Pos)       /*!< 0x00001000 */

+#define RTC_ISR_TSOVF                        RTC_ISR_TSOVF_Msk                 

+#define RTC_ISR_TSF_Pos                      (11U)                             

+#define RTC_ISR_TSF_Msk                      (0x1UL << RTC_ISR_TSF_Pos)         /*!< 0x00000800 */

+#define RTC_ISR_TSF                          RTC_ISR_TSF_Msk                   

+#define RTC_ISR_WUTF_Pos                     (10U)                             

+#define RTC_ISR_WUTF_Msk                     (0x1UL << RTC_ISR_WUTF_Pos)        /*!< 0x00000400 */

+#define RTC_ISR_WUTF                         RTC_ISR_WUTF_Msk                  

+#define RTC_ISR_ALRBF_Pos                    (9U)                              

+#define RTC_ISR_ALRBF_Msk                    (0x1UL << RTC_ISR_ALRBF_Pos)       /*!< 0x00000200 */

+#define RTC_ISR_ALRBF                        RTC_ISR_ALRBF_Msk                 

+#define RTC_ISR_ALRAF_Pos                    (8U)                              

+#define RTC_ISR_ALRAF_Msk                    (0x1UL << RTC_ISR_ALRAF_Pos)       /*!< 0x00000100 */

+#define RTC_ISR_ALRAF                        RTC_ISR_ALRAF_Msk                 

+#define RTC_ISR_INIT_Pos                     (7U)                              

+#define RTC_ISR_INIT_Msk                     (0x1UL << RTC_ISR_INIT_Pos)        /*!< 0x00000080 */

+#define RTC_ISR_INIT                         RTC_ISR_INIT_Msk                  

+#define RTC_ISR_INITF_Pos                    (6U)                              

+#define RTC_ISR_INITF_Msk                    (0x1UL << RTC_ISR_INITF_Pos)       /*!< 0x00000040 */

+#define RTC_ISR_INITF                        RTC_ISR_INITF_Msk                 

+#define RTC_ISR_RSF_Pos                      (5U)                              

+#define RTC_ISR_RSF_Msk                      (0x1UL << RTC_ISR_RSF_Pos)         /*!< 0x00000020 */

+#define RTC_ISR_RSF                          RTC_ISR_RSF_Msk                   

+#define RTC_ISR_INITS_Pos                    (4U)                              

+#define RTC_ISR_INITS_Msk                    (0x1UL << RTC_ISR_INITS_Pos)       /*!< 0x00000010 */

+#define RTC_ISR_INITS                        RTC_ISR_INITS_Msk                 

+#define RTC_ISR_SHPF_Pos                     (3U)                              

+#define RTC_ISR_SHPF_Msk                     (0x1UL << RTC_ISR_SHPF_Pos)        /*!< 0x00000008 */

+#define RTC_ISR_SHPF                         RTC_ISR_SHPF_Msk                  

+#define RTC_ISR_WUTWF_Pos                    (2U)                              

+#define RTC_ISR_WUTWF_Msk                    (0x1UL << RTC_ISR_WUTWF_Pos)       /*!< 0x00000004 */

+#define RTC_ISR_WUTWF                        RTC_ISR_WUTWF_Msk                 

+#define RTC_ISR_ALRBWF_Pos                   (1U)                              

+#define RTC_ISR_ALRBWF_Msk                   (0x1UL << RTC_ISR_ALRBWF_Pos)      /*!< 0x00000002 */

+#define RTC_ISR_ALRBWF                       RTC_ISR_ALRBWF_Msk                

+#define RTC_ISR_ALRAWF_Pos                   (0U)                              

+#define RTC_ISR_ALRAWF_Msk                   (0x1UL << RTC_ISR_ALRAWF_Pos)      /*!< 0x00000001 */

+#define RTC_ISR_ALRAWF                       RTC_ISR_ALRAWF_Msk                

+

+/********************  Bits definition for RTC_PRER register  *****************/

+#define RTC_PRER_PREDIV_A_Pos                (16U)                             

+#define RTC_PRER_PREDIV_A_Msk                (0x7FUL << RTC_PRER_PREDIV_A_Pos)  /*!< 0x007F0000 */

+#define RTC_PRER_PREDIV_A                    RTC_PRER_PREDIV_A_Msk             

+#define RTC_PRER_PREDIV_S_Pos                (0U)                              

+#define RTC_PRER_PREDIV_S_Msk                (0x7FFFUL << RTC_PRER_PREDIV_S_Pos) /*!< 0x00007FFF */

+#define RTC_PRER_PREDIV_S                    RTC_PRER_PREDIV_S_Msk             

+

+/********************  Bits definition for RTC_WUTR register  *****************/

+#define RTC_WUTR_WUT_Pos                     (0U)                              

+#define RTC_WUTR_WUT_Msk                     (0xFFFFUL << RTC_WUTR_WUT_Pos)     /*!< 0x0000FFFF */

+#define RTC_WUTR_WUT                         RTC_WUTR_WUT_Msk                  

+

+/********************  Bits definition for RTC_CALIBR register  ***************/

+#define RTC_CALIBR_DCS_Pos                   (7U)                              

+#define RTC_CALIBR_DCS_Msk                   (0x1UL << RTC_CALIBR_DCS_Pos)      /*!< 0x00000080 */

+#define RTC_CALIBR_DCS                       RTC_CALIBR_DCS_Msk                

+#define RTC_CALIBR_DC_Pos                    (0U)                              

+#define RTC_CALIBR_DC_Msk                    (0x1FUL << RTC_CALIBR_DC_Pos)      /*!< 0x0000001F */

+#define RTC_CALIBR_DC                        RTC_CALIBR_DC_Msk                 

+

+/********************  Bits definition for RTC_ALRMAR register  ***************/

+#define RTC_ALRMAR_MSK4_Pos                  (31U)                             

+#define RTC_ALRMAR_MSK4_Msk                  (0x1UL << RTC_ALRMAR_MSK4_Pos)     /*!< 0x80000000 */

+#define RTC_ALRMAR_MSK4                      RTC_ALRMAR_MSK4_Msk               

+#define RTC_ALRMAR_WDSEL_Pos                 (30U)                             

+#define RTC_ALRMAR_WDSEL_Msk                 (0x1UL << RTC_ALRMAR_WDSEL_Pos)    /*!< 0x40000000 */

+#define RTC_ALRMAR_WDSEL                     RTC_ALRMAR_WDSEL_Msk              

+#define RTC_ALRMAR_DT_Pos                    (28U)                             

+#define RTC_ALRMAR_DT_Msk                    (0x3UL << RTC_ALRMAR_DT_Pos)       /*!< 0x30000000 */

+#define RTC_ALRMAR_DT                        RTC_ALRMAR_DT_Msk                 

+#define RTC_ALRMAR_DT_0                      (0x1UL << RTC_ALRMAR_DT_Pos)       /*!< 0x10000000 */

+#define RTC_ALRMAR_DT_1                      (0x2UL << RTC_ALRMAR_DT_Pos)       /*!< 0x20000000 */

+#define RTC_ALRMAR_DU_Pos                    (24U)                             

+#define RTC_ALRMAR_DU_Msk                    (0xFUL << RTC_ALRMAR_DU_Pos)       /*!< 0x0F000000 */

+#define RTC_ALRMAR_DU                        RTC_ALRMAR_DU_Msk                 

+#define RTC_ALRMAR_DU_0                      (0x1UL << RTC_ALRMAR_DU_Pos)       /*!< 0x01000000 */

+#define RTC_ALRMAR_DU_1                      (0x2UL << RTC_ALRMAR_DU_Pos)       /*!< 0x02000000 */

+#define RTC_ALRMAR_DU_2                      (0x4UL << RTC_ALRMAR_DU_Pos)       /*!< 0x04000000 */

+#define RTC_ALRMAR_DU_3                      (0x8UL << RTC_ALRMAR_DU_Pos)       /*!< 0x08000000 */

+#define RTC_ALRMAR_MSK3_Pos                  (23U)                             

+#define RTC_ALRMAR_MSK3_Msk                  (0x1UL << RTC_ALRMAR_MSK3_Pos)     /*!< 0x00800000 */

+#define RTC_ALRMAR_MSK3                      RTC_ALRMAR_MSK3_Msk               

+#define RTC_ALRMAR_PM_Pos                    (22U)                             

+#define RTC_ALRMAR_PM_Msk                    (0x1UL << RTC_ALRMAR_PM_Pos)       /*!< 0x00400000 */

+#define RTC_ALRMAR_PM                        RTC_ALRMAR_PM_Msk                 

+#define RTC_ALRMAR_HT_Pos                    (20U)                             

+#define RTC_ALRMAR_HT_Msk                    (0x3UL << RTC_ALRMAR_HT_Pos)       /*!< 0x00300000 */

+#define RTC_ALRMAR_HT                        RTC_ALRMAR_HT_Msk                 

+#define RTC_ALRMAR_HT_0                      (0x1UL << RTC_ALRMAR_HT_Pos)       /*!< 0x00100000 */

+#define RTC_ALRMAR_HT_1                      (0x2UL << RTC_ALRMAR_HT_Pos)       /*!< 0x00200000 */

+#define RTC_ALRMAR_HU_Pos                    (16U)                             

+#define RTC_ALRMAR_HU_Msk                    (0xFUL << RTC_ALRMAR_HU_Pos)       /*!< 0x000F0000 */

+#define RTC_ALRMAR_HU                        RTC_ALRMAR_HU_Msk                 

+#define RTC_ALRMAR_HU_0                      (0x1UL << RTC_ALRMAR_HU_Pos)       /*!< 0x00010000 */

+#define RTC_ALRMAR_HU_1                      (0x2UL << RTC_ALRMAR_HU_Pos)       /*!< 0x00020000 */

+#define RTC_ALRMAR_HU_2                      (0x4UL << RTC_ALRMAR_HU_Pos)       /*!< 0x00040000 */

+#define RTC_ALRMAR_HU_3                      (0x8UL << RTC_ALRMAR_HU_Pos)       /*!< 0x00080000 */

+#define RTC_ALRMAR_MSK2_Pos                  (15U)                             

+#define RTC_ALRMAR_MSK2_Msk                  (0x1UL << RTC_ALRMAR_MSK2_Pos)     /*!< 0x00008000 */

+#define RTC_ALRMAR_MSK2                      RTC_ALRMAR_MSK2_Msk               

+#define RTC_ALRMAR_MNT_Pos                   (12U)                             

+#define RTC_ALRMAR_MNT_Msk                   (0x7UL << RTC_ALRMAR_MNT_Pos)      /*!< 0x00007000 */

+#define RTC_ALRMAR_MNT                       RTC_ALRMAR_MNT_Msk                

+#define RTC_ALRMAR_MNT_0                     (0x1UL << RTC_ALRMAR_MNT_Pos)      /*!< 0x00001000 */

+#define RTC_ALRMAR_MNT_1                     (0x2UL << RTC_ALRMAR_MNT_Pos)      /*!< 0x00002000 */

+#define RTC_ALRMAR_MNT_2                     (0x4UL << RTC_ALRMAR_MNT_Pos)      /*!< 0x00004000 */

+#define RTC_ALRMAR_MNU_Pos                   (8U)                              

+#define RTC_ALRMAR_MNU_Msk                   (0xFUL << RTC_ALRMAR_MNU_Pos)      /*!< 0x00000F00 */

+#define RTC_ALRMAR_MNU                       RTC_ALRMAR_MNU_Msk                

+#define RTC_ALRMAR_MNU_0                     (0x1UL << RTC_ALRMAR_MNU_Pos)      /*!< 0x00000100 */

+#define RTC_ALRMAR_MNU_1                     (0x2UL << RTC_ALRMAR_MNU_Pos)      /*!< 0x00000200 */

+#define RTC_ALRMAR_MNU_2                     (0x4UL << RTC_ALRMAR_MNU_Pos)      /*!< 0x00000400 */

+#define RTC_ALRMAR_MNU_3                     (0x8UL << RTC_ALRMAR_MNU_Pos)      /*!< 0x00000800 */

+#define RTC_ALRMAR_MSK1_Pos                  (7U)                              

+#define RTC_ALRMAR_MSK1_Msk                  (0x1UL << RTC_ALRMAR_MSK1_Pos)     /*!< 0x00000080 */

+#define RTC_ALRMAR_MSK1                      RTC_ALRMAR_MSK1_Msk               

+#define RTC_ALRMAR_ST_Pos                    (4U)                              

+#define RTC_ALRMAR_ST_Msk                    (0x7UL << RTC_ALRMAR_ST_Pos)       /*!< 0x00000070 */

+#define RTC_ALRMAR_ST                        RTC_ALRMAR_ST_Msk                 

+#define RTC_ALRMAR_ST_0                      (0x1UL << RTC_ALRMAR_ST_Pos)       /*!< 0x00000010 */

+#define RTC_ALRMAR_ST_1                      (0x2UL << RTC_ALRMAR_ST_Pos)       /*!< 0x00000020 */

+#define RTC_ALRMAR_ST_2                      (0x4UL << RTC_ALRMAR_ST_Pos)       /*!< 0x00000040 */

+#define RTC_ALRMAR_SU_Pos                    (0U)                              

+#define RTC_ALRMAR_SU_Msk                    (0xFUL << RTC_ALRMAR_SU_Pos)       /*!< 0x0000000F */

+#define RTC_ALRMAR_SU                        RTC_ALRMAR_SU_Msk                 

+#define RTC_ALRMAR_SU_0                      (0x1UL << RTC_ALRMAR_SU_Pos)       /*!< 0x00000001 */

+#define RTC_ALRMAR_SU_1                      (0x2UL << RTC_ALRMAR_SU_Pos)       /*!< 0x00000002 */

+#define RTC_ALRMAR_SU_2                      (0x4UL << RTC_ALRMAR_SU_Pos)       /*!< 0x00000004 */

+#define RTC_ALRMAR_SU_3                      (0x8UL << RTC_ALRMAR_SU_Pos)       /*!< 0x00000008 */

+

+/********************  Bits definition for RTC_ALRMBR register  ***************/

+#define RTC_ALRMBR_MSK4_Pos                  (31U)                             

+#define RTC_ALRMBR_MSK4_Msk                  (0x1UL << RTC_ALRMBR_MSK4_Pos)     /*!< 0x80000000 */

+#define RTC_ALRMBR_MSK4                      RTC_ALRMBR_MSK4_Msk               

+#define RTC_ALRMBR_WDSEL_Pos                 (30U)                             

+#define RTC_ALRMBR_WDSEL_Msk                 (0x1UL << RTC_ALRMBR_WDSEL_Pos)    /*!< 0x40000000 */

+#define RTC_ALRMBR_WDSEL                     RTC_ALRMBR_WDSEL_Msk              

+#define RTC_ALRMBR_DT_Pos                    (28U)                             

+#define RTC_ALRMBR_DT_Msk                    (0x3UL << RTC_ALRMBR_DT_Pos)       /*!< 0x30000000 */

+#define RTC_ALRMBR_DT                        RTC_ALRMBR_DT_Msk                 

+#define RTC_ALRMBR_DT_0                      (0x1UL << RTC_ALRMBR_DT_Pos)       /*!< 0x10000000 */

+#define RTC_ALRMBR_DT_1                      (0x2UL << RTC_ALRMBR_DT_Pos)       /*!< 0x20000000 */

+#define RTC_ALRMBR_DU_Pos                    (24U)                             

+#define RTC_ALRMBR_DU_Msk                    (0xFUL << RTC_ALRMBR_DU_Pos)       /*!< 0x0F000000 */

+#define RTC_ALRMBR_DU                        RTC_ALRMBR_DU_Msk                 

+#define RTC_ALRMBR_DU_0                      (0x1UL << RTC_ALRMBR_DU_Pos)       /*!< 0x01000000 */

+#define RTC_ALRMBR_DU_1                      (0x2UL << RTC_ALRMBR_DU_Pos)       /*!< 0x02000000 */

+#define RTC_ALRMBR_DU_2                      (0x4UL << RTC_ALRMBR_DU_Pos)       /*!< 0x04000000 */

+#define RTC_ALRMBR_DU_3                      (0x8UL << RTC_ALRMBR_DU_Pos)       /*!< 0x08000000 */

+#define RTC_ALRMBR_MSK3_Pos                  (23U)                             

+#define RTC_ALRMBR_MSK3_Msk                  (0x1UL << RTC_ALRMBR_MSK3_Pos)     /*!< 0x00800000 */

+#define RTC_ALRMBR_MSK3                      RTC_ALRMBR_MSK3_Msk               

+#define RTC_ALRMBR_PM_Pos                    (22U)                             

+#define RTC_ALRMBR_PM_Msk                    (0x1UL << RTC_ALRMBR_PM_Pos)       /*!< 0x00400000 */

+#define RTC_ALRMBR_PM                        RTC_ALRMBR_PM_Msk                 

+#define RTC_ALRMBR_HT_Pos                    (20U)                             

+#define RTC_ALRMBR_HT_Msk                    (0x3UL << RTC_ALRMBR_HT_Pos)       /*!< 0x00300000 */

+#define RTC_ALRMBR_HT                        RTC_ALRMBR_HT_Msk                 

+#define RTC_ALRMBR_HT_0                      (0x1UL << RTC_ALRMBR_HT_Pos)       /*!< 0x00100000 */

+#define RTC_ALRMBR_HT_1                      (0x2UL << RTC_ALRMBR_HT_Pos)       /*!< 0x00200000 */

+#define RTC_ALRMBR_HU_Pos                    (16U)                             

+#define RTC_ALRMBR_HU_Msk                    (0xFUL << RTC_ALRMBR_HU_Pos)       /*!< 0x000F0000 */

+#define RTC_ALRMBR_HU                        RTC_ALRMBR_HU_Msk                 

+#define RTC_ALRMBR_HU_0                      (0x1UL << RTC_ALRMBR_HU_Pos)       /*!< 0x00010000 */

+#define RTC_ALRMBR_HU_1                      (0x2UL << RTC_ALRMBR_HU_Pos)       /*!< 0x00020000 */

+#define RTC_ALRMBR_HU_2                      (0x4UL << RTC_ALRMBR_HU_Pos)       /*!< 0x00040000 */

+#define RTC_ALRMBR_HU_3                      (0x8UL << RTC_ALRMBR_HU_Pos)       /*!< 0x00080000 */

+#define RTC_ALRMBR_MSK2_Pos                  (15U)                             

+#define RTC_ALRMBR_MSK2_Msk                  (0x1UL << RTC_ALRMBR_MSK2_Pos)     /*!< 0x00008000 */

+#define RTC_ALRMBR_MSK2                      RTC_ALRMBR_MSK2_Msk               

+#define RTC_ALRMBR_MNT_Pos                   (12U)                             

+#define RTC_ALRMBR_MNT_Msk                   (0x7UL << RTC_ALRMBR_MNT_Pos)      /*!< 0x00007000 */

+#define RTC_ALRMBR_MNT                       RTC_ALRMBR_MNT_Msk                

+#define RTC_ALRMBR_MNT_0                     (0x1UL << RTC_ALRMBR_MNT_Pos)      /*!< 0x00001000 */

+#define RTC_ALRMBR_MNT_1                     (0x2UL << RTC_ALRMBR_MNT_Pos)      /*!< 0x00002000 */

+#define RTC_ALRMBR_MNT_2                     (0x4UL << RTC_ALRMBR_MNT_Pos)      /*!< 0x00004000 */

+#define RTC_ALRMBR_MNU_Pos                   (8U)                              

+#define RTC_ALRMBR_MNU_Msk                   (0xFUL << RTC_ALRMBR_MNU_Pos)      /*!< 0x00000F00 */

+#define RTC_ALRMBR_MNU                       RTC_ALRMBR_MNU_Msk                

+#define RTC_ALRMBR_MNU_0                     (0x1UL << RTC_ALRMBR_MNU_Pos)      /*!< 0x00000100 */

+#define RTC_ALRMBR_MNU_1                     (0x2UL << RTC_ALRMBR_MNU_Pos)      /*!< 0x00000200 */

+#define RTC_ALRMBR_MNU_2                     (0x4UL << RTC_ALRMBR_MNU_Pos)      /*!< 0x00000400 */

+#define RTC_ALRMBR_MNU_3                     (0x8UL << RTC_ALRMBR_MNU_Pos)      /*!< 0x00000800 */

+#define RTC_ALRMBR_MSK1_Pos                  (7U)                              

+#define RTC_ALRMBR_MSK1_Msk                  (0x1UL << RTC_ALRMBR_MSK1_Pos)     /*!< 0x00000080 */

+#define RTC_ALRMBR_MSK1                      RTC_ALRMBR_MSK1_Msk               

+#define RTC_ALRMBR_ST_Pos                    (4U)                              

+#define RTC_ALRMBR_ST_Msk                    (0x7UL << RTC_ALRMBR_ST_Pos)       /*!< 0x00000070 */

+#define RTC_ALRMBR_ST                        RTC_ALRMBR_ST_Msk                 

+#define RTC_ALRMBR_ST_0                      (0x1UL << RTC_ALRMBR_ST_Pos)       /*!< 0x00000010 */

+#define RTC_ALRMBR_ST_1                      (0x2UL << RTC_ALRMBR_ST_Pos)       /*!< 0x00000020 */

+#define RTC_ALRMBR_ST_2                      (0x4UL << RTC_ALRMBR_ST_Pos)       /*!< 0x00000040 */

+#define RTC_ALRMBR_SU_Pos                    (0U)                              

+#define RTC_ALRMBR_SU_Msk                    (0xFUL << RTC_ALRMBR_SU_Pos)       /*!< 0x0000000F */

+#define RTC_ALRMBR_SU                        RTC_ALRMBR_SU_Msk                 

+#define RTC_ALRMBR_SU_0                      (0x1UL << RTC_ALRMBR_SU_Pos)       /*!< 0x00000001 */

+#define RTC_ALRMBR_SU_1                      (0x2UL << RTC_ALRMBR_SU_Pos)       /*!< 0x00000002 */

+#define RTC_ALRMBR_SU_2                      (0x4UL << RTC_ALRMBR_SU_Pos)       /*!< 0x00000004 */

+#define RTC_ALRMBR_SU_3                      (0x8UL << RTC_ALRMBR_SU_Pos)       /*!< 0x00000008 */

+

+/********************  Bits definition for RTC_WPR register  ******************/

+#define RTC_WPR_KEY_Pos                      (0U)                              

+#define RTC_WPR_KEY_Msk                      (0xFFUL << RTC_WPR_KEY_Pos)        /*!< 0x000000FF */

+#define RTC_WPR_KEY                          RTC_WPR_KEY_Msk                   

+

+/********************  Bits definition for RTC_SSR register  ******************/

+#define RTC_SSR_SS_Pos                       (0U)                              

+#define RTC_SSR_SS_Msk                       (0xFFFFUL << RTC_SSR_SS_Pos)       /*!< 0x0000FFFF */

+#define RTC_SSR_SS                           RTC_SSR_SS_Msk                    

+

+/********************  Bits definition for RTC_SHIFTR register  ***************/

+#define RTC_SHIFTR_SUBFS_Pos                 (0U)                              

+#define RTC_SHIFTR_SUBFS_Msk                 (0x7FFFUL << RTC_SHIFTR_SUBFS_Pos) /*!< 0x00007FFF */

+#define RTC_SHIFTR_SUBFS                     RTC_SHIFTR_SUBFS_Msk              

+#define RTC_SHIFTR_ADD1S_Pos                 (31U)                             

+#define RTC_SHIFTR_ADD1S_Msk                 (0x1UL << RTC_SHIFTR_ADD1S_Pos)    /*!< 0x80000000 */

+#define RTC_SHIFTR_ADD1S                     RTC_SHIFTR_ADD1S_Msk              

+

+/********************  Bits definition for RTC_TSTR register  *****************/

+#define RTC_TSTR_PM_Pos                      (22U)                             

+#define RTC_TSTR_PM_Msk                      (0x1UL << RTC_TSTR_PM_Pos)         /*!< 0x00400000 */

+#define RTC_TSTR_PM                          RTC_TSTR_PM_Msk                   

+#define RTC_TSTR_HT_Pos                      (20U)                             

+#define RTC_TSTR_HT_Msk                      (0x3UL << RTC_TSTR_HT_Pos)         /*!< 0x00300000 */

+#define RTC_TSTR_HT                          RTC_TSTR_HT_Msk                   

+#define RTC_TSTR_HT_0                        (0x1UL << RTC_TSTR_HT_Pos)         /*!< 0x00100000 */

+#define RTC_TSTR_HT_1                        (0x2UL << RTC_TSTR_HT_Pos)         /*!< 0x00200000 */

+#define RTC_TSTR_HU_Pos                      (16U)                             

+#define RTC_TSTR_HU_Msk                      (0xFUL << RTC_TSTR_HU_Pos)         /*!< 0x000F0000 */

+#define RTC_TSTR_HU                          RTC_TSTR_HU_Msk                   

+#define RTC_TSTR_HU_0                        (0x1UL << RTC_TSTR_HU_Pos)         /*!< 0x00010000 */

+#define RTC_TSTR_HU_1                        (0x2UL << RTC_TSTR_HU_Pos)         /*!< 0x00020000 */

+#define RTC_TSTR_HU_2                        (0x4UL << RTC_TSTR_HU_Pos)         /*!< 0x00040000 */

+#define RTC_TSTR_HU_3                        (0x8UL << RTC_TSTR_HU_Pos)         /*!< 0x00080000 */

+#define RTC_TSTR_MNT_Pos                     (12U)                             

+#define RTC_TSTR_MNT_Msk                     (0x7UL << RTC_TSTR_MNT_Pos)        /*!< 0x00007000 */

+#define RTC_TSTR_MNT                         RTC_TSTR_MNT_Msk                  

+#define RTC_TSTR_MNT_0                       (0x1UL << RTC_TSTR_MNT_Pos)        /*!< 0x00001000 */

+#define RTC_TSTR_MNT_1                       (0x2UL << RTC_TSTR_MNT_Pos)        /*!< 0x00002000 */

+#define RTC_TSTR_MNT_2                       (0x4UL << RTC_TSTR_MNT_Pos)        /*!< 0x00004000 */

+#define RTC_TSTR_MNU_Pos                     (8U)                              

+#define RTC_TSTR_MNU_Msk                     (0xFUL << RTC_TSTR_MNU_Pos)        /*!< 0x00000F00 */

+#define RTC_TSTR_MNU                         RTC_TSTR_MNU_Msk                  

+#define RTC_TSTR_MNU_0                       (0x1UL << RTC_TSTR_MNU_Pos)        /*!< 0x00000100 */

+#define RTC_TSTR_MNU_1                       (0x2UL << RTC_TSTR_MNU_Pos)        /*!< 0x00000200 */

+#define RTC_TSTR_MNU_2                       (0x4UL << RTC_TSTR_MNU_Pos)        /*!< 0x00000400 */

+#define RTC_TSTR_MNU_3                       (0x8UL << RTC_TSTR_MNU_Pos)        /*!< 0x00000800 */

+#define RTC_TSTR_ST_Pos                      (4U)                              

+#define RTC_TSTR_ST_Msk                      (0x7UL << RTC_TSTR_ST_Pos)         /*!< 0x00000070 */

+#define RTC_TSTR_ST                          RTC_TSTR_ST_Msk                   

+#define RTC_TSTR_ST_0                        (0x1UL << RTC_TSTR_ST_Pos)         /*!< 0x00000010 */

+#define RTC_TSTR_ST_1                        (0x2UL << RTC_TSTR_ST_Pos)         /*!< 0x00000020 */

+#define RTC_TSTR_ST_2                        (0x4UL << RTC_TSTR_ST_Pos)         /*!< 0x00000040 */

+#define RTC_TSTR_SU_Pos                      (0U)                              

+#define RTC_TSTR_SU_Msk                      (0xFUL << RTC_TSTR_SU_Pos)         /*!< 0x0000000F */

+#define RTC_TSTR_SU                          RTC_TSTR_SU_Msk                   

+#define RTC_TSTR_SU_0                        (0x1UL << RTC_TSTR_SU_Pos)         /*!< 0x00000001 */

+#define RTC_TSTR_SU_1                        (0x2UL << RTC_TSTR_SU_Pos)         /*!< 0x00000002 */

+#define RTC_TSTR_SU_2                        (0x4UL << RTC_TSTR_SU_Pos)         /*!< 0x00000004 */

+#define RTC_TSTR_SU_3                        (0x8UL << RTC_TSTR_SU_Pos)         /*!< 0x00000008 */

+

+/********************  Bits definition for RTC_TSDR register  *****************/

+#define RTC_TSDR_WDU_Pos                     (13U)                             

+#define RTC_TSDR_WDU_Msk                     (0x7UL << RTC_TSDR_WDU_Pos)        /*!< 0x0000E000 */

+#define RTC_TSDR_WDU                         RTC_TSDR_WDU_Msk                  

+#define RTC_TSDR_WDU_0                       (0x1UL << RTC_TSDR_WDU_Pos)        /*!< 0x00002000 */

+#define RTC_TSDR_WDU_1                       (0x2UL << RTC_TSDR_WDU_Pos)        /*!< 0x00004000 */

+#define RTC_TSDR_WDU_2                       (0x4UL << RTC_TSDR_WDU_Pos)        /*!< 0x00008000 */

+#define RTC_TSDR_MT_Pos                      (12U)                             

+#define RTC_TSDR_MT_Msk                      (0x1UL << RTC_TSDR_MT_Pos)         /*!< 0x00001000 */

+#define RTC_TSDR_MT                          RTC_TSDR_MT_Msk                   

+#define RTC_TSDR_MU_Pos                      (8U)                              

+#define RTC_TSDR_MU_Msk                      (0xFUL << RTC_TSDR_MU_Pos)         /*!< 0x00000F00 */

+#define RTC_TSDR_MU                          RTC_TSDR_MU_Msk                   

+#define RTC_TSDR_MU_0                        (0x1UL << RTC_TSDR_MU_Pos)         /*!< 0x00000100 */

+#define RTC_TSDR_MU_1                        (0x2UL << RTC_TSDR_MU_Pos)         /*!< 0x00000200 */

+#define RTC_TSDR_MU_2                        (0x4UL << RTC_TSDR_MU_Pos)         /*!< 0x00000400 */

+#define RTC_TSDR_MU_3                        (0x8UL << RTC_TSDR_MU_Pos)         /*!< 0x00000800 */

+#define RTC_TSDR_DT_Pos                      (4U)                              

+#define RTC_TSDR_DT_Msk                      (0x3UL << RTC_TSDR_DT_Pos)         /*!< 0x00000030 */

+#define RTC_TSDR_DT                          RTC_TSDR_DT_Msk                   

+#define RTC_TSDR_DT_0                        (0x1UL << RTC_TSDR_DT_Pos)         /*!< 0x00000010 */

+#define RTC_TSDR_DT_1                        (0x2UL << RTC_TSDR_DT_Pos)         /*!< 0x00000020 */

+#define RTC_TSDR_DU_Pos                      (0U)                              

+#define RTC_TSDR_DU_Msk                      (0xFUL << RTC_TSDR_DU_Pos)         /*!< 0x0000000F */

+#define RTC_TSDR_DU                          RTC_TSDR_DU_Msk                   

+#define RTC_TSDR_DU_0                        (0x1UL << RTC_TSDR_DU_Pos)         /*!< 0x00000001 */

+#define RTC_TSDR_DU_1                        (0x2UL << RTC_TSDR_DU_Pos)         /*!< 0x00000002 */

+#define RTC_TSDR_DU_2                        (0x4UL << RTC_TSDR_DU_Pos)         /*!< 0x00000004 */

+#define RTC_TSDR_DU_3                        (0x8UL << RTC_TSDR_DU_Pos)         /*!< 0x00000008 */

+

+/********************  Bits definition for RTC_TSSSR register  ****************/

+#define RTC_TSSSR_SS_Pos                     (0U)                              

+#define RTC_TSSSR_SS_Msk                     (0xFFFFUL << RTC_TSSSR_SS_Pos)     /*!< 0x0000FFFF */

+#define RTC_TSSSR_SS                         RTC_TSSSR_SS_Msk                  

+

+/********************  Bits definition for RTC_CAL register  *****************/

+#define RTC_CALR_CALP_Pos                    (15U)                             

+#define RTC_CALR_CALP_Msk                    (0x1UL << RTC_CALR_CALP_Pos)       /*!< 0x00008000 */

+#define RTC_CALR_CALP                        RTC_CALR_CALP_Msk                 

+#define RTC_CALR_CALW8_Pos                   (14U)                             

+#define RTC_CALR_CALW8_Msk                   (0x1UL << RTC_CALR_CALW8_Pos)      /*!< 0x00004000 */

+#define RTC_CALR_CALW8                       RTC_CALR_CALW8_Msk                

+#define RTC_CALR_CALW16_Pos                  (13U)                             

+#define RTC_CALR_CALW16_Msk                  (0x1UL << RTC_CALR_CALW16_Pos)     /*!< 0x00002000 */

+#define RTC_CALR_CALW16                      RTC_CALR_CALW16_Msk               

+#define RTC_CALR_CALM_Pos                    (0U)                              

+#define RTC_CALR_CALM_Msk                    (0x1FFUL << RTC_CALR_CALM_Pos)     /*!< 0x000001FF */

+#define RTC_CALR_CALM                        RTC_CALR_CALM_Msk                 

+#define RTC_CALR_CALM_0                      (0x001UL << RTC_CALR_CALM_Pos)     /*!< 0x00000001 */

+#define RTC_CALR_CALM_1                      (0x002UL << RTC_CALR_CALM_Pos)     /*!< 0x00000002 */

+#define RTC_CALR_CALM_2                      (0x004UL << RTC_CALR_CALM_Pos)     /*!< 0x00000004 */

+#define RTC_CALR_CALM_3                      (0x008UL << RTC_CALR_CALM_Pos)     /*!< 0x00000008 */

+#define RTC_CALR_CALM_4                      (0x010UL << RTC_CALR_CALM_Pos)     /*!< 0x00000010 */

+#define RTC_CALR_CALM_5                      (0x020UL << RTC_CALR_CALM_Pos)     /*!< 0x00000020 */

+#define RTC_CALR_CALM_6                      (0x040UL << RTC_CALR_CALM_Pos)     /*!< 0x00000040 */

+#define RTC_CALR_CALM_7                      (0x080UL << RTC_CALR_CALM_Pos)     /*!< 0x00000080 */

+#define RTC_CALR_CALM_8                      (0x100UL << RTC_CALR_CALM_Pos)     /*!< 0x00000100 */

+

+/********************  Bits definition for RTC_TAFCR register  ****************/

+#define RTC_TAFCR_ALARMOUTTYPE_Pos           (18U)                             

+#define RTC_TAFCR_ALARMOUTTYPE_Msk           (0x1UL << RTC_TAFCR_ALARMOUTTYPE_Pos) /*!< 0x00040000 */

+#define RTC_TAFCR_ALARMOUTTYPE               RTC_TAFCR_ALARMOUTTYPE_Msk        

+#define RTC_TAFCR_TAMPPUDIS_Pos              (15U)                             

+#define RTC_TAFCR_TAMPPUDIS_Msk              (0x1UL << RTC_TAFCR_TAMPPUDIS_Pos) /*!< 0x00008000 */

+#define RTC_TAFCR_TAMPPUDIS                  RTC_TAFCR_TAMPPUDIS_Msk           

+#define RTC_TAFCR_TAMPPRCH_Pos               (13U)                             

+#define RTC_TAFCR_TAMPPRCH_Msk               (0x3UL << RTC_TAFCR_TAMPPRCH_Pos)  /*!< 0x00006000 */

+#define RTC_TAFCR_TAMPPRCH                   RTC_TAFCR_TAMPPRCH_Msk            

+#define RTC_TAFCR_TAMPPRCH_0                 (0x1UL << RTC_TAFCR_TAMPPRCH_Pos)  /*!< 0x00002000 */

+#define RTC_TAFCR_TAMPPRCH_1                 (0x2UL << RTC_TAFCR_TAMPPRCH_Pos)  /*!< 0x00004000 */

+#define RTC_TAFCR_TAMPFLT_Pos                (11U)                             

+#define RTC_TAFCR_TAMPFLT_Msk                (0x3UL << RTC_TAFCR_TAMPFLT_Pos)   /*!< 0x00001800 */

+#define RTC_TAFCR_TAMPFLT                    RTC_TAFCR_TAMPFLT_Msk             

+#define RTC_TAFCR_TAMPFLT_0                  (0x1UL << RTC_TAFCR_TAMPFLT_Pos)   /*!< 0x00000800 */

+#define RTC_TAFCR_TAMPFLT_1                  (0x2UL << RTC_TAFCR_TAMPFLT_Pos)   /*!< 0x00001000 */

+#define RTC_TAFCR_TAMPFREQ_Pos               (8U)                              

+#define RTC_TAFCR_TAMPFREQ_Msk               (0x7UL << RTC_TAFCR_TAMPFREQ_Pos)  /*!< 0x00000700 */

+#define RTC_TAFCR_TAMPFREQ                   RTC_TAFCR_TAMPFREQ_Msk            

+#define RTC_TAFCR_TAMPFREQ_0                 (0x1UL << RTC_TAFCR_TAMPFREQ_Pos)  /*!< 0x00000100 */

+#define RTC_TAFCR_TAMPFREQ_1                 (0x2UL << RTC_TAFCR_TAMPFREQ_Pos)  /*!< 0x00000200 */

+#define RTC_TAFCR_TAMPFREQ_2                 (0x4UL << RTC_TAFCR_TAMPFREQ_Pos)  /*!< 0x00000400 */

+#define RTC_TAFCR_TAMPTS_Pos                 (7U)                              

+#define RTC_TAFCR_TAMPTS_Msk                 (0x1UL << RTC_TAFCR_TAMPTS_Pos)    /*!< 0x00000080 */

+#define RTC_TAFCR_TAMPTS                     RTC_TAFCR_TAMPTS_Msk              

+#define RTC_TAFCR_TAMP3TRG_Pos               (6U)                              

+#define RTC_TAFCR_TAMP3TRG_Msk               (0x1UL << RTC_TAFCR_TAMP3TRG_Pos)  /*!< 0x00000040 */

+#define RTC_TAFCR_TAMP3TRG                   RTC_TAFCR_TAMP3TRG_Msk            

+#define RTC_TAFCR_TAMP3E_Pos                 (5U)                              

+#define RTC_TAFCR_TAMP3E_Msk                 (0x1UL << RTC_TAFCR_TAMP3E_Pos)    /*!< 0x00000020 */

+#define RTC_TAFCR_TAMP3E                     RTC_TAFCR_TAMP3E_Msk              

+#define RTC_TAFCR_TAMP2TRG_Pos               (4U)                              

+#define RTC_TAFCR_TAMP2TRG_Msk               (0x1UL << RTC_TAFCR_TAMP2TRG_Pos)  /*!< 0x00000010 */

+#define RTC_TAFCR_TAMP2TRG                   RTC_TAFCR_TAMP2TRG_Msk            

+#define RTC_TAFCR_TAMP2E_Pos                 (3U)                              

+#define RTC_TAFCR_TAMP2E_Msk                 (0x1UL << RTC_TAFCR_TAMP2E_Pos)    /*!< 0x00000008 */

+#define RTC_TAFCR_TAMP2E                     RTC_TAFCR_TAMP2E_Msk              

+#define RTC_TAFCR_TAMPIE_Pos                 (2U)                              

+#define RTC_TAFCR_TAMPIE_Msk                 (0x1UL << RTC_TAFCR_TAMPIE_Pos)    /*!< 0x00000004 */

+#define RTC_TAFCR_TAMPIE                     RTC_TAFCR_TAMPIE_Msk              

+#define RTC_TAFCR_TAMP1TRG_Pos               (1U)                              

+#define RTC_TAFCR_TAMP1TRG_Msk               (0x1UL << RTC_TAFCR_TAMP1TRG_Pos)  /*!< 0x00000002 */

+#define RTC_TAFCR_TAMP1TRG                   RTC_TAFCR_TAMP1TRG_Msk            

+#define RTC_TAFCR_TAMP1E_Pos                 (0U)                              

+#define RTC_TAFCR_TAMP1E_Msk                 (0x1UL << RTC_TAFCR_TAMP1E_Pos)    /*!< 0x00000001 */

+#define RTC_TAFCR_TAMP1E                     RTC_TAFCR_TAMP1E_Msk              

+

+/********************  Bits definition for RTC_ALRMASSR register  *************/

+#define RTC_ALRMASSR_MASKSS_Pos              (24U)                             

+#define RTC_ALRMASSR_MASKSS_Msk              (0xFUL << RTC_ALRMASSR_MASKSS_Pos) /*!< 0x0F000000 */

+#define RTC_ALRMASSR_MASKSS                  RTC_ALRMASSR_MASKSS_Msk           

+#define RTC_ALRMASSR_MASKSS_0                (0x1UL << RTC_ALRMASSR_MASKSS_Pos) /*!< 0x01000000 */

+#define RTC_ALRMASSR_MASKSS_1                (0x2UL << RTC_ALRMASSR_MASKSS_Pos) /*!< 0x02000000 */

+#define RTC_ALRMASSR_MASKSS_2                (0x4UL << RTC_ALRMASSR_MASKSS_Pos) /*!< 0x04000000 */

+#define RTC_ALRMASSR_MASKSS_3                (0x8UL << RTC_ALRMASSR_MASKSS_Pos) /*!< 0x08000000 */

+#define RTC_ALRMASSR_SS_Pos                  (0U)                              

+#define RTC_ALRMASSR_SS_Msk                  (0x7FFFUL << RTC_ALRMASSR_SS_Pos)  /*!< 0x00007FFF */

+#define RTC_ALRMASSR_SS                      RTC_ALRMASSR_SS_Msk               

+

+/********************  Bits definition for RTC_ALRMBSSR register  *************/

+#define RTC_ALRMBSSR_MASKSS_Pos              (24U)                             

+#define RTC_ALRMBSSR_MASKSS_Msk              (0xFUL << RTC_ALRMBSSR_MASKSS_Pos) /*!< 0x0F000000 */

+#define RTC_ALRMBSSR_MASKSS                  RTC_ALRMBSSR_MASKSS_Msk           

+#define RTC_ALRMBSSR_MASKSS_0                (0x1UL << RTC_ALRMBSSR_MASKSS_Pos) /*!< 0x01000000 */

+#define RTC_ALRMBSSR_MASKSS_1                (0x2UL << RTC_ALRMBSSR_MASKSS_Pos) /*!< 0x02000000 */

+#define RTC_ALRMBSSR_MASKSS_2                (0x4UL << RTC_ALRMBSSR_MASKSS_Pos) /*!< 0x04000000 */

+#define RTC_ALRMBSSR_MASKSS_3                (0x8UL << RTC_ALRMBSSR_MASKSS_Pos) /*!< 0x08000000 */

+#define RTC_ALRMBSSR_SS_Pos                  (0U)                              

+#define RTC_ALRMBSSR_SS_Msk                  (0x7FFFUL << RTC_ALRMBSSR_SS_Pos)  /*!< 0x00007FFF */

+#define RTC_ALRMBSSR_SS                      RTC_ALRMBSSR_SS_Msk               

+

+/********************  Bits definition for RTC_BKP0R register  ****************/

+#define RTC_BKP0R_Pos                        (0U)                              

+#define RTC_BKP0R_Msk                        (0xFFFFFFFFUL << RTC_BKP0R_Pos)    /*!< 0xFFFFFFFF */

+#define RTC_BKP0R                            RTC_BKP0R_Msk                     

+

+/********************  Bits definition for RTC_BKP1R register  ****************/

+#define RTC_BKP1R_Pos                        (0U)                              

+#define RTC_BKP1R_Msk                        (0xFFFFFFFFUL << RTC_BKP1R_Pos)    /*!< 0xFFFFFFFF */

+#define RTC_BKP1R                            RTC_BKP1R_Msk                     

+

+/********************  Bits definition for RTC_BKP2R register  ****************/

+#define RTC_BKP2R_Pos                        (0U)                              

+#define RTC_BKP2R_Msk                        (0xFFFFFFFFUL << RTC_BKP2R_Pos)    /*!< 0xFFFFFFFF */

+#define RTC_BKP2R                            RTC_BKP2R_Msk                     

+

+/********************  Bits definition for RTC_BKP3R register  ****************/

+#define RTC_BKP3R_Pos                        (0U)                              

+#define RTC_BKP3R_Msk                        (0xFFFFFFFFUL << RTC_BKP3R_Pos)    /*!< 0xFFFFFFFF */

+#define RTC_BKP3R                            RTC_BKP3R_Msk                     

+

+/********************  Bits definition for RTC_BKP4R register  ****************/

+#define RTC_BKP4R_Pos                        (0U)                              

+#define RTC_BKP4R_Msk                        (0xFFFFFFFFUL << RTC_BKP4R_Pos)    /*!< 0xFFFFFFFF */

+#define RTC_BKP4R                            RTC_BKP4R_Msk                     

+

+/********************  Bits definition for RTC_BKP5R register  ****************/

+#define RTC_BKP5R_Pos                        (0U)                              

+#define RTC_BKP5R_Msk                        (0xFFFFFFFFUL << RTC_BKP5R_Pos)    /*!< 0xFFFFFFFF */

+#define RTC_BKP5R                            RTC_BKP5R_Msk                     

+

+/********************  Bits definition for RTC_BKP6R register  ****************/

+#define RTC_BKP6R_Pos                        (0U)                              

+#define RTC_BKP6R_Msk                        (0xFFFFFFFFUL << RTC_BKP6R_Pos)    /*!< 0xFFFFFFFF */

+#define RTC_BKP6R                            RTC_BKP6R_Msk                     

+

+/********************  Bits definition for RTC_BKP7R register  ****************/

+#define RTC_BKP7R_Pos                        (0U)                              

+#define RTC_BKP7R_Msk                        (0xFFFFFFFFUL << RTC_BKP7R_Pos)    /*!< 0xFFFFFFFF */

+#define RTC_BKP7R                            RTC_BKP7R_Msk                     

+

+/********************  Bits definition for RTC_BKP8R register  ****************/

+#define RTC_BKP8R_Pos                        (0U)                              

+#define RTC_BKP8R_Msk                        (0xFFFFFFFFUL << RTC_BKP8R_Pos)    /*!< 0xFFFFFFFF */

+#define RTC_BKP8R                            RTC_BKP8R_Msk                     

+

+/********************  Bits definition for RTC_BKP9R register  ****************/

+#define RTC_BKP9R_Pos                        (0U)                              

+#define RTC_BKP9R_Msk                        (0xFFFFFFFFUL << RTC_BKP9R_Pos)    /*!< 0xFFFFFFFF */

+#define RTC_BKP9R                            RTC_BKP9R_Msk                     

+

+/********************  Bits definition for RTC_BKP10R register  ***************/

+#define RTC_BKP10R_Pos                       (0U)                              

+#define RTC_BKP10R_Msk                       (0xFFFFFFFFUL << RTC_BKP10R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP10R                           RTC_BKP10R_Msk                    

+

+/********************  Bits definition for RTC_BKP11R register  ***************/

+#define RTC_BKP11R_Pos                       (0U)                              

+#define RTC_BKP11R_Msk                       (0xFFFFFFFFUL << RTC_BKP11R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP11R                           RTC_BKP11R_Msk                    

+

+/********************  Bits definition for RTC_BKP12R register  ***************/

+#define RTC_BKP12R_Pos                       (0U)                              

+#define RTC_BKP12R_Msk                       (0xFFFFFFFFUL << RTC_BKP12R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP12R                           RTC_BKP12R_Msk                    

+

+/********************  Bits definition for RTC_BKP13R register  ***************/

+#define RTC_BKP13R_Pos                       (0U)                              

+#define RTC_BKP13R_Msk                       (0xFFFFFFFFUL << RTC_BKP13R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP13R                           RTC_BKP13R_Msk                    

+

+/********************  Bits definition for RTC_BKP14R register  ***************/

+#define RTC_BKP14R_Pos                       (0U)                              

+#define RTC_BKP14R_Msk                       (0xFFFFFFFFUL << RTC_BKP14R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP14R                           RTC_BKP14R_Msk                    

+

+/********************  Bits definition for RTC_BKP15R register  ***************/

+#define RTC_BKP15R_Pos                       (0U)                              

+#define RTC_BKP15R_Msk                       (0xFFFFFFFFUL << RTC_BKP15R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP15R                           RTC_BKP15R_Msk                    

+

+/********************  Bits definition for RTC_BKP16R register  ***************/

+#define RTC_BKP16R_Pos                       (0U)                              

+#define RTC_BKP16R_Msk                       (0xFFFFFFFFUL << RTC_BKP16R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP16R                           RTC_BKP16R_Msk                    

+

+/********************  Bits definition for RTC_BKP17R register  ***************/

+#define RTC_BKP17R_Pos                       (0U)                              

+#define RTC_BKP17R_Msk                       (0xFFFFFFFFUL << RTC_BKP17R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP17R                           RTC_BKP17R_Msk                    

+

+/********************  Bits definition for RTC_BKP18R register  ***************/

+#define RTC_BKP18R_Pos                       (0U)                              

+#define RTC_BKP18R_Msk                       (0xFFFFFFFFUL << RTC_BKP18R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP18R                           RTC_BKP18R_Msk                    

+

+/********************  Bits definition for RTC_BKP19R register  ***************/

+#define RTC_BKP19R_Pos                       (0U)                              

+#define RTC_BKP19R_Msk                       (0xFFFFFFFFUL << RTC_BKP19R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP19R                           RTC_BKP19R_Msk                    

+

+/********************  Bits definition for RTC_BKP20R register  ***************/

+#define RTC_BKP20R_Pos                       (0U)                              

+#define RTC_BKP20R_Msk                       (0xFFFFFFFFUL << RTC_BKP20R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP20R                           RTC_BKP20R_Msk                    

+

+/********************  Bits definition for RTC_BKP21R register  ***************/

+#define RTC_BKP21R_Pos                       (0U)                              

+#define RTC_BKP21R_Msk                       (0xFFFFFFFFUL << RTC_BKP21R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP21R                           RTC_BKP21R_Msk                    

+

+/********************  Bits definition for RTC_BKP22R register  ***************/

+#define RTC_BKP22R_Pos                       (0U)                              

+#define RTC_BKP22R_Msk                       (0xFFFFFFFFUL << RTC_BKP22R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP22R                           RTC_BKP22R_Msk                    

+

+/********************  Bits definition for RTC_BKP23R register  ***************/

+#define RTC_BKP23R_Pos                       (0U)                              

+#define RTC_BKP23R_Msk                       (0xFFFFFFFFUL << RTC_BKP23R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP23R                           RTC_BKP23R_Msk                    

+

+/********************  Bits definition for RTC_BKP24R register  ***************/

+#define RTC_BKP24R_Pos                       (0U)                              

+#define RTC_BKP24R_Msk                       (0xFFFFFFFFUL << RTC_BKP24R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP24R                           RTC_BKP24R_Msk                    

+

+/********************  Bits definition for RTC_BKP25R register  ***************/

+#define RTC_BKP25R_Pos                       (0U)                              

+#define RTC_BKP25R_Msk                       (0xFFFFFFFFUL << RTC_BKP25R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP25R                           RTC_BKP25R_Msk                    

+

+/********************  Bits definition for RTC_BKP26R register  ***************/

+#define RTC_BKP26R_Pos                       (0U)                              

+#define RTC_BKP26R_Msk                       (0xFFFFFFFFUL << RTC_BKP26R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP26R                           RTC_BKP26R_Msk                    

+

+/********************  Bits definition for RTC_BKP27R register  ***************/

+#define RTC_BKP27R_Pos                       (0U)                              

+#define RTC_BKP27R_Msk                       (0xFFFFFFFFUL << RTC_BKP27R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP27R                           RTC_BKP27R_Msk                    

+

+/********************  Bits definition for RTC_BKP28R register  ***************/

+#define RTC_BKP28R_Pos                       (0U)                              

+#define RTC_BKP28R_Msk                       (0xFFFFFFFFUL << RTC_BKP28R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP28R                           RTC_BKP28R_Msk                    

+

+/********************  Bits definition for RTC_BKP29R register  ***************/

+#define RTC_BKP29R_Pos                       (0U)                              

+#define RTC_BKP29R_Msk                       (0xFFFFFFFFUL << RTC_BKP29R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP29R                           RTC_BKP29R_Msk                    

+

+/********************  Bits definition for RTC_BKP30R register  ***************/

+#define RTC_BKP30R_Pos                       (0U)                              

+#define RTC_BKP30R_Msk                       (0xFFFFFFFFUL << RTC_BKP30R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP30R                           RTC_BKP30R_Msk                    

+

+/********************  Bits definition for RTC_BKP31R register  ***************/

+#define RTC_BKP31R_Pos                       (0U)                              

+#define RTC_BKP31R_Msk                       (0xFFFFFFFFUL << RTC_BKP31R_Pos)   /*!< 0xFFFFFFFF */

+#define RTC_BKP31R                           RTC_BKP31R_Msk                    

+

+/******************** Number of backup registers ******************************/

+#define RTC_BKP_NUMBER 32

+

+/******************************************************************************/

+/*                                                                            */

+/*                     Serial Peripheral Interface (SPI)                      */

+/*                                                                            */

+/******************************************************************************/

+

+/*

+ * @brief Specific device feature definitions (not present on all devices in the STM32F3 serie)

+ */

+#define SPI_I2S_SUPPORT    

+

+/*******************  Bit definition for SPI_CR1 register  ********************/

+#define SPI_CR1_CPHA_Pos                    (0U)                               

+#define SPI_CR1_CPHA_Msk                    (0x1UL << SPI_CR1_CPHA_Pos)         /*!< 0x00000001 */

+#define SPI_CR1_CPHA                        SPI_CR1_CPHA_Msk                   /*!< Clock Phase */

+#define SPI_CR1_CPOL_Pos                    (1U)                               

+#define SPI_CR1_CPOL_Msk                    (0x1UL << SPI_CR1_CPOL_Pos)         /*!< 0x00000002 */

+#define SPI_CR1_CPOL                        SPI_CR1_CPOL_Msk                   /*!< Clock Polarity */

+#define SPI_CR1_MSTR_Pos                    (2U)                               

+#define SPI_CR1_MSTR_Msk                    (0x1UL << SPI_CR1_MSTR_Pos)         /*!< 0x00000004 */

+#define SPI_CR1_MSTR                        SPI_CR1_MSTR_Msk                   /*!< Master Selection */

+

+#define SPI_CR1_BR_Pos                      (3U)                               

+#define SPI_CR1_BR_Msk                      (0x7UL << SPI_CR1_BR_Pos)           /*!< 0x00000038 */

+#define SPI_CR1_BR                          SPI_CR1_BR_Msk                     /*!< BR[2:0] bits (Baud Rate Control) */

+#define SPI_CR1_BR_0                        (0x1UL << SPI_CR1_BR_Pos)           /*!< 0x00000008 */

+#define SPI_CR1_BR_1                        (0x2UL << SPI_CR1_BR_Pos)           /*!< 0x00000010 */

+#define SPI_CR1_BR_2                        (0x4UL << SPI_CR1_BR_Pos)           /*!< 0x00000020 */

+

+#define SPI_CR1_SPE_Pos                     (6U)                               

+#define SPI_CR1_SPE_Msk                     (0x1UL << SPI_CR1_SPE_Pos)          /*!< 0x00000040 */

+#define SPI_CR1_SPE                         SPI_CR1_SPE_Msk                    /*!< SPI Enable */

+#define SPI_CR1_LSBFIRST_Pos                (7U)                               

+#define SPI_CR1_LSBFIRST_Msk                (0x1UL << SPI_CR1_LSBFIRST_Pos)     /*!< 0x00000080 */

+#define SPI_CR1_LSBFIRST                    SPI_CR1_LSBFIRST_Msk               /*!< Frame Format */

+#define SPI_CR1_SSI_Pos                     (8U)                               

+#define SPI_CR1_SSI_Msk                     (0x1UL << SPI_CR1_SSI_Pos)          /*!< 0x00000100 */

+#define SPI_CR1_SSI                         SPI_CR1_SSI_Msk                    /*!< Internal slave select */

+#define SPI_CR1_SSM_Pos                     (9U)                               

+#define SPI_CR1_SSM_Msk                     (0x1UL << SPI_CR1_SSM_Pos)          /*!< 0x00000200 */

+#define SPI_CR1_SSM                         SPI_CR1_SSM_Msk                    /*!< Software slave management */

+#define SPI_CR1_RXONLY_Pos                  (10U)                              

+#define SPI_CR1_RXONLY_Msk                  (0x1UL << SPI_CR1_RXONLY_Pos)       /*!< 0x00000400 */

+#define SPI_CR1_RXONLY                      SPI_CR1_RXONLY_Msk                 /*!< Receive only */

+#define SPI_CR1_DFF_Pos                     (11U)                              

+#define SPI_CR1_DFF_Msk                     (0x1UL << SPI_CR1_DFF_Pos)          /*!< 0x00000800 */

+#define SPI_CR1_DFF                         SPI_CR1_DFF_Msk                    /*!< Data Frame Format */

+#define SPI_CR1_CRCNEXT_Pos                 (12U)                              

+#define SPI_CR1_CRCNEXT_Msk                 (0x1UL << SPI_CR1_CRCNEXT_Pos)      /*!< 0x00001000 */

+#define SPI_CR1_CRCNEXT                     SPI_CR1_CRCNEXT_Msk                /*!< Transmit CRC next */

+#define SPI_CR1_CRCEN_Pos                   (13U)                              

+#define SPI_CR1_CRCEN_Msk                   (0x1UL << SPI_CR1_CRCEN_Pos)        /*!< 0x00002000 */

+#define SPI_CR1_CRCEN                       SPI_CR1_CRCEN_Msk                  /*!< Hardware CRC calculation enable */

+#define SPI_CR1_BIDIOE_Pos                  (14U)                              

+#define SPI_CR1_BIDIOE_Msk                  (0x1UL << SPI_CR1_BIDIOE_Pos)       /*!< 0x00004000 */

+#define SPI_CR1_BIDIOE                      SPI_CR1_BIDIOE_Msk                 /*!< Output enable in bidirectional mode */

+#define SPI_CR1_BIDIMODE_Pos                (15U)                              

+#define SPI_CR1_BIDIMODE_Msk                (0x1UL << SPI_CR1_BIDIMODE_Pos)     /*!< 0x00008000 */

+#define SPI_CR1_BIDIMODE                    SPI_CR1_BIDIMODE_Msk               /*!< Bidirectional data mode enable */

+

+/*******************  Bit definition for SPI_CR2 register  ********************/

+#define SPI_CR2_RXDMAEN_Pos                 (0U)                               

+#define SPI_CR2_RXDMAEN_Msk                 (0x1UL << SPI_CR2_RXDMAEN_Pos)      /*!< 0x00000001 */

+#define SPI_CR2_RXDMAEN                     SPI_CR2_RXDMAEN_Msk                /*!< Rx Buffer DMA Enable */

+#define SPI_CR2_TXDMAEN_Pos                 (1U)                               

+#define SPI_CR2_TXDMAEN_Msk                 (0x1UL << SPI_CR2_TXDMAEN_Pos)      /*!< 0x00000002 */

+#define SPI_CR2_TXDMAEN                     SPI_CR2_TXDMAEN_Msk                /*!< Tx Buffer DMA Enable */

+#define SPI_CR2_SSOE_Pos                    (2U)                               

+#define SPI_CR2_SSOE_Msk                    (0x1UL << SPI_CR2_SSOE_Pos)         /*!< 0x00000004 */

+#define SPI_CR2_SSOE                        SPI_CR2_SSOE_Msk                   /*!< SS Output Enable */

+#define SPI_CR2_FRF_Pos                     (4U)                               

+#define SPI_CR2_FRF_Msk                     (0x1UL << SPI_CR2_FRF_Pos)          /*!< 0x00000010 */

+#define SPI_CR2_FRF                         SPI_CR2_FRF_Msk                    /*!< Frame format */

+#define SPI_CR2_ERRIE_Pos                   (5U)                               

+#define SPI_CR2_ERRIE_Msk                   (0x1UL << SPI_CR2_ERRIE_Pos)        /*!< 0x00000020 */

+#define SPI_CR2_ERRIE                       SPI_CR2_ERRIE_Msk                  /*!< Error Interrupt Enable */

+#define SPI_CR2_RXNEIE_Pos                  (6U)                               

+#define SPI_CR2_RXNEIE_Msk                  (0x1UL << SPI_CR2_RXNEIE_Pos)       /*!< 0x00000040 */

+#define SPI_CR2_RXNEIE                      SPI_CR2_RXNEIE_Msk                 /*!< RX buffer Not Empty Interrupt Enable */

+#define SPI_CR2_TXEIE_Pos                   (7U)                               

+#define SPI_CR2_TXEIE_Msk                   (0x1UL << SPI_CR2_TXEIE_Pos)        /*!< 0x00000080 */

+#define SPI_CR2_TXEIE                       SPI_CR2_TXEIE_Msk                  /*!< Tx buffer Empty Interrupt Enable */

+

+/********************  Bit definition for SPI_SR register  ********************/

+#define SPI_SR_RXNE_Pos                     (0U)                               

+#define SPI_SR_RXNE_Msk                     (0x1UL << SPI_SR_RXNE_Pos)          /*!< 0x00000001 */

+#define SPI_SR_RXNE                         SPI_SR_RXNE_Msk                    /*!< Receive buffer Not Empty */

+#define SPI_SR_TXE_Pos                      (1U)                               

+#define SPI_SR_TXE_Msk                      (0x1UL << SPI_SR_TXE_Pos)           /*!< 0x00000002 */

+#define SPI_SR_TXE                          SPI_SR_TXE_Msk                     /*!< Transmit buffer Empty */

+#define SPI_SR_CHSIDE_Pos                   (2U)                               

+#define SPI_SR_CHSIDE_Msk                   (0x1UL << SPI_SR_CHSIDE_Pos)        /*!< 0x00000004 */

+#define SPI_SR_CHSIDE                       SPI_SR_CHSIDE_Msk                  /*!< Channel side */

+#define SPI_SR_UDR_Pos                      (3U)                               

+#define SPI_SR_UDR_Msk                      (0x1UL << SPI_SR_UDR_Pos)           /*!< 0x00000008 */

+#define SPI_SR_UDR                          SPI_SR_UDR_Msk                     /*!< Underrun flag */

+#define SPI_SR_CRCERR_Pos                   (4U)                               

+#define SPI_SR_CRCERR_Msk                   (0x1UL << SPI_SR_CRCERR_Pos)        /*!< 0x00000010 */

+#define SPI_SR_CRCERR                       SPI_SR_CRCERR_Msk                  /*!< CRC Error flag */

+#define SPI_SR_MODF_Pos                     (5U)                               

+#define SPI_SR_MODF_Msk                     (0x1UL << SPI_SR_MODF_Pos)          /*!< 0x00000020 */

+#define SPI_SR_MODF                         SPI_SR_MODF_Msk                    /*!< Mode fault */

+#define SPI_SR_OVR_Pos                      (6U)                               

+#define SPI_SR_OVR_Msk                      (0x1UL << SPI_SR_OVR_Pos)           /*!< 0x00000040 */

+#define SPI_SR_OVR                          SPI_SR_OVR_Msk                     /*!< Overrun flag */

+#define SPI_SR_BSY_Pos                      (7U)                               

+#define SPI_SR_BSY_Msk                      (0x1UL << SPI_SR_BSY_Pos)           /*!< 0x00000080 */

+#define SPI_SR_BSY                          SPI_SR_BSY_Msk                     /*!< Busy flag */

+#define SPI_SR_FRE_Pos                      (8U)                               

+#define SPI_SR_FRE_Msk                      (0x1UL << SPI_SR_FRE_Pos)           /*!< 0x00000100 */

+#define SPI_SR_FRE                          SPI_SR_FRE_Msk                     /*!<Frame format error flag  */

+

+/********************  Bit definition for SPI_DR register  ********************/

+#define SPI_DR_DR_Pos                       (0U)                               

+#define SPI_DR_DR_Msk                       (0xFFFFUL << SPI_DR_DR_Pos)         /*!< 0x0000FFFF */

+#define SPI_DR_DR                           SPI_DR_DR_Msk                      /*!< Data Register */

+

+/*******************  Bit definition for SPI_CRCPR register  ******************/

+#define SPI_CRCPR_CRCPOLY_Pos               (0U)                               

+#define SPI_CRCPR_CRCPOLY_Msk               (0xFFFFUL << SPI_CRCPR_CRCPOLY_Pos) /*!< 0x0000FFFF */

+#define SPI_CRCPR_CRCPOLY                   SPI_CRCPR_CRCPOLY_Msk              /*!< CRC polynomial register */

+

+/******************  Bit definition for SPI_RXCRCR register  ******************/

+#define SPI_RXCRCR_RXCRC_Pos                (0U)                               

+#define SPI_RXCRCR_RXCRC_Msk                (0xFFFFUL << SPI_RXCRCR_RXCRC_Pos)  /*!< 0x0000FFFF */

+#define SPI_RXCRCR_RXCRC                    SPI_RXCRCR_RXCRC_Msk               /*!< Rx CRC Register */

+

+/******************  Bit definition for SPI_TXCRCR register  ******************/

+#define SPI_TXCRCR_TXCRC_Pos                (0U)                               

+#define SPI_TXCRCR_TXCRC_Msk                (0xFFFFUL << SPI_TXCRCR_TXCRC_Pos)  /*!< 0x0000FFFF */

+#define SPI_TXCRCR_TXCRC                    SPI_TXCRCR_TXCRC_Msk               /*!< Tx CRC Register */

+

+/******************  Bit definition for SPI_I2SCFGR register  *****************/

+#define SPI_I2SCFGR_CHLEN_Pos               (0U)                               

+#define SPI_I2SCFGR_CHLEN_Msk               (0x1UL << SPI_I2SCFGR_CHLEN_Pos)    /*!< 0x00000001 */

+#define SPI_I2SCFGR_CHLEN                   SPI_I2SCFGR_CHLEN_Msk              /*!<Channel length (number of bits per audio channel) */

+

+#define SPI_I2SCFGR_DATLEN_Pos              (1U)                               

+#define SPI_I2SCFGR_DATLEN_Msk              (0x3UL << SPI_I2SCFGR_DATLEN_Pos)   /*!< 0x00000006 */

+#define SPI_I2SCFGR_DATLEN                  SPI_I2SCFGR_DATLEN_Msk             /*!<DATLEN[1:0] bits (Data length to be transferred) */

+#define SPI_I2SCFGR_DATLEN_0                (0x1UL << SPI_I2SCFGR_DATLEN_Pos)   /*!< 0x00000002 */

+#define SPI_I2SCFGR_DATLEN_1                (0x2UL << SPI_I2SCFGR_DATLEN_Pos)   /*!< 0x00000004 */

+

+#define SPI_I2SCFGR_CKPOL_Pos               (3U)                               

+#define SPI_I2SCFGR_CKPOL_Msk               (0x1UL << SPI_I2SCFGR_CKPOL_Pos)    /*!< 0x00000008 */

+#define SPI_I2SCFGR_CKPOL                   SPI_I2SCFGR_CKPOL_Msk              /*!<steady state clock polarity */

+

+#define SPI_I2SCFGR_I2SSTD_Pos              (4U)                               

+#define SPI_I2SCFGR_I2SSTD_Msk              (0x3UL << SPI_I2SCFGR_I2SSTD_Pos)   /*!< 0x00000030 */

+#define SPI_I2SCFGR_I2SSTD                  SPI_I2SCFGR_I2SSTD_Msk             /*!<I2SSTD[1:0] bits (I2S standard selection) */

+#define SPI_I2SCFGR_I2SSTD_0                (0x1UL << SPI_I2SCFGR_I2SSTD_Pos)   /*!< 0x00000010 */

+#define SPI_I2SCFGR_I2SSTD_1                (0x2UL << SPI_I2SCFGR_I2SSTD_Pos)   /*!< 0x00000020 */

+

+#define SPI_I2SCFGR_PCMSYNC_Pos             (7U)                               

+#define SPI_I2SCFGR_PCMSYNC_Msk             (0x1UL << SPI_I2SCFGR_PCMSYNC_Pos)  /*!< 0x00000080 */

+#define SPI_I2SCFGR_PCMSYNC                 SPI_I2SCFGR_PCMSYNC_Msk            /*!<PCM frame synchronization */

+

+#define SPI_I2SCFGR_I2SCFG_Pos              (8U)                               

+#define SPI_I2SCFGR_I2SCFG_Msk              (0x3UL << SPI_I2SCFGR_I2SCFG_Pos)   /*!< 0x00000300 */

+#define SPI_I2SCFGR_I2SCFG                  SPI_I2SCFGR_I2SCFG_Msk             /*!<I2SCFG[1:0] bits (I2S configuration mode) */

+#define SPI_I2SCFGR_I2SCFG_0                (0x1UL << SPI_I2SCFGR_I2SCFG_Pos)   /*!< 0x00000100 */

+#define SPI_I2SCFGR_I2SCFG_1                (0x2UL << SPI_I2SCFGR_I2SCFG_Pos)   /*!< 0x00000200 */

+

+#define SPI_I2SCFGR_I2SE_Pos                (10U)                              

+#define SPI_I2SCFGR_I2SE_Msk                (0x1UL << SPI_I2SCFGR_I2SE_Pos)     /*!< 0x00000400 */

+#define SPI_I2SCFGR_I2SE                    SPI_I2SCFGR_I2SE_Msk               /*!<I2S Enable */

+#define SPI_I2SCFGR_I2SMOD_Pos              (11U)                              

+#define SPI_I2SCFGR_I2SMOD_Msk              (0x1UL << SPI_I2SCFGR_I2SMOD_Pos)   /*!< 0x00000800 */

+#define SPI_I2SCFGR_I2SMOD                  SPI_I2SCFGR_I2SMOD_Msk             /*!<I2S mode selection */

+

+/******************  Bit definition for SPI_I2SPR register  *******************/

+#define SPI_I2SPR_I2SDIV_Pos                (0U)                               

+#define SPI_I2SPR_I2SDIV_Msk                (0xFFUL << SPI_I2SPR_I2SDIV_Pos)    /*!< 0x000000FF */

+#define SPI_I2SPR_I2SDIV                    SPI_I2SPR_I2SDIV_Msk               /*!<I2S Linear prescaler */

+#define SPI_I2SPR_ODD_Pos                   (8U)                               

+#define SPI_I2SPR_ODD_Msk                   (0x1UL << SPI_I2SPR_ODD_Pos)        /*!< 0x00000100 */

+#define SPI_I2SPR_ODD                       SPI_I2SPR_ODD_Msk                  /*!<Odd factor for the prescaler */

+#define SPI_I2SPR_MCKOE_Pos                 (9U)                               

+#define SPI_I2SPR_MCKOE_Msk                 (0x1UL << SPI_I2SPR_MCKOE_Pos)      /*!< 0x00000200 */

+#define SPI_I2SPR_MCKOE                     SPI_I2SPR_MCKOE_Msk                /*!<Master Clock Output Enable */

+

+/******************************************************************************/

+/*                                                                            */

+/*                       System Configuration (SYSCFG)                        */

+/*                                                                            */

+/******************************************************************************/

+/*****************  Bit definition for SYSCFG_MEMRMP register  ****************/

+#define SYSCFG_MEMRMP_MEM_MODE_Pos      (0U)                                   

+#define SYSCFG_MEMRMP_MEM_MODE_Msk      (0x3UL << SYSCFG_MEMRMP_MEM_MODE_Pos)   /*!< 0x00000003 */

+#define SYSCFG_MEMRMP_MEM_MODE          SYSCFG_MEMRMP_MEM_MODE_Msk             /*!< SYSCFG_Memory Remap Config */

+#define SYSCFG_MEMRMP_MEM_MODE_0        (0x1UL << SYSCFG_MEMRMP_MEM_MODE_Pos)   /*!< 0x00000001 */

+#define SYSCFG_MEMRMP_MEM_MODE_1        (0x2UL << SYSCFG_MEMRMP_MEM_MODE_Pos)   /*!< 0x00000002 */

+#define SYSCFG_MEMRMP_BOOT_MODE_Pos     (8U)                                   

+#define SYSCFG_MEMRMP_BOOT_MODE_Msk     (0x3UL << SYSCFG_MEMRMP_BOOT_MODE_Pos)  /*!< 0x00000300 */

+#define SYSCFG_MEMRMP_BOOT_MODE         SYSCFG_MEMRMP_BOOT_MODE_Msk            /*!< Boot mode Config */

+#define SYSCFG_MEMRMP_BOOT_MODE_0       (0x1UL << SYSCFG_MEMRMP_BOOT_MODE_Pos)  /*!< 0x00000100 */

+#define SYSCFG_MEMRMP_BOOT_MODE_1       (0x2UL << SYSCFG_MEMRMP_BOOT_MODE_Pos)  /*!< 0x00000200 */

+

+/*****************  Bit definition for SYSCFG_PMC register  *******************/

+#define SYSCFG_PMC_USB_PU_Pos           (0U)                                   

+#define SYSCFG_PMC_USB_PU_Msk           (0x1UL << SYSCFG_PMC_USB_PU_Pos)        /*!< 0x00000001 */

+#define SYSCFG_PMC_USB_PU               SYSCFG_PMC_USB_PU_Msk                  /*!< SYSCFG PMC */

+#define SYSCFG_PMC_LCD_CAPA_Pos         (1U)                                   

+#define SYSCFG_PMC_LCD_CAPA_Msk         (0x1FUL << SYSCFG_PMC_LCD_CAPA_Pos)     /*!< 0x0000003E */

+#define SYSCFG_PMC_LCD_CAPA             SYSCFG_PMC_LCD_CAPA_Msk                /*!< LCD_CAPA decoupling capacitance connection */

+#define SYSCFG_PMC_LCD_CAPA_0           (0x01UL << SYSCFG_PMC_LCD_CAPA_Pos)     /*!< 0x00000002 */

+#define SYSCFG_PMC_LCD_CAPA_1           (0x02UL << SYSCFG_PMC_LCD_CAPA_Pos)     /*!< 0x00000004 */

+#define SYSCFG_PMC_LCD_CAPA_2           (0x04UL << SYSCFG_PMC_LCD_CAPA_Pos)     /*!< 0x00000008 */

+#define SYSCFG_PMC_LCD_CAPA_3           (0x08UL << SYSCFG_PMC_LCD_CAPA_Pos)     /*!< 0x00000010 */

+#define SYSCFG_PMC_LCD_CAPA_4           (0x10UL << SYSCFG_PMC_LCD_CAPA_Pos)     /*!< 0x00000020 */

+

+/*****************  Bit definition for SYSCFG_EXTICR1 register  ***************/

+#define SYSCFG_EXTICR1_EXTI0_Pos        (0U)                                   

+#define SYSCFG_EXTICR1_EXTI0_Msk        (0xFUL << SYSCFG_EXTICR1_EXTI0_Pos)     /*!< 0x0000000F */

+#define SYSCFG_EXTICR1_EXTI0            SYSCFG_EXTICR1_EXTI0_Msk               /*!< EXTI 0 configuration */

+#define SYSCFG_EXTICR1_EXTI1_Pos        (4U)                                   

+#define SYSCFG_EXTICR1_EXTI1_Msk        (0xFUL << SYSCFG_EXTICR1_EXTI1_Pos)     /*!< 0x000000F0 */

+#define SYSCFG_EXTICR1_EXTI1            SYSCFG_EXTICR1_EXTI1_Msk               /*!< EXTI 1 configuration */

+#define SYSCFG_EXTICR1_EXTI2_Pos        (8U)                                   

+#define SYSCFG_EXTICR1_EXTI2_Msk        (0xFUL << SYSCFG_EXTICR1_EXTI2_Pos)     /*!< 0x00000F00 */

+#define SYSCFG_EXTICR1_EXTI2            SYSCFG_EXTICR1_EXTI2_Msk               /*!< EXTI 2 configuration */

+#define SYSCFG_EXTICR1_EXTI3_Pos        (12U)                                  

+#define SYSCFG_EXTICR1_EXTI3_Msk        (0xFUL << SYSCFG_EXTICR1_EXTI3_Pos)     /*!< 0x0000F000 */

+#define SYSCFG_EXTICR1_EXTI3            SYSCFG_EXTICR1_EXTI3_Msk               /*!< EXTI 3 configuration */

+

+/** 

+  * @brief  EXTI0 configuration  

+  */ 

+#define SYSCFG_EXTICR1_EXTI0_PA         (0x00000000U)                          /*!< PA[0] pin */

+#define SYSCFG_EXTICR1_EXTI0_PB         (0x00000001U)                          /*!< PB[0] pin */

+#define SYSCFG_EXTICR1_EXTI0_PC         (0x00000002U)                          /*!< PC[0] pin */

+#define SYSCFG_EXTICR1_EXTI0_PD         (0x00000003U)                          /*!< PD[0] pin */

+#define SYSCFG_EXTICR1_EXTI0_PE         (0x00000004U)                          /*!< PE[0] pin */

+#define SYSCFG_EXTICR1_EXTI0_PH         (0x00000005U)                          /*!< PH[0] pin */

+#define SYSCFG_EXTICR1_EXTI0_PF         (0x00000006U)                          /*!< PF[0] pin */

+#define SYSCFG_EXTICR1_EXTI0_PG         (0x00000007U)                          /*!< PG[0] pin */

+

+/** 

+  * @brief  EXTI1 configuration  

+  */ 

+#define SYSCFG_EXTICR1_EXTI1_PA         (0x00000000U)                          /*!< PA[1] pin */

+#define SYSCFG_EXTICR1_EXTI1_PB         (0x00000010U)                          /*!< PB[1] pin */

+#define SYSCFG_EXTICR1_EXTI1_PC         (0x00000020U)                          /*!< PC[1] pin */

+#define SYSCFG_EXTICR1_EXTI1_PD         (0x00000030U)                          /*!< PD[1] pin */

+#define SYSCFG_EXTICR1_EXTI1_PE         (0x00000040U)                          /*!< PE[1] pin */

+#define SYSCFG_EXTICR1_EXTI1_PH         (0x00000050U)                          /*!< PH[1] pin */

+#define SYSCFG_EXTICR1_EXTI1_PF         (0x00000060U)                          /*!< PF[1] pin */

+#define SYSCFG_EXTICR1_EXTI1_PG         (0x00000070U)                          /*!< PG[1] pin */

+

+/** 

+  * @brief  EXTI2 configuration  

+  */ 

+#define SYSCFG_EXTICR1_EXTI2_PA         (0x00000000U)                          /*!< PA[2] pin */

+#define SYSCFG_EXTICR1_EXTI2_PB         (0x00000100U)                          /*!< PB[2] pin */

+#define SYSCFG_EXTICR1_EXTI2_PC         (0x00000200U)                          /*!< PC[2] pin */

+#define SYSCFG_EXTICR1_EXTI2_PD         (0x00000300U)                          /*!< PD[2] pin */

+#define SYSCFG_EXTICR1_EXTI2_PE         (0x00000400U)                          /*!< PE[2] pin */

+#define SYSCFG_EXTICR1_EXTI2_PH         (0x00000500U)                          /*!< PH[2] pin */

+#define SYSCFG_EXTICR1_EXTI2_PF         (0x00000600U)                          /*!< PF[2] pin */

+#define SYSCFG_EXTICR1_EXTI2_PG         (0x00000700U)                          /*!< PG[2] pin */

+

+/** 

+  * @brief  EXTI3 configuration  

+  */ 

+#define SYSCFG_EXTICR1_EXTI3_PA         (0x00000000U)                          /*!< PA[3] pin */

+#define SYSCFG_EXTICR1_EXTI3_PB         (0x00001000U)                          /*!< PB[3] pin */

+#define SYSCFG_EXTICR1_EXTI3_PC         (0x00002000U)                          /*!< PC[3] pin */

+#define SYSCFG_EXTICR1_EXTI3_PD         (0x00003000U)                          /*!< PD[3] pin */

+#define SYSCFG_EXTICR1_EXTI3_PE         (0x00004000U)                          /*!< PE[3] pin */

+#define SYSCFG_EXTICR1_EXTI3_PF         (0x00003000U)                          /*!< PF[3] pin */

+#define SYSCFG_EXTICR1_EXTI3_PG         (0x00004000U)                          /*!< PG[3] pin */

+

+/*****************  Bit definition for SYSCFG_EXTICR2 register  *****************/

+#define SYSCFG_EXTICR2_EXTI4_Pos        (0U)                                   

+#define SYSCFG_EXTICR2_EXTI4_Msk        (0xFUL << SYSCFG_EXTICR2_EXTI4_Pos)     /*!< 0x0000000F */

+#define SYSCFG_EXTICR2_EXTI4            SYSCFG_EXTICR2_EXTI4_Msk               /*!< EXTI 4 configuration */

+#define SYSCFG_EXTICR2_EXTI5_Pos        (4U)                                   

+#define SYSCFG_EXTICR2_EXTI5_Msk        (0xFUL << SYSCFG_EXTICR2_EXTI5_Pos)     /*!< 0x000000F0 */

+#define SYSCFG_EXTICR2_EXTI5            SYSCFG_EXTICR2_EXTI5_Msk               /*!< EXTI 5 configuration */

+#define SYSCFG_EXTICR2_EXTI6_Pos        (8U)                                   

+#define SYSCFG_EXTICR2_EXTI6_Msk        (0xFUL << SYSCFG_EXTICR2_EXTI6_Pos)     /*!< 0x00000F00 */

+#define SYSCFG_EXTICR2_EXTI6            SYSCFG_EXTICR2_EXTI6_Msk               /*!< EXTI 6 configuration */

+#define SYSCFG_EXTICR2_EXTI7_Pos        (12U)                                  

+#define SYSCFG_EXTICR2_EXTI7_Msk        (0xFUL << SYSCFG_EXTICR2_EXTI7_Pos)     /*!< 0x0000F000 */

+#define SYSCFG_EXTICR2_EXTI7            SYSCFG_EXTICR2_EXTI7_Msk               /*!< EXTI 7 configuration */

+

+/** 

+  * @brief  EXTI4 configuration  

+  */ 

+#define SYSCFG_EXTICR2_EXTI4_PA         (0x00000000U)                          /*!< PA[4] pin */

+#define SYSCFG_EXTICR2_EXTI4_PB         (0x00000001U)                          /*!< PB[4] pin */

+#define SYSCFG_EXTICR2_EXTI4_PC         (0x00000002U)                          /*!< PC[4] pin */

+#define SYSCFG_EXTICR2_EXTI4_PD         (0x00000003U)                          /*!< PD[4] pin */

+#define SYSCFG_EXTICR2_EXTI4_PE         (0x00000004U)                          /*!< PE[4] pin */

+#define SYSCFG_EXTICR2_EXTI4_PF         (0x00000006U)                          /*!< PF[4] pin */

+#define SYSCFG_EXTICR2_EXTI4_PG         (0x00000007U)                          /*!< PG[4] pin */

+

+/** 

+  * @brief  EXTI5 configuration  

+  */ 

+#define SYSCFG_EXTICR2_EXTI5_PA         (0x00000000U)                          /*!< PA[5] pin */

+#define SYSCFG_EXTICR2_EXTI5_PB         (0x00000010U)                          /*!< PB[5] pin */

+#define SYSCFG_EXTICR2_EXTI5_PC         (0x00000020U)                          /*!< PC[5] pin */

+#define SYSCFG_EXTICR2_EXTI5_PD         (0x00000030U)                          /*!< PD[5] pin */

+#define SYSCFG_EXTICR2_EXTI5_PE         (0x00000040U)                          /*!< PE[5] pin */

+#define SYSCFG_EXTICR2_EXTI5_PF         (0x00000060U)                          /*!< PF[5] pin */

+#define SYSCFG_EXTICR2_EXTI5_PG         (0x00000070U)                          /*!< PG[5] pin */

+

+/** 

+  * @brief  EXTI6 configuration  

+  */ 

+#define SYSCFG_EXTICR2_EXTI6_PA         (0x00000000U)                          /*!< PA[6] pin */

+#define SYSCFG_EXTICR2_EXTI6_PB         (0x00000100U)                          /*!< PB[6] pin */

+#define SYSCFG_EXTICR2_EXTI6_PC         (0x00000200U)                          /*!< PC[6] pin */

+#define SYSCFG_EXTICR2_EXTI6_PD         (0x00000300U)                          /*!< PD[6] pin */

+#define SYSCFG_EXTICR2_EXTI6_PE         (0x00000400U)                          /*!< PE[6] pin */

+#define SYSCFG_EXTICR2_EXTI6_PF         (0x00000600U)                          /*!< PF[6] pin */

+#define SYSCFG_EXTICR2_EXTI6_PG         (0x00000700U)                          /*!< PG[6] pin */

+

+/** 

+  * @brief  EXTI7 configuration  

+  */ 

+#define SYSCFG_EXTICR2_EXTI7_PA         (0x00000000U)                          /*!< PA[7] pin */

+#define SYSCFG_EXTICR2_EXTI7_PB         (0x00001000U)                          /*!< PB[7] pin */

+#define SYSCFG_EXTICR2_EXTI7_PC         (0x00002000U)                          /*!< PC[7] pin */

+#define SYSCFG_EXTICR2_EXTI7_PD         (0x00003000U)                          /*!< PD[7] pin */

+#define SYSCFG_EXTICR2_EXTI7_PE         (0x00004000U)                          /*!< PE[7] pin */

+#define SYSCFG_EXTICR2_EXTI7_PF         (0x00006000U)                          /*!< PF[7] pin */

+#define SYSCFG_EXTICR2_EXTI7_PG         (0x00007000U)                          /*!< PG[7] pin */

+

+/*****************  Bit definition for SYSCFG_EXTICR3 register  *****************/

+#define SYSCFG_EXTICR3_EXTI8_Pos        (0U)                                   

+#define SYSCFG_EXTICR3_EXTI8_Msk        (0xFUL << SYSCFG_EXTICR3_EXTI8_Pos)     /*!< 0x0000000F */

+#define SYSCFG_EXTICR3_EXTI8            SYSCFG_EXTICR3_EXTI8_Msk               /*!< EXTI 8 configuration */

+#define SYSCFG_EXTICR3_EXTI9_Pos        (4U)                                   

+#define SYSCFG_EXTICR3_EXTI9_Msk        (0xFUL << SYSCFG_EXTICR3_EXTI9_Pos)     /*!< 0x000000F0 */

+#define SYSCFG_EXTICR3_EXTI9            SYSCFG_EXTICR3_EXTI9_Msk               /*!< EXTI 9 configuration */

+#define SYSCFG_EXTICR3_EXTI10_Pos       (8U)                                   

+#define SYSCFG_EXTICR3_EXTI10_Msk       (0xFUL << SYSCFG_EXTICR3_EXTI10_Pos)    /*!< 0x00000F00 */

+#define SYSCFG_EXTICR3_EXTI10           SYSCFG_EXTICR3_EXTI10_Msk              /*!< EXTI 10 configuration */

+#define SYSCFG_EXTICR3_EXTI11_Pos       (12U)                                  

+#define SYSCFG_EXTICR3_EXTI11_Msk       (0xFUL << SYSCFG_EXTICR3_EXTI11_Pos)    /*!< 0x0000F000 */

+#define SYSCFG_EXTICR3_EXTI11           SYSCFG_EXTICR3_EXTI11_Msk              /*!< EXTI 11 configuration */

+

+/** 

+  * @brief  EXTI8 configuration  

+  */ 

+#define SYSCFG_EXTICR3_EXTI8_PA         (0x00000000U)                          /*!< PA[8] pin */

+#define SYSCFG_EXTICR3_EXTI8_PB         (0x00000001U)                          /*!< PB[8] pin */

+#define SYSCFG_EXTICR3_EXTI8_PC         (0x00000002U)                          /*!< PC[8] pin */

+#define SYSCFG_EXTICR3_EXTI8_PD         (0x00000003U)                          /*!< PD[8] pin */

+#define SYSCFG_EXTICR3_EXTI8_PE         (0x00000004U)                          /*!< PE[8] pin */

+#define SYSCFG_EXTICR3_EXTI8_PF         (0x00000006U)                          /*!< PF[8] pin */

+#define SYSCFG_EXTICR3_EXTI8_PG         (0x00000007U)                          /*!< PG[8] pin */

+

+/** 

+  * @brief  EXTI9 configuration  

+  */ 

+#define SYSCFG_EXTICR3_EXTI9_PA         (0x00000000U)                          /*!< PA[9] pin */

+#define SYSCFG_EXTICR3_EXTI9_PB         (0x00000010U)                          /*!< PB[9] pin */

+#define SYSCFG_EXTICR3_EXTI9_PC         (0x00000020U)                          /*!< PC[9] pin */

+#define SYSCFG_EXTICR3_EXTI9_PD         (0x00000030U)                          /*!< PD[9] pin */

+#define SYSCFG_EXTICR3_EXTI9_PE         (0x00000040U)                          /*!< PE[9] pin */

+#define SYSCFG_EXTICR3_EXTI9_PF         (0x00000060U)                          /*!< PF[9] pin */

+#define SYSCFG_EXTICR3_EXTI9_PG         (0x00000070U)                          /*!< PG[9] pin */

+

+/** 

+  * @brief  EXTI10 configuration  

+  */ 

+#define SYSCFG_EXTICR3_EXTI10_PA        (0x00000000U)                          /*!< PA[10] pin */

+#define SYSCFG_EXTICR3_EXTI10_PB        (0x00000100U)                          /*!< PB[10] pin */

+#define SYSCFG_EXTICR3_EXTI10_PC        (0x00000200U)                          /*!< PC[10] pin */

+#define SYSCFG_EXTICR3_EXTI10_PD        (0x00000300U)                          /*!< PD[10] pin */

+#define SYSCFG_EXTICR3_EXTI10_PE        (0x00000400U)                          /*!< PE[10] pin */

+#define SYSCFG_EXTICR3_EXTI10_PF        (0x00000600U)                          /*!< PF[10] pin */

+#define SYSCFG_EXTICR3_EXTI10_PG        (0x00000700U)                          /*!< PG[10] pin */

+

+/** 

+  * @brief  EXTI11 configuration  

+  */ 

+#define SYSCFG_EXTICR3_EXTI11_PA        (0x00000000U)                          /*!< PA[11] pin */

+#define SYSCFG_EXTICR3_EXTI11_PB        (0x00001000U)                          /*!< PB[11] pin */

+#define SYSCFG_EXTICR3_EXTI11_PC        (0x00002000U)                          /*!< PC[11] pin */

+#define SYSCFG_EXTICR3_EXTI11_PD        (0x00003000U)                          /*!< PD[11] pin */

+#define SYSCFG_EXTICR3_EXTI11_PE        (0x00004000U)                          /*!< PE[11] pin */

+#define SYSCFG_EXTICR3_EXTI11_PF        (0x00006000U)                          /*!< PF[11] pin */

+#define SYSCFG_EXTICR3_EXTI11_PG        (0x00007000U)                          /*!< PG[11] pin */

+

+/*****************  Bit definition for SYSCFG_EXTICR4 register  *****************/

+#define SYSCFG_EXTICR4_EXTI12_Pos       (0U)                                   

+#define SYSCFG_EXTICR4_EXTI12_Msk       (0xFUL << SYSCFG_EXTICR4_EXTI12_Pos)    /*!< 0x0000000F */

+#define SYSCFG_EXTICR4_EXTI12           SYSCFG_EXTICR4_EXTI12_Msk              /*!< EXTI 12 configuration */

+#define SYSCFG_EXTICR4_EXTI13_Pos       (4U)                                   

+#define SYSCFG_EXTICR4_EXTI13_Msk       (0xFUL << SYSCFG_EXTICR4_EXTI13_Pos)    /*!< 0x000000F0 */

+#define SYSCFG_EXTICR4_EXTI13           SYSCFG_EXTICR4_EXTI13_Msk              /*!< EXTI 13 configuration */

+#define SYSCFG_EXTICR4_EXTI14_Pos       (8U)                                   

+#define SYSCFG_EXTICR4_EXTI14_Msk       (0xFUL << SYSCFG_EXTICR4_EXTI14_Pos)    /*!< 0x00000F00 */

+#define SYSCFG_EXTICR4_EXTI14           SYSCFG_EXTICR4_EXTI14_Msk              /*!< EXTI 14 configuration */

+#define SYSCFG_EXTICR4_EXTI15_Pos       (12U)                                  

+#define SYSCFG_EXTICR4_EXTI15_Msk       (0xFUL << SYSCFG_EXTICR4_EXTI15_Pos)    /*!< 0x0000F000 */

+#define SYSCFG_EXTICR4_EXTI15           SYSCFG_EXTICR4_EXTI15_Msk              /*!< EXTI 15 configuration */

+

+/** 

+  * @brief  EXTI12 configuration  

+  */ 

+#define SYSCFG_EXTICR4_EXTI12_PA        (0x00000000U)                          /*!< PA[12] pin */

+#define SYSCFG_EXTICR4_EXTI12_PB        (0x00000001U)                          /*!< PB[12] pin */

+#define SYSCFG_EXTICR4_EXTI12_PC        (0x00000002U)                          /*!< PC[12] pin */

+#define SYSCFG_EXTICR4_EXTI12_PD        (0x00000003U)                          /*!< PD[12] pin */

+#define SYSCFG_EXTICR4_EXTI12_PE        (0x00000004U)                          /*!< PE[12] pin */

+#define SYSCFG_EXTICR4_EXTI12_PF        (0x00000006U)                          /*!< PF[12] pin */

+#define SYSCFG_EXTICR4_EXTI12_PG        (0x00000007U)                          /*!< PG[12] pin */

+

+/** 

+  * @brief  EXTI13 configuration  

+  */ 

+#define SYSCFG_EXTICR4_EXTI13_PA        (0x00000000U)                          /*!< PA[13] pin */

+#define SYSCFG_EXTICR4_EXTI13_PB        (0x00000010U)                          /*!< PB[13] pin */

+#define SYSCFG_EXTICR4_EXTI13_PC        (0x00000020U)                          /*!< PC[13] pin */

+#define SYSCFG_EXTICR4_EXTI13_PD        (0x00000030U)                          /*!< PD[13] pin */

+#define SYSCFG_EXTICR4_EXTI13_PE        (0x00000040U)                          /*!< PE[13] pin */

+#define SYSCFG_EXTICR4_EXTI13_PF        (0x00000060U)                          /*!< PF[13] pin */

+#define SYSCFG_EXTICR4_EXTI13_PG        (0x00000070U)                          /*!< PG[13] pin */

+

+/** 

+  * @brief  EXTI14 configuration  

+  */ 

+#define SYSCFG_EXTICR4_EXTI14_PA        (0x00000000U)                          /*!< PA[14] pin */

+#define SYSCFG_EXTICR4_EXTI14_PB        (0x00000100U)                          /*!< PB[14] pin */

+#define SYSCFG_EXTICR4_EXTI14_PC        (0x00000200U)                          /*!< PC[14] pin */

+#define SYSCFG_EXTICR4_EXTI14_PD        (0x00000300U)                          /*!< PD[14] pin */

+#define SYSCFG_EXTICR4_EXTI14_PE        (0x00000400U)                          /*!< PE[14] pin */

+#define SYSCFG_EXTICR4_EXTI14_PF        (0x00000600U)                          /*!< PF[14] pin */

+#define SYSCFG_EXTICR4_EXTI14_PG        (0x00000700U)                          /*!< PG[14] pin */

+

+/** 

+  * @brief  EXTI15 configuration  

+  */ 

+#define SYSCFG_EXTICR4_EXTI15_PA        (0x00000000U)                          /*!< PA[15] pin */

+#define SYSCFG_EXTICR4_EXTI15_PB        (0x00001000U)                          /*!< PB[15] pin */

+#define SYSCFG_EXTICR4_EXTI15_PC        (0x00002000U)                          /*!< PC[15] pin */

+#define SYSCFG_EXTICR4_EXTI15_PD        (0x00003000U)                          /*!< PD[15] pin */

+#define SYSCFG_EXTICR4_EXTI15_PE        (0x00004000U)                          /*!< PE[15] pin */

+#define SYSCFG_EXTICR4_EXTI15_PF        (0x00006000U)                          /*!< PF[15] pin */

+#define SYSCFG_EXTICR4_EXTI15_PG        (0x00007000U)                          /*!< PG[15] pin */

+ 

+/******************************************************************************/

+/*                                                                            */

+/*                       Routing Interface (RI)                               */

+/*                                                                            */

+/******************************************************************************/

+

+/********************  Bit definition for RI_ICR register  ********************/

+#define RI_ICR_IC1OS_Pos                (0U)                                   

+#define RI_ICR_IC1OS_Msk                (0xFUL << RI_ICR_IC1OS_Pos)             /*!< 0x0000000F */

+#define RI_ICR_IC1OS                    RI_ICR_IC1OS_Msk                       /*!< IC1OS[3:0] bits (Input Capture 1 select bits) */

+#define RI_ICR_IC1OS_0                  (0x1UL << RI_ICR_IC1OS_Pos)             /*!< 0x00000001 */

+#define RI_ICR_IC1OS_1                  (0x2UL << RI_ICR_IC1OS_Pos)             /*!< 0x00000002 */

+#define RI_ICR_IC1OS_2                  (0x4UL << RI_ICR_IC1OS_Pos)             /*!< 0x00000004 */

+#define RI_ICR_IC1OS_3                  (0x8UL << RI_ICR_IC1OS_Pos)             /*!< 0x00000008 */

+

+#define RI_ICR_IC2OS_Pos                (4U)                                   

+#define RI_ICR_IC2OS_Msk                (0xFUL << RI_ICR_IC2OS_Pos)             /*!< 0x000000F0 */

+#define RI_ICR_IC2OS                    RI_ICR_IC2OS_Msk                       /*!< IC2OS[3:0] bits (Input Capture 2 select bits) */

+#define RI_ICR_IC2OS_0                  (0x1UL << RI_ICR_IC2OS_Pos)             /*!< 0x00000010 */

+#define RI_ICR_IC2OS_1                  (0x2UL << RI_ICR_IC2OS_Pos)             /*!< 0x00000020 */

+#define RI_ICR_IC2OS_2                  (0x4UL << RI_ICR_IC2OS_Pos)             /*!< 0x00000040 */

+#define RI_ICR_IC2OS_3                  (0x8UL << RI_ICR_IC2OS_Pos)             /*!< 0x00000080 */

+

+#define RI_ICR_IC3OS_Pos                (8U)                                   

+#define RI_ICR_IC3OS_Msk                (0xFUL << RI_ICR_IC3OS_Pos)             /*!< 0x00000F00 */

+#define RI_ICR_IC3OS                    RI_ICR_IC3OS_Msk                       /*!< IC3OS[3:0] bits (Input Capture 3 select bits) */

+#define RI_ICR_IC3OS_0                  (0x1UL << RI_ICR_IC3OS_Pos)             /*!< 0x00000100 */

+#define RI_ICR_IC3OS_1                  (0x2UL << RI_ICR_IC3OS_Pos)             /*!< 0x00000200 */

+#define RI_ICR_IC3OS_2                  (0x4UL << RI_ICR_IC3OS_Pos)             /*!< 0x00000400 */

+#define RI_ICR_IC3OS_3                  (0x8UL << RI_ICR_IC3OS_Pos)             /*!< 0x00000800 */

+

+#define RI_ICR_IC4OS_Pos                (12U)                                  

+#define RI_ICR_IC4OS_Msk                (0xFUL << RI_ICR_IC4OS_Pos)             /*!< 0x0000F000 */

+#define RI_ICR_IC4OS                    RI_ICR_IC4OS_Msk                       /*!< IC4OS[3:0] bits (Input Capture 4 select bits) */

+#define RI_ICR_IC4OS_0                  (0x1UL << RI_ICR_IC4OS_Pos)             /*!< 0x00001000 */

+#define RI_ICR_IC4OS_1                  (0x2UL << RI_ICR_IC4OS_Pos)             /*!< 0x00002000 */

+#define RI_ICR_IC4OS_2                  (0x4UL << RI_ICR_IC4OS_Pos)             /*!< 0x00004000 */

+#define RI_ICR_IC4OS_3                  (0x8UL << RI_ICR_IC4OS_Pos)             /*!< 0x00008000 */

+

+#define RI_ICR_TIM_Pos                  (16U)                                  

+#define RI_ICR_TIM_Msk                  (0x3UL << RI_ICR_TIM_Pos)               /*!< 0x00030000 */

+#define RI_ICR_TIM                      RI_ICR_TIM_Msk                         /*!< TIM[3:0] bits (Timers select bits) */

+#define RI_ICR_TIM_0                    (0x1UL << RI_ICR_TIM_Pos)               /*!< 0x00010000 */

+#define RI_ICR_TIM_1                    (0x2UL << RI_ICR_TIM_Pos)               /*!< 0x00020000 */

+

+#define RI_ICR_IC1_Pos                  (18U)                                  

+#define RI_ICR_IC1_Msk                  (0x1UL << RI_ICR_IC1_Pos)               /*!< 0x00040000 */

+#define RI_ICR_IC1                      RI_ICR_IC1_Msk                         /*!< Input capture 1 */

+#define RI_ICR_IC2_Pos                  (19U)                                  

+#define RI_ICR_IC2_Msk                  (0x1UL << RI_ICR_IC2_Pos)               /*!< 0x00080000 */

+#define RI_ICR_IC2                      RI_ICR_IC2_Msk                         /*!< Input capture 2 */

+#define RI_ICR_IC3_Pos                  (20U)                                  

+#define RI_ICR_IC3_Msk                  (0x1UL << RI_ICR_IC3_Pos)               /*!< 0x00100000 */

+#define RI_ICR_IC3                      RI_ICR_IC3_Msk                         /*!< Input capture 3 */

+#define RI_ICR_IC4_Pos                  (21U)                                  

+#define RI_ICR_IC4_Msk                  (0x1UL << RI_ICR_IC4_Pos)               /*!< 0x00200000 */

+#define RI_ICR_IC4                      RI_ICR_IC4_Msk                         /*!< Input capture 4 */

+

+/********************  Bit definition for RI_ASCR1 register  ********************/

+#define RI_ASCR1_CH_Pos                 (0U)                                   

+#define RI_ASCR1_CH_Msk                 (0x7BFDFFFFUL << RI_ASCR1_CH_Pos)       /*!< 0x7BFDFFFF */

+#define RI_ASCR1_CH                     RI_ASCR1_CH_Msk                        /*!< AS_CH[25:18] & AS_CH[15:0] bits ( Analog switches selection bits) */

+#define RI_ASCR1_CH_0                   (0x00000001U)                          /*!< Bit 0 */

+#define RI_ASCR1_CH_1                   (0x00000002U)                          /*!< Bit 1 */

+#define RI_ASCR1_CH_2                   (0x00000004U)                          /*!< Bit 2 */

+#define RI_ASCR1_CH_3                   (0x00000008U)                          /*!< Bit 3 */

+#define RI_ASCR1_CH_4                   (0x00000010U)                          /*!< Bit 4 */

+#define RI_ASCR1_CH_5                   (0x00000020U)                          /*!< Bit 5 */

+#define RI_ASCR1_CH_6                   (0x00000040U)                          /*!< Bit 6 */

+#define RI_ASCR1_CH_7                   (0x00000080U)                          /*!< Bit 7 */

+#define RI_ASCR1_CH_8                   (0x00000100U)                          /*!< Bit 8 */

+#define RI_ASCR1_CH_9                   (0x00000200U)                          /*!< Bit 9 */

+#define RI_ASCR1_CH_10                  (0x00000400U)                          /*!< Bit 10 */

+#define RI_ASCR1_CH_11                  (0x00000800U)                          /*!< Bit 11 */

+#define RI_ASCR1_CH_12                  (0x00001000U)                          /*!< Bit 12 */

+#define RI_ASCR1_CH_13                  (0x00002000U)                          /*!< Bit 13 */

+#define RI_ASCR1_CH_14                  (0x00004000U)                          /*!< Bit 14 */

+#define RI_ASCR1_CH_15                  (0x00008000U)                          /*!< Bit 15 */

+#define RI_ASCR1_CH_31                  (0x00010000U)                          /*!< Bit 16 */

+#define RI_ASCR1_CH_18                  (0x00040000U)                          /*!< Bit 18 */

+#define RI_ASCR1_CH_19                  (0x00080000U)                          /*!< Bit 19 */

+#define RI_ASCR1_CH_20                  (0x00100000U)                          /*!< Bit 20 */

+#define RI_ASCR1_CH_21                  (0x00200000U)                          /*!< Bit 21 */

+#define RI_ASCR1_CH_22                  (0x00400000U)                          /*!< Bit 22 */

+#define RI_ASCR1_CH_23                  (0x00800000U)                          /*!< Bit 23 */

+#define RI_ASCR1_CH_24                  (0x01000000U)                          /*!< Bit 24 */

+#define RI_ASCR1_CH_25                  (0x02000000U)                          /*!< Bit 25 */

+#define RI_ASCR1_VCOMP_Pos              (26U)                                  

+#define RI_ASCR1_VCOMP_Msk              (0x1UL << RI_ASCR1_VCOMP_Pos)           /*!< 0x04000000 */

+#define RI_ASCR1_VCOMP                  RI_ASCR1_VCOMP_Msk                     /*!< ADC analog switch selection for internal node to COMP1 */

+#define RI_ASCR1_CH_27                  (0x08000000U)                          /*!< Bit 27 */

+#define RI_ASCR1_CH_28                  (0x10000000U)                          /*!< Bit 28 */

+#define RI_ASCR1_CH_29                  (0x20000000U)                          /*!< Bit 29 */

+#define RI_ASCR1_CH_30                  (0x40000000U)                          /*!< Bit 30 */

+#define RI_ASCR1_SCM_Pos                (31U)                                  

+#define RI_ASCR1_SCM_Msk                (0x1UL << RI_ASCR1_SCM_Pos)             /*!< 0x80000000 */

+#define RI_ASCR1_SCM                    RI_ASCR1_SCM_Msk                       /*!< I/O Switch control mode */

+

+/********************  Bit definition for RI_ASCR2 register  ********************/

+#define RI_ASCR2_GR10_1                 (0x00000001U)                          /*!< GR10-1 selection bit */

+#define RI_ASCR2_GR10_2                 (0x00000002U)                          /*!< GR10-2 selection bit */

+#define RI_ASCR2_GR10_3                 (0x00000004U)                          /*!< GR10-3 selection bit */

+#define RI_ASCR2_GR10_4                 (0x00000008U)                          /*!< GR10-4 selection bit */

+#define RI_ASCR2_GR6_Pos                (4U)                                   

+#define RI_ASCR2_GR6_Msk                (0x1800003UL << RI_ASCR2_GR6_Pos)       /*!< 0x18000030 */

+#define RI_ASCR2_GR6                    RI_ASCR2_GR6_Msk                       /*!< GR6 selection bits */

+#define RI_ASCR2_GR6_1                  (0x0000001UL << RI_ASCR2_GR6_Pos)       /*!< 0x00000010 */

+#define RI_ASCR2_GR6_2                  (0x0000002UL << RI_ASCR2_GR6_Pos)       /*!< 0x00000020 */

+#define RI_ASCR2_GR6_3                  (0x0800000UL << RI_ASCR2_GR6_Pos)       /*!< 0x08000000 */

+#define RI_ASCR2_GR6_4                  (0x1000000UL << RI_ASCR2_GR6_Pos)       /*!< 0x10000000 */

+#define RI_ASCR2_GR5_1                  (0x00000040U)                          /*!< GR5-1 selection bit */

+#define RI_ASCR2_GR5_2                  (0x00000080U)                          /*!< GR5-2 selection bit */

+#define RI_ASCR2_GR5_3                  (0x00000100U)                          /*!< GR5-3 selection bit */

+#define RI_ASCR2_GR4_1                  (0x00000200U)                          /*!< GR4-1 selection bit */

+#define RI_ASCR2_GR4_2                  (0x00000400U)                          /*!< GR4-2 selection bit */

+#define RI_ASCR2_GR4_3                  (0x00000800U)                          /*!< GR4-3 selection bit */

+#define RI_ASCR2_GR4_4                  (0x00008000U)                          /*!< GR4-4 selection bit */

+#define RI_ASCR2_CH0b_Pos               (16U)                                  

+#define RI_ASCR2_CH0b_Msk               (0x1UL << RI_ASCR2_CH0b_Pos)            /*!< 0x00010000 */

+#define RI_ASCR2_CH0b                   RI_ASCR2_CH0b_Msk                      /*!< CH0b selection bit */

+#define RI_ASCR2_CH1b_Pos               (17U)                                  

+#define RI_ASCR2_CH1b_Msk               (0x1UL << RI_ASCR2_CH1b_Pos)            /*!< 0x00020000 */

+#define RI_ASCR2_CH1b                   RI_ASCR2_CH1b_Msk                      /*!< CH1b selection bit */

+#define RI_ASCR2_CH2b_Pos               (18U)                                  

+#define RI_ASCR2_CH2b_Msk               (0x1UL << RI_ASCR2_CH2b_Pos)            /*!< 0x00040000 */

+#define RI_ASCR2_CH2b                   RI_ASCR2_CH2b_Msk                      /*!< CH2b selection bit */

+#define RI_ASCR2_CH3b_Pos               (19U)                                  

+#define RI_ASCR2_CH3b_Msk               (0x1UL << RI_ASCR2_CH3b_Pos)            /*!< 0x00080000 */

+#define RI_ASCR2_CH3b                   RI_ASCR2_CH3b_Msk                      /*!< CH3b selection bit */

+#define RI_ASCR2_CH6b_Pos               (20U)                                  

+#define RI_ASCR2_CH6b_Msk               (0x1UL << RI_ASCR2_CH6b_Pos)            /*!< 0x00100000 */

+#define RI_ASCR2_CH6b                   RI_ASCR2_CH6b_Msk                      /*!< CH6b selection bit */

+#define RI_ASCR2_CH7b_Pos               (21U)                                  

+#define RI_ASCR2_CH7b_Msk               (0x1UL << RI_ASCR2_CH7b_Pos)            /*!< 0x00200000 */

+#define RI_ASCR2_CH7b                   RI_ASCR2_CH7b_Msk                      /*!< CH7b selection bit */

+#define RI_ASCR2_CH8b_Pos               (22U)                                  

+#define RI_ASCR2_CH8b_Msk               (0x1UL << RI_ASCR2_CH8b_Pos)            /*!< 0x00400000 */

+#define RI_ASCR2_CH8b                   RI_ASCR2_CH8b_Msk                      /*!< CH8b selection bit */

+#define RI_ASCR2_CH9b_Pos               (23U)                                  

+#define RI_ASCR2_CH9b_Msk               (0x1UL << RI_ASCR2_CH9b_Pos)            /*!< 0x00800000 */

+#define RI_ASCR2_CH9b                   RI_ASCR2_CH9b_Msk                      /*!< CH9b selection bit */

+#define RI_ASCR2_CH10b_Pos              (24U)                                  

+#define RI_ASCR2_CH10b_Msk              (0x1UL << RI_ASCR2_CH10b_Pos)           /*!< 0x01000000 */

+#define RI_ASCR2_CH10b                  RI_ASCR2_CH10b_Msk                     /*!< CH10b selection bit */

+#define RI_ASCR2_CH11b_Pos              (25U)                                  

+#define RI_ASCR2_CH11b_Msk              (0x1UL << RI_ASCR2_CH11b_Pos)           /*!< 0x02000000 */

+#define RI_ASCR2_CH11b                  RI_ASCR2_CH11b_Msk                     /*!< CH11b selection bit */

+#define RI_ASCR2_CH12b_Pos              (26U)                                  

+#define RI_ASCR2_CH12b_Msk              (0x1UL << RI_ASCR2_CH12b_Pos)           /*!< 0x04000000 */

+#define RI_ASCR2_CH12b                  RI_ASCR2_CH12b_Msk                     /*!< CH12b selection bit */

+

+/********************  Bit definition for RI_HYSCR1 register  ********************/

+#define RI_HYSCR1_PA_Pos                (0U)                                   

+#define RI_HYSCR1_PA_Msk                (0xFFFFUL << RI_HYSCR1_PA_Pos)          /*!< 0x0000FFFF */

+#define RI_HYSCR1_PA                    RI_HYSCR1_PA_Msk                       /*!< PA[15:0] Port A Hysteresis selection */

+#define RI_HYSCR1_PA_0                  (0x0001UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000001 */

+#define RI_HYSCR1_PA_1                  (0x0002UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000002 */

+#define RI_HYSCR1_PA_2                  (0x0004UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000004 */

+#define RI_HYSCR1_PA_3                  (0x0008UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000008 */

+#define RI_HYSCR1_PA_4                  (0x0010UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000010 */

+#define RI_HYSCR1_PA_5                  (0x0020UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000020 */

+#define RI_HYSCR1_PA_6                  (0x0040UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000040 */

+#define RI_HYSCR1_PA_7                  (0x0080UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000080 */

+#define RI_HYSCR1_PA_8                  (0x0100UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000100 */

+#define RI_HYSCR1_PA_9                  (0x0200UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000200 */

+#define RI_HYSCR1_PA_10                 (0x0400UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000400 */

+#define RI_HYSCR1_PA_11                 (0x0800UL << RI_HYSCR1_PA_Pos)          /*!< 0x00000800 */

+#define RI_HYSCR1_PA_12                 (0x1000UL << RI_HYSCR1_PA_Pos)          /*!< 0x00001000 */

+#define RI_HYSCR1_PA_13                 (0x2000UL << RI_HYSCR1_PA_Pos)          /*!< 0x00002000 */

+#define RI_HYSCR1_PA_14                 (0x4000UL << RI_HYSCR1_PA_Pos)          /*!< 0x00004000 */

+#define RI_HYSCR1_PA_15                 (0x8000UL << RI_HYSCR1_PA_Pos)          /*!< 0x00008000 */

+

+#define RI_HYSCR1_PB_Pos                (16U)                                  

+#define RI_HYSCR1_PB_Msk                (0xFFFFUL << RI_HYSCR1_PB_Pos)          /*!< 0xFFFF0000 */

+#define RI_HYSCR1_PB                    RI_HYSCR1_PB_Msk                       /*!< PB[15:0] Port B Hysteresis selection */

+#define RI_HYSCR1_PB_0                  (0x0001UL << RI_HYSCR1_PB_Pos)          /*!< 0x00010000 */

+#define RI_HYSCR1_PB_1                  (0x0002UL << RI_HYSCR1_PB_Pos)          /*!< 0x00020000 */

+#define RI_HYSCR1_PB_2                  (0x0004UL << RI_HYSCR1_PB_Pos)          /*!< 0x00040000 */

+#define RI_HYSCR1_PB_3                  (0x0008UL << RI_HYSCR1_PB_Pos)          /*!< 0x00080000 */

+#define RI_HYSCR1_PB_4                  (0x0010UL << RI_HYSCR1_PB_Pos)          /*!< 0x00100000 */

+#define RI_HYSCR1_PB_5                  (0x0020UL << RI_HYSCR1_PB_Pos)          /*!< 0x00200000 */

+#define RI_HYSCR1_PB_6                  (0x0040UL << RI_HYSCR1_PB_Pos)          /*!< 0x00400000 */

+#define RI_HYSCR1_PB_7                  (0x0080UL << RI_HYSCR1_PB_Pos)          /*!< 0x00800000 */

+#define RI_HYSCR1_PB_8                  (0x0100UL << RI_HYSCR1_PB_Pos)          /*!< 0x01000000 */

+#define RI_HYSCR1_PB_9                  (0x0200UL << RI_HYSCR1_PB_Pos)          /*!< 0x02000000 */

+#define RI_HYSCR1_PB_10                 (0x0400UL << RI_HYSCR1_PB_Pos)          /*!< 0x04000000 */

+#define RI_HYSCR1_PB_11                 (0x0800UL << RI_HYSCR1_PB_Pos)          /*!< 0x08000000 */

+#define RI_HYSCR1_PB_12                 (0x1000UL << RI_HYSCR1_PB_Pos)          /*!< 0x10000000 */

+#define RI_HYSCR1_PB_13                 (0x2000UL << RI_HYSCR1_PB_Pos)          /*!< 0x20000000 */

+#define RI_HYSCR1_PB_14                 (0x4000UL << RI_HYSCR1_PB_Pos)          /*!< 0x40000000 */

+#define RI_HYSCR1_PB_15                 (0x8000UL << RI_HYSCR1_PB_Pos)          /*!< 0x80000000 */

+

+/********************  Bit definition for RI_HYSCR2 register  ********************/

+#define RI_HYSCR2_PC_Pos                (0U)                                   

+#define RI_HYSCR2_PC_Msk                (0xFFFFUL << RI_HYSCR2_PC_Pos)          /*!< 0x0000FFFF */

+#define RI_HYSCR2_PC                    RI_HYSCR2_PC_Msk                       /*!< PC[15:0] Port C Hysteresis selection */

+#define RI_HYSCR2_PC_0                  (0x0001UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000001 */

+#define RI_HYSCR2_PC_1                  (0x0002UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000002 */

+#define RI_HYSCR2_PC_2                  (0x0004UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000004 */

+#define RI_HYSCR2_PC_3                  (0x0008UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000008 */

+#define RI_HYSCR2_PC_4                  (0x0010UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000010 */

+#define RI_HYSCR2_PC_5                  (0x0020UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000020 */

+#define RI_HYSCR2_PC_6                  (0x0040UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000040 */

+#define RI_HYSCR2_PC_7                  (0x0080UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000080 */

+#define RI_HYSCR2_PC_8                  (0x0100UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000100 */

+#define RI_HYSCR2_PC_9                  (0x0200UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000200 */

+#define RI_HYSCR2_PC_10                 (0x0400UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000400 */

+#define RI_HYSCR2_PC_11                 (0x0800UL << RI_HYSCR2_PC_Pos)          /*!< 0x00000800 */

+#define RI_HYSCR2_PC_12                 (0x1000UL << RI_HYSCR2_PC_Pos)          /*!< 0x00001000 */

+#define RI_HYSCR2_PC_13                 (0x2000UL << RI_HYSCR2_PC_Pos)          /*!< 0x00002000 */

+#define RI_HYSCR2_PC_14                 (0x4000UL << RI_HYSCR2_PC_Pos)          /*!< 0x00004000 */

+#define RI_HYSCR2_PC_15                 (0x8000UL << RI_HYSCR2_PC_Pos)          /*!< 0x00008000 */

+

+#define RI_HYSCR2_PD_Pos                (16U)                                  

+#define RI_HYSCR2_PD_Msk                (0xFFFFUL << RI_HYSCR2_PD_Pos)          /*!< 0xFFFF0000 */

+#define RI_HYSCR2_PD                    RI_HYSCR2_PD_Msk                       /*!< PD[15:0] Port D Hysteresis selection */

+#define RI_HYSCR2_PD_0                  (0x0001UL << RI_HYSCR2_PD_Pos)          /*!< 0x00010000 */

+#define RI_HYSCR2_PD_1                  (0x0002UL << RI_HYSCR2_PD_Pos)          /*!< 0x00020000 */

+#define RI_HYSCR2_PD_2                  (0x0004UL << RI_HYSCR2_PD_Pos)          /*!< 0x00040000 */

+#define RI_HYSCR2_PD_3                  (0x0008UL << RI_HYSCR2_PD_Pos)          /*!< 0x00080000 */

+#define RI_HYSCR2_PD_4                  (0x0010UL << RI_HYSCR2_PD_Pos)          /*!< 0x00100000 */

+#define RI_HYSCR2_PD_5                  (0x0020UL << RI_HYSCR2_PD_Pos)          /*!< 0x00200000 */

+#define RI_HYSCR2_PD_6                  (0x0040UL << RI_HYSCR2_PD_Pos)          /*!< 0x00400000 */

+#define RI_HYSCR2_PD_7                  (0x0080UL << RI_HYSCR2_PD_Pos)          /*!< 0x00800000 */

+#define RI_HYSCR2_PD_8                  (0x0100UL << RI_HYSCR2_PD_Pos)          /*!< 0x01000000 */

+#define RI_HYSCR2_PD_9                  (0x0200UL << RI_HYSCR2_PD_Pos)          /*!< 0x02000000 */

+#define RI_HYSCR2_PD_10                 (0x0400UL << RI_HYSCR2_PD_Pos)          /*!< 0x04000000 */

+#define RI_HYSCR2_PD_11                 (0x0800UL << RI_HYSCR2_PD_Pos)          /*!< 0x08000000 */

+#define RI_HYSCR2_PD_12                 (0x1000UL << RI_HYSCR2_PD_Pos)          /*!< 0x10000000 */

+#define RI_HYSCR2_PD_13                 (0x2000UL << RI_HYSCR2_PD_Pos)          /*!< 0x20000000 */

+#define RI_HYSCR2_PD_14                 (0x4000UL << RI_HYSCR2_PD_Pos)          /*!< 0x40000000 */

+#define RI_HYSCR2_PD_15                 (0x8000UL << RI_HYSCR2_PD_Pos)          /*!< 0x80000000 */

+

+/********************  Bit definition for RI_HYSCR3 register  ********************/

+#define RI_HYSCR3_PE_Pos                (0U)                                   

+#define RI_HYSCR3_PE_Msk                (0xFFFFUL << RI_HYSCR3_PE_Pos)          /*!< 0x0000FFFF */

+#define RI_HYSCR3_PE                    RI_HYSCR3_PE_Msk                       /*!< PE[15:0] Port E Hysteresis selection */

+#define RI_HYSCR3_PE_0                  (0x0001UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000001 */

+#define RI_HYSCR3_PE_1                  (0x0002UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000002 */

+#define RI_HYSCR3_PE_2                  (0x0004UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000004 */

+#define RI_HYSCR3_PE_3                  (0x0008UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000008 */

+#define RI_HYSCR3_PE_4                  (0x0010UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000010 */

+#define RI_HYSCR3_PE_5                  (0x0020UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000020 */

+#define RI_HYSCR3_PE_6                  (0x0040UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000040 */

+#define RI_HYSCR3_PE_7                  (0x0080UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000080 */

+#define RI_HYSCR3_PE_8                  (0x0100UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000100 */

+#define RI_HYSCR3_PE_9                  (0x0200UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000200 */

+#define RI_HYSCR3_PE_10                 (0x0400UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000400 */

+#define RI_HYSCR3_PE_11                 (0x0800UL << RI_HYSCR3_PE_Pos)          /*!< 0x00000800 */

+#define RI_HYSCR3_PE_12                 (0x1000UL << RI_HYSCR3_PE_Pos)          /*!< 0x00001000 */

+#define RI_HYSCR3_PE_13                 (0x2000UL << RI_HYSCR3_PE_Pos)          /*!< 0x00002000 */

+#define RI_HYSCR3_PE_14                 (0x4000UL << RI_HYSCR3_PE_Pos)          /*!< 0x00004000 */

+#define RI_HYSCR3_PE_15                 (0x8000UL << RI_HYSCR3_PE_Pos)          /*!< 0x00008000 */

+#define RI_HYSCR3_PF_Pos                (16U)                                  

+#define RI_HYSCR3_PF_Msk                (0xFFFFUL << RI_HYSCR3_PF_Pos)          /*!< 0xFFFF0000 */

+#define RI_HYSCR3_PF                    RI_HYSCR3_PF_Msk                       /*!< PF[15:0] Port F Hysteresis selection */

+#define RI_HYSCR3_PF_0                  (0x0001UL << RI_HYSCR3_PF_Pos)          /*!< 0x00010000 */

+#define RI_HYSCR3_PF_1                  (0x0002UL << RI_HYSCR3_PF_Pos)          /*!< 0x00020000 */

+#define RI_HYSCR3_PF_2                  (0x0004UL << RI_HYSCR3_PF_Pos)          /*!< 0x00040000 */

+#define RI_HYSCR3_PF_3                  (0x0008UL << RI_HYSCR3_PF_Pos)          /*!< 0x00080000 */

+#define RI_HYSCR3_PF_4                  (0x0010UL << RI_HYSCR3_PF_Pos)          /*!< 0x00100000 */

+#define RI_HYSCR3_PF_5                  (0x0020UL << RI_HYSCR3_PF_Pos)          /*!< 0x00200000 */

+#define RI_HYSCR3_PF_6                  (0x0040UL << RI_HYSCR3_PF_Pos)          /*!< 0x00400000 */

+#define RI_HYSCR3_PF_7                  (0x0080UL << RI_HYSCR3_PF_Pos)          /*!< 0x00800000 */

+#define RI_HYSCR3_PF_8                  (0x0100UL << RI_HYSCR3_PF_Pos)          /*!< 0x01000000 */

+#define RI_HYSCR3_PF_9                  (0x0200UL << RI_HYSCR3_PF_Pos)          /*!< 0x02000000 */

+#define RI_HYSCR3_PF_10                 (0x0400UL << RI_HYSCR3_PF_Pos)          /*!< 0x04000000 */

+#define RI_HYSCR3_PF_11                 (0x0800UL << RI_HYSCR3_PF_Pos)          /*!< 0x08000000 */

+#define RI_HYSCR3_PF_12                 (0x1000UL << RI_HYSCR3_PF_Pos)          /*!< 0x10000000 */

+#define RI_HYSCR3_PF_13                 (0x2000UL << RI_HYSCR3_PF_Pos)          /*!< 0x20000000 */

+#define RI_HYSCR3_PF_14                 (0x4000UL << RI_HYSCR3_PF_Pos)          /*!< 0x40000000 */

+#define RI_HYSCR3_PF_15                 (0x8000UL << RI_HYSCR3_PF_Pos)          /*!< 0x80000000 */

+/********************  Bit definition for RI_HYSCR4 register  ********************/

+#define RI_HYSCR4_PG_Pos                (0U)                                   

+#define RI_HYSCR4_PG_Msk                (0xFFFFUL << RI_HYSCR4_PG_Pos)          /*!< 0x0000FFFF */

+#define RI_HYSCR4_PG                    RI_HYSCR4_PG_Msk                       /*!< PG[15:0] Port G Hysteresis selection */

+#define RI_HYSCR4_PG_0                  (0x0001UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000001 */

+#define RI_HYSCR4_PG_1                  (0x0002UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000002 */

+#define RI_HYSCR4_PG_2                  (0x0004UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000004 */

+#define RI_HYSCR4_PG_3                  (0x0008UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000008 */

+#define RI_HYSCR4_PG_4                  (0x0010UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000010 */

+#define RI_HYSCR4_PG_5                  (0x0020UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000020 */

+#define RI_HYSCR4_PG_6                  (0x0040UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000040 */

+#define RI_HYSCR4_PG_7                  (0x0080UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000080 */

+#define RI_HYSCR4_PG_8                  (0x0100UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000100 */

+#define RI_HYSCR4_PG_9                  (0x0200UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000200 */

+#define RI_HYSCR4_PG_10                 (0x0400UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000400 */

+#define RI_HYSCR4_PG_11                 (0x0800UL << RI_HYSCR4_PG_Pos)          /*!< 0x00000800 */

+#define RI_HYSCR4_PG_12                 (0x1000UL << RI_HYSCR4_PG_Pos)          /*!< 0x00001000 */

+#define RI_HYSCR4_PG_13                 (0x2000UL << RI_HYSCR4_PG_Pos)          /*!< 0x00002000 */

+#define RI_HYSCR4_PG_14                 (0x4000UL << RI_HYSCR4_PG_Pos)          /*!< 0x00004000 */

+#define RI_HYSCR4_PG_15                 (0x8000UL << RI_HYSCR4_PG_Pos)          /*!< 0x00008000 */

+

+/********************  Bit definition for RI_ASMR1 register  ********************/

+#define RI_ASMR1_PA_Pos                 (0U)                                   

+#define RI_ASMR1_PA_Msk                 (0xFFFFUL << RI_ASMR1_PA_Pos)           /*!< 0x0000FFFF */

+#define RI_ASMR1_PA                     RI_ASMR1_PA_Msk                        /*!< PA[15:0] Port A selection*/

+#define RI_ASMR1_PA_0                   (0x0001UL << RI_ASMR1_PA_Pos)           /*!< 0x00000001 */

+#define RI_ASMR1_PA_1                   (0x0002UL << RI_ASMR1_PA_Pos)           /*!< 0x00000002 */

+#define RI_ASMR1_PA_2                   (0x0004UL << RI_ASMR1_PA_Pos)           /*!< 0x00000004 */

+#define RI_ASMR1_PA_3                   (0x0008UL << RI_ASMR1_PA_Pos)           /*!< 0x00000008 */

+#define RI_ASMR1_PA_4                   (0x0010UL << RI_ASMR1_PA_Pos)           /*!< 0x00000010 */

+#define RI_ASMR1_PA_5                   (0x0020UL << RI_ASMR1_PA_Pos)           /*!< 0x00000020 */

+#define RI_ASMR1_PA_6                   (0x0040UL << RI_ASMR1_PA_Pos)           /*!< 0x00000040 */

+#define RI_ASMR1_PA_7                   (0x0080UL << RI_ASMR1_PA_Pos)           /*!< 0x00000080 */

+#define RI_ASMR1_PA_8                   (0x0100UL << RI_ASMR1_PA_Pos)           /*!< 0x00000100 */

+#define RI_ASMR1_PA_9                   (0x0200UL << RI_ASMR1_PA_Pos)           /*!< 0x00000200 */

+#define RI_ASMR1_PA_10                  (0x0400UL << RI_ASMR1_PA_Pos)           /*!< 0x00000400 */

+#define RI_ASMR1_PA_11                  (0x0800UL << RI_ASMR1_PA_Pos)           /*!< 0x00000800 */

+#define RI_ASMR1_PA_12                  (0x1000UL << RI_ASMR1_PA_Pos)           /*!< 0x00001000 */

+#define RI_ASMR1_PA_13                  (0x2000UL << RI_ASMR1_PA_Pos)           /*!< 0x00002000 */

+#define RI_ASMR1_PA_14                  (0x4000UL << RI_ASMR1_PA_Pos)           /*!< 0x00004000 */

+#define RI_ASMR1_PA_15                  (0x8000UL << RI_ASMR1_PA_Pos)           /*!< 0x00008000 */

+

+/********************  Bit definition for RI_CMR1 register  ********************/

+#define RI_CMR1_PA_Pos                  (0U)                                   

+#define RI_CMR1_PA_Msk                  (0xFFFFUL << RI_CMR1_PA_Pos)            /*!< 0x0000FFFF */

+#define RI_CMR1_PA                      RI_CMR1_PA_Msk                         /*!< PA[15:0] Port A selection*/

+#define RI_CMR1_PA_0                    (0x0001UL << RI_CMR1_PA_Pos)            /*!< 0x00000001 */

+#define RI_CMR1_PA_1                    (0x0002UL << RI_CMR1_PA_Pos)            /*!< 0x00000002 */

+#define RI_CMR1_PA_2                    (0x0004UL << RI_CMR1_PA_Pos)            /*!< 0x00000004 */

+#define RI_CMR1_PA_3                    (0x0008UL << RI_CMR1_PA_Pos)            /*!< 0x00000008 */

+#define RI_CMR1_PA_4                    (0x0010UL << RI_CMR1_PA_Pos)            /*!< 0x00000010 */

+#define RI_CMR1_PA_5                    (0x0020UL << RI_CMR1_PA_Pos)            /*!< 0x00000020 */

+#define RI_CMR1_PA_6                    (0x0040UL << RI_CMR1_PA_Pos)            /*!< 0x00000040 */

+#define RI_CMR1_PA_7                    (0x0080UL << RI_CMR1_PA_Pos)            /*!< 0x00000080 */

+#define RI_CMR1_PA_8                    (0x0100UL << RI_CMR1_PA_Pos)            /*!< 0x00000100 */

+#define RI_CMR1_PA_9                    (0x0200UL << RI_CMR1_PA_Pos)            /*!< 0x00000200 */

+#define RI_CMR1_PA_10                   (0x0400UL << RI_CMR1_PA_Pos)            /*!< 0x00000400 */

+#define RI_CMR1_PA_11                   (0x0800UL << RI_CMR1_PA_Pos)            /*!< 0x00000800 */

+#define RI_CMR1_PA_12                   (0x1000UL << RI_CMR1_PA_Pos)            /*!< 0x00001000 */

+#define RI_CMR1_PA_13                   (0x2000UL << RI_CMR1_PA_Pos)            /*!< 0x00002000 */

+#define RI_CMR1_PA_14                   (0x4000UL << RI_CMR1_PA_Pos)            /*!< 0x00004000 */

+#define RI_CMR1_PA_15                   (0x8000UL << RI_CMR1_PA_Pos)            /*!< 0x00008000 */

+

+/********************  Bit definition for RI_CICR1 register  ********************/

+#define RI_CICR1_PA_Pos                 (0U)                                   

+#define RI_CICR1_PA_Msk                 (0xFFFFUL << RI_CICR1_PA_Pos)           /*!< 0x0000FFFF */

+#define RI_CICR1_PA                     RI_CICR1_PA_Msk                        /*!< PA[15:0] Port A selection*/

+#define RI_CICR1_PA_0                   (0x0001UL << RI_CICR1_PA_Pos)           /*!< 0x00000001 */

+#define RI_CICR1_PA_1                   (0x0002UL << RI_CICR1_PA_Pos)           /*!< 0x00000002 */

+#define RI_CICR1_PA_2                   (0x0004UL << RI_CICR1_PA_Pos)           /*!< 0x00000004 */

+#define RI_CICR1_PA_3                   (0x0008UL << RI_CICR1_PA_Pos)           /*!< 0x00000008 */

+#define RI_CICR1_PA_4                   (0x0010UL << RI_CICR1_PA_Pos)           /*!< 0x00000010 */

+#define RI_CICR1_PA_5                   (0x0020UL << RI_CICR1_PA_Pos)           /*!< 0x00000020 */

+#define RI_CICR1_PA_6                   (0x0040UL << RI_CICR1_PA_Pos)           /*!< 0x00000040 */

+#define RI_CICR1_PA_7                   (0x0080UL << RI_CICR1_PA_Pos)           /*!< 0x00000080 */

+#define RI_CICR1_PA_8                   (0x0100UL << RI_CICR1_PA_Pos)           /*!< 0x00000100 */

+#define RI_CICR1_PA_9                   (0x0200UL << RI_CICR1_PA_Pos)           /*!< 0x00000200 */

+#define RI_CICR1_PA_10                  (0x0400UL << RI_CICR1_PA_Pos)           /*!< 0x00000400 */

+#define RI_CICR1_PA_11                  (0x0800UL << RI_CICR1_PA_Pos)           /*!< 0x00000800 */

+#define RI_CICR1_PA_12                  (0x1000UL << RI_CICR1_PA_Pos)           /*!< 0x00001000 */

+#define RI_CICR1_PA_13                  (0x2000UL << RI_CICR1_PA_Pos)           /*!< 0x00002000 */

+#define RI_CICR1_PA_14                  (0x4000UL << RI_CICR1_PA_Pos)           /*!< 0x00004000 */

+#define RI_CICR1_PA_15                  (0x8000UL << RI_CICR1_PA_Pos)           /*!< 0x00008000 */

+

+/********************  Bit definition for RI_ASMR2 register  ********************/

+#define RI_ASMR2_PB_Pos                 (0U)                                   

+#define RI_ASMR2_PB_Msk                 (0xFFFFUL << RI_ASMR2_PB_Pos)           /*!< 0x0000FFFF */

+#define RI_ASMR2_PB                     RI_ASMR2_PB_Msk                        /*!< PB[15:0] Port B selection */

+#define RI_ASMR2_PB_0                   (0x0001UL << RI_ASMR2_PB_Pos)           /*!< 0x00000001 */

+#define RI_ASMR2_PB_1                   (0x0002UL << RI_ASMR2_PB_Pos)           /*!< 0x00000002 */

+#define RI_ASMR2_PB_2                   (0x0004UL << RI_ASMR2_PB_Pos)           /*!< 0x00000004 */

+#define RI_ASMR2_PB_3                   (0x0008UL << RI_ASMR2_PB_Pos)           /*!< 0x00000008 */

+#define RI_ASMR2_PB_4                   (0x0010UL << RI_ASMR2_PB_Pos)           /*!< 0x00000010 */

+#define RI_ASMR2_PB_5                   (0x0020UL << RI_ASMR2_PB_Pos)           /*!< 0x00000020 */

+#define RI_ASMR2_PB_6                   (0x0040UL << RI_ASMR2_PB_Pos)           /*!< 0x00000040 */

+#define RI_ASMR2_PB_7                   (0x0080UL << RI_ASMR2_PB_Pos)           /*!< 0x00000080 */

+#define RI_ASMR2_PB_8                   (0x0100UL << RI_ASMR2_PB_Pos)           /*!< 0x00000100 */

+#define RI_ASMR2_PB_9                   (0x0200UL << RI_ASMR2_PB_Pos)           /*!< 0x00000200 */

+#define RI_ASMR2_PB_10                  (0x0400UL << RI_ASMR2_PB_Pos)           /*!< 0x00000400 */

+#define RI_ASMR2_PB_11                  (0x0800UL << RI_ASMR2_PB_Pos)           /*!< 0x00000800 */

+#define RI_ASMR2_PB_12                  (0x1000UL << RI_ASMR2_PB_Pos)           /*!< 0x00001000 */

+#define RI_ASMR2_PB_13                  (0x2000UL << RI_ASMR2_PB_Pos)           /*!< 0x00002000 */

+#define RI_ASMR2_PB_14                  (0x4000UL << RI_ASMR2_PB_Pos)           /*!< 0x00004000 */

+#define RI_ASMR2_PB_15                  (0x8000UL << RI_ASMR2_PB_Pos)           /*!< 0x00008000 */

+

+/********************  Bit definition for RI_CMR2 register  ********************/

+#define RI_CMR2_PB_Pos                  (0U)                                   

+#define RI_CMR2_PB_Msk                  (0xFFFFUL << RI_CMR2_PB_Pos)            /*!< 0x0000FFFF */

+#define RI_CMR2_PB                      RI_CMR2_PB_Msk                         /*!< PB[15:0] Port B selection */

+#define RI_CMR2_PB_0                    (0x0001UL << RI_CMR2_PB_Pos)            /*!< 0x00000001 */

+#define RI_CMR2_PB_1                    (0x0002UL << RI_CMR2_PB_Pos)            /*!< 0x00000002 */

+#define RI_CMR2_PB_2                    (0x0004UL << RI_CMR2_PB_Pos)            /*!< 0x00000004 */

+#define RI_CMR2_PB_3                    (0x0008UL << RI_CMR2_PB_Pos)            /*!< 0x00000008 */

+#define RI_CMR2_PB_4                    (0x0010UL << RI_CMR2_PB_Pos)            /*!< 0x00000010 */

+#define RI_CMR2_PB_5                    (0x0020UL << RI_CMR2_PB_Pos)            /*!< 0x00000020 */

+#define RI_CMR2_PB_6                    (0x0040UL << RI_CMR2_PB_Pos)            /*!< 0x00000040 */

+#define RI_CMR2_PB_7                    (0x0080UL << RI_CMR2_PB_Pos)            /*!< 0x00000080 */

+#define RI_CMR2_PB_8                    (0x0100UL << RI_CMR2_PB_Pos)            /*!< 0x00000100 */

+#define RI_CMR2_PB_9                    (0x0200UL << RI_CMR2_PB_Pos)            /*!< 0x00000200 */

+#define RI_CMR2_PB_10                   (0x0400UL << RI_CMR2_PB_Pos)            /*!< 0x00000400 */

+#define RI_CMR2_PB_11                   (0x0800UL << RI_CMR2_PB_Pos)            /*!< 0x00000800 */

+#define RI_CMR2_PB_12                   (0x1000UL << RI_CMR2_PB_Pos)            /*!< 0x00001000 */

+#define RI_CMR2_PB_13                   (0x2000UL << RI_CMR2_PB_Pos)            /*!< 0x00002000 */

+#define RI_CMR2_PB_14                   (0x4000UL << RI_CMR2_PB_Pos)            /*!< 0x00004000 */

+#define RI_CMR2_PB_15                   (0x8000UL << RI_CMR2_PB_Pos)            /*!< 0x00008000 */

+

+/********************  Bit definition for RI_CICR2 register  ********************/

+#define RI_CICR2_PB_Pos                 (0U)                                   

+#define RI_CICR2_PB_Msk                 (0xFFFFUL << RI_CICR2_PB_Pos)           /*!< 0x0000FFFF */

+#define RI_CICR2_PB                     RI_CICR2_PB_Msk                        /*!< PB[15:0] Port B selection */

+#define RI_CICR2_PB_0                   (0x0001UL << RI_CICR2_PB_Pos)           /*!< 0x00000001 */

+#define RI_CICR2_PB_1                   (0x0002UL << RI_CICR2_PB_Pos)           /*!< 0x00000002 */

+#define RI_CICR2_PB_2                   (0x0004UL << RI_CICR2_PB_Pos)           /*!< 0x00000004 */

+#define RI_CICR2_PB_3                   (0x0008UL << RI_CICR2_PB_Pos)           /*!< 0x00000008 */

+#define RI_CICR2_PB_4                   (0x0010UL << RI_CICR2_PB_Pos)           /*!< 0x00000010 */

+#define RI_CICR2_PB_5                   (0x0020UL << RI_CICR2_PB_Pos)           /*!< 0x00000020 */

+#define RI_CICR2_PB_6                   (0x0040UL << RI_CICR2_PB_Pos)           /*!< 0x00000040 */

+#define RI_CICR2_PB_7                   (0x0080UL << RI_CICR2_PB_Pos)           /*!< 0x00000080 */

+#define RI_CICR2_PB_8                   (0x0100UL << RI_CICR2_PB_Pos)           /*!< 0x00000100 */

+#define RI_CICR2_PB_9                   (0x0200UL << RI_CICR2_PB_Pos)           /*!< 0x00000200 */

+#define RI_CICR2_PB_10                  (0x0400UL << RI_CICR2_PB_Pos)           /*!< 0x00000400 */

+#define RI_CICR2_PB_11                  (0x0800UL << RI_CICR2_PB_Pos)           /*!< 0x00000800 */

+#define RI_CICR2_PB_12                  (0x1000UL << RI_CICR2_PB_Pos)           /*!< 0x00001000 */

+#define RI_CICR2_PB_13                  (0x2000UL << RI_CICR2_PB_Pos)           /*!< 0x00002000 */

+#define RI_CICR2_PB_14                  (0x4000UL << RI_CICR2_PB_Pos)           /*!< 0x00004000 */

+#define RI_CICR2_PB_15                  (0x8000UL << RI_CICR2_PB_Pos)           /*!< 0x00008000 */

+

+/********************  Bit definition for RI_ASMR3 register  ********************/

+#define RI_ASMR3_PC_Pos                 (0U)                                   

+#define RI_ASMR3_PC_Msk                 (0xFFFFUL << RI_ASMR3_PC_Pos)           /*!< 0x0000FFFF */

+#define RI_ASMR3_PC                     RI_ASMR3_PC_Msk                        /*!< PC[15:0] Port C selection */

+#define RI_ASMR3_PC_0                   (0x0001UL << RI_ASMR3_PC_Pos)           /*!< 0x00000001 */

+#define RI_ASMR3_PC_1                   (0x0002UL << RI_ASMR3_PC_Pos)           /*!< 0x00000002 */

+#define RI_ASMR3_PC_2                   (0x0004UL << RI_ASMR3_PC_Pos)           /*!< 0x00000004 */

+#define RI_ASMR3_PC_3                   (0x0008UL << RI_ASMR3_PC_Pos)           /*!< 0x00000008 */

+#define RI_ASMR3_PC_4                   (0x0010UL << RI_ASMR3_PC_Pos)           /*!< 0x00000010 */

+#define RI_ASMR3_PC_5                   (0x0020UL << RI_ASMR3_PC_Pos)           /*!< 0x00000020 */

+#define RI_ASMR3_PC_6                   (0x0040UL << RI_ASMR3_PC_Pos)           /*!< 0x00000040 */

+#define RI_ASMR3_PC_7                   (0x0080UL << RI_ASMR3_PC_Pos)           /*!< 0x00000080 */

+#define RI_ASMR3_PC_8                   (0x0100UL << RI_ASMR3_PC_Pos)           /*!< 0x00000100 */

+#define RI_ASMR3_PC_9                   (0x0200UL << RI_ASMR3_PC_Pos)           /*!< 0x00000200 */

+#define RI_ASMR3_PC_10                  (0x0400UL << RI_ASMR3_PC_Pos)           /*!< 0x00000400 */

+#define RI_ASMR3_PC_11                  (0x0800UL << RI_ASMR3_PC_Pos)           /*!< 0x00000800 */

+#define RI_ASMR3_PC_12                  (0x1000UL << RI_ASMR3_PC_Pos)           /*!< 0x00001000 */

+#define RI_ASMR3_PC_13                  (0x2000UL << RI_ASMR3_PC_Pos)           /*!< 0x00002000 */

+#define RI_ASMR3_PC_14                  (0x4000UL << RI_ASMR3_PC_Pos)           /*!< 0x00004000 */

+#define RI_ASMR3_PC_15                  (0x8000UL << RI_ASMR3_PC_Pos)           /*!< 0x00008000 */

+

+/********************  Bit definition for RI_CMR3 register  ********************/

+#define RI_CMR3_PC_Pos                  (0U)                                   

+#define RI_CMR3_PC_Msk                  (0xFFFFUL << RI_CMR3_PC_Pos)            /*!< 0x0000FFFF */

+#define RI_CMR3_PC                      RI_CMR3_PC_Msk                         /*!< PC[15:0] Port C selection */

+#define RI_CMR3_PC_0                    (0x0001UL << RI_CMR3_PC_Pos)            /*!< 0x00000001 */

+#define RI_CMR3_PC_1                    (0x0002UL << RI_CMR3_PC_Pos)            /*!< 0x00000002 */

+#define RI_CMR3_PC_2                    (0x0004UL << RI_CMR3_PC_Pos)            /*!< 0x00000004 */

+#define RI_CMR3_PC_3                    (0x0008UL << RI_CMR3_PC_Pos)            /*!< 0x00000008 */

+#define RI_CMR3_PC_4                    (0x0010UL << RI_CMR3_PC_Pos)            /*!< 0x00000010 */

+#define RI_CMR3_PC_5                    (0x0020UL << RI_CMR3_PC_Pos)            /*!< 0x00000020 */

+#define RI_CMR3_PC_6                    (0x0040UL << RI_CMR3_PC_Pos)            /*!< 0x00000040 */

+#define RI_CMR3_PC_7                    (0x0080UL << RI_CMR3_PC_Pos)            /*!< 0x00000080 */

+#define RI_CMR3_PC_8                    (0x0100UL << RI_CMR3_PC_Pos)            /*!< 0x00000100 */

+#define RI_CMR3_PC_9                    (0x0200UL << RI_CMR3_PC_Pos)            /*!< 0x00000200 */

+#define RI_CMR3_PC_10                   (0x0400UL << RI_CMR3_PC_Pos)            /*!< 0x00000400 */

+#define RI_CMR3_PC_11                   (0x0800UL << RI_CMR3_PC_Pos)            /*!< 0x00000800 */

+#define RI_CMR3_PC_12                   (0x1000UL << RI_CMR3_PC_Pos)            /*!< 0x00001000 */

+#define RI_CMR3_PC_13                   (0x2000UL << RI_CMR3_PC_Pos)            /*!< 0x00002000 */

+#define RI_CMR3_PC_14                   (0x4000UL << RI_CMR3_PC_Pos)            /*!< 0x00004000 */

+#define RI_CMR3_PC_15                   (0x8000UL << RI_CMR3_PC_Pos)            /*!< 0x00008000 */

+

+/********************  Bit definition for RI_CICR3 register  ********************/

+#define RI_CICR3_PC_Pos                 (0U)                                   

+#define RI_CICR3_PC_Msk                 (0xFFFFUL << RI_CICR3_PC_Pos)           /*!< 0x0000FFFF */

+#define RI_CICR3_PC                     RI_CICR3_PC_Msk                        /*!< PC[15:0] Port C selection */

+#define RI_CICR3_PC_0                   (0x0001UL << RI_CICR3_PC_Pos)           /*!< 0x00000001 */

+#define RI_CICR3_PC_1                   (0x0002UL << RI_CICR3_PC_Pos)           /*!< 0x00000002 */

+#define RI_CICR3_PC_2                   (0x0004UL << RI_CICR3_PC_Pos)           /*!< 0x00000004 */

+#define RI_CICR3_PC_3                   (0x0008UL << RI_CICR3_PC_Pos)           /*!< 0x00000008 */

+#define RI_CICR3_PC_4                   (0x0010UL << RI_CICR3_PC_Pos)           /*!< 0x00000010 */

+#define RI_CICR3_PC_5                   (0x0020UL << RI_CICR3_PC_Pos)           /*!< 0x00000020 */

+#define RI_CICR3_PC_6                   (0x0040UL << RI_CICR3_PC_Pos)           /*!< 0x00000040 */

+#define RI_CICR3_PC_7                   (0x0080UL << RI_CICR3_PC_Pos)           /*!< 0x00000080 */

+#define RI_CICR3_PC_8                   (0x0100UL << RI_CICR3_PC_Pos)           /*!< 0x00000100 */

+#define RI_CICR3_PC_9                   (0x0200UL << RI_CICR3_PC_Pos)           /*!< 0x00000200 */

+#define RI_CICR3_PC_10                  (0x0400UL << RI_CICR3_PC_Pos)           /*!< 0x00000400 */

+#define RI_CICR3_PC_11                  (0x0800UL << RI_CICR3_PC_Pos)           /*!< 0x00000800 */

+#define RI_CICR3_PC_12                  (0x1000UL << RI_CICR3_PC_Pos)           /*!< 0x00001000 */

+#define RI_CICR3_PC_13                  (0x2000UL << RI_CICR3_PC_Pos)           /*!< 0x00002000 */

+#define RI_CICR3_PC_14                  (0x4000UL << RI_CICR3_PC_Pos)           /*!< 0x00004000 */

+#define RI_CICR3_PC_15                  (0x8000UL << RI_CICR3_PC_Pos)           /*!< 0x00008000 */

+

+/********************  Bit definition for RI_ASMR4 register  ********************/

+#define RI_ASMR4_PF_Pos                 (0U)                                   

+#define RI_ASMR4_PF_Msk                 (0xFFFFUL << RI_ASMR4_PF_Pos)           /*!< 0x0000FFFF */

+#define RI_ASMR4_PF                     RI_ASMR4_PF_Msk                        /*!< PF[15:0] Port F selection */

+#define RI_ASMR4_PF_0                   (0x0001UL << RI_ASMR4_PF_Pos)           /*!< 0x00000001 */

+#define RI_ASMR4_PF_1                   (0x0002UL << RI_ASMR4_PF_Pos)           /*!< 0x00000002 */

+#define RI_ASMR4_PF_2                   (0x0004UL << RI_ASMR4_PF_Pos)           /*!< 0x00000004 */

+#define RI_ASMR4_PF_3                   (0x0008UL << RI_ASMR4_PF_Pos)           /*!< 0x00000008 */

+#define RI_ASMR4_PF_4                   (0x0010UL << RI_ASMR4_PF_Pos)           /*!< 0x00000010 */

+#define RI_ASMR4_PF_5                   (0x0020UL << RI_ASMR4_PF_Pos)           /*!< 0x00000020 */

+#define RI_ASMR4_PF_6                   (0x0040UL << RI_ASMR4_PF_Pos)           /*!< 0x00000040 */

+#define RI_ASMR4_PF_7                   (0x0080UL << RI_ASMR4_PF_Pos)           /*!< 0x00000080 */

+#define RI_ASMR4_PF_8                   (0x0100UL << RI_ASMR4_PF_Pos)           /*!< 0x00000100 */

+#define RI_ASMR4_PF_9                   (0x0200UL << RI_ASMR4_PF_Pos)           /*!< 0x00000200 */

+#define RI_ASMR4_PF_10                  (0x0400UL << RI_ASMR4_PF_Pos)           /*!< 0x00000400 */

+#define RI_ASMR4_PF_11                  (0x0800UL << RI_ASMR4_PF_Pos)           /*!< 0x00000800 */

+#define RI_ASMR4_PF_12                  (0x1000UL << RI_ASMR4_PF_Pos)           /*!< 0x00001000 */

+#define RI_ASMR4_PF_13                  (0x2000UL << RI_ASMR4_PF_Pos)           /*!< 0x00002000 */

+#define RI_ASMR4_PF_14                  (0x4000UL << RI_ASMR4_PF_Pos)           /*!< 0x00004000 */

+#define RI_ASMR4_PF_15                  (0x8000UL << RI_ASMR4_PF_Pos)           /*!< 0x00008000 */

+

+/********************  Bit definition for RI_CMR4 register  ********************/

+#define RI_CMR4_PF_Pos                  (0U)                                   

+#define RI_CMR4_PF_Msk                  (0xFFFFUL << RI_CMR4_PF_Pos)            /*!< 0x0000FFFF */

+#define RI_CMR4_PF                      RI_CMR4_PF_Msk                         /*!< PF[15:0] Port F selection */

+#define RI_CMR4_PF_0                    (0x0001UL << RI_CMR4_PF_Pos)            /*!< 0x00000001 */

+#define RI_CMR4_PF_1                    (0x0002UL << RI_CMR4_PF_Pos)            /*!< 0x00000002 */

+#define RI_CMR4_PF_2                    (0x0004UL << RI_CMR4_PF_Pos)            /*!< 0x00000004 */

+#define RI_CMR4_PF_3                    (0x0008UL << RI_CMR4_PF_Pos)            /*!< 0x00000008 */

+#define RI_CMR4_PF_4                    (0x0010UL << RI_CMR4_PF_Pos)            /*!< 0x00000010 */

+#define RI_CMR4_PF_5                    (0x0020UL << RI_CMR4_PF_Pos)            /*!< 0x00000020 */

+#define RI_CMR4_PF_6                    (0x0040UL << RI_CMR4_PF_Pos)            /*!< 0x00000040 */

+#define RI_CMR4_PF_7                    (0x0080UL << RI_CMR4_PF_Pos)            /*!< 0x00000080 */

+#define RI_CMR4_PF_8                    (0x0100UL << RI_CMR4_PF_Pos)            /*!< 0x00000100 */

+#define RI_CMR4_PF_9                    (0x0200UL << RI_CMR4_PF_Pos)            /*!< 0x00000200 */

+#define RI_CMR4_PF_10                   (0x0400UL << RI_CMR4_PF_Pos)            /*!< 0x00000400 */

+#define RI_CMR4_PF_11                   (0x0800UL << RI_CMR4_PF_Pos)            /*!< 0x00000800 */

+#define RI_CMR4_PF_12                   (0x1000UL << RI_CMR4_PF_Pos)            /*!< 0x00001000 */

+#define RI_CMR4_PF_13                   (0x2000UL << RI_CMR4_PF_Pos)            /*!< 0x00002000 */

+#define RI_CMR4_PF_14                   (0x4000UL << RI_CMR4_PF_Pos)            /*!< 0x00004000 */

+#define RI_CMR4_PF_15                   (0x8000UL << RI_CMR4_PF_Pos)            /*!< 0x00008000 */

+

+/********************  Bit definition for RI_CICR4 register  ********************/

+#define RI_CICR4_PF_Pos                 (0U)                                   

+#define RI_CICR4_PF_Msk                 (0xFFFFUL << RI_CICR4_PF_Pos)           /*!< 0x0000FFFF */

+#define RI_CICR4_PF                     RI_CICR4_PF_Msk                        /*!< PF[15:0] Port F selection */

+#define RI_CICR4_PF_0                   (0x0001UL << RI_CICR4_PF_Pos)           /*!< 0x00000001 */

+#define RI_CICR4_PF_1                   (0x0002UL << RI_CICR4_PF_Pos)           /*!< 0x00000002 */

+#define RI_CICR4_PF_2                   (0x0004UL << RI_CICR4_PF_Pos)           /*!< 0x00000004 */

+#define RI_CICR4_PF_3                   (0x0008UL << RI_CICR4_PF_Pos)           /*!< 0x00000008 */

+#define RI_CICR4_PF_4                   (0x0010UL << RI_CICR4_PF_Pos)           /*!< 0x00000010 */

+#define RI_CICR4_PF_5                   (0x0020UL << RI_CICR4_PF_Pos)           /*!< 0x00000020 */

+#define RI_CICR4_PF_6                   (0x0040UL << RI_CICR4_PF_Pos)           /*!< 0x00000040 */

+#define RI_CICR4_PF_7                   (0x0080UL << RI_CICR4_PF_Pos)           /*!< 0x00000080 */

+#define RI_CICR4_PF_8                   (0x0100UL << RI_CICR4_PF_Pos)           /*!< 0x00000100 */

+#define RI_CICR4_PF_9                   (0x0200UL << RI_CICR4_PF_Pos)           /*!< 0x00000200 */

+#define RI_CICR4_PF_10                  (0x0400UL << RI_CICR4_PF_Pos)           /*!< 0x00000400 */

+#define RI_CICR4_PF_11                  (0x0800UL << RI_CICR4_PF_Pos)           /*!< 0x00000800 */

+#define RI_CICR4_PF_12                  (0x1000UL << RI_CICR4_PF_Pos)           /*!< 0x00001000 */

+#define RI_CICR4_PF_13                  (0x2000UL << RI_CICR4_PF_Pos)           /*!< 0x00002000 */

+#define RI_CICR4_PF_14                  (0x4000UL << RI_CICR4_PF_Pos)           /*!< 0x00004000 */

+#define RI_CICR4_PF_15                  (0x8000UL << RI_CICR4_PF_Pos)           /*!< 0x00008000 */

+

+/********************  Bit definition for RI_ASMR5 register  ********************/

+#define RI_ASMR5_PG_Pos                 (0U)                                   

+#define RI_ASMR5_PG_Msk                 (0xFFFFUL << RI_ASMR5_PG_Pos)           /*!< 0x0000FFFF */

+#define RI_ASMR5_PG                     RI_ASMR5_PG_Msk                        /*!< PG[15:0] Port G selection */

+#define RI_ASMR5_PG_0                   (0x0001UL << RI_ASMR5_PG_Pos)           /*!< 0x00000001 */

+#define RI_ASMR5_PG_1                   (0x0002UL << RI_ASMR5_PG_Pos)           /*!< 0x00000002 */

+#define RI_ASMR5_PG_2                   (0x0004UL << RI_ASMR5_PG_Pos)           /*!< 0x00000004 */

+#define RI_ASMR5_PG_3                   (0x0008UL << RI_ASMR5_PG_Pos)           /*!< 0x00000008 */

+#define RI_ASMR5_PG_4                   (0x0010UL << RI_ASMR5_PG_Pos)           /*!< 0x00000010 */

+#define RI_ASMR5_PG_5                   (0x0020UL << RI_ASMR5_PG_Pos)           /*!< 0x00000020 */

+#define RI_ASMR5_PG_6                   (0x0040UL << RI_ASMR5_PG_Pos)           /*!< 0x00000040 */

+#define RI_ASMR5_PG_7                   (0x0080UL << RI_ASMR5_PG_Pos)           /*!< 0x00000080 */

+#define RI_ASMR5_PG_8                   (0x0100UL << RI_ASMR5_PG_Pos)           /*!< 0x00000100 */

+#define RI_ASMR5_PG_9                   (0x0200UL << RI_ASMR5_PG_Pos)           /*!< 0x00000200 */

+#define RI_ASMR5_PG_10                  (0x0400UL << RI_ASMR5_PG_Pos)           /*!< 0x00000400 */

+#define RI_ASMR5_PG_11                  (0x0800UL << RI_ASMR5_PG_Pos)           /*!< 0x00000800 */

+#define RI_ASMR5_PG_12                  (0x1000UL << RI_ASMR5_PG_Pos)           /*!< 0x00001000 */

+#define RI_ASMR5_PG_13                  (0x2000UL << RI_ASMR5_PG_Pos)           /*!< 0x00002000 */

+#define RI_ASMR5_PG_14                  (0x4000UL << RI_ASMR5_PG_Pos)           /*!< 0x00004000 */

+#define RI_ASMR5_PG_15                  (0x8000UL << RI_ASMR5_PG_Pos)           /*!< 0x00008000 */

+

+/********************  Bit definition for RI_CMR5 register  ********************/

+#define RI_CMR5_PG_Pos                  (0U)                                   

+#define RI_CMR5_PG_Msk                  (0xFFFFUL << RI_CMR5_PG_Pos)            /*!< 0x0000FFFF */

+#define RI_CMR5_PG                      RI_CMR5_PG_Msk                         /*!< PG[15:0] Port G selection */

+#define RI_CMR5_PG_0                    (0x0001UL << RI_CMR5_PG_Pos)            /*!< 0x00000001 */

+#define RI_CMR5_PG_1                    (0x0002UL << RI_CMR5_PG_Pos)            /*!< 0x00000002 */

+#define RI_CMR5_PG_2                    (0x0004UL << RI_CMR5_PG_Pos)            /*!< 0x00000004 */

+#define RI_CMR5_PG_3                    (0x0008UL << RI_CMR5_PG_Pos)            /*!< 0x00000008 */

+#define RI_CMR5_PG_4                    (0x0010UL << RI_CMR5_PG_Pos)            /*!< 0x00000010 */

+#define RI_CMR5_PG_5                    (0x0020UL << RI_CMR5_PG_Pos)            /*!< 0x00000020 */

+#define RI_CMR5_PG_6                    (0x0040UL << RI_CMR5_PG_Pos)            /*!< 0x00000040 */

+#define RI_CMR5_PG_7                    (0x0080UL << RI_CMR5_PG_Pos)            /*!< 0x00000080 */

+#define RI_CMR5_PG_8                    (0x0100UL << RI_CMR5_PG_Pos)            /*!< 0x00000100 */

+#define RI_CMR5_PG_9                    (0x0200UL << RI_CMR5_PG_Pos)            /*!< 0x00000200 */

+#define RI_CMR5_PG_10                   (0x0400UL << RI_CMR5_PG_Pos)            /*!< 0x00000400 */

+#define RI_CMR5_PG_11                   (0x0800UL << RI_CMR5_PG_Pos)            /*!< 0x00000800 */

+#define RI_CMR5_PG_12                   (0x1000UL << RI_CMR5_PG_Pos)            /*!< 0x00001000 */

+#define RI_CMR5_PG_13                   (0x2000UL << RI_CMR5_PG_Pos)            /*!< 0x00002000 */

+#define RI_CMR5_PG_14                   (0x4000UL << RI_CMR5_PG_Pos)            /*!< 0x00004000 */

+#define RI_CMR5_PG_15                   (0x8000UL << RI_CMR5_PG_Pos)            /*!< 0x00008000 */

+

+/********************  Bit definition for RI_CICR5 register  ********************/

+#define RI_CICR5_PG_Pos                 (0U)                                   

+#define RI_CICR5_PG_Msk                 (0xFFFFUL << RI_CICR5_PG_Pos)           /*!< 0x0000FFFF */

+#define RI_CICR5_PG                     RI_CICR5_PG_Msk                        /*!< PG[15:0] Port G selection */

+#define RI_CICR5_PG_0                   (0x0001UL << RI_CICR5_PG_Pos)           /*!< 0x00000001 */

+#define RI_CICR5_PG_1                   (0x0002UL << RI_CICR5_PG_Pos)           /*!< 0x00000002 */

+#define RI_CICR5_PG_2                   (0x0004UL << RI_CICR5_PG_Pos)           /*!< 0x00000004 */

+#define RI_CICR5_PG_3                   (0x0008UL << RI_CICR5_PG_Pos)           /*!< 0x00000008 */

+#define RI_CICR5_PG_4                   (0x0010UL << RI_CICR5_PG_Pos)           /*!< 0x00000010 */

+#define RI_CICR5_PG_5                   (0x0020UL << RI_CICR5_PG_Pos)           /*!< 0x00000020 */

+#define RI_CICR5_PG_6                   (0x0040UL << RI_CICR5_PG_Pos)           /*!< 0x00000040 */

+#define RI_CICR5_PG_7                   (0x0080UL << RI_CICR5_PG_Pos)           /*!< 0x00000080 */

+#define RI_CICR5_PG_8                   (0x0100UL << RI_CICR5_PG_Pos)           /*!< 0x00000100 */

+#define RI_CICR5_PG_9                   (0x0200UL << RI_CICR5_PG_Pos)           /*!< 0x00000200 */

+#define RI_CICR5_PG_10                  (0x0400UL << RI_CICR5_PG_Pos)           /*!< 0x00000400 */

+#define RI_CICR5_PG_11                  (0x0800UL << RI_CICR5_PG_Pos)           /*!< 0x00000800 */

+#define RI_CICR5_PG_12                  (0x1000UL << RI_CICR5_PG_Pos)           /*!< 0x00001000 */

+#define RI_CICR5_PG_13                  (0x2000UL << RI_CICR5_PG_Pos)           /*!< 0x00002000 */

+#define RI_CICR5_PG_14                  (0x4000UL << RI_CICR5_PG_Pos)           /*!< 0x00004000 */

+#define RI_CICR5_PG_15                  (0x8000UL << RI_CICR5_PG_Pos)           /*!< 0x00008000 */

+

+/******************************************************************************/

+/*                                                                            */

+/*                               Timers (TIM)                                 */

+/*                                                                            */

+/******************************************************************************/

+

+/*******************  Bit definition for TIM_CR1 register  ********************/

+#define TIM_CR1_CEN_Pos                     (0U)                               

+#define TIM_CR1_CEN_Msk                     (0x1UL << TIM_CR1_CEN_Pos)          /*!< 0x00000001 */

+#define TIM_CR1_CEN                         TIM_CR1_CEN_Msk                    /*!<Counter enable */

+#define TIM_CR1_UDIS_Pos                    (1U)                               

+#define TIM_CR1_UDIS_Msk                    (0x1UL << TIM_CR1_UDIS_Pos)         /*!< 0x00000002 */

+#define TIM_CR1_UDIS                        TIM_CR1_UDIS_Msk                   /*!<Update disable */

+#define TIM_CR1_URS_Pos                     (2U)                               

+#define TIM_CR1_URS_Msk                     (0x1UL << TIM_CR1_URS_Pos)          /*!< 0x00000004 */

+#define TIM_CR1_URS                         TIM_CR1_URS_Msk                    /*!<Update request source */

+#define TIM_CR1_OPM_Pos                     (3U)                               

+#define TIM_CR1_OPM_Msk                     (0x1UL << TIM_CR1_OPM_Pos)          /*!< 0x00000008 */

+#define TIM_CR1_OPM                         TIM_CR1_OPM_Msk                    /*!<One pulse mode */

+#define TIM_CR1_DIR_Pos                     (4U)                               

+#define TIM_CR1_DIR_Msk                     (0x1UL << TIM_CR1_DIR_Pos)          /*!< 0x00000010 */

+#define TIM_CR1_DIR                         TIM_CR1_DIR_Msk                    /*!<Direction */

+

+#define TIM_CR1_CMS_Pos                     (5U)                               

+#define TIM_CR1_CMS_Msk                     (0x3UL << TIM_CR1_CMS_Pos)          /*!< 0x00000060 */

+#define TIM_CR1_CMS                         TIM_CR1_CMS_Msk                    /*!<CMS[1:0] bits (Center-aligned mode selection) */

+#define TIM_CR1_CMS_0                       (0x1UL << TIM_CR1_CMS_Pos)          /*!< 0x00000020 */

+#define TIM_CR1_CMS_1                       (0x2UL << TIM_CR1_CMS_Pos)          /*!< 0x00000040 */

+

+#define TIM_CR1_ARPE_Pos                    (7U)                               

+#define TIM_CR1_ARPE_Msk                    (0x1UL << TIM_CR1_ARPE_Pos)         /*!< 0x00000080 */

+#define TIM_CR1_ARPE                        TIM_CR1_ARPE_Msk                   /*!<Auto-reload preload enable */

+

+#define TIM_CR1_CKD_Pos                     (8U)                               

+#define TIM_CR1_CKD_Msk                     (0x3UL << TIM_CR1_CKD_Pos)          /*!< 0x00000300 */

+#define TIM_CR1_CKD                         TIM_CR1_CKD_Msk                    /*!<CKD[1:0] bits (clock division) */

+#define TIM_CR1_CKD_0                       (0x1UL << TIM_CR1_CKD_Pos)          /*!< 0x00000100 */

+#define TIM_CR1_CKD_1                       (0x2UL << TIM_CR1_CKD_Pos)          /*!< 0x00000200 */

+

+/*******************  Bit definition for TIM_CR2 register  ********************/

+#define TIM_CR2_CCDS_Pos                    (3U)                               

+#define TIM_CR2_CCDS_Msk                    (0x1UL << TIM_CR2_CCDS_Pos)         /*!< 0x00000008 */

+#define TIM_CR2_CCDS                        TIM_CR2_CCDS_Msk                   /*!<Capture/Compare DMA Selection */

+

+#define TIM_CR2_MMS_Pos                     (4U)                               

+#define TIM_CR2_MMS_Msk                     (0x7UL << TIM_CR2_MMS_Pos)          /*!< 0x00000070 */

+#define TIM_CR2_MMS                         TIM_CR2_MMS_Msk                    /*!<MMS[2:0] bits (Master Mode Selection) */

+#define TIM_CR2_MMS_0                       (0x1UL << TIM_CR2_MMS_Pos)          /*!< 0x00000010 */

+#define TIM_CR2_MMS_1                       (0x2UL << TIM_CR2_MMS_Pos)          /*!< 0x00000020 */

+#define TIM_CR2_MMS_2                       (0x4UL << TIM_CR2_MMS_Pos)          /*!< 0x00000040 */

+

+#define TIM_CR2_TI1S_Pos                    (7U)                               

+#define TIM_CR2_TI1S_Msk                    (0x1UL << TIM_CR2_TI1S_Pos)         /*!< 0x00000080 */

+#define TIM_CR2_TI1S                        TIM_CR2_TI1S_Msk                   /*!<TI1 Selection */

+

+/*******************  Bit definition for TIM_SMCR register  *******************/

+#define TIM_SMCR_SMS_Pos                    (0U)                               

+#define TIM_SMCR_SMS_Msk                    (0x7UL << TIM_SMCR_SMS_Pos)         /*!< 0x00000007 */

+#define TIM_SMCR_SMS                        TIM_SMCR_SMS_Msk                   /*!<SMS[2:0] bits (Slave mode selection) */

+#define TIM_SMCR_SMS_0                      (0x1UL << TIM_SMCR_SMS_Pos)         /*!< 0x00000001 */

+#define TIM_SMCR_SMS_1                      (0x2UL << TIM_SMCR_SMS_Pos)         /*!< 0x00000002 */

+#define TIM_SMCR_SMS_2                      (0x4UL << TIM_SMCR_SMS_Pos)         /*!< 0x00000004 */

+

+#define TIM_SMCR_OCCS_Pos                   (3U)                               

+#define TIM_SMCR_OCCS_Msk                   (0x1UL << TIM_SMCR_OCCS_Pos)        /*!< 0x00000008 */

+#define TIM_SMCR_OCCS                       TIM_SMCR_OCCS_Msk                  /*!< OCREF clear selection */

+

+#define TIM_SMCR_TS_Pos                     (4U)                               

+#define TIM_SMCR_TS_Msk                     (0x7UL << TIM_SMCR_TS_Pos)          /*!< 0x00000070 */

+#define TIM_SMCR_TS                         TIM_SMCR_TS_Msk                    /*!<TS[2:0] bits (Trigger selection) */

+#define TIM_SMCR_TS_0                       (0x1UL << TIM_SMCR_TS_Pos)          /*!< 0x00000010 */

+#define TIM_SMCR_TS_1                       (0x2UL << TIM_SMCR_TS_Pos)          /*!< 0x00000020 */

+#define TIM_SMCR_TS_2                       (0x4UL << TIM_SMCR_TS_Pos)          /*!< 0x00000040 */

+

+#define TIM_SMCR_MSM_Pos                    (7U)                               

+#define TIM_SMCR_MSM_Msk                    (0x1UL << TIM_SMCR_MSM_Pos)         /*!< 0x00000080 */

+#define TIM_SMCR_MSM                        TIM_SMCR_MSM_Msk                   /*!<Master/slave mode */

+

+#define TIM_SMCR_ETF_Pos                    (8U)                               

+#define TIM_SMCR_ETF_Msk                    (0xFUL << TIM_SMCR_ETF_Pos)         /*!< 0x00000F00 */

+#define TIM_SMCR_ETF                        TIM_SMCR_ETF_Msk                   /*!<ETF[3:0] bits (External trigger filter) */

+#define TIM_SMCR_ETF_0                      (0x1UL << TIM_SMCR_ETF_Pos)         /*!< 0x00000100 */

+#define TIM_SMCR_ETF_1                      (0x2UL << TIM_SMCR_ETF_Pos)         /*!< 0x00000200 */

+#define TIM_SMCR_ETF_2                      (0x4UL << TIM_SMCR_ETF_Pos)         /*!< 0x00000400 */

+#define TIM_SMCR_ETF_3                      (0x8UL << TIM_SMCR_ETF_Pos)         /*!< 0x00000800 */

+

+#define TIM_SMCR_ETPS_Pos                   (12U)                              

+#define TIM_SMCR_ETPS_Msk                   (0x3UL << TIM_SMCR_ETPS_Pos)        /*!< 0x00003000 */

+#define TIM_SMCR_ETPS                       TIM_SMCR_ETPS_Msk                  /*!<ETPS[1:0] bits (External trigger prescaler) */

+#define TIM_SMCR_ETPS_0                     (0x1UL << TIM_SMCR_ETPS_Pos)        /*!< 0x00001000 */

+#define TIM_SMCR_ETPS_1                     (0x2UL << TIM_SMCR_ETPS_Pos)        /*!< 0x00002000 */

+

+#define TIM_SMCR_ECE_Pos                    (14U)                              

+#define TIM_SMCR_ECE_Msk                    (0x1UL << TIM_SMCR_ECE_Pos)         /*!< 0x00004000 */

+#define TIM_SMCR_ECE                        TIM_SMCR_ECE_Msk                   /*!<External clock enable */

+#define TIM_SMCR_ETP_Pos                    (15U)                              

+#define TIM_SMCR_ETP_Msk                    (0x1UL << TIM_SMCR_ETP_Pos)         /*!< 0x00008000 */

+#define TIM_SMCR_ETP                        TIM_SMCR_ETP_Msk                   /*!<External trigger polarity */

+

+/*******************  Bit definition for TIM_DIER register  *******************/

+#define TIM_DIER_UIE_Pos                    (0U)                               

+#define TIM_DIER_UIE_Msk                    (0x1UL << TIM_DIER_UIE_Pos)         /*!< 0x00000001 */

+#define TIM_DIER_UIE                        TIM_DIER_UIE_Msk                   /*!<Update interrupt enable */

+#define TIM_DIER_CC1IE_Pos                  (1U)                               

+#define TIM_DIER_CC1IE_Msk                  (0x1UL << TIM_DIER_CC1IE_Pos)       /*!< 0x00000002 */

+#define TIM_DIER_CC1IE                      TIM_DIER_CC1IE_Msk                 /*!<Capture/Compare 1 interrupt enable */

+#define TIM_DIER_CC2IE_Pos                  (2U)                               

+#define TIM_DIER_CC2IE_Msk                  (0x1UL << TIM_DIER_CC2IE_Pos)       /*!< 0x00000004 */

+#define TIM_DIER_CC2IE                      TIM_DIER_CC2IE_Msk                 /*!<Capture/Compare 2 interrupt enable */

+#define TIM_DIER_CC3IE_Pos                  (3U)                               

+#define TIM_DIER_CC3IE_Msk                  (0x1UL << TIM_DIER_CC3IE_Pos)       /*!< 0x00000008 */

+#define TIM_DIER_CC3IE                      TIM_DIER_CC3IE_Msk                 /*!<Capture/Compare 3 interrupt enable */

+#define TIM_DIER_CC4IE_Pos                  (4U)                               

+#define TIM_DIER_CC4IE_Msk                  (0x1UL << TIM_DIER_CC4IE_Pos)       /*!< 0x00000010 */

+#define TIM_DIER_CC4IE                      TIM_DIER_CC4IE_Msk                 /*!<Capture/Compare 4 interrupt enable */

+#define TIM_DIER_TIE_Pos                    (6U)                               

+#define TIM_DIER_TIE_Msk                    (0x1UL << TIM_DIER_TIE_Pos)         /*!< 0x00000040 */

+#define TIM_DIER_TIE                        TIM_DIER_TIE_Msk                   /*!<Trigger interrupt enable */

+#define TIM_DIER_UDE_Pos                    (8U)                               

+#define TIM_DIER_UDE_Msk                    (0x1UL << TIM_DIER_UDE_Pos)         /*!< 0x00000100 */

+#define TIM_DIER_UDE                        TIM_DIER_UDE_Msk                   /*!<Update DMA request enable */

+#define TIM_DIER_CC1DE_Pos                  (9U)                               

+#define TIM_DIER_CC1DE_Msk                  (0x1UL << TIM_DIER_CC1DE_Pos)       /*!< 0x00000200 */

+#define TIM_DIER_CC1DE                      TIM_DIER_CC1DE_Msk                 /*!<Capture/Compare 1 DMA request enable */

+#define TIM_DIER_CC2DE_Pos                  (10U)                              

+#define TIM_DIER_CC2DE_Msk                  (0x1UL << TIM_DIER_CC2DE_Pos)       /*!< 0x00000400 */

+#define TIM_DIER_CC2DE                      TIM_DIER_CC2DE_Msk                 /*!<Capture/Compare 2 DMA request enable */

+#define TIM_DIER_CC3DE_Pos                  (11U)                              

+#define TIM_DIER_CC3DE_Msk                  (0x1UL << TIM_DIER_CC3DE_Pos)       /*!< 0x00000800 */

+#define TIM_DIER_CC3DE                      TIM_DIER_CC3DE_Msk                 /*!<Capture/Compare 3 DMA request enable */

+#define TIM_DIER_CC4DE_Pos                  (12U)                              

+#define TIM_DIER_CC4DE_Msk                  (0x1UL << TIM_DIER_CC4DE_Pos)       /*!< 0x00001000 */

+#define TIM_DIER_CC4DE                      TIM_DIER_CC4DE_Msk                 /*!<Capture/Compare 4 DMA request enable */

+#define TIM_DIER_COMDE                      ((uint16_t)0x2000U)                /*!<COM DMA request enable */

+#define TIM_DIER_TDE_Pos                    (14U)                              

+#define TIM_DIER_TDE_Msk                    (0x1UL << TIM_DIER_TDE_Pos)         /*!< 0x00004000 */

+#define TIM_DIER_TDE                        TIM_DIER_TDE_Msk                   /*!<Trigger DMA request enable */

+

+/********************  Bit definition for TIM_SR register  ********************/

+#define TIM_SR_UIF_Pos                      (0U)                               

+#define TIM_SR_UIF_Msk                      (0x1UL << TIM_SR_UIF_Pos)           /*!< 0x00000001 */

+#define TIM_SR_UIF                          TIM_SR_UIF_Msk                     /*!<Update interrupt Flag */

+#define TIM_SR_CC1IF_Pos                    (1U)                               

+#define TIM_SR_CC1IF_Msk                    (0x1UL << TIM_SR_CC1IF_Pos)         /*!< 0x00000002 */

+#define TIM_SR_CC1IF                        TIM_SR_CC1IF_Msk                   /*!<Capture/Compare 1 interrupt Flag */

+#define TIM_SR_CC2IF_Pos                    (2U)                               

+#define TIM_SR_CC2IF_Msk                    (0x1UL << TIM_SR_CC2IF_Pos)         /*!< 0x00000004 */

+#define TIM_SR_CC2IF                        TIM_SR_CC2IF_Msk                   /*!<Capture/Compare 2 interrupt Flag */

+#define TIM_SR_CC3IF_Pos                    (3U)                               

+#define TIM_SR_CC3IF_Msk                    (0x1UL << TIM_SR_CC3IF_Pos)         /*!< 0x00000008 */

+#define TIM_SR_CC3IF                        TIM_SR_CC3IF_Msk                   /*!<Capture/Compare 3 interrupt Flag */

+#define TIM_SR_CC4IF_Pos                    (4U)                               

+#define TIM_SR_CC4IF_Msk                    (0x1UL << TIM_SR_CC4IF_Pos)         /*!< 0x00000010 */

+#define TIM_SR_CC4IF                        TIM_SR_CC4IF_Msk                   /*!<Capture/Compare 4 interrupt Flag */

+#define TIM_SR_TIF_Pos                      (6U)                               

+#define TIM_SR_TIF_Msk                      (0x1UL << TIM_SR_TIF_Pos)           /*!< 0x00000040 */

+#define TIM_SR_TIF                          TIM_SR_TIF_Msk                     /*!<Trigger interrupt Flag */

+#define TIM_SR_CC1OF_Pos                    (9U)                               

+#define TIM_SR_CC1OF_Msk                    (0x1UL << TIM_SR_CC1OF_Pos)         /*!< 0x00000200 */

+#define TIM_SR_CC1OF                        TIM_SR_CC1OF_Msk                   /*!<Capture/Compare 1 Overcapture Flag */

+#define TIM_SR_CC2OF_Pos                    (10U)                              

+#define TIM_SR_CC2OF_Msk                    (0x1UL << TIM_SR_CC2OF_Pos)         /*!< 0x00000400 */

+#define TIM_SR_CC2OF                        TIM_SR_CC2OF_Msk                   /*!<Capture/Compare 2 Overcapture Flag */

+#define TIM_SR_CC3OF_Pos                    (11U)                              

+#define TIM_SR_CC3OF_Msk                    (0x1UL << TIM_SR_CC3OF_Pos)         /*!< 0x00000800 */

+#define TIM_SR_CC3OF                        TIM_SR_CC3OF_Msk                   /*!<Capture/Compare 3 Overcapture Flag */

+#define TIM_SR_CC4OF_Pos                    (12U)                              

+#define TIM_SR_CC4OF_Msk                    (0x1UL << TIM_SR_CC4OF_Pos)         /*!< 0x00001000 */

+#define TIM_SR_CC4OF                        TIM_SR_CC4OF_Msk                   /*!<Capture/Compare 4 Overcapture Flag */

+

+/*******************  Bit definition for TIM_EGR register  ********************/

+#define TIM_EGR_UG_Pos                      (0U)                               

+#define TIM_EGR_UG_Msk                      (0x1UL << TIM_EGR_UG_Pos)           /*!< 0x00000001 */

+#define TIM_EGR_UG                          TIM_EGR_UG_Msk                     /*!<Update Generation */

+#define TIM_EGR_CC1G_Pos                    (1U)                               

+#define TIM_EGR_CC1G_Msk                    (0x1UL << TIM_EGR_CC1G_Pos)         /*!< 0x00000002 */

+#define TIM_EGR_CC1G                        TIM_EGR_CC1G_Msk                   /*!<Capture/Compare 1 Generation */

+#define TIM_EGR_CC2G_Pos                    (2U)                               

+#define TIM_EGR_CC2G_Msk                    (0x1UL << TIM_EGR_CC2G_Pos)         /*!< 0x00000004 */

+#define TIM_EGR_CC2G                        TIM_EGR_CC2G_Msk                   /*!<Capture/Compare 2 Generation */

+#define TIM_EGR_CC3G_Pos                    (3U)                               

+#define TIM_EGR_CC3G_Msk                    (0x1UL << TIM_EGR_CC3G_Pos)         /*!< 0x00000008 */

+#define TIM_EGR_CC3G                        TIM_EGR_CC3G_Msk                   /*!<Capture/Compare 3 Generation */

+#define TIM_EGR_CC4G_Pos                    (4U)                               

+#define TIM_EGR_CC4G_Msk                    (0x1UL << TIM_EGR_CC4G_Pos)         /*!< 0x00000010 */

+#define TIM_EGR_CC4G                        TIM_EGR_CC4G_Msk                   /*!<Capture/Compare 4 Generation */

+#define TIM_EGR_TG_Pos                      (6U)                               

+#define TIM_EGR_TG_Msk                      (0x1UL << TIM_EGR_TG_Pos)           /*!< 0x00000040 */

+#define TIM_EGR_TG                          TIM_EGR_TG_Msk                     /*!<Trigger Generation */

+                   

+/******************  Bit definition for TIM_CCMR1 register  *******************/

+#define TIM_CCMR1_CC1S_Pos                  (0U)                               

+#define TIM_CCMR1_CC1S_Msk                  (0x3UL << TIM_CCMR1_CC1S_Pos)       /*!< 0x00000003 */

+#define TIM_CCMR1_CC1S                      TIM_CCMR1_CC1S_Msk                 /*!<CC1S[1:0] bits (Capture/Compare 1 Selection) */

+#define TIM_CCMR1_CC1S_0                    (0x1UL << TIM_CCMR1_CC1S_Pos)       /*!< 0x00000001 */

+#define TIM_CCMR1_CC1S_1                    (0x2UL << TIM_CCMR1_CC1S_Pos)       /*!< 0x00000002 */

+

+#define TIM_CCMR1_OC1FE_Pos                 (2U)                               

+#define TIM_CCMR1_OC1FE_Msk                 (0x1UL << TIM_CCMR1_OC1FE_Pos)      /*!< 0x00000004 */

+#define TIM_CCMR1_OC1FE                     TIM_CCMR1_OC1FE_Msk                /*!<Output Compare 1 Fast enable */

+#define TIM_CCMR1_OC1PE_Pos                 (3U)                               

+#define TIM_CCMR1_OC1PE_Msk                 (0x1UL << TIM_CCMR1_OC1PE_Pos)      /*!< 0x00000008 */

+#define TIM_CCMR1_OC1PE                     TIM_CCMR1_OC1PE_Msk                /*!<Output Compare 1 Preload enable */

+

+#define TIM_CCMR1_OC1M_Pos                  (4U)                               

+#define TIM_CCMR1_OC1M_Msk                  (0x7UL << TIM_CCMR1_OC1M_Pos)       /*!< 0x00000070 */

+#define TIM_CCMR1_OC1M                      TIM_CCMR1_OC1M_Msk                 /*!<OC1M[2:0] bits (Output Compare 1 Mode) */

+#define TIM_CCMR1_OC1M_0                    (0x1UL << TIM_CCMR1_OC1M_Pos)       /*!< 0x00000010 */

+#define TIM_CCMR1_OC1M_1                    (0x2UL << TIM_CCMR1_OC1M_Pos)       /*!< 0x00000020 */

+#define TIM_CCMR1_OC1M_2                    (0x4UL << TIM_CCMR1_OC1M_Pos)       /*!< 0x00000040 */

+

+#define TIM_CCMR1_OC1CE_Pos                 (7U)                               

+#define TIM_CCMR1_OC1CE_Msk                 (0x1UL << TIM_CCMR1_OC1CE_Pos)      /*!< 0x00000080 */

+#define TIM_CCMR1_OC1CE                     TIM_CCMR1_OC1CE_Msk                /*!<Output Compare 1Clear Enable */

+

+#define TIM_CCMR1_CC2S_Pos                  (8U)                               

+#define TIM_CCMR1_CC2S_Msk                  (0x3UL << TIM_CCMR1_CC2S_Pos)       /*!< 0x00000300 */

+#define TIM_CCMR1_CC2S                      TIM_CCMR1_CC2S_Msk                 /*!<CC2S[1:0] bits (Capture/Compare 2 Selection) */

+#define TIM_CCMR1_CC2S_0                    (0x1UL << TIM_CCMR1_CC2S_Pos)       /*!< 0x00000100 */

+#define TIM_CCMR1_CC2S_1                    (0x2UL << TIM_CCMR1_CC2S_Pos)       /*!< 0x00000200 */

+

+#define TIM_CCMR1_OC2FE_Pos                 (10U)                              

+#define TIM_CCMR1_OC2FE_Msk                 (0x1UL << TIM_CCMR1_OC2FE_Pos)      /*!< 0x00000400 */

+#define TIM_CCMR1_OC2FE                     TIM_CCMR1_OC2FE_Msk                /*!<Output Compare 2 Fast enable */

+#define TIM_CCMR1_OC2PE_Pos                 (11U)                              

+#define TIM_CCMR1_OC2PE_Msk                 (0x1UL << TIM_CCMR1_OC2PE_Pos)      /*!< 0x00000800 */

+#define TIM_CCMR1_OC2PE                     TIM_CCMR1_OC2PE_Msk                /*!<Output Compare 2 Preload enable */

+

+#define TIM_CCMR1_OC2M_Pos                  (12U)                              

+#define TIM_CCMR1_OC2M_Msk                  (0x7UL << TIM_CCMR1_OC2M_Pos)       /*!< 0x00007000 */

+#define TIM_CCMR1_OC2M                      TIM_CCMR1_OC2M_Msk                 /*!<OC2M[2:0] bits (Output Compare 2 Mode) */

+#define TIM_CCMR1_OC2M_0                    (0x1UL << TIM_CCMR1_OC2M_Pos)       /*!< 0x00001000 */

+#define TIM_CCMR1_OC2M_1                    (0x2UL << TIM_CCMR1_OC2M_Pos)       /*!< 0x00002000 */

+#define TIM_CCMR1_OC2M_2                    (0x4UL << TIM_CCMR1_OC2M_Pos)       /*!< 0x00004000 */

+

+#define TIM_CCMR1_OC2CE_Pos                 (15U)                              

+#define TIM_CCMR1_OC2CE_Msk                 (0x1UL << TIM_CCMR1_OC2CE_Pos)      /*!< 0x00008000 */

+#define TIM_CCMR1_OC2CE                     TIM_CCMR1_OC2CE_Msk                /*!<Output Compare 2 Clear Enable */

+

+/*----------------------------------------------------------------------------*/

+

+#define TIM_CCMR1_IC1PSC_Pos                (2U)                               

+#define TIM_CCMR1_IC1PSC_Msk                (0x3UL << TIM_CCMR1_IC1PSC_Pos)     /*!< 0x0000000C */

+#define TIM_CCMR1_IC1PSC                    TIM_CCMR1_IC1PSC_Msk               /*!<IC1PSC[1:0] bits (Input Capture 1 Prescaler) */

+#define TIM_CCMR1_IC1PSC_0                  (0x1UL << TIM_CCMR1_IC1PSC_Pos)     /*!< 0x00000004 */

+#define TIM_CCMR1_IC1PSC_1                  (0x2UL << TIM_CCMR1_IC1PSC_Pos)     /*!< 0x00000008 */

+

+#define TIM_CCMR1_IC1F_Pos                  (4U)                               

+#define TIM_CCMR1_IC1F_Msk                  (0xFUL << TIM_CCMR1_IC1F_Pos)       /*!< 0x000000F0 */

+#define TIM_CCMR1_IC1F                      TIM_CCMR1_IC1F_Msk                 /*!<IC1F[3:0] bits (Input Capture 1 Filter) */

+#define TIM_CCMR1_IC1F_0                    (0x1UL << TIM_CCMR1_IC1F_Pos)       /*!< 0x00000010 */

+#define TIM_CCMR1_IC1F_1                    (0x2UL << TIM_CCMR1_IC1F_Pos)       /*!< 0x00000020 */

+#define TIM_CCMR1_IC1F_2                    (0x4UL << TIM_CCMR1_IC1F_Pos)       /*!< 0x00000040 */

+#define TIM_CCMR1_IC1F_3                    (0x8UL << TIM_CCMR1_IC1F_Pos)       /*!< 0x00000080 */

+

+#define TIM_CCMR1_IC2PSC_Pos                (10U)                              

+#define TIM_CCMR1_IC2PSC_Msk                (0x3UL << TIM_CCMR1_IC2PSC_Pos)     /*!< 0x00000C00 */

+#define TIM_CCMR1_IC2PSC                    TIM_CCMR1_IC2PSC_Msk               /*!<IC2PSC[1:0] bits (Input Capture 2 Prescaler) */

+#define TIM_CCMR1_IC2PSC_0                  (0x1UL << TIM_CCMR1_IC2PSC_Pos)     /*!< 0x00000400 */

+#define TIM_CCMR1_IC2PSC_1                  (0x2UL << TIM_CCMR1_IC2PSC_Pos)     /*!< 0x00000800 */

+

+#define TIM_CCMR1_IC2F_Pos                  (12U)                              

+#define TIM_CCMR1_IC2F_Msk                  (0xFUL << TIM_CCMR1_IC2F_Pos)       /*!< 0x0000F000 */

+#define TIM_CCMR1_IC2F                      TIM_CCMR1_IC2F_Msk                 /*!<IC2F[3:0] bits (Input Capture 2 Filter) */

+#define TIM_CCMR1_IC2F_0                    (0x1UL << TIM_CCMR1_IC2F_Pos)       /*!< 0x00001000 */

+#define TIM_CCMR1_IC2F_1                    (0x2UL << TIM_CCMR1_IC2F_Pos)       /*!< 0x00002000 */

+#define TIM_CCMR1_IC2F_2                    (0x4UL << TIM_CCMR1_IC2F_Pos)       /*!< 0x00004000 */

+#define TIM_CCMR1_IC2F_3                    (0x8UL << TIM_CCMR1_IC2F_Pos)       /*!< 0x00008000 */

+

+/******************  Bit definition for TIM_CCMR2 register  *******************/

+#define TIM_CCMR2_CC3S_Pos                  (0U)                               

+#define TIM_CCMR2_CC3S_Msk                  (0x3UL << TIM_CCMR2_CC3S_Pos)       /*!< 0x00000003 */

+#define TIM_CCMR2_CC3S                      TIM_CCMR2_CC3S_Msk                 /*!<CC3S[1:0] bits (Capture/Compare 3 Selection) */

+#define TIM_CCMR2_CC3S_0                    (0x1UL << TIM_CCMR2_CC3S_Pos)       /*!< 0x00000001 */

+#define TIM_CCMR2_CC3S_1                    (0x2UL << TIM_CCMR2_CC3S_Pos)       /*!< 0x00000002 */

+

+#define TIM_CCMR2_OC3FE_Pos                 (2U)                               

+#define TIM_CCMR2_OC3FE_Msk                 (0x1UL << TIM_CCMR2_OC3FE_Pos)      /*!< 0x00000004 */

+#define TIM_CCMR2_OC3FE                     TIM_CCMR2_OC3FE_Msk                /*!<Output Compare 3 Fast enable */

+#define TIM_CCMR2_OC3PE_Pos                 (3U)                               

+#define TIM_CCMR2_OC3PE_Msk                 (0x1UL << TIM_CCMR2_OC3PE_Pos)      /*!< 0x00000008 */

+#define TIM_CCMR2_OC3PE                     TIM_CCMR2_OC3PE_Msk                /*!<Output Compare 3 Preload enable */

+

+#define TIM_CCMR2_OC3M_Pos                  (4U)                               

+#define TIM_CCMR2_OC3M_Msk                  (0x7UL << TIM_CCMR2_OC3M_Pos)       /*!< 0x00000070 */

+#define TIM_CCMR2_OC3M                      TIM_CCMR2_OC3M_Msk                 /*!<OC3M[2:0] bits (Output Compare 3 Mode) */

+#define TIM_CCMR2_OC3M_0                    (0x1UL << TIM_CCMR2_OC3M_Pos)       /*!< 0x00000010 */

+#define TIM_CCMR2_OC3M_1                    (0x2UL << TIM_CCMR2_OC3M_Pos)       /*!< 0x00000020 */

+#define TIM_CCMR2_OC3M_2                    (0x4UL << TIM_CCMR2_OC3M_Pos)       /*!< 0x00000040 */

+

+#define TIM_CCMR2_OC3CE_Pos                 (7U)                               

+#define TIM_CCMR2_OC3CE_Msk                 (0x1UL << TIM_CCMR2_OC3CE_Pos)      /*!< 0x00000080 */

+#define TIM_CCMR2_OC3CE                     TIM_CCMR2_OC3CE_Msk                /*!<Output Compare 3 Clear Enable */

+

+#define TIM_CCMR2_CC4S_Pos                  (8U)                               

+#define TIM_CCMR2_CC4S_Msk                  (0x3UL << TIM_CCMR2_CC4S_Pos)       /*!< 0x00000300 */

+#define TIM_CCMR2_CC4S                      TIM_CCMR2_CC4S_Msk                 /*!<CC4S[1:0] bits (Capture/Compare 4 Selection) */

+#define TIM_CCMR2_CC4S_0                    (0x1UL << TIM_CCMR2_CC4S_Pos)       /*!< 0x00000100 */

+#define TIM_CCMR2_CC4S_1                    (0x2UL << TIM_CCMR2_CC4S_Pos)       /*!< 0x00000200 */

+

+#define TIM_CCMR2_OC4FE_Pos                 (10U)                              

+#define TIM_CCMR2_OC4FE_Msk                 (0x1UL << TIM_CCMR2_OC4FE_Pos)      /*!< 0x00000400 */

+#define TIM_CCMR2_OC4FE                     TIM_CCMR2_OC4FE_Msk                /*!<Output Compare 4 Fast enable */

+#define TIM_CCMR2_OC4PE_Pos                 (11U)                              

+#define TIM_CCMR2_OC4PE_Msk                 (0x1UL << TIM_CCMR2_OC4PE_Pos)      /*!< 0x00000800 */

+#define TIM_CCMR2_OC4PE                     TIM_CCMR2_OC4PE_Msk                /*!<Output Compare 4 Preload enable */

+

+#define TIM_CCMR2_OC4M_Pos                  (12U)                              

+#define TIM_CCMR2_OC4M_Msk                  (0x7UL << TIM_CCMR2_OC4M_Pos)       /*!< 0x00007000 */

+#define TIM_CCMR2_OC4M                      TIM_CCMR2_OC4M_Msk                 /*!<OC4M[2:0] bits (Output Compare 4 Mode) */

+#define TIM_CCMR2_OC4M_0                    (0x1UL << TIM_CCMR2_OC4M_Pos)       /*!< 0x00001000 */

+#define TIM_CCMR2_OC4M_1                    (0x2UL << TIM_CCMR2_OC4M_Pos)       /*!< 0x00002000 */

+#define TIM_CCMR2_OC4M_2                    (0x4UL << TIM_CCMR2_OC4M_Pos)       /*!< 0x00004000 */

+

+#define TIM_CCMR2_OC4CE_Pos                 (15U)                              

+#define TIM_CCMR2_OC4CE_Msk                 (0x1UL << TIM_CCMR2_OC4CE_Pos)      /*!< 0x00008000 */

+#define TIM_CCMR2_OC4CE                     TIM_CCMR2_OC4CE_Msk                /*!<Output Compare 4 Clear Enable */

+

+/*----------------------------------------------------------------------------*/

+

+#define TIM_CCMR2_IC3PSC_Pos                (2U)                               

+#define TIM_CCMR2_IC3PSC_Msk                (0x3UL << TIM_CCMR2_IC3PSC_Pos)     /*!< 0x0000000C */

+#define TIM_CCMR2_IC3PSC                    TIM_CCMR2_IC3PSC_Msk               /*!<IC3PSC[1:0] bits (Input Capture 3 Prescaler) */

+#define TIM_CCMR2_IC3PSC_0                  (0x1UL << TIM_CCMR2_IC3PSC_Pos)     /*!< 0x00000004 */

+#define TIM_CCMR2_IC3PSC_1                  (0x2UL << TIM_CCMR2_IC3PSC_Pos)     /*!< 0x00000008 */

+

+#define TIM_CCMR2_IC3F_Pos                  (4U)                               

+#define TIM_CCMR2_IC3F_Msk                  (0xFUL << TIM_CCMR2_IC3F_Pos)       /*!< 0x000000F0 */

+#define TIM_CCMR2_IC3F                      TIM_CCMR2_IC3F_Msk                 /*!<IC3F[3:0] bits (Input Capture 3 Filter) */

+#define TIM_CCMR2_IC3F_0                    (0x1UL << TIM_CCMR2_IC3F_Pos)       /*!< 0x00000010 */

+#define TIM_CCMR2_IC3F_1                    (0x2UL << TIM_CCMR2_IC3F_Pos)       /*!< 0x00000020 */

+#define TIM_CCMR2_IC3F_2                    (0x4UL << TIM_CCMR2_IC3F_Pos)       /*!< 0x00000040 */

+#define TIM_CCMR2_IC3F_3                    (0x8UL << TIM_CCMR2_IC3F_Pos)       /*!< 0x00000080 */

+

+#define TIM_CCMR2_IC4PSC_Pos                (10U)                              

+#define TIM_CCMR2_IC4PSC_Msk                (0x3UL << TIM_CCMR2_IC4PSC_Pos)     /*!< 0x00000C00 */

+#define TIM_CCMR2_IC4PSC                    TIM_CCMR2_IC4PSC_Msk               /*!<IC4PSC[1:0] bits (Input Capture 4 Prescaler) */

+#define TIM_CCMR2_IC4PSC_0                  (0x1UL << TIM_CCMR2_IC4PSC_Pos)     /*!< 0x00000400 */

+#define TIM_CCMR2_IC4PSC_1                  (0x2UL << TIM_CCMR2_IC4PSC_Pos)     /*!< 0x00000800 */

+

+#define TIM_CCMR2_IC4F_Pos                  (12U)                              

+#define TIM_CCMR2_IC4F_Msk                  (0xFUL << TIM_CCMR2_IC4F_Pos)       /*!< 0x0000F000 */

+#define TIM_CCMR2_IC4F                      TIM_CCMR2_IC4F_Msk                 /*!<IC4F[3:0] bits (Input Capture 4 Filter) */

+#define TIM_CCMR2_IC4F_0                    (0x1UL << TIM_CCMR2_IC4F_Pos)       /*!< 0x00001000 */

+#define TIM_CCMR2_IC4F_1                    (0x2UL << TIM_CCMR2_IC4F_Pos)       /*!< 0x00002000 */

+#define TIM_CCMR2_IC4F_2                    (0x4UL << TIM_CCMR2_IC4F_Pos)       /*!< 0x00004000 */

+#define TIM_CCMR2_IC4F_3                    (0x8UL << TIM_CCMR2_IC4F_Pos)       /*!< 0x00008000 */

+

+/*******************  Bit definition for TIM_CCER register  *******************/

+#define TIM_CCER_CC1E_Pos                   (0U)                               

+#define TIM_CCER_CC1E_Msk                   (0x1UL << TIM_CCER_CC1E_Pos)        /*!< 0x00000001 */

+#define TIM_CCER_CC1E                       TIM_CCER_CC1E_Msk                  /*!<Capture/Compare 1 output enable */

+#define TIM_CCER_CC1P_Pos                   (1U)                               

+#define TIM_CCER_CC1P_Msk                   (0x1UL << TIM_CCER_CC1P_Pos)        /*!< 0x00000002 */

+#define TIM_CCER_CC1P                       TIM_CCER_CC1P_Msk                  /*!<Capture/Compare 1 output Polarity */

+#define TIM_CCER_CC1NP_Pos                  (3U)                               

+#define TIM_CCER_CC1NP_Msk                  (0x1UL << TIM_CCER_CC1NP_Pos)       /*!< 0x00000008 */

+#define TIM_CCER_CC1NP                      TIM_CCER_CC1NP_Msk                 /*!<Capture/Compare 1 Complementary output Polarity */

+#define TIM_CCER_CC2E_Pos                   (4U)                               

+#define TIM_CCER_CC2E_Msk                   (0x1UL << TIM_CCER_CC2E_Pos)        /*!< 0x00000010 */

+#define TIM_CCER_CC2E                       TIM_CCER_CC2E_Msk                  /*!<Capture/Compare 2 output enable */

+#define TIM_CCER_CC2P_Pos                   (5U)                               

+#define TIM_CCER_CC2P_Msk                   (0x1UL << TIM_CCER_CC2P_Pos)        /*!< 0x00000020 */

+#define TIM_CCER_CC2P                       TIM_CCER_CC2P_Msk                  /*!<Capture/Compare 2 output Polarity */

+#define TIM_CCER_CC2NP_Pos                  (7U)                               

+#define TIM_CCER_CC2NP_Msk                  (0x1UL << TIM_CCER_CC2NP_Pos)       /*!< 0x00000080 */

+#define TIM_CCER_CC2NP                      TIM_CCER_CC2NP_Msk                 /*!<Capture/Compare 2 Complementary output Polarity */

+#define TIM_CCER_CC3E_Pos                   (8U)                               

+#define TIM_CCER_CC3E_Msk                   (0x1UL << TIM_CCER_CC3E_Pos)        /*!< 0x00000100 */

+#define TIM_CCER_CC3E                       TIM_CCER_CC3E_Msk                  /*!<Capture/Compare 3 output enable */

+#define TIM_CCER_CC3P_Pos                   (9U)                               

+#define TIM_CCER_CC3P_Msk                   (0x1UL << TIM_CCER_CC3P_Pos)        /*!< 0x00000200 */

+#define TIM_CCER_CC3P                       TIM_CCER_CC3P_Msk                  /*!<Capture/Compare 3 output Polarity */

+#define TIM_CCER_CC3NP_Pos                  (11U)                              

+#define TIM_CCER_CC3NP_Msk                  (0x1UL << TIM_CCER_CC3NP_Pos)       /*!< 0x00000800 */

+#define TIM_CCER_CC3NP                      TIM_CCER_CC3NP_Msk                 /*!<Capture/Compare 3 Complementary output Polarity */

+#define TIM_CCER_CC4E_Pos                   (12U)                              

+#define TIM_CCER_CC4E_Msk                   (0x1UL << TIM_CCER_CC4E_Pos)        /*!< 0x00001000 */

+#define TIM_CCER_CC4E                       TIM_CCER_CC4E_Msk                  /*!<Capture/Compare 4 output enable */

+#define TIM_CCER_CC4P_Pos                   (13U)                              

+#define TIM_CCER_CC4P_Msk                   (0x1UL << TIM_CCER_CC4P_Pos)        /*!< 0x00002000 */

+#define TIM_CCER_CC4P                       TIM_CCER_CC4P_Msk                  /*!<Capture/Compare 4 output Polarity */

+#define TIM_CCER_CC4NP_Pos                  (15U)                              

+#define TIM_CCER_CC4NP_Msk                  (0x1UL << TIM_CCER_CC4NP_Pos)       /*!< 0x00008000 */

+#define TIM_CCER_CC4NP                      TIM_CCER_CC4NP_Msk                 /*!<Capture/Compare 4 Complementary output Polarity */

+

+/*******************  Bit definition for TIM_CNT register  ********************/

+#define TIM_CNT_CNT_Pos                     (0U)                               

+#define TIM_CNT_CNT_Msk                     (0xFFFFFFFFUL << TIM_CNT_CNT_Pos)   /*!< 0xFFFFFFFF */

+#define TIM_CNT_CNT                         TIM_CNT_CNT_Msk                    /*!<Counter Value */

+

+/*******************  Bit definition for TIM_PSC register  ********************/

+#define TIM_PSC_PSC_Pos                     (0U)                               

+#define TIM_PSC_PSC_Msk                     (0xFFFFUL << TIM_PSC_PSC_Pos)       /*!< 0x0000FFFF */

+#define TIM_PSC_PSC                         TIM_PSC_PSC_Msk                    /*!<Prescaler Value */

+

+/*******************  Bit definition for TIM_ARR register  ********************/

+#define TIM_ARR_ARR_Pos                     (0U)                               

+#define TIM_ARR_ARR_Msk                     (0xFFFFFFFFUL << TIM_ARR_ARR_Pos)   /*!< 0xFFFFFFFF */

+#define TIM_ARR_ARR                         TIM_ARR_ARR_Msk                    /*!<actual auto-reload Value */

+           

+/*******************  Bit definition for TIM_CCR1 register  *******************/

+#define TIM_CCR1_CCR1_Pos                   (0U)                               

+#define TIM_CCR1_CCR1_Msk                   (0xFFFFUL << TIM_CCR1_CCR1_Pos)     /*!< 0x0000FFFF */

+#define TIM_CCR1_CCR1                       TIM_CCR1_CCR1_Msk                  /*!<Capture/Compare 1 Value */

+

+/*******************  Bit definition for TIM_CCR2 register  *******************/

+#define TIM_CCR2_CCR2_Pos                   (0U)                               

+#define TIM_CCR2_CCR2_Msk                   (0xFFFFUL << TIM_CCR2_CCR2_Pos)     /*!< 0x0000FFFF */

+#define TIM_CCR2_CCR2                       TIM_CCR2_CCR2_Msk                  /*!<Capture/Compare 2 Value */

+

+/*******************  Bit definition for TIM_CCR3 register  *******************/

+#define TIM_CCR3_CCR3_Pos                   (0U)                               

+#define TIM_CCR3_CCR3_Msk                   (0xFFFFUL << TIM_CCR3_CCR3_Pos)     /*!< 0x0000FFFF */

+#define TIM_CCR3_CCR3                       TIM_CCR3_CCR3_Msk                  /*!<Capture/Compare 3 Value */

+

+/*******************  Bit definition for TIM_CCR4 register  *******************/

+#define TIM_CCR4_CCR4_Pos                   (0U)                               

+#define TIM_CCR4_CCR4_Msk                   (0xFFFFUL << TIM_CCR4_CCR4_Pos)     /*!< 0x0000FFFF */

+#define TIM_CCR4_CCR4                       TIM_CCR4_CCR4_Msk                  /*!<Capture/Compare 4 Value */

+

+/*******************  Bit definition for TIM_DCR register  ********************/

+#define TIM_DCR_DBA_Pos                     (0U)                               

+#define TIM_DCR_DBA_Msk                     (0x1FUL << TIM_DCR_DBA_Pos)         /*!< 0x0000001F */

+#define TIM_DCR_DBA                         TIM_DCR_DBA_Msk                    /*!<DBA[4:0] bits (DMA Base Address) */

+#define TIM_DCR_DBA_0                       (0x01UL << TIM_DCR_DBA_Pos)         /*!< 0x00000001 */

+#define TIM_DCR_DBA_1                       (0x02UL << TIM_DCR_DBA_Pos)         /*!< 0x00000002 */

+#define TIM_DCR_DBA_2                       (0x04UL << TIM_DCR_DBA_Pos)         /*!< 0x00000004 */

+#define TIM_DCR_DBA_3                       (0x08UL << TIM_DCR_DBA_Pos)         /*!< 0x00000008 */

+#define TIM_DCR_DBA_4                       (0x10UL << TIM_DCR_DBA_Pos)         /*!< 0x00000010 */

+

+#define TIM_DCR_DBL_Pos                     (8U)                               

+#define TIM_DCR_DBL_Msk                     (0x1FUL << TIM_DCR_DBL_Pos)         /*!< 0x00001F00 */

+#define TIM_DCR_DBL                         TIM_DCR_DBL_Msk                    /*!<DBL[4:0] bits (DMA Burst Length) */

+#define TIM_DCR_DBL_0                       (0x01UL << TIM_DCR_DBL_Pos)         /*!< 0x00000100 */

+#define TIM_DCR_DBL_1                       (0x02UL << TIM_DCR_DBL_Pos)         /*!< 0x00000200 */

+#define TIM_DCR_DBL_2                       (0x04UL << TIM_DCR_DBL_Pos)         /*!< 0x00000400 */

+#define TIM_DCR_DBL_3                       (0x08UL << TIM_DCR_DBL_Pos)         /*!< 0x00000800 */

+#define TIM_DCR_DBL_4                       (0x10UL << TIM_DCR_DBL_Pos)         /*!< 0x00001000 */

+

+/*******************  Bit definition for TIM_DMAR register  *******************/

+#define TIM_DMAR_DMAB_Pos                   (0U)                               

+#define TIM_DMAR_DMAB_Msk                   (0xFFFFUL << TIM_DMAR_DMAB_Pos)     /*!< 0x0000FFFF */

+#define TIM_DMAR_DMAB                       TIM_DMAR_DMAB_Msk                  /*!<DMA register for burst accesses */

+

+/*******************  Bit definition for TIM_OR register  *********************/

+#define TIM_OR_TI1RMP_Pos                   (0U)                               

+#define TIM_OR_TI1RMP_Msk                   (0x3UL << TIM_OR_TI1RMP_Pos)        /*!< 0x00000003 */

+#define TIM_OR_TI1RMP                       TIM_OR_TI1RMP_Msk                  /*!<TI1_RMP[1:0] bits (TIM Input 1 remap) */

+#define TIM_OR_TI1RMP_0                     (0x1UL << TIM_OR_TI1RMP_Pos)        /*!< 0x00000001 */

+#define TIM_OR_TI1RMP_1                     (0x2UL << TIM_OR_TI1RMP_Pos)        /*!< 0x00000002 */

+

+#define TIM_OR_ETR_RMP_Pos                  (2U)                               

+#define TIM_OR_ETR_RMP_Msk                  (0x1UL << TIM_OR_ETR_RMP_Pos)       /*!< 0x00000004 */

+#define TIM_OR_ETR_RMP                      TIM_OR_ETR_RMP_Msk                 /*!<ETR_RMP bit (TIM10/11 ETR remap)*/

+#define TIM_OR_TI1_RMP_RI_Pos               (3U)                               

+#define TIM_OR_TI1_RMP_RI_Msk               (0x1UL << TIM_OR_TI1_RMP_RI_Pos)    /*!< 0x00000008 */

+#define TIM_OR_TI1_RMP_RI                   TIM_OR_TI1_RMP_RI_Msk              /*!<TI1_RMP_RI bit (TIM10/11 Input 1 remap for Routing interface) */

+

+/*----------------------------------------------------------------------------*/

+#define TIM9_OR_ITR1_RMP_Pos                (2U)                               

+#define TIM9_OR_ITR1_RMP_Msk                (0x1UL << TIM9_OR_ITR1_RMP_Pos)     /*!< 0x00000004 */

+#define TIM9_OR_ITR1_RMP                    TIM9_OR_ITR1_RMP_Msk               /*!<ITR1_RMP bit (TIM9 Internal trigger 1 remap) */

+

+/*----------------------------------------------------------------------------*/

+#define TIM2_OR_ITR1_RMP_Pos                (0U)                               

+#define TIM2_OR_ITR1_RMP_Msk                (0x1UL << TIM2_OR_ITR1_RMP_Pos)     /*!< 0x00000001 */

+#define TIM2_OR_ITR1_RMP                    TIM2_OR_ITR1_RMP_Msk               /*!<ITR1_RMP bit (TIM2 Internal trigger 1 remap) */

+

+/*----------------------------------------------------------------------------*/

+#define TIM3_OR_ITR2_RMP_Pos                (0U)                               

+#define TIM3_OR_ITR2_RMP_Msk                (0x1UL << TIM3_OR_ITR2_RMP_Pos)     /*!< 0x00000001 */

+#define TIM3_OR_ITR2_RMP                    TIM3_OR_ITR2_RMP_Msk               /*!<ITR2_RMP bit (TIM3 Internal trigger 2 remap) */

+

+/*----------------------------------------------------------------------------*/

+

+/******************************************************************************/

+/*                                                                            */

+/*      Universal Synchronous Asynchronous Receiver Transmitter (USART)       */

+/*                                                                            */

+/******************************************************************************/

+

+/*******************  Bit definition for USART_SR register  *******************/

+#define USART_SR_PE_Pos                     (0U)                               

+#define USART_SR_PE_Msk                     (0x1UL << USART_SR_PE_Pos)          /*!< 0x00000001 */

+#define USART_SR_PE                         USART_SR_PE_Msk                    /*!< Parity Error */

+#define USART_SR_FE_Pos                     (1U)                               

+#define USART_SR_FE_Msk                     (0x1UL << USART_SR_FE_Pos)          /*!< 0x00000002 */

+#define USART_SR_FE                         USART_SR_FE_Msk                    /*!< Framing Error */

+#define USART_SR_NE_Pos                     (2U)                               

+#define USART_SR_NE_Msk                     (0x1UL << USART_SR_NE_Pos)          /*!< 0x00000004 */

+#define USART_SR_NE                         USART_SR_NE_Msk                    /*!< Noise Error Flag */

+#define USART_SR_ORE_Pos                    (3U)                               

+#define USART_SR_ORE_Msk                    (0x1UL << USART_SR_ORE_Pos)         /*!< 0x00000008 */

+#define USART_SR_ORE                        USART_SR_ORE_Msk                   /*!< OverRun Error */

+#define USART_SR_IDLE_Pos                   (4U)                               

+#define USART_SR_IDLE_Msk                   (0x1UL << USART_SR_IDLE_Pos)        /*!< 0x00000010 */

+#define USART_SR_IDLE                       USART_SR_IDLE_Msk                  /*!< IDLE line detected */

+#define USART_SR_RXNE_Pos                   (5U)                               

+#define USART_SR_RXNE_Msk                   (0x1UL << USART_SR_RXNE_Pos)        /*!< 0x00000020 */

+#define USART_SR_RXNE                       USART_SR_RXNE_Msk                  /*!< Read Data Register Not Empty */

+#define USART_SR_TC_Pos                     (6U)                               

+#define USART_SR_TC_Msk                     (0x1UL << USART_SR_TC_Pos)          /*!< 0x00000040 */

+#define USART_SR_TC                         USART_SR_TC_Msk                    /*!< Transmission Complete */

+#define USART_SR_TXE_Pos                    (7U)                               

+#define USART_SR_TXE_Msk                    (0x1UL << USART_SR_TXE_Pos)         /*!< 0x00000080 */

+#define USART_SR_TXE                        USART_SR_TXE_Msk                   /*!< Transmit Data Register Empty */

+#define USART_SR_LBD_Pos                    (8U)                               

+#define USART_SR_LBD_Msk                    (0x1UL << USART_SR_LBD_Pos)         /*!< 0x00000100 */

+#define USART_SR_LBD                        USART_SR_LBD_Msk                   /*!< LIN Break Detection Flag */

+#define USART_SR_CTS_Pos                    (9U)                               

+#define USART_SR_CTS_Msk                    (0x1UL << USART_SR_CTS_Pos)         /*!< 0x00000200 */

+#define USART_SR_CTS                        USART_SR_CTS_Msk                   /*!< CTS Flag */

+

+/*******************  Bit definition for USART_DR register  *******************/

+#define USART_DR_DR_Pos                     (0U)                               

+#define USART_DR_DR_Msk                     (0x1FFUL << USART_DR_DR_Pos)        /*!< 0x000001FF */

+#define USART_DR_DR                         USART_DR_DR_Msk                    /*!< Data value */

+

+/******************  Bit definition for USART_BRR register  *******************/

+#define USART_BRR_DIV_FRACTION_Pos          (0U)                               

+#define USART_BRR_DIV_FRACTION_Msk          (0xFUL << USART_BRR_DIV_FRACTION_Pos) /*!< 0x0000000F */

+#define USART_BRR_DIV_FRACTION              USART_BRR_DIV_FRACTION_Msk         /*!< Fraction of USARTDIV */

+#define USART_BRR_DIV_MANTISSA_Pos          (4U)                               

+#define USART_BRR_DIV_MANTISSA_Msk          (0xFFFUL << USART_BRR_DIV_MANTISSA_Pos) /*!< 0x0000FFF0 */

+#define USART_BRR_DIV_MANTISSA              USART_BRR_DIV_MANTISSA_Msk         /*!< Mantissa of USARTDIV */

+

+/******************  Bit definition for USART_CR1 register  *******************/

+#define USART_CR1_SBK_Pos                   (0U)                               

+#define USART_CR1_SBK_Msk                   (0x1UL << USART_CR1_SBK_Pos)        /*!< 0x00000001 */

+#define USART_CR1_SBK                       USART_CR1_SBK_Msk                  /*!< Send Break */

+#define USART_CR1_RWU_Pos                   (1U)                               

+#define USART_CR1_RWU_Msk                   (0x1UL << USART_CR1_RWU_Pos)        /*!< 0x00000002 */

+#define USART_CR1_RWU                       USART_CR1_RWU_Msk                  /*!< Receiver wakeup */

+#define USART_CR1_RE_Pos                    (2U)                               

+#define USART_CR1_RE_Msk                    (0x1UL << USART_CR1_RE_Pos)         /*!< 0x00000004 */

+#define USART_CR1_RE                        USART_CR1_RE_Msk                   /*!< Receiver Enable */

+#define USART_CR1_TE_Pos                    (3U)                               

+#define USART_CR1_TE_Msk                    (0x1UL << USART_CR1_TE_Pos)         /*!< 0x00000008 */

+#define USART_CR1_TE                        USART_CR1_TE_Msk                   /*!< Transmitter Enable */

+#define USART_CR1_IDLEIE_Pos                (4U)                               

+#define USART_CR1_IDLEIE_Msk                (0x1UL << USART_CR1_IDLEIE_Pos)     /*!< 0x00000010 */

+#define USART_CR1_IDLEIE                    USART_CR1_IDLEIE_Msk               /*!< IDLE Interrupt Enable */

+#define USART_CR1_RXNEIE_Pos                (5U)                               

+#define USART_CR1_RXNEIE_Msk                (0x1UL << USART_CR1_RXNEIE_Pos)     /*!< 0x00000020 */

+#define USART_CR1_RXNEIE                    USART_CR1_RXNEIE_Msk               /*!< RXNE Interrupt Enable */

+#define USART_CR1_TCIE_Pos                  (6U)                               

+#define USART_CR1_TCIE_Msk                  (0x1UL << USART_CR1_TCIE_Pos)       /*!< 0x00000040 */

+#define USART_CR1_TCIE                      USART_CR1_TCIE_Msk                 /*!< Transmission Complete Interrupt Enable */

+#define USART_CR1_TXEIE_Pos                 (7U)                               

+#define USART_CR1_TXEIE_Msk                 (0x1UL << USART_CR1_TXEIE_Pos)      /*!< 0x00000080 */

+#define USART_CR1_TXEIE                     USART_CR1_TXEIE_Msk                /*!< PE Interrupt Enable */

+#define USART_CR1_PEIE_Pos                  (8U)                               

+#define USART_CR1_PEIE_Msk                  (0x1UL << USART_CR1_PEIE_Pos)       /*!< 0x00000100 */

+#define USART_CR1_PEIE                      USART_CR1_PEIE_Msk                 /*!< PE Interrupt Enable */

+#define USART_CR1_PS_Pos                    (9U)                               

+#define USART_CR1_PS_Msk                    (0x1UL << USART_CR1_PS_Pos)         /*!< 0x00000200 */

+#define USART_CR1_PS                        USART_CR1_PS_Msk                   /*!< Parity Selection */

+#define USART_CR1_PCE_Pos                   (10U)                              

+#define USART_CR1_PCE_Msk                   (0x1UL << USART_CR1_PCE_Pos)        /*!< 0x00000400 */

+#define USART_CR1_PCE                       USART_CR1_PCE_Msk                  /*!< Parity Control Enable */

+#define USART_CR1_WAKE_Pos                  (11U)                              

+#define USART_CR1_WAKE_Msk                  (0x1UL << USART_CR1_WAKE_Pos)       /*!< 0x00000800 */

+#define USART_CR1_WAKE                      USART_CR1_WAKE_Msk                 /*!< Wakeup method */

+#define USART_CR1_M_Pos                     (12U)                              

+#define USART_CR1_M_Msk                     (0x1UL << USART_CR1_M_Pos)          /*!< 0x00001000 */

+#define USART_CR1_M                         USART_CR1_M_Msk                    /*!< Word length */

+#define USART_CR1_UE_Pos                    (13U)                              

+#define USART_CR1_UE_Msk                    (0x1UL << USART_CR1_UE_Pos)         /*!< 0x00002000 */

+#define USART_CR1_UE                        USART_CR1_UE_Msk                   /*!< USART Enable */

+#define USART_CR1_OVER8_Pos                 (15U)                              

+#define USART_CR1_OVER8_Msk                 (0x1UL << USART_CR1_OVER8_Pos)      /*!< 0x00008000 */

+#define USART_CR1_OVER8                     USART_CR1_OVER8_Msk                /*!< Oversampling by 8-bit mode */

+

+/******************  Bit definition for USART_CR2 register  *******************/

+#define USART_CR2_ADD_Pos                   (0U)                               

+#define USART_CR2_ADD_Msk                   (0xFUL << USART_CR2_ADD_Pos)        /*!< 0x0000000F */

+#define USART_CR2_ADD                       USART_CR2_ADD_Msk                  /*!< Address of the USART node */

+#define USART_CR2_LBDL_Pos                  (5U)                               

+#define USART_CR2_LBDL_Msk                  (0x1UL << USART_CR2_LBDL_Pos)       /*!< 0x00000020 */

+#define USART_CR2_LBDL                      USART_CR2_LBDL_Msk                 /*!< LIN Break Detection Length */

+#define USART_CR2_LBDIE_Pos                 (6U)                               

+#define USART_CR2_LBDIE_Msk                 (0x1UL << USART_CR2_LBDIE_Pos)      /*!< 0x00000040 */

+#define USART_CR2_LBDIE                     USART_CR2_LBDIE_Msk                /*!< LIN Break Detection Interrupt Enable */

+#define USART_CR2_LBCL_Pos                  (8U)                               

+#define USART_CR2_LBCL_Msk                  (0x1UL << USART_CR2_LBCL_Pos)       /*!< 0x00000100 */

+#define USART_CR2_LBCL                      USART_CR2_LBCL_Msk                 /*!< Last Bit Clock pulse */

+#define USART_CR2_CPHA_Pos                  (9U)                               

+#define USART_CR2_CPHA_Msk                  (0x1UL << USART_CR2_CPHA_Pos)       /*!< 0x00000200 */

+#define USART_CR2_CPHA                      USART_CR2_CPHA_Msk                 /*!< Clock Phase */

+#define USART_CR2_CPOL_Pos                  (10U)                              

+#define USART_CR2_CPOL_Msk                  (0x1UL << USART_CR2_CPOL_Pos)       /*!< 0x00000400 */

+#define USART_CR2_CPOL                      USART_CR2_CPOL_Msk                 /*!< Clock Polarity */

+#define USART_CR2_CLKEN_Pos                 (11U)                              

+#define USART_CR2_CLKEN_Msk                 (0x1UL << USART_CR2_CLKEN_Pos)      /*!< 0x00000800 */

+#define USART_CR2_CLKEN                     USART_CR2_CLKEN_Msk                /*!< Clock Enable */

+

+#define USART_CR2_STOP_Pos                  (12U)                              

+#define USART_CR2_STOP_Msk                  (0x3UL << USART_CR2_STOP_Pos)       /*!< 0x00003000 */

+#define USART_CR2_STOP                      USART_CR2_STOP_Msk                 /*!< STOP[1:0] bits (STOP bits) */

+#define USART_CR2_STOP_0                    (0x1UL << USART_CR2_STOP_Pos)       /*!< 0x00001000 */

+#define USART_CR2_STOP_1                    (0x2UL << USART_CR2_STOP_Pos)       /*!< 0x00002000 */

+

+#define USART_CR2_LINEN_Pos                 (14U)                              

+#define USART_CR2_LINEN_Msk                 (0x1UL << USART_CR2_LINEN_Pos)      /*!< 0x00004000 */

+#define USART_CR2_LINEN                     USART_CR2_LINEN_Msk                /*!< LIN mode enable */

+

+/******************  Bit definition for USART_CR3 register  *******************/

+#define USART_CR3_EIE_Pos                   (0U)                               

+#define USART_CR3_EIE_Msk                   (0x1UL << USART_CR3_EIE_Pos)        /*!< 0x00000001 */

+#define USART_CR3_EIE                       USART_CR3_EIE_Msk                  /*!< Error Interrupt Enable */

+#define USART_CR3_IREN_Pos                  (1U)                               

+#define USART_CR3_IREN_Msk                  (0x1UL << USART_CR3_IREN_Pos)       /*!< 0x00000002 */

+#define USART_CR3_IREN                      USART_CR3_IREN_Msk                 /*!< IrDA mode Enable */

+#define USART_CR3_IRLP_Pos                  (2U)                               

+#define USART_CR3_IRLP_Msk                  (0x1UL << USART_CR3_IRLP_Pos)       /*!< 0x00000004 */

+#define USART_CR3_IRLP                      USART_CR3_IRLP_Msk                 /*!< IrDA Low-Power */

+#define USART_CR3_HDSEL_Pos                 (3U)                               

+#define USART_CR3_HDSEL_Msk                 (0x1UL << USART_CR3_HDSEL_Pos)      /*!< 0x00000008 */

+#define USART_CR3_HDSEL                     USART_CR3_HDSEL_Msk                /*!< Half-Duplex Selection */

+#define USART_CR3_NACK_Pos                  (4U)                               

+#define USART_CR3_NACK_Msk                  (0x1UL << USART_CR3_NACK_Pos)       /*!< 0x00000010 */

+#define USART_CR3_NACK                      USART_CR3_NACK_Msk                 /*!< Smartcard NACK enable */

+#define USART_CR3_SCEN_Pos                  (5U)                               

+#define USART_CR3_SCEN_Msk                  (0x1UL << USART_CR3_SCEN_Pos)       /*!< 0x00000020 */

+#define USART_CR3_SCEN                      USART_CR3_SCEN_Msk                 /*!< Smartcard mode enable */

+#define USART_CR3_DMAR_Pos                  (6U)                               

+#define USART_CR3_DMAR_Msk                  (0x1UL << USART_CR3_DMAR_Pos)       /*!< 0x00000040 */

+#define USART_CR3_DMAR                      USART_CR3_DMAR_Msk                 /*!< DMA Enable Receiver */

+#define USART_CR3_DMAT_Pos                  (7U)                               

+#define USART_CR3_DMAT_Msk                  (0x1UL << USART_CR3_DMAT_Pos)       /*!< 0x00000080 */

+#define USART_CR3_DMAT                      USART_CR3_DMAT_Msk                 /*!< DMA Enable Transmitter */

+#define USART_CR3_RTSE_Pos                  (8U)                               

+#define USART_CR3_RTSE_Msk                  (0x1UL << USART_CR3_RTSE_Pos)       /*!< 0x00000100 */

+#define USART_CR3_RTSE                      USART_CR3_RTSE_Msk                 /*!< RTS Enable */

+#define USART_CR3_CTSE_Pos                  (9U)                               

+#define USART_CR3_CTSE_Msk                  (0x1UL << USART_CR3_CTSE_Pos)       /*!< 0x00000200 */

+#define USART_CR3_CTSE                      USART_CR3_CTSE_Msk                 /*!< CTS Enable */

+#define USART_CR3_CTSIE_Pos                 (10U)                              

+#define USART_CR3_CTSIE_Msk                 (0x1UL << USART_CR3_CTSIE_Pos)      /*!< 0x00000400 */

+#define USART_CR3_CTSIE                     USART_CR3_CTSIE_Msk                /*!< CTS Interrupt Enable */

+#define USART_CR3_ONEBIT_Pos                (11U)                              

+#define USART_CR3_ONEBIT_Msk                (0x1UL << USART_CR3_ONEBIT_Pos)     /*!< 0x00000800 */

+#define USART_CR3_ONEBIT                    USART_CR3_ONEBIT_Msk               /*!< One sample bit method enable */

+

+/******************  Bit definition for USART_GTPR register  ******************/

+#define USART_GTPR_PSC_Pos                  (0U)                               

+#define USART_GTPR_PSC_Msk                  (0xFFUL << USART_GTPR_PSC_Pos)      /*!< 0x000000FF */

+#define USART_GTPR_PSC                      USART_GTPR_PSC_Msk                 /*!< PSC[7:0] bits (Prescaler value) */

+#define USART_GTPR_PSC_0                    (0x01UL << USART_GTPR_PSC_Pos)      /*!< 0x00000001 */

+#define USART_GTPR_PSC_1                    (0x02UL << USART_GTPR_PSC_Pos)      /*!< 0x00000002 */

+#define USART_GTPR_PSC_2                    (0x04UL << USART_GTPR_PSC_Pos)      /*!< 0x00000004 */

+#define USART_GTPR_PSC_3                    (0x08UL << USART_GTPR_PSC_Pos)      /*!< 0x00000008 */

+#define USART_GTPR_PSC_4                    (0x10UL << USART_GTPR_PSC_Pos)      /*!< 0x00000010 */

+#define USART_GTPR_PSC_5                    (0x20UL << USART_GTPR_PSC_Pos)      /*!< 0x00000020 */

+#define USART_GTPR_PSC_6                    (0x40UL << USART_GTPR_PSC_Pos)      /*!< 0x00000040 */

+#define USART_GTPR_PSC_7                    (0x80UL << USART_GTPR_PSC_Pos)      /*!< 0x00000080 */

+

+#define USART_GTPR_GT_Pos                   (8U)                               

+#define USART_GTPR_GT_Msk                   (0xFFUL << USART_GTPR_GT_Pos)       /*!< 0x0000FF00 */

+#define USART_GTPR_GT                       USART_GTPR_GT_Msk                  /*!< Guard time value */

+

+/******************************************************************************/

+/*                                                                            */

+/*                     Universal Serial Bus (USB)                             */

+/*                                                                            */

+/******************************************************************************/

+

+/*!<Endpoint-specific registers */

+

+#define  USB_EP0R                              USB_BASE                        /*!< endpoint 0 register address */

+#define  USB_EP1R                             (USB_BASE + 0x00000004U)         /*!< endpoint 1 register address */

+#define  USB_EP2R                             (USB_BASE + 0x00000008U)         /*!< endpoint 2 register address */

+#define  USB_EP3R                             (USB_BASE + 0x0000000CU)         /*!< endpoint 3 register address */

+#define  USB_EP4R                             (USB_BASE + 0x00000010U)         /*!< endpoint 4 register address */

+#define  USB_EP5R                             (USB_BASE + 0x00000014U)         /*!< endpoint 5 register address */

+#define  USB_EP6R                             (USB_BASE + 0x00000018U)         /*!< endpoint 6 register address */

+#define  USB_EP7R                             (USB_BASE + 0x0000001CU)         /*!< endpoint 7 register address */

+

+/* bit positions */ 

+#define USB_EP_CTR_RX_Pos                     (15U)                            

+#define USB_EP_CTR_RX_Msk                     (0x1UL << USB_EP_CTR_RX_Pos)      /*!< 0x00008000 */

+#define USB_EP_CTR_RX                         USB_EP_CTR_RX_Msk                /*!<  EndPoint Correct TRansfer RX */

+#define USB_EP_DTOG_RX_Pos                    (14U)                            

+#define USB_EP_DTOG_RX_Msk                    (0x1UL << USB_EP_DTOG_RX_Pos)     /*!< 0x00004000 */

+#define USB_EP_DTOG_RX                        USB_EP_DTOG_RX_Msk               /*!<  EndPoint Data TOGGLE RX */

+#define USB_EPRX_STAT_Pos                     (12U)                            

+#define USB_EPRX_STAT_Msk                     (0x3UL << USB_EPRX_STAT_Pos)      /*!< 0x00003000 */

+#define USB_EPRX_STAT                         USB_EPRX_STAT_Msk                /*!<  EndPoint RX STATus bit field */

+#define USB_EP_SETUP_Pos                      (11U)                            

+#define USB_EP_SETUP_Msk                      (0x1UL << USB_EP_SETUP_Pos)       /*!< 0x00000800 */

+#define USB_EP_SETUP                          USB_EP_SETUP_Msk                 /*!<  EndPoint SETUP */

+#define USB_EP_T_FIELD_Pos                    (9U)                             

+#define USB_EP_T_FIELD_Msk                    (0x3UL << USB_EP_T_FIELD_Pos)     /*!< 0x00000600 */

+#define USB_EP_T_FIELD                        USB_EP_T_FIELD_Msk               /*!<  EndPoint TYPE */

+#define USB_EP_KIND_Pos                       (8U)                             

+#define USB_EP_KIND_Msk                       (0x1UL << USB_EP_KIND_Pos)        /*!< 0x00000100 */

+#define USB_EP_KIND                           USB_EP_KIND_Msk                  /*!<  EndPoint KIND */

+#define USB_EP_CTR_TX_Pos                     (7U)                             

+#define USB_EP_CTR_TX_Msk                     (0x1UL << USB_EP_CTR_TX_Pos)      /*!< 0x00000080 */

+#define USB_EP_CTR_TX                         USB_EP_CTR_TX_Msk                /*!<  EndPoint Correct TRansfer TX */

+#define USB_EP_DTOG_TX_Pos                    (6U)                             

+#define USB_EP_DTOG_TX_Msk                    (0x1UL << USB_EP_DTOG_TX_Pos)     /*!< 0x00000040 */

+#define USB_EP_DTOG_TX                        USB_EP_DTOG_TX_Msk               /*!<  EndPoint Data TOGGLE TX */

+#define USB_EPTX_STAT_Pos                     (4U)                             

+#define USB_EPTX_STAT_Msk                     (0x3UL << USB_EPTX_STAT_Pos)      /*!< 0x00000030 */

+#define USB_EPTX_STAT                         USB_EPTX_STAT_Msk                /*!<  EndPoint TX STATus bit field */

+#define USB_EPADDR_FIELD_Pos                  (0U)                             

+#define USB_EPADDR_FIELD_Msk                  (0xFUL << USB_EPADDR_FIELD_Pos)   /*!< 0x0000000F */

+#define USB_EPADDR_FIELD                      USB_EPADDR_FIELD_Msk             /*!<  EndPoint ADDRess FIELD */

+

+/* EndPoint REGister MASK (no toggle fields) */

+#define  USB_EPREG_MASK     (USB_EP_CTR_RX|USB_EP_SETUP|USB_EP_T_FIELD|USB_EP_KIND|USB_EP_CTR_TX|USB_EPADDR_FIELD)

+                                                                               /*!< EP_TYPE[1:0] EndPoint TYPE */

+#define USB_EP_TYPE_MASK_Pos                  (9U)                             

+#define USB_EP_TYPE_MASK_Msk                  (0x3UL << USB_EP_TYPE_MASK_Pos)   /*!< 0x00000600 */

+#define USB_EP_TYPE_MASK                      USB_EP_TYPE_MASK_Msk             /*!< EndPoint TYPE Mask */

+#define USB_EP_BULK                           (0x00000000U)                    /*!< EndPoint BULK */

+#define USB_EP_CONTROL                        (0x00000200U)                    /*!< EndPoint CONTROL */

+#define USB_EP_ISOCHRONOUS                    (0x00000400U)                    /*!< EndPoint ISOCHRONOUS */

+#define USB_EP_INTERRUPT                      (0x00000600U)                    /*!< EndPoint INTERRUPT */

+#define  USB_EP_T_MASK      (~USB_EP_T_FIELD & USB_EPREG_MASK)

+                                                                 

+#define  USB_EPKIND_MASK    (~USB_EP_KIND & USB_EPREG_MASK)            /*!< EP_KIND EndPoint KIND */

+                                                                               /*!< STAT_TX[1:0] STATus for TX transfer */

+#define USB_EP_TX_DIS                         (0x00000000U)                    /*!< EndPoint TX DISabled */

+#define USB_EP_TX_STALL                       (0x00000010U)                    /*!< EndPoint TX STALLed */

+#define USB_EP_TX_NAK                         (0x00000020U)                    /*!< EndPoint TX NAKed */

+#define USB_EP_TX_VALID                       (0x00000030U)                    /*!< EndPoint TX VALID */

+#define USB_EPTX_DTOG1                        (0x00000010U)                    /*!< EndPoint TX Data TOGgle bit1 */

+#define USB_EPTX_DTOG2                        (0x00000020U)                    /*!< EndPoint TX Data TOGgle bit2 */

+#define  USB_EPTX_DTOGMASK  (USB_EPTX_STAT|USB_EPREG_MASK)

+                                                                               /*!< STAT_RX[1:0] STATus for RX transfer */

+#define USB_EP_RX_DIS                         (0x00000000U)                    /*!< EndPoint RX DISabled */

+#define USB_EP_RX_STALL                       (0x00001000U)                    /*!< EndPoint RX STALLed */

+#define USB_EP_RX_NAK                         (0x00002000U)                    /*!< EndPoint RX NAKed */

+#define USB_EP_RX_VALID                       (0x00003000U)                    /*!< EndPoint RX VALID */

+#define USB_EPRX_DTOG1                        (0x00001000U)                    /*!< EndPoint RX Data TOGgle bit1 */

+#define USB_EPRX_DTOG2                        (0x00002000U)                    /*!< EndPoint RX Data TOGgle bit1 */

+#define  USB_EPRX_DTOGMASK  (USB_EPRX_STAT|USB_EPREG_MASK)

+

+/*******************  Bit definition for USB_EP0R register  *******************/

+#define USB_EP0R_EA_Pos                       (0U)                             

+#define USB_EP0R_EA_Msk                       (0xFUL << USB_EP0R_EA_Pos)        /*!< 0x0000000F */

+#define USB_EP0R_EA                           USB_EP0R_EA_Msk                  /*!<Endpoint Address */

+

+#define USB_EP0R_STAT_TX_Pos                  (4U)                             

+#define USB_EP0R_STAT_TX_Msk                  (0x3UL << USB_EP0R_STAT_TX_Pos)   /*!< 0x00000030 */

+#define USB_EP0R_STAT_TX                      USB_EP0R_STAT_TX_Msk             /*!<STAT_TX[1:0] bits (Status bits, for transmission transfers) */

+#define USB_EP0R_STAT_TX_0                    (0x1UL << USB_EP0R_STAT_TX_Pos)   /*!< 0x00000010 */

+#define USB_EP0R_STAT_TX_1                    (0x2UL << USB_EP0R_STAT_TX_Pos)   /*!< 0x00000020 */

+

+#define USB_EP0R_DTOG_TX_Pos                  (6U)                             

+#define USB_EP0R_DTOG_TX_Msk                  (0x1UL << USB_EP0R_DTOG_TX_Pos)   /*!< 0x00000040 */

+#define USB_EP0R_DTOG_TX                      USB_EP0R_DTOG_TX_Msk             /*!<Data Toggle, for transmission transfers */

+#define USB_EP0R_CTR_TX_Pos                   (7U)                             

+#define USB_EP0R_CTR_TX_Msk                   (0x1UL << USB_EP0R_CTR_TX_Pos)    /*!< 0x00000080 */

+#define USB_EP0R_CTR_TX                       USB_EP0R_CTR_TX_Msk              /*!<Correct Transfer for transmission */

+#define USB_EP0R_EP_KIND_Pos                  (8U)                             

+#define USB_EP0R_EP_KIND_Msk                  (0x1UL << USB_EP0R_EP_KIND_Pos)   /*!< 0x00000100 */

+#define USB_EP0R_EP_KIND                      USB_EP0R_EP_KIND_Msk             /*!<Endpoint Kind */

+

+#define USB_EP0R_EP_TYPE_Pos                  (9U)                             

+#define USB_EP0R_EP_TYPE_Msk                  (0x3UL << USB_EP0R_EP_TYPE_Pos)   /*!< 0x00000600 */

+#define USB_EP0R_EP_TYPE                      USB_EP0R_EP_TYPE_Msk             /*!<EP_TYPE[1:0] bits (Endpoint type) */

+#define USB_EP0R_EP_TYPE_0                    (0x1UL << USB_EP0R_EP_TYPE_Pos)   /*!< 0x00000200 */

+#define USB_EP0R_EP_TYPE_1                    (0x2UL << USB_EP0R_EP_TYPE_Pos)   /*!< 0x00000400 */

+

+#define USB_EP0R_SETUP_Pos                    (11U)                            

+#define USB_EP0R_SETUP_Msk                    (0x1UL << USB_EP0R_SETUP_Pos)     /*!< 0x00000800 */

+#define USB_EP0R_SETUP                        USB_EP0R_SETUP_Msk               /*!<Setup transaction completed */

+

+#define USB_EP0R_STAT_RX_Pos                  (12U)                            

+#define USB_EP0R_STAT_RX_Msk                  (0x3UL << USB_EP0R_STAT_RX_Pos)   /*!< 0x00003000 */

+#define USB_EP0R_STAT_RX                      USB_EP0R_STAT_RX_Msk             /*!<STAT_RX[1:0] bits (Status bits, for reception transfers) */

+#define USB_EP0R_STAT_RX_0                    (0x1UL << USB_EP0R_STAT_RX_Pos)   /*!< 0x00001000 */

+#define USB_EP0R_STAT_RX_1                    (0x2UL << USB_EP0R_STAT_RX_Pos)   /*!< 0x00002000 */

+

+#define USB_EP0R_DTOG_RX_Pos                  (14U)                            

+#define USB_EP0R_DTOG_RX_Msk                  (0x1UL << USB_EP0R_DTOG_RX_Pos)   /*!< 0x00004000 */

+#define USB_EP0R_DTOG_RX                      USB_EP0R_DTOG_RX_Msk             /*!<Data Toggle, for reception transfers */

+#define USB_EP0R_CTR_RX_Pos                   (15U)                            

+#define USB_EP0R_CTR_RX_Msk                   (0x1UL << USB_EP0R_CTR_RX_Pos)    /*!< 0x00008000 */

+#define USB_EP0R_CTR_RX                       USB_EP0R_CTR_RX_Msk              /*!<Correct Transfer for reception */

+

+/*******************  Bit definition for USB_EP1R register  *******************/

+#define USB_EP1R_EA_Pos                       (0U)                             

+#define USB_EP1R_EA_Msk                       (0xFUL << USB_EP1R_EA_Pos)        /*!< 0x0000000F */

+#define USB_EP1R_EA                           USB_EP1R_EA_Msk                  /*!<Endpoint Address */

+

+#define USB_EP1R_STAT_TX_Pos                  (4U)                             

+#define USB_EP1R_STAT_TX_Msk                  (0x3UL << USB_EP1R_STAT_TX_Pos)   /*!< 0x00000030 */

+#define USB_EP1R_STAT_TX                      USB_EP1R_STAT_TX_Msk             /*!<STAT_TX[1:0] bits (Status bits, for transmission transfers) */

+#define USB_EP1R_STAT_TX_0                    (0x1UL << USB_EP1R_STAT_TX_Pos)   /*!< 0x00000010 */

+#define USB_EP1R_STAT_TX_1                    (0x2UL << USB_EP1R_STAT_TX_Pos)   /*!< 0x00000020 */

+

+#define USB_EP1R_DTOG_TX_Pos                  (6U)                             

+#define USB_EP1R_DTOG_TX_Msk                  (0x1UL << USB_EP1R_DTOG_TX_Pos)   /*!< 0x00000040 */

+#define USB_EP1R_DTOG_TX                      USB_EP1R_DTOG_TX_Msk             /*!<Data Toggle, for transmission transfers */

+#define USB_EP1R_CTR_TX_Pos                   (7U)                             

+#define USB_EP1R_CTR_TX_Msk                   (0x1UL << USB_EP1R_CTR_TX_Pos)    /*!< 0x00000080 */

+#define USB_EP1R_CTR_TX                       USB_EP1R_CTR_TX_Msk              /*!<Correct Transfer for transmission */

+#define USB_EP1R_EP_KIND_Pos                  (8U)                             

+#define USB_EP1R_EP_KIND_Msk                  (0x1UL << USB_EP1R_EP_KIND_Pos)   /*!< 0x00000100 */

+#define USB_EP1R_EP_KIND                      USB_EP1R_EP_KIND_Msk             /*!<Endpoint Kind */

+

+#define USB_EP1R_EP_TYPE_Pos                  (9U)                             

+#define USB_EP1R_EP_TYPE_Msk                  (0x3UL << USB_EP1R_EP_TYPE_Pos)   /*!< 0x00000600 */

+#define USB_EP1R_EP_TYPE                      USB_EP1R_EP_TYPE_Msk             /*!<EP_TYPE[1:0] bits (Endpoint type) */

+#define USB_EP1R_EP_TYPE_0                    (0x1UL << USB_EP1R_EP_TYPE_Pos)   /*!< 0x00000200 */

+#define USB_EP1R_EP_TYPE_1                    (0x2UL << USB_EP1R_EP_TYPE_Pos)   /*!< 0x00000400 */

+

+#define USB_EP1R_SETUP_Pos                    (11U)                            

+#define USB_EP1R_SETUP_Msk                    (0x1UL << USB_EP1R_SETUP_Pos)     /*!< 0x00000800 */

+#define USB_EP1R_SETUP                        USB_EP1R_SETUP_Msk               /*!<Setup transaction completed */

+

+#define USB_EP1R_STAT_RX_Pos                  (12U)                            

+#define USB_EP1R_STAT_RX_Msk                  (0x3UL << USB_EP1R_STAT_RX_Pos)   /*!< 0x00003000 */

+#define USB_EP1R_STAT_RX                      USB_EP1R_STAT_RX_Msk             /*!<STAT_RX[1:0] bits (Status bits, for reception transfers) */

+#define USB_EP1R_STAT_RX_0                    (0x1UL << USB_EP1R_STAT_RX_Pos)   /*!< 0x00001000 */

+#define USB_EP1R_STAT_RX_1                    (0x2UL << USB_EP1R_STAT_RX_Pos)   /*!< 0x00002000 */

+

+#define USB_EP1R_DTOG_RX_Pos                  (14U)                            

+#define USB_EP1R_DTOG_RX_Msk                  (0x1UL << USB_EP1R_DTOG_RX_Pos)   /*!< 0x00004000 */

+#define USB_EP1R_DTOG_RX                      USB_EP1R_DTOG_RX_Msk             /*!<Data Toggle, for reception transfers */

+#define USB_EP1R_CTR_RX_Pos                   (15U)                            

+#define USB_EP1R_CTR_RX_Msk                   (0x1UL << USB_EP1R_CTR_RX_Pos)    /*!< 0x00008000 */

+#define USB_EP1R_CTR_RX                       USB_EP1R_CTR_RX_Msk              /*!<Correct Transfer for reception */

+

+/*******************  Bit definition for USB_EP2R register  *******************/

+#define USB_EP2R_EA_Pos                       (0U)                             

+#define USB_EP2R_EA_Msk                       (0xFUL << USB_EP2R_EA_Pos)        /*!< 0x0000000F */

+#define USB_EP2R_EA                           USB_EP2R_EA_Msk                  /*!<Endpoint Address */

+

+#define USB_EP2R_STAT_TX_Pos                  (4U)                             

+#define USB_EP2R_STAT_TX_Msk                  (0x3UL << USB_EP2R_STAT_TX_Pos)   /*!< 0x00000030 */

+#define USB_EP2R_STAT_TX                      USB_EP2R_STAT_TX_Msk             /*!<STAT_TX[1:0] bits (Status bits, for transmission transfers) */

+#define USB_EP2R_STAT_TX_0                    (0x1UL << USB_EP2R_STAT_TX_Pos)   /*!< 0x00000010 */

+#define USB_EP2R_STAT_TX_1                    (0x2UL << USB_EP2R_STAT_TX_Pos)   /*!< 0x00000020 */

+

+#define USB_EP2R_DTOG_TX_Pos                  (6U)                             

+#define USB_EP2R_DTOG_TX_Msk                  (0x1UL << USB_EP2R_DTOG_TX_Pos)   /*!< 0x00000040 */

+#define USB_EP2R_DTOG_TX                      USB_EP2R_DTOG_TX_Msk             /*!<Data Toggle, for transmission transfers */

+#define USB_EP2R_CTR_TX_Pos                   (7U)                             

+#define USB_EP2R_CTR_TX_Msk                   (0x1UL << USB_EP2R_CTR_TX_Pos)    /*!< 0x00000080 */

+#define USB_EP2R_CTR_TX                       USB_EP2R_CTR_TX_Msk              /*!<Correct Transfer for transmission */

+#define USB_EP2R_EP_KIND_Pos                  (8U)                             

+#define USB_EP2R_EP_KIND_Msk                  (0x1UL << USB_EP2R_EP_KIND_Pos)   /*!< 0x00000100 */

+#define USB_EP2R_EP_KIND                      USB_EP2R_EP_KIND_Msk             /*!<Endpoint Kind */

+

+#define USB_EP2R_EP_TYPE_Pos                  (9U)                             

+#define USB_EP2R_EP_TYPE_Msk                  (0x3UL << USB_EP2R_EP_TYPE_Pos)   /*!< 0x00000600 */

+#define USB_EP2R_EP_TYPE                      USB_EP2R_EP_TYPE_Msk             /*!<EP_TYPE[1:0] bits (Endpoint type) */

+#define USB_EP2R_EP_TYPE_0                    (0x1UL << USB_EP2R_EP_TYPE_Pos)   /*!< 0x00000200 */

+#define USB_EP2R_EP_TYPE_1                    (0x2UL << USB_EP2R_EP_TYPE_Pos)   /*!< 0x00000400 */

+

+#define USB_EP2R_SETUP_Pos                    (11U)                            

+#define USB_EP2R_SETUP_Msk                    (0x1UL << USB_EP2R_SETUP_Pos)     /*!< 0x00000800 */

+#define USB_EP2R_SETUP                        USB_EP2R_SETUP_Msk               /*!<Setup transaction completed */

+

+#define USB_EP2R_STAT_RX_Pos                  (12U)                            

+#define USB_EP2R_STAT_RX_Msk                  (0x3UL << USB_EP2R_STAT_RX_Pos)   /*!< 0x00003000 */

+#define USB_EP2R_STAT_RX                      USB_EP2R_STAT_RX_Msk             /*!<STAT_RX[1:0] bits (Status bits, for reception transfers) */

+#define USB_EP2R_STAT_RX_0                    (0x1UL << USB_EP2R_STAT_RX_Pos)   /*!< 0x00001000 */

+#define USB_EP2R_STAT_RX_1                    (0x2UL << USB_EP2R_STAT_RX_Pos)   /*!< 0x00002000 */

+

+#define USB_EP2R_DTOG_RX_Pos                  (14U)                            

+#define USB_EP2R_DTOG_RX_Msk                  (0x1UL << USB_EP2R_DTOG_RX_Pos)   /*!< 0x00004000 */

+#define USB_EP2R_DTOG_RX                      USB_EP2R_DTOG_RX_Msk             /*!<Data Toggle, for reception transfers */

+#define USB_EP2R_CTR_RX_Pos                   (15U)                            

+#define USB_EP2R_CTR_RX_Msk                   (0x1UL << USB_EP2R_CTR_RX_Pos)    /*!< 0x00008000 */

+#define USB_EP2R_CTR_RX                       USB_EP2R_CTR_RX_Msk              /*!<Correct Transfer for reception */

+

+/*******************  Bit definition for USB_EP3R register  *******************/

+#define USB_EP3R_EA_Pos                       (0U)                             

+#define USB_EP3R_EA_Msk                       (0xFUL << USB_EP3R_EA_Pos)        /*!< 0x0000000F */

+#define USB_EP3R_EA                           USB_EP3R_EA_Msk                  /*!<Endpoint Address */

+

+#define USB_EP3R_STAT_TX_Pos                  (4U)                             

+#define USB_EP3R_STAT_TX_Msk                  (0x3UL << USB_EP3R_STAT_TX_Pos)   /*!< 0x00000030 */

+#define USB_EP3R_STAT_TX                      USB_EP3R_STAT_TX_Msk             /*!<STAT_TX[1:0] bits (Status bits, for transmission transfers) */

+#define USB_EP3R_STAT_TX_0                    (0x1UL << USB_EP3R_STAT_TX_Pos)   /*!< 0x00000010 */

+#define USB_EP3R_STAT_TX_1                    (0x2UL << USB_EP3R_STAT_TX_Pos)   /*!< 0x00000020 */

+

+#define USB_EP3R_DTOG_TX_Pos                  (6U)                             

+#define USB_EP3R_DTOG_TX_Msk                  (0x1UL << USB_EP3R_DTOG_TX_Pos)   /*!< 0x00000040 */

+#define USB_EP3R_DTOG_TX                      USB_EP3R_DTOG_TX_Msk             /*!<Data Toggle, for transmission transfers */

+#define USB_EP3R_CTR_TX_Pos                   (7U)                             

+#define USB_EP3R_CTR_TX_Msk                   (0x1UL << USB_EP3R_CTR_TX_Pos)    /*!< 0x00000080 */

+#define USB_EP3R_CTR_TX                       USB_EP3R_CTR_TX_Msk              /*!<Correct Transfer for transmission */

+#define USB_EP3R_EP_KIND_Pos                  (8U)                             

+#define USB_EP3R_EP_KIND_Msk                  (0x1UL << USB_EP3R_EP_KIND_Pos)   /*!< 0x00000100 */

+#define USB_EP3R_EP_KIND                      USB_EP3R_EP_KIND_Msk             /*!<Endpoint Kind */

+

+#define USB_EP3R_EP_TYPE_Pos                  (9U)                             

+#define USB_EP3R_EP_TYPE_Msk                  (0x3UL << USB_EP3R_EP_TYPE_Pos)   /*!< 0x00000600 */

+#define USB_EP3R_EP_TYPE                      USB_EP3R_EP_TYPE_Msk             /*!<EP_TYPE[1:0] bits (Endpoint type) */

+#define USB_EP3R_EP_TYPE_0                    (0x1UL << USB_EP3R_EP_TYPE_Pos)   /*!< 0x00000200 */

+#define USB_EP3R_EP_TYPE_1                    (0x2UL << USB_EP3R_EP_TYPE_Pos)   /*!< 0x00000400 */

+

+#define USB_EP3R_SETUP_Pos                    (11U)                            

+#define USB_EP3R_SETUP_Msk                    (0x1UL << USB_EP3R_SETUP_Pos)     /*!< 0x00000800 */

+#define USB_EP3R_SETUP                        USB_EP3R_SETUP_Msk               /*!<Setup transaction completed */

+

+#define USB_EP3R_STAT_RX_Pos                  (12U)                            

+#define USB_EP3R_STAT_RX_Msk                  (0x3UL << USB_EP3R_STAT_RX_Pos)   /*!< 0x00003000 */

+#define USB_EP3R_STAT_RX                      USB_EP3R_STAT_RX_Msk             /*!<STAT_RX[1:0] bits (Status bits, for reception transfers) */

+#define USB_EP3R_STAT_RX_0                    (0x1UL << USB_EP3R_STAT_RX_Pos)   /*!< 0x00001000 */

+#define USB_EP3R_STAT_RX_1                    (0x2UL << USB_EP3R_STAT_RX_Pos)   /*!< 0x00002000 */

+

+#define USB_EP3R_DTOG_RX_Pos                  (14U)                            

+#define USB_EP3R_DTOG_RX_Msk                  (0x1UL << USB_EP3R_DTOG_RX_Pos)   /*!< 0x00004000 */

+#define USB_EP3R_DTOG_RX                      USB_EP3R_DTOG_RX_Msk             /*!<Data Toggle, for reception transfers */

+#define USB_EP3R_CTR_RX_Pos                   (15U)                            

+#define USB_EP3R_CTR_RX_Msk                   (0x1UL << USB_EP3R_CTR_RX_Pos)    /*!< 0x00008000 */

+#define USB_EP3R_CTR_RX                       USB_EP3R_CTR_RX_Msk              /*!<Correct Transfer for reception */

+

+/*******************  Bit definition for USB_EP4R register  *******************/

+#define USB_EP4R_EA_Pos                       (0U)                             

+#define USB_EP4R_EA_Msk                       (0xFUL << USB_EP4R_EA_Pos)        /*!< 0x0000000F */

+#define USB_EP4R_EA                           USB_EP4R_EA_Msk                  /*!<Endpoint Address */

+

+#define USB_EP4R_STAT_TX_Pos                  (4U)                             

+#define USB_EP4R_STAT_TX_Msk                  (0x3UL << USB_EP4R_STAT_TX_Pos)   /*!< 0x00000030 */

+#define USB_EP4R_STAT_TX                      USB_EP4R_STAT_TX_Msk             /*!<STAT_TX[1:0] bits (Status bits, for transmission transfers) */

+#define USB_EP4R_STAT_TX_0                    (0x1UL << USB_EP4R_STAT_TX_Pos)   /*!< 0x00000010 */

+#define USB_EP4R_STAT_TX_1                    (0x2UL << USB_EP4R_STAT_TX_Pos)   /*!< 0x00000020 */

+

+#define USB_EP4R_DTOG_TX_Pos                  (6U)                             

+#define USB_EP4R_DTOG_TX_Msk                  (0x1UL << USB_EP4R_DTOG_TX_Pos)   /*!< 0x00000040 */

+#define USB_EP4R_DTOG_TX                      USB_EP4R_DTOG_TX_Msk             /*!<Data Toggle, for transmission transfers */

+#define USB_EP4R_CTR_TX_Pos                   (7U)                             

+#define USB_EP4R_CTR_TX_Msk                   (0x1UL << USB_EP4R_CTR_TX_Pos)    /*!< 0x00000080 */

+#define USB_EP4R_CTR_TX                       USB_EP4R_CTR_TX_Msk              /*!<Correct Transfer for transmission */

+#define USB_EP4R_EP_KIND_Pos                  (8U)                             

+#define USB_EP4R_EP_KIND_Msk                  (0x1UL << USB_EP4R_EP_KIND_Pos)   /*!< 0x00000100 */

+#define USB_EP4R_EP_KIND                      USB_EP4R_EP_KIND_Msk             /*!<Endpoint Kind */

+

+#define USB_EP4R_EP_TYPE_Pos                  (9U)                             

+#define USB_EP4R_EP_TYPE_Msk                  (0x3UL << USB_EP4R_EP_TYPE_Pos)   /*!< 0x00000600 */

+#define USB_EP4R_EP_TYPE                      USB_EP4R_EP_TYPE_Msk             /*!<EP_TYPE[1:0] bits (Endpoint type) */

+#define USB_EP4R_EP_TYPE_0                    (0x1UL << USB_EP4R_EP_TYPE_Pos)   /*!< 0x00000200 */

+#define USB_EP4R_EP_TYPE_1                    (0x2UL << USB_EP4R_EP_TYPE_Pos)   /*!< 0x00000400 */

+

+#define USB_EP4R_SETUP_Pos                    (11U)                            

+#define USB_EP4R_SETUP_Msk                    (0x1UL << USB_EP4R_SETUP_Pos)     /*!< 0x00000800 */

+#define USB_EP4R_SETUP                        USB_EP4R_SETUP_Msk               /*!<Setup transaction completed */

+

+#define USB_EP4R_STAT_RX_Pos                  (12U)                            

+#define USB_EP4R_STAT_RX_Msk                  (0x3UL << USB_EP4R_STAT_RX_Pos)   /*!< 0x00003000 */

+#define USB_EP4R_STAT_RX                      USB_EP4R_STAT_RX_Msk             /*!<STAT_RX[1:0] bits (Status bits, for reception transfers) */

+#define USB_EP4R_STAT_RX_0                    (0x1UL << USB_EP4R_STAT_RX_Pos)   /*!< 0x00001000 */

+#define USB_EP4R_STAT_RX_1                    (0x2UL << USB_EP4R_STAT_RX_Pos)   /*!< 0x00002000 */

+

+#define USB_EP4R_DTOG_RX_Pos                  (14U)                            

+#define USB_EP4R_DTOG_RX_Msk                  (0x1UL << USB_EP4R_DTOG_RX_Pos)   /*!< 0x00004000 */

+#define USB_EP4R_DTOG_RX                      USB_EP4R_DTOG_RX_Msk             /*!<Data Toggle, for reception transfers */

+#define USB_EP4R_CTR_RX_Pos                   (15U)                            

+#define USB_EP4R_CTR_RX_Msk                   (0x1UL << USB_EP4R_CTR_RX_Pos)    /*!< 0x00008000 */

+#define USB_EP4R_CTR_RX                       USB_EP4R_CTR_RX_Msk              /*!<Correct Transfer for reception */

+

+/*******************  Bit definition for USB_EP5R register  *******************/

+#define USB_EP5R_EA_Pos                       (0U)                             

+#define USB_EP5R_EA_Msk                       (0xFUL << USB_EP5R_EA_Pos)        /*!< 0x0000000F */

+#define USB_EP5R_EA                           USB_EP5R_EA_Msk                  /*!<Endpoint Address */

+

+#define USB_EP5R_STAT_TX_Pos                  (4U)                             

+#define USB_EP5R_STAT_TX_Msk                  (0x3UL << USB_EP5R_STAT_TX_Pos)   /*!< 0x00000030 */

+#define USB_EP5R_STAT_TX                      USB_EP5R_STAT_TX_Msk             /*!<STAT_TX[1:0] bits (Status bits, for transmission transfers) */

+#define USB_EP5R_STAT_TX_0                    (0x1UL << USB_EP5R_STAT_TX_Pos)   /*!< 0x00000010 */

+#define USB_EP5R_STAT_TX_1                    (0x2UL << USB_EP5R_STAT_TX_Pos)   /*!< 0x00000020 */

+

+#define USB_EP5R_DTOG_TX_Pos                  (6U)                             

+#define USB_EP5R_DTOG_TX_Msk                  (0x1UL << USB_EP5R_DTOG_TX_Pos)   /*!< 0x00000040 */

+#define USB_EP5R_DTOG_TX                      USB_EP5R_DTOG_TX_Msk             /*!<Data Toggle, for transmission transfers */

+#define USB_EP5R_CTR_TX_Pos                   (7U)                             

+#define USB_EP5R_CTR_TX_Msk                   (0x1UL << USB_EP5R_CTR_TX_Pos)    /*!< 0x00000080 */

+#define USB_EP5R_CTR_TX                       USB_EP5R_CTR_TX_Msk              /*!<Correct Transfer for transmission */

+#define USB_EP5R_EP_KIND_Pos                  (8U)                             

+#define USB_EP5R_EP_KIND_Msk                  (0x1UL << USB_EP5R_EP_KIND_Pos)   /*!< 0x00000100 */

+#define USB_EP5R_EP_KIND                      USB_EP5R_EP_KIND_Msk             /*!<Endpoint Kind */

+

+#define USB_EP5R_EP_TYPE_Pos                  (9U)                             

+#define USB_EP5R_EP_TYPE_Msk                  (0x3UL << USB_EP5R_EP_TYPE_Pos)   /*!< 0x00000600 */

+#define USB_EP5R_EP_TYPE                      USB_EP5R_EP_TYPE_Msk             /*!<EP_TYPE[1:0] bits (Endpoint type) */

+#define USB_EP5R_EP_TYPE_0                    (0x1UL << USB_EP5R_EP_TYPE_Pos)   /*!< 0x00000200 */

+#define USB_EP5R_EP_TYPE_1                    (0x2UL << USB_EP5R_EP_TYPE_Pos)   /*!< 0x00000400 */

+

+#define USB_EP5R_SETUP_Pos                    (11U)                            

+#define USB_EP5R_SETUP_Msk                    (0x1UL << USB_EP5R_SETUP_Pos)     /*!< 0x00000800 */

+#define USB_EP5R_SETUP                        USB_EP5R_SETUP_Msk               /*!<Setup transaction completed */

+

+#define USB_EP5R_STAT_RX_Pos                  (12U)                            

+#define USB_EP5R_STAT_RX_Msk                  (0x3UL << USB_EP5R_STAT_RX_Pos)   /*!< 0x00003000 */

+#define USB_EP5R_STAT_RX                      USB_EP5R_STAT_RX_Msk             /*!<STAT_RX[1:0] bits (Status bits, for reception transfers) */

+#define USB_EP5R_STAT_RX_0                    (0x1UL << USB_EP5R_STAT_RX_Pos)   /*!< 0x00001000 */

+#define USB_EP5R_STAT_RX_1                    (0x2UL << USB_EP5R_STAT_RX_Pos)   /*!< 0x00002000 */

+

+#define USB_EP5R_DTOG_RX_Pos                  (14U)                            

+#define USB_EP5R_DTOG_RX_Msk                  (0x1UL << USB_EP5R_DTOG_RX_Pos)   /*!< 0x00004000 */

+#define USB_EP5R_DTOG_RX                      USB_EP5R_DTOG_RX_Msk             /*!<Data Toggle, for reception transfers */

+#define USB_EP5R_CTR_RX_Pos                   (15U)                            

+#define USB_EP5R_CTR_RX_Msk                   (0x1UL << USB_EP5R_CTR_RX_Pos)    /*!< 0x00008000 */

+#define USB_EP5R_CTR_RX                       USB_EP5R_CTR_RX_Msk              /*!<Correct Transfer for reception */

+

+/*******************  Bit definition for USB_EP6R register  *******************/

+#define USB_EP6R_EA_Pos                       (0U)                             

+#define USB_EP6R_EA_Msk                       (0xFUL << USB_EP6R_EA_Pos)        /*!< 0x0000000F */

+#define USB_EP6R_EA                           USB_EP6R_EA_Msk                  /*!<Endpoint Address */

+

+#define USB_EP6R_STAT_TX_Pos                  (4U)                             

+#define USB_EP6R_STAT_TX_Msk                  (0x3UL << USB_EP6R_STAT_TX_Pos)   /*!< 0x00000030 */

+#define USB_EP6R_STAT_TX                      USB_EP6R_STAT_TX_Msk             /*!<STAT_TX[1:0] bits (Status bits, for transmission transfers) */

+#define USB_EP6R_STAT_TX_0                    (0x1UL << USB_EP6R_STAT_TX_Pos)   /*!< 0x00000010 */

+#define USB_EP6R_STAT_TX_1                    (0x2UL << USB_EP6R_STAT_TX_Pos)   /*!< 0x00000020 */

+

+#define USB_EP6R_DTOG_TX_Pos                  (6U)                             

+#define USB_EP6R_DTOG_TX_Msk                  (0x1UL << USB_EP6R_DTOG_TX_Pos)   /*!< 0x00000040 */

+#define USB_EP6R_DTOG_TX                      USB_EP6R_DTOG_TX_Msk             /*!<Data Toggle, for transmission transfers */

+#define USB_EP6R_CTR_TX_Pos                   (7U)                             

+#define USB_EP6R_CTR_TX_Msk                   (0x1UL << USB_EP6R_CTR_TX_Pos)    /*!< 0x00000080 */

+#define USB_EP6R_CTR_TX                       USB_EP6R_CTR_TX_Msk              /*!<Correct Transfer for transmission */

+#define USB_EP6R_EP_KIND_Pos                  (8U)                             

+#define USB_EP6R_EP_KIND_Msk                  (0x1UL << USB_EP6R_EP_KIND_Pos)   /*!< 0x00000100 */

+#define USB_EP6R_EP_KIND                      USB_EP6R_EP_KIND_Msk             /*!<Endpoint Kind */

+

+#define USB_EP6R_EP_TYPE_Pos                  (9U)                             

+#define USB_EP6R_EP_TYPE_Msk                  (0x3UL << USB_EP6R_EP_TYPE_Pos)   /*!< 0x00000600 */

+#define USB_EP6R_EP_TYPE                      USB_EP6R_EP_TYPE_Msk             /*!<EP_TYPE[1:0] bits (Endpoint type) */

+#define USB_EP6R_EP_TYPE_0                    (0x1UL << USB_EP6R_EP_TYPE_Pos)   /*!< 0x00000200 */

+#define USB_EP6R_EP_TYPE_1                    (0x2UL << USB_EP6R_EP_TYPE_Pos)   /*!< 0x00000400 */

+

+#define USB_EP6R_SETUP_Pos                    (11U)                            

+#define USB_EP6R_SETUP_Msk                    (0x1UL << USB_EP6R_SETUP_Pos)     /*!< 0x00000800 */

+#define USB_EP6R_SETUP                        USB_EP6R_SETUP_Msk               /*!<Setup transaction completed */

+

+#define USB_EP6R_STAT_RX_Pos                  (12U)                            

+#define USB_EP6R_STAT_RX_Msk                  (0x3UL << USB_EP6R_STAT_RX_Pos)   /*!< 0x00003000 */

+#define USB_EP6R_STAT_RX                      USB_EP6R_STAT_RX_Msk             /*!<STAT_RX[1:0] bits (Status bits, for reception transfers) */

+#define USB_EP6R_STAT_RX_0                    (0x1UL << USB_EP6R_STAT_RX_Pos)   /*!< 0x00001000 */

+#define USB_EP6R_STAT_RX_1                    (0x2UL << USB_EP6R_STAT_RX_Pos)   /*!< 0x00002000 */

+

+#define USB_EP6R_DTOG_RX_Pos                  (14U)                            

+#define USB_EP6R_DTOG_RX_Msk                  (0x1UL << USB_EP6R_DTOG_RX_Pos)   /*!< 0x00004000 */

+#define USB_EP6R_DTOG_RX                      USB_EP6R_DTOG_RX_Msk             /*!<Data Toggle, for reception transfers */

+#define USB_EP6R_CTR_RX_Pos                   (15U)                            

+#define USB_EP6R_CTR_RX_Msk                   (0x1UL << USB_EP6R_CTR_RX_Pos)    /*!< 0x00008000 */

+#define USB_EP6R_CTR_RX                       USB_EP6R_CTR_RX_Msk              /*!<Correct Transfer for reception */

+

+/*******************  Bit definition for USB_EP7R register  *******************/

+#define USB_EP7R_EA_Pos                       (0U)                             

+#define USB_EP7R_EA_Msk                       (0xFUL << USB_EP7R_EA_Pos)        /*!< 0x0000000F */

+#define USB_EP7R_EA                           USB_EP7R_EA_Msk                  /*!<Endpoint Address */

+

+#define USB_EP7R_STAT_TX_Pos                  (4U)                             

+#define USB_EP7R_STAT_TX_Msk                  (0x3UL << USB_EP7R_STAT_TX_Pos)   /*!< 0x00000030 */

+#define USB_EP7R_STAT_TX                      USB_EP7R_STAT_TX_Msk             /*!<STAT_TX[1:0] bits (Status bits, for transmission transfers) */

+#define USB_EP7R_STAT_TX_0                    (0x1UL << USB_EP7R_STAT_TX_Pos)   /*!< 0x00000010 */

+#define USB_EP7R_STAT_TX_1                    (0x2UL << USB_EP7R_STAT_TX_Pos)   /*!< 0x00000020 */

+

+#define USB_EP7R_DTOG_TX_Pos                  (6U)                             

+#define USB_EP7R_DTOG_TX_Msk                  (0x1UL << USB_EP7R_DTOG_TX_Pos)   /*!< 0x00000040 */

+#define USB_EP7R_DTOG_TX                      USB_EP7R_DTOG_TX_Msk             /*!<Data Toggle, for transmission transfers */

+#define USB_EP7R_CTR_TX_Pos                   (7U)                             

+#define USB_EP7R_CTR_TX_Msk                   (0x1UL << USB_EP7R_CTR_TX_Pos)    /*!< 0x00000080 */

+#define USB_EP7R_CTR_TX                       USB_EP7R_CTR_TX_Msk              /*!<Correct Transfer for transmission */

+#define USB_EP7R_EP_KIND_Pos                  (8U)                             

+#define USB_EP7R_EP_KIND_Msk                  (0x1UL << USB_EP7R_EP_KIND_Pos)   /*!< 0x00000100 */

+#define USB_EP7R_EP_KIND                      USB_EP7R_EP_KIND_Msk             /*!<Endpoint Kind */

+

+#define USB_EP7R_EP_TYPE_Pos                  (9U)                             

+#define USB_EP7R_EP_TYPE_Msk                  (0x3UL << USB_EP7R_EP_TYPE_Pos)   /*!< 0x00000600 */

+#define USB_EP7R_EP_TYPE                      USB_EP7R_EP_TYPE_Msk             /*!<EP_TYPE[1:0] bits (Endpoint type) */

+#define USB_EP7R_EP_TYPE_0                    (0x1UL << USB_EP7R_EP_TYPE_Pos)   /*!< 0x00000200 */

+#define USB_EP7R_EP_TYPE_1                    (0x2UL << USB_EP7R_EP_TYPE_Pos)   /*!< 0x00000400 */

+

+#define USB_EP7R_SETUP_Pos                    (11U)                            

+#define USB_EP7R_SETUP_Msk                    (0x1UL << USB_EP7R_SETUP_Pos)     /*!< 0x00000800 */

+#define USB_EP7R_SETUP                        USB_EP7R_SETUP_Msk               /*!<Setup transaction completed */

+

+#define USB_EP7R_STAT_RX_Pos                  (12U)                            

+#define USB_EP7R_STAT_RX_Msk                  (0x3UL << USB_EP7R_STAT_RX_Pos)   /*!< 0x00003000 */

+#define USB_EP7R_STAT_RX                      USB_EP7R_STAT_RX_Msk             /*!<STAT_RX[1:0] bits (Status bits, for reception transfers) */

+#define USB_EP7R_STAT_RX_0                    (0x1UL << USB_EP7R_STAT_RX_Pos)   /*!< 0x00001000 */

+#define USB_EP7R_STAT_RX_1                    (0x2UL << USB_EP7R_STAT_RX_Pos)   /*!< 0x00002000 */

+

+#define USB_EP7R_DTOG_RX_Pos                  (14U)                            

+#define USB_EP7R_DTOG_RX_Msk                  (0x1UL << USB_EP7R_DTOG_RX_Pos)   /*!< 0x00004000 */

+#define USB_EP7R_DTOG_RX                      USB_EP7R_DTOG_RX_Msk             /*!<Data Toggle, for reception transfers */

+#define USB_EP7R_CTR_RX_Pos                   (15U)                            

+#define USB_EP7R_CTR_RX_Msk                   (0x1UL << USB_EP7R_CTR_RX_Pos)    /*!< 0x00008000 */

+#define USB_EP7R_CTR_RX                       USB_EP7R_CTR_RX_Msk              /*!<Correct Transfer for reception */

+

+/*!<Common registers */

+

+#define  USB_CNTR                             (USB_BASE + 0x00000040U)          /*!< Control register */

+#define  USB_ISTR                             (USB_BASE + 0x00000044U)          /*!< Interrupt status register */

+#define  USB_FNR                              (USB_BASE + 0x00000048U)          /*!< Frame number register */

+#define  USB_DADDR                            (USB_BASE + 0x0000004CU)          /*!< Device address register */

+#define  USB_BTABLE                           (USB_BASE + 0x00000050U)          /*!< Buffer Table address register */

+

+

+

+/*******************  Bit definition for USB_CNTR register  *******************/

+#define USB_CNTR_FRES_Pos                     (0U)                             

+#define USB_CNTR_FRES_Msk                     (0x1UL << USB_CNTR_FRES_Pos)      /*!< 0x00000001 */

+#define USB_CNTR_FRES                         USB_CNTR_FRES_Msk                /*!<Force USB Reset */

+#define USB_CNTR_PDWN_Pos                     (1U)                             

+#define USB_CNTR_PDWN_Msk                     (0x1UL << USB_CNTR_PDWN_Pos)      /*!< 0x00000002 */

+#define USB_CNTR_PDWN                         USB_CNTR_PDWN_Msk                /*!<Power down */

+#define USB_CNTR_LPMODE_Pos                   (2U)                             

+#define USB_CNTR_LPMODE_Msk                   (0x1UL << USB_CNTR_LPMODE_Pos)    /*!< 0x00000004 */

+#define USB_CNTR_LPMODE                       USB_CNTR_LPMODE_Msk              /*!<Low-power mode */

+#define USB_CNTR_FSUSP_Pos                    (3U)                             

+#define USB_CNTR_FSUSP_Msk                    (0x1UL << USB_CNTR_FSUSP_Pos)     /*!< 0x00000008 */

+#define USB_CNTR_FSUSP                        USB_CNTR_FSUSP_Msk               /*!<Force suspend */

+#define USB_CNTR_RESUME_Pos                   (4U)                             

+#define USB_CNTR_RESUME_Msk                   (0x1UL << USB_CNTR_RESUME_Pos)    /*!< 0x00000010 */

+#define USB_CNTR_RESUME                       USB_CNTR_RESUME_Msk              /*!<Resume request */

+#define USB_CNTR_ESOFM_Pos                    (8U)                             

+#define USB_CNTR_ESOFM_Msk                    (0x1UL << USB_CNTR_ESOFM_Pos)     /*!< 0x00000100 */

+#define USB_CNTR_ESOFM                        USB_CNTR_ESOFM_Msk               /*!<Expected Start Of Frame Interrupt Mask */

+#define USB_CNTR_SOFM_Pos                     (9U)                             

+#define USB_CNTR_SOFM_Msk                     (0x1UL << USB_CNTR_SOFM_Pos)      /*!< 0x00000200 */

+#define USB_CNTR_SOFM                         USB_CNTR_SOFM_Msk                /*!<Start Of Frame Interrupt Mask */

+#define USB_CNTR_RESETM_Pos                   (10U)                            

+#define USB_CNTR_RESETM_Msk                   (0x1UL << USB_CNTR_RESETM_Pos)    /*!< 0x00000400 */

+#define USB_CNTR_RESETM                       USB_CNTR_RESETM_Msk              /*!<RESET Interrupt Mask */

+#define USB_CNTR_SUSPM_Pos                    (11U)                            

+#define USB_CNTR_SUSPM_Msk                    (0x1UL << USB_CNTR_SUSPM_Pos)     /*!< 0x00000800 */

+#define USB_CNTR_SUSPM                        USB_CNTR_SUSPM_Msk               /*!<Suspend mode Interrupt Mask */

+#define USB_CNTR_WKUPM_Pos                    (12U)                            

+#define USB_CNTR_WKUPM_Msk                    (0x1UL << USB_CNTR_WKUPM_Pos)     /*!< 0x00001000 */

+#define USB_CNTR_WKUPM                        USB_CNTR_WKUPM_Msk               /*!<Wakeup Interrupt Mask */

+#define USB_CNTR_ERRM_Pos                     (13U)                            

+#define USB_CNTR_ERRM_Msk                     (0x1UL << USB_CNTR_ERRM_Pos)      /*!< 0x00002000 */

+#define USB_CNTR_ERRM                         USB_CNTR_ERRM_Msk                /*!<Error Interrupt Mask */

+#define USB_CNTR_PMAOVRM_Pos                  (14U)                            

+#define USB_CNTR_PMAOVRM_Msk                  (0x1UL << USB_CNTR_PMAOVRM_Pos)   /*!< 0x00004000 */

+#define USB_CNTR_PMAOVRM                      USB_CNTR_PMAOVRM_Msk             /*!<Packet Memory Area Over / Underrun Interrupt Mask */

+#define USB_CNTR_CTRM_Pos                     (15U)                            

+#define USB_CNTR_CTRM_Msk                     (0x1UL << USB_CNTR_CTRM_Pos)      /*!< 0x00008000 */

+#define USB_CNTR_CTRM                         USB_CNTR_CTRM_Msk                /*!<Correct Transfer Interrupt Mask */

+

+/*******************  Bit definition for USB_ISTR register  *******************/

+#define USB_ISTR_EP_ID_Pos                    (0U)                             

+#define USB_ISTR_EP_ID_Msk                    (0xFUL << USB_ISTR_EP_ID_Pos)     /*!< 0x0000000F */

+#define USB_ISTR_EP_ID                        USB_ISTR_EP_ID_Msk               /*!<Endpoint Identifier */

+#define USB_ISTR_DIR_Pos                      (4U)                             

+#define USB_ISTR_DIR_Msk                      (0x1UL << USB_ISTR_DIR_Pos)       /*!< 0x00000010 */

+#define USB_ISTR_DIR                          USB_ISTR_DIR_Msk                 /*!<Direction of transaction */

+#define USB_ISTR_ESOF_Pos                     (8U)                             

+#define USB_ISTR_ESOF_Msk                     (0x1UL << USB_ISTR_ESOF_Pos)      /*!< 0x00000100 */

+#define USB_ISTR_ESOF                         USB_ISTR_ESOF_Msk                /*!<Expected Start Of Frame */

+#define USB_ISTR_SOF_Pos                      (9U)                             

+#define USB_ISTR_SOF_Msk                      (0x1UL << USB_ISTR_SOF_Pos)       /*!< 0x00000200 */

+#define USB_ISTR_SOF                          USB_ISTR_SOF_Msk                 /*!<Start Of Frame */

+#define USB_ISTR_RESET_Pos                    (10U)                            

+#define USB_ISTR_RESET_Msk                    (0x1UL << USB_ISTR_RESET_Pos)     /*!< 0x00000400 */

+#define USB_ISTR_RESET                        USB_ISTR_RESET_Msk               /*!<USB RESET request */

+#define USB_ISTR_SUSP_Pos                     (11U)                            

+#define USB_ISTR_SUSP_Msk                     (0x1UL << USB_ISTR_SUSP_Pos)      /*!< 0x00000800 */

+#define USB_ISTR_SUSP                         USB_ISTR_SUSP_Msk                /*!<Suspend mode request */

+#define USB_ISTR_WKUP_Pos                     (12U)                            

+#define USB_ISTR_WKUP_Msk                     (0x1UL << USB_ISTR_WKUP_Pos)      /*!< 0x00001000 */

+#define USB_ISTR_WKUP                         USB_ISTR_WKUP_Msk                /*!<Wake up */

+#define USB_ISTR_ERR_Pos                      (13U)                            

+#define USB_ISTR_ERR_Msk                      (0x1UL << USB_ISTR_ERR_Pos)       /*!< 0x00002000 */

+#define USB_ISTR_ERR                          USB_ISTR_ERR_Msk                 /*!<Error */

+#define USB_ISTR_PMAOVR_Pos                   (14U)                            

+#define USB_ISTR_PMAOVR_Msk                   (0x1UL << USB_ISTR_PMAOVR_Pos)    /*!< 0x00004000 */

+#define USB_ISTR_PMAOVR                       USB_ISTR_PMAOVR_Msk              /*!<Packet Memory Area Over / Underrun */

+#define USB_ISTR_CTR_Pos                      (15U)                            

+#define USB_ISTR_CTR_Msk                      (0x1UL << USB_ISTR_CTR_Pos)       /*!< 0x00008000 */

+#define USB_ISTR_CTR                          USB_ISTR_CTR_Msk                 /*!<Correct Transfer */

+

+#define  USB_CLR_CTR                          (~USB_ISTR_CTR)                  /*!< clear Correct TRansfer bit */

+#define  USB_CLR_PMAOVRM                      (~USB_ISTR_PMAOVR)               /*!< clear DMA OVeR/underrun bit*/

+#define  USB_CLR_ERR                          (~USB_ISTR_ERR)                  /*!< clear ERRor bit */

+#define  USB_CLR_WKUP                         (~USB_ISTR_WKUP)                 /*!< clear WaKe UP bit */

+#define  USB_CLR_SUSP                         (~USB_ISTR_SUSP)                 /*!< clear SUSPend bit */

+#define  USB_CLR_RESET                        (~USB_ISTR_RESET)                /*!< clear RESET bit */

+#define  USB_CLR_SOF                          (~USB_ISTR_SOF)                  /*!< clear Start Of Frame bit */

+#define  USB_CLR_ESOF                         (~USB_ISTR_ESOF)                 /*!< clear Expected Start Of Frame bit */

+

+

+/*******************  Bit definition for USB_FNR register  ********************/

+#define USB_FNR_FN_Pos                        (0U)                             

+#define USB_FNR_FN_Msk                        (0x7FFUL << USB_FNR_FN_Pos)       /*!< 0x000007FF */

+#define USB_FNR_FN                            USB_FNR_FN_Msk                   /*!<Frame Number */

+#define USB_FNR_LSOF_Pos                      (11U)                            

+#define USB_FNR_LSOF_Msk                      (0x3UL << USB_FNR_LSOF_Pos)       /*!< 0x00001800 */

+#define USB_FNR_LSOF                          USB_FNR_LSOF_Msk                 /*!<Lost SOF */

+#define USB_FNR_LCK_Pos                       (13U)                            

+#define USB_FNR_LCK_Msk                       (0x1UL << USB_FNR_LCK_Pos)        /*!< 0x00002000 */

+#define USB_FNR_LCK                           USB_FNR_LCK_Msk                  /*!<Locked */

+#define USB_FNR_RXDM_Pos                      (14U)                            

+#define USB_FNR_RXDM_Msk                      (0x1UL << USB_FNR_RXDM_Pos)       /*!< 0x00004000 */

+#define USB_FNR_RXDM                          USB_FNR_RXDM_Msk                 /*!<Receive Data - Line Status */

+#define USB_FNR_RXDP_Pos                      (15U)                            

+#define USB_FNR_RXDP_Msk                      (0x1UL << USB_FNR_RXDP_Pos)       /*!< 0x00008000 */

+#define USB_FNR_RXDP                          USB_FNR_RXDP_Msk                 /*!<Receive Data + Line Status */

+

+/******************  Bit definition for USB_DADDR register  *******************/

+#define USB_DADDR_ADD_Pos                     (0U)                             

+#define USB_DADDR_ADD_Msk                     (0x7FUL << USB_DADDR_ADD_Pos)     /*!< 0x0000007F */

+#define USB_DADDR_ADD                         USB_DADDR_ADD_Msk                /*!<ADD[6:0] bits (Device Address) */

+#define USB_DADDR_ADD0_Pos                    (0U)                             

+#define USB_DADDR_ADD0_Msk                    (0x1UL << USB_DADDR_ADD0_Pos)     /*!< 0x00000001 */

+#define USB_DADDR_ADD0                        USB_DADDR_ADD0_Msk               /*!<Bit 0 */

+#define USB_DADDR_ADD1_Pos                    (1U)                             

+#define USB_DADDR_ADD1_Msk                    (0x1UL << USB_DADDR_ADD1_Pos)     /*!< 0x00000002 */

+#define USB_DADDR_ADD1                        USB_DADDR_ADD1_Msk               /*!<Bit 1 */

+#define USB_DADDR_ADD2_Pos                    (2U)                             

+#define USB_DADDR_ADD2_Msk                    (0x1UL << USB_DADDR_ADD2_Pos)     /*!< 0x00000004 */

+#define USB_DADDR_ADD2                        USB_DADDR_ADD2_Msk               /*!<Bit 2 */

+#define USB_DADDR_ADD3_Pos                    (3U)                             

+#define USB_DADDR_ADD3_Msk                    (0x1UL << USB_DADDR_ADD3_Pos)     /*!< 0x00000008 */

+#define USB_DADDR_ADD3                        USB_DADDR_ADD3_Msk               /*!<Bit 3 */

+#define USB_DADDR_ADD4_Pos                    (4U)                             

+#define USB_DADDR_ADD4_Msk                    (0x1UL << USB_DADDR_ADD4_Pos)     /*!< 0x00000010 */

+#define USB_DADDR_ADD4                        USB_DADDR_ADD4_Msk               /*!<Bit 4 */

+#define USB_DADDR_ADD5_Pos                    (5U)                             

+#define USB_DADDR_ADD5_Msk                    (0x1UL << USB_DADDR_ADD5_Pos)     /*!< 0x00000020 */

+#define USB_DADDR_ADD5                        USB_DADDR_ADD5_Msk               /*!<Bit 5 */

+#define USB_DADDR_ADD6_Pos                    (6U)                             

+#define USB_DADDR_ADD6_Msk                    (0x1UL << USB_DADDR_ADD6_Pos)     /*!< 0x00000040 */

+#define USB_DADDR_ADD6                        USB_DADDR_ADD6_Msk               /*!<Bit 6 */

+

+#define USB_DADDR_EF_Pos                      (7U)                             

+#define USB_DADDR_EF_Msk                      (0x1UL << USB_DADDR_EF_Pos)       /*!< 0x00000080 */

+#define USB_DADDR_EF                          USB_DADDR_EF_Msk                 /*!<Enable Function */

+

+/******************  Bit definition for USB_BTABLE register  ******************/    

+#define USB_BTABLE_BTABLE_Pos                 (3U)                             

+#define USB_BTABLE_BTABLE_Msk                 (0x1FFFUL << USB_BTABLE_BTABLE_Pos) /*!< 0x0000FFF8 */

+#define USB_BTABLE_BTABLE                     USB_BTABLE_BTABLE_Msk            /*!<Buffer Table */

+

+/*!< Buffer descriptor table */

+/*****************  Bit definition for USB_ADDR0_TX register  *****************/

+#define USB_ADDR0_TX_ADDR0_TX_Pos             (1U)                             

+#define USB_ADDR0_TX_ADDR0_TX_Msk             (0x7FFFUL << USB_ADDR0_TX_ADDR0_TX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR0_TX_ADDR0_TX                 USB_ADDR0_TX_ADDR0_TX_Msk        /*!< Transmission Buffer Address 0 */

+

+/*****************  Bit definition for USB_ADDR1_TX register  *****************/

+#define USB_ADDR1_TX_ADDR1_TX_Pos             (1U)                             

+#define USB_ADDR1_TX_ADDR1_TX_Msk             (0x7FFFUL << USB_ADDR1_TX_ADDR1_TX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR1_TX_ADDR1_TX                 USB_ADDR1_TX_ADDR1_TX_Msk        /*!< Transmission Buffer Address 1 */

+

+/*****************  Bit definition for USB_ADDR2_TX register  *****************/

+#define USB_ADDR2_TX_ADDR2_TX_Pos             (1U)                             

+#define USB_ADDR2_TX_ADDR2_TX_Msk             (0x7FFFUL << USB_ADDR2_TX_ADDR2_TX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR2_TX_ADDR2_TX                 USB_ADDR2_TX_ADDR2_TX_Msk        /*!< Transmission Buffer Address 2 */

+

+/*****************  Bit definition for USB_ADDR3_TX register  *****************/

+#define USB_ADDR3_TX_ADDR3_TX_Pos             (1U)                             

+#define USB_ADDR3_TX_ADDR3_TX_Msk             (0x7FFFUL << USB_ADDR3_TX_ADDR3_TX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR3_TX_ADDR3_TX                 USB_ADDR3_TX_ADDR3_TX_Msk        /*!< Transmission Buffer Address 3 */

+

+/*****************  Bit definition for USB_ADDR4_TX register  *****************/

+#define USB_ADDR4_TX_ADDR4_TX_Pos             (1U)                             

+#define USB_ADDR4_TX_ADDR4_TX_Msk             (0x7FFFUL << USB_ADDR4_TX_ADDR4_TX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR4_TX_ADDR4_TX                 USB_ADDR4_TX_ADDR4_TX_Msk        /*!< Transmission Buffer Address 4 */

+

+/*****************  Bit definition for USB_ADDR5_TX register  *****************/

+#define USB_ADDR5_TX_ADDR5_TX_Pos             (1U)                             

+#define USB_ADDR5_TX_ADDR5_TX_Msk             (0x7FFFUL << USB_ADDR5_TX_ADDR5_TX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR5_TX_ADDR5_TX                 USB_ADDR5_TX_ADDR5_TX_Msk        /*!< Transmission Buffer Address 5 */

+

+/*****************  Bit definition for USB_ADDR6_TX register  *****************/

+#define USB_ADDR6_TX_ADDR6_TX_Pos             (1U)                             

+#define USB_ADDR6_TX_ADDR6_TX_Msk             (0x7FFFUL << USB_ADDR6_TX_ADDR6_TX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR6_TX_ADDR6_TX                 USB_ADDR6_TX_ADDR6_TX_Msk        /*!< Transmission Buffer Address 6 */

+

+/*****************  Bit definition for USB_ADDR7_TX register  *****************/

+#define USB_ADDR7_TX_ADDR7_TX_Pos             (1U)                             

+#define USB_ADDR7_TX_ADDR7_TX_Msk             (0x7FFFUL << USB_ADDR7_TX_ADDR7_TX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR7_TX_ADDR7_TX                 USB_ADDR7_TX_ADDR7_TX_Msk        /*!< Transmission Buffer Address 7 */

+

+/*----------------------------------------------------------------------------*/

+

+/*****************  Bit definition for USB_COUNT0_TX register  ****************/

+#define USB_COUNT0_TX_COUNT0_TX_Pos           (0U)                             

+#define USB_COUNT0_TX_COUNT0_TX_Msk           (0x3FFUL << USB_COUNT0_TX_COUNT0_TX_Pos) /*!< 0x000003FF */

+#define USB_COUNT0_TX_COUNT0_TX               USB_COUNT0_TX_COUNT0_TX_Msk      /*!< Transmission Byte Count 0 */

+

+/*****************  Bit definition for USB_COUNT1_TX register  ****************/

+#define USB_COUNT1_TX_COUNT1_TX_Pos           (0U)                             

+#define USB_COUNT1_TX_COUNT1_TX_Msk           (0x3FFUL << USB_COUNT1_TX_COUNT1_TX_Pos) /*!< 0x000003FF */

+#define USB_COUNT1_TX_COUNT1_TX               USB_COUNT1_TX_COUNT1_TX_Msk      /*!< Transmission Byte Count 1 */

+

+/*****************  Bit definition for USB_COUNT2_TX register  ****************/

+#define USB_COUNT2_TX_COUNT2_TX_Pos           (0U)                             

+#define USB_COUNT2_TX_COUNT2_TX_Msk           (0x3FFUL << USB_COUNT2_TX_COUNT2_TX_Pos) /*!< 0x000003FF */

+#define USB_COUNT2_TX_COUNT2_TX               USB_COUNT2_TX_COUNT2_TX_Msk      /*!< Transmission Byte Count 2 */

+

+/*****************  Bit definition for USB_COUNT3_TX register  ****************/

+#define USB_COUNT3_TX_COUNT3_TX_Pos           (0U)                             

+#define USB_COUNT3_TX_COUNT3_TX_Msk           (0x3FFUL << USB_COUNT3_TX_COUNT3_TX_Pos) /*!< 0x000003FF */

+#define USB_COUNT3_TX_COUNT3_TX               USB_COUNT3_TX_COUNT3_TX_Msk      /*!< Transmission Byte Count 3 */

+

+/*****************  Bit definition for USB_COUNT4_TX register  ****************/

+#define USB_COUNT4_TX_COUNT4_TX_Pos           (0U)                             

+#define USB_COUNT4_TX_COUNT4_TX_Msk           (0x3FFUL << USB_COUNT4_TX_COUNT4_TX_Pos) /*!< 0x000003FF */

+#define USB_COUNT4_TX_COUNT4_TX               USB_COUNT4_TX_COUNT4_TX_Msk      /*!< Transmission Byte Count 4 */

+

+/*****************  Bit definition for USB_COUNT5_TX register  ****************/

+#define USB_COUNT5_TX_COUNT5_TX_Pos           (0U)                             

+#define USB_COUNT5_TX_COUNT5_TX_Msk           (0x3FFUL << USB_COUNT5_TX_COUNT5_TX_Pos) /*!< 0x000003FF */

+#define USB_COUNT5_TX_COUNT5_TX               USB_COUNT5_TX_COUNT5_TX_Msk      /*!< Transmission Byte Count 5 */

+

+/*****************  Bit definition for USB_COUNT6_TX register  ****************/

+#define USB_COUNT6_TX_COUNT6_TX_Pos           (0U)                             

+#define USB_COUNT6_TX_COUNT6_TX_Msk           (0x3FFUL << USB_COUNT6_TX_COUNT6_TX_Pos) /*!< 0x000003FF */

+#define USB_COUNT6_TX_COUNT6_TX               USB_COUNT6_TX_COUNT6_TX_Msk      /*!< Transmission Byte Count 6 */

+

+/*****************  Bit definition for USB_COUNT7_TX register  ****************/

+#define USB_COUNT7_TX_COUNT7_TX_Pos           (0U)                             

+#define USB_COUNT7_TX_COUNT7_TX_Msk           (0x3FFUL << USB_COUNT7_TX_COUNT7_TX_Pos) /*!< 0x000003FF */

+#define USB_COUNT7_TX_COUNT7_TX               USB_COUNT7_TX_COUNT7_TX_Msk      /*!< Transmission Byte Count 7 */

+

+/*----------------------------------------------------------------------------*/

+

+/****************  Bit definition for USB_COUNT0_TX_0 register  ***************/

+#define USB_COUNT0_TX_0_COUNT0_TX_0           (0x000003FFU)                    /*!< Transmission Byte Count 0 (low) */

+

+/****************  Bit definition for USB_COUNT0_TX_1 register  ***************/

+#define USB_COUNT0_TX_1_COUNT0_TX_1           (0x03FF0000U)                    /*!< Transmission Byte Count 0 (high) */

+

+/****************  Bit definition for USB_COUNT1_TX_0 register  ***************/

+#define USB_COUNT1_TX_0_COUNT1_TX_0           (0x000003FFU)                    /*!< Transmission Byte Count 1 (low) */

+

+/****************  Bit definition for USB_COUNT1_TX_1 register  ***************/

+#define USB_COUNT1_TX_1_COUNT1_TX_1           (0x03FF0000U)                    /*!< Transmission Byte Count 1 (high) */

+

+/****************  Bit definition for USB_COUNT2_TX_0 register  ***************/

+#define USB_COUNT2_TX_0_COUNT2_TX_0           (0x000003FFU)                    /*!< Transmission Byte Count 2 (low) */

+

+/****************  Bit definition for USB_COUNT2_TX_1 register  ***************/

+#define USB_COUNT2_TX_1_COUNT2_TX_1           (0x03FF0000U)                    /*!< Transmission Byte Count 2 (high) */

+

+/****************  Bit definition for USB_COUNT3_TX_0 register  ***************/

+#define USB_COUNT3_TX_0_COUNT3_TX_0           (0x000003FFU)                    /*!< Transmission Byte Count 3 (low) */

+

+/****************  Bit definition for USB_COUNT3_TX_1 register  ***************/

+#define USB_COUNT3_TX_1_COUNT3_TX_1           (0x03FF0000U)                    /*!< Transmission Byte Count 3 (high) */

+

+/****************  Bit definition for USB_COUNT4_TX_0 register  ***************/

+#define USB_COUNT4_TX_0_COUNT4_TX_0           (0x000003FFU)                    /*!< Transmission Byte Count 4 (low) */

+

+/****************  Bit definition for USB_COUNT4_TX_1 register  ***************/

+#define USB_COUNT4_TX_1_COUNT4_TX_1           (0x03FF0000U)                    /*!< Transmission Byte Count 4 (high) */

+

+/****************  Bit definition for USB_COUNT5_TX_0 register  ***************/

+#define USB_COUNT5_TX_0_COUNT5_TX_0           (0x000003FFU)                    /*!< Transmission Byte Count 5 (low) */

+

+/****************  Bit definition for USB_COUNT5_TX_1 register  ***************/

+#define USB_COUNT5_TX_1_COUNT5_TX_1           (0x03FF0000U)                    /*!< Transmission Byte Count 5 (high) */

+

+/****************  Bit definition for USB_COUNT6_TX_0 register  ***************/

+#define USB_COUNT6_TX_0_COUNT6_TX_0           (0x000003FFU)                    /*!< Transmission Byte Count 6 (low) */

+

+/****************  Bit definition for USB_COUNT6_TX_1 register  ***************/

+#define USB_COUNT6_TX_1_COUNT6_TX_1           (0x03FF0000U)                    /*!< Transmission Byte Count 6 (high) */

+

+/****************  Bit definition for USB_COUNT7_TX_0 register  ***************/

+#define USB_COUNT7_TX_0_COUNT7_TX_0           (0x000003FFU)                    /*!< Transmission Byte Count 7 (low) */

+

+/****************  Bit definition for USB_COUNT7_TX_1 register  ***************/

+#define USB_COUNT7_TX_1_COUNT7_TX_1           (0x03FF0000U)                    /*!< Transmission Byte Count 7 (high) */

+

+/*----------------------------------------------------------------------------*/

+

+/*****************  Bit definition for USB_ADDR0_RX register  *****************/

+#define USB_ADDR0_RX_ADDR0_RX_Pos             (1U)                             

+#define USB_ADDR0_RX_ADDR0_RX_Msk             (0x7FFFUL << USB_ADDR0_RX_ADDR0_RX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR0_RX_ADDR0_RX                 USB_ADDR0_RX_ADDR0_RX_Msk        /*!< Reception Buffer Address 0 */

+

+/*****************  Bit definition for USB_ADDR1_RX register  *****************/

+#define USB_ADDR1_RX_ADDR1_RX_Pos             (1U)                             

+#define USB_ADDR1_RX_ADDR1_RX_Msk             (0x7FFFUL << USB_ADDR1_RX_ADDR1_RX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR1_RX_ADDR1_RX                 USB_ADDR1_RX_ADDR1_RX_Msk        /*!< Reception Buffer Address 1 */

+

+/*****************  Bit definition for USB_ADDR2_RX register  *****************/

+#define USB_ADDR2_RX_ADDR2_RX_Pos             (1U)                             

+#define USB_ADDR2_RX_ADDR2_RX_Msk             (0x7FFFUL << USB_ADDR2_RX_ADDR2_RX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR2_RX_ADDR2_RX                 USB_ADDR2_RX_ADDR2_RX_Msk        /*!< Reception Buffer Address 2 */

+

+/*****************  Bit definition for USB_ADDR3_RX register  *****************/

+#define USB_ADDR3_RX_ADDR3_RX_Pos             (1U)                             

+#define USB_ADDR3_RX_ADDR3_RX_Msk             (0x7FFFUL << USB_ADDR3_RX_ADDR3_RX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR3_RX_ADDR3_RX                 USB_ADDR3_RX_ADDR3_RX_Msk        /*!< Reception Buffer Address 3 */

+

+/*****************  Bit definition for USB_ADDR4_RX register  *****************/

+#define USB_ADDR4_RX_ADDR4_RX_Pos             (1U)                             

+#define USB_ADDR4_RX_ADDR4_RX_Msk             (0x7FFFUL << USB_ADDR4_RX_ADDR4_RX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR4_RX_ADDR4_RX                 USB_ADDR4_RX_ADDR4_RX_Msk        /*!< Reception Buffer Address 4 */

+

+/*****************  Bit definition for USB_ADDR5_RX register  *****************/

+#define USB_ADDR5_RX_ADDR5_RX_Pos             (1U)                             

+#define USB_ADDR5_RX_ADDR5_RX_Msk             (0x7FFFUL << USB_ADDR5_RX_ADDR5_RX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR5_RX_ADDR5_RX                 USB_ADDR5_RX_ADDR5_RX_Msk        /*!< Reception Buffer Address 5 */

+

+/*****************  Bit definition for USB_ADDR6_RX register  *****************/

+#define USB_ADDR6_RX_ADDR6_RX_Pos             (1U)                             

+#define USB_ADDR6_RX_ADDR6_RX_Msk             (0x7FFFUL << USB_ADDR6_RX_ADDR6_RX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR6_RX_ADDR6_RX                 USB_ADDR6_RX_ADDR6_RX_Msk        /*!< Reception Buffer Address 6 */

+

+/*****************  Bit definition for USB_ADDR7_RX register  *****************/

+#define USB_ADDR7_RX_ADDR7_RX_Pos             (1U)                             

+#define USB_ADDR7_RX_ADDR7_RX_Msk             (0x7FFFUL << USB_ADDR7_RX_ADDR7_RX_Pos) /*!< 0x0000FFFE */

+#define USB_ADDR7_RX_ADDR7_RX                 USB_ADDR7_RX_ADDR7_RX_Msk        /*!< Reception Buffer Address 7 */

+

+/*----------------------------------------------------------------------------*/

+

+/*****************  Bit definition for USB_COUNT0_RX register  ****************/

+#define USB_COUNT0_RX_COUNT0_RX_Pos           (0U)                             

+#define USB_COUNT0_RX_COUNT0_RX_Msk           (0x3FFUL << USB_COUNT0_RX_COUNT0_RX_Pos) /*!< 0x000003FF */

+#define USB_COUNT0_RX_COUNT0_RX               USB_COUNT0_RX_COUNT0_RX_Msk      /*!< Reception Byte Count */

+

+#define USB_COUNT0_RX_NUM_BLOCK_Pos           (10U)                            

+#define USB_COUNT0_RX_NUM_BLOCK_Msk           (0x1FUL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */

+#define USB_COUNT0_RX_NUM_BLOCK               USB_COUNT0_RX_NUM_BLOCK_Msk      /*!< NUM_BLOCK[4:0] bits (Number of blocks) */

+#define USB_COUNT0_RX_NUM_BLOCK_0             (0x01UL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */

+#define USB_COUNT0_RX_NUM_BLOCK_1             (0x02UL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */

+#define USB_COUNT0_RX_NUM_BLOCK_2             (0x04UL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */

+#define USB_COUNT0_RX_NUM_BLOCK_3             (0x08UL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */

+#define USB_COUNT0_RX_NUM_BLOCK_4             (0x10UL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */

+

+#define USB_COUNT0_RX_BLSIZE_Pos              (15U)                            

+#define USB_COUNT0_RX_BLSIZE_Msk              (0x1UL << USB_COUNT0_RX_BLSIZE_Pos) /*!< 0x00008000 */

+#define USB_COUNT0_RX_BLSIZE                  USB_COUNT0_RX_BLSIZE_Msk         /*!< BLock SIZE */

+

+/*****************  Bit definition for USB_COUNT1_RX register  ****************/

+#define USB_COUNT1_RX_COUNT1_RX_Pos           (0U)                             

+#define USB_COUNT1_RX_COUNT1_RX_Msk           (0x3FFUL << USB_COUNT1_RX_COUNT1_RX_Pos) /*!< 0x000003FF */

+#define USB_COUNT1_RX_COUNT1_RX               USB_COUNT1_RX_COUNT1_RX_Msk      /*!< Reception Byte Count */

+

+#define USB_COUNT1_RX_NUM_BLOCK_Pos           (10U)                            

+#define USB_COUNT1_RX_NUM_BLOCK_Msk           (0x1FUL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */

+#define USB_COUNT1_RX_NUM_BLOCK               USB_COUNT1_RX_NUM_BLOCK_Msk      /*!< NUM_BLOCK[4:0] bits (Number of blocks) */

+#define USB_COUNT1_RX_NUM_BLOCK_0             (0x01UL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */

+#define USB_COUNT1_RX_NUM_BLOCK_1             (0x02UL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */

+#define USB_COUNT1_RX_NUM_BLOCK_2             (0x04UL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */

+#define USB_COUNT1_RX_NUM_BLOCK_3             (0x08UL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */

+#define USB_COUNT1_RX_NUM_BLOCK_4             (0x10UL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */

+

+#define USB_COUNT1_RX_BLSIZE_Pos              (15U)                            

+#define USB_COUNT1_RX_BLSIZE_Msk              (0x1UL << USB_COUNT1_RX_BLSIZE_Pos) /*!< 0x00008000 */

+#define USB_COUNT1_RX_BLSIZE                  USB_COUNT1_RX_BLSIZE_Msk         /*!< BLock SIZE */

+

+/*****************  Bit definition for USB_COUNT2_RX register  ****************/

+#define USB_COUNT2_RX_COUNT2_RX_Pos           (0U)                             

+#define USB_COUNT2_RX_COUNT2_RX_Msk           (0x3FFUL << USB_COUNT2_RX_COUNT2_RX_Pos) /*!< 0x000003FF */

+#define USB_COUNT2_RX_COUNT2_RX               USB_COUNT2_RX_COUNT2_RX_Msk      /*!< Reception Byte Count */

+

+#define USB_COUNT2_RX_NUM_BLOCK_Pos           (10U)                            

+#define USB_COUNT2_RX_NUM_BLOCK_Msk           (0x1FUL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */

+#define USB_COUNT2_RX_NUM_BLOCK               USB_COUNT2_RX_NUM_BLOCK_Msk      /*!< NUM_BLOCK[4:0] bits (Number of blocks) */

+#define USB_COUNT2_RX_NUM_BLOCK_0             (0x01UL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */

+#define USB_COUNT2_RX_NUM_BLOCK_1             (0x02UL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */

+#define USB_COUNT2_RX_NUM_BLOCK_2             (0x04UL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */

+#define USB_COUNT2_RX_NUM_BLOCK_3             (0x08UL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */

+#define USB_COUNT2_RX_NUM_BLOCK_4             (0x10UL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */

+

+#define USB_COUNT2_RX_BLSIZE_Pos              (15U)                            

+#define USB_COUNT2_RX_BLSIZE_Msk              (0x1UL << USB_COUNT2_RX_BLSIZE_Pos) /*!< 0x00008000 */

+#define USB_COUNT2_RX_BLSIZE                  USB_COUNT2_RX_BLSIZE_Msk         /*!< BLock SIZE */

+

+/*****************  Bit definition for USB_COUNT3_RX register  ****************/

+#define USB_COUNT3_RX_COUNT3_RX_Pos           (0U)                             

+#define USB_COUNT3_RX_COUNT3_RX_Msk           (0x3FFUL << USB_COUNT3_RX_COUNT3_RX_Pos) /*!< 0x000003FF */

+#define USB_COUNT3_RX_COUNT3_RX               USB_COUNT3_RX_COUNT3_RX_Msk      /*!< Reception Byte Count */

+

+#define USB_COUNT3_RX_NUM_BLOCK_Pos           (10U)                            

+#define USB_COUNT3_RX_NUM_BLOCK_Msk           (0x1FUL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */

+#define USB_COUNT3_RX_NUM_BLOCK               USB_COUNT3_RX_NUM_BLOCK_Msk      /*!< NUM_BLOCK[4:0] bits (Number of blocks) */

+#define USB_COUNT3_RX_NUM_BLOCK_0             (0x01UL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */

+#define USB_COUNT3_RX_NUM_BLOCK_1             (0x02UL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */

+#define USB_COUNT3_RX_NUM_BLOCK_2             (0x04UL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */

+#define USB_COUNT3_RX_NUM_BLOCK_3             (0x08UL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */

+#define USB_COUNT3_RX_NUM_BLOCK_4             (0x10UL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */

+

+#define USB_COUNT3_RX_BLSIZE_Pos              (15U)                            

+#define USB_COUNT3_RX_BLSIZE_Msk              (0x1UL << USB_COUNT3_RX_BLSIZE_Pos) /*!< 0x00008000 */

+#define USB_COUNT3_RX_BLSIZE                  USB_COUNT3_RX_BLSIZE_Msk         /*!< BLock SIZE */

+

+/*****************  Bit definition for USB_COUNT4_RX register  ****************/

+#define USB_COUNT4_RX_COUNT4_RX_Pos           (0U)                             

+#define USB_COUNT4_RX_COUNT4_RX_Msk           (0x3FFUL << USB_COUNT4_RX_COUNT4_RX_Pos) /*!< 0x000003FF */

+#define USB_COUNT4_RX_COUNT4_RX               USB_COUNT4_RX_COUNT4_RX_Msk      /*!< Reception Byte Count */

+

+#define USB_COUNT4_RX_NUM_BLOCK_Pos           (10U)                            

+#define USB_COUNT4_RX_NUM_BLOCK_Msk           (0x1FUL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */

+#define USB_COUNT4_RX_NUM_BLOCK               USB_COUNT4_RX_NUM_BLOCK_Msk      /*!< NUM_BLOCK[4:0] bits (Number of blocks) */

+#define USB_COUNT4_RX_NUM_BLOCK_0             (0x01UL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */

+#define USB_COUNT4_RX_NUM_BLOCK_1             (0x02UL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */

+#define USB_COUNT4_RX_NUM_BLOCK_2             (0x04UL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */

+#define USB_COUNT4_RX_NUM_BLOCK_3             (0x08UL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */

+#define USB_COUNT4_RX_NUM_BLOCK_4             (0x10UL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */

+

+#define USB_COUNT4_RX_BLSIZE_Pos              (15U)                            

+#define USB_COUNT4_RX_BLSIZE_Msk              (0x1UL << USB_COUNT4_RX_BLSIZE_Pos) /*!< 0x00008000 */

+#define USB_COUNT4_RX_BLSIZE                  USB_COUNT4_RX_BLSIZE_Msk         /*!< BLock SIZE */

+

+/*****************  Bit definition for USB_COUNT5_RX register  ****************/

+#define USB_COUNT5_RX_COUNT5_RX_Pos           (0U)                             

+#define USB_COUNT5_RX_COUNT5_RX_Msk           (0x3FFUL << USB_COUNT5_RX_COUNT5_RX_Pos) /*!< 0x000003FF */

+#define USB_COUNT5_RX_COUNT5_RX               USB_COUNT5_RX_COUNT5_RX_Msk      /*!< Reception Byte Count */

+

+#define USB_COUNT5_RX_NUM_BLOCK_Pos           (10U)                            

+#define USB_COUNT5_RX_NUM_BLOCK_Msk           (0x1FUL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */

+#define USB_COUNT5_RX_NUM_BLOCK               USB_COUNT5_RX_NUM_BLOCK_Msk      /*!< NUM_BLOCK[4:0] bits (Number of blocks) */

+#define USB_COUNT5_RX_NUM_BLOCK_0             (0x01UL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */

+#define USB_COUNT5_RX_NUM_BLOCK_1             (0x02UL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */

+#define USB_COUNT5_RX_NUM_BLOCK_2             (0x04UL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */

+#define USB_COUNT5_RX_NUM_BLOCK_3             (0x08UL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */

+#define USB_COUNT5_RX_NUM_BLOCK_4             (0x10UL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */

+

+#define USB_COUNT5_RX_BLSIZE_Pos              (15U)                            

+#define USB_COUNT5_RX_BLSIZE_Msk              (0x1UL << USB_COUNT5_RX_BLSIZE_Pos) /*!< 0x00008000 */

+#define USB_COUNT5_RX_BLSIZE                  USB_COUNT5_RX_BLSIZE_Msk         /*!< BLock SIZE */

+

+/*****************  Bit definition for USB_COUNT6_RX register  ****************/

+#define USB_COUNT6_RX_COUNT6_RX_Pos           (0U)                             

+#define USB_COUNT6_RX_COUNT6_RX_Msk           (0x3FFUL << USB_COUNT6_RX_COUNT6_RX_Pos) /*!< 0x000003FF */

+#define USB_COUNT6_RX_COUNT6_RX               USB_COUNT6_RX_COUNT6_RX_Msk      /*!< Reception Byte Count */

+

+#define USB_COUNT6_RX_NUM_BLOCK_Pos           (10U)                            

+#define USB_COUNT6_RX_NUM_BLOCK_Msk           (0x1FUL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */

+#define USB_COUNT6_RX_NUM_BLOCK               USB_COUNT6_RX_NUM_BLOCK_Msk      /*!< NUM_BLOCK[4:0] bits (Number of blocks) */

+#define USB_COUNT6_RX_NUM_BLOCK_0             (0x01UL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */

+#define USB_COUNT6_RX_NUM_BLOCK_1             (0x02UL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */

+#define USB_COUNT6_RX_NUM_BLOCK_2             (0x04UL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */

+#define USB_COUNT6_RX_NUM_BLOCK_3             (0x08UL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */

+#define USB_COUNT6_RX_NUM_BLOCK_4             (0x10UL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */

+

+#define USB_COUNT6_RX_BLSIZE_Pos              (15U)                            

+#define USB_COUNT6_RX_BLSIZE_Msk              (0x1UL << USB_COUNT6_RX_BLSIZE_Pos) /*!< 0x00008000 */

+#define USB_COUNT6_RX_BLSIZE                  USB_COUNT6_RX_BLSIZE_Msk         /*!< BLock SIZE */

+

+/*****************  Bit definition for USB_COUNT7_RX register  ****************/

+#define USB_COUNT7_RX_COUNT7_RX_Pos           (0U)                             

+#define USB_COUNT7_RX_COUNT7_RX_Msk           (0x3FFUL << USB_COUNT7_RX_COUNT7_RX_Pos) /*!< 0x000003FF */

+#define USB_COUNT7_RX_COUNT7_RX               USB_COUNT7_RX_COUNT7_RX_Msk      /*!< Reception Byte Count */

+

+#define USB_COUNT7_RX_NUM_BLOCK_Pos           (10U)                            

+#define USB_COUNT7_RX_NUM_BLOCK_Msk           (0x1FUL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */

+#define USB_COUNT7_RX_NUM_BLOCK               USB_COUNT7_RX_NUM_BLOCK_Msk      /*!< NUM_BLOCK[4:0] bits (Number of blocks) */

+#define USB_COUNT7_RX_NUM_BLOCK_0             (0x01UL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */

+#define USB_COUNT7_RX_NUM_BLOCK_1             (0x02UL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */

+#define USB_COUNT7_RX_NUM_BLOCK_2             (0x04UL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */

+#define USB_COUNT7_RX_NUM_BLOCK_3             (0x08UL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */

+#define USB_COUNT7_RX_NUM_BLOCK_4             (0x10UL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */

+

+#define USB_COUNT7_RX_BLSIZE_Pos              (15U)                            

+#define USB_COUNT7_RX_BLSIZE_Msk              (0x1UL << USB_COUNT7_RX_BLSIZE_Pos) /*!< 0x00008000 */

+#define USB_COUNT7_RX_BLSIZE                  USB_COUNT7_RX_BLSIZE_Msk         /*!< BLock SIZE */

+

+/*----------------------------------------------------------------------------*/

+

+/****************  Bit definition for USB_COUNT0_RX_0 register  ***************/

+#define USB_COUNT0_RX_0_COUNT0_RX_0           (0x000003FFU)                    /*!< Reception Byte Count (low) */

+

+#define USB_COUNT0_RX_0_NUM_BLOCK_0           (0x00007C00U)                    /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */

+#define USB_COUNT0_RX_0_NUM_BLOCK_0_0         (0x00000400U)                    /*!< Bit 0 */

+#define USB_COUNT0_RX_0_NUM_BLOCK_0_1         (0x00000800U)                    /*!< Bit 1 */

+#define USB_COUNT0_RX_0_NUM_BLOCK_0_2         (0x00001000U)                    /*!< Bit 2 */

+#define USB_COUNT0_RX_0_NUM_BLOCK_0_3         (0x00002000U)                    /*!< Bit 3 */

+#define USB_COUNT0_RX_0_NUM_BLOCK_0_4         (0x00004000U)                    /*!< Bit 4 */

+

+#define USB_COUNT0_RX_0_BLSIZE_0              (0x00008000U)                    /*!< BLock SIZE (low) */

+

+/****************  Bit definition for USB_COUNT0_RX_1 register  ***************/

+#define USB_COUNT0_RX_1_COUNT0_RX_1           (0x03FF0000U)                    /*!< Reception Byte Count (high) */

+

+#define USB_COUNT0_RX_1_NUM_BLOCK_1           (0x7C000000U)                    /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */

+#define USB_COUNT0_RX_1_NUM_BLOCK_1_0         (0x04000000U)                    /*!< Bit 1 */

+#define USB_COUNT0_RX_1_NUM_BLOCK_1_1         (0x08000000U)                    /*!< Bit 1 */

+#define USB_COUNT0_RX_1_NUM_BLOCK_1_2         (0x10000000U)                    /*!< Bit 2 */

+#define USB_COUNT0_RX_1_NUM_BLOCK_1_3         (0x20000000U)                    /*!< Bit 3 */

+#define USB_COUNT0_RX_1_NUM_BLOCK_1_4         (0x40000000U)                    /*!< Bit 4 */

+

+#define USB_COUNT0_RX_1_BLSIZE_1              (0x80000000U)                    /*!< BLock SIZE (high) */

+

+/****************  Bit definition for USB_COUNT1_RX_0 register  ***************/

+#define USB_COUNT1_RX_0_COUNT1_RX_0           (0x000003FFU)                    /*!< Reception Byte Count (low) */

+

+#define USB_COUNT1_RX_0_NUM_BLOCK_0           (0x00007C00U)                    /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */

+#define USB_COUNT1_RX_0_NUM_BLOCK_0_0         (0x00000400U)                    /*!< Bit 0 */

+#define USB_COUNT1_RX_0_NUM_BLOCK_0_1         (0x00000800U)                    /*!< Bit 1 */

+#define USB_COUNT1_RX_0_NUM_BLOCK_0_2         (0x00001000U)                    /*!< Bit 2 */

+#define USB_COUNT1_RX_0_NUM_BLOCK_0_3         (0x00002000U)                    /*!< Bit 3 */

+#define USB_COUNT1_RX_0_NUM_BLOCK_0_4         (0x00004000U)                    /*!< Bit 4 */

+

+#define USB_COUNT1_RX_0_BLSIZE_0              (0x00008000U)                    /*!< BLock SIZE (low) */

+

+/****************  Bit definition for USB_COUNT1_RX_1 register  ***************/

+#define USB_COUNT1_RX_1_COUNT1_RX_1           (0x03FF0000U)                    /*!< Reception Byte Count (high) */

+

+#define USB_COUNT1_RX_1_NUM_BLOCK_1           (0x7C000000U)                    /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */

+#define USB_COUNT1_RX_1_NUM_BLOCK_1_0         (0x04000000U)                    /*!< Bit 0 */

+#define USB_COUNT1_RX_1_NUM_BLOCK_1_1         (0x08000000U)                    /*!< Bit 1 */

+#define USB_COUNT1_RX_1_NUM_BLOCK_1_2         (0x10000000U)                    /*!< Bit 2 */

+#define USB_COUNT1_RX_1_NUM_BLOCK_1_3         (0x20000000U)                    /*!< Bit 3 */

+#define USB_COUNT1_RX_1_NUM_BLOCK_1_4         (0x40000000U)                    /*!< Bit 4 */

+

+#define USB_COUNT1_RX_1_BLSIZE_1              (0x80000000U)                    /*!< BLock SIZE (high) */

+

+/****************  Bit definition for USB_COUNT2_RX_0 register  ***************/

+#define USB_COUNT2_RX_0_COUNT2_RX_0           (0x000003FFU)                    /*!< Reception Byte Count (low) */

+

+#define USB_COUNT2_RX_0_NUM_BLOCK_0           (0x00007C00U)                    /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */

+#define USB_COUNT2_RX_0_NUM_BLOCK_0_0         (0x00000400U)                    /*!< Bit 0 */

+#define USB_COUNT2_RX_0_NUM_BLOCK_0_1         (0x00000800U)                    /*!< Bit 1 */

+#define USB_COUNT2_RX_0_NUM_BLOCK_0_2         (0x00001000U)                    /*!< Bit 2 */

+#define USB_COUNT2_RX_0_NUM_BLOCK_0_3         (0x00002000U)                    /*!< Bit 3 */

+#define USB_COUNT2_RX_0_NUM_BLOCK_0_4         (0x00004000U)                    /*!< Bit 4 */

+

+#define USB_COUNT2_RX_0_BLSIZE_0              (0x00008000U)                    /*!< BLock SIZE (low) */

+

+/****************  Bit definition for USB_COUNT2_RX_1 register  ***************/

+#define USB_COUNT2_RX_1_COUNT2_RX_1           (0x03FF0000U)                    /*!< Reception Byte Count (high) */

+

+#define USB_COUNT2_RX_1_NUM_BLOCK_1           (0x7C000000U)                    /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */

+#define USB_COUNT2_RX_1_NUM_BLOCK_1_0         (0x04000000U)                    /*!< Bit 0 */

+#define USB_COUNT2_RX_1_NUM_BLOCK_1_1         (0x08000000U)                    /*!< Bit 1 */

+#define USB_COUNT2_RX_1_NUM_BLOCK_1_2         (0x10000000U)                    /*!< Bit 2 */

+#define USB_COUNT2_RX_1_NUM_BLOCK_1_3         (0x20000000U)                    /*!< Bit 3 */

+#define USB_COUNT2_RX_1_NUM_BLOCK_1_4         (0x40000000U)                    /*!< Bit 4 */

+

+#define USB_COUNT2_RX_1_BLSIZE_1              (0x80000000U)                    /*!< BLock SIZE (high) */

+

+/****************  Bit definition for USB_COUNT3_RX_0 register  ***************/

+#define USB_COUNT3_RX_0_COUNT3_RX_0           (0x000003FFU)                    /*!< Reception Byte Count (low) */

+

+#define USB_COUNT3_RX_0_NUM_BLOCK_0           (0x00007C00U)                    /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */

+#define USB_COUNT3_RX_0_NUM_BLOCK_0_0         (0x00000400U)                    /*!< Bit 0 */

+#define USB_COUNT3_RX_0_NUM_BLOCK_0_1         (0x00000800U)                    /*!< Bit 1 */

+#define USB_COUNT3_RX_0_NUM_BLOCK_0_2         (0x00001000U)                    /*!< Bit 2 */

+#define USB_COUNT3_RX_0_NUM_BLOCK_0_3         (0x00002000U)                    /*!< Bit 3 */

+#define USB_COUNT3_RX_0_NUM_BLOCK_0_4         (0x00004000U)                    /*!< Bit 4 */

+

+#define USB_COUNT3_RX_0_BLSIZE_0              (0x00008000U)                    /*!< BLock SIZE (low) */

+

+/****************  Bit definition for USB_COUNT3_RX_1 register  ***************/

+#define USB_COUNT3_RX_1_COUNT3_RX_1           (0x03FF0000U)                    /*!< Reception Byte Count (high) */

+

+#define USB_COUNT3_RX_1_NUM_BLOCK_1           (0x7C000000U)                    /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */

+#define USB_COUNT3_RX_1_NUM_BLOCK_1_0         (0x04000000U)                    /*!< Bit 0 */

+#define USB_COUNT3_RX_1_NUM_BLOCK_1_1         (0x08000000U)                    /*!< Bit 1 */

+#define USB_COUNT3_RX_1_NUM_BLOCK_1_2         (0x10000000U)                    /*!< Bit 2 */

+#define USB_COUNT3_RX_1_NUM_BLOCK_1_3         (0x20000000U)                    /*!< Bit 3 */

+#define USB_COUNT3_RX_1_NUM_BLOCK_1_4         (0x40000000U)                    /*!< Bit 4 */

+

+#define USB_COUNT3_RX_1_BLSIZE_1              (0x80000000U)                    /*!< BLock SIZE (high) */

+

+/****************  Bit definition for USB_COUNT4_RX_0 register  ***************/

+#define USB_COUNT4_RX_0_COUNT4_RX_0           (0x000003FFU)                    /*!< Reception Byte Count (low) */

+

+#define USB_COUNT4_RX_0_NUM_BLOCK_0           (0x00007C00U)                    /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */

+#define USB_COUNT4_RX_0_NUM_BLOCK_0_0         (0x00000400U)                    /*!< Bit 0 */

+#define USB_COUNT4_RX_0_NUM_BLOCK_0_1         (0x00000800U)                    /*!< Bit 1 */

+#define USB_COUNT4_RX_0_NUM_BLOCK_0_2         (0x00001000U)                    /*!< Bit 2 */

+#define USB_COUNT4_RX_0_NUM_BLOCK_0_3         (0x00002000U)                    /*!< Bit 3 */

+#define USB_COUNT4_RX_0_NUM_BLOCK_0_4         (0x00004000U)                    /*!< Bit 4 */

+

+#define USB_COUNT4_RX_0_BLSIZE_0              (0x00008000U)                    /*!< BLock SIZE (low) */

+

+/****************  Bit definition for USB_COUNT4_RX_1 register  ***************/

+#define USB_COUNT4_RX_1_COUNT4_RX_1           (0x03FF0000U)                    /*!< Reception Byte Count (high) */

+

+#define USB_COUNT4_RX_1_NUM_BLOCK_1           (0x7C000000U)                    /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */

+#define USB_COUNT4_RX_1_NUM_BLOCK_1_0         (0x04000000U)                    /*!< Bit 0 */

+#define USB_COUNT4_RX_1_NUM_BLOCK_1_1         (0x08000000U)                    /*!< Bit 1 */

+#define USB_COUNT4_RX_1_NUM_BLOCK_1_2         (0x10000000U)                    /*!< Bit 2 */

+#define USB_COUNT4_RX_1_NUM_BLOCK_1_3         (0x20000000U)                    /*!< Bit 3 */

+#define USB_COUNT4_RX_1_NUM_BLOCK_1_4         (0x40000000U)                    /*!< Bit 4 */

+

+#define USB_COUNT4_RX_1_BLSIZE_1              (0x80000000U)                    /*!< BLock SIZE (high) */

+

+/****************  Bit definition for USB_COUNT5_RX_0 register  ***************/

+#define USB_COUNT5_RX_0_COUNT5_RX_0           (0x000003FFU)                    /*!< Reception Byte Count (low) */

+

+#define USB_COUNT5_RX_0_NUM_BLOCK_0           (0x00007C00U)                    /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */

+#define USB_COUNT5_RX_0_NUM_BLOCK_0_0         (0x00000400U)                    /*!< Bit 0 */

+#define USB_COUNT5_RX_0_NUM_BLOCK_0_1         (0x00000800U)                    /*!< Bit 1 */

+#define USB_COUNT5_RX_0_NUM_BLOCK_0_2         (0x00001000U)                    /*!< Bit 2 */

+#define USB_COUNT5_RX_0_NUM_BLOCK_0_3         (0x00002000U)                    /*!< Bit 3 */

+#define USB_COUNT5_RX_0_NUM_BLOCK_0_4         (0x00004000U)                    /*!< Bit 4 */

+

+#define USB_COUNT5_RX_0_BLSIZE_0              (0x00008000U)                    /*!< BLock SIZE (low) */

+

+/****************  Bit definition for USB_COUNT5_RX_1 register  ***************/

+#define USB_COUNT5_RX_1_COUNT5_RX_1           (0x03FF0000U)                    /*!< Reception Byte Count (high) */

+

+#define USB_COUNT5_RX_1_NUM_BLOCK_1           (0x7C000000U)                    /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */

+#define USB_COUNT5_RX_1_NUM_BLOCK_1_0         (0x04000000U)                    /*!< Bit 0 */

+#define USB_COUNT5_RX_1_NUM_BLOCK_1_1         (0x08000000U)                    /*!< Bit 1 */

+#define USB_COUNT5_RX_1_NUM_BLOCK_1_2         (0x10000000U)                    /*!< Bit 2 */

+#define USB_COUNT5_RX_1_NUM_BLOCK_1_3         (0x20000000U)                    /*!< Bit 3 */

+#define USB_COUNT5_RX_1_NUM_BLOCK_1_4         (0x40000000U)                    /*!< Bit 4 */

+

+#define USB_COUNT5_RX_1_BLSIZE_1              (0x80000000U)                    /*!< BLock SIZE (high) */

+

+/***************  Bit definition for USB_COUNT6_RX_0  register  ***************/

+#define USB_COUNT6_RX_0_COUNT6_RX_0           (0x000003FFU)                    /*!< Reception Byte Count (low) */

+

+#define USB_COUNT6_RX_0_NUM_BLOCK_0           (0x00007C00U)                    /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */

+#define USB_COUNT6_RX_0_NUM_BLOCK_0_0         (0x00000400U)                    /*!< Bit 0 */

+#define USB_COUNT6_RX_0_NUM_BLOCK_0_1         (0x00000800U)                    /*!< Bit 1 */

+#define USB_COUNT6_RX_0_NUM_BLOCK_0_2         (0x00001000U)                    /*!< Bit 2 */

+#define USB_COUNT6_RX_0_NUM_BLOCK_0_3         (0x00002000U)                    /*!< Bit 3 */

+#define USB_COUNT6_RX_0_NUM_BLOCK_0_4         (0x00004000U)                    /*!< Bit 4 */

+

+#define USB_COUNT6_RX_0_BLSIZE_0              (0x00008000U)                    /*!< BLock SIZE (low) */

+

+/****************  Bit definition for USB_COUNT6_RX_1 register  ***************/

+#define USB_COUNT6_RX_1_COUNT6_RX_1           (0x03FF0000U)                    /*!< Reception Byte Count (high) */

+

+#define USB_COUNT6_RX_1_NUM_BLOCK_1           (0x7C000000U)                    /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */

+#define USB_COUNT6_RX_1_NUM_BLOCK_1_0         (0x04000000U)                    /*!< Bit 0 */

+#define USB_COUNT6_RX_1_NUM_BLOCK_1_1         (0x08000000U)                    /*!< Bit 1 */

+#define USB_COUNT6_RX_1_NUM_BLOCK_1_2         (0x10000000U)                    /*!< Bit 2 */

+#define USB_COUNT6_RX_1_NUM_BLOCK_1_3         (0x20000000U)                    /*!< Bit 3 */

+#define USB_COUNT6_RX_1_NUM_BLOCK_1_4         (0x40000000U)                    /*!< Bit 4 */

+

+#define USB_COUNT6_RX_1_BLSIZE_1              (0x80000000U)                    /*!< BLock SIZE (high) */

+

+/***************  Bit definition for USB_COUNT7_RX_0 register  ****************/

+#define USB_COUNT7_RX_0_COUNT7_RX_0           (0x000003FFU)                    /*!< Reception Byte Count (low) */

+

+#define USB_COUNT7_RX_0_NUM_BLOCK_0           (0x00007C00U)                    /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */

+#define USB_COUNT7_RX_0_NUM_BLOCK_0_0         (0x00000400U)                    /*!< Bit 0 */

+#define USB_COUNT7_RX_0_NUM_BLOCK_0_1         (0x00000800U)                    /*!< Bit 1 */

+#define USB_COUNT7_RX_0_NUM_BLOCK_0_2         (0x00001000U)                    /*!< Bit 2 */

+#define USB_COUNT7_RX_0_NUM_BLOCK_0_3         (0x00002000U)                    /*!< Bit 3 */

+#define USB_COUNT7_RX_0_NUM_BLOCK_0_4         (0x00004000U)                    /*!< Bit 4 */

+

+#define USB_COUNT7_RX_0_BLSIZE_0              (0x00008000U)                    /*!< BLock SIZE (low) */

+

+/***************  Bit definition for USB_COUNT7_RX_1 register  ****************/

+#define USB_COUNT7_RX_1_COUNT7_RX_1           (0x03FF0000U)                    /*!< Reception Byte Count (high) */

+

+#define USB_COUNT7_RX_1_NUM_BLOCK_1           (0x7C000000U)                    /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */

+#define USB_COUNT7_RX_1_NUM_BLOCK_1_0         (0x04000000U)                    /*!< Bit 0 */

+#define USB_COUNT7_RX_1_NUM_BLOCK_1_1         (0x08000000U)                    /*!< Bit 1 */

+#define USB_COUNT7_RX_1_NUM_BLOCK_1_2         (0x10000000U)                    /*!< Bit 2 */

+#define USB_COUNT7_RX_1_NUM_BLOCK_1_3         (0x20000000U)                    /*!< Bit 3 */

+#define USB_COUNT7_RX_1_NUM_BLOCK_1_4         (0x40000000U)                    /*!< Bit 4 */

+

+#define USB_COUNT7_RX_1_BLSIZE_1              (0x80000000U)                    /*!< BLock SIZE (high) */

+

+/******************************************************************************/

+/*                                                                            */

+/*                         Window WATCHDOG (WWDG)                             */

+/*                                                                            */

+/******************************************************************************/

+

+/*******************  Bit definition for WWDG_CR register  ********************/

+#define WWDG_CR_T_Pos                       (0U)                               

+#define WWDG_CR_T_Msk                       (0x7FUL << WWDG_CR_T_Pos)           /*!< 0x0000007F */

+#define WWDG_CR_T                           WWDG_CR_T_Msk                      /*!< T[6:0] bits (7-Bit counter (MSB to LSB)) */

+#define WWDG_CR_T_0                         (0x01UL << WWDG_CR_T_Pos)           /*!< 0x00000001 */

+#define WWDG_CR_T_1                         (0x02UL << WWDG_CR_T_Pos)           /*!< 0x00000002 */

+#define WWDG_CR_T_2                         (0x04UL << WWDG_CR_T_Pos)           /*!< 0x00000004 */

+#define WWDG_CR_T_3                         (0x08UL << WWDG_CR_T_Pos)           /*!< 0x00000008 */

+#define WWDG_CR_T_4                         (0x10UL << WWDG_CR_T_Pos)           /*!< 0x00000010 */

+#define WWDG_CR_T_5                         (0x20UL << WWDG_CR_T_Pos)           /*!< 0x00000020 */

+#define WWDG_CR_T_6                         (0x40UL << WWDG_CR_T_Pos)           /*!< 0x00000040 */

+

+/* Legacy defines */

+#define  WWDG_CR_T0 WWDG_CR_T_0

+#define  WWDG_CR_T1 WWDG_CR_T_1

+#define  WWDG_CR_T2 WWDG_CR_T_2

+#define  WWDG_CR_T3 WWDG_CR_T_3

+#define  WWDG_CR_T4 WWDG_CR_T_4

+#define  WWDG_CR_T5 WWDG_CR_T_5

+#define  WWDG_CR_T6 WWDG_CR_T_6

+

+#define WWDG_CR_WDGA_Pos                    (7U)                               

+#define WWDG_CR_WDGA_Msk                    (0x1UL << WWDG_CR_WDGA_Pos)         /*!< 0x00000080 */

+#define WWDG_CR_WDGA                        WWDG_CR_WDGA_Msk                   /*!< Activation bit */

+

+/*******************  Bit definition for WWDG_CFR register  *******************/

+#define WWDG_CFR_W_Pos                      (0U)                               

+#define WWDG_CFR_W_Msk                      (0x7FUL << WWDG_CFR_W_Pos)          /*!< 0x0000007F */

+#define WWDG_CFR_W                          WWDG_CFR_W_Msk                     /*!< W[6:0] bits (7-bit window value) */

+#define WWDG_CFR_W_0                        (0x01UL << WWDG_CFR_W_Pos)          /*!< 0x00000001 */

+#define WWDG_CFR_W_1                        (0x02UL << WWDG_CFR_W_Pos)          /*!< 0x00000002 */

+#define WWDG_CFR_W_2                        (0x04UL << WWDG_CFR_W_Pos)          /*!< 0x00000004 */

+#define WWDG_CFR_W_3                        (0x08UL << WWDG_CFR_W_Pos)          /*!< 0x00000008 */

+#define WWDG_CFR_W_4                        (0x10UL << WWDG_CFR_W_Pos)          /*!< 0x00000010 */

+#define WWDG_CFR_W_5                        (0x20UL << WWDG_CFR_W_Pos)          /*!< 0x00000020 */

+#define WWDG_CFR_W_6                        (0x40UL << WWDG_CFR_W_Pos)          /*!< 0x00000040 */

+

+/* Legacy defines */

+#define  WWDG_CFR_W0 WWDG_CFR_W_0

+#define  WWDG_CFR_W1 WWDG_CFR_W_1

+#define  WWDG_CFR_W2 WWDG_CFR_W_2

+#define  WWDG_CFR_W3 WWDG_CFR_W_3

+#define  WWDG_CFR_W4 WWDG_CFR_W_4

+#define  WWDG_CFR_W5 WWDG_CFR_W_5

+#define  WWDG_CFR_W6 WWDG_CFR_W_6

+

+#define WWDG_CFR_WDGTB_Pos                  (7U)                               

+#define WWDG_CFR_WDGTB_Msk                  (0x3UL << WWDG_CFR_WDGTB_Pos)       /*!< 0x00000180 */

+#define WWDG_CFR_WDGTB                      WWDG_CFR_WDGTB_Msk                 /*!< WDGTB[1:0] bits (Timer Base) */

+#define WWDG_CFR_WDGTB_0                    (0x1UL << WWDG_CFR_WDGTB_Pos)       /*!< 0x00000080 */

+#define WWDG_CFR_WDGTB_1                    (0x2UL << WWDG_CFR_WDGTB_Pos)       /*!< 0x00000100 */

+

+/* Legacy defines */

+#define  WWDG_CFR_WDGTB0 WWDG_CFR_WDGTB_0

+#define  WWDG_CFR_WDGTB1 WWDG_CFR_WDGTB_1

+

+#define WWDG_CFR_EWI_Pos                    (9U)                               

+#define WWDG_CFR_EWI_Msk                    (0x1UL << WWDG_CFR_EWI_Pos)         /*!< 0x00000200 */

+#define WWDG_CFR_EWI                        WWDG_CFR_EWI_Msk                   /*!< Early Wakeup Interrupt */

+

+/*******************  Bit definition for WWDG_SR register  ********************/

+#define WWDG_SR_EWIF_Pos                    (0U)                               

+#define WWDG_SR_EWIF_Msk                    (0x1UL << WWDG_SR_EWIF_Pos)         /*!< 0x00000001 */

+#define WWDG_SR_EWIF                        WWDG_SR_EWIF_Msk                   /*!< Early Wakeup Interrupt Flag */

+

+/******************************************************************************/

+/*                                                                            */

+/*                        SystemTick (SysTick)                                */

+/*                                                                            */

+/******************************************************************************/

+

+/*****************  Bit definition for SysTick_CTRL register  *****************/

+#define SysTick_CTRL_ENABLE                 (0x00000001U)                      /*!< Counter enable */

+#define SysTick_CTRL_TICKINT                (0x00000002U)                      /*!< Counting down to 0 pends the SysTick handler */

+#define SysTick_CTRL_CLKSOURCE              (0x00000004U)                      /*!< Clock source */

+#define SysTick_CTRL_COUNTFLAG              (0x00010000U)                      /*!< Count Flag */

+

+/*****************  Bit definition for SysTick_LOAD register  *****************/

+#define SysTick_LOAD_RELOAD                 (0x00FFFFFFU)                      /*!< Value to load into the SysTick Current Value Register when the counter reaches 0 */

+

+/*****************  Bit definition for SysTick_VAL register  ******************/

+#define SysTick_VAL_CURRENT                 (0x00FFFFFFU)                      /*!< Current value at the time the register is accessed */

+

+/*****************  Bit definition for SysTick_CALIB register  ****************/

+#define SysTick_CALIB_TENMS                 (0x00FFFFFFU)                      /*!< Reload value to use for 10ms timing */

+#define SysTick_CALIB_SKEW                  (0x40000000U)                      /*!< Calibration value is not exactly 10 ms */

+#define SysTick_CALIB_NOREF                 (0x80000000U)                      /*!< The reference clock is not provided */

+

+/******************************************************************************/

+/*                                                                            */

+/*               Nested Vectored Interrupt Controller (NVIC)                  */

+/*                                                                            */

+/******************************************************************************/

+

+/******************  Bit definition for NVIC_ISER register  *******************/

+#define NVIC_ISER_SETENA_Pos                (0U)                               

+#define NVIC_ISER_SETENA_Msk                (0xFFFFFFFFUL << NVIC_ISER_SETENA_Pos) /*!< 0xFFFFFFFF */

+#define NVIC_ISER_SETENA                    NVIC_ISER_SETENA_Msk               /*!< Interrupt set enable bits */

+#define NVIC_ISER_SETENA_0                  (0x00000001UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000001 */

+#define NVIC_ISER_SETENA_1                  (0x00000002UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000002 */

+#define NVIC_ISER_SETENA_2                  (0x00000004UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000004 */

+#define NVIC_ISER_SETENA_3                  (0x00000008UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000008 */

+#define NVIC_ISER_SETENA_4                  (0x00000010UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000010 */

+#define NVIC_ISER_SETENA_5                  (0x00000020UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000020 */

+#define NVIC_ISER_SETENA_6                  (0x00000040UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000040 */

+#define NVIC_ISER_SETENA_7                  (0x00000080UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000080 */

+#define NVIC_ISER_SETENA_8                  (0x00000100UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000100 */

+#define NVIC_ISER_SETENA_9                  (0x00000200UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000200 */

+#define NVIC_ISER_SETENA_10                 (0x00000400UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000400 */

+#define NVIC_ISER_SETENA_11                 (0x00000800UL << NVIC_ISER_SETENA_Pos) /*!< 0x00000800 */

+#define NVIC_ISER_SETENA_12                 (0x00001000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00001000 */

+#define NVIC_ISER_SETENA_13                 (0x00002000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00002000 */

+#define NVIC_ISER_SETENA_14                 (0x00004000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00004000 */

+#define NVIC_ISER_SETENA_15                 (0x00008000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00008000 */

+#define NVIC_ISER_SETENA_16                 (0x00010000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00010000 */

+#define NVIC_ISER_SETENA_17                 (0x00020000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00020000 */

+#define NVIC_ISER_SETENA_18                 (0x00040000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00040000 */

+#define NVIC_ISER_SETENA_19                 (0x00080000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00080000 */

+#define NVIC_ISER_SETENA_20                 (0x00100000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00100000 */

+#define NVIC_ISER_SETENA_21                 (0x00200000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00200000 */

+#define NVIC_ISER_SETENA_22                 (0x00400000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00400000 */

+#define NVIC_ISER_SETENA_23                 (0x00800000UL << NVIC_ISER_SETENA_Pos) /*!< 0x00800000 */

+#define NVIC_ISER_SETENA_24                 (0x01000000UL << NVIC_ISER_SETENA_Pos) /*!< 0x01000000 */

+#define NVIC_ISER_SETENA_25                 (0x02000000UL << NVIC_ISER_SETENA_Pos) /*!< 0x02000000 */

+#define NVIC_ISER_SETENA_26                 (0x04000000UL << NVIC_ISER_SETENA_Pos) /*!< 0x04000000 */

+#define NVIC_ISER_SETENA_27                 (0x08000000UL << NVIC_ISER_SETENA_Pos) /*!< 0x08000000 */

+#define NVIC_ISER_SETENA_28                 (0x10000000UL << NVIC_ISER_SETENA_Pos) /*!< 0x10000000 */

+#define NVIC_ISER_SETENA_29                 (0x20000000UL << NVIC_ISER_SETENA_Pos) /*!< 0x20000000 */

+#define NVIC_ISER_SETENA_30                 (0x40000000UL << NVIC_ISER_SETENA_Pos) /*!< 0x40000000 */

+#define NVIC_ISER_SETENA_31                 (0x80000000UL << NVIC_ISER_SETENA_Pos) /*!< 0x80000000 */

+

+/******************  Bit definition for NVIC_ICER register  *******************/

+#define NVIC_ICER_CLRENA_Pos                (0U)                               

+#define NVIC_ICER_CLRENA_Msk                (0xFFFFFFFFUL << NVIC_ICER_CLRENA_Pos) /*!< 0xFFFFFFFF */

+#define NVIC_ICER_CLRENA                    NVIC_ICER_CLRENA_Msk               /*!< Interrupt clear-enable bits */

+#define NVIC_ICER_CLRENA_0                  (0x00000001UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000001 */

+#define NVIC_ICER_CLRENA_1                  (0x00000002UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000002 */

+#define NVIC_ICER_CLRENA_2                  (0x00000004UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000004 */

+#define NVIC_ICER_CLRENA_3                  (0x00000008UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000008 */

+#define NVIC_ICER_CLRENA_4                  (0x00000010UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000010 */

+#define NVIC_ICER_CLRENA_5                  (0x00000020UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000020 */

+#define NVIC_ICER_CLRENA_6                  (0x00000040UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000040 */

+#define NVIC_ICER_CLRENA_7                  (0x00000080UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000080 */

+#define NVIC_ICER_CLRENA_8                  (0x00000100UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000100 */

+#define NVIC_ICER_CLRENA_9                  (0x00000200UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000200 */

+#define NVIC_ICER_CLRENA_10                 (0x00000400UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000400 */

+#define NVIC_ICER_CLRENA_11                 (0x00000800UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00000800 */

+#define NVIC_ICER_CLRENA_12                 (0x00001000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00001000 */

+#define NVIC_ICER_CLRENA_13                 (0x00002000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00002000 */

+#define NVIC_ICER_CLRENA_14                 (0x00004000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00004000 */

+#define NVIC_ICER_CLRENA_15                 (0x00008000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00008000 */

+#define NVIC_ICER_CLRENA_16                 (0x00010000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00010000 */

+#define NVIC_ICER_CLRENA_17                 (0x00020000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00020000 */

+#define NVIC_ICER_CLRENA_18                 (0x00040000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00040000 */

+#define NVIC_ICER_CLRENA_19                 (0x00080000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00080000 */

+#define NVIC_ICER_CLRENA_20                 (0x00100000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00100000 */

+#define NVIC_ICER_CLRENA_21                 (0x00200000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00200000 */

+#define NVIC_ICER_CLRENA_22                 (0x00400000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00400000 */

+#define NVIC_ICER_CLRENA_23                 (0x00800000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x00800000 */

+#define NVIC_ICER_CLRENA_24                 (0x01000000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x01000000 */

+#define NVIC_ICER_CLRENA_25                 (0x02000000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x02000000 */

+#define NVIC_ICER_CLRENA_26                 (0x04000000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x04000000 */

+#define NVIC_ICER_CLRENA_27                 (0x08000000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x08000000 */

+#define NVIC_ICER_CLRENA_28                 (0x10000000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x10000000 */

+#define NVIC_ICER_CLRENA_29                 (0x20000000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x20000000 */

+#define NVIC_ICER_CLRENA_30                 (0x40000000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x40000000 */

+#define NVIC_ICER_CLRENA_31                 (0x80000000UL << NVIC_ICER_CLRENA_Pos) /*!< 0x80000000 */

+

+/******************  Bit definition for NVIC_ISPR register  *******************/

+#define NVIC_ISPR_SETPEND_Pos               (0U)                               

+#define NVIC_ISPR_SETPEND_Msk               (0xFFFFFFFFUL << NVIC_ISPR_SETPEND_Pos) /*!< 0xFFFFFFFF */

+#define NVIC_ISPR_SETPEND                   NVIC_ISPR_SETPEND_Msk              /*!< Interrupt set-pending bits */

+#define NVIC_ISPR_SETPEND_0                 (0x00000001UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000001 */

+#define NVIC_ISPR_SETPEND_1                 (0x00000002UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000002 */

+#define NVIC_ISPR_SETPEND_2                 (0x00000004UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000004 */

+#define NVIC_ISPR_SETPEND_3                 (0x00000008UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000008 */

+#define NVIC_ISPR_SETPEND_4                 (0x00000010UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000010 */

+#define NVIC_ISPR_SETPEND_5                 (0x00000020UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000020 */

+#define NVIC_ISPR_SETPEND_6                 (0x00000040UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000040 */

+#define NVIC_ISPR_SETPEND_7                 (0x00000080UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000080 */

+#define NVIC_ISPR_SETPEND_8                 (0x00000100UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000100 */

+#define NVIC_ISPR_SETPEND_9                 (0x00000200UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000200 */

+#define NVIC_ISPR_SETPEND_10                (0x00000400UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000400 */

+#define NVIC_ISPR_SETPEND_11                (0x00000800UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00000800 */

+#define NVIC_ISPR_SETPEND_12                (0x00001000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00001000 */

+#define NVIC_ISPR_SETPEND_13                (0x00002000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00002000 */

+#define NVIC_ISPR_SETPEND_14                (0x00004000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00004000 */

+#define NVIC_ISPR_SETPEND_15                (0x00008000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00008000 */

+#define NVIC_ISPR_SETPEND_16                (0x00010000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00010000 */

+#define NVIC_ISPR_SETPEND_17                (0x00020000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00020000 */

+#define NVIC_ISPR_SETPEND_18                (0x00040000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00040000 */

+#define NVIC_ISPR_SETPEND_19                (0x00080000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00080000 */

+#define NVIC_ISPR_SETPEND_20                (0x00100000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00100000 */

+#define NVIC_ISPR_SETPEND_21                (0x00200000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00200000 */

+#define NVIC_ISPR_SETPEND_22                (0x00400000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00400000 */

+#define NVIC_ISPR_SETPEND_23                (0x00800000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x00800000 */

+#define NVIC_ISPR_SETPEND_24                (0x01000000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x01000000 */

+#define NVIC_ISPR_SETPEND_25                (0x02000000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x02000000 */

+#define NVIC_ISPR_SETPEND_26                (0x04000000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x04000000 */

+#define NVIC_ISPR_SETPEND_27                (0x08000000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x08000000 */

+#define NVIC_ISPR_SETPEND_28                (0x10000000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x10000000 */

+#define NVIC_ISPR_SETPEND_29                (0x20000000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x20000000 */

+#define NVIC_ISPR_SETPEND_30                (0x40000000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x40000000 */

+#define NVIC_ISPR_SETPEND_31                (0x80000000UL << NVIC_ISPR_SETPEND_Pos) /*!< 0x80000000 */

+

+/******************  Bit definition for NVIC_ICPR register  *******************/

+#define NVIC_ICPR_CLRPEND_Pos               (0U)                               

+#define NVIC_ICPR_CLRPEND_Msk               (0xFFFFFFFFUL << NVIC_ICPR_CLRPEND_Pos) /*!< 0xFFFFFFFF */

+#define NVIC_ICPR_CLRPEND                   NVIC_ICPR_CLRPEND_Msk              /*!< Interrupt clear-pending bits */

+#define NVIC_ICPR_CLRPEND_0                 (0x00000001UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000001 */

+#define NVIC_ICPR_CLRPEND_1                 (0x00000002UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000002 */

+#define NVIC_ICPR_CLRPEND_2                 (0x00000004UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000004 */

+#define NVIC_ICPR_CLRPEND_3                 (0x00000008UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000008 */

+#define NVIC_ICPR_CLRPEND_4                 (0x00000010UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000010 */

+#define NVIC_ICPR_CLRPEND_5                 (0x00000020UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000020 */

+#define NVIC_ICPR_CLRPEND_6                 (0x00000040UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000040 */

+#define NVIC_ICPR_CLRPEND_7                 (0x00000080UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000080 */

+#define NVIC_ICPR_CLRPEND_8                 (0x00000100UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000100 */

+#define NVIC_ICPR_CLRPEND_9                 (0x00000200UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000200 */

+#define NVIC_ICPR_CLRPEND_10                (0x00000400UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000400 */

+#define NVIC_ICPR_CLRPEND_11                (0x00000800UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00000800 */

+#define NVIC_ICPR_CLRPEND_12                (0x00001000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00001000 */

+#define NVIC_ICPR_CLRPEND_13                (0x00002000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00002000 */

+#define NVIC_ICPR_CLRPEND_14                (0x00004000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00004000 */

+#define NVIC_ICPR_CLRPEND_15                (0x00008000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00008000 */

+#define NVIC_ICPR_CLRPEND_16                (0x00010000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00010000 */

+#define NVIC_ICPR_CLRPEND_17                (0x00020000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00020000 */

+#define NVIC_ICPR_CLRPEND_18                (0x00040000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00040000 */

+#define NVIC_ICPR_CLRPEND_19                (0x00080000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00080000 */

+#define NVIC_ICPR_CLRPEND_20                (0x00100000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00100000 */

+#define NVIC_ICPR_CLRPEND_21                (0x00200000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00200000 */

+#define NVIC_ICPR_CLRPEND_22                (0x00400000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00400000 */

+#define NVIC_ICPR_CLRPEND_23                (0x00800000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x00800000 */

+#define NVIC_ICPR_CLRPEND_24                (0x01000000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x01000000 */

+#define NVIC_ICPR_CLRPEND_25                (0x02000000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x02000000 */

+#define NVIC_ICPR_CLRPEND_26                (0x04000000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x04000000 */

+#define NVIC_ICPR_CLRPEND_27                (0x08000000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x08000000 */

+#define NVIC_ICPR_CLRPEND_28                (0x10000000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x10000000 */

+#define NVIC_ICPR_CLRPEND_29                (0x20000000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x20000000 */

+#define NVIC_ICPR_CLRPEND_30                (0x40000000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x40000000 */

+#define NVIC_ICPR_CLRPEND_31                (0x80000000UL << NVIC_ICPR_CLRPEND_Pos) /*!< 0x80000000 */

+

+/******************  Bit definition for NVIC_IABR register  *******************/

+#define NVIC_IABR_ACTIVE_Pos                (0U)                               

+#define NVIC_IABR_ACTIVE_Msk                (0xFFFFFFFFUL << NVIC_IABR_ACTIVE_Pos) /*!< 0xFFFFFFFF */

+#define NVIC_IABR_ACTIVE                    NVIC_IABR_ACTIVE_Msk               /*!< Interrupt active flags */

+#define NVIC_IABR_ACTIVE_0                  (0x00000001UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000001 */

+#define NVIC_IABR_ACTIVE_1                  (0x00000002UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000002 */

+#define NVIC_IABR_ACTIVE_2                  (0x00000004UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000004 */

+#define NVIC_IABR_ACTIVE_3                  (0x00000008UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000008 */

+#define NVIC_IABR_ACTIVE_4                  (0x00000010UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000010 */

+#define NVIC_IABR_ACTIVE_5                  (0x00000020UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000020 */

+#define NVIC_IABR_ACTIVE_6                  (0x00000040UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000040 */

+#define NVIC_IABR_ACTIVE_7                  (0x00000080UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000080 */

+#define NVIC_IABR_ACTIVE_8                  (0x00000100UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000100 */

+#define NVIC_IABR_ACTIVE_9                  (0x00000200UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000200 */

+#define NVIC_IABR_ACTIVE_10                 (0x00000400UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000400 */

+#define NVIC_IABR_ACTIVE_11                 (0x00000800UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00000800 */

+#define NVIC_IABR_ACTIVE_12                 (0x00001000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00001000 */

+#define NVIC_IABR_ACTIVE_13                 (0x00002000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00002000 */

+#define NVIC_IABR_ACTIVE_14                 (0x00004000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00004000 */

+#define NVIC_IABR_ACTIVE_15                 (0x00008000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00008000 */

+#define NVIC_IABR_ACTIVE_16                 (0x00010000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00010000 */

+#define NVIC_IABR_ACTIVE_17                 (0x00020000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00020000 */

+#define NVIC_IABR_ACTIVE_18                 (0x00040000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00040000 */

+#define NVIC_IABR_ACTIVE_19                 (0x00080000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00080000 */

+#define NVIC_IABR_ACTIVE_20                 (0x00100000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00100000 */

+#define NVIC_IABR_ACTIVE_21                 (0x00200000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00200000 */

+#define NVIC_IABR_ACTIVE_22                 (0x00400000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00400000 */

+#define NVIC_IABR_ACTIVE_23                 (0x00800000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x00800000 */

+#define NVIC_IABR_ACTIVE_24                 (0x01000000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x01000000 */

+#define NVIC_IABR_ACTIVE_25                 (0x02000000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x02000000 */

+#define NVIC_IABR_ACTIVE_26                 (0x04000000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x04000000 */

+#define NVIC_IABR_ACTIVE_27                 (0x08000000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x08000000 */

+#define NVIC_IABR_ACTIVE_28                 (0x10000000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x10000000 */

+#define NVIC_IABR_ACTIVE_29                 (0x20000000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x20000000 */

+#define NVIC_IABR_ACTIVE_30                 (0x40000000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x40000000 */

+#define NVIC_IABR_ACTIVE_31                 (0x80000000UL << NVIC_IABR_ACTIVE_Pos) /*!< 0x80000000 */

+

+/******************  Bit definition for NVIC_PRI0 register  *******************/

+#define NVIC_IPR0_PRI_0                     (0x000000FFU)                      /*!< Priority of interrupt 0 */

+#define NVIC_IPR0_PRI_1                     (0x0000FF00U)                      /*!< Priority of interrupt 1 */

+#define NVIC_IPR0_PRI_2                     (0x00FF0000U)                      /*!< Priority of interrupt 2 */

+#define NVIC_IPR0_PRI_3                     (0xFF000000U)                      /*!< Priority of interrupt 3 */

+

+/******************  Bit definition for NVIC_PRI1 register  *******************/

+#define NVIC_IPR1_PRI_4                     (0x000000FFU)                      /*!< Priority of interrupt 4 */

+#define NVIC_IPR1_PRI_5                     (0x0000FF00U)                      /*!< Priority of interrupt 5 */

+#define NVIC_IPR1_PRI_6                     (0x00FF0000U)                      /*!< Priority of interrupt 6 */

+#define NVIC_IPR1_PRI_7                     (0xFF000000U)                      /*!< Priority of interrupt 7 */

+

+/******************  Bit definition for NVIC_PRI2 register  *******************/

+#define NVIC_IPR2_PRI_8                     (0x000000FFU)                      /*!< Priority of interrupt 8 */

+#define NVIC_IPR2_PRI_9                     (0x0000FF00U)                      /*!< Priority of interrupt 9 */

+#define NVIC_IPR2_PRI_10                    (0x00FF0000U)                      /*!< Priority of interrupt 10 */

+#define NVIC_IPR2_PRI_11                    (0xFF000000U)                      /*!< Priority of interrupt 11 */

+

+/******************  Bit definition for NVIC_PRI3 register  *******************/

+#define NVIC_IPR3_PRI_12                    (0x000000FFU)                      /*!< Priority of interrupt 12 */

+#define NVIC_IPR3_PRI_13                    (0x0000FF00U)                      /*!< Priority of interrupt 13 */

+#define NVIC_IPR3_PRI_14                    (0x00FF0000U)                      /*!< Priority of interrupt 14 */

+#define NVIC_IPR3_PRI_15                    (0xFF000000U)                      /*!< Priority of interrupt 15 */

+

+/******************  Bit definition for NVIC_PRI4 register  *******************/

+#define NVIC_IPR4_PRI_16                    (0x000000FFU)                      /*!< Priority of interrupt 16 */

+#define NVIC_IPR4_PRI_17                    (0x0000FF00U)                      /*!< Priority of interrupt 17 */

+#define NVIC_IPR4_PRI_18                    (0x00FF0000U)                      /*!< Priority of interrupt 18 */

+#define NVIC_IPR4_PRI_19                    (0xFF000000U)                      /*!< Priority of interrupt 19 */

+

+/******************  Bit definition for NVIC_PRI5 register  *******************/

+#define NVIC_IPR5_PRI_20                    (0x000000FFU)                      /*!< Priority of interrupt 20 */

+#define NVIC_IPR5_PRI_21                    (0x0000FF00U)                      /*!< Priority of interrupt 21 */

+#define NVIC_IPR5_PRI_22                    (0x00FF0000U)                      /*!< Priority of interrupt 22 */

+#define NVIC_IPR5_PRI_23                    (0xFF000000U)                      /*!< Priority of interrupt 23 */

+

+/******************  Bit definition for NVIC_PRI6 register  *******************/

+#define NVIC_IPR6_PRI_24                    (0x000000FFU)                      /*!< Priority of interrupt 24 */

+#define NVIC_IPR6_PRI_25                    (0x0000FF00U)                      /*!< Priority of interrupt 25 */

+#define NVIC_IPR6_PRI_26                    (0x00FF0000U)                      /*!< Priority of interrupt 26 */

+#define NVIC_IPR6_PRI_27                    (0xFF000000U)                      /*!< Priority of interrupt 27 */

+

+/******************  Bit definition for NVIC_PRI7 register  *******************/

+#define NVIC_IPR7_PRI_28                    (0x000000FFU)                      /*!< Priority of interrupt 28 */

+#define NVIC_IPR7_PRI_29                    (0x0000FF00U)                      /*!< Priority of interrupt 29 */

+#define NVIC_IPR7_PRI_30                    (0x00FF0000U)                      /*!< Priority of interrupt 30 */

+#define NVIC_IPR7_PRI_31                    (0xFF000000U)                      /*!< Priority of interrupt 31 */

+

+/******************  Bit definition for SCB_CPUID register  *******************/

+#define SCB_CPUID_REVISION                  (0x0000000FU)                      /*!< Implementation defined revision number */

+#define SCB_CPUID_PARTNO                    (0x0000FFF0U)                      /*!< Number of processor within serie */

+#define SCB_CPUID_Constant                  (0x000F0000U)                      /*!< Reads as 0x0F */

+#define SCB_CPUID_VARIANT                   (0x00F00000U)                      /*!< Implementation defined variant number */

+#define SCB_CPUID_IMPLEMENTER               (0xFF000000U)                      /*!< Implementer code. ARM is 0x41 */

+

+/*******************  Bit definition for SCB_ICSR register  *******************/

+#define SCB_ICSR_VECTACTIVE                 (0x000001FFU)                      /*!< Active ISR number field */

+#define SCB_ICSR_RETTOBASE                  (0x00000800U)                      /*!< All active exceptions minus the IPSR_current_exception yields the empty set */

+#define SCB_ICSR_VECTPENDING                (0x003FF000U)                      /*!< Pending ISR number field */

+#define SCB_ICSR_ISRPENDING                 (0x00400000U)                      /*!< Interrupt pending flag */

+#define SCB_ICSR_ISRPREEMPT                 (0x00800000U)                      /*!< It indicates that a pending interrupt becomes active in the next running cycle */

+#define SCB_ICSR_PENDSTCLR                  (0x02000000U)                      /*!< Clear pending SysTick bit */

+#define SCB_ICSR_PENDSTSET                  (0x04000000U)                      /*!< Set pending SysTick bit */

+#define SCB_ICSR_PENDSVCLR                  (0x08000000U)                      /*!< Clear pending pendSV bit */

+#define SCB_ICSR_PENDSVSET                  (0x10000000U)                      /*!< Set pending pendSV bit */

+#define SCB_ICSR_NMIPENDSET                 (0x80000000U)                      /*!< Set pending NMI bit */

+

+/*******************  Bit definition for SCB_VTOR register  *******************/

+#define SCB_VTOR_TBLOFF                     (0x1FFFFF80U)                      /*!< Vector table base offset field */

+#define SCB_VTOR_TBLBASE                    (0x20000000U)                      /*!< Table base in code(0) or RAM(1) */

+

+/*!<*****************  Bit definition for SCB_AIRCR register  *******************/

+#define SCB_AIRCR_VECTRESET                 (0x00000001U)                      /*!< System Reset bit */

+#define SCB_AIRCR_VECTCLRACTIVE             (0x00000002U)                      /*!< Clear active vector bit */

+#define SCB_AIRCR_SYSRESETREQ               (0x00000004U)                      /*!< Requests chip control logic to generate a reset */

+

+#define SCB_AIRCR_PRIGROUP                  (0x00000700U)                      /*!< PRIGROUP[2:0] bits (Priority group) */

+#define SCB_AIRCR_PRIGROUP_0                (0x00000100U)                      /*!< Bit 0 */

+#define SCB_AIRCR_PRIGROUP_1                (0x00000200U)                      /*!< Bit 1 */

+#define SCB_AIRCR_PRIGROUP_2                (0x00000400U)                      /*!< Bit 2  */

+

+/* prority group configuration */

+#define SCB_AIRCR_PRIGROUP0                 (0x00000000U)                      /*!< Priority group=0 (7 bits of pre-emption priority, 1 bit of subpriority) */

+#define SCB_AIRCR_PRIGROUP1                 (0x00000100U)                      /*!< Priority group=1 (6 bits of pre-emption priority, 2 bits of subpriority) */

+#define SCB_AIRCR_PRIGROUP2                 (0x00000200U)                      /*!< Priority group=2 (5 bits of pre-emption priority, 3 bits of subpriority) */

+#define SCB_AIRCR_PRIGROUP3                 (0x00000300U)                      /*!< Priority group=3 (4 bits of pre-emption priority, 4 bits of subpriority) */

+#define SCB_AIRCR_PRIGROUP4                 (0x00000400U)                      /*!< Priority group=4 (3 bits of pre-emption priority, 5 bits of subpriority) */

+#define SCB_AIRCR_PRIGROUP5                 (0x00000500U)                      /*!< Priority group=5 (2 bits of pre-emption priority, 6 bits of subpriority) */

+#define SCB_AIRCR_PRIGROUP6                 (0x00000600U)                      /*!< Priority group=6 (1 bit of pre-emption priority, 7 bits of subpriority) */

+#define SCB_AIRCR_PRIGROUP7                 (0x00000700U)                      /*!< Priority group=7 (no pre-emption priority, 8 bits of subpriority) */

+

+#define SCB_AIRCR_ENDIANESS                 (0x00008000U)                      /*!< Data endianness bit */

+#define SCB_AIRCR_VECTKEY                   (0xFFFF0000U)                      /*!< Register key (VECTKEY) - Reads as 0xFA05 (VECTKEYSTAT) */

+

+/*******************  Bit definition for SCB_SCR register  ********************/

+#define SCB_SCR_SLEEPONEXIT                 (0x00000002U)                      /*!< Sleep on exit bit */

+#define SCB_SCR_SLEEPDEEP                   (0x00000004U)                      /*!< Sleep deep bit */

+#define SCB_SCR_SEVONPEND                   (0x00000010U)                      /*!< Wake up from WFE */

+

+/********************  Bit definition for SCB_CCR register  *******************/

+#define SCB_CCR_NONBASETHRDENA              (0x00000001U)                      /*!< Thread mode can be entered from any level in Handler mode by controlled return value */

+#define SCB_CCR_USERSETMPEND                (0x00000002U)                      /*!< Enables user code to write the Software Trigger Interrupt register to trigger (pend) a Main exception */

+#define SCB_CCR_UNALIGN_TRP                 (0x00000008U)                      /*!< Trap for unaligned access */

+#define SCB_CCR_DIV_0_TRP                   (0x00000010U)                      /*!< Trap on Divide by 0 */

+#define SCB_CCR_BFHFNMIGN                   (0x00000100U)                      /*!< Handlers running at priority -1 and -2 */

+#define SCB_CCR_STKALIGN                    (0x00000200U)                      /*!< On exception entry, the SP used prior to the exception is adjusted to be 8-byte aligned */

+

+/*******************  Bit definition for SCB_SHPR register ********************/

+#define SCB_SHPR_PRI_N_Pos                  (0U)                               

+#define SCB_SHPR_PRI_N_Msk                  (0xFFUL << SCB_SHPR_PRI_N_Pos)      /*!< 0x000000FF */

+#define SCB_SHPR_PRI_N                      SCB_SHPR_PRI_N_Msk                 /*!< Priority of system handler 4,8, and 12. Mem Manage, reserved and Debug Monitor */

+#define SCB_SHPR_PRI_N1_Pos                 (8U)                               

+#define SCB_SHPR_PRI_N1_Msk                 (0xFFUL << SCB_SHPR_PRI_N1_Pos)     /*!< 0x0000FF00 */

+#define SCB_SHPR_PRI_N1                     SCB_SHPR_PRI_N1_Msk                /*!< Priority of system handler 5,9, and 13. Bus Fault, reserved and reserved */

+#define SCB_SHPR_PRI_N2_Pos                 (16U)                              

+#define SCB_SHPR_PRI_N2_Msk                 (0xFFUL << SCB_SHPR_PRI_N2_Pos)     /*!< 0x00FF0000 */

+#define SCB_SHPR_PRI_N2                     SCB_SHPR_PRI_N2_Msk                /*!< Priority of system handler 6,10, and 14. Usage Fault, reserved and PendSV */

+#define SCB_SHPR_PRI_N3_Pos                 (24U)                              

+#define SCB_SHPR_PRI_N3_Msk                 (0xFFUL << SCB_SHPR_PRI_N3_Pos)     /*!< 0xFF000000 */

+#define SCB_SHPR_PRI_N3                     SCB_SHPR_PRI_N3_Msk                /*!< Priority of system handler 7,11, and 15. Reserved, SVCall and SysTick */

+

+/******************  Bit definition for SCB_SHCSR register  *******************/

+#define SCB_SHCSR_MEMFAULTACT               (0x00000001U)                      /*!< MemManage is active */

+#define SCB_SHCSR_BUSFAULTACT               (0x00000002U)                      /*!< BusFault is active */

+#define SCB_SHCSR_USGFAULTACT               (0x00000008U)                      /*!< UsageFault is active */

+#define SCB_SHCSR_SVCALLACT                 (0x00000080U)                      /*!< SVCall is active */

+#define SCB_SHCSR_MONITORACT                (0x00000100U)                      /*!< Monitor is active */

+#define SCB_SHCSR_PENDSVACT                 (0x00000400U)                      /*!< PendSV is active */

+#define SCB_SHCSR_SYSTICKACT                (0x00000800U)                      /*!< SysTick is active */

+#define SCB_SHCSR_USGFAULTPENDED            (0x00001000U)                      /*!< Usage Fault is pended */

+#define SCB_SHCSR_MEMFAULTPENDED            (0x00002000U)                      /*!< MemManage is pended */

+#define SCB_SHCSR_BUSFAULTPENDED            (0x00004000U)                      /*!< Bus Fault is pended */

+#define SCB_SHCSR_SVCALLPENDED              (0x00008000U)                      /*!< SVCall is pended */

+#define SCB_SHCSR_MEMFAULTENA               (0x00010000U)                      /*!< MemManage enable */

+#define SCB_SHCSR_BUSFAULTENA               (0x00020000U)                      /*!< Bus Fault enable */

+#define SCB_SHCSR_USGFAULTENA               (0x00040000U)                      /*!< UsageFault enable */

+

+/*******************  Bit definition for SCB_CFSR register  *******************/

+/*!< MFSR */

+#define SCB_CFSR_IACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 0U)    /*!< SCB CFSR (MMFSR): IACCVIOL Position */

+#define SCB_CFSR_IACCVIOL_Msk              (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/)  /*!< SCB CFSR (MMFSR): IACCVIOL Mask */

+#define SCB_CFSR_IACCVIOL                   SCB_CFSR_IACCVIOL_Msk              /*!< Instruction access violation */

+#define SCB_CFSR_DACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 1U)    /*!< SCB CFSR (MMFSR): DACCVIOL Position */

+#define SCB_CFSR_DACCVIOL_Msk              (1UL << SCB_CFSR_DACCVIOL_Pos)      /*!< SCB CFSR (MMFSR): DACCVIOL Mask */

+#define SCB_CFSR_DACCVIOL                   SCB_CFSR_DACCVIOL_Msk              /*!< Data access violation */

+#define SCB_CFSR_MUNSTKERR_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 3U)    /*!< SCB CFSR (MMFSR): MUNSTKERR Position */

+#define SCB_CFSR_MUNSTKERR_Msk             (1UL << SCB_CFSR_MUNSTKERR_Pos)     /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */

+#define SCB_CFSR_MUNSTKERR                  SCB_CFSR_MUNSTKERR_Msk             /*!< Unstacking error */

+#define SCB_CFSR_MSTKERR_Pos               (SCB_SHCSR_MEMFAULTACT_Pos + 4U)    /*!< SCB CFSR (MMFSR): MSTKERR Position */

+#define SCB_CFSR_MSTKERR_Msk               (1UL << SCB_CFSR_MSTKERR_Pos)       /*!< SCB CFSR (MMFSR): MSTKERR Mask */

+#define SCB_CFSR_MSTKERR                    SCB_CFSR_MSTKERR_Msk               /*!< Stacking error */

+#define SCB_CFSR_MMARVALID_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 7U)    /*!< SCB CFSR (MMFSR): MMARVALID Position */

+#define SCB_CFSR_MMARVALID_Msk             (1UL << SCB_CFSR_MMARVALID_Pos)     /*!< SCB CFSR (MMFSR): MMARVALID Mask */

+#define SCB_CFSR_MMARVALID                  SCB_CFSR_MMARVALID_Msk             /*!< Memory Manage Address Register address valid flag */

+/*!< BFSR */

+#define SCB_CFSR_IBUSERR_Pos              (SCB_CFSR_BUSFAULTSR_Pos + 0U)       /*!< SCB CFSR (BFSR): IBUSERR Position */

+#define SCB_CFSR_IBUSERR_Msk              (1UL << SCB_CFSR_IBUSERR_Pos)        /*!< SCB CFSR (BFSR): IBUSERR Mask */

+#define SCB_CFSR_IBUSERR                    SCB_CFSR_IBUSERR_Msk               /*!< Instruction bus error flag */

+#define SCB_CFSR_PRECISERR_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 1U)       /*!< SCB CFSR (BFSR): PRECISERR Position */

+#define SCB_CFSR_PRECISERR_Msk            (1UL << SCB_CFSR_PRECISERR_Pos)      /*!< SCB CFSR (BFSR): PRECISERR Mask */

+#define SCB_CFSR_PRECISERR                  SCB_CFSR_PRECISERR_Msk             /*!< Precise data bus error */

+#define SCB_CFSR_IMPRECISERR_Pos          (SCB_CFSR_BUSFAULTSR_Pos + 2U)       /*!< SCB CFSR (BFSR): IMPRECISERR Position */

+#define SCB_CFSR_IMPRECISERR_Msk          (1UL << SCB_CFSR_IMPRECISERR_Pos)    /*!< SCB CFSR (BFSR): IMPRECISERR Mask */

+#define SCB_CFSR_IMPRECISERR                SCB_CFSR_IMPRECISERR_Msk           /*!< Imprecise data bus error */

+#define SCB_CFSR_UNSTKERR_Pos             (SCB_CFSR_BUSFAULTSR_Pos + 3U)       /*!< SCB CFSR (BFSR): UNSTKERR Position */

+#define SCB_CFSR_UNSTKERR_Msk             (1UL << SCB_CFSR_UNSTKERR_Pos)       /*!< SCB CFSR (BFSR): UNSTKERR Mask */

+#define SCB_CFSR_UNSTKERR                   SCB_CFSR_UNSTKERR_Msk              /*!< Unstacking error */

+#define SCB_CFSR_STKERR_Pos               (SCB_CFSR_BUSFAULTSR_Pos + 4U)       /*!< SCB CFSR (BFSR): STKERR Position */

+#define SCB_CFSR_STKERR_Msk               (1UL << SCB_CFSR_STKERR_Pos)         /*!< SCB CFSR (BFSR): STKERR Mask */

+#define SCB_CFSR_STKERR                     SCB_CFSR_STKERR_Msk                /*!< Stacking error */

+#define SCB_CFSR_BFARVALID_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 7U)       /*!< SCB CFSR (BFSR): BFARVALID Position */

+#define SCB_CFSR_BFARVALID_Msk            (1UL << SCB_CFSR_BFARVALID_Pos)      /*!< SCB CFSR (BFSR): BFARVALID Mask */

+#define SCB_CFSR_BFARVALID                  SCB_CFSR_BFARVALID_Msk             /*!< Bus Fault Address Register address valid flag */

+/*!< UFSR */

+#define SCB_CFSR_UNDEFINSTR_Pos           (SCB_CFSR_USGFAULTSR_Pos + 0U)       /*!< SCB CFSR (UFSR): UNDEFINSTR Position */

+#define SCB_CFSR_UNDEFINSTR_Msk           (1UL << SCB_CFSR_UNDEFINSTR_Pos)     /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */

+#define SCB_CFSR_UNDEFINSTR                 SCB_CFSR_UNDEFINSTR_Msk            /*!< The processor attempt to excecute an undefined instruction */

+#define SCB_CFSR_INVSTATE_Pos             (SCB_CFSR_USGFAULTSR_Pos + 1U)       /*!< SCB CFSR (UFSR): INVSTATE Position */

+#define SCB_CFSR_INVSTATE_Msk             (1UL << SCB_CFSR_INVSTATE_Pos)       /*!< SCB CFSR (UFSR): INVSTATE Mask */

+#define SCB_CFSR_INVSTATE                   SCB_CFSR_INVSTATE_Msk              /*!< Invalid combination of EPSR and instruction */

+#define SCB_CFSR_INVPC_Pos                (SCB_CFSR_USGFAULTSR_Pos + 2U)       /*!< SCB CFSR (UFSR): INVPC Position */

+#define SCB_CFSR_INVPC_Msk                (1UL << SCB_CFSR_INVPC_Pos)          /*!< SCB CFSR (UFSR): INVPC Mask */

+#define SCB_CFSR_INVPC                      SCB_CFSR_INVPC_Msk                 /*!< Attempt to load EXC_RETURN into pc illegally */

+#define SCB_CFSR_NOCP_Pos                 (SCB_CFSR_USGFAULTSR_Pos + 3U)       /*!< SCB CFSR (UFSR): NOCP Position */

+#define SCB_CFSR_NOCP_Msk                 (1UL << SCB_CFSR_NOCP_Pos)           /*!< SCB CFSR (UFSR): NOCP Mask */

+#define SCB_CFSR_NOCP                       SCB_CFSR_NOCP_Msk                  /*!< Attempt to use a coprocessor instruction */

+#define SCB_CFSR_UNALIGNED_Pos            (SCB_CFSR_USGFAULTSR_Pos + 8U)       /*!< SCB CFSR (UFSR): UNALIGNED Position */

+#define SCB_CFSR_UNALIGNED_Msk            (1UL << SCB_CFSR_UNALIGNED_Pos)      /*!< SCB CFSR (UFSR): UNALIGNED Mask */

+#define SCB_CFSR_UNALIGNED                  SCB_CFSR_UNALIGNED_Msk             /*!< Fault occurs when there is an attempt to make an unaligned memory access */

+#define SCB_CFSR_DIVBYZERO_Pos            (SCB_CFSR_USGFAULTSR_Pos + 9U)       /*!< SCB CFSR (UFSR): DIVBYZERO Position */

+#define SCB_CFSR_DIVBYZERO_Msk            (1UL << SCB_CFSR_DIVBYZERO_Pos)      /*!< SCB CFSR (UFSR): DIVBYZERO Mask */

+#define SCB_CFSR_DIVBYZERO                  SCB_CFSR_DIVBYZERO_Msk             /*!< Fault occurs when SDIV or DIV instruction is used with a divisor of 0 */

+

+/*******************  Bit definition for SCB_HFSR register  *******************/

+#define SCB_HFSR_VECTTBL                    (0x00000002U)                      /*!< Fault occures because of vector table read on exception processing */

+#define SCB_HFSR_FORCED                     (0x40000000U)                      /*!< Hard Fault activated when a configurable Fault was received and cannot activate */

+#define SCB_HFSR_DEBUGEVT                   (0x80000000U)                      /*!< Fault related to debug */

+

+/*******************  Bit definition for SCB_DFSR register  *******************/

+#define SCB_DFSR_HALTED                     (0x00000001U)                      /*!< Halt request flag */

+#define SCB_DFSR_BKPT                       (0x00000002U)                      /*!< BKPT flag */

+#define SCB_DFSR_DWTTRAP                    (0x00000004U)                      /*!< Data Watchpoint and Trace (DWT) flag */

+#define SCB_DFSR_VCATCH                     (0x00000008U)                      /*!< Vector catch flag */

+#define SCB_DFSR_EXTERNAL                   (0x00000010U)                      /*!< External debug request flag */

+

+/*******************  Bit definition for SCB_MMFAR register  ******************/

+#define SCB_MMFAR_ADDRESS_Pos               (0U)                               

+#define SCB_MMFAR_ADDRESS_Msk               (0xFFFFFFFFUL << SCB_MMFAR_ADDRESS_Pos) /*!< 0xFFFFFFFF */

+#define SCB_MMFAR_ADDRESS                   SCB_MMFAR_ADDRESS_Msk              /*!< Mem Manage fault address field */

+

+/*******************  Bit definition for SCB_BFAR register  *******************/

+#define SCB_BFAR_ADDRESS_Pos                (0U)                               

+#define SCB_BFAR_ADDRESS_Msk                (0xFFFFFFFFUL << SCB_BFAR_ADDRESS_Pos) /*!< 0xFFFFFFFF */

+#define SCB_BFAR_ADDRESS                    SCB_BFAR_ADDRESS_Msk               /*!< Bus fault address field */

+

+/*******************  Bit definition for SCB_afsr register  *******************/

+#define SCB_AFSR_IMPDEF_Pos                 (0U)                               

+#define SCB_AFSR_IMPDEF_Msk                 (0xFFFFFFFFUL << SCB_AFSR_IMPDEF_Pos) /*!< 0xFFFFFFFF */

+#define SCB_AFSR_IMPDEF                     SCB_AFSR_IMPDEF_Msk                /*!< Implementation defined */

+/**

+  * @}

+  */

+

+ /**

+  * @}

+  */ 

+/** @addtogroup Exported_macro

+  * @{

+  */

+      

+/****************************** ADC Instances *********************************/

+#define IS_ADC_ALL_INSTANCE(INSTANCE) ((INSTANCE) == ADC1)

+

+#define IS_ADC_COMMON_INSTANCE(INSTANCE) ((INSTANCE) == ADC1_COMMON)

+

+/******************************** COMP Instances ******************************/

+#define IS_COMP_ALL_INSTANCE(INSTANCE) (((INSTANCE) == COMP1) || \

+                                        ((INSTANCE) == COMP2))

+

+#define IS_COMP_COMMON_INSTANCE(COMMON_INSTANCE) ((COMMON_INSTANCE) == COMP12_COMMON)

+

+/****************************** CRC Instances *********************************/

+#define IS_CRC_ALL_INSTANCE(INSTANCE) ((INSTANCE) == CRC)

+

+/****************************** DAC Instances *********************************/

+#define IS_DAC_ALL_INSTANCE(INSTANCE) ((INSTANCE) == DAC)

+

+/****************************** DMA Instances *********************************/

+#define IS_DMA_ALL_INSTANCE(INSTANCE) (((INSTANCE) == DMA1_Channel1) || \

+                                       ((INSTANCE) == DMA1_Channel2) || \

+                                       ((INSTANCE) == DMA1_Channel3) || \

+                                       ((INSTANCE) == DMA1_Channel4) || \

+                                       ((INSTANCE) == DMA1_Channel5) || \

+                                       ((INSTANCE) == DMA1_Channel6) || \

+                                       ((INSTANCE) == DMA1_Channel7) || \

+                                       ((INSTANCE) == DMA2_Channel1) || \

+                                       ((INSTANCE) == DMA2_Channel2) || \

+                                       ((INSTANCE) == DMA2_Channel3) || \

+                                       ((INSTANCE) == DMA2_Channel4) || \

+                                       ((INSTANCE) == DMA2_Channel5))

+

+/******************************* GPIO Instances *******************************/

+#define IS_GPIO_ALL_INSTANCE(INSTANCE) (((INSTANCE) == GPIOA) || \

+                                        ((INSTANCE) == GPIOB) || \

+                                        ((INSTANCE) == GPIOC) || \

+                                        ((INSTANCE) == GPIOD) || \

+                                        ((INSTANCE) == GPIOE) || \

+                                        ((INSTANCE) == GPIOF) || \

+                                        ((INSTANCE) == GPIOG) || \

+                                        ((INSTANCE) == GPIOH))

+

+/**************************** GPIO Alternate Function Instances ***************/

+#define IS_GPIO_AF_INSTANCE(INSTANCE) IS_GPIO_ALL_INSTANCE(INSTANCE)

+

+/**************************** GPIO Lock Instances *****************************/

+/* On L1, all GPIO Bank support the Lock mechanism */

+#define IS_GPIO_LOCK_INSTANCE(INSTANCE) IS_GPIO_ALL_INSTANCE(INSTANCE)

+

+/******************************** I2C Instances *******************************/

+#define IS_I2C_ALL_INSTANCE(INSTANCE) (((INSTANCE) == I2C1) || \

+                                       ((INSTANCE) == I2C2))

+

+/****************************** SMBUS Instances *******************************/

+#define IS_SMBUS_ALL_INSTANCE(INSTANCE) IS_I2C_ALL_INSTANCE(INSTANCE)

+

+/******************************** I2S Instances *******************************/

+#define IS_I2S_ALL_INSTANCE(INSTANCE) (((INSTANCE) == SPI2) || \

+                                       ((INSTANCE) == SPI3))

+/****************************** IWDG Instances ********************************/

+#define IS_IWDG_ALL_INSTANCE(INSTANCE)  ((INSTANCE) == IWDG)

+

+/****************************** OPAMP Instances *******************************/

+#define IS_OPAMP_ALL_INSTANCE(INSTANCE) (((INSTANCE) == OPAMP1) || \

+                                         ((INSTANCE) == OPAMP2))

+

+#define IS_OPAMP_COMMON_INSTANCE(COMMON_INSTANCE) ((COMMON_INSTANCE) == OPAMP12_COMMON)

+

+/****************************** RTC Instances *********************************/

+#define IS_RTC_ALL_INSTANCE(INSTANCE)  ((INSTANCE) == RTC)

+

+/******************************** SPI Instances *******************************/

+#define IS_SPI_ALL_INSTANCE(INSTANCE) (((INSTANCE) == SPI1) || \

+                                       ((INSTANCE) == SPI2) || \

+                                       ((INSTANCE) == SPI3))

+

+/****************************** TIM Instances *********************************/ 

+#define IS_TIM_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)    || \

+                                   ((INSTANCE) == TIM3)    || \

+                                   ((INSTANCE) == TIM4)    || \

+                                   ((INSTANCE) == TIM5)    || \

+                                   ((INSTANCE) == TIM6)    || \

+                                   ((INSTANCE) == TIM7)    || \

+                                   ((INSTANCE) == TIM9)    || \

+                                   ((INSTANCE) == TIM10)   || \

+                                   ((INSTANCE) == TIM11))

+

+#define IS_TIM_CC1_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                       ((INSTANCE) == TIM3)  || \

+                                       ((INSTANCE) == TIM4)  || \

+                                       ((INSTANCE) == TIM5)  || \

+                                       ((INSTANCE) == TIM9)  || \

+                                       ((INSTANCE) == TIM10) || \

+                                       ((INSTANCE) == TIM11))

+

+#define IS_TIM_CC2_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                       ((INSTANCE) == TIM3)  || \

+                                       ((INSTANCE) == TIM4)  || \

+                                       ((INSTANCE) == TIM5)  || \

+                                       ((INSTANCE) == TIM9))

+

+#define IS_TIM_CC3_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                       ((INSTANCE) == TIM3)  || \

+                                       ((INSTANCE) == TIM4)  || \

+                                       ((INSTANCE) == TIM5))

+

+#define IS_TIM_CC4_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                       ((INSTANCE) == TIM3)  || \

+                                       ((INSTANCE) == TIM4)  || \

+                                       ((INSTANCE) == TIM5))

+

+#define IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                                        ((INSTANCE) == TIM3)  || \

+                                                        ((INSTANCE) == TIM4)  || \

+                                                        ((INSTANCE) == TIM5)  || \

+                                                        ((INSTANCE) == TIM9))

+

+#define IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                                        ((INSTANCE) == TIM3)  || \

+                                                        ((INSTANCE) == TIM4)  || \

+                                                        ((INSTANCE) == TIM5)  || \

+                                                        ((INSTANCE) == TIM9)  || \

+                                                        ((INSTANCE) == TIM10) || \

+                                                        ((INSTANCE) == TIM11))

+

+#define IS_TIM_CLOCKSOURCE_TIX_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                                   ((INSTANCE) == TIM3)  || \

+                                                   ((INSTANCE) == TIM4)  || \

+                                                   ((INSTANCE) == TIM5)  || \

+                                                   ((INSTANCE) == TIM9))

+

+#define IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                                    ((INSTANCE) == TIM3)  || \

+                                                    ((INSTANCE) == TIM4)  || \

+                                                    ((INSTANCE) == TIM5)  || \

+                                                    ((INSTANCE) == TIM9))

+

+#define IS_TIM_OCXREF_CLEAR_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                                ((INSTANCE) == TIM3)  || \

+                                                ((INSTANCE) == TIM4))

+

+#define IS_TIM_XOR_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                       ((INSTANCE) == TIM3)  || \

+                                       ((INSTANCE) == TIM4)  || \

+                                       ((INSTANCE) == TIM5))

+                                       

+#define IS_TIM_ETR_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                       ((INSTANCE) == TIM3)  || \

+                                       ((INSTANCE) == TIM4)  || \

+                                       ((INSTANCE) == TIM5)  || \

+                                       ((INSTANCE) == TIM9))

+

+

+#define IS_TIM_MASTER_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                          ((INSTANCE) == TIM3)  || \

+                                          ((INSTANCE) == TIM4)  || \

+                                          ((INSTANCE) == TIM5)  || \

+                                          ((INSTANCE) == TIM9))

+

+#define IS_TIM_SYNCHRO_INSTANCE(INSTANCE)  IS_TIM_MASTER_INSTANCE(INSTANCE)

+

+#define IS_TIM_SLAVE_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                         ((INSTANCE) == TIM3)  || \

+                                         ((INSTANCE) == TIM4)  || \

+                                         ((INSTANCE) == TIM9))

+

+#define IS_TIM_32B_COUNTER_INSTANCE(INSTANCE) ((INSTANCE) == TIM5)

+

+#define IS_TIM_DMABURST_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                            ((INSTANCE) == TIM3)  || \

+                                            ((INSTANCE) == TIM4)  || \

+                                            ((INSTANCE) == TIM5))

+

+#define IS_TIM_CCX_INSTANCE(INSTANCE, CHANNEL) \

+    ((((INSTANCE) == TIM2) &&                   \

+     (((CHANNEL) == TIM_CHANNEL_1) ||          \

+      ((CHANNEL) == TIM_CHANNEL_2) ||          \

+      ((CHANNEL) == TIM_CHANNEL_3) ||          \

+      ((CHANNEL) == TIM_CHANNEL_4)))           \

+    ||                                         \

+    (((INSTANCE) == TIM3) &&                   \

+     (((CHANNEL) == TIM_CHANNEL_1) ||          \

+      ((CHANNEL) == TIM_CHANNEL_2) ||          \

+      ((CHANNEL) == TIM_CHANNEL_3) ||          \

+      ((CHANNEL) == TIM_CHANNEL_4)))           \

+    ||                                         \

+    (((INSTANCE) == TIM4) &&                   \

+     (((CHANNEL) == TIM_CHANNEL_1) ||          \

+      ((CHANNEL) == TIM_CHANNEL_2) ||          \

+      ((CHANNEL) == TIM_CHANNEL_3) ||          \

+      ((CHANNEL) == TIM_CHANNEL_4)))           \

+    ||                                         \

+    (((INSTANCE) == TIM5) &&                   \

+     (((CHANNEL) == TIM_CHANNEL_1) ||          \

+      ((CHANNEL) == TIM_CHANNEL_2) ||          \

+      ((CHANNEL) == TIM_CHANNEL_3) ||          \

+      ((CHANNEL) == TIM_CHANNEL_4)))           \

+    ||                                         \

+    (((INSTANCE) == TIM9) &&                  \

+     (((CHANNEL) == TIM_CHANNEL_1) ||          \

+      ((CHANNEL) == TIM_CHANNEL_2)))           \

+    ||                                         \

+    (((INSTANCE) == TIM10) &&                  \

+     (((CHANNEL) == TIM_CHANNEL_1)))           \

+    ||                                         \

+    (((INSTANCE) == TIM11) &&                  \

+     (((CHANNEL) == TIM_CHANNEL_1))))

+

+#define IS_TIM_CLOCK_DIVISION_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                                  ((INSTANCE) == TIM3)  || \

+                                                  ((INSTANCE) == TIM4)  || \

+                                                  ((INSTANCE) == TIM5)  || \

+                                                  ((INSTANCE) == TIM9)  || \

+                                                  ((INSTANCE) == TIM10) || \

+                                                  ((INSTANCE) == TIM11))

+

+#define IS_TIM_DMA_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)    || \

+                                       ((INSTANCE) == TIM3)    || \

+                                       ((INSTANCE) == TIM4)    || \

+                                       ((INSTANCE) == TIM5)    || \

+                                       ((INSTANCE) == TIM6)    || \

+                                       ((INSTANCE) == TIM7))

+    

+#define IS_TIM_DMA_CC_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                          ((INSTANCE) == TIM3)  || \

+                                          ((INSTANCE) == TIM4)  || \

+                                          ((INSTANCE) == TIM5))

+

+#define IS_TIM_COUNTER_MODE_SELECT_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)    || \

+                                                       ((INSTANCE) == TIM3)    || \

+                                                       ((INSTANCE) == TIM4)    || \

+                                                       ((INSTANCE) == TIM5)    || \

+                                                       ((INSTANCE) == TIM9))

+

+#define IS_TIM_ENCODER_INTERFACE_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)  || \

+                                                     ((INSTANCE) == TIM3)  || \

+                                                     ((INSTANCE) == TIM4)  || \

+                                                     ((INSTANCE) == TIM5)  || \

+                                                     ((INSTANCE) == TIM9))

+

+#define IS_TIM_REMAP_INSTANCE(INSTANCE) (((INSTANCE) == TIM2)    || \

+                                         ((INSTANCE) == TIM3)    || \

+                                         ((INSTANCE) == TIM9)    || \

+                                         ((INSTANCE) == TIM10)   || \

+                                         ((INSTANCE) == TIM11))

+

+/******************** USART Instances : Synchronous mode **********************/                                           

+#define IS_USART_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || \

+                                     ((INSTANCE) == USART2) || \

+                                     ((INSTANCE) == USART3))

+

+/******************** UART Instances : Asynchronous mode **********************/

+#define IS_UART_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || \

+                                    ((INSTANCE) == USART2) || \

+                                    ((INSTANCE) == USART3) || \

+                                    ((INSTANCE) == UART4)  || \

+                                    ((INSTANCE) == UART5))

+

+/******************** UART Instances : Half-Duplex mode **********************/

+#define IS_UART_HALFDUPLEX_INSTANCE(INSTANCE)   (((INSTANCE) == USART1) || \

+                                                 ((INSTANCE) == USART2) || \

+                                                 ((INSTANCE) == USART3) || \

+                                                 ((INSTANCE) == UART4)  || \

+                                                 ((INSTANCE) == UART5))                                       

+

+/******************** UART Instances : LIN mode **********************/

+#define IS_UART_LIN_INSTANCE(INSTANCE)   (((INSTANCE) == USART1) || \

+                                          ((INSTANCE) == USART2) || \

+                                          ((INSTANCE) == USART3) || \

+                                          ((INSTANCE) == UART4)  || \

+                                          ((INSTANCE) == UART5)) 

+

+/****************** UART Instances : Hardware Flow control ********************/                                    

+#define IS_UART_HWFLOW_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || \

+                                           ((INSTANCE) == USART2) || \

+                                           ((INSTANCE) == USART3))

+

+/********************* UART Instances : Smard card mode ***********************/

+#define IS_SMARTCARD_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || \

+                                         ((INSTANCE) == USART2) || \

+                                         ((INSTANCE) == USART3))

+

+/*********************** UART Instances : IRDA mode ***************************/

+#define IS_IRDA_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || \

+                                    ((INSTANCE) == USART2) || \

+                                    ((INSTANCE) == USART3) || \

+                                    ((INSTANCE) == UART4)  || \

+                                    ((INSTANCE) == UART5))

+

+/***************** UART Instances : Multi-Processor mode **********************/

+#define IS_UART_MULTIPROCESSOR_INSTANCE(INSTANCE)   (((INSTANCE) == USART1) || \

+                                                     ((INSTANCE) == USART2) || \

+                                                     ((INSTANCE) == USART3) || \

+                                                     ((INSTANCE) == UART4)  || \

+                                                     ((INSTANCE) == UART5)) 

+

+/****************************** WWDG Instances ********************************/

+#define IS_WWDG_ALL_INSTANCE(INSTANCE)  ((INSTANCE) == WWDG)

+

+

+/****************************** LCD Instances ********************************/

+#define IS_LCD_ALL_INSTANCE(INSTANCE) ((INSTANCE) == LCD)

+

+/****************************** USB Instances ********************************/

+#define IS_USB_ALL_INSTANCE(INSTANCE) ((INSTANCE) == USB)

+#define IS_PCD_ALL_INSTANCE           IS_USB_ALL_INSTANCE

+

+/**

+  * @}

+  */

+

+/******************************************************************************/

+/*  For a painless codes migration between the STM32L1xx device product       */

+/*  lines, the aliases defined below are put in place to overcome the         */

+/*  differences in the interrupt handlers and IRQn definitions.               */

+/*  No need to update developed interrupt code when moving across             */ 

+/*  product lines within the same STM32L1 Family                              */

+/******************************************************************************/

+

+/* Aliases for __IRQn */

+

+/* Aliases for __IRQHandler */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif /* __cplusplus */

+

+#endif /* __STM32L152xE_H */

+

+

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l1xx.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l1xx.h
new file mode 100644
index 0000000..d2d6c1a
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Device/ST/STM32L1xx/Include/stm32l1xx.h
@@ -0,0 +1,246 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx.h

+  * @author  MCD Application Team

+  * @brief   CMSIS STM32L1xx Device Peripheral Access Layer Header File. 

+  *

+  *          The file is the unique include file that the application programmer

+  *          is using in the C source code, usually in main.c. This file contains:

+  *            - Configuration section that allows to select:

+  *              - The STM32L1xx device used in the target application

+  *              - To use or not the peripheralÂ’s drivers in application code(i.e. 

+  *                code will be based on direct access to peripheralÂ’s registers 

+  *                rather than drivers API), this option is controlled by 

+  *                "#define USE_HAL_DRIVER"

+  *  

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/** @addtogroup CMSIS

+  * @{

+  */

+

+/** @addtogroup stm32l1xx

+  * @{

+  */

+    

+#ifndef __STM32L1XX_H

+#define __STM32L1XX_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif /* __cplusplus */

+  

+/** @addtogroup Library_configuration_section

+  * @{

+  */

+

+/**

+  * @brief STM32 Family

+  */

+#if !defined (STM32L1)

+#define STM32L1

+#endif /* STM32L1 */

+

+

+/* Uncomment the line below according to the target STM32L device used in your 

+   application 

+  */

+

+#if !defined (STM32L100xB) && !defined (STM32L100xBA) && !defined (STM32L100xC) && \

+    !defined (STM32L151xB) && !defined (STM32L151xBA) && !defined (STM32L151xC) && !defined (STM32L151xCA) && !defined (STM32L151xD) && !defined (STM32L151xDX) && !defined (STM32L151xE) && \

+    !defined (STM32L152xB) && !defined (STM32L152xBA) && !defined (STM32L152xC) && !defined (STM32L152xCA) && !defined (STM32L152xD) && !defined (STM32L152xDX) && !defined (STM32L152xE) && \

+    !defined (STM32L162xC) && !defined (STM32L162xCA) && !defined (STM32L162xD) && !defined (STM32L162xDX) && !defined (STM32L162xE)

+  /* #define STM32L100xB  */   /*!< STM32L100C6, STM32L100R and STM32L100RB Devices */

+  /* #define STM32L100xBA */   /*!< STM32L100C6-A, STM32L100R8-A and STM32L100RB-A Devices */

+  /* #define STM32L100xC  */   /*!< STM32L100RC Devices */

+  /* #define STM32L151xB  */   /*!< STM32L151C6, STM32L151R6, STM32L151C8, STM32L151R8, STM32L151V8, STM32L151CB, STM32L151RB and STM32L151VB */

+  /* #define STM32L151xBA */   /*!< STM32L151C6-A, STM32L151R6-A, STM32L151C8-A, STM32L151R8-A, STM32L151V8-A, STM32L151CB-A, STM32L151RB-A and STM32L151VB-A */ 

+  /* #define STM32L151xC  */   /*!< STM32L151CC, STM32L151UC, STM32L151RC and STM32L151VC */

+  /* #define STM32L151xCA */   /*!< STM32L151RC-A, STM32L151VC-A, STM32L151QC and STM32L151ZC */

+  /* #define STM32L151xD  */   /*!< STM32L151QD, STM32L151RD, STM32L151VD & STM32L151ZD */

+  /* #define STM32L151xDX  */  /*!< STM32L151VD-X Devices */

+  /* #define STM32L151xE  */   /*!< STM32L151QE, STM32L151RE, STM32L151VE and STM32L151ZE */

+  /* #define STM32L152xB  */   /*!< STM32L152C6, STM32L152R6, STM32L152C8, STM32L152R8, STM32L152V8, STM32L152CB, STM32L152RB and STM32L152VB */

+  /* #define STM32L152xBA */   /*!< STM32L152C6-A, STM32L152R6-A, STM32L152C8-A, STM32L152R8-A, STM32L152V8-A, STM32L152CB-A, STM32L152RB-A and STM32L152VB-A */

+  /* #define STM32L152xC  */   /*!< STM32L152CC, STM32L152UC, STM32L152RC and STM32L152VC */

+  /* #define STM32L152xCA */   /*!< STM32L152RC-A, STM32L152VC-A, STM32L152QC and STM32L152ZC */

+  /* #define STM32L152xD  */   /*!< STM32L152QD, STM32L152RD, STM32L152VD and STM32L152ZD */

+  /* #define STM32L152xDX  */  /*!< STM32L152VD-X Devices */

+  /* #define STM32L152xE  */   /*!< STM32L152QE, STM32L152RE, STM32L152VE and STM32L152ZE */

+  /* #define STM32L162xC  */   /*!< STM32L162RC and STM32L162VC */

+  /* #define STM32L162xCA */   /*!< STM32L162RC-A, STM32L162VC-A, STM32L162QC and STM32L162ZC */

+  /* #define STM32L162xD  */   /*!< STM32L162QD, STM32L162RD, STM32L162VD and STM32L162ZD */

+  /* #define STM32L162xDX  */  /*!< STM32L162VD-X Devices */

+  /* #define STM32L162xE  */   /*!< STM32L162RE, STM32L162VE and STM32L162ZE */

+#endif

+

+/*  Tip: To avoid modifying this file each time you need to switch between these

+        devices, you can define the device in your toolchain compiler preprocessor.

+  */

+  

+#if !defined  (USE_HAL_DRIVER)

+/**

+ * @brief Comment the line below if you will not use the peripherals drivers.

+   In this case, these drivers will not be included and the application code will 

+   be based on direct access to peripherals registers 

+   */

+  /*#define USE_HAL_DRIVER */

+#endif /* USE_HAL_DRIVER */

+

+/**

+  * @brief CMSIS Device version number

+  */

+#define __STM32L1xx_CMSIS_VERSION_MAIN   (0x02) /*!< [31:24] main version */                                  

+#define __STM32L1xx_CMSIS_VERSION_SUB1   (0x03) /*!< [23:16] sub1 version */

+#define __STM32L1xx_CMSIS_VERSION_SUB2   (0x00) /*!< [15:8]  sub2 version */

+#define __STM32L1xx_CMSIS_VERSION_RC     (0x00) /*!< [7:0]  release candidate */ 

+#define __STM32L1xx_CMSIS_VERSION        ((__STM32L1xx_CMSIS_VERSION_MAIN << 24)\

+                                         |(__STM32L1xx_CMSIS_VERSION_SUB1 << 16)\

+                                         |(__STM32L1xx_CMSIS_VERSION_SUB2 << 8 )\

+                                         |(__STM32L1xx_CMSIS_VERSION_RC))

+

+/**

+  * @}

+  */

+

+/** @addtogroup Device_Included

+  * @{

+  */

+

+#if defined(STM32L100xB)

+  #include "stm32l100xb.h"

+#elif defined(STM32L100xBA)

+  #include "stm32l100xba.h"

+#elif defined(STM32L100xC)

+  #include "stm32l100xc.h"

+#elif defined(STM32L151xB)

+  #include "stm32l151xb.h"

+#elif defined(STM32L151xBA)

+  #include "stm32l151xba.h"

+#elif defined(STM32L151xC)

+  #include "stm32l151xc.h"

+#elif defined(STM32L151xCA)

+  #include "stm32l151xca.h"

+#elif defined(STM32L151xD)

+  #include "stm32l151xd.h"

+#elif defined(STM32L151xDX)

+  #include "stm32l151xdx.h"

+#elif defined(STM32L151xE)

+  #include "stm32l151xe.h"

+#elif defined(STM32L152xB)

+  #include "stm32l152xb.h"

+#elif defined(STM32L152xBA)

+  #include "stm32l152xba.h"

+#elif defined(STM32L152xC)

+  #include "stm32l152xc.h"

+#elif defined(STM32L152xCA)

+  #include "stm32l152xca.h"

+#elif defined(STM32L152xD)

+  #include "stm32l152xd.h"

+#elif defined(STM32L152xDX)

+  #include "stm32l152xdx.h"

+#elif defined(STM32L152xE)

+  #include "stm32l152xe.h"

+#elif defined(STM32L162xC)

+  #include "stm32l162xc.h"

+#elif defined(STM32L162xCA)

+  #include "stm32l162xca.h"

+#elif defined(STM32L162xD)

+  #include "stm32l162xd.h"

+#elif defined(STM32L162xDX)

+  #include "stm32l162xdx.h"

+#elif defined(STM32L162xE)

+  #include "stm32l162xe.h"

+#else

+ #error "Please select first the target STM32L1xx device used in your application (in stm32l1xx.h file)"

+#endif

+

+/**

+  * @}

+  */

+

+/** @addtogroup Exported_types

+  * @{

+  */  

+typedef enum 

+{

+  RESET = 0, 

+  SET = !RESET

+} FlagStatus, ITStatus;

+

+typedef enum 

+{

+  DISABLE = 0, 

+  ENABLE = !DISABLE

+} FunctionalState;

+#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))

+

+typedef enum 

+{

+  SUCCESS = 0,

+  ERROR = !SUCCESS

+} ErrorStatus;

+

+/**

+  * @}

+  */

+

+

+/** @addtogroup Exported_macros

+  * @{

+  */

+#define SET_BIT(REG, BIT)     ((REG) |= (BIT))

+

+#define CLEAR_BIT(REG, BIT)   ((REG) &= ~(BIT))

+

+#define READ_BIT(REG, BIT)    ((REG) & (BIT))

+

+#define CLEAR_REG(REG)        ((REG) = (0x0))

+

+#define WRITE_REG(REG, VAL)   ((REG) = (VAL))

+

+#define READ_REG(REG)         ((REG))

+

+#define MODIFY_REG(REG, CLEARMASK, SETMASK)  WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))

+

+#define POSITION_VAL(VAL)     (__CLZ(__RBIT(VAL))) 

+

+

+/**

+  * @}

+  */

+

+#if defined (USE_HAL_DRIVER)

+ #include "stm32l1xx_hal.h"

+#endif /* USE_HAL_DRIVER */

+

+

+#ifdef __cplusplus

+}

+#endif /* __cplusplus */

+

+#endif /* __STM32L1xx_H */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+  

+

+

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Device/ST/STM32L1xx/Include/system_stm32l1xx.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Device/ST/STM32L1xx/Include/system_stm32l1xx.h
new file mode 100644
index 0000000..5915dd6
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Device/ST/STM32L1xx/Include/system_stm32l1xx.h
@@ -0,0 +1,108 @@
+/**

+  ******************************************************************************

+  * @file    system_stm32l1xx.h

+  * @author  MCD Application Team

+  * @brief   CMSIS Cortex-M3 Device System Source File for STM32L1xx devices.  

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/** @addtogroup CMSIS

+  * @{

+  */

+

+/** @addtogroup stm32l1xx_system

+  * @{

+  */  

+  

+/**

+  * @brief Define to prevent recursive inclusion

+  */

+#ifndef __SYSTEM_STM32L1XX_H

+#define __SYSTEM_STM32L1XX_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif 

+

+/** @addtogroup STM32L1xx_System_Includes

+  * @{

+  */

+

+/**

+  * @}

+  */

+

+

+/** @addtogroup STM32L1xx_System_Exported_types

+  * @{

+  */

+  /* This variable is updated in three ways:

+      1) by calling CMSIS function SystemCoreClockUpdate()

+      2) by calling HAL API function HAL_RCC_GetSysClockFreq()

+      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency 

+         Note: If you use this function to configure the system clock; then there

+               is no need to call the 2 first functions listed above, since SystemCoreClock

+               variable is updated automatically.

+  */

+extern uint32_t SystemCoreClock;          /*!< System Clock Frequency (Core Clock) */

+/*

+*/

+extern const uint8_t AHBPrescTable[16];   /*!< AHB prescalers table values */

+extern const uint8_t APBPrescTable[8];    /*!< APB prescalers table values */

+extern const uint8_t PLLMulTable[9];      /*!< PLL multipiers table values */

+

+/**

+  * @}

+  */

+

+/** @addtogroup STM32L1xx_System_Exported_Constants

+  * @{

+  */

+

+/**

+  * @}

+  */

+

+/** @addtogroup STM32L1xx_System_Exported_Macros

+  * @{

+  */

+

+/**

+  * @}

+  */

+

+/** @addtogroup STM32L1xx_System_Exported_Functions

+  * @{

+  */

+  

+extern void SystemInit(void);

+extern void SystemCoreClockUpdate(void);

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /*__SYSTEM_STM32L1XX_H */

+

+/**

+  * @}

+  */

+  

+/**

+  * @}

+  */  

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_armcc.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_armcc.h
new file mode 100644
index 0000000..7d751fb
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_armcc.h
@@ -0,0 +1,865 @@
+/**************************************************************************//**

+ * @file     cmsis_armcc.h

+ * @brief    CMSIS compiler ARMCC (Arm Compiler 5) header file

+ * @version  V5.0.4

+ * @date     10. January 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#ifndef __CMSIS_ARMCC_H

+#define __CMSIS_ARMCC_H

+

+

+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677)

+  #error "Please use Arm Compiler Toolchain V4.0.677 or later!"

+#endif

+

+/* CMSIS compiler control architecture macros */

+#if ((defined (__TARGET_ARCH_6_M  ) && (__TARGET_ARCH_6_M   == 1)) || \

+     (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M  == 1))   )

+  #define __ARM_ARCH_6M__           1

+#endif

+

+#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M  == 1))

+  #define __ARM_ARCH_7M__           1

+#endif

+

+#if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1))

+  #define __ARM_ARCH_7EM__          1

+#endif

+

+  /* __ARM_ARCH_8M_BASE__  not applicable */

+  /* __ARM_ARCH_8M_MAIN__  not applicable */

+

+

+/* CMSIS compiler specific defines */

+#ifndef   __ASM

+  #define __ASM                                  __asm

+#endif

+#ifndef   __INLINE

+  #define __INLINE                               __inline

+#endif

+#ifndef   __STATIC_INLINE

+  #define __STATIC_INLINE                        static __inline

+#endif

+#ifndef   __STATIC_FORCEINLINE                 

+  #define __STATIC_FORCEINLINE                   static __forceinline

+#endif           

+#ifndef   __NO_RETURN

+  #define __NO_RETURN                            __declspec(noreturn)

+#endif

+#ifndef   __USED

+  #define __USED                                 __attribute__((used))

+#endif

+#ifndef   __WEAK

+  #define __WEAK                                 __attribute__((weak))

+#endif

+#ifndef   __PACKED

+  #define __PACKED                               __attribute__((packed))

+#endif

+#ifndef   __PACKED_STRUCT

+  #define __PACKED_STRUCT                        __packed struct

+#endif

+#ifndef   __PACKED_UNION

+  #define __PACKED_UNION                         __packed union

+#endif

+#ifndef   __UNALIGNED_UINT32        /* deprecated */

+  #define __UNALIGNED_UINT32(x)                  (*((__packed uint32_t *)(x)))

+#endif

+#ifndef   __UNALIGNED_UINT16_WRITE

+  #define __UNALIGNED_UINT16_WRITE(addr, val)    ((*((__packed uint16_t *)(addr))) = (val))

+#endif

+#ifndef   __UNALIGNED_UINT16_READ

+  #define __UNALIGNED_UINT16_READ(addr)          (*((const __packed uint16_t *)(addr)))

+#endif

+#ifndef   __UNALIGNED_UINT32_WRITE

+  #define __UNALIGNED_UINT32_WRITE(addr, val)    ((*((__packed uint32_t *)(addr))) = (val))

+#endif

+#ifndef   __UNALIGNED_UINT32_READ

+  #define __UNALIGNED_UINT32_READ(addr)          (*((const __packed uint32_t *)(addr)))

+#endif

+#ifndef   __ALIGNED

+  #define __ALIGNED(x)                           __attribute__((aligned(x)))

+#endif

+#ifndef   __RESTRICT

+  #define __RESTRICT                             __restrict

+#endif

+

+/* ###########################  Core Function Access  ########################### */

+/** \ingroup  CMSIS_Core_FunctionInterface

+    \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions

+  @{

+ */

+

+/**

+  \brief   Enable IRQ Interrupts

+  \details Enables IRQ interrupts by clearing the I-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+/* intrinsic void __enable_irq();     */

+

+

+/**

+  \brief   Disable IRQ Interrupts

+  \details Disables IRQ interrupts by setting the I-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+/* intrinsic void __disable_irq();    */

+

+/**

+  \brief   Get Control Register

+  \details Returns the content of the Control Register.

+  \return               Control Register value

+ */

+__STATIC_INLINE uint32_t __get_CONTROL(void)

+{

+  register uint32_t __regControl         __ASM("control");

+  return(__regControl);

+}

+

+

+/**

+  \brief   Set Control Register

+  \details Writes the given value to the Control Register.

+  \param [in]    control  Control Register value to set

+ */

+__STATIC_INLINE void __set_CONTROL(uint32_t control)

+{

+  register uint32_t __regControl         __ASM("control");

+  __regControl = control;

+}

+

+

+/**

+  \brief   Get IPSR Register

+  \details Returns the content of the IPSR Register.

+  \return               IPSR Register value

+ */

+__STATIC_INLINE uint32_t __get_IPSR(void)

+{

+  register uint32_t __regIPSR          __ASM("ipsr");

+  return(__regIPSR);

+}

+

+

+/**

+  \brief   Get APSR Register

+  \details Returns the content of the APSR Register.

+  \return               APSR Register value

+ */

+__STATIC_INLINE uint32_t __get_APSR(void)

+{

+  register uint32_t __regAPSR          __ASM("apsr");

+  return(__regAPSR);

+}

+

+

+/**

+  \brief   Get xPSR Register

+  \details Returns the content of the xPSR Register.

+  \return               xPSR Register value

+ */

+__STATIC_INLINE uint32_t __get_xPSR(void)

+{

+  register uint32_t __regXPSR          __ASM("xpsr");

+  return(__regXPSR);

+}

+

+

+/**

+  \brief   Get Process Stack Pointer

+  \details Returns the current value of the Process Stack Pointer (PSP).

+  \return               PSP Register value

+ */

+__STATIC_INLINE uint32_t __get_PSP(void)

+{

+  register uint32_t __regProcessStackPointer  __ASM("psp");

+  return(__regProcessStackPointer);

+}

+

+

+/**

+  \brief   Set Process Stack Pointer

+  \details Assigns the given value to the Process Stack Pointer (PSP).

+  \param [in]    topOfProcStack  Process Stack Pointer value to set

+ */

+__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)

+{

+  register uint32_t __regProcessStackPointer  __ASM("psp");

+  __regProcessStackPointer = topOfProcStack;

+}

+

+

+/**

+  \brief   Get Main Stack Pointer

+  \details Returns the current value of the Main Stack Pointer (MSP).

+  \return               MSP Register value

+ */

+__STATIC_INLINE uint32_t __get_MSP(void)

+{

+  register uint32_t __regMainStackPointer     __ASM("msp");

+  return(__regMainStackPointer);

+}

+

+

+/**

+  \brief   Set Main Stack Pointer

+  \details Assigns the given value to the Main Stack Pointer (MSP).

+  \param [in]    topOfMainStack  Main Stack Pointer value to set

+ */

+__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)

+{

+  register uint32_t __regMainStackPointer     __ASM("msp");

+  __regMainStackPointer = topOfMainStack;

+}

+

+

+/**

+  \brief   Get Priority Mask

+  \details Returns the current state of the priority mask bit from the Priority Mask Register.

+  \return               Priority Mask value

+ */

+__STATIC_INLINE uint32_t __get_PRIMASK(void)

+{

+  register uint32_t __regPriMask         __ASM("primask");

+  return(__regPriMask);

+}

+

+

+/**

+  \brief   Set Priority Mask

+  \details Assigns the given value to the Priority Mask Register.

+  \param [in]    priMask  Priority Mask

+ */

+__STATIC_INLINE void __set_PRIMASK(uint32_t priMask)

+{

+  register uint32_t __regPriMask         __ASM("primask");

+  __regPriMask = (priMask);

+}

+

+

+#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \

+     (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )

+

+/**

+  \brief   Enable FIQ

+  \details Enables FIQ interrupts by clearing the F-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+#define __enable_fault_irq                __enable_fiq

+

+

+/**

+  \brief   Disable FIQ

+  \details Disables FIQ interrupts by setting the F-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+#define __disable_fault_irq               __disable_fiq

+

+

+/**

+  \brief   Get Base Priority

+  \details Returns the current value of the Base Priority register.

+  \return               Base Priority register value

+ */

+__STATIC_INLINE uint32_t  __get_BASEPRI(void)

+{

+  register uint32_t __regBasePri         __ASM("basepri");

+  return(__regBasePri);

+}

+

+

+/**

+  \brief   Set Base Priority

+  \details Assigns the given value to the Base Priority register.

+  \param [in]    basePri  Base Priority value to set

+ */

+__STATIC_INLINE void __set_BASEPRI(uint32_t basePri)

+{

+  register uint32_t __regBasePri         __ASM("basepri");

+  __regBasePri = (basePri & 0xFFU);

+}

+

+

+/**

+  \brief   Set Base Priority with condition

+  \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,

+           or the new value increases the BASEPRI priority level.

+  \param [in]    basePri  Base Priority value to set

+ */

+__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri)

+{

+  register uint32_t __regBasePriMax      __ASM("basepri_max");

+  __regBasePriMax = (basePri & 0xFFU);

+}

+

+

+/**

+  \brief   Get Fault Mask

+  \details Returns the current value of the Fault Mask register.

+  \return               Fault Mask register value

+ */

+__STATIC_INLINE uint32_t __get_FAULTMASK(void)

+{

+  register uint32_t __regFaultMask       __ASM("faultmask");

+  return(__regFaultMask);

+}

+

+

+/**

+  \brief   Set Fault Mask

+  \details Assigns the given value to the Fault Mask register.

+  \param [in]    faultMask  Fault Mask value to set

+ */

+__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)

+{

+  register uint32_t __regFaultMask       __ASM("faultmask");

+  __regFaultMask = (faultMask & (uint32_t)1U);

+}

+

+#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \

+           (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */

+

+

+/**

+  \brief   Get FPSCR

+  \details Returns the current value of the Floating Point Status/Control register.

+  \return               Floating Point Status/Control register value

+ */

+__STATIC_INLINE uint32_t __get_FPSCR(void)

+{

+#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \

+     (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )

+  register uint32_t __regfpscr         __ASM("fpscr");

+  return(__regfpscr);

+#else

+   return(0U);

+#endif

+}

+

+

+/**

+  \brief   Set FPSCR

+  \details Assigns the given value to the Floating Point Status/Control register.

+  \param [in]    fpscr  Floating Point Status/Control value to set

+ */

+__STATIC_INLINE void __set_FPSCR(uint32_t fpscr)

+{

+#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \

+     (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )

+  register uint32_t __regfpscr         __ASM("fpscr");

+  __regfpscr = (fpscr);

+#else

+  (void)fpscr;

+#endif

+}

+

+

+/*@} end of CMSIS_Core_RegAccFunctions */

+

+

+/* ##########################  Core Instruction Access  ######################### */

+/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface

+  Access to dedicated instructions

+  @{

+*/

+

+/**

+  \brief   No Operation

+  \details No Operation does nothing. This instruction can be used for code alignment purposes.

+ */

+#define __NOP                             __nop

+

+

+/**

+  \brief   Wait For Interrupt

+  \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.

+ */

+#define __WFI                             __wfi

+

+

+/**

+  \brief   Wait For Event

+  \details Wait For Event is a hint instruction that permits the processor to enter

+           a low-power state until one of a number of events occurs.

+ */

+#define __WFE                             __wfe

+

+

+/**

+  \brief   Send Event

+  \details Send Event is a hint instruction. It causes an event to be signaled to the CPU.

+ */

+#define __SEV                             __sev

+

+

+/**

+  \brief   Instruction Synchronization Barrier

+  \details Instruction Synchronization Barrier flushes the pipeline in the processor,

+           so that all instructions following the ISB are fetched from cache or memory,

+           after the instruction has been completed.

+ */

+#define __ISB() do {\

+                   __schedule_barrier();\

+                   __isb(0xF);\

+                   __schedule_barrier();\

+                } while (0U)

+

+/**

+  \brief   Data Synchronization Barrier

+  \details Acts as a special kind of Data Memory Barrier.

+           It completes when all explicit memory accesses before this instruction complete.

+ */

+#define __DSB() do {\

+                   __schedule_barrier();\

+                   __dsb(0xF);\

+                   __schedule_barrier();\

+                } while (0U)

+

+/**

+  \brief   Data Memory Barrier

+  \details Ensures the apparent order of the explicit memory operations before

+           and after the instruction, without ensuring their completion.

+ */

+#define __DMB() do {\

+                   __schedule_barrier();\

+                   __dmb(0xF);\

+                   __schedule_barrier();\

+                } while (0U)

+

+                  

+/**

+  \brief   Reverse byte order (32 bit)

+  \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+#define __REV                             __rev

+

+

+/**

+  \brief   Reverse byte order (16 bit)

+  \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+#ifndef __NO_EMBEDDED_ASM

+__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value)

+{

+  rev16 r0, r0

+  bx lr

+}

+#endif

+

+

+/**

+  \brief   Reverse byte order (16 bit)

+  \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+#ifndef __NO_EMBEDDED_ASM

+__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_t value)

+{

+  revsh r0, r0

+  bx lr

+}

+#endif

+

+

+/**

+  \brief   Rotate Right in unsigned value (32 bit)

+  \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.

+  \param [in]    op1  Value to rotate

+  \param [in]    op2  Number of Bits to rotate

+  \return               Rotated value

+ */

+#define __ROR                             __ror

+

+

+/**

+  \brief   Breakpoint

+  \details Causes the processor to enter Debug state.

+           Debug tools can use this to investigate system state when the instruction at a particular address is reached.

+  \param [in]    value  is ignored by the processor.

+                 If required, a debugger can use it to store additional information about the breakpoint.

+ */

+#define __BKPT(value)                       __breakpoint(value)

+

+

+/**

+  \brief   Reverse bit order of value

+  \details Reverses the bit order of the given value.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \

+     (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )

+  #define __RBIT                          __rbit

+#else

+__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value)

+{

+  uint32_t result;

+  uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */

+

+  result = value;                      /* r will be reversed bits of v; first get LSB of v */

+  for (value >>= 1U; value != 0U; value >>= 1U)

+  {

+    result <<= 1U;

+    result |= value & 1U;

+    s--;

+  }

+  result <<= s;                        /* shift when v's highest bits are zero */

+  return result;

+}

+#endif

+

+

+/**

+  \brief   Count leading zeros

+  \details Counts the number of leading zeros of a data value.

+  \param [in]  value  Value to count the leading zeros

+  \return             number of leading zeros in value

+ */

+#define __CLZ                             __clz

+

+

+#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \

+     (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )

+

+/**

+  \brief   LDR Exclusive (8 bit)

+  \details Executes a exclusive LDR instruction for 8 bit value.

+  \param [in]    ptr  Pointer to data

+  \return             value of type uint8_t at (*ptr)

+ */

+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)

+  #define __LDREXB(ptr)                                                        ((uint8_t ) __ldrex(ptr))

+#else

+  #define __LDREXB(ptr)          _Pragma("push") _Pragma("diag_suppress 3731") ((uint8_t ) __ldrex(ptr))  _Pragma("pop")

+#endif

+

+

+/**

+  \brief   LDR Exclusive (16 bit)

+  \details Executes a exclusive LDR instruction for 16 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint16_t at (*ptr)

+ */

+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)

+  #define __LDREXH(ptr)                                                        ((uint16_t) __ldrex(ptr))

+#else

+  #define __LDREXH(ptr)          _Pragma("push") _Pragma("diag_suppress 3731") ((uint16_t) __ldrex(ptr))  _Pragma("pop")

+#endif

+

+

+/**

+  \brief   LDR Exclusive (32 bit)

+  \details Executes a exclusive LDR instruction for 32 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint32_t at (*ptr)

+ */

+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)

+  #define __LDREXW(ptr)                                                        ((uint32_t ) __ldrex(ptr))

+#else

+  #define __LDREXW(ptr)          _Pragma("push") _Pragma("diag_suppress 3731") ((uint32_t ) __ldrex(ptr))  _Pragma("pop")

+#endif

+

+

+/**

+  \brief   STR Exclusive (8 bit)

+  \details Executes a exclusive STR instruction for 8 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)

+  #define __STREXB(value, ptr)                                                 __strex(value, ptr)

+#else

+  #define __STREXB(value, ptr)   _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr)        _Pragma("pop")

+#endif

+

+

+/**

+  \brief   STR Exclusive (16 bit)

+  \details Executes a exclusive STR instruction for 16 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)

+  #define __STREXH(value, ptr)                                                 __strex(value, ptr)

+#else

+  #define __STREXH(value, ptr)   _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr)        _Pragma("pop")

+#endif

+

+

+/**

+  \brief   STR Exclusive (32 bit)

+  \details Executes a exclusive STR instruction for 32 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)

+  #define __STREXW(value, ptr)                                                 __strex(value, ptr)

+#else

+  #define __STREXW(value, ptr)   _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr)        _Pragma("pop")

+#endif

+

+

+/**

+  \brief   Remove the exclusive lock

+  \details Removes the exclusive lock which is created by LDREX.

+ */

+#define __CLREX                           __clrex

+

+

+/**

+  \brief   Signed Saturate

+  \details Saturates a signed value.

+  \param [in]  value  Value to be saturated

+  \param [in]    sat  Bit position to saturate to (1..32)

+  \return             Saturated value

+ */

+#define __SSAT                            __ssat

+

+

+/**

+  \brief   Unsigned Saturate

+  \details Saturates an unsigned value.

+  \param [in]  value  Value to be saturated

+  \param [in]    sat  Bit position to saturate to (0..31)

+  \return             Saturated value

+ */

+#define __USAT                            __usat

+

+

+/**

+  \brief   Rotate Right with Extend (32 bit)

+  \details Moves each bit of a bitstring right by one bit.

+           The carry input is shifted in at the left end of the bitstring.

+  \param [in]    value  Value to rotate

+  \return               Rotated value

+ */

+#ifndef __NO_EMBEDDED_ASM

+__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value)

+{

+  rrx r0, r0

+  bx lr

+}

+#endif

+

+

+/**

+  \brief   LDRT Unprivileged (8 bit)

+  \details Executes a Unprivileged LDRT instruction for 8 bit value.

+  \param [in]    ptr  Pointer to data

+  \return             value of type uint8_t at (*ptr)

+ */

+#define __LDRBT(ptr)                      ((uint8_t )  __ldrt(ptr))

+

+

+/**

+  \brief   LDRT Unprivileged (16 bit)

+  \details Executes a Unprivileged LDRT instruction for 16 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint16_t at (*ptr)

+ */

+#define __LDRHT(ptr)                      ((uint16_t)  __ldrt(ptr))

+

+

+/**

+  \brief   LDRT Unprivileged (32 bit)

+  \details Executes a Unprivileged LDRT instruction for 32 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint32_t at (*ptr)

+ */

+#define __LDRT(ptr)                       ((uint32_t ) __ldrt(ptr))

+

+

+/**

+  \brief   STRT Unprivileged (8 bit)

+  \details Executes a Unprivileged STRT instruction for 8 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+#define __STRBT(value, ptr)               __strt(value, ptr)

+

+

+/**

+  \brief   STRT Unprivileged (16 bit)

+  \details Executes a Unprivileged STRT instruction for 16 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+#define __STRHT(value, ptr)               __strt(value, ptr)

+

+

+/**

+  \brief   STRT Unprivileged (32 bit)

+  \details Executes a Unprivileged STRT instruction for 32 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+#define __STRT(value, ptr)                __strt(value, ptr)

+

+#else  /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \

+           (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */

+

+/**

+  \brief   Signed Saturate

+  \details Saturates a signed value.

+  \param [in]  value  Value to be saturated

+  \param [in]    sat  Bit position to saturate to (1..32)

+  \return             Saturated value

+ */

+__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat)

+{

+  if ((sat >= 1U) && (sat <= 32U))

+  {

+    const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);

+    const int32_t min = -1 - max ;

+    if (val > max)

+    {

+      return max;

+    }

+    else if (val < min)

+    {

+      return min;

+    }

+  }

+  return val;

+}

+

+/**

+  \brief   Unsigned Saturate

+  \details Saturates an unsigned value.

+  \param [in]  value  Value to be saturated

+  \param [in]    sat  Bit position to saturate to (0..31)

+  \return             Saturated value

+ */

+__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat)

+{

+  if (sat <= 31U)

+  {

+    const uint32_t max = ((1U << sat) - 1U);

+    if (val > (int32_t)max)

+    {

+      return max;

+    }

+    else if (val < 0)

+    {

+      return 0U;

+    }

+  }

+  return (uint32_t)val;

+}

+

+#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \

+           (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */

+

+/*@}*/ /* end of group CMSIS_Core_InstructionInterface */

+

+

+/* ###################  Compiler specific Intrinsics  ########################### */

+/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics

+  Access to dedicated SIMD instructions

+  @{

+*/

+

+#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )

+

+#define __SADD8                           __sadd8

+#define __QADD8                           __qadd8

+#define __SHADD8                          __shadd8

+#define __UADD8                           __uadd8

+#define __UQADD8                          __uqadd8

+#define __UHADD8                          __uhadd8

+#define __SSUB8                           __ssub8

+#define __QSUB8                           __qsub8

+#define __SHSUB8                          __shsub8

+#define __USUB8                           __usub8

+#define __UQSUB8                          __uqsub8

+#define __UHSUB8                          __uhsub8

+#define __SADD16                          __sadd16

+#define __QADD16                          __qadd16

+#define __SHADD16                         __shadd16

+#define __UADD16                          __uadd16

+#define __UQADD16                         __uqadd16

+#define __UHADD16                         __uhadd16

+#define __SSUB16                          __ssub16

+#define __QSUB16                          __qsub16

+#define __SHSUB16                         __shsub16

+#define __USUB16                          __usub16

+#define __UQSUB16                         __uqsub16

+#define __UHSUB16                         __uhsub16

+#define __SASX                            __sasx

+#define __QASX                            __qasx

+#define __SHASX                           __shasx

+#define __UASX                            __uasx

+#define __UQASX                           __uqasx

+#define __UHASX                           __uhasx

+#define __SSAX                            __ssax

+#define __QSAX                            __qsax

+#define __SHSAX                           __shsax

+#define __USAX                            __usax

+#define __UQSAX                           __uqsax

+#define __UHSAX                           __uhsax

+#define __USAD8                           __usad8

+#define __USADA8                          __usada8

+#define __SSAT16                          __ssat16

+#define __USAT16                          __usat16

+#define __UXTB16                          __uxtb16

+#define __UXTAB16                         __uxtab16

+#define __SXTB16                          __sxtb16

+#define __SXTAB16                         __sxtab16

+#define __SMUAD                           __smuad

+#define __SMUADX                          __smuadx

+#define __SMLAD                           __smlad

+#define __SMLADX                          __smladx

+#define __SMLALD                          __smlald

+#define __SMLALDX                         __smlaldx

+#define __SMUSD                           __smusd

+#define __SMUSDX                          __smusdx

+#define __SMLSD                           __smlsd

+#define __SMLSDX                          __smlsdx

+#define __SMLSLD                          __smlsld

+#define __SMLSLDX                         __smlsldx

+#define __SEL                             __sel

+#define __QADD                            __qadd

+#define __QSUB                            __qsub

+

+#define __PKHBT(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0x0000FFFFUL) |  \

+                                           ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL)  )

+

+#define __PKHTB(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0xFFFF0000UL) |  \

+                                           ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL)  )

+

+#define __SMMLA(ARG1,ARG2,ARG3)          ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \

+                                                      ((int64_t)(ARG3) << 32U)     ) >> 32U))

+

+#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */

+/*@} end of group CMSIS_SIMD_intrinsics */

+

+

+#endif /* __CMSIS_ARMCC_H */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_armclang.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_armclang.h
new file mode 100644
index 0000000..d8031b0
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_armclang.h
@@ -0,0 +1,1869 @@
+/**************************************************************************//**

+ * @file     cmsis_armclang.h

+ * @brief    CMSIS compiler armclang (Arm Compiler 6) header file

+ * @version  V5.0.4

+ * @date     10. January 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */

+

+#ifndef __CMSIS_ARMCLANG_H

+#define __CMSIS_ARMCLANG_H

+

+#pragma clang system_header   /* treat file as system include file */

+

+#ifndef __ARM_COMPAT_H

+#include <arm_compat.h>    /* Compatibility header for Arm Compiler 5 intrinsics */

+#endif

+

+/* CMSIS compiler specific defines */

+#ifndef   __ASM

+  #define __ASM                                  __asm

+#endif

+#ifndef   __INLINE

+  #define __INLINE                               __inline

+#endif

+#ifndef   __STATIC_INLINE

+  #define __STATIC_INLINE                        static __inline

+#endif

+#ifndef   __STATIC_FORCEINLINE                 

+  #define __STATIC_FORCEINLINE                   __attribute__((always_inline)) static __inline

+#endif                                           

+#ifndef   __NO_RETURN

+  #define __NO_RETURN                            __attribute__((__noreturn__))

+#endif

+#ifndef   __USED

+  #define __USED                                 __attribute__((used))

+#endif

+#ifndef   __WEAK

+  #define __WEAK                                 __attribute__((weak))

+#endif

+#ifndef   __PACKED

+  #define __PACKED                               __attribute__((packed, aligned(1)))

+#endif

+#ifndef   __PACKED_STRUCT

+  #define __PACKED_STRUCT                        struct __attribute__((packed, aligned(1)))

+#endif

+#ifndef   __PACKED_UNION

+  #define __PACKED_UNION                         union __attribute__((packed, aligned(1)))

+#endif

+#ifndef   __UNALIGNED_UINT32        /* deprecated */

+  #pragma clang diagnostic push

+  #pragma clang diagnostic ignored "-Wpacked"

+/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */

+  struct __attribute__((packed)) T_UINT32 { uint32_t v; };

+  #pragma clang diagnostic pop

+  #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)

+#endif

+#ifndef   __UNALIGNED_UINT16_WRITE

+  #pragma clang diagnostic push

+  #pragma clang diagnostic ignored "-Wpacked"

+/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */

+  __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };

+  #pragma clang diagnostic pop

+  #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))

+#endif

+#ifndef   __UNALIGNED_UINT16_READ

+  #pragma clang diagnostic push

+  #pragma clang diagnostic ignored "-Wpacked"

+/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */

+  __PACKED_STRUCT T_UINT16_READ { uint16_t v; };

+  #pragma clang diagnostic pop

+  #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)

+#endif

+#ifndef   __UNALIGNED_UINT32_WRITE

+  #pragma clang diagnostic push

+  #pragma clang diagnostic ignored "-Wpacked"

+/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */

+  __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };

+  #pragma clang diagnostic pop

+  #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))

+#endif

+#ifndef   __UNALIGNED_UINT32_READ

+  #pragma clang diagnostic push

+  #pragma clang diagnostic ignored "-Wpacked"

+/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */

+  __PACKED_STRUCT T_UINT32_READ { uint32_t v; };

+  #pragma clang diagnostic pop

+  #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)

+#endif

+#ifndef   __ALIGNED

+  #define __ALIGNED(x)                           __attribute__((aligned(x)))

+#endif

+#ifndef   __RESTRICT

+  #define __RESTRICT                             __restrict

+#endif

+

+

+/* ###########################  Core Function Access  ########################### */

+/** \ingroup  CMSIS_Core_FunctionInterface

+    \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions

+  @{

+ */

+

+/**

+  \brief   Enable IRQ Interrupts

+  \details Enables IRQ interrupts by clearing the I-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+/* intrinsic void __enable_irq();  see arm_compat.h */

+

+

+/**

+  \brief   Disable IRQ Interrupts

+  \details Disables IRQ interrupts by setting the I-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+/* intrinsic void __disable_irq();  see arm_compat.h */

+

+

+/**

+  \brief   Get Control Register

+  \details Returns the content of the Control Register.

+  \return               Control Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_CONTROL(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, control" : "=r" (result) );

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Control Register (non-secure)

+  \details Returns the content of the non-secure Control Register when in secure mode.

+  \return               non-secure Control Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, control_ns" : "=r" (result) );

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Control Register

+  \details Writes the given value to the Control Register.

+  \param [in]    control  Control Register value to set

+ */

+__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control)

+{

+  __ASM volatile ("MSR control, %0" : : "r" (control) : "memory");

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Control Register (non-secure)

+  \details Writes the given value to the non-secure Control Register when in secure state.

+  \param [in]    control  Control Register value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control)

+{

+  __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory");

+}

+#endif

+

+

+/**

+  \brief   Get IPSR Register

+  \details Returns the content of the IPSR Register.

+  \return               IPSR Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_IPSR(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, ipsr" : "=r" (result) );

+  return(result);

+}

+

+

+/**

+  \brief   Get APSR Register

+  \details Returns the content of the APSR Register.

+  \return               APSR Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_APSR(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, apsr" : "=r" (result) );

+  return(result);

+}

+

+

+/**

+  \brief   Get xPSR Register

+  \details Returns the content of the xPSR Register.

+  \return               xPSR Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_xPSR(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, xpsr" : "=r" (result) );

+  return(result);

+}

+

+

+/**

+  \brief   Get Process Stack Pointer

+  \details Returns the current value of the Process Stack Pointer (PSP).

+  \return               PSP Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_PSP(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, psp"  : "=r" (result) );

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Process Stack Pointer (non-secure)

+  \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state.

+  \return               PSP Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, psp_ns"  : "=r" (result) );

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Process Stack Pointer

+  \details Assigns the given value to the Process Stack Pointer (PSP).

+  \param [in]    topOfProcStack  Process Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack)

+{

+  __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : );

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Process Stack Pointer (non-secure)

+  \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state.

+  \param [in]    topOfProcStack  Process Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack)

+{

+  __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : );

+}

+#endif

+

+

+/**

+  \brief   Get Main Stack Pointer

+  \details Returns the current value of the Main Stack Pointer (MSP).

+  \return               MSP Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_MSP(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, msp" : "=r" (result) );

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Main Stack Pointer (non-secure)

+  \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state.

+  \return               MSP Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, msp_ns" : "=r" (result) );

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Main Stack Pointer

+  \details Assigns the given value to the Main Stack Pointer (MSP).

+  \param [in]    topOfMainStack  Main Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack)

+{

+  __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : );

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Main Stack Pointer (non-secure)

+  \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state.

+  \param [in]    topOfMainStack  Main Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack)

+{

+  __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : );

+}

+#endif

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Stack Pointer (non-secure)

+  \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state.

+  \return               SP Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, sp_ns" : "=r" (result) );

+  return(result);

+}

+

+

+/**

+  \brief   Set Stack Pointer (non-secure)

+  \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state.

+  \param [in]    topOfStack  Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack)

+{

+  __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : );

+}

+#endif

+

+

+/**

+  \brief   Get Priority Mask

+  \details Returns the current state of the priority mask bit from the Priority Mask Register.

+  \return               Priority Mask value

+ */

+__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, primask" : "=r" (result) );

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Priority Mask (non-secure)

+  \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state.

+  \return               Priority Mask value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, primask_ns" : "=r" (result) );

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Priority Mask

+  \details Assigns the given value to the Priority Mask Register.

+  \param [in]    priMask  Priority Mask

+ */

+__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask)

+{

+  __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Priority Mask (non-secure)

+  \details Assigns the given value to the non-secure Priority Mask Register when in secure state.

+  \param [in]    priMask  Priority Mask

+ */

+__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask)

+{

+  __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory");

+}

+#endif

+

+

+#if ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+     (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+     (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    )

+/**

+  \brief   Enable FIQ

+  \details Enables FIQ interrupts by clearing the F-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+#define __enable_fault_irq                __enable_fiq   /* see arm_compat.h */

+

+

+/**

+  \brief   Disable FIQ

+  \details Disables FIQ interrupts by setting the F-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+#define __disable_fault_irq               __disable_fiq   /* see arm_compat.h */

+

+

+/**

+  \brief   Get Base Priority

+  \details Returns the current value of the Base Priority register.

+  \return               Base Priority register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, basepri" : "=r" (result) );

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Base Priority (non-secure)

+  \details Returns the current value of the non-secure Base Priority register when in secure state.

+  \return               Base Priority register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) );

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Base Priority

+  \details Assigns the given value to the Base Priority register.

+  \param [in]    basePri  Base Priority value to set

+ */

+__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri)

+{

+  __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory");

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Base Priority (non-secure)

+  \details Assigns the given value to the non-secure Base Priority register when in secure state.

+  \param [in]    basePri  Base Priority value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri)

+{

+  __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory");

+}

+#endif

+

+

+/**

+  \brief   Set Base Priority with condition

+  \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,

+           or the new value increases the BASEPRI priority level.

+  \param [in]    basePri  Base Priority value to set

+ */

+__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri)

+{

+  __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory");

+}

+

+

+/**

+  \brief   Get Fault Mask

+  \details Returns the current value of the Fault Mask register.

+  \return               Fault Mask register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, faultmask" : "=r" (result) );

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Fault Mask (non-secure)

+  \details Returns the current value of the non-secure Fault Mask register when in secure state.

+  \return               Fault Mask register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) );

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Fault Mask

+  \details Assigns the given value to the Fault Mask register.

+  \param [in]    faultMask  Fault Mask value to set

+ */

+__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask)

+{

+  __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory");

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Fault Mask (non-secure)

+  \details Assigns the given value to the non-secure Fault Mask register when in secure state.

+  \param [in]    faultMask  Fault Mask value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask)

+{

+  __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory");

+}

+#endif

+

+#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */

+

+

+#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+     (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    )

+

+/**

+  \brief   Get Process Stack Pointer Limit

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence zero is returned always in non-secure

+  mode.

+  

+  \details Returns the current value of the Process Stack Pointer Limit (PSPLIM).

+  \return               PSPLIM Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+    (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+    // without main extensions, the non-secure PSPLIM is RAZ/WI

+  return 0U;

+#else

+  uint32_t result;

+  __ASM volatile ("MRS %0, psplim"  : "=r" (result) );

+  return result;

+#endif

+}

+

+#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Process Stack Pointer Limit (non-secure)

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence zero is returned always in non-secure

+  mode.

+

+  \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.

+  \return               PSPLIM Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))

+  // without main extensions, the non-secure PSPLIM is RAZ/WI

+  return 0U;

+#else

+  uint32_t result;

+  __ASM volatile ("MRS %0, psplim_ns"  : "=r" (result) );

+  return result;

+#endif

+}

+#endif

+

+

+/**

+  \brief   Set Process Stack Pointer Limit

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence the write is silently ignored in non-secure

+  mode.

+  

+  \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM).

+  \param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set

+ */

+__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+    (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+  // without main extensions, the non-secure PSPLIM is RAZ/WI

+  (void)ProcStackPtrLimit;

+#else

+  __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit));

+#endif

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE  ) && (__ARM_FEATURE_CMSE   == 3))

+/**

+  \brief   Set Process Stack Pointer (non-secure)

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence the write is silently ignored in non-secure

+  mode.

+

+  \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.

+  \param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))

+  // without main extensions, the non-secure PSPLIM is RAZ/WI

+  (void)ProcStackPtrLimit;

+#else

+  __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit));

+#endif

+}

+#endif

+

+

+/**

+  \brief   Get Main Stack Pointer Limit

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence zero is returned always.

+

+  \details Returns the current value of the Main Stack Pointer Limit (MSPLIM).

+  \return               MSPLIM Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+    (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+  // without main extensions, the non-secure MSPLIM is RAZ/WI

+  return 0U;

+#else

+  uint32_t result;

+  __ASM volatile ("MRS %0, msplim" : "=r" (result) );

+  return result;

+#endif

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE  ) && (__ARM_FEATURE_CMSE   == 3))

+/**

+  \brief   Get Main Stack Pointer Limit (non-secure)

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence zero is returned always.

+

+  \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state.

+  \return               MSPLIM Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))

+  // without main extensions, the non-secure MSPLIM is RAZ/WI

+  return 0U;

+#else

+  uint32_t result;

+  __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) );

+  return result;

+#endif

+}

+#endif

+

+

+/**

+  \brief   Set Main Stack Pointer Limit

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence the write is silently ignored.

+

+  \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM).

+  \param [in]    MainStackPtrLimit  Main Stack Pointer Limit value to set

+ */

+__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+    (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+  // without main extensions, the non-secure MSPLIM is RAZ/WI

+  (void)MainStackPtrLimit;

+#else

+  __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit));

+#endif

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE  ) && (__ARM_FEATURE_CMSE   == 3))

+/**

+  \brief   Set Main Stack Pointer Limit (non-secure)

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence the write is silently ignored.

+

+  \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state.

+  \param [in]    MainStackPtrLimit  Main Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))

+  // without main extensions, the non-secure MSPLIM is RAZ/WI

+  (void)MainStackPtrLimit;

+#else

+  __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit));

+#endif

+}

+#endif

+

+#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */

+

+/**

+  \brief   Get FPSCR

+  \details Returns the current value of the Floating Point Status/Control register.

+  \return               Floating Point Status/Control register value

+ */

+#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \

+     (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )

+#define __get_FPSCR      (uint32_t)__builtin_arm_get_fpscr

+#else

+#define __get_FPSCR()      ((uint32_t)0U)

+#endif

+

+/**

+  \brief   Set FPSCR

+  \details Assigns the given value to the Floating Point Status/Control register.

+  \param [in]    fpscr  Floating Point Status/Control value to set

+ */

+#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \

+     (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )

+#define __set_FPSCR      __builtin_arm_set_fpscr

+#else

+#define __set_FPSCR(x)      ((void)(x))

+#endif

+

+

+/*@} end of CMSIS_Core_RegAccFunctions */

+

+

+/* ##########################  Core Instruction Access  ######################### */

+/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface

+  Access to dedicated instructions

+  @{

+*/

+

+/* Define macros for porting to both thumb1 and thumb2.

+ * For thumb1, use low register (r0-r7), specified by constraint "l"

+ * Otherwise, use general registers, specified by constraint "r" */

+#if defined (__thumb__) && !defined (__thumb2__)

+#define __CMSIS_GCC_OUT_REG(r) "=l" (r)

+#define __CMSIS_GCC_USE_REG(r) "l" (r)

+#else

+#define __CMSIS_GCC_OUT_REG(r) "=r" (r)

+#define __CMSIS_GCC_USE_REG(r) "r" (r)

+#endif

+

+/**

+  \brief   No Operation

+  \details No Operation does nothing. This instruction can be used for code alignment purposes.

+ */

+#define __NOP          __builtin_arm_nop

+

+/**

+  \brief   Wait For Interrupt

+  \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.

+ */

+#define __WFI          __builtin_arm_wfi

+

+

+/**

+  \brief   Wait For Event

+  \details Wait For Event is a hint instruction that permits the processor to enter

+           a low-power state until one of a number of events occurs.

+ */

+#define __WFE          __builtin_arm_wfe

+

+

+/**

+  \brief   Send Event

+  \details Send Event is a hint instruction. It causes an event to be signaled to the CPU.

+ */

+#define __SEV          __builtin_arm_sev

+

+

+/**

+  \brief   Instruction Synchronization Barrier

+  \details Instruction Synchronization Barrier flushes the pipeline in the processor,

+           so that all instructions following the ISB are fetched from cache or memory,

+           after the instruction has been completed.

+ */

+#define __ISB()        __builtin_arm_isb(0xF);

+

+/**

+  \brief   Data Synchronization Barrier

+  \details Acts as a special kind of Data Memory Barrier.

+           It completes when all explicit memory accesses before this instruction complete.

+ */

+#define __DSB()        __builtin_arm_dsb(0xF);

+

+

+/**

+  \brief   Data Memory Barrier

+  \details Ensures the apparent order of the explicit memory operations before

+           and after the instruction, without ensuring their completion.

+ */

+#define __DMB()        __builtin_arm_dmb(0xF);

+

+

+/**

+  \brief   Reverse byte order (32 bit)

+  \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+#define __REV(value)   __builtin_bswap32(value)

+

+

+/**

+  \brief   Reverse byte order (16 bit)

+  \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+#define __REV16(value) __ROR(__REV(value), 16)

+

+

+/**

+  \brief   Reverse byte order (16 bit)

+  \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+#define __REVSH(value) (int16_t)__builtin_bswap16(value)

+

+

+/**

+  \brief   Rotate Right in unsigned value (32 bit)

+  \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.

+  \param [in]    op1  Value to rotate

+  \param [in]    op2  Number of Bits to rotate

+  \return               Rotated value

+ */

+__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2)

+{

+  op2 %= 32U;

+  if (op2 == 0U)

+  {

+    return op1;

+  }

+  return (op1 >> op2) | (op1 << (32U - op2));

+}

+

+

+/**

+  \brief   Breakpoint

+  \details Causes the processor to enter Debug state.

+           Debug tools can use this to investigate system state when the instruction at a particular address is reached.

+  \param [in]    value  is ignored by the processor.

+                 If required, a debugger can use it to store additional information about the breakpoint.

+ */

+#define __BKPT(value)     __ASM volatile ("bkpt "#value)

+

+

+/**

+  \brief   Reverse bit order of value

+  \details Reverses the bit order of the given value.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+#define __RBIT            __builtin_arm_rbit

+

+/**

+  \brief   Count leading zeros

+  \details Counts the number of leading zeros of a data value.

+  \param [in]  value  Value to count the leading zeros

+  \return             number of leading zeros in value

+ */

+#define __CLZ             (uint8_t)__builtin_clz

+

+

+#if ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+     (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+     (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+     (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    )

+/**

+  \brief   LDR Exclusive (8 bit)

+  \details Executes a exclusive LDR instruction for 8 bit value.

+  \param [in]    ptr  Pointer to data

+  \return             value of type uint8_t at (*ptr)

+ */

+#define __LDREXB        (uint8_t)__builtin_arm_ldrex

+

+

+/**

+  \brief   LDR Exclusive (16 bit)

+  \details Executes a exclusive LDR instruction for 16 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint16_t at (*ptr)

+ */

+#define __LDREXH        (uint16_t)__builtin_arm_ldrex

+

+

+/**

+  \brief   LDR Exclusive (32 bit)

+  \details Executes a exclusive LDR instruction for 32 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint32_t at (*ptr)

+ */

+#define __LDREXW        (uint32_t)__builtin_arm_ldrex

+

+

+/**

+  \brief   STR Exclusive (8 bit)

+  \details Executes a exclusive STR instruction for 8 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+#define __STREXB        (uint32_t)__builtin_arm_strex

+

+

+/**

+  \brief   STR Exclusive (16 bit)

+  \details Executes a exclusive STR instruction for 16 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+#define __STREXH        (uint32_t)__builtin_arm_strex

+

+

+/**

+  \brief   STR Exclusive (32 bit)

+  \details Executes a exclusive STR instruction for 32 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+#define __STREXW        (uint32_t)__builtin_arm_strex

+

+

+/**

+  \brief   Remove the exclusive lock

+  \details Removes the exclusive lock which is created by LDREX.

+ */

+#define __CLREX             __builtin_arm_clrex

+

+#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */

+

+

+#if ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+     (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+     (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    )

+

+/**

+  \brief   Signed Saturate

+  \details Saturates a signed value.

+  \param [in]  value  Value to be saturated

+  \param [in]    sat  Bit position to saturate to (1..32)

+  \return             Saturated value

+ */

+#define __SSAT             __builtin_arm_ssat

+

+

+/**

+  \brief   Unsigned Saturate

+  \details Saturates an unsigned value.

+  \param [in]  value  Value to be saturated

+  \param [in]    sat  Bit position to saturate to (0..31)

+  \return             Saturated value

+ */

+#define __USAT             __builtin_arm_usat

+

+

+/**

+  \brief   Rotate Right with Extend (32 bit)

+  \details Moves each bit of a bitstring right by one bit.

+           The carry input is shifted in at the left end of the bitstring.

+  \param [in]    value  Value to rotate

+  \return               Rotated value

+ */

+__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value)

+{

+  uint32_t result;

+

+  __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );

+  return(result);

+}

+

+

+/**

+  \brief   LDRT Unprivileged (8 bit)

+  \details Executes a Unprivileged LDRT instruction for 8 bit value.

+  \param [in]    ptr  Pointer to data

+  \return             value of type uint8_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr)

+{

+  uint32_t result;

+

+  __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) );

+  return ((uint8_t) result);    /* Add explicit type cast here */

+}

+

+

+/**

+  \brief   LDRT Unprivileged (16 bit)

+  \details Executes a Unprivileged LDRT instruction for 16 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint16_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr)

+{

+  uint32_t result;

+

+  __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) );

+  return ((uint16_t) result);    /* Add explicit type cast here */

+}

+

+

+/**

+  \brief   LDRT Unprivileged (32 bit)

+  \details Executes a Unprivileged LDRT instruction for 32 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint32_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr)

+{

+  uint32_t result;

+

+  __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) );

+  return(result);

+}

+

+

+/**

+  \brief   STRT Unprivileged (8 bit)

+  \details Executes a Unprivileged STRT instruction for 8 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr)

+{

+  __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );

+}

+

+

+/**

+  \brief   STRT Unprivileged (16 bit)

+  \details Executes a Unprivileged STRT instruction for 16 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr)

+{

+  __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );

+}

+

+

+/**

+  \brief   STRT Unprivileged (32 bit)

+  \details Executes a Unprivileged STRT instruction for 32 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr)

+{

+  __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) );

+}

+

+#else  /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */

+

+/**

+  \brief   Signed Saturate

+  \details Saturates a signed value.

+  \param [in]  value  Value to be saturated

+  \param [in]    sat  Bit position to saturate to (1..32)

+  \return             Saturated value

+ */

+__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat)

+{

+  if ((sat >= 1U) && (sat <= 32U))

+  {

+    const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);

+    const int32_t min = -1 - max ;

+    if (val > max)

+    {

+      return max;

+    }

+    else if (val < min)

+    {

+      return min;

+    }

+  }

+  return val;

+}

+

+/**

+  \brief   Unsigned Saturate

+  \details Saturates an unsigned value.

+  \param [in]  value  Value to be saturated

+  \param [in]    sat  Bit position to saturate to (0..31)

+  \return             Saturated value

+ */

+__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat)

+{

+  if (sat <= 31U)

+  {

+    const uint32_t max = ((1U << sat) - 1U);

+    if (val > (int32_t)max)

+    {

+      return max;

+    }

+    else if (val < 0)

+    {

+      return 0U;

+    }

+  }

+  return (uint32_t)val;

+}

+

+#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */

+

+

+#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+     (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    )

+/**

+  \brief   Load-Acquire (8 bit)

+  \details Executes a LDAB instruction for 8 bit value.

+  \param [in]    ptr  Pointer to data

+  \return             value of type uint8_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr)

+{

+  uint32_t result;

+

+  __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) );

+  return ((uint8_t) result);

+}

+

+

+/**

+  \brief   Load-Acquire (16 bit)

+  \details Executes a LDAH instruction for 16 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint16_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr)

+{

+  uint32_t result;

+

+  __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) );

+  return ((uint16_t) result);

+}

+

+

+/**

+  \brief   Load-Acquire (32 bit)

+  \details Executes a LDA instruction for 32 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint32_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr)

+{

+  uint32_t result;

+

+  __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) );

+  return(result);

+}

+

+

+/**

+  \brief   Store-Release (8 bit)

+  \details Executes a STLB instruction for 8 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr)

+{

+  __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );

+}

+

+

+/**

+  \brief   Store-Release (16 bit)

+  \details Executes a STLH instruction for 16 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr)

+{

+  __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );

+}

+

+

+/**

+  \brief   Store-Release (32 bit)

+  \details Executes a STL instruction for 32 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr)

+{

+  __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );

+}

+

+

+/**

+  \brief   Load-Acquire Exclusive (8 bit)

+  \details Executes a LDAB exclusive instruction for 8 bit value.

+  \param [in]    ptr  Pointer to data

+  \return             value of type uint8_t at (*ptr)

+ */

+#define     __LDAEXB                 (uint8_t)__builtin_arm_ldaex

+

+

+/**

+  \brief   Load-Acquire Exclusive (16 bit)

+  \details Executes a LDAH exclusive instruction for 16 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint16_t at (*ptr)

+ */

+#define     __LDAEXH                 (uint16_t)__builtin_arm_ldaex

+

+

+/**

+  \brief   Load-Acquire Exclusive (32 bit)

+  \details Executes a LDA exclusive instruction for 32 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint32_t at (*ptr)

+ */

+#define     __LDAEX                  (uint32_t)__builtin_arm_ldaex

+

+

+/**

+  \brief   Store-Release Exclusive (8 bit)

+  \details Executes a STLB exclusive instruction for 8 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+#define     __STLEXB                 (uint32_t)__builtin_arm_stlex

+

+

+/**

+  \brief   Store-Release Exclusive (16 bit)

+  \details Executes a STLH exclusive instruction for 16 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+#define     __STLEXH                 (uint32_t)__builtin_arm_stlex

+

+

+/**

+  \brief   Store-Release Exclusive (32 bit)

+  \details Executes a STL exclusive instruction for 32 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+#define     __STLEX                  (uint32_t)__builtin_arm_stlex

+

+#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */

+

+/*@}*/ /* end of group CMSIS_Core_InstructionInterface */

+

+

+/* ###################  Compiler specific Intrinsics  ########################### */

+/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics

+  Access to dedicated SIMD instructions

+  @{

+*/

+

+#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1))

+

+__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+

+__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+

+__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3)

+{

+  uint32_t result;

+

+  __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );

+  return(result);

+}

+

+#define __SSAT16(ARG1,ARG2) \

+({                          \

+  int32_t __RES, __ARG1 = (ARG1); \

+  __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \

+  __RES; \

+ })

+

+#define __USAT16(ARG1,ARG2) \

+({                          \

+  uint32_t __RES, __ARG1 = (ARG1); \

+  __ASM ("usat16 %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \

+  __RES; \

+ })

+

+__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1)

+{

+  uint32_t result;

+

+  __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1));

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1)

+{

+  uint32_t result;

+

+  __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1));

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMUAD  (uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3)

+{

+  uint32_t result;

+

+  __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3)

+{

+  uint32_t result;

+

+  __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc)

+{

+  union llreg_u{

+    uint32_t w32[2];

+    uint64_t w64;

+  } llr;

+  llr.w64 = acc;

+

+#ifndef __ARMEB__   /* Little endian */

+  __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );

+#else               /* Big endian */

+  __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );

+#endif

+

+  return(llr.w64);

+}

+

+__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc)

+{

+  union llreg_u{

+    uint32_t w32[2];

+    uint64_t w64;

+  } llr;

+  llr.w64 = acc;

+

+#ifndef __ARMEB__   /* Little endian */

+  __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );

+#else               /* Big endian */

+  __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );

+#endif

+

+  return(llr.w64);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMUSD  (uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3)

+{

+  uint32_t result;

+

+  __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3)

+{

+  uint32_t result;

+

+  __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc)

+{

+  union llreg_u{

+    uint32_t w32[2];

+    uint64_t w64;

+  } llr;

+  llr.w64 = acc;

+

+#ifndef __ARMEB__   /* Little endian */

+  __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );

+#else               /* Big endian */

+  __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );

+#endif

+

+  return(llr.w64);

+}

+

+__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc)

+{

+  union llreg_u{

+    uint32_t w32[2];

+    uint64_t w64;

+  } llr;

+  llr.w64 = acc;

+

+#ifndef __ARMEB__   /* Little endian */

+  __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );

+#else               /* Big endian */

+  __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );

+#endif

+

+  return(llr.w64);

+}

+

+__STATIC_FORCEINLINE uint32_t __SEL  (uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE  int32_t __QADD( int32_t op1,  int32_t op2)

+{

+  int32_t result;

+

+  __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE  int32_t __QSUB( int32_t op1,  int32_t op2)

+{

+  int32_t result;

+

+  __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+#if 0

+#define __PKHBT(ARG1,ARG2,ARG3) \

+({                          \

+  uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \

+  __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) :  "r" (__ARG1), "r" (__ARG2), "I" (ARG3)  ); \

+  __RES; \

+ })

+

+#define __PKHTB(ARG1,ARG2,ARG3) \

+({                          \

+  uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \

+  if (ARG3 == 0) \

+    __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) :  "r" (__ARG1), "r" (__ARG2)  ); \

+  else \

+    __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) :  "r" (__ARG1), "r" (__ARG2), "I" (ARG3)  ); \

+  __RES; \

+ })

+#endif

+

+#define __PKHBT(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0x0000FFFFUL) |  \

+                                           ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL)  )

+

+#define __PKHTB(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0xFFFF0000UL) |  \

+                                           ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL)  )

+

+__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3)

+{

+  int32_t result;

+

+  __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r"  (op1), "r" (op2), "r" (op3) );

+  return(result);

+}

+

+#endif /* (__ARM_FEATURE_DSP == 1) */

+/*@} end of group CMSIS_SIMD_intrinsics */

+

+

+#endif /* __CMSIS_ARMCLANG_H */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_compiler.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_compiler.h
new file mode 100644
index 0000000..79a2cac
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_compiler.h
@@ -0,0 +1,266 @@
+/**************************************************************************//**

+ * @file     cmsis_compiler.h

+ * @brief    CMSIS compiler generic header file

+ * @version  V5.0.4

+ * @date     10. January 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#ifndef __CMSIS_COMPILER_H

+#define __CMSIS_COMPILER_H

+

+#include <stdint.h>

+

+/*

+ * Arm Compiler 4/5

+ */

+#if   defined ( __CC_ARM )

+  #include "cmsis_armcc.h"

+

+

+/*

+ * Arm Compiler 6 (armclang)

+ */

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #include "cmsis_armclang.h"

+

+

+/*

+ * GNU Compiler

+ */

+#elif defined ( __GNUC__ )

+  #include "cmsis_gcc.h"

+

+

+/*

+ * IAR Compiler

+ */

+#elif defined ( __ICCARM__ )

+  #include <cmsis_iccarm.h>

+

+

+/*

+ * TI Arm Compiler

+ */

+#elif defined ( __TI_ARM__ )

+  #include <cmsis_ccs.h>

+

+  #ifndef   __ASM

+    #define __ASM                                  __asm

+  #endif

+  #ifndef   __INLINE

+    #define __INLINE                               inline

+  #endif

+  #ifndef   __STATIC_INLINE

+    #define __STATIC_INLINE                        static inline

+  #endif

+  #ifndef   __STATIC_FORCEINLINE

+    #define __STATIC_FORCEINLINE                   __STATIC_INLINE

+  #endif

+  #ifndef   __NO_RETURN

+    #define __NO_RETURN                            __attribute__((noreturn))

+  #endif

+  #ifndef   __USED

+    #define __USED                                 __attribute__((used))

+  #endif

+  #ifndef   __WEAK

+    #define __WEAK                                 __attribute__((weak))

+  #endif

+  #ifndef   __PACKED

+    #define __PACKED                               __attribute__((packed))

+  #endif

+  #ifndef   __PACKED_STRUCT

+    #define __PACKED_STRUCT                        struct __attribute__((packed))

+  #endif

+  #ifndef   __PACKED_UNION

+    #define __PACKED_UNION                         union __attribute__((packed))

+  #endif

+  #ifndef   __UNALIGNED_UINT32        /* deprecated */

+    struct __attribute__((packed)) T_UINT32 { uint32_t v; };

+    #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)

+  #endif

+  #ifndef   __UNALIGNED_UINT16_WRITE

+    __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };

+    #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val))

+  #endif

+  #ifndef   __UNALIGNED_UINT16_READ

+    __PACKED_STRUCT T_UINT16_READ { uint16_t v; };

+    #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)

+  #endif

+  #ifndef   __UNALIGNED_UINT32_WRITE

+    __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };

+    #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))

+  #endif

+  #ifndef   __UNALIGNED_UINT32_READ

+    __PACKED_STRUCT T_UINT32_READ { uint32_t v; };

+    #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)

+  #endif

+  #ifndef   __ALIGNED

+    #define __ALIGNED(x)                           __attribute__((aligned(x)))

+  #endif

+  #ifndef   __RESTRICT

+    #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.

+    #define __RESTRICT

+  #endif

+

+

+/*

+ * TASKING Compiler

+ */

+#elif defined ( __TASKING__ )

+  /*

+   * The CMSIS functions have been implemented as intrinsics in the compiler.

+   * Please use "carm -?i" to get an up to date list of all intrinsics,

+   * Including the CMSIS ones.

+   */

+

+  #ifndef   __ASM

+    #define __ASM                                  __asm

+  #endif

+  #ifndef   __INLINE

+    #define __INLINE                               inline

+  #endif

+  #ifndef   __STATIC_INLINE

+    #define __STATIC_INLINE                        static inline

+  #endif

+  #ifndef   __STATIC_FORCEINLINE

+    #define __STATIC_FORCEINLINE                   __STATIC_INLINE

+  #endif

+  #ifndef   __NO_RETURN

+    #define __NO_RETURN                            __attribute__((noreturn))

+  #endif

+  #ifndef   __USED

+    #define __USED                                 __attribute__((used))

+  #endif

+  #ifndef   __WEAK

+    #define __WEAK                                 __attribute__((weak))

+  #endif

+  #ifndef   __PACKED

+    #define __PACKED                               __packed__

+  #endif

+  #ifndef   __PACKED_STRUCT

+    #define __PACKED_STRUCT                        struct __packed__

+  #endif

+  #ifndef   __PACKED_UNION

+    #define __PACKED_UNION                         union __packed__

+  #endif

+  #ifndef   __UNALIGNED_UINT32        /* deprecated */

+    struct __packed__ T_UINT32 { uint32_t v; };

+    #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)

+  #endif

+  #ifndef   __UNALIGNED_UINT16_WRITE

+    __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };

+    #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))

+  #endif

+  #ifndef   __UNALIGNED_UINT16_READ

+    __PACKED_STRUCT T_UINT16_READ { uint16_t v; };

+    #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)

+  #endif

+  #ifndef   __UNALIGNED_UINT32_WRITE

+    __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };

+    #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))

+  #endif

+  #ifndef   __UNALIGNED_UINT32_READ

+    __PACKED_STRUCT T_UINT32_READ { uint32_t v; };

+    #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)

+  #endif

+  #ifndef   __ALIGNED

+    #define __ALIGNED(x)              __align(x)

+  #endif

+  #ifndef   __RESTRICT

+    #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.

+    #define __RESTRICT

+  #endif

+

+

+/*

+ * COSMIC Compiler

+ */

+#elif defined ( __CSMC__ )

+   #include <cmsis_csm.h>

+

+ #ifndef   __ASM

+    #define __ASM                                  _asm

+  #endif

+  #ifndef   __INLINE

+    #define __INLINE                               inline

+  #endif

+  #ifndef   __STATIC_INLINE

+    #define __STATIC_INLINE                        static inline

+  #endif

+  #ifndef   __STATIC_FORCEINLINE

+    #define __STATIC_FORCEINLINE                   __STATIC_INLINE

+  #endif

+  #ifndef   __NO_RETURN

+    // NO RETURN is automatically detected hence no warning here

+    #define __NO_RETURN

+  #endif

+  #ifndef   __USED

+    #warning No compiler specific solution for __USED. __USED is ignored.

+    #define __USED

+  #endif

+  #ifndef   __WEAK

+    #define __WEAK                                 __weak

+  #endif

+  #ifndef   __PACKED

+    #define __PACKED                               @packed

+  #endif

+  #ifndef   __PACKED_STRUCT

+    #define __PACKED_STRUCT                        @packed struct

+  #endif

+  #ifndef   __PACKED_UNION

+    #define __PACKED_UNION                         @packed union

+  #endif

+  #ifndef   __UNALIGNED_UINT32        /* deprecated */

+    @packed struct T_UINT32 { uint32_t v; };

+    #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)

+  #endif

+  #ifndef   __UNALIGNED_UINT16_WRITE

+    __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };

+    #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))

+  #endif

+  #ifndef   __UNALIGNED_UINT16_READ

+    __PACKED_STRUCT T_UINT16_READ { uint16_t v; };

+    #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)

+  #endif

+  #ifndef   __UNALIGNED_UINT32_WRITE

+    __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };

+    #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))

+  #endif

+  #ifndef   __UNALIGNED_UINT32_READ

+    __PACKED_STRUCT T_UINT32_READ { uint32_t v; };

+    #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)

+  #endif

+  #ifndef   __ALIGNED

+    #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.

+    #define __ALIGNED(x)

+  #endif

+  #ifndef   __RESTRICT

+    #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.

+    #define __RESTRICT

+  #endif

+

+

+#else

+  #error Unknown compiler.

+#endif

+

+

+#endif /* __CMSIS_COMPILER_H */

+

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_gcc.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_gcc.h
new file mode 100644
index 0000000..1bd41a4
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_gcc.h
@@ -0,0 +1,2085 @@
+/**************************************************************************//**

+ * @file     cmsis_gcc.h

+ * @brief    CMSIS compiler GCC header file

+ * @version  V5.0.4

+ * @date     09. April 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#ifndef __CMSIS_GCC_H

+#define __CMSIS_GCC_H

+

+/* ignore some GCC warnings */

+#pragma GCC diagnostic push

+#pragma GCC diagnostic ignored "-Wsign-conversion"

+#pragma GCC diagnostic ignored "-Wconversion"

+#pragma GCC diagnostic ignored "-Wunused-parameter"

+

+/* Fallback for __has_builtin */

+#ifndef __has_builtin

+  #define __has_builtin(x) (0)

+#endif

+

+/* CMSIS compiler specific defines */

+#ifndef   __ASM

+  #define __ASM                                  __asm

+#endif

+#ifndef   __INLINE

+  #define __INLINE                               inline

+#endif

+#ifndef   __STATIC_INLINE

+  #define __STATIC_INLINE                        static inline

+#endif

+#ifndef   __STATIC_FORCEINLINE                 

+  #define __STATIC_FORCEINLINE                   __attribute__((always_inline)) static inline

+#endif                                           

+#ifndef   __NO_RETURN

+  #define __NO_RETURN                            __attribute__((__noreturn__))

+#endif

+#ifndef   __USED

+  #define __USED                                 __attribute__((used))

+#endif

+#ifndef   __WEAK

+  #define __WEAK                                 __attribute__((weak))

+#endif

+#ifndef   __PACKED

+  #define __PACKED                               __attribute__((packed, aligned(1)))

+#endif

+#ifndef   __PACKED_STRUCT

+  #define __PACKED_STRUCT                        struct __attribute__((packed, aligned(1)))

+#endif

+#ifndef   __PACKED_UNION

+  #define __PACKED_UNION                         union __attribute__((packed, aligned(1)))

+#endif

+#ifndef   __UNALIGNED_UINT32        /* deprecated */

+  #pragma GCC diagnostic push

+  #pragma GCC diagnostic ignored "-Wpacked"

+  #pragma GCC diagnostic ignored "-Wattributes"

+  struct __attribute__((packed)) T_UINT32 { uint32_t v; };

+  #pragma GCC diagnostic pop

+  #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)

+#endif

+#ifndef   __UNALIGNED_UINT16_WRITE

+  #pragma GCC diagnostic push

+  #pragma GCC diagnostic ignored "-Wpacked"

+  #pragma GCC diagnostic ignored "-Wattributes"

+  __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };

+  #pragma GCC diagnostic pop

+  #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))

+#endif

+#ifndef   __UNALIGNED_UINT16_READ

+  #pragma GCC diagnostic push

+  #pragma GCC diagnostic ignored "-Wpacked"

+  #pragma GCC diagnostic ignored "-Wattributes"

+  __PACKED_STRUCT T_UINT16_READ { uint16_t v; };

+  #pragma GCC diagnostic pop

+  #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)

+#endif

+#ifndef   __UNALIGNED_UINT32_WRITE

+  #pragma GCC diagnostic push

+  #pragma GCC diagnostic ignored "-Wpacked"

+  #pragma GCC diagnostic ignored "-Wattributes"

+  __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };

+  #pragma GCC diagnostic pop

+  #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))

+#endif

+#ifndef   __UNALIGNED_UINT32_READ

+  #pragma GCC diagnostic push

+  #pragma GCC diagnostic ignored "-Wpacked"

+  #pragma GCC diagnostic ignored "-Wattributes"

+  __PACKED_STRUCT T_UINT32_READ { uint32_t v; };

+  #pragma GCC diagnostic pop

+  #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)

+#endif

+#ifndef   __ALIGNED

+  #define __ALIGNED(x)                           __attribute__((aligned(x)))

+#endif

+#ifndef   __RESTRICT

+  #define __RESTRICT                             __restrict

+#endif

+

+

+/* ###########################  Core Function Access  ########################### */

+/** \ingroup  CMSIS_Core_FunctionInterface

+    \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions

+  @{

+ */

+

+/**

+  \brief   Enable IRQ Interrupts

+  \details Enables IRQ interrupts by clearing the I-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+__STATIC_FORCEINLINE void __enable_irq(void)

+{

+  __ASM volatile ("cpsie i" : : : "memory");

+}

+

+

+/**

+  \brief   Disable IRQ Interrupts

+  \details Disables IRQ interrupts by setting the I-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+__STATIC_FORCEINLINE void __disable_irq(void)

+{

+  __ASM volatile ("cpsid i" : : : "memory");

+}

+

+

+/**

+  \brief   Get Control Register

+  \details Returns the content of the Control Register.

+  \return               Control Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_CONTROL(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, control" : "=r" (result) );

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Control Register (non-secure)

+  \details Returns the content of the non-secure Control Register when in secure mode.

+  \return               non-secure Control Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, control_ns" : "=r" (result) );

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Control Register

+  \details Writes the given value to the Control Register.

+  \param [in]    control  Control Register value to set

+ */

+__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control)

+{

+  __ASM volatile ("MSR control, %0" : : "r" (control) : "memory");

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Control Register (non-secure)

+  \details Writes the given value to the non-secure Control Register when in secure state.

+  \param [in]    control  Control Register value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control)

+{

+  __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory");

+}

+#endif

+

+

+/**

+  \brief   Get IPSR Register

+  \details Returns the content of the IPSR Register.

+  \return               IPSR Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_IPSR(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, ipsr" : "=r" (result) );

+  return(result);

+}

+

+

+/**

+  \brief   Get APSR Register

+  \details Returns the content of the APSR Register.

+  \return               APSR Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_APSR(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, apsr" : "=r" (result) );

+  return(result);

+}

+

+

+/**

+  \brief   Get xPSR Register

+  \details Returns the content of the xPSR Register.

+  \return               xPSR Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_xPSR(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, xpsr" : "=r" (result) );

+  return(result);

+}

+

+

+/**

+  \brief   Get Process Stack Pointer

+  \details Returns the current value of the Process Stack Pointer (PSP).

+  \return               PSP Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_PSP(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, psp"  : "=r" (result) );

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Process Stack Pointer (non-secure)

+  \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state.

+  \return               PSP Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, psp_ns"  : "=r" (result) );

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Process Stack Pointer

+  \details Assigns the given value to the Process Stack Pointer (PSP).

+  \param [in]    topOfProcStack  Process Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack)

+{

+  __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : );

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Process Stack Pointer (non-secure)

+  \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state.

+  \param [in]    topOfProcStack  Process Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack)

+{

+  __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : );

+}

+#endif

+

+

+/**

+  \brief   Get Main Stack Pointer

+  \details Returns the current value of the Main Stack Pointer (MSP).

+  \return               MSP Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_MSP(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, msp" : "=r" (result) );

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Main Stack Pointer (non-secure)

+  \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state.

+  \return               MSP Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, msp_ns" : "=r" (result) );

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Main Stack Pointer

+  \details Assigns the given value to the Main Stack Pointer (MSP).

+  \param [in]    topOfMainStack  Main Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack)

+{

+  __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : );

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Main Stack Pointer (non-secure)

+  \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state.

+  \param [in]    topOfMainStack  Main Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack)

+{

+  __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : );

+}

+#endif

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Stack Pointer (non-secure)

+  \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state.

+  \return               SP Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, sp_ns" : "=r" (result) );

+  return(result);

+}

+

+

+/**

+  \brief   Set Stack Pointer (non-secure)

+  \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state.

+  \param [in]    topOfStack  Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack)

+{

+  __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : );

+}

+#endif

+

+

+/**

+  \brief   Get Priority Mask

+  \details Returns the current state of the priority mask bit from the Priority Mask Register.

+  \return               Priority Mask value

+ */

+__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Priority Mask (non-secure)

+  \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state.

+  \return               Priority Mask value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, primask_ns" : "=r" (result) :: "memory");

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Priority Mask

+  \details Assigns the given value to the Priority Mask Register.

+  \param [in]    priMask  Priority Mask

+ */

+__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask)

+{

+  __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Priority Mask (non-secure)

+  \details Assigns the given value to the non-secure Priority Mask Register when in secure state.

+  \param [in]    priMask  Priority Mask

+ */

+__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask)

+{

+  __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory");

+}

+#endif

+

+

+#if ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+     (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+     (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    )

+/**

+  \brief   Enable FIQ

+  \details Enables FIQ interrupts by clearing the F-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+__STATIC_FORCEINLINE void __enable_fault_irq(void)

+{

+  __ASM volatile ("cpsie f" : : : "memory");

+}

+

+

+/**

+  \brief   Disable FIQ

+  \details Disables FIQ interrupts by setting the F-bit in the CPSR.

+           Can only be executed in Privileged modes.

+ */

+__STATIC_FORCEINLINE void __disable_fault_irq(void)

+{

+  __ASM volatile ("cpsid f" : : : "memory");

+}

+

+

+/**

+  \brief   Get Base Priority

+  \details Returns the current value of the Base Priority register.

+  \return               Base Priority register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, basepri" : "=r" (result) );

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Base Priority (non-secure)

+  \details Returns the current value of the non-secure Base Priority register when in secure state.

+  \return               Base Priority register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) );

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Base Priority

+  \details Assigns the given value to the Base Priority register.

+  \param [in]    basePri  Base Priority value to set

+ */

+__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri)

+{

+  __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory");

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Base Priority (non-secure)

+  \details Assigns the given value to the non-secure Base Priority register when in secure state.

+  \param [in]    basePri  Base Priority value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri)

+{

+  __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory");

+}

+#endif

+

+

+/**

+  \brief   Set Base Priority with condition

+  \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,

+           or the new value increases the BASEPRI priority level.

+  \param [in]    basePri  Base Priority value to set

+ */

+__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri)

+{

+  __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory");

+}

+

+

+/**

+  \brief   Get Fault Mask

+  \details Returns the current value of the Fault Mask register.

+  \return               Fault Mask register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, faultmask" : "=r" (result) );

+  return(result);

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Fault Mask (non-secure)

+  \details Returns the current value of the non-secure Fault Mask register when in secure state.

+  \return               Fault Mask register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) );

+  return(result);

+}

+#endif

+

+

+/**

+  \brief   Set Fault Mask

+  \details Assigns the given value to the Fault Mask register.

+  \param [in]    faultMask  Fault Mask value to set

+ */

+__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask)

+{

+  __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory");

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Set Fault Mask (non-secure)

+  \details Assigns the given value to the non-secure Fault Mask register when in secure state.

+  \param [in]    faultMask  Fault Mask value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask)

+{

+  __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory");

+}

+#endif

+

+#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */

+

+

+#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+     (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    )

+

+/**

+  \brief   Get Process Stack Pointer Limit

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence zero is returned always in non-secure

+  mode.

+  

+  \details Returns the current value of the Process Stack Pointer Limit (PSPLIM).

+  \return               PSPLIM Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+    (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+    // without main extensions, the non-secure PSPLIM is RAZ/WI

+  return 0U;

+#else

+  uint32_t result;

+  __ASM volatile ("MRS %0, psplim"  : "=r" (result) );

+  return result;

+#endif

+}

+

+#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))

+/**

+  \brief   Get Process Stack Pointer Limit (non-secure)

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence zero is returned always.

+

+  \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.

+  \return               PSPLIM Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))

+  // without main extensions, the non-secure PSPLIM is RAZ/WI

+  return 0U;

+#else

+  uint32_t result;

+  __ASM volatile ("MRS %0, psplim_ns"  : "=r" (result) );

+  return result;

+#endif

+}

+#endif

+

+

+/**

+  \brief   Set Process Stack Pointer Limit

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence the write is silently ignored in non-secure

+  mode.

+  

+  \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM).

+  \param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set

+ */

+__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+    (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+  // without main extensions, the non-secure PSPLIM is RAZ/WI

+  (void)ProcStackPtrLimit;

+#else

+  __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit));

+#endif

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE  ) && (__ARM_FEATURE_CMSE   == 3))

+/**

+  \brief   Set Process Stack Pointer (non-secure)

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence the write is silently ignored.

+

+  \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.

+  \param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))

+  // without main extensions, the non-secure PSPLIM is RAZ/WI

+  (void)ProcStackPtrLimit;

+#else

+  __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit));

+#endif

+}

+#endif

+

+

+/**

+  \brief   Get Main Stack Pointer Limit

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence zero is returned always in non-secure

+  mode.

+

+  \details Returns the current value of the Main Stack Pointer Limit (MSPLIM).

+  \return               MSPLIM Register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+    (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+  // without main extensions, the non-secure MSPLIM is RAZ/WI

+  return 0U;

+#else

+  uint32_t result;

+  __ASM volatile ("MRS %0, msplim" : "=r" (result) );

+  return result;

+#endif

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE  ) && (__ARM_FEATURE_CMSE   == 3))

+/**

+  \brief   Get Main Stack Pointer Limit (non-secure)

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence zero is returned always.

+

+  \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state.

+  \return               MSPLIM Register value

+ */

+__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))

+  // without main extensions, the non-secure MSPLIM is RAZ/WI

+  return 0U;

+#else

+  uint32_t result;

+  __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) );

+  return result;

+#endif

+}

+#endif

+

+

+/**

+  \brief   Set Main Stack Pointer Limit

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence the write is silently ignored in non-secure

+  mode.

+

+  \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM).

+  \param [in]    MainStackPtrLimit  Main Stack Pointer Limit value to set

+ */

+__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+    (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+  // without main extensions, the non-secure MSPLIM is RAZ/WI

+  (void)MainStackPtrLimit;

+#else

+  __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit));

+#endif

+}

+

+

+#if (defined (__ARM_FEATURE_CMSE  ) && (__ARM_FEATURE_CMSE   == 3))

+/**

+  \brief   Set Main Stack Pointer Limit (non-secure)

+  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure

+  Stack Pointer Limit register hence the write is silently ignored.

+

+  \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state.

+  \param [in]    MainStackPtrLimit  Main Stack Pointer value to set

+ */

+__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit)

+{

+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))

+  // without main extensions, the non-secure MSPLIM is RAZ/WI

+  (void)MainStackPtrLimit;

+#else

+  __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit));

+#endif

+}

+#endif

+

+#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */

+

+

+/**

+  \brief   Get FPSCR

+  \details Returns the current value of the Floating Point Status/Control register.

+  \return               Floating Point Status/Control register value

+ */

+__STATIC_FORCEINLINE uint32_t __get_FPSCR(void)

+{

+#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \

+     (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )

+#if __has_builtin(__builtin_arm_get_fpscr) 

+// Re-enable using built-in when GCC has been fixed

+// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2)

+  /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */

+  return __builtin_arm_get_fpscr();

+#else

+  uint32_t result;

+

+  __ASM volatile ("VMRS %0, fpscr" : "=r" (result) );

+  return(result);

+#endif

+#else

+  return(0U);

+#endif

+}

+

+

+/**

+  \brief   Set FPSCR

+  \details Assigns the given value to the Floating Point Status/Control register.

+  \param [in]    fpscr  Floating Point Status/Control value to set

+ */

+__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr)

+{

+#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \

+     (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )

+#if __has_builtin(__builtin_arm_set_fpscr)

+// Re-enable using built-in when GCC has been fixed

+// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2)

+  /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */

+  __builtin_arm_set_fpscr(fpscr);

+#else

+  __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory");

+#endif

+#else

+  (void)fpscr;

+#endif

+}

+

+

+/*@} end of CMSIS_Core_RegAccFunctions */

+

+

+/* ##########################  Core Instruction Access  ######################### */

+/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface

+  Access to dedicated instructions

+  @{

+*/

+

+/* Define macros for porting to both thumb1 and thumb2.

+ * For thumb1, use low register (r0-r7), specified by constraint "l"

+ * Otherwise, use general registers, specified by constraint "r" */

+#if defined (__thumb__) && !defined (__thumb2__)

+#define __CMSIS_GCC_OUT_REG(r) "=l" (r)

+#define __CMSIS_GCC_RW_REG(r) "+l" (r)

+#define __CMSIS_GCC_USE_REG(r) "l" (r)

+#else

+#define __CMSIS_GCC_OUT_REG(r) "=r" (r)

+#define __CMSIS_GCC_RW_REG(r) "+r" (r)

+#define __CMSIS_GCC_USE_REG(r) "r" (r)

+#endif

+

+/**

+  \brief   No Operation

+  \details No Operation does nothing. This instruction can be used for code alignment purposes.

+ */

+#define __NOP()                             __ASM volatile ("nop")

+

+/**

+  \brief   Wait For Interrupt

+  \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.

+ */

+#define __WFI()                             __ASM volatile ("wfi")

+

+

+/**

+  \brief   Wait For Event

+  \details Wait For Event is a hint instruction that permits the processor to enter

+           a low-power state until one of a number of events occurs.

+ */

+#define __WFE()                             __ASM volatile ("wfe")

+

+

+/**

+  \brief   Send Event

+  \details Send Event is a hint instruction. It causes an event to be signaled to the CPU.

+ */

+#define __SEV()                             __ASM volatile ("sev")

+

+

+/**

+  \brief   Instruction Synchronization Barrier

+  \details Instruction Synchronization Barrier flushes the pipeline in the processor,

+           so that all instructions following the ISB are fetched from cache or memory,

+           after the instruction has been completed.

+ */

+__STATIC_FORCEINLINE void __ISB(void)

+{

+  __ASM volatile ("isb 0xF":::"memory");

+}

+

+

+/**

+  \brief   Data Synchronization Barrier

+  \details Acts as a special kind of Data Memory Barrier.

+           It completes when all explicit memory accesses before this instruction complete.

+ */

+__STATIC_FORCEINLINE void __DSB(void)

+{

+  __ASM volatile ("dsb 0xF":::"memory");

+}

+

+

+/**

+  \brief   Data Memory Barrier

+  \details Ensures the apparent order of the explicit memory operations before

+           and after the instruction, without ensuring their completion.

+ */

+__STATIC_FORCEINLINE void __DMB(void)

+{

+  __ASM volatile ("dmb 0xF":::"memory");

+}

+

+

+/**

+  \brief   Reverse byte order (32 bit)

+  \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+__STATIC_FORCEINLINE uint32_t __REV(uint32_t value)

+{

+#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)

+  return __builtin_bswap32(value);

+#else

+  uint32_t result;

+

+  __ASM volatile ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );

+  return result;

+#endif

+}

+

+

+/**

+  \brief   Reverse byte order (16 bit)

+  \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value)

+{

+  uint32_t result;

+

+  __ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );

+  return result;

+}

+

+

+/**

+  \brief   Reverse byte order (16 bit)

+  \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+__STATIC_FORCEINLINE int16_t __REVSH(int16_t value)

+{

+#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)

+  return (int16_t)__builtin_bswap16(value);

+#else

+  int16_t result;

+

+  __ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );

+  return result;

+#endif

+}

+

+

+/**

+  \brief   Rotate Right in unsigned value (32 bit)

+  \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.

+  \param [in]    op1  Value to rotate

+  \param [in]    op2  Number of Bits to rotate

+  \return               Rotated value

+ */

+__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2)

+{

+  op2 %= 32U;

+  if (op2 == 0U)

+  {

+    return op1;

+  }

+  return (op1 >> op2) | (op1 << (32U - op2));

+}

+

+

+/**

+  \brief   Breakpoint

+  \details Causes the processor to enter Debug state.

+           Debug tools can use this to investigate system state when the instruction at a particular address is reached.

+  \param [in]    value  is ignored by the processor.

+                 If required, a debugger can use it to store additional information about the breakpoint.

+ */

+#define __BKPT(value)                       __ASM volatile ("bkpt "#value)

+

+

+/**

+  \brief   Reverse bit order of value

+  \details Reverses the bit order of the given value.

+  \param [in]    value  Value to reverse

+  \return               Reversed value

+ */

+__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value)

+{

+  uint32_t result;

+

+#if ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+     (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+     (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    )

+   __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );

+#else

+  uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */

+

+  result = value;                      /* r will be reversed bits of v; first get LSB of v */

+  for (value >>= 1U; value != 0U; value >>= 1U)

+  {

+    result <<= 1U;

+    result |= value & 1U;

+    s--;

+  }

+  result <<= s;                        /* shift when v's highest bits are zero */

+#endif

+  return result;

+}

+

+

+/**

+  \brief   Count leading zeros

+  \details Counts the number of leading zeros of a data value.

+  \param [in]  value  Value to count the leading zeros

+  \return             number of leading zeros in value

+ */

+#define __CLZ             (uint8_t)__builtin_clz

+

+

+#if ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+     (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+     (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+     (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    )

+/**

+  \brief   LDR Exclusive (8 bit)

+  \details Executes a exclusive LDR instruction for 8 bit value.

+  \param [in]    ptr  Pointer to data

+  \return             value of type uint8_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr)

+{

+    uint32_t result;

+

+#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)

+   __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) );

+#else

+    /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not

+       accepted by assembler. So has to use following less efficient pattern.

+    */

+   __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" );

+#endif

+   return ((uint8_t) result);    /* Add explicit type cast here */

+}

+

+

+/**

+  \brief   LDR Exclusive (16 bit)

+  \details Executes a exclusive LDR instruction for 16 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint16_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr)

+{

+    uint32_t result;

+

+#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)

+   __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) );

+#else

+    /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not

+       accepted by assembler. So has to use following less efficient pattern.

+    */

+   __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" );

+#endif

+   return ((uint16_t) result);    /* Add explicit type cast here */

+}

+

+

+/**

+  \brief   LDR Exclusive (32 bit)

+  \details Executes a exclusive LDR instruction for 32 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint32_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr)

+{

+    uint32_t result;

+

+   __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );

+   return(result);

+}

+

+

+/**

+  \brief   STR Exclusive (8 bit)

+  \details Executes a exclusive STR instruction for 8 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+__STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr)

+{

+   uint32_t result;

+

+   __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) );

+   return(result);

+}

+

+

+/**

+  \brief   STR Exclusive (16 bit)

+  \details Executes a exclusive STR instruction for 16 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+__STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr)

+{

+   uint32_t result;

+

+   __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) );

+   return(result);

+}

+

+

+/**

+  \brief   STR Exclusive (32 bit)

+  \details Executes a exclusive STR instruction for 32 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)

+{

+   uint32_t result;

+

+   __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );

+   return(result);

+}

+

+

+/**

+  \brief   Remove the exclusive lock

+  \details Removes the exclusive lock which is created by LDREX.

+ */

+__STATIC_FORCEINLINE void __CLREX(void)

+{

+  __ASM volatile ("clrex" ::: "memory");

+}

+

+#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */

+

+

+#if ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+     (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+     (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    )

+/**

+  \brief   Signed Saturate

+  \details Saturates a signed value.

+  \param [in]  ARG1  Value to be saturated

+  \param [in]  ARG2  Bit position to saturate to (1..32)

+  \return             Saturated value

+ */

+#define __SSAT(ARG1,ARG2) \

+__extension__ \

+({                          \

+  int32_t __RES, __ARG1 = (ARG1); \

+  __ASM ("ssat %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \

+  __RES; \

+ })

+

+

+/**

+  \brief   Unsigned Saturate

+  \details Saturates an unsigned value.

+  \param [in]  ARG1  Value to be saturated

+  \param [in]  ARG2  Bit position to saturate to (0..31)

+  \return             Saturated value

+ */

+#define __USAT(ARG1,ARG2) \

+ __extension__ \

+({                          \

+  uint32_t __RES, __ARG1 = (ARG1); \

+  __ASM ("usat %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \

+  __RES; \

+ })

+

+

+/**

+  \brief   Rotate Right with Extend (32 bit)

+  \details Moves each bit of a bitstring right by one bit.

+           The carry input is shifted in at the left end of the bitstring.

+  \param [in]    value  Value to rotate

+  \return               Rotated value

+ */

+__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value)

+{

+  uint32_t result;

+

+  __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );

+  return(result);

+}

+

+

+/**

+  \brief   LDRT Unprivileged (8 bit)

+  \details Executes a Unprivileged LDRT instruction for 8 bit value.

+  \param [in]    ptr  Pointer to data

+  \return             value of type uint8_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr)

+{

+    uint32_t result;

+

+#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)

+   __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) );

+#else

+    /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not

+       accepted by assembler. So has to use following less efficient pattern.

+    */

+   __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" );

+#endif

+   return ((uint8_t) result);    /* Add explicit type cast here */

+}

+

+

+/**

+  \brief   LDRT Unprivileged (16 bit)

+  \details Executes a Unprivileged LDRT instruction for 16 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint16_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr)

+{

+    uint32_t result;

+

+#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)

+   __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) );

+#else

+    /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not

+       accepted by assembler. So has to use following less efficient pattern.

+    */

+   __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" );

+#endif

+   return ((uint16_t) result);    /* Add explicit type cast here */

+}

+

+

+/**

+  \brief   LDRT Unprivileged (32 bit)

+  \details Executes a Unprivileged LDRT instruction for 32 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint32_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr)

+{

+    uint32_t result;

+

+   __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) );

+   return(result);

+}

+

+

+/**

+  \brief   STRT Unprivileged (8 bit)

+  \details Executes a Unprivileged STRT instruction for 8 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr)

+{

+   __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );

+}

+

+

+/**

+  \brief   STRT Unprivileged (16 bit)

+  \details Executes a Unprivileged STRT instruction for 16 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr)

+{

+   __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );

+}

+

+

+/**

+  \brief   STRT Unprivileged (32 bit)

+  \details Executes a Unprivileged STRT instruction for 32 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr)

+{

+   __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) );

+}

+

+#else  /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */

+

+/**

+  \brief   Signed Saturate

+  \details Saturates a signed value.

+  \param [in]  value  Value to be saturated

+  \param [in]    sat  Bit position to saturate to (1..32)

+  \return             Saturated value

+ */

+__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat)

+{

+  if ((sat >= 1U) && (sat <= 32U))

+  {

+    const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);

+    const int32_t min = -1 - max ;

+    if (val > max)

+    {

+      return max;

+    }

+    else if (val < min)

+    {

+      return min;

+    }

+  }

+  return val;

+}

+

+/**

+  \brief   Unsigned Saturate

+  \details Saturates an unsigned value.

+  \param [in]  value  Value to be saturated

+  \param [in]    sat  Bit position to saturate to (0..31)

+  \return             Saturated value

+ */

+__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat)

+{

+  if (sat <= 31U)

+  {

+    const uint32_t max = ((1U << sat) - 1U);

+    if (val > (int32_t)max)

+    {

+      return max;

+    }

+    else if (val < 0)

+    {

+      return 0U;

+    }

+  }

+  return (uint32_t)val;

+}

+

+#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \

+           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \

+           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */

+

+

+#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+     (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    )

+/**

+  \brief   Load-Acquire (8 bit)

+  \details Executes a LDAB instruction for 8 bit value.

+  \param [in]    ptr  Pointer to data

+  \return             value of type uint8_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr)

+{

+    uint32_t result;

+

+   __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) );

+   return ((uint8_t) result);

+}

+

+

+/**

+  \brief   Load-Acquire (16 bit)

+  \details Executes a LDAH instruction for 16 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint16_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr)

+{

+    uint32_t result;

+

+   __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) );

+   return ((uint16_t) result);

+}

+

+

+/**

+  \brief   Load-Acquire (32 bit)

+  \details Executes a LDA instruction for 32 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint32_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr)

+{

+    uint32_t result;

+

+   __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) );

+   return(result);

+}

+

+

+/**

+  \brief   Store-Release (8 bit)

+  \details Executes a STLB instruction for 8 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr)

+{

+   __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );

+}

+

+

+/**

+  \brief   Store-Release (16 bit)

+  \details Executes a STLH instruction for 16 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr)

+{

+   __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );

+}

+

+

+/**

+  \brief   Store-Release (32 bit)

+  \details Executes a STL instruction for 32 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+ */

+__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr)

+{

+   __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );

+}

+

+

+/**

+  \brief   Load-Acquire Exclusive (8 bit)

+  \details Executes a LDAB exclusive instruction for 8 bit value.

+  \param [in]    ptr  Pointer to data

+  \return             value of type uint8_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr)

+{

+    uint32_t result;

+

+   __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) );

+   return ((uint8_t) result);

+}

+

+

+/**

+  \brief   Load-Acquire Exclusive (16 bit)

+  \details Executes a LDAH exclusive instruction for 16 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint16_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr)

+{

+    uint32_t result;

+

+   __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) );

+   return ((uint16_t) result);

+}

+

+

+/**

+  \brief   Load-Acquire Exclusive (32 bit)

+  \details Executes a LDA exclusive instruction for 32 bit values.

+  \param [in]    ptr  Pointer to data

+  \return        value of type uint32_t at (*ptr)

+ */

+__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr)

+{

+    uint32_t result;

+

+   __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) );

+   return(result);

+}

+

+

+/**

+  \brief   Store-Release Exclusive (8 bit)

+  \details Executes a STLB exclusive instruction for 8 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr)

+{

+   uint32_t result;

+

+   __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) );

+   return(result);

+}

+

+

+/**

+  \brief   Store-Release Exclusive (16 bit)

+  \details Executes a STLH exclusive instruction for 16 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr)

+{

+   uint32_t result;

+

+   __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) );

+   return(result);

+}

+

+

+/**

+  \brief   Store-Release Exclusive (32 bit)

+  \details Executes a STL exclusive instruction for 32 bit values.

+  \param [in]  value  Value to store

+  \param [in]    ptr  Pointer to location

+  \return          0  Function succeeded

+  \return          1  Function failed

+ */

+__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr)

+{

+   uint32_t result;

+

+   __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) );

+   return(result);

+}

+

+#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */

+

+/*@}*/ /* end of group CMSIS_Core_InstructionInterface */

+

+

+/* ###################  Compiler specific Intrinsics  ########################### */

+/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics

+  Access to dedicated SIMD instructions

+  @{

+*/

+

+#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1))

+

+__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+

+__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+

+__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3)

+{

+  uint32_t result;

+

+  __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );

+  return(result);

+}

+

+#define __SSAT16(ARG1,ARG2) \

+({                          \

+  int32_t __RES, __ARG1 = (ARG1); \

+  __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \

+  __RES; \

+ })

+

+#define __USAT16(ARG1,ARG2) \

+({                          \

+  uint32_t __RES, __ARG1 = (ARG1); \

+  __ASM ("usat16 %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \

+  __RES; \

+ })

+

+__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1)

+{

+  uint32_t result;

+

+  __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1));

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1)

+{

+  uint32_t result;

+

+  __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1));

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMUAD  (uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3)

+{

+  uint32_t result;

+

+  __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3)

+{

+  uint32_t result;

+

+  __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc)

+{

+  union llreg_u{

+    uint32_t w32[2];

+    uint64_t w64;

+  } llr;

+  llr.w64 = acc;

+

+#ifndef __ARMEB__   /* Little endian */

+  __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );

+#else               /* Big endian */

+  __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );

+#endif

+

+  return(llr.w64);

+}

+

+__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc)

+{

+  union llreg_u{

+    uint32_t w32[2];

+    uint64_t w64;

+  } llr;

+  llr.w64 = acc;

+

+#ifndef __ARMEB__   /* Little endian */

+  __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );

+#else               /* Big endian */

+  __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );

+#endif

+

+  return(llr.w64);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMUSD  (uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3)

+{

+  uint32_t result;

+

+  __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3)

+{

+  uint32_t result;

+

+  __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc)

+{

+  union llreg_u{

+    uint32_t w32[2];

+    uint64_t w64;

+  } llr;

+  llr.w64 = acc;

+

+#ifndef __ARMEB__   /* Little endian */

+  __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );

+#else               /* Big endian */

+  __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );

+#endif

+

+  return(llr.w64);

+}

+

+__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc)

+{

+  union llreg_u{

+    uint32_t w32[2];

+    uint64_t w64;

+  } llr;

+  llr.w64 = acc;

+

+#ifndef __ARMEB__   /* Little endian */

+  __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );

+#else               /* Big endian */

+  __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );

+#endif

+

+  return(llr.w64);

+}

+

+__STATIC_FORCEINLINE uint32_t __SEL  (uint32_t op1, uint32_t op2)

+{

+  uint32_t result;

+

+  __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE  int32_t __QADD( int32_t op1,  int32_t op2)

+{

+  int32_t result;

+

+  __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+__STATIC_FORCEINLINE  int32_t __QSUB( int32_t op1,  int32_t op2)

+{

+  int32_t result;

+

+  __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );

+  return(result);

+}

+

+#if 0

+#define __PKHBT(ARG1,ARG2,ARG3) \

+({                          \

+  uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \

+  __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) :  "r" (__ARG1), "r" (__ARG2), "I" (ARG3)  ); \

+  __RES; \

+ })

+

+#define __PKHTB(ARG1,ARG2,ARG3) \

+({                          \

+  uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \

+  if (ARG3 == 0) \

+    __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) :  "r" (__ARG1), "r" (__ARG2)  ); \

+  else \

+    __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) :  "r" (__ARG1), "r" (__ARG2), "I" (ARG3)  ); \

+  __RES; \

+ })

+#endif

+

+#define __PKHBT(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0x0000FFFFUL) |  \

+                                           ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL)  )

+

+#define __PKHTB(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0xFFFF0000UL) |  \

+                                           ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL)  )

+

+__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3)

+{

+ int32_t result;

+

+ __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r"  (op1), "r" (op2), "r" (op3) );

+ return(result);

+}

+

+#endif /* (__ARM_FEATURE_DSP == 1) */

+/*@} end of group CMSIS_SIMD_intrinsics */

+

+

+#pragma GCC diagnostic pop

+

+#endif /* __CMSIS_GCC_H */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_iccarm.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_iccarm.h
new file mode 100644
index 0000000..3c90a2c
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_iccarm.h
@@ -0,0 +1,935 @@
+/**************************************************************************//**

+ * @file     cmsis_iccarm.h

+ * @brief    CMSIS compiler ICCARM (IAR Compiler for Arm) header file

+ * @version  V5.0.7

+ * @date     19. June 2018

+ ******************************************************************************/

+

+//------------------------------------------------------------------------------

+//

+// Copyright (c) 2017-2018 IAR Systems

+//

+// Licensed under the Apache License, Version 2.0 (the "License")

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+//     http://www.apache.org/licenses/LICENSE-2.0

+//

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+//

+//------------------------------------------------------------------------------

+

+

+#ifndef __CMSIS_ICCARM_H__

+#define __CMSIS_ICCARM_H__

+

+#ifndef __ICCARM__

+  #error This file should only be compiled by ICCARM

+#endif

+

+#pragma system_include

+

+#define __IAR_FT _Pragma("inline=forced") __intrinsic

+

+#if (__VER__ >= 8000000)

+  #define __ICCARM_V8 1

+#else

+  #define __ICCARM_V8 0

+#endif

+

+#ifndef __ALIGNED

+  #if __ICCARM_V8

+    #define __ALIGNED(x) __attribute__((aligned(x)))

+  #elif (__VER__ >= 7080000)

+    /* Needs IAR language extensions */

+    #define __ALIGNED(x) __attribute__((aligned(x)))

+  #else

+    #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored.

+    #define __ALIGNED(x)

+  #endif

+#endif

+

+

+/* Define compiler macros for CPU architecture, used in CMSIS 5.

+ */

+#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__

+/* Macros already defined */

+#else

+  #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__)

+    #define __ARM_ARCH_8M_MAIN__ 1

+  #elif defined(__ARM8M_BASELINE__)

+    #define __ARM_ARCH_8M_BASE__ 1

+  #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M'

+    #if __ARM_ARCH == 6

+      #define __ARM_ARCH_6M__ 1

+    #elif __ARM_ARCH == 7

+      #if __ARM_FEATURE_DSP

+        #define __ARM_ARCH_7EM__ 1

+      #else

+        #define __ARM_ARCH_7M__ 1

+      #endif

+    #endif /* __ARM_ARCH */

+  #endif /* __ARM_ARCH_PROFILE == 'M' */

+#endif

+

+/* Alternativ core deduction for older ICCARM's */

+#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \

+    !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__)

+  #if defined(__ARM6M__) && (__CORE__ == __ARM6M__)

+    #define __ARM_ARCH_6M__ 1

+  #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__)

+    #define __ARM_ARCH_7M__ 1

+  #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__)

+    #define __ARM_ARCH_7EM__  1

+  #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__)

+    #define __ARM_ARCH_8M_BASE__ 1

+  #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__)

+    #define __ARM_ARCH_8M_MAIN__ 1

+  #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__)

+    #define __ARM_ARCH_8M_MAIN__ 1

+  #else

+    #error "Unknown target."

+  #endif

+#endif

+

+

+

+#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1

+  #define __IAR_M0_FAMILY  1

+#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1

+  #define __IAR_M0_FAMILY  1

+#else

+  #define __IAR_M0_FAMILY  0

+#endif

+

+

+#ifndef __ASM

+  #define __ASM __asm

+#endif

+

+#ifndef __INLINE

+  #define __INLINE inline

+#endif

+

+#ifndef   __NO_RETURN

+  #if __ICCARM_V8

+    #define __NO_RETURN __attribute__((__noreturn__))

+  #else

+    #define __NO_RETURN _Pragma("object_attribute=__noreturn")

+  #endif

+#endif

+

+#ifndef   __PACKED

+  #if __ICCARM_V8

+    #define __PACKED __attribute__((packed, aligned(1)))

+  #else

+    /* Needs IAR language extensions */

+    #define __PACKED __packed

+  #endif

+#endif

+

+#ifndef   __PACKED_STRUCT

+  #if __ICCARM_V8

+    #define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))

+  #else

+    /* Needs IAR language extensions */

+    #define __PACKED_STRUCT __packed struct

+  #endif

+#endif

+

+#ifndef   __PACKED_UNION

+  #if __ICCARM_V8

+    #define __PACKED_UNION union __attribute__((packed, aligned(1)))

+  #else

+    /* Needs IAR language extensions */

+    #define __PACKED_UNION __packed union

+  #endif

+#endif

+

+#ifndef   __RESTRICT

+  #define __RESTRICT            __restrict

+#endif

+

+#ifndef   __STATIC_INLINE

+  #define __STATIC_INLINE       static inline

+#endif

+

+#ifndef   __FORCEINLINE

+  #define __FORCEINLINE         _Pragma("inline=forced")

+#endif

+

+#ifndef   __STATIC_FORCEINLINE

+  #define __STATIC_FORCEINLINE  __FORCEINLINE __STATIC_INLINE

+#endif

+

+#ifndef __UNALIGNED_UINT16_READ

+#pragma language=save

+#pragma language=extended

+__IAR_FT uint16_t __iar_uint16_read(void const *ptr)

+{

+  return *(__packed uint16_t*)(ptr);

+}

+#pragma language=restore

+#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR)

+#endif

+

+

+#ifndef __UNALIGNED_UINT16_WRITE

+#pragma language=save

+#pragma language=extended

+__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val)

+{

+  *(__packed uint16_t*)(ptr) = val;;

+}

+#pragma language=restore

+#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL)

+#endif

+

+#ifndef __UNALIGNED_UINT32_READ

+#pragma language=save

+#pragma language=extended

+__IAR_FT uint32_t __iar_uint32_read(void const *ptr)

+{

+  return *(__packed uint32_t*)(ptr);

+}

+#pragma language=restore

+#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR)

+#endif

+

+#ifndef __UNALIGNED_UINT32_WRITE

+#pragma language=save

+#pragma language=extended

+__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val)

+{

+  *(__packed uint32_t*)(ptr) = val;;

+}

+#pragma language=restore

+#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL)

+#endif

+

+#ifndef __UNALIGNED_UINT32   /* deprecated */

+#pragma language=save

+#pragma language=extended

+__packed struct  __iar_u32 { uint32_t v; };

+#pragma language=restore

+#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v)

+#endif

+

+#ifndef   __USED

+  #if __ICCARM_V8

+    #define __USED __attribute__((used))

+  #else

+    #define __USED _Pragma("__root")

+  #endif

+#endif

+

+#ifndef   __WEAK

+  #if __ICCARM_V8

+    #define __WEAK __attribute__((weak))

+  #else

+    #define __WEAK _Pragma("__weak")

+  #endif

+#endif

+

+

+#ifndef __ICCARM_INTRINSICS_VERSION__

+  #define __ICCARM_INTRINSICS_VERSION__  0

+#endif

+

+#if __ICCARM_INTRINSICS_VERSION__ == 2

+

+  #if defined(__CLZ)

+    #undef __CLZ

+  #endif

+  #if defined(__REVSH)

+    #undef __REVSH

+  #endif

+  #if defined(__RBIT)

+    #undef __RBIT

+  #endif

+  #if defined(__SSAT)

+    #undef __SSAT

+  #endif

+  #if defined(__USAT)

+    #undef __USAT

+  #endif

+

+  #include "iccarm_builtin.h"

+

+  #define __disable_fault_irq __iar_builtin_disable_fiq

+  #define __disable_irq       __iar_builtin_disable_interrupt

+  #define __enable_fault_irq  __iar_builtin_enable_fiq

+  #define __enable_irq        __iar_builtin_enable_interrupt

+  #define __arm_rsr           __iar_builtin_rsr

+  #define __arm_wsr           __iar_builtin_wsr

+

+

+  #define __get_APSR()                (__arm_rsr("APSR"))

+  #define __get_BASEPRI()             (__arm_rsr("BASEPRI"))

+  #define __get_CONTROL()             (__arm_rsr("CONTROL"))

+  #define __get_FAULTMASK()           (__arm_rsr("FAULTMASK"))

+

+  #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \

+       (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )

+    #define __get_FPSCR()             (__arm_rsr("FPSCR"))

+    #define __set_FPSCR(VALUE)        (__arm_wsr("FPSCR", (VALUE)))

+  #else

+    #define __get_FPSCR()             ( 0 )

+    #define __set_FPSCR(VALUE)        ((void)VALUE)

+  #endif

+

+  #define __get_IPSR()                (__arm_rsr("IPSR"))

+  #define __get_MSP()                 (__arm_rsr("MSP"))

+  #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+       (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+    // without main extensions, the non-secure MSPLIM is RAZ/WI

+    #define __get_MSPLIM()            (0U)

+  #else

+    #define __get_MSPLIM()            (__arm_rsr("MSPLIM"))

+  #endif

+  #define __get_PRIMASK()             (__arm_rsr("PRIMASK"))

+  #define __get_PSP()                 (__arm_rsr("PSP"))

+

+  #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+       (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+    // without main extensions, the non-secure PSPLIM is RAZ/WI

+    #define __get_PSPLIM()            (0U)

+  #else

+    #define __get_PSPLIM()            (__arm_rsr("PSPLIM"))

+  #endif

+

+  #define __get_xPSR()                (__arm_rsr("xPSR"))

+

+  #define __set_BASEPRI(VALUE)        (__arm_wsr("BASEPRI", (VALUE)))

+  #define __set_BASEPRI_MAX(VALUE)    (__arm_wsr("BASEPRI_MAX", (VALUE)))

+  #define __set_CONTROL(VALUE)        (__arm_wsr("CONTROL", (VALUE)))

+  #define __set_FAULTMASK(VALUE)      (__arm_wsr("FAULTMASK", (VALUE)))

+  #define __set_MSP(VALUE)            (__arm_wsr("MSP", (VALUE)))

+

+  #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+       (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+    // without main extensions, the non-secure MSPLIM is RAZ/WI

+    #define __set_MSPLIM(VALUE)       ((void)(VALUE))

+  #else

+    #define __set_MSPLIM(VALUE)       (__arm_wsr("MSPLIM", (VALUE)))

+  #endif

+  #define __set_PRIMASK(VALUE)        (__arm_wsr("PRIMASK", (VALUE)))

+  #define __set_PSP(VALUE)            (__arm_wsr("PSP", (VALUE)))

+  #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+       (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+    // without main extensions, the non-secure PSPLIM is RAZ/WI

+    #define __set_PSPLIM(VALUE)       ((void)(VALUE))

+  #else

+    #define __set_PSPLIM(VALUE)       (__arm_wsr("PSPLIM", (VALUE)))

+  #endif

+

+  #define __TZ_get_CONTROL_NS()       (__arm_rsr("CONTROL_NS"))

+  #define __TZ_set_CONTROL_NS(VALUE)  (__arm_wsr("CONTROL_NS", (VALUE)))

+  #define __TZ_get_PSP_NS()           (__arm_rsr("PSP_NS"))

+  #define __TZ_set_PSP_NS(VALUE)      (__arm_wsr("PSP_NS", (VALUE)))

+  #define __TZ_get_MSP_NS()           (__arm_rsr("MSP_NS"))

+  #define __TZ_set_MSP_NS(VALUE)      (__arm_wsr("MSP_NS", (VALUE)))

+  #define __TZ_get_SP_NS()            (__arm_rsr("SP_NS"))

+  #define __TZ_set_SP_NS(VALUE)       (__arm_wsr("SP_NS", (VALUE)))

+  #define __TZ_get_PRIMASK_NS()       (__arm_rsr("PRIMASK_NS"))

+  #define __TZ_set_PRIMASK_NS(VALUE)  (__arm_wsr("PRIMASK_NS", (VALUE)))

+  #define __TZ_get_BASEPRI_NS()       (__arm_rsr("BASEPRI_NS"))

+  #define __TZ_set_BASEPRI_NS(VALUE)  (__arm_wsr("BASEPRI_NS", (VALUE)))

+  #define __TZ_get_FAULTMASK_NS()     (__arm_rsr("FAULTMASK_NS"))

+  #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE)))

+

+  #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+       (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))

+    // without main extensions, the non-secure PSPLIM is RAZ/WI

+    #define __TZ_get_PSPLIM_NS()      (0U)

+    #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE))

+  #else

+    #define __TZ_get_PSPLIM_NS()      (__arm_rsr("PSPLIM_NS"))

+    #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE)))

+  #endif

+

+  #define __TZ_get_MSPLIM_NS()        (__arm_rsr("MSPLIM_NS"))

+  #define __TZ_set_MSPLIM_NS(VALUE)   (__arm_wsr("MSPLIM_NS", (VALUE)))

+

+  #define __NOP     __iar_builtin_no_operation

+

+  #define __CLZ     __iar_builtin_CLZ

+  #define __CLREX   __iar_builtin_CLREX

+

+  #define __DMB     __iar_builtin_DMB

+  #define __DSB     __iar_builtin_DSB

+  #define __ISB     __iar_builtin_ISB

+

+  #define __LDREXB  __iar_builtin_LDREXB

+  #define __LDREXH  __iar_builtin_LDREXH

+  #define __LDREXW  __iar_builtin_LDREX

+

+  #define __RBIT    __iar_builtin_RBIT

+  #define __REV     __iar_builtin_REV

+  #define __REV16   __iar_builtin_REV16

+

+  __IAR_FT int16_t __REVSH(int16_t val)

+  {

+    return (int16_t) __iar_builtin_REVSH(val);

+  }

+

+  #define __ROR     __iar_builtin_ROR

+  #define __RRX     __iar_builtin_RRX

+

+  #define __SEV     __iar_builtin_SEV

+

+  #if !__IAR_M0_FAMILY

+    #define __SSAT    __iar_builtin_SSAT

+  #endif

+

+  #define __STREXB  __iar_builtin_STREXB

+  #define __STREXH  __iar_builtin_STREXH

+  #define __STREXW  __iar_builtin_STREX

+

+  #if !__IAR_M0_FAMILY

+    #define __USAT    __iar_builtin_USAT

+  #endif

+

+  #define __WFE     __iar_builtin_WFE

+  #define __WFI     __iar_builtin_WFI

+

+  #if __ARM_MEDIA__

+    #define __SADD8   __iar_builtin_SADD8

+    #define __QADD8   __iar_builtin_QADD8

+    #define __SHADD8  __iar_builtin_SHADD8

+    #define __UADD8   __iar_builtin_UADD8

+    #define __UQADD8  __iar_builtin_UQADD8

+    #define __UHADD8  __iar_builtin_UHADD8

+    #define __SSUB8   __iar_builtin_SSUB8

+    #define __QSUB8   __iar_builtin_QSUB8

+    #define __SHSUB8  __iar_builtin_SHSUB8

+    #define __USUB8   __iar_builtin_USUB8

+    #define __UQSUB8  __iar_builtin_UQSUB8

+    #define __UHSUB8  __iar_builtin_UHSUB8

+    #define __SADD16  __iar_builtin_SADD16

+    #define __QADD16  __iar_builtin_QADD16

+    #define __SHADD16 __iar_builtin_SHADD16

+    #define __UADD16  __iar_builtin_UADD16

+    #define __UQADD16 __iar_builtin_UQADD16

+    #define __UHADD16 __iar_builtin_UHADD16

+    #define __SSUB16  __iar_builtin_SSUB16

+    #define __QSUB16  __iar_builtin_QSUB16

+    #define __SHSUB16 __iar_builtin_SHSUB16

+    #define __USUB16  __iar_builtin_USUB16

+    #define __UQSUB16 __iar_builtin_UQSUB16

+    #define __UHSUB16 __iar_builtin_UHSUB16

+    #define __SASX    __iar_builtin_SASX

+    #define __QASX    __iar_builtin_QASX

+    #define __SHASX   __iar_builtin_SHASX

+    #define __UASX    __iar_builtin_UASX

+    #define __UQASX   __iar_builtin_UQASX

+    #define __UHASX   __iar_builtin_UHASX

+    #define __SSAX    __iar_builtin_SSAX

+    #define __QSAX    __iar_builtin_QSAX

+    #define __SHSAX   __iar_builtin_SHSAX

+    #define __USAX    __iar_builtin_USAX

+    #define __UQSAX   __iar_builtin_UQSAX

+    #define __UHSAX   __iar_builtin_UHSAX

+    #define __USAD8   __iar_builtin_USAD8

+    #define __USADA8  __iar_builtin_USADA8

+    #define __SSAT16  __iar_builtin_SSAT16

+    #define __USAT16  __iar_builtin_USAT16

+    #define __UXTB16  __iar_builtin_UXTB16

+    #define __UXTAB16 __iar_builtin_UXTAB16

+    #define __SXTB16  __iar_builtin_SXTB16

+    #define __SXTAB16 __iar_builtin_SXTAB16

+    #define __SMUAD   __iar_builtin_SMUAD

+    #define __SMUADX  __iar_builtin_SMUADX

+    #define __SMMLA   __iar_builtin_SMMLA

+    #define __SMLAD   __iar_builtin_SMLAD

+    #define __SMLADX  __iar_builtin_SMLADX

+    #define __SMLALD  __iar_builtin_SMLALD

+    #define __SMLALDX __iar_builtin_SMLALDX

+    #define __SMUSD   __iar_builtin_SMUSD

+    #define __SMUSDX  __iar_builtin_SMUSDX

+    #define __SMLSD   __iar_builtin_SMLSD

+    #define __SMLSDX  __iar_builtin_SMLSDX

+    #define __SMLSLD  __iar_builtin_SMLSLD

+    #define __SMLSLDX __iar_builtin_SMLSLDX

+    #define __SEL     __iar_builtin_SEL

+    #define __QADD    __iar_builtin_QADD

+    #define __QSUB    __iar_builtin_QSUB

+    #define __PKHBT   __iar_builtin_PKHBT

+    #define __PKHTB   __iar_builtin_PKHTB

+  #endif

+

+#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */

+

+  #if __IAR_M0_FAMILY

+   /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */

+    #define __CLZ  __cmsis_iar_clz_not_active

+    #define __SSAT __cmsis_iar_ssat_not_active

+    #define __USAT __cmsis_iar_usat_not_active

+    #define __RBIT __cmsis_iar_rbit_not_active

+    #define __get_APSR  __cmsis_iar_get_APSR_not_active

+  #endif

+

+

+  #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \

+         (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     ))

+    #define __get_FPSCR __cmsis_iar_get_FPSR_not_active

+    #define __set_FPSCR __cmsis_iar_set_FPSR_not_active

+  #endif

+

+  #ifdef __INTRINSICS_INCLUDED

+  #error intrinsics.h is already included previously!

+  #endif

+

+  #include <intrinsics.h>

+

+  #if __IAR_M0_FAMILY

+   /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */

+    #undef __CLZ

+    #undef __SSAT

+    #undef __USAT

+    #undef __RBIT

+    #undef __get_APSR

+

+    __STATIC_INLINE uint8_t __CLZ(uint32_t data)

+    {

+      if (data == 0U) { return 32U; }

+

+      uint32_t count = 0U;

+      uint32_t mask = 0x80000000U;

+

+      while ((data & mask) == 0U)

+      {

+        count += 1U;

+        mask = mask >> 1U;

+      }

+      return count;

+    }

+

+    __STATIC_INLINE uint32_t __RBIT(uint32_t v)

+    {

+      uint8_t sc = 31U;

+      uint32_t r = v;

+      for (v >>= 1U; v; v >>= 1U)

+      {

+        r <<= 1U;

+        r |= v & 1U;

+        sc--;

+      }

+      return (r << sc);

+    }

+

+    __STATIC_INLINE  uint32_t __get_APSR(void)

+    {

+      uint32_t res;

+      __asm("MRS      %0,APSR" : "=r" (res));

+      return res;

+    }

+

+  #endif

+

+  #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \

+         (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     ))

+    #undef __get_FPSCR

+    #undef __set_FPSCR

+    #define __get_FPSCR()       (0)

+    #define __set_FPSCR(VALUE)  ((void)VALUE)

+  #endif

+

+  #pragma diag_suppress=Pe940

+  #pragma diag_suppress=Pe177

+

+  #define __enable_irq    __enable_interrupt

+  #define __disable_irq   __disable_interrupt

+  #define __NOP           __no_operation

+

+  #define __get_xPSR      __get_PSR

+

+  #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0)

+

+    __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr)

+    {

+      return __LDREX((unsigned long *)ptr);

+    }

+

+    __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr)

+    {

+      return __STREX(value, (unsigned long *)ptr);

+    }

+  #endif

+

+

+  /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */

+  #if (__CORTEX_M >= 0x03)

+

+    __IAR_FT uint32_t __RRX(uint32_t value)

+    {

+      uint32_t result;

+      __ASM("RRX      %0, %1" : "=r"(result) : "r" (value) : "cc");

+      return(result);

+    }

+

+    __IAR_FT void __set_BASEPRI_MAX(uint32_t value)

+    {

+      __asm volatile("MSR      BASEPRI_MAX,%0"::"r" (value));

+    }

+

+

+    #define __enable_fault_irq  __enable_fiq

+    #define __disable_fault_irq __disable_fiq

+

+

+  #endif /* (__CORTEX_M >= 0x03) */

+

+  __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2)

+  {

+    return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2));

+  }

+

+  #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+       (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    )

+

+   __IAR_FT uint32_t __get_MSPLIM(void)

+    {

+      uint32_t res;

+    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))

+      // without main extensions, the non-secure MSPLIM is RAZ/WI

+      res = 0U;

+    #else

+      __asm volatile("MRS      %0,MSPLIM" : "=r" (res));

+    #endif

+      return res;

+    }

+

+    __IAR_FT void   __set_MSPLIM(uint32_t value)

+    {

+    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))

+      // without main extensions, the non-secure MSPLIM is RAZ/WI

+      (void)value;

+    #else

+      __asm volatile("MSR      MSPLIM,%0" :: "r" (value));

+    #endif

+    }

+

+    __IAR_FT uint32_t __get_PSPLIM(void)

+    {

+      uint32_t res;

+    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))

+      // without main extensions, the non-secure PSPLIM is RAZ/WI

+      res = 0U;

+    #else

+      __asm volatile("MRS      %0,PSPLIM" : "=r" (res));

+    #endif

+      return res;

+    }

+

+    __IAR_FT void   __set_PSPLIM(uint32_t value)

+    {

+    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))

+      // without main extensions, the non-secure PSPLIM is RAZ/WI

+      (void)value;

+    #else

+      __asm volatile("MSR      PSPLIM,%0" :: "r" (value));

+    #endif

+    }

+

+    __IAR_FT uint32_t __TZ_get_CONTROL_NS(void)

+    {

+      uint32_t res;

+      __asm volatile("MRS      %0,CONTROL_NS" : "=r" (res));

+      return res;

+    }

+

+    __IAR_FT void   __TZ_set_CONTROL_NS(uint32_t value)

+    {

+      __asm volatile("MSR      CONTROL_NS,%0" :: "r" (value));

+    }

+

+    __IAR_FT uint32_t   __TZ_get_PSP_NS(void)

+    {

+      uint32_t res;

+      __asm volatile("MRS      %0,PSP_NS" : "=r" (res));

+      return res;

+    }

+

+    __IAR_FT void   __TZ_set_PSP_NS(uint32_t value)

+    {

+      __asm volatile("MSR      PSP_NS,%0" :: "r" (value));

+    }

+

+    __IAR_FT uint32_t   __TZ_get_MSP_NS(void)

+    {

+      uint32_t res;

+      __asm volatile("MRS      %0,MSP_NS" : "=r" (res));

+      return res;

+    }

+

+    __IAR_FT void   __TZ_set_MSP_NS(uint32_t value)

+    {

+      __asm volatile("MSR      MSP_NS,%0" :: "r" (value));

+    }

+

+    __IAR_FT uint32_t   __TZ_get_SP_NS(void)

+    {

+      uint32_t res;

+      __asm volatile("MRS      %0,SP_NS" : "=r" (res));

+      return res;

+    }

+    __IAR_FT void   __TZ_set_SP_NS(uint32_t value)

+    {

+      __asm volatile("MSR      SP_NS,%0" :: "r" (value));

+    }

+

+    __IAR_FT uint32_t   __TZ_get_PRIMASK_NS(void)

+    {

+      uint32_t res;

+      __asm volatile("MRS      %0,PRIMASK_NS" : "=r" (res));

+      return res;

+    }

+

+    __IAR_FT void   __TZ_set_PRIMASK_NS(uint32_t value)

+    {

+      __asm volatile("MSR      PRIMASK_NS,%0" :: "r" (value));

+    }

+

+    __IAR_FT uint32_t   __TZ_get_BASEPRI_NS(void)

+    {

+      uint32_t res;

+      __asm volatile("MRS      %0,BASEPRI_NS" : "=r" (res));

+      return res;

+    }

+

+    __IAR_FT void   __TZ_set_BASEPRI_NS(uint32_t value)

+    {

+      __asm volatile("MSR      BASEPRI_NS,%0" :: "r" (value));

+    }

+

+    __IAR_FT uint32_t   __TZ_get_FAULTMASK_NS(void)

+    {

+      uint32_t res;

+      __asm volatile("MRS      %0,FAULTMASK_NS" : "=r" (res));

+      return res;

+    }

+

+    __IAR_FT void   __TZ_set_FAULTMASK_NS(uint32_t value)

+    {

+      __asm volatile("MSR      FAULTMASK_NS,%0" :: "r" (value));

+    }

+

+    __IAR_FT uint32_t   __TZ_get_PSPLIM_NS(void)

+    {

+      uint32_t res;

+    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))

+      // without main extensions, the non-secure PSPLIM is RAZ/WI

+      res = 0U;

+    #else

+      __asm volatile("MRS      %0,PSPLIM_NS" : "=r" (res));

+    #endif

+      return res;

+    }

+

+    __IAR_FT void   __TZ_set_PSPLIM_NS(uint32_t value)

+    {

+    #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \

+         (!defined (__ARM_FEATURE_CMSE  ) || (__ARM_FEATURE_CMSE   < 3)))

+      // without main extensions, the non-secure PSPLIM is RAZ/WI

+      (void)value;

+    #else

+      __asm volatile("MSR      PSPLIM_NS,%0" :: "r" (value));

+    #endif

+    }

+

+    __IAR_FT uint32_t   __TZ_get_MSPLIM_NS(void)

+    {

+      uint32_t res;

+      __asm volatile("MRS      %0,MSPLIM_NS" : "=r" (res));

+      return res;

+    }

+

+    __IAR_FT void   __TZ_set_MSPLIM_NS(uint32_t value)

+    {

+      __asm volatile("MSR      MSPLIM_NS,%0" :: "r" (value));

+    }

+

+  #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */

+

+#endif   /* __ICCARM_INTRINSICS_VERSION__ == 2 */

+

+#define __BKPT(value)    __asm volatile ("BKPT     %0" : : "i"(value))

+

+#if __IAR_M0_FAMILY

+  __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat)

+  {

+    if ((sat >= 1U) && (sat <= 32U))

+    {

+      const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);

+      const int32_t min = -1 - max ;

+      if (val > max)

+      {

+        return max;

+      }

+      else if (val < min)

+      {

+        return min;

+      }

+    }

+    return val;

+  }

+

+  __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat)

+  {

+    if (sat <= 31U)

+    {

+      const uint32_t max = ((1U << sat) - 1U);

+      if (val > (int32_t)max)

+      {

+        return max;

+      }

+      else if (val < 0)

+      {

+        return 0U;

+      }

+    }

+    return (uint32_t)val;

+  }

+#endif

+

+#if (__CORTEX_M >= 0x03)   /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */

+

+  __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr)

+  {

+    uint32_t res;

+    __ASM("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory");

+    return ((uint8_t)res);

+  }

+

+  __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr)

+  {

+    uint32_t res;

+    __ASM("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory");

+    return ((uint16_t)res);

+  }

+

+  __IAR_FT uint32_t __LDRT(volatile uint32_t *addr)

+  {

+    uint32_t res;

+    __ASM("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory");

+    return res;

+  }

+

+  __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr)

+  {

+    __ASM("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory");

+  }

+

+  __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr)

+  {

+    __ASM("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory");

+  }

+

+  __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr)

+  {

+    __ASM("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory");

+  }

+

+#endif /* (__CORTEX_M >= 0x03) */

+

+#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \

+     (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    )

+

+

+  __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr)

+  {

+    uint32_t res;

+    __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");

+    return ((uint8_t)res);

+  }

+

+  __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr)

+  {

+    uint32_t res;

+    __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");

+    return ((uint16_t)res);

+  }

+

+  __IAR_FT uint32_t __LDA(volatile uint32_t *ptr)

+  {

+    uint32_t res;

+    __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");

+    return res;

+  }

+

+  __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr)

+  {

+    __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory");

+  }

+

+  __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr)

+  {

+    __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory");

+  }

+

+  __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr)

+  {

+    __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory");

+  }

+

+  __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr)

+  {

+    uint32_t res;

+    __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");

+    return ((uint8_t)res);

+  }

+

+  __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr)

+  {

+    uint32_t res;

+    __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");

+    return ((uint16_t)res);

+  }

+

+  __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr)

+  {

+    uint32_t res;

+    __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");

+    return res;

+  }

+

+  __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr)

+  {

+    uint32_t res;

+    __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory");

+    return res;

+  }

+

+  __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr)

+  {

+    uint32_t res;

+    __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory");

+    return res;

+  }

+

+  __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr)

+  {

+    uint32_t res;

+    __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory");

+    return res;

+  }

+

+#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */

+

+#undef __IAR_FT

+#undef __IAR_M0_FAMILY

+#undef __ICCARM_V8

+

+#pragma diag_default=Pe940

+#pragma diag_default=Pe177

+

+#endif /* __CMSIS_ICCARM_H__ */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_version.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_version.h
new file mode 100644
index 0000000..ae3f2e3
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/cmsis_version.h
@@ -0,0 +1,39 @@
+/**************************************************************************//**

+ * @file     cmsis_version.h

+ * @brief    CMSIS Core(M) Version definitions

+ * @version  V5.0.2

+ * @date     19. April 2017

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2017 ARM Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CMSIS_VERSION_H

+#define __CMSIS_VERSION_H

+

+/*  CMSIS Version definitions */

+#define __CM_CMSIS_VERSION_MAIN  ( 5U)                                      /*!< [31:16] CMSIS Core(M) main version */

+#define __CM_CMSIS_VERSION_SUB   ( 1U)                                      /*!< [15:0]  CMSIS Core(M) sub version */

+#define __CM_CMSIS_VERSION       ((__CM_CMSIS_VERSION_MAIN << 16U) | \

+                                   __CM_CMSIS_VERSION_SUB           )       /*!< CMSIS Core(M) version number */

+#endif

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_armv8mbl.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_armv8mbl.h
new file mode 100644
index 0000000..ec76ab2
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_armv8mbl.h
@@ -0,0 +1,1918 @@
+/**************************************************************************//**

+ * @file     core_armv8mbl.h

+ * @brief    CMSIS Armv8-M Baseline Core Peripheral Access Layer Header File

+ * @version  V5.0.7

+ * @date     22. June 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_ARMV8MBL_H_GENERIC

+#define __CORE_ARMV8MBL_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup Cortex_ARMv8MBL

+  @{

+ */

+

+#include "cmsis_version.h"

+

+/*  CMSIS definitions */

+#define __ARMv8MBL_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)                   /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __ARMv8MBL_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)                    /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __ARMv8MBL_CMSIS_VERSION       ((__ARMv8MBL_CMSIS_VERSION_MAIN << 16U) | \

+                                         __ARMv8MBL_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_M                     ( 2U)                                            /*!< Cortex-M Core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    This core does not support an FPU at all

+*/

+#define __FPU_USED       0U

+

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined __ARM_PCS_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined __TI_VFP_SUPPORT__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_ARMV8MBL_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_ARMV8MBL_H_DEPENDANT

+#define __CORE_ARMV8MBL_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __ARMv8MBL_REV

+    #define __ARMv8MBL_REV               0x0000U

+    #warning "__ARMv8MBL_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __FPU_PRESENT

+    #define __FPU_PRESENT             0U

+    #warning "__FPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MPU_PRESENT

+    #define __MPU_PRESENT             0U

+    #warning "__MPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __SAUREGION_PRESENT

+    #define __SAUREGION_PRESENT       0U

+    #warning "__SAUREGION_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __VTOR_PRESENT

+    #define __VTOR_PRESENT            0U

+    #warning "__VTOR_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          2U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+

+  #ifndef __ETM_PRESENT

+    #define __ETM_PRESENT             0U

+    #warning "__ETM_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MTB_PRESENT

+    #define __MTB_PRESENT             0U

+    #warning "__MTB_PRESENT not defined in device header file; using default!"

+  #endif

+

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group ARMv8MBL */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+  - Core Debug Register

+  - Core MPU Register

+  - Core SAU Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:28;              /*!< bit:  0..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */

+    uint32_t _reserved1:3;               /*!< bit: 25..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t nPRIV:1;                    /*!< bit:      0  Execution privilege in Thread mode */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack-pointer select */

+    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+#define CONTROL_nPRIV_Pos                   0U                                            /*!< CONTROL: nPRIV Position */

+#define CONTROL_nPRIV_Msk                  (1UL /*<< CONTROL_nPRIV_Pos*/)                 /*!< CONTROL: nPRIV Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[16U];              /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[16U];

+  __IOM uint32_t ICER[16U];              /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[16U];

+  __IOM uint32_t ISPR[16U];              /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[16U];

+  __IOM uint32_t ICPR[16U];              /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[16U];

+  __IOM uint32_t IABR[16U];              /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */

+        uint32_t RESERVED4[16U];

+  __IOM uint32_t ITNS[16U];              /*!< Offset: 0x280 (R/W)  Interrupt Non-Secure State Register */

+        uint32_t RESERVED5[16U];

+  __IOM uint32_t IPR[124U];              /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */

+}  NVIC_Type;

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+  __IOM uint32_t VTOR;                   /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */

+#else

+        uint32_t RESERVED0;

+#endif

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+        uint32_t RESERVED1;

+  __IOM uint32_t SHPR[2U];               /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_PENDNMISET_Pos            31U                                            /*!< SCB ICSR: PENDNMISET Position */

+#define SCB_ICSR_PENDNMISET_Msk            (1UL << SCB_ICSR_PENDNMISET_Pos)               /*!< SCB ICSR: PENDNMISET Mask */

+

+#define SCB_ICSR_NMIPENDSET_Pos            SCB_ICSR_PENDNMISET_Pos                        /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */

+#define SCB_ICSR_NMIPENDSET_Msk            SCB_ICSR_PENDNMISET_Msk                        /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */

+

+#define SCB_ICSR_PENDNMICLR_Pos            30U                                            /*!< SCB ICSR: PENDNMICLR Position */

+#define SCB_ICSR_PENDNMICLR_Msk            (1UL << SCB_ICSR_PENDNMICLR_Pos)               /*!< SCB ICSR: PENDNMICLR Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_STTNS_Pos                 24U                                            /*!< SCB ICSR: STTNS Position (Security Extension) */

+#define SCB_ICSR_STTNS_Msk                 (1UL << SCB_ICSR_STTNS_Pos)                    /*!< SCB ICSR: STTNS Mask (Security Extension) */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_RETTOBASE_Pos             11U                                            /*!< SCB ICSR: RETTOBASE Position */

+#define SCB_ICSR_RETTOBASE_Msk             (1UL << SCB_ICSR_RETTOBASE_Pos)                /*!< SCB ICSR: RETTOBASE Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+/* SCB Vector Table Offset Register Definitions */

+#define SCB_VTOR_TBLOFF_Pos                 7U                                            /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos)           /*!< SCB VTOR: TBLOFF Mask */

+#endif

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_PRIS_Pos                 14U                                            /*!< SCB AIRCR: PRIS Position */

+#define SCB_AIRCR_PRIS_Msk                 (1UL << SCB_AIRCR_PRIS_Pos)                    /*!< SCB AIRCR: PRIS Mask */

+

+#define SCB_AIRCR_BFHFNMINS_Pos            13U                                            /*!< SCB AIRCR: BFHFNMINS Position */

+#define SCB_AIRCR_BFHFNMINS_Msk            (1UL << SCB_AIRCR_BFHFNMINS_Pos)               /*!< SCB AIRCR: BFHFNMINS Mask */

+

+#define SCB_AIRCR_SYSRESETREQS_Pos          3U                                            /*!< SCB AIRCR: SYSRESETREQS Position */

+#define SCB_AIRCR_SYSRESETREQS_Msk         (1UL << SCB_AIRCR_SYSRESETREQS_Pos)            /*!< SCB AIRCR: SYSRESETREQS Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEPS_Pos              3U                                            /*!< SCB SCR: SLEEPDEEPS Position */

+#define SCB_SCR_SLEEPDEEPS_Msk             (1UL << SCB_SCR_SLEEPDEEPS_Pos)                /*!< SCB SCR: SLEEPDEEPS Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_BP_Pos                     18U                                            /*!< SCB CCR: BP Position */

+#define SCB_CCR_BP_Msk                     (1UL << SCB_CCR_BP_Pos)                        /*!< SCB CCR: BP Mask */

+

+#define SCB_CCR_IC_Pos                     17U                                            /*!< SCB CCR: IC Position */

+#define SCB_CCR_IC_Msk                     (1UL << SCB_CCR_IC_Pos)                        /*!< SCB CCR: IC Mask */

+

+#define SCB_CCR_DC_Pos                     16U                                            /*!< SCB CCR: DC Position */

+#define SCB_CCR_DC_Msk                     (1UL << SCB_CCR_DC_Pos)                        /*!< SCB CCR: DC Mask */

+

+#define SCB_CCR_STKOFHFNMIGN_Pos           10U                                            /*!< SCB CCR: STKOFHFNMIGN Position */

+#define SCB_CCR_STKOFHFNMIGN_Msk           (1UL << SCB_CCR_STKOFHFNMIGN_Pos)              /*!< SCB CCR: STKOFHFNMIGN Mask */

+

+#define SCB_CCR_BFHFNMIGN_Pos               8U                                            /*!< SCB CCR: BFHFNMIGN Position */

+#define SCB_CCR_BFHFNMIGN_Msk              (1UL << SCB_CCR_BFHFNMIGN_Pos)                 /*!< SCB CCR: BFHFNMIGN Mask */

+

+#define SCB_CCR_DIV_0_TRP_Pos               4U                                            /*!< SCB CCR: DIV_0_TRP Position */

+#define SCB_CCR_DIV_0_TRP_Msk              (1UL << SCB_CCR_DIV_0_TRP_Pos)                 /*!< SCB CCR: DIV_0_TRP Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+#define SCB_CCR_USERSETMPEND_Pos            1U                                            /*!< SCB CCR: USERSETMPEND Position */

+#define SCB_CCR_USERSETMPEND_Msk           (1UL << SCB_CCR_USERSETMPEND_Pos)              /*!< SCB CCR: USERSETMPEND Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_HARDFAULTPENDED_Pos      21U                                            /*!< SCB SHCSR: HARDFAULTPENDED Position */

+#define SCB_SHCSR_HARDFAULTPENDED_Msk      (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos)         /*!< SCB SHCSR: HARDFAULTPENDED Mask */

+

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+#define SCB_SHCSR_SYSTICKACT_Pos           11U                                            /*!< SCB SHCSR: SYSTICKACT Position */

+#define SCB_SHCSR_SYSTICKACT_Msk           (1UL << SCB_SHCSR_SYSTICKACT_Pos)              /*!< SCB SHCSR: SYSTICKACT Mask */

+

+#define SCB_SHCSR_PENDSVACT_Pos            10U                                            /*!< SCB SHCSR: PENDSVACT Position */

+#define SCB_SHCSR_PENDSVACT_Msk            (1UL << SCB_SHCSR_PENDSVACT_Pos)               /*!< SCB SHCSR: PENDSVACT Mask */

+

+#define SCB_SHCSR_SVCALLACT_Pos             7U                                            /*!< SCB SHCSR: SVCALLACT Position */

+#define SCB_SHCSR_SVCALLACT_Msk            (1UL << SCB_SHCSR_SVCALLACT_Pos)               /*!< SCB SHCSR: SVCALLACT Mask */

+

+#define SCB_SHCSR_NMIACT_Pos                5U                                            /*!< SCB SHCSR: NMIACT Position */

+#define SCB_SHCSR_NMIACT_Msk               (1UL << SCB_SHCSR_NMIACT_Pos)                  /*!< SCB SHCSR: NMIACT Mask */

+

+#define SCB_SHCSR_HARDFAULTACT_Pos          2U                                            /*!< SCB SHCSR: HARDFAULTACT Position */

+#define SCB_SHCSR_HARDFAULTACT_Msk         (1UL << SCB_SHCSR_HARDFAULTACT_Pos)            /*!< SCB SHCSR: HARDFAULTACT Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)

+  \brief    Type definitions for the Data Watchpoint and Trace (DWT)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Data Watchpoint and Trace Register (DWT).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  Control Register */

+        uint32_t RESERVED0[6U];

+  __IM  uint32_t PCSR;                   /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */

+  __IOM uint32_t COMP0;                  /*!< Offset: 0x020 (R/W)  Comparator Register 0 */

+        uint32_t RESERVED1[1U];

+  __IOM uint32_t FUNCTION0;              /*!< Offset: 0x028 (R/W)  Function Register 0 */

+        uint32_t RESERVED2[1U];

+  __IOM uint32_t COMP1;                  /*!< Offset: 0x030 (R/W)  Comparator Register 1 */

+        uint32_t RESERVED3[1U];

+  __IOM uint32_t FUNCTION1;              /*!< Offset: 0x038 (R/W)  Function Register 1 */

+        uint32_t RESERVED4[1U];

+  __IOM uint32_t COMP2;                  /*!< Offset: 0x040 (R/W)  Comparator Register 2 */

+        uint32_t RESERVED5[1U];

+  __IOM uint32_t FUNCTION2;              /*!< Offset: 0x048 (R/W)  Function Register 2 */

+        uint32_t RESERVED6[1U];

+  __IOM uint32_t COMP3;                  /*!< Offset: 0x050 (R/W)  Comparator Register 3 */

+        uint32_t RESERVED7[1U];

+  __IOM uint32_t FUNCTION3;              /*!< Offset: 0x058 (R/W)  Function Register 3 */

+        uint32_t RESERVED8[1U];

+  __IOM uint32_t COMP4;                  /*!< Offset: 0x060 (R/W)  Comparator Register 4 */

+        uint32_t RESERVED9[1U];

+  __IOM uint32_t FUNCTION4;              /*!< Offset: 0x068 (R/W)  Function Register 4 */

+        uint32_t RESERVED10[1U];

+  __IOM uint32_t COMP5;                  /*!< Offset: 0x070 (R/W)  Comparator Register 5 */

+        uint32_t RESERVED11[1U];

+  __IOM uint32_t FUNCTION5;              /*!< Offset: 0x078 (R/W)  Function Register 5 */

+        uint32_t RESERVED12[1U];

+  __IOM uint32_t COMP6;                  /*!< Offset: 0x080 (R/W)  Comparator Register 6 */

+        uint32_t RESERVED13[1U];

+  __IOM uint32_t FUNCTION6;              /*!< Offset: 0x088 (R/W)  Function Register 6 */

+        uint32_t RESERVED14[1U];

+  __IOM uint32_t COMP7;                  /*!< Offset: 0x090 (R/W)  Comparator Register 7 */

+        uint32_t RESERVED15[1U];

+  __IOM uint32_t FUNCTION7;              /*!< Offset: 0x098 (R/W)  Function Register 7 */

+        uint32_t RESERVED16[1U];

+  __IOM uint32_t COMP8;                  /*!< Offset: 0x0A0 (R/W)  Comparator Register 8 */

+        uint32_t RESERVED17[1U];

+  __IOM uint32_t FUNCTION8;              /*!< Offset: 0x0A8 (R/W)  Function Register 8 */

+        uint32_t RESERVED18[1U];

+  __IOM uint32_t COMP9;                  /*!< Offset: 0x0B0 (R/W)  Comparator Register 9 */

+        uint32_t RESERVED19[1U];

+  __IOM uint32_t FUNCTION9;              /*!< Offset: 0x0B8 (R/W)  Function Register 9 */

+        uint32_t RESERVED20[1U];

+  __IOM uint32_t COMP10;                 /*!< Offset: 0x0C0 (R/W)  Comparator Register 10 */

+        uint32_t RESERVED21[1U];

+  __IOM uint32_t FUNCTION10;             /*!< Offset: 0x0C8 (R/W)  Function Register 10 */

+        uint32_t RESERVED22[1U];

+  __IOM uint32_t COMP11;                 /*!< Offset: 0x0D0 (R/W)  Comparator Register 11 */

+        uint32_t RESERVED23[1U];

+  __IOM uint32_t FUNCTION11;             /*!< Offset: 0x0D8 (R/W)  Function Register 11 */

+        uint32_t RESERVED24[1U];

+  __IOM uint32_t COMP12;                 /*!< Offset: 0x0E0 (R/W)  Comparator Register 12 */

+        uint32_t RESERVED25[1U];

+  __IOM uint32_t FUNCTION12;             /*!< Offset: 0x0E8 (R/W)  Function Register 12 */

+        uint32_t RESERVED26[1U];

+  __IOM uint32_t COMP13;                 /*!< Offset: 0x0F0 (R/W)  Comparator Register 13 */

+        uint32_t RESERVED27[1U];

+  __IOM uint32_t FUNCTION13;             /*!< Offset: 0x0F8 (R/W)  Function Register 13 */

+        uint32_t RESERVED28[1U];

+  __IOM uint32_t COMP14;                 /*!< Offset: 0x100 (R/W)  Comparator Register 14 */

+        uint32_t RESERVED29[1U];

+  __IOM uint32_t FUNCTION14;             /*!< Offset: 0x108 (R/W)  Function Register 14 */

+        uint32_t RESERVED30[1U];

+  __IOM uint32_t COMP15;                 /*!< Offset: 0x110 (R/W)  Comparator Register 15 */

+        uint32_t RESERVED31[1U];

+  __IOM uint32_t FUNCTION15;             /*!< Offset: 0x118 (R/W)  Function Register 15 */

+} DWT_Type;

+

+/* DWT Control Register Definitions */

+#define DWT_CTRL_NUMCOMP_Pos               28U                                         /*!< DWT CTRL: NUMCOMP Position */

+#define DWT_CTRL_NUMCOMP_Msk               (0xFUL << DWT_CTRL_NUMCOMP_Pos)             /*!< DWT CTRL: NUMCOMP Mask */

+

+#define DWT_CTRL_NOTRCPKT_Pos              27U                                         /*!< DWT CTRL: NOTRCPKT Position */

+#define DWT_CTRL_NOTRCPKT_Msk              (0x1UL << DWT_CTRL_NOTRCPKT_Pos)            /*!< DWT CTRL: NOTRCPKT Mask */

+

+#define DWT_CTRL_NOEXTTRIG_Pos             26U                                         /*!< DWT CTRL: NOEXTTRIG Position */

+#define DWT_CTRL_NOEXTTRIG_Msk             (0x1UL << DWT_CTRL_NOEXTTRIG_Pos)           /*!< DWT CTRL: NOEXTTRIG Mask */

+

+#define DWT_CTRL_NOCYCCNT_Pos              25U                                         /*!< DWT CTRL: NOCYCCNT Position */

+#define DWT_CTRL_NOCYCCNT_Msk              (0x1UL << DWT_CTRL_NOCYCCNT_Pos)            /*!< DWT CTRL: NOCYCCNT Mask */

+

+#define DWT_CTRL_NOPRFCNT_Pos              24U                                         /*!< DWT CTRL: NOPRFCNT Position */

+#define DWT_CTRL_NOPRFCNT_Msk              (0x1UL << DWT_CTRL_NOPRFCNT_Pos)            /*!< DWT CTRL: NOPRFCNT Mask */

+

+/* DWT Comparator Function Register Definitions */

+#define DWT_FUNCTION_ID_Pos                27U                                         /*!< DWT FUNCTION: ID Position */

+#define DWT_FUNCTION_ID_Msk                (0x1FUL << DWT_FUNCTION_ID_Pos)             /*!< DWT FUNCTION: ID Mask */

+

+#define DWT_FUNCTION_MATCHED_Pos           24U                                         /*!< DWT FUNCTION: MATCHED Position */

+#define DWT_FUNCTION_MATCHED_Msk           (0x1UL << DWT_FUNCTION_MATCHED_Pos)         /*!< DWT FUNCTION: MATCHED Mask */

+

+#define DWT_FUNCTION_DATAVSIZE_Pos         10U                                         /*!< DWT FUNCTION: DATAVSIZE Position */

+#define DWT_FUNCTION_DATAVSIZE_Msk         (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos)       /*!< DWT FUNCTION: DATAVSIZE Mask */

+

+#define DWT_FUNCTION_ACTION_Pos             4U                                         /*!< DWT FUNCTION: ACTION Position */

+#define DWT_FUNCTION_ACTION_Msk            (0x3UL << DWT_FUNCTION_ACTION_Pos)          /*!< DWT FUNCTION: ACTION Mask */

+

+#define DWT_FUNCTION_MATCH_Pos              0U                                         /*!< DWT FUNCTION: MATCH Position */

+#define DWT_FUNCTION_MATCH_Msk             (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/)       /*!< DWT FUNCTION: MATCH Mask */

+

+/*@}*/ /* end of group CMSIS_DWT */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_TPI     Trace Port Interface (TPI)

+  \brief    Type definitions for the Trace Port Interface (TPI)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Trace Port Interface Register (TPI).

+ */

+typedef struct

+{

+  __IM  uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Sizes Register */

+  __IOM uint32_t CSPSR;                  /*!< Offset: 0x004 (R/W)  Current Parallel Port Sizes Register */

+        uint32_t RESERVED0[2U];

+  __IOM uint32_t ACPR;                   /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */

+        uint32_t RESERVED1[55U];

+  __IOM uint32_t SPPR;                   /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */

+        uint32_t RESERVED2[131U];

+  __IM  uint32_t FFSR;                   /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */

+  __IOM uint32_t FFCR;                   /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */

+  __IOM uint32_t PSCR;                   /*!< Offset: 0x308 (R/W)  Periodic Synchronization Control Register */

+        uint32_t RESERVED3[809U];

+  __OM  uint32_t LAR;                    /*!< Offset: 0xFB0 ( /W)  Software Lock Access Register */

+  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R/ )  Software Lock Status Register */

+        uint32_t RESERVED4[4U];

+  __IM  uint32_t TYPE;                   /*!< Offset: 0xFC8 (R/ )  Device Identifier Register */

+  __IM  uint32_t DEVTYPE;                /*!< Offset: 0xFCC (R/ )  Device Type Register */

+} TPI_Type;

+

+/* TPI Asynchronous Clock Prescaler Register Definitions */

+#define TPI_ACPR_SWOSCALER_Pos              0U                                         /*!< TPI ACPR: SWOSCALER Position */

+#define TPI_ACPR_SWOSCALER_Msk             (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/)    /*!< TPI ACPR: SWOSCALER Mask */

+

+/* TPI Selected Pin Protocol Register Definitions */

+#define TPI_SPPR_TXMODE_Pos                 0U                                         /*!< TPI SPPR: TXMODE Position */

+#define TPI_SPPR_TXMODE_Msk                (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/)          /*!< TPI SPPR: TXMODE Mask */

+

+/* TPI Formatter and Flush Status Register Definitions */

+#define TPI_FFSR_FtNonStop_Pos              3U                                         /*!< TPI FFSR: FtNonStop Position */

+#define TPI_FFSR_FtNonStop_Msk             (0x1UL << TPI_FFSR_FtNonStop_Pos)           /*!< TPI FFSR: FtNonStop Mask */

+

+#define TPI_FFSR_TCPresent_Pos              2U                                         /*!< TPI FFSR: TCPresent Position */

+#define TPI_FFSR_TCPresent_Msk             (0x1UL << TPI_FFSR_TCPresent_Pos)           /*!< TPI FFSR: TCPresent Mask */

+

+#define TPI_FFSR_FtStopped_Pos              1U                                         /*!< TPI FFSR: FtStopped Position */

+#define TPI_FFSR_FtStopped_Msk             (0x1UL << TPI_FFSR_FtStopped_Pos)           /*!< TPI FFSR: FtStopped Mask */

+

+#define TPI_FFSR_FlInProg_Pos               0U                                         /*!< TPI FFSR: FlInProg Position */

+#define TPI_FFSR_FlInProg_Msk              (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/)        /*!< TPI FFSR: FlInProg Mask */

+

+/* TPI Formatter and Flush Control Register Definitions */

+#define TPI_FFCR_TrigIn_Pos                 8U                                         /*!< TPI FFCR: TrigIn Position */

+#define TPI_FFCR_TrigIn_Msk                (0x1UL << TPI_FFCR_TrigIn_Pos)              /*!< TPI FFCR: TrigIn Mask */

+

+#define TPI_FFCR_FOnMan_Pos                 6U                                         /*!< TPI FFCR: FOnMan Position */

+#define TPI_FFCR_FOnMan_Msk                (0x1UL << TPI_FFCR_FOnMan_Pos)              /*!< TPI FFCR: FOnMan Mask */

+

+#define TPI_FFCR_EnFCont_Pos                1U                                         /*!< TPI FFCR: EnFCont Position */

+#define TPI_FFCR_EnFCont_Msk               (0x1UL << TPI_FFCR_EnFCont_Pos)             /*!< TPI FFCR: EnFCont Mask */

+

+/* TPI Periodic Synchronization Control Register Definitions */

+#define TPI_PSCR_PSCount_Pos                0U                                         /*!< TPI PSCR: PSCount Position */

+#define TPI_PSCR_PSCount_Msk               (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/)        /*!< TPI PSCR: TPSCount Mask */

+

+/* TPI Software Lock Status Register Definitions */

+#define TPI_LSR_nTT_Pos                     1U                                         /*!< TPI LSR: Not thirty-two bit. Position */

+#define TPI_LSR_nTT_Msk                    (0x1UL << TPI_LSR_nTT_Pos)                  /*!< TPI LSR: Not thirty-two bit. Mask */

+

+#define TPI_LSR_SLK_Pos                     1U                                         /*!< TPI LSR: Software Lock status Position */

+#define TPI_LSR_SLK_Msk                    (0x1UL << TPI_LSR_SLK_Pos)                  /*!< TPI LSR: Software Lock status Mask */

+

+#define TPI_LSR_SLI_Pos                     0U                                         /*!< TPI LSR: Software Lock implemented Position */

+#define TPI_LSR_SLI_Msk                    (0x1UL /*<< TPI_LSR_SLI_Pos*/)              /*!< TPI LSR: Software Lock implemented Mask */

+

+/* TPI DEVID Register Definitions */

+#define TPI_DEVID_NRZVALID_Pos             11U                                         /*!< TPI DEVID: NRZVALID Position */

+#define TPI_DEVID_NRZVALID_Msk             (0x1UL << TPI_DEVID_NRZVALID_Pos)           /*!< TPI DEVID: NRZVALID Mask */

+

+#define TPI_DEVID_MANCVALID_Pos            10U                                         /*!< TPI DEVID: MANCVALID Position */

+#define TPI_DEVID_MANCVALID_Msk            (0x1UL << TPI_DEVID_MANCVALID_Pos)          /*!< TPI DEVID: MANCVALID Mask */

+

+#define TPI_DEVID_PTINVALID_Pos             9U                                         /*!< TPI DEVID: PTINVALID Position */

+#define TPI_DEVID_PTINVALID_Msk            (0x1UL << TPI_DEVID_PTINVALID_Pos)          /*!< TPI DEVID: PTINVALID Mask */

+

+#define TPI_DEVID_FIFOSZ_Pos                6U                                         /*!< TPI DEVID: FIFO depth Position */

+#define TPI_DEVID_FIFOSZ_Msk               (0x7UL << TPI_DEVID_FIFOSZ_Pos)             /*!< TPI DEVID: FIFO depth Mask */

+

+/* TPI DEVTYPE Register Definitions */

+#define TPI_DEVTYPE_SubType_Pos             4U                                         /*!< TPI DEVTYPE: SubType Position */

+#define TPI_DEVTYPE_SubType_Msk            (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/)      /*!< TPI DEVTYPE: SubType Mask */

+

+#define TPI_DEVTYPE_MajorType_Pos           0U                                         /*!< TPI DEVTYPE: MajorType Position */

+#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */

+

+/*@}*/ /* end of group CMSIS_TPI */

+

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_MPU     Memory Protection Unit (MPU)

+  \brief    Type definitions for the Memory Protection Unit (MPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Memory Protection Unit (MPU).

+ */

+typedef struct

+{

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x000 (R/ )  MPU Type Register */

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x004 (R/W)  MPU Control Register */

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  MPU Region Number Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */

+  __IOM uint32_t RLAR;                   /*!< Offset: 0x010 (R/W)  MPU Region Limit Address Register */

+        uint32_t RESERVED0[7U];

+  union {

+  __IOM uint32_t MAIR[2];

+  struct {

+  __IOM uint32_t MAIR0;                  /*!< Offset: 0x030 (R/W)  MPU Memory Attribute Indirection Register 0 */

+  __IOM uint32_t MAIR1;                  /*!< Offset: 0x034 (R/W)  MPU Memory Attribute Indirection Register 1 */

+  };

+  };

+} MPU_Type;

+

+#define MPU_TYPE_RALIASES                  1U

+

+/* MPU Type Register Definitions */

+#define MPU_TYPE_IREGION_Pos               16U                                            /*!< MPU TYPE: IREGION Position */

+#define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */

+

+#define MPU_TYPE_DREGION_Pos                8U                                            /*!< MPU TYPE: DREGION Position */

+#define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */

+

+#define MPU_TYPE_SEPARATE_Pos               0U                                            /*!< MPU TYPE: SEPARATE Position */

+#define MPU_TYPE_SEPARATE_Msk              (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)             /*!< MPU TYPE: SEPARATE Mask */

+

+/* MPU Control Register Definitions */

+#define MPU_CTRL_PRIVDEFENA_Pos             2U                                            /*!< MPU CTRL: PRIVDEFENA Position */

+#define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */

+

+#define MPU_CTRL_HFNMIENA_Pos               1U                                            /*!< MPU CTRL: HFNMIENA Position */

+#define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */

+

+#define MPU_CTRL_ENABLE_Pos                 0U                                            /*!< MPU CTRL: ENABLE Position */

+#define MPU_CTRL_ENABLE_Msk                (1UL /*<< MPU_CTRL_ENABLE_Pos*/)               /*!< MPU CTRL: ENABLE Mask */

+

+/* MPU Region Number Register Definitions */

+#define MPU_RNR_REGION_Pos                  0U                                            /*!< MPU RNR: REGION Position */

+#define MPU_RNR_REGION_Msk                 (0xFFUL /*<< MPU_RNR_REGION_Pos*/)             /*!< MPU RNR: REGION Mask */

+

+/* MPU Region Base Address Register Definitions */

+#define MPU_RBAR_BASE_Pos                   5U                                            /*!< MPU RBAR: BASE Position */

+#define MPU_RBAR_BASE_Msk                  (0x7FFFFFFUL << MPU_RBAR_BASE_Pos)             /*!< MPU RBAR: BASE Mask */

+

+#define MPU_RBAR_SH_Pos                     3U                                            /*!< MPU RBAR: SH Position */

+#define MPU_RBAR_SH_Msk                    (0x3UL << MPU_RBAR_SH_Pos)                     /*!< MPU RBAR: SH Mask */

+

+#define MPU_RBAR_AP_Pos                     1U                                            /*!< MPU RBAR: AP Position */

+#define MPU_RBAR_AP_Msk                    (0x3UL << MPU_RBAR_AP_Pos)                     /*!< MPU RBAR: AP Mask */

+

+#define MPU_RBAR_XN_Pos                     0U                                            /*!< MPU RBAR: XN Position */

+#define MPU_RBAR_XN_Msk                    (01UL /*<< MPU_RBAR_XN_Pos*/)                  /*!< MPU RBAR: XN Mask */

+

+/* MPU Region Limit Address Register Definitions */

+#define MPU_RLAR_LIMIT_Pos                  5U                                            /*!< MPU RLAR: LIMIT Position */

+#define MPU_RLAR_LIMIT_Msk                 (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos)            /*!< MPU RLAR: LIMIT Mask */

+

+#define MPU_RLAR_AttrIndx_Pos               1U                                            /*!< MPU RLAR: AttrIndx Position */

+#define MPU_RLAR_AttrIndx_Msk              (0x7UL << MPU_RLAR_AttrIndx_Pos)               /*!< MPU RLAR: AttrIndx Mask */

+

+#define MPU_RLAR_EN_Pos                     0U                                            /*!< MPU RLAR: EN Position */

+#define MPU_RLAR_EN_Msk                    (1UL /*<< MPU_RLAR_EN_Pos*/)                   /*!< MPU RLAR: EN Mask */

+

+/* MPU Memory Attribute Indirection Register 0 Definitions */

+#define MPU_MAIR0_Attr3_Pos                24U                                            /*!< MPU MAIR0: Attr3 Position */

+#define MPU_MAIR0_Attr3_Msk                (0xFFUL << MPU_MAIR0_Attr3_Pos)                /*!< MPU MAIR0: Attr3 Mask */

+

+#define MPU_MAIR0_Attr2_Pos                16U                                            /*!< MPU MAIR0: Attr2 Position */

+#define MPU_MAIR0_Attr2_Msk                (0xFFUL << MPU_MAIR0_Attr2_Pos)                /*!< MPU MAIR0: Attr2 Mask */

+

+#define MPU_MAIR0_Attr1_Pos                 8U                                            /*!< MPU MAIR0: Attr1 Position */

+#define MPU_MAIR0_Attr1_Msk                (0xFFUL << MPU_MAIR0_Attr1_Pos)                /*!< MPU MAIR0: Attr1 Mask */

+

+#define MPU_MAIR0_Attr0_Pos                 0U                                            /*!< MPU MAIR0: Attr0 Position */

+#define MPU_MAIR0_Attr0_Msk                (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/)            /*!< MPU MAIR0: Attr0 Mask */

+

+/* MPU Memory Attribute Indirection Register 1 Definitions */

+#define MPU_MAIR1_Attr7_Pos                24U                                            /*!< MPU MAIR1: Attr7 Position */

+#define MPU_MAIR1_Attr7_Msk                (0xFFUL << MPU_MAIR1_Attr7_Pos)                /*!< MPU MAIR1: Attr7 Mask */

+

+#define MPU_MAIR1_Attr6_Pos                16U                                            /*!< MPU MAIR1: Attr6 Position */

+#define MPU_MAIR1_Attr6_Msk                (0xFFUL << MPU_MAIR1_Attr6_Pos)                /*!< MPU MAIR1: Attr6 Mask */

+

+#define MPU_MAIR1_Attr5_Pos                 8U                                            /*!< MPU MAIR1: Attr5 Position */

+#define MPU_MAIR1_Attr5_Msk                (0xFFUL << MPU_MAIR1_Attr5_Pos)                /*!< MPU MAIR1: Attr5 Mask */

+

+#define MPU_MAIR1_Attr4_Pos                 0U                                            /*!< MPU MAIR1: Attr4 Position */

+#define MPU_MAIR1_Attr4_Msk                (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/)            /*!< MPU MAIR1: Attr4 Mask */

+

+/*@} end of group CMSIS_MPU */

+#endif

+

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SAU     Security Attribution Unit (SAU)

+  \brief    Type definitions for the Security Attribution Unit (SAU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Security Attribution Unit (SAU).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SAU Control Register */

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x004 (R/ )  SAU Type Register */

+#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U)

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  SAU Region Number Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  SAU Region Base Address Register */

+  __IOM uint32_t RLAR;                   /*!< Offset: 0x010 (R/W)  SAU Region Limit Address Register */

+#endif

+} SAU_Type;

+

+/* SAU Control Register Definitions */

+#define SAU_CTRL_ALLNS_Pos                  1U                                            /*!< SAU CTRL: ALLNS Position */

+#define SAU_CTRL_ALLNS_Msk                 (1UL << SAU_CTRL_ALLNS_Pos)                    /*!< SAU CTRL: ALLNS Mask */

+

+#define SAU_CTRL_ENABLE_Pos                 0U                                            /*!< SAU CTRL: ENABLE Position */

+#define SAU_CTRL_ENABLE_Msk                (1UL /*<< SAU_CTRL_ENABLE_Pos*/)               /*!< SAU CTRL: ENABLE Mask */

+

+/* SAU Type Register Definitions */

+#define SAU_TYPE_SREGION_Pos                0U                                            /*!< SAU TYPE: SREGION Position */

+#define SAU_TYPE_SREGION_Msk               (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/)           /*!< SAU TYPE: SREGION Mask */

+

+#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U)

+/* SAU Region Number Register Definitions */

+#define SAU_RNR_REGION_Pos                  0U                                            /*!< SAU RNR: REGION Position */

+#define SAU_RNR_REGION_Msk                 (0xFFUL /*<< SAU_RNR_REGION_Pos*/)             /*!< SAU RNR: REGION Mask */

+

+/* SAU Region Base Address Register Definitions */

+#define SAU_RBAR_BADDR_Pos                  5U                                            /*!< SAU RBAR: BADDR Position */

+#define SAU_RBAR_BADDR_Msk                 (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos)            /*!< SAU RBAR: BADDR Mask */

+

+/* SAU Region Limit Address Register Definitions */

+#define SAU_RLAR_LADDR_Pos                  5U                                            /*!< SAU RLAR: LADDR Position */

+#define SAU_RLAR_LADDR_Msk                 (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos)            /*!< SAU RLAR: LADDR Mask */

+

+#define SAU_RLAR_NSC_Pos                    1U                                            /*!< SAU RLAR: NSC Position */

+#define SAU_RLAR_NSC_Msk                   (1UL << SAU_RLAR_NSC_Pos)                      /*!< SAU RLAR: NSC Mask */

+

+#define SAU_RLAR_ENABLE_Pos                 0U                                            /*!< SAU RLAR: ENABLE Position */

+#define SAU_RLAR_ENABLE_Msk                (1UL /*<< SAU_RLAR_ENABLE_Pos*/)               /*!< SAU RLAR: ENABLE Mask */

+

+#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */

+

+/*@} end of group CMSIS_SAU */

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    Type definitions for the Core Debug Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Core Debug Register (CoreDebug).

+ */

+typedef struct

+{

+  __IOM uint32_t DHCSR;                  /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */

+  __OM  uint32_t DCRSR;                  /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */

+  __IOM uint32_t DCRDR;                  /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */

+  __IOM uint32_t DEMCR;                  /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */

+        uint32_t RESERVED4[1U];

+  __IOM uint32_t DAUTHCTRL;              /*!< Offset: 0x014 (R/W)  Debug Authentication Control Register */

+  __IOM uint32_t DSCSR;                  /*!< Offset: 0x018 (R/W)  Debug Security Control and Status Register */

+} CoreDebug_Type;

+

+/* Debug Halting Control and Status Register Definitions */

+#define CoreDebug_DHCSR_DBGKEY_Pos         16U                                            /*!< CoreDebug DHCSR: DBGKEY Position */

+#define CoreDebug_DHCSR_DBGKEY_Msk         (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos)       /*!< CoreDebug DHCSR: DBGKEY Mask */

+

+#define CoreDebug_DHCSR_S_RESTART_ST_Pos   26U                                            /*!< CoreDebug DHCSR: S_RESTART_ST Position */

+#define CoreDebug_DHCSR_S_RESTART_ST_Msk   (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos)      /*!< CoreDebug DHCSR: S_RESTART_ST Mask */

+

+#define CoreDebug_DHCSR_S_RESET_ST_Pos     25U                                            /*!< CoreDebug DHCSR: S_RESET_ST Position */

+#define CoreDebug_DHCSR_S_RESET_ST_Msk     (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos)        /*!< CoreDebug DHCSR: S_RESET_ST Mask */

+

+#define CoreDebug_DHCSR_S_RETIRE_ST_Pos    24U                                            /*!< CoreDebug DHCSR: S_RETIRE_ST Position */

+#define CoreDebug_DHCSR_S_RETIRE_ST_Msk    (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos)       /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */

+

+#define CoreDebug_DHCSR_S_LOCKUP_Pos       19U                                            /*!< CoreDebug DHCSR: S_LOCKUP Position */

+#define CoreDebug_DHCSR_S_LOCKUP_Msk       (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos)          /*!< CoreDebug DHCSR: S_LOCKUP Mask */

+

+#define CoreDebug_DHCSR_S_SLEEP_Pos        18U                                            /*!< CoreDebug DHCSR: S_SLEEP Position */

+#define CoreDebug_DHCSR_S_SLEEP_Msk        (1UL << CoreDebug_DHCSR_S_SLEEP_Pos)           /*!< CoreDebug DHCSR: S_SLEEP Mask */

+

+#define CoreDebug_DHCSR_S_HALT_Pos         17U                                            /*!< CoreDebug DHCSR: S_HALT Position */

+#define CoreDebug_DHCSR_S_HALT_Msk         (1UL << CoreDebug_DHCSR_S_HALT_Pos)            /*!< CoreDebug DHCSR: S_HALT Mask */

+

+#define CoreDebug_DHCSR_S_REGRDY_Pos       16U                                            /*!< CoreDebug DHCSR: S_REGRDY Position */

+#define CoreDebug_DHCSR_S_REGRDY_Msk       (1UL << CoreDebug_DHCSR_S_REGRDY_Pos)          /*!< CoreDebug DHCSR: S_REGRDY Mask */

+

+#define CoreDebug_DHCSR_C_MASKINTS_Pos      3U                                            /*!< CoreDebug DHCSR: C_MASKINTS Position */

+#define CoreDebug_DHCSR_C_MASKINTS_Msk     (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos)        /*!< CoreDebug DHCSR: C_MASKINTS Mask */

+

+#define CoreDebug_DHCSR_C_STEP_Pos          2U                                            /*!< CoreDebug DHCSR: C_STEP Position */

+#define CoreDebug_DHCSR_C_STEP_Msk         (1UL << CoreDebug_DHCSR_C_STEP_Pos)            /*!< CoreDebug DHCSR: C_STEP Mask */

+

+#define CoreDebug_DHCSR_C_HALT_Pos          1U                                            /*!< CoreDebug DHCSR: C_HALT Position */

+#define CoreDebug_DHCSR_C_HALT_Msk         (1UL << CoreDebug_DHCSR_C_HALT_Pos)            /*!< CoreDebug DHCSR: C_HALT Mask */

+

+#define CoreDebug_DHCSR_C_DEBUGEN_Pos       0U                                            /*!< CoreDebug DHCSR: C_DEBUGEN Position */

+#define CoreDebug_DHCSR_C_DEBUGEN_Msk      (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/)     /*!< CoreDebug DHCSR: C_DEBUGEN Mask */

+

+/* Debug Core Register Selector Register Definitions */

+#define CoreDebug_DCRSR_REGWnR_Pos         16U                                            /*!< CoreDebug DCRSR: REGWnR Position */

+#define CoreDebug_DCRSR_REGWnR_Msk         (1UL << CoreDebug_DCRSR_REGWnR_Pos)            /*!< CoreDebug DCRSR: REGWnR Mask */

+

+#define CoreDebug_DCRSR_REGSEL_Pos          0U                                            /*!< CoreDebug DCRSR: REGSEL Position */

+#define CoreDebug_DCRSR_REGSEL_Msk         (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/)     /*!< CoreDebug DCRSR: REGSEL Mask */

+

+/* Debug Exception and Monitor Control Register */

+#define CoreDebug_DEMCR_DWTENA_Pos         24U                                            /*!< CoreDebug DEMCR: DWTENA Position */

+#define CoreDebug_DEMCR_DWTENA_Msk         (1UL << CoreDebug_DEMCR_DWTENA_Pos)            /*!< CoreDebug DEMCR: DWTENA Mask */

+

+#define CoreDebug_DEMCR_VC_HARDERR_Pos     10U                                            /*!< CoreDebug DEMCR: VC_HARDERR Position */

+#define CoreDebug_DEMCR_VC_HARDERR_Msk     (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos)        /*!< CoreDebug DEMCR: VC_HARDERR Mask */

+

+#define CoreDebug_DEMCR_VC_CORERESET_Pos    0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */

+#define CoreDebug_DEMCR_VC_CORERESET_Msk   (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/)  /*!< CoreDebug DEMCR: VC_CORERESET Mask */

+

+/* Debug Authentication Control Register Definitions */

+#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos  3U                                            /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */

+#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos)    /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */

+

+#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos  2U                                            /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */

+#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos)    /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */

+

+#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos   1U                                            /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */

+#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk  (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos)     /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */

+

+#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos   0U                                            /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */

+#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk  (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */

+

+/* Debug Security Control and Status Register Definitions */

+#define CoreDebug_DSCSR_CDS_Pos            16U                                            /*!< CoreDebug DSCSR: CDS Position */

+#define CoreDebug_DSCSR_CDS_Msk            (1UL << CoreDebug_DSCSR_CDS_Pos)               /*!< CoreDebug DSCSR: CDS Mask */

+

+#define CoreDebug_DSCSR_SBRSEL_Pos          1U                                            /*!< CoreDebug DSCSR: SBRSEL Position */

+#define CoreDebug_DSCSR_SBRSEL_Msk         (1UL << CoreDebug_DSCSR_SBRSEL_Pos)            /*!< CoreDebug DSCSR: SBRSEL Mask */

+

+#define CoreDebug_DSCSR_SBRSELEN_Pos        0U                                            /*!< CoreDebug DSCSR: SBRSELEN Position */

+#define CoreDebug_DSCSR_SBRSELEN_Msk       (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/)      /*!< CoreDebug DSCSR: SBRSELEN Mask */

+

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+  #define SCS_BASE            (0xE000E000UL)                             /*!< System Control Space Base Address */

+  #define DWT_BASE            (0xE0001000UL)                             /*!< DWT Base Address */

+  #define TPI_BASE            (0xE0040000UL)                             /*!< TPI Base Address */

+  #define CoreDebug_BASE      (0xE000EDF0UL)                             /*!< Core Debug Base Address */

+  #define SysTick_BASE        (SCS_BASE +  0x0010UL)                     /*!< SysTick Base Address */

+  #define NVIC_BASE           (SCS_BASE +  0x0100UL)                     /*!< NVIC Base Address */

+  #define SCB_BASE            (SCS_BASE +  0x0D00UL)                     /*!< System Control Block Base Address */

+

+

+  #define SCB                 ((SCB_Type       *)     SCB_BASE         ) /*!< SCB configuration struct */

+  #define SysTick             ((SysTick_Type   *)     SysTick_BASE     ) /*!< SysTick configuration struct */

+  #define NVIC                ((NVIC_Type      *)     NVIC_BASE        ) /*!< NVIC configuration struct */

+  #define DWT                 ((DWT_Type       *)     DWT_BASE         ) /*!< DWT configuration struct */

+  #define TPI                 ((TPI_Type       *)     TPI_BASE         ) /*!< TPI configuration struct */

+  #define CoreDebug           ((CoreDebug_Type *)     CoreDebug_BASE   ) /*!< Core Debug configuration struct */

+

+  #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+    #define MPU_BASE          (SCS_BASE +  0x0D90UL)                     /*!< Memory Protection Unit */

+    #define MPU               ((MPU_Type       *)     MPU_BASE         ) /*!< Memory Protection Unit */

+  #endif

+

+  #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+    #define SAU_BASE          (SCS_BASE +  0x0DD0UL)                     /*!< Security Attribution Unit */

+    #define SAU               ((SAU_Type       *)     SAU_BASE         ) /*!< Security Attribution Unit */

+  #endif

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+  #define SCS_BASE_NS         (0xE002E000UL)                             /*!< System Control Space Base Address (non-secure address space) */

+  #define CoreDebug_BASE_NS   (0xE002EDF0UL)                             /*!< Core Debug Base Address           (non-secure address space) */

+  #define SysTick_BASE_NS     (SCS_BASE_NS +  0x0010UL)                  /*!< SysTick Base Address              (non-secure address space) */

+  #define NVIC_BASE_NS        (SCS_BASE_NS +  0x0100UL)                  /*!< NVIC Base Address                 (non-secure address space) */

+  #define SCB_BASE_NS         (SCS_BASE_NS +  0x0D00UL)                  /*!< System Control Block Base Address (non-secure address space) */

+

+  #define SCB_NS              ((SCB_Type       *)     SCB_BASE_NS      ) /*!< SCB configuration struct          (non-secure address space) */

+  #define SysTick_NS          ((SysTick_Type   *)     SysTick_BASE_NS  ) /*!< SysTick configuration struct      (non-secure address space) */

+  #define NVIC_NS             ((NVIC_Type      *)     NVIC_BASE_NS     ) /*!< NVIC configuration struct         (non-secure address space) */

+  #define CoreDebug_NS        ((CoreDebug_Type *)     CoreDebug_BASE_NS) /*!< Core Debug configuration struct   (non-secure address space) */

+

+  #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+    #define MPU_BASE_NS       (SCS_BASE_NS +  0x0D90UL)                  /*!< Memory Protection Unit            (non-secure address space) */

+    #define MPU_NS            ((MPU_Type       *)     MPU_BASE_NS      ) /*!< Memory Protection Unit            (non-secure address space) */

+  #endif

+

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping

+  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+  #define NVIC_GetActive              __NVIC_GetActive

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* Special LR values for Secure/Non-Secure call handling and exception handling                                               */

+

+/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS                   */

+#define FNC_RETURN                 (0xFEFFFFFFUL)     /* bit [0] ignored when processing a branch                             */

+

+/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */

+#define EXC_RETURN_PREFIX          (0xFF000000UL)     /* bits [31:24] set to indicate an EXC_RETURN value                     */

+#define EXC_RETURN_S               (0x00000040UL)     /* bit [6] stack used to push registers: 0=Non-secure 1=Secure          */

+#define EXC_RETURN_DCRS            (0x00000020UL)     /* bit [5] stacking rules for called registers: 0=skipped 1=saved       */

+#define EXC_RETURN_FTYPE           (0x00000010UL)     /* bit [4] allocate stack for floating-point context: 0=done 1=skipped  */

+#define EXC_RETURN_MODE            (0x00000008UL)     /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode      */

+#define EXC_RETURN_SPSEL           (0x00000002UL)     /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP           */

+#define EXC_RETURN_ES              (0x00000001UL)     /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */

+

+/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking                            */

+#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)  /* Value for processors with floating-point extension:                  */

+#define EXC_INTEGRITY_SIGNATURE     (0xFEFA125AUL)     /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE                   */

+#else

+#define EXC_INTEGRITY_SIGNATURE     (0xFEFA125BUL)     /* Value for processors without floating-point extension                */

+#endif

+

+

+/* Interrupt Priorities are WORD accessible only under Armv6-M                  */

+/* The following MACROS handle generation of the register offset and byte masks */

+#define _BIT_SHIFT(IRQn)         (  ((((uint32_t)(int32_t)(IRQn))         )      &  0x03UL) * 8UL)

+#define _SHP_IDX(IRQn)           ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >>    2UL)      )

+#define _IP_IDX(IRQn)            (   (((uint32_t)(int32_t)(IRQn))                >>    2UL)      )

+

+#define __NVIC_SetPriorityGrouping(X) (void)(X)

+#define __NVIC_GetPriorityGrouping()  (0U)

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt

+  \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   Get Interrupt Target State

+  \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+  \return             1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Target State

+  \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+                      1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |=  ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)));

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Clear Interrupt Target State

+  \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+                      1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)));

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IPR[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+  else

+  {

+    SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Encode Priority

+  \details Encodes the priority for an interrupt with the given priority group,

+           preemptive priority value, and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]     PriorityGroup  Used priority group.

+  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).

+  \param [in]       SubPriority  Subpriority value (starting from 0).

+  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().

+ */

+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  return (

+           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |

+           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))

+         );

+}

+

+

+/**

+  \brief   Decode Priority

+  \details Decodes an interrupt priority value with a given priority group to

+           preemptive priority value and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.

+  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().

+  \param [in]     PriorityGroup  Used priority group.

+  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).

+  \param [out]     pSubPriority  Subpriority value (starting from 0).

+ */

+__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);

+  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);

+}

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           VTOR must been relocated to SRAM before.

+           If VTOR is not present address 0 must be mapped to SRAM.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+#else

+  uint32_t *vectors = (uint32_t *)0x0U;

+#endif

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+#else

+  uint32_t *vectors = (uint32_t *)0x0U;

+#endif

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                 SCB_AIRCR_SYSRESETREQ_Msk);

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   Enable Interrupt (non-secure)

+  \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status (non-secure)

+  \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt (non-secure)

+  \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt (non-secure)

+  \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt (non-secure)

+  \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt (non-secure)

+  \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt (non-secure)

+  \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority (non-secure)

+  \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every non-secure processor exception.

+ */

+__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->IPR[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+  else

+  {

+    SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority (non-secure)

+  \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+#endif /*  defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+/* ##########################  MPU functions  #################################### */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+

+#include "mpu_armv8.h"

+

+#endif

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+    return 0U;           /* No FPU */

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##########################   SAU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SAUFunctions SAU Functions

+  \brief    Functions that configure the SAU.

+  @{

+ */

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+

+/**

+  \brief   Enable SAU

+  \details Enables the Security Attribution Unit (SAU).

+ */

+__STATIC_INLINE void TZ_SAU_Enable(void)

+{

+    SAU->CTRL |=  (SAU_CTRL_ENABLE_Msk);

+}

+

+

+

+/**

+  \brief   Disable SAU

+  \details Disables the Security Attribution Unit (SAU).

+ */

+__STATIC_INLINE void TZ_SAU_Disable(void)

+{

+    SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk);

+}

+

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+/*@} end of CMSIS_Core_SAUFunctions */

+

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   System Tick Configuration (non-secure)

+  \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>TZ_SysTick_Config_NS</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+

+ */

+__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                         /* Reload value impossible */

+  }

+

+  SysTick_NS->LOAD  = (uint32_t)(ticks - 1UL);                            /* set reload register */

+  TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick_NS->VAL   = 0UL;                                                /* Load the SysTick Counter Value */

+  SysTick_NS->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                      SysTick_CTRL_TICKINT_Msk   |

+                      SysTick_CTRL_ENABLE_Msk;                            /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                           /* Function successful */

+}

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_ARMV8MBL_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_armv8mml.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_armv8mml.h
new file mode 100644
index 0000000..2d0f106
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_armv8mml.h
@@ -0,0 +1,2927 @@
+/**************************************************************************//**

+ * @file     core_armv8mml.h

+ * @brief    CMSIS Armv8-M Mainline Core Peripheral Access Layer Header File

+ * @version  V5.0.7

+ * @date     06. July 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_ARMV8MML_H_GENERIC

+#define __CORE_ARMV8MML_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup Cortex_ARMv8MML

+  @{

+ */

+

+#include "cmsis_version.h"

+

+/*  CMSIS Armv8MML definitions */

+#define __ARMv8MML_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)                   /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __ARMv8MML_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)                    /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __ARMv8MML_CMSIS_VERSION       ((__ARMv8MML_CMSIS_VERSION_MAIN << 16U) | \

+                                         __ARMv8MML_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_M                     (81U)                                       /*!< Cortex-M Core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions.

+*/

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+  #if defined(__ARM_FEATURE_DSP)

+    #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U)

+      #define __DSP_USED       1U

+    #else

+      #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)"

+      #define __DSP_USED         0U

+    #endif

+  #else

+    #define __DSP_USED         0U

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined __ARM_PCS_VFP

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+  #if defined(__ARM_FEATURE_DSP)

+    #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U)

+      #define __DSP_USED       1U

+    #else

+      #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)"

+      #define __DSP_USED         0U

+    #endif

+  #else

+    #define __DSP_USED         0U

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+  #if defined(__ARM_FEATURE_DSP)

+    #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U)

+      #define __DSP_USED       1U

+    #else

+      #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)"

+      #define __DSP_USED         0U

+    #endif

+  #else

+    #define __DSP_USED         0U

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+  #if defined(__ARM_FEATURE_DSP)

+    #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U)

+      #define __DSP_USED       1U

+    #else

+      #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)"

+      #define __DSP_USED         0U

+    #endif

+  #else

+    #define __DSP_USED         0U

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined __TI_VFP_SUPPORT__

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_ARMV8MML_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_ARMV8MML_H_DEPENDANT

+#define __CORE_ARMV8MML_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __ARMv8MML_REV

+    #define __ARMv8MML_REV               0x0000U

+    #warning "__ARMv8MML_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __FPU_PRESENT

+    #define __FPU_PRESENT             0U

+    #warning "__FPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MPU_PRESENT

+    #define __MPU_PRESENT             0U

+    #warning "__MPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __SAUREGION_PRESENT

+    #define __SAUREGION_PRESENT       0U

+    #warning "__SAUREGION_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __DSP_PRESENT

+    #define __DSP_PRESENT             0U

+    #warning "__DSP_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          3U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group ARMv8MML */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+  - Core Debug Register

+  - Core MPU Register

+  - Core SAU Register

+  - Core FPU Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:16;              /*!< bit:  0..15  Reserved */

+    uint32_t GE:4;                       /*!< bit: 16..19  Greater than or Equal flags */

+    uint32_t _reserved1:7;               /*!< bit: 20..26  Reserved */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+#define APSR_Q_Pos                         27U                                            /*!< APSR: Q Position */

+#define APSR_Q_Msk                         (1UL << APSR_Q_Pos)                            /*!< APSR: Q Mask */

+

+#define APSR_GE_Pos                        16U                                            /*!< APSR: GE Position */

+#define APSR_GE_Msk                        (0xFUL << APSR_GE_Pos)                         /*!< APSR: GE Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:7;               /*!< bit:  9..15  Reserved */

+    uint32_t GE:4;                       /*!< bit: 16..19  Greater than or Equal flags */

+    uint32_t _reserved1:4;               /*!< bit: 20..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */

+    uint32_t IT:2;                       /*!< bit: 25..26  saved IT state   (read 0) */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_Q_Pos                         27U                                            /*!< xPSR: Q Position */

+#define xPSR_Q_Msk                         (1UL << xPSR_Q_Pos)                            /*!< xPSR: Q Mask */

+

+#define xPSR_IT_Pos                        25U                                            /*!< xPSR: IT Position */

+#define xPSR_IT_Msk                        (3UL << xPSR_IT_Pos)                           /*!< xPSR: IT Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_GE_Pos                        16U                                            /*!< xPSR: GE Position */

+#define xPSR_GE_Msk                        (0xFUL << xPSR_GE_Pos)                         /*!< xPSR: GE Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t nPRIV:1;                    /*!< bit:      0  Execution privilege in Thread mode */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack-pointer select */

+    uint32_t FPCA:1;                     /*!< bit:      2  Floating-point context active */

+    uint32_t SFPA:1;                     /*!< bit:      3  Secure floating-point active */

+    uint32_t _reserved1:28;              /*!< bit:  4..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_SFPA_Pos                    3U                                            /*!< CONTROL: SFPA Position */

+#define CONTROL_SFPA_Msk                   (1UL << CONTROL_SFPA_Pos)                      /*!< CONTROL: SFPA Mask */

+

+#define CONTROL_FPCA_Pos                    2U                                            /*!< CONTROL: FPCA Position */

+#define CONTROL_FPCA_Msk                   (1UL << CONTROL_FPCA_Pos)                      /*!< CONTROL: FPCA Mask */

+

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+#define CONTROL_nPRIV_Pos                   0U                                            /*!< CONTROL: nPRIV Position */

+#define CONTROL_nPRIV_Msk                  (1UL /*<< CONTROL_nPRIV_Pos*/)                 /*!< CONTROL: nPRIV Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[16U];              /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[16U];

+  __IOM uint32_t ICER[16U];              /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[16U];

+  __IOM uint32_t ISPR[16U];              /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[16U];

+  __IOM uint32_t ICPR[16U];              /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[16U];

+  __IOM uint32_t IABR[16U];              /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */

+        uint32_t RESERVED4[16U];

+  __IOM uint32_t ITNS[16U];              /*!< Offset: 0x280 (R/W)  Interrupt Non-Secure State Register */

+        uint32_t RESERVED5[16U];

+  __IOM uint8_t  IPR[496U];              /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */

+        uint32_t RESERVED6[580U];

+  __OM  uint32_t STIR;                   /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */

+}  NVIC_Type;

+

+/* Software Triggered Interrupt Register Definitions */

+#define NVIC_STIR_INTID_Pos                 0U                                         /*!< STIR: INTLINESNUM Position */

+#define NVIC_STIR_INTID_Msk                (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/)        /*!< STIR: INTLINESNUM Mask */

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+  __IOM uint32_t VTOR;                   /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+  __IOM uint8_t  SHPR[12U];              /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+  __IOM uint32_t CFSR;                   /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */

+  __IOM uint32_t HFSR;                   /*!< Offset: 0x02C (R/W)  HardFault Status Register */

+  __IOM uint32_t DFSR;                   /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */

+  __IOM uint32_t MMFAR;                  /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */

+  __IOM uint32_t BFAR;                   /*!< Offset: 0x038 (R/W)  BusFault Address Register */

+  __IOM uint32_t AFSR;                   /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */

+  __IM  uint32_t ID_PFR[2U];             /*!< Offset: 0x040 (R/ )  Processor Feature Register */

+  __IM  uint32_t ID_DFR;                 /*!< Offset: 0x048 (R/ )  Debug Feature Register */

+  __IM  uint32_t ID_ADR;                 /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */

+  __IM  uint32_t ID_MMFR[4U];            /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */

+  __IM  uint32_t ID_ISAR[6U];            /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */

+  __IM  uint32_t CLIDR;                  /*!< Offset: 0x078 (R/ )  Cache Level ID register */

+  __IM  uint32_t CTR;                    /*!< Offset: 0x07C (R/ )  Cache Type register */

+  __IM  uint32_t CCSIDR;                 /*!< Offset: 0x080 (R/ )  Cache Size ID Register */

+  __IOM uint32_t CSSELR;                 /*!< Offset: 0x084 (R/W)  Cache Size Selection Register */

+  __IOM uint32_t CPACR;                  /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */

+  __IOM uint32_t NSACR;                  /*!< Offset: 0x08C (R/W)  Non-Secure Access Control Register */

+        uint32_t RESERVED3[92U];

+  __OM  uint32_t STIR;                   /*!< Offset: 0x200 ( /W)  Software Triggered Interrupt Register */

+        uint32_t RESERVED4[15U];

+  __IM  uint32_t MVFR0;                  /*!< Offset: 0x240 (R/ )  Media and VFP Feature Register 0 */

+  __IM  uint32_t MVFR1;                  /*!< Offset: 0x244 (R/ )  Media and VFP Feature Register 1 */

+  __IM  uint32_t MVFR2;                  /*!< Offset: 0x248 (R/ )  Media and VFP Feature Register 2 */

+        uint32_t RESERVED5[1U];

+  __OM  uint32_t ICIALLU;                /*!< Offset: 0x250 ( /W)  I-Cache Invalidate All to PoU */

+        uint32_t RESERVED6[1U];

+  __OM  uint32_t ICIMVAU;                /*!< Offset: 0x258 ( /W)  I-Cache Invalidate by MVA to PoU */

+  __OM  uint32_t DCIMVAC;                /*!< Offset: 0x25C ( /W)  D-Cache Invalidate by MVA to PoC */

+  __OM  uint32_t DCISW;                  /*!< Offset: 0x260 ( /W)  D-Cache Invalidate by Set-way */

+  __OM  uint32_t DCCMVAU;                /*!< Offset: 0x264 ( /W)  D-Cache Clean by MVA to PoU */

+  __OM  uint32_t DCCMVAC;                /*!< Offset: 0x268 ( /W)  D-Cache Clean by MVA to PoC */

+  __OM  uint32_t DCCSW;                  /*!< Offset: 0x26C ( /W)  D-Cache Clean by Set-way */

+  __OM  uint32_t DCCIMVAC;               /*!< Offset: 0x270 ( /W)  D-Cache Clean and Invalidate by MVA to PoC */

+  __OM  uint32_t DCCISW;                 /*!< Offset: 0x274 ( /W)  D-Cache Clean and Invalidate by Set-way */

+        uint32_t RESERVED7[6U];

+  __IOM uint32_t ITCMCR;                 /*!< Offset: 0x290 (R/W)  Instruction Tightly-Coupled Memory Control Register */

+  __IOM uint32_t DTCMCR;                 /*!< Offset: 0x294 (R/W)  Data Tightly-Coupled Memory Control Registers */

+  __IOM uint32_t AHBPCR;                 /*!< Offset: 0x298 (R/W)  AHBP Control Register */

+  __IOM uint32_t CACR;                   /*!< Offset: 0x29C (R/W)  L1 Cache Control Register */

+  __IOM uint32_t AHBSCR;                 /*!< Offset: 0x2A0 (R/W)  AHB Slave Control Register */

+        uint32_t RESERVED8[1U];

+  __IOM uint32_t ABFSR;                  /*!< Offset: 0x2A8 (R/W)  Auxiliary Bus Fault Status Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_PENDNMISET_Pos            31U                                            /*!< SCB ICSR: PENDNMISET Position */

+#define SCB_ICSR_PENDNMISET_Msk            (1UL << SCB_ICSR_PENDNMISET_Pos)               /*!< SCB ICSR: PENDNMISET Mask */

+

+#define SCB_ICSR_NMIPENDSET_Pos            SCB_ICSR_PENDNMISET_Pos                        /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */

+#define SCB_ICSR_NMIPENDSET_Msk            SCB_ICSR_PENDNMISET_Msk                        /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */

+

+#define SCB_ICSR_PENDNMICLR_Pos            30U                                            /*!< SCB ICSR: PENDNMICLR Position */

+#define SCB_ICSR_PENDNMICLR_Msk            (1UL << SCB_ICSR_PENDNMICLR_Pos)               /*!< SCB ICSR: PENDNMICLR Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_STTNS_Pos                 24U                                            /*!< SCB ICSR: STTNS Position (Security Extension) */

+#define SCB_ICSR_STTNS_Msk                 (1UL << SCB_ICSR_STTNS_Pos)                    /*!< SCB ICSR: STTNS Mask (Security Extension) */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_RETTOBASE_Pos             11U                                            /*!< SCB ICSR: RETTOBASE Position */

+#define SCB_ICSR_RETTOBASE_Msk             (1UL << SCB_ICSR_RETTOBASE_Pos)                /*!< SCB ICSR: RETTOBASE Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+/* SCB Vector Table Offset Register Definitions */

+#define SCB_VTOR_TBLOFF_Pos                 7U                                            /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos)           /*!< SCB VTOR: TBLOFF Mask */

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_PRIS_Pos                 14U                                            /*!< SCB AIRCR: PRIS Position */

+#define SCB_AIRCR_PRIS_Msk                 (1UL << SCB_AIRCR_PRIS_Pos)                    /*!< SCB AIRCR: PRIS Mask */

+

+#define SCB_AIRCR_BFHFNMINS_Pos            13U                                            /*!< SCB AIRCR: BFHFNMINS Position */

+#define SCB_AIRCR_BFHFNMINS_Msk            (1UL << SCB_AIRCR_BFHFNMINS_Pos)               /*!< SCB AIRCR: BFHFNMINS Mask */

+

+#define SCB_AIRCR_PRIGROUP_Pos              8U                                            /*!< SCB AIRCR: PRIGROUP Position */

+#define SCB_AIRCR_PRIGROUP_Msk             (7UL << SCB_AIRCR_PRIGROUP_Pos)                /*!< SCB AIRCR: PRIGROUP Mask */

+

+#define SCB_AIRCR_SYSRESETREQS_Pos          3U                                            /*!< SCB AIRCR: SYSRESETREQS Position */

+#define SCB_AIRCR_SYSRESETREQS_Msk         (1UL << SCB_AIRCR_SYSRESETREQS_Pos)            /*!< SCB AIRCR: SYSRESETREQS Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEPS_Pos              3U                                            /*!< SCB SCR: SLEEPDEEPS Position */

+#define SCB_SCR_SLEEPDEEPS_Msk             (1UL << SCB_SCR_SLEEPDEEPS_Pos)                /*!< SCB SCR: SLEEPDEEPS Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_BP_Pos                     18U                                            /*!< SCB CCR: BP Position */

+#define SCB_CCR_BP_Msk                     (1UL << SCB_CCR_BP_Pos)                        /*!< SCB CCR: BP Mask */

+

+#define SCB_CCR_IC_Pos                     17U                                            /*!< SCB CCR: IC Position */

+#define SCB_CCR_IC_Msk                     (1UL << SCB_CCR_IC_Pos)                        /*!< SCB CCR: IC Mask */

+

+#define SCB_CCR_DC_Pos                     16U                                            /*!< SCB CCR: DC Position */

+#define SCB_CCR_DC_Msk                     (1UL << SCB_CCR_DC_Pos)                        /*!< SCB CCR: DC Mask */

+

+#define SCB_CCR_STKOFHFNMIGN_Pos           10U                                            /*!< SCB CCR: STKOFHFNMIGN Position */

+#define SCB_CCR_STKOFHFNMIGN_Msk           (1UL << SCB_CCR_STKOFHFNMIGN_Pos)              /*!< SCB CCR: STKOFHFNMIGN Mask */

+

+#define SCB_CCR_BFHFNMIGN_Pos               8U                                            /*!< SCB CCR: BFHFNMIGN Position */

+#define SCB_CCR_BFHFNMIGN_Msk              (1UL << SCB_CCR_BFHFNMIGN_Pos)                 /*!< SCB CCR: BFHFNMIGN Mask */

+

+#define SCB_CCR_DIV_0_TRP_Pos               4U                                            /*!< SCB CCR: DIV_0_TRP Position */

+#define SCB_CCR_DIV_0_TRP_Msk              (1UL << SCB_CCR_DIV_0_TRP_Pos)                 /*!< SCB CCR: DIV_0_TRP Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+#define SCB_CCR_USERSETMPEND_Pos            1U                                            /*!< SCB CCR: USERSETMPEND Position */

+#define SCB_CCR_USERSETMPEND_Msk           (1UL << SCB_CCR_USERSETMPEND_Pos)              /*!< SCB CCR: USERSETMPEND Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_HARDFAULTPENDED_Pos      21U                                            /*!< SCB SHCSR: HARDFAULTPENDED Position */

+#define SCB_SHCSR_HARDFAULTPENDED_Msk      (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos)         /*!< SCB SHCSR: HARDFAULTPENDED Mask */

+

+#define SCB_SHCSR_SECUREFAULTPENDED_Pos    20U                                            /*!< SCB SHCSR: SECUREFAULTPENDED Position */

+#define SCB_SHCSR_SECUREFAULTPENDED_Msk    (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos)       /*!< SCB SHCSR: SECUREFAULTPENDED Mask */

+

+#define SCB_SHCSR_SECUREFAULTENA_Pos       19U                                            /*!< SCB SHCSR: SECUREFAULTENA Position */

+#define SCB_SHCSR_SECUREFAULTENA_Msk       (1UL << SCB_SHCSR_SECUREFAULTENA_Pos)          /*!< SCB SHCSR: SECUREFAULTENA Mask */

+

+#define SCB_SHCSR_USGFAULTENA_Pos          18U                                            /*!< SCB SHCSR: USGFAULTENA Position */

+#define SCB_SHCSR_USGFAULTENA_Msk          (1UL << SCB_SHCSR_USGFAULTENA_Pos)             /*!< SCB SHCSR: USGFAULTENA Mask */

+

+#define SCB_SHCSR_BUSFAULTENA_Pos          17U                                            /*!< SCB SHCSR: BUSFAULTENA Position */

+#define SCB_SHCSR_BUSFAULTENA_Msk          (1UL << SCB_SHCSR_BUSFAULTENA_Pos)             /*!< SCB SHCSR: BUSFAULTENA Mask */

+

+#define SCB_SHCSR_MEMFAULTENA_Pos          16U                                            /*!< SCB SHCSR: MEMFAULTENA Position */

+#define SCB_SHCSR_MEMFAULTENA_Msk          (1UL << SCB_SHCSR_MEMFAULTENA_Pos)             /*!< SCB SHCSR: MEMFAULTENA Mask */

+

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+#define SCB_SHCSR_BUSFAULTPENDED_Pos       14U                                            /*!< SCB SHCSR: BUSFAULTPENDED Position */

+#define SCB_SHCSR_BUSFAULTPENDED_Msk       (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos)          /*!< SCB SHCSR: BUSFAULTPENDED Mask */

+

+#define SCB_SHCSR_MEMFAULTPENDED_Pos       13U                                            /*!< SCB SHCSR: MEMFAULTPENDED Position */

+#define SCB_SHCSR_MEMFAULTPENDED_Msk       (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos)          /*!< SCB SHCSR: MEMFAULTPENDED Mask */

+

+#define SCB_SHCSR_USGFAULTPENDED_Pos       12U                                            /*!< SCB SHCSR: USGFAULTPENDED Position */

+#define SCB_SHCSR_USGFAULTPENDED_Msk       (1UL << SCB_SHCSR_USGFAULTPENDED_Pos)          /*!< SCB SHCSR: USGFAULTPENDED Mask */

+

+#define SCB_SHCSR_SYSTICKACT_Pos           11U                                            /*!< SCB SHCSR: SYSTICKACT Position */

+#define SCB_SHCSR_SYSTICKACT_Msk           (1UL << SCB_SHCSR_SYSTICKACT_Pos)              /*!< SCB SHCSR: SYSTICKACT Mask */

+

+#define SCB_SHCSR_PENDSVACT_Pos            10U                                            /*!< SCB SHCSR: PENDSVACT Position */

+#define SCB_SHCSR_PENDSVACT_Msk            (1UL << SCB_SHCSR_PENDSVACT_Pos)               /*!< SCB SHCSR: PENDSVACT Mask */

+

+#define SCB_SHCSR_MONITORACT_Pos            8U                                            /*!< SCB SHCSR: MONITORACT Position */

+#define SCB_SHCSR_MONITORACT_Msk           (1UL << SCB_SHCSR_MONITORACT_Pos)              /*!< SCB SHCSR: MONITORACT Mask */

+

+#define SCB_SHCSR_SVCALLACT_Pos             7U                                            /*!< SCB SHCSR: SVCALLACT Position */

+#define SCB_SHCSR_SVCALLACT_Msk            (1UL << SCB_SHCSR_SVCALLACT_Pos)               /*!< SCB SHCSR: SVCALLACT Mask */

+

+#define SCB_SHCSR_NMIACT_Pos                5U                                            /*!< SCB SHCSR: NMIACT Position */

+#define SCB_SHCSR_NMIACT_Msk               (1UL << SCB_SHCSR_NMIACT_Pos)                  /*!< SCB SHCSR: NMIACT Mask */

+

+#define SCB_SHCSR_SECUREFAULTACT_Pos        4U                                            /*!< SCB SHCSR: SECUREFAULTACT Position */

+#define SCB_SHCSR_SECUREFAULTACT_Msk       (1UL << SCB_SHCSR_SECUREFAULTACT_Pos)          /*!< SCB SHCSR: SECUREFAULTACT Mask */

+

+#define SCB_SHCSR_USGFAULTACT_Pos           3U                                            /*!< SCB SHCSR: USGFAULTACT Position */

+#define SCB_SHCSR_USGFAULTACT_Msk          (1UL << SCB_SHCSR_USGFAULTACT_Pos)             /*!< SCB SHCSR: USGFAULTACT Mask */

+

+#define SCB_SHCSR_HARDFAULTACT_Pos          2U                                            /*!< SCB SHCSR: HARDFAULTACT Position */

+#define SCB_SHCSR_HARDFAULTACT_Msk         (1UL << SCB_SHCSR_HARDFAULTACT_Pos)            /*!< SCB SHCSR: HARDFAULTACT Mask */

+

+#define SCB_SHCSR_BUSFAULTACT_Pos           1U                                            /*!< SCB SHCSR: BUSFAULTACT Position */

+#define SCB_SHCSR_BUSFAULTACT_Msk          (1UL << SCB_SHCSR_BUSFAULTACT_Pos)             /*!< SCB SHCSR: BUSFAULTACT Mask */

+

+#define SCB_SHCSR_MEMFAULTACT_Pos           0U                                            /*!< SCB SHCSR: MEMFAULTACT Position */

+#define SCB_SHCSR_MEMFAULTACT_Msk          (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/)         /*!< SCB SHCSR: MEMFAULTACT Mask */

+

+/* SCB Configurable Fault Status Register Definitions */

+#define SCB_CFSR_USGFAULTSR_Pos            16U                                            /*!< SCB CFSR: Usage Fault Status Register Position */

+#define SCB_CFSR_USGFAULTSR_Msk            (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos)          /*!< SCB CFSR: Usage Fault Status Register Mask */

+

+#define SCB_CFSR_BUSFAULTSR_Pos             8U                                            /*!< SCB CFSR: Bus Fault Status Register Position */

+#define SCB_CFSR_BUSFAULTSR_Msk            (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos)            /*!< SCB CFSR: Bus Fault Status Register Mask */

+

+#define SCB_CFSR_MEMFAULTSR_Pos             0U                                            /*!< SCB CFSR: Memory Manage Fault Status Register Position */

+#define SCB_CFSR_MEMFAULTSR_Msk            (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/)        /*!< SCB CFSR: Memory Manage Fault Status Register Mask */

+

+/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_MMARVALID_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 7U)               /*!< SCB CFSR (MMFSR): MMARVALID Position */

+#define SCB_CFSR_MMARVALID_Msk             (1UL << SCB_CFSR_MMARVALID_Pos)                /*!< SCB CFSR (MMFSR): MMARVALID Mask */

+

+#define SCB_CFSR_MLSPERR_Pos               (SCB_SHCSR_MEMFAULTACT_Pos + 5U)               /*!< SCB CFSR (MMFSR): MLSPERR Position */

+#define SCB_CFSR_MLSPERR_Msk               (1UL << SCB_CFSR_MLSPERR_Pos)                  /*!< SCB CFSR (MMFSR): MLSPERR Mask */

+

+#define SCB_CFSR_MSTKERR_Pos               (SCB_SHCSR_MEMFAULTACT_Pos + 4U)               /*!< SCB CFSR (MMFSR): MSTKERR Position */

+#define SCB_CFSR_MSTKERR_Msk               (1UL << SCB_CFSR_MSTKERR_Pos)                  /*!< SCB CFSR (MMFSR): MSTKERR Mask */

+

+#define SCB_CFSR_MUNSTKERR_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 3U)               /*!< SCB CFSR (MMFSR): MUNSTKERR Position */

+#define SCB_CFSR_MUNSTKERR_Msk             (1UL << SCB_CFSR_MUNSTKERR_Pos)                /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */

+

+#define SCB_CFSR_DACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 1U)               /*!< SCB CFSR (MMFSR): DACCVIOL Position */

+#define SCB_CFSR_DACCVIOL_Msk              (1UL << SCB_CFSR_DACCVIOL_Pos)                 /*!< SCB CFSR (MMFSR): DACCVIOL Mask */

+

+#define SCB_CFSR_IACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 0U)               /*!< SCB CFSR (MMFSR): IACCVIOL Position */

+#define SCB_CFSR_IACCVIOL_Msk              (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/)             /*!< SCB CFSR (MMFSR): IACCVIOL Mask */

+

+/* BusFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_BFARVALID_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 7U)                  /*!< SCB CFSR (BFSR): BFARVALID Position */

+#define SCB_CFSR_BFARVALID_Msk            (1UL << SCB_CFSR_BFARVALID_Pos)                 /*!< SCB CFSR (BFSR): BFARVALID Mask */

+

+#define SCB_CFSR_LSPERR_Pos               (SCB_CFSR_BUSFAULTSR_Pos + 5U)                  /*!< SCB CFSR (BFSR): LSPERR Position */

+#define SCB_CFSR_LSPERR_Msk               (1UL << SCB_CFSR_LSPERR_Pos)                    /*!< SCB CFSR (BFSR): LSPERR Mask */

+

+#define SCB_CFSR_STKERR_Pos               (SCB_CFSR_BUSFAULTSR_Pos + 4U)                  /*!< SCB CFSR (BFSR): STKERR Position */

+#define SCB_CFSR_STKERR_Msk               (1UL << SCB_CFSR_STKERR_Pos)                    /*!< SCB CFSR (BFSR): STKERR Mask */

+

+#define SCB_CFSR_UNSTKERR_Pos             (SCB_CFSR_BUSFAULTSR_Pos + 3U)                  /*!< SCB CFSR (BFSR): UNSTKERR Position */

+#define SCB_CFSR_UNSTKERR_Msk             (1UL << SCB_CFSR_UNSTKERR_Pos)                  /*!< SCB CFSR (BFSR): UNSTKERR Mask */

+

+#define SCB_CFSR_IMPRECISERR_Pos          (SCB_CFSR_BUSFAULTSR_Pos + 2U)                  /*!< SCB CFSR (BFSR): IMPRECISERR Position */

+#define SCB_CFSR_IMPRECISERR_Msk          (1UL << SCB_CFSR_IMPRECISERR_Pos)               /*!< SCB CFSR (BFSR): IMPRECISERR Mask */

+

+#define SCB_CFSR_PRECISERR_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 1U)                  /*!< SCB CFSR (BFSR): PRECISERR Position */

+#define SCB_CFSR_PRECISERR_Msk            (1UL << SCB_CFSR_PRECISERR_Pos)                 /*!< SCB CFSR (BFSR): PRECISERR Mask */

+

+#define SCB_CFSR_IBUSERR_Pos              (SCB_CFSR_BUSFAULTSR_Pos + 0U)                  /*!< SCB CFSR (BFSR): IBUSERR Position */

+#define SCB_CFSR_IBUSERR_Msk              (1UL << SCB_CFSR_IBUSERR_Pos)                   /*!< SCB CFSR (BFSR): IBUSERR Mask */

+

+/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_DIVBYZERO_Pos            (SCB_CFSR_USGFAULTSR_Pos + 9U)                  /*!< SCB CFSR (UFSR): DIVBYZERO Position */

+#define SCB_CFSR_DIVBYZERO_Msk            (1UL << SCB_CFSR_DIVBYZERO_Pos)                 /*!< SCB CFSR (UFSR): DIVBYZERO Mask */

+

+#define SCB_CFSR_UNALIGNED_Pos            (SCB_CFSR_USGFAULTSR_Pos + 8U)                  /*!< SCB CFSR (UFSR): UNALIGNED Position */

+#define SCB_CFSR_UNALIGNED_Msk            (1UL << SCB_CFSR_UNALIGNED_Pos)                 /*!< SCB CFSR (UFSR): UNALIGNED Mask */

+

+#define SCB_CFSR_STKOF_Pos                (SCB_CFSR_USGFAULTSR_Pos + 4U)                  /*!< SCB CFSR (UFSR): STKOF Position */

+#define SCB_CFSR_STKOF_Msk                (1UL << SCB_CFSR_STKOF_Pos)                     /*!< SCB CFSR (UFSR): STKOF Mask */

+

+#define SCB_CFSR_NOCP_Pos                 (SCB_CFSR_USGFAULTSR_Pos + 3U)                  /*!< SCB CFSR (UFSR): NOCP Position */

+#define SCB_CFSR_NOCP_Msk                 (1UL << SCB_CFSR_NOCP_Pos)                      /*!< SCB CFSR (UFSR): NOCP Mask */

+

+#define SCB_CFSR_INVPC_Pos                (SCB_CFSR_USGFAULTSR_Pos + 2U)                  /*!< SCB CFSR (UFSR): INVPC Position */

+#define SCB_CFSR_INVPC_Msk                (1UL << SCB_CFSR_INVPC_Pos)                     /*!< SCB CFSR (UFSR): INVPC Mask */

+

+#define SCB_CFSR_INVSTATE_Pos             (SCB_CFSR_USGFAULTSR_Pos + 1U)                  /*!< SCB CFSR (UFSR): INVSTATE Position */

+#define SCB_CFSR_INVSTATE_Msk             (1UL << SCB_CFSR_INVSTATE_Pos)                  /*!< SCB CFSR (UFSR): INVSTATE Mask */

+

+#define SCB_CFSR_UNDEFINSTR_Pos           (SCB_CFSR_USGFAULTSR_Pos + 0U)                  /*!< SCB CFSR (UFSR): UNDEFINSTR Position */

+#define SCB_CFSR_UNDEFINSTR_Msk           (1UL << SCB_CFSR_UNDEFINSTR_Pos)                /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */

+

+/* SCB Hard Fault Status Register Definitions */

+#define SCB_HFSR_DEBUGEVT_Pos              31U                                            /*!< SCB HFSR: DEBUGEVT Position */

+#define SCB_HFSR_DEBUGEVT_Msk              (1UL << SCB_HFSR_DEBUGEVT_Pos)                 /*!< SCB HFSR: DEBUGEVT Mask */

+

+#define SCB_HFSR_FORCED_Pos                30U                                            /*!< SCB HFSR: FORCED Position */

+#define SCB_HFSR_FORCED_Msk                (1UL << SCB_HFSR_FORCED_Pos)                   /*!< SCB HFSR: FORCED Mask */

+

+#define SCB_HFSR_VECTTBL_Pos                1U                                            /*!< SCB HFSR: VECTTBL Position */

+#define SCB_HFSR_VECTTBL_Msk               (1UL << SCB_HFSR_VECTTBL_Pos)                  /*!< SCB HFSR: VECTTBL Mask */

+

+/* SCB Debug Fault Status Register Definitions */

+#define SCB_DFSR_EXTERNAL_Pos               4U                                            /*!< SCB DFSR: EXTERNAL Position */

+#define SCB_DFSR_EXTERNAL_Msk              (1UL << SCB_DFSR_EXTERNAL_Pos)                 /*!< SCB DFSR: EXTERNAL Mask */

+

+#define SCB_DFSR_VCATCH_Pos                 3U                                            /*!< SCB DFSR: VCATCH Position */

+#define SCB_DFSR_VCATCH_Msk                (1UL << SCB_DFSR_VCATCH_Pos)                   /*!< SCB DFSR: VCATCH Mask */

+

+#define SCB_DFSR_DWTTRAP_Pos                2U                                            /*!< SCB DFSR: DWTTRAP Position */

+#define SCB_DFSR_DWTTRAP_Msk               (1UL << SCB_DFSR_DWTTRAP_Pos)                  /*!< SCB DFSR: DWTTRAP Mask */

+

+#define SCB_DFSR_BKPT_Pos                   1U                                            /*!< SCB DFSR: BKPT Position */

+#define SCB_DFSR_BKPT_Msk                  (1UL << SCB_DFSR_BKPT_Pos)                     /*!< SCB DFSR: BKPT Mask */

+

+#define SCB_DFSR_HALTED_Pos                 0U                                            /*!< SCB DFSR: HALTED Position */

+#define SCB_DFSR_HALTED_Msk                (1UL /*<< SCB_DFSR_HALTED_Pos*/)               /*!< SCB DFSR: HALTED Mask */

+

+/* SCB Non-Secure Access Control Register Definitions */

+#define SCB_NSACR_CP11_Pos                 11U                                            /*!< SCB NSACR: CP11 Position */

+#define SCB_NSACR_CP11_Msk                 (1UL << SCB_NSACR_CP11_Pos)                    /*!< SCB NSACR: CP11 Mask */

+

+#define SCB_NSACR_CP10_Pos                 10U                                            /*!< SCB NSACR: CP10 Position */

+#define SCB_NSACR_CP10_Msk                 (1UL << SCB_NSACR_CP10_Pos)                    /*!< SCB NSACR: CP10 Mask */

+

+#define SCB_NSACR_CPn_Pos                   0U                                            /*!< SCB NSACR: CPn Position */

+#define SCB_NSACR_CPn_Msk                  (1UL /*<< SCB_NSACR_CPn_Pos*/)                 /*!< SCB NSACR: CPn Mask */

+

+/* SCB Cache Level ID Register Definitions */

+#define SCB_CLIDR_LOUU_Pos                 27U                                            /*!< SCB CLIDR: LoUU Position */

+#define SCB_CLIDR_LOUU_Msk                 (7UL << SCB_CLIDR_LOUU_Pos)                    /*!< SCB CLIDR: LoUU Mask */

+

+#define SCB_CLIDR_LOC_Pos                  24U                                            /*!< SCB CLIDR: LoC Position */

+#define SCB_CLIDR_LOC_Msk                  (7UL << SCB_CLIDR_LOC_Pos)                     /*!< SCB CLIDR: LoC Mask */

+

+/* SCB Cache Type Register Definitions */

+#define SCB_CTR_FORMAT_Pos                 29U                                            /*!< SCB CTR: Format Position */

+#define SCB_CTR_FORMAT_Msk                 (7UL << SCB_CTR_FORMAT_Pos)                    /*!< SCB CTR: Format Mask */

+

+#define SCB_CTR_CWG_Pos                    24U                                            /*!< SCB CTR: CWG Position */

+#define SCB_CTR_CWG_Msk                    (0xFUL << SCB_CTR_CWG_Pos)                     /*!< SCB CTR: CWG Mask */

+

+#define SCB_CTR_ERG_Pos                    20U                                            /*!< SCB CTR: ERG Position */

+#define SCB_CTR_ERG_Msk                    (0xFUL << SCB_CTR_ERG_Pos)                     /*!< SCB CTR: ERG Mask */

+

+#define SCB_CTR_DMINLINE_Pos               16U                                            /*!< SCB CTR: DminLine Position */

+#define SCB_CTR_DMINLINE_Msk               (0xFUL << SCB_CTR_DMINLINE_Pos)                /*!< SCB CTR: DminLine Mask */

+

+#define SCB_CTR_IMINLINE_Pos                0U                                            /*!< SCB CTR: ImInLine Position */

+#define SCB_CTR_IMINLINE_Msk               (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/)            /*!< SCB CTR: ImInLine Mask */

+

+/* SCB Cache Size ID Register Definitions */

+#define SCB_CCSIDR_WT_Pos                  31U                                            /*!< SCB CCSIDR: WT Position */

+#define SCB_CCSIDR_WT_Msk                  (1UL << SCB_CCSIDR_WT_Pos)                     /*!< SCB CCSIDR: WT Mask */

+

+#define SCB_CCSIDR_WB_Pos                  30U                                            /*!< SCB CCSIDR: WB Position */

+#define SCB_CCSIDR_WB_Msk                  (1UL << SCB_CCSIDR_WB_Pos)                     /*!< SCB CCSIDR: WB Mask */

+

+#define SCB_CCSIDR_RA_Pos                  29U                                            /*!< SCB CCSIDR: RA Position */

+#define SCB_CCSIDR_RA_Msk                  (1UL << SCB_CCSIDR_RA_Pos)                     /*!< SCB CCSIDR: RA Mask */

+

+#define SCB_CCSIDR_WA_Pos                  28U                                            /*!< SCB CCSIDR: WA Position */

+#define SCB_CCSIDR_WA_Msk                  (1UL << SCB_CCSIDR_WA_Pos)                     /*!< SCB CCSIDR: WA Mask */

+

+#define SCB_CCSIDR_NUMSETS_Pos             13U                                            /*!< SCB CCSIDR: NumSets Position */

+#define SCB_CCSIDR_NUMSETS_Msk             (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos)           /*!< SCB CCSIDR: NumSets Mask */

+

+#define SCB_CCSIDR_ASSOCIATIVITY_Pos        3U                                            /*!< SCB CCSIDR: Associativity Position */

+#define SCB_CCSIDR_ASSOCIATIVITY_Msk       (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos)      /*!< SCB CCSIDR: Associativity Mask */

+

+#define SCB_CCSIDR_LINESIZE_Pos             0U                                            /*!< SCB CCSIDR: LineSize Position */

+#define SCB_CCSIDR_LINESIZE_Msk            (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/)           /*!< SCB CCSIDR: LineSize Mask */

+

+/* SCB Cache Size Selection Register Definitions */

+#define SCB_CSSELR_LEVEL_Pos                1U                                            /*!< SCB CSSELR: Level Position */

+#define SCB_CSSELR_LEVEL_Msk               (7UL << SCB_CSSELR_LEVEL_Pos)                  /*!< SCB CSSELR: Level Mask */

+

+#define SCB_CSSELR_IND_Pos                  0U                                            /*!< SCB CSSELR: InD Position */

+#define SCB_CSSELR_IND_Msk                 (1UL /*<< SCB_CSSELR_IND_Pos*/)                /*!< SCB CSSELR: InD Mask */

+

+/* SCB Software Triggered Interrupt Register Definitions */

+#define SCB_STIR_INTID_Pos                  0U                                            /*!< SCB STIR: INTID Position */

+#define SCB_STIR_INTID_Msk                 (0x1FFUL /*<< SCB_STIR_INTID_Pos*/)            /*!< SCB STIR: INTID Mask */

+

+/* SCB D-Cache Invalidate by Set-way Register Definitions */

+#define SCB_DCISW_WAY_Pos                  30U                                            /*!< SCB DCISW: Way Position */

+#define SCB_DCISW_WAY_Msk                  (3UL << SCB_DCISW_WAY_Pos)                     /*!< SCB DCISW: Way Mask */

+

+#define SCB_DCISW_SET_Pos                   5U                                            /*!< SCB DCISW: Set Position */

+#define SCB_DCISW_SET_Msk                  (0x1FFUL << SCB_DCISW_SET_Pos)                 /*!< SCB DCISW: Set Mask */

+

+/* SCB D-Cache Clean by Set-way Register Definitions */

+#define SCB_DCCSW_WAY_Pos                  30U                                            /*!< SCB DCCSW: Way Position */

+#define SCB_DCCSW_WAY_Msk                  (3UL << SCB_DCCSW_WAY_Pos)                     /*!< SCB DCCSW: Way Mask */

+

+#define SCB_DCCSW_SET_Pos                   5U                                            /*!< SCB DCCSW: Set Position */

+#define SCB_DCCSW_SET_Msk                  (0x1FFUL << SCB_DCCSW_SET_Pos)                 /*!< SCB DCCSW: Set Mask */

+

+/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */

+#define SCB_DCCISW_WAY_Pos                 30U                                            /*!< SCB DCCISW: Way Position */

+#define SCB_DCCISW_WAY_Msk                 (3UL << SCB_DCCISW_WAY_Pos)                    /*!< SCB DCCISW: Way Mask */

+

+#define SCB_DCCISW_SET_Pos                  5U                                            /*!< SCB DCCISW: Set Position */

+#define SCB_DCCISW_SET_Msk                 (0x1FFUL << SCB_DCCISW_SET_Pos)                /*!< SCB DCCISW: Set Mask */

+

+/* Instruction Tightly-Coupled Memory Control Register Definitions */

+#define SCB_ITCMCR_SZ_Pos                   3U                                            /*!< SCB ITCMCR: SZ Position */

+#define SCB_ITCMCR_SZ_Msk                  (0xFUL << SCB_ITCMCR_SZ_Pos)                   /*!< SCB ITCMCR: SZ Mask */

+

+#define SCB_ITCMCR_RETEN_Pos                2U                                            /*!< SCB ITCMCR: RETEN Position */

+#define SCB_ITCMCR_RETEN_Msk               (1UL << SCB_ITCMCR_RETEN_Pos)                  /*!< SCB ITCMCR: RETEN Mask */

+

+#define SCB_ITCMCR_RMW_Pos                  1U                                            /*!< SCB ITCMCR: RMW Position */

+#define SCB_ITCMCR_RMW_Msk                 (1UL << SCB_ITCMCR_RMW_Pos)                    /*!< SCB ITCMCR: RMW Mask */

+

+#define SCB_ITCMCR_EN_Pos                   0U                                            /*!< SCB ITCMCR: EN Position */

+#define SCB_ITCMCR_EN_Msk                  (1UL /*<< SCB_ITCMCR_EN_Pos*/)                 /*!< SCB ITCMCR: EN Mask */

+

+/* Data Tightly-Coupled Memory Control Register Definitions */

+#define SCB_DTCMCR_SZ_Pos                   3U                                            /*!< SCB DTCMCR: SZ Position */

+#define SCB_DTCMCR_SZ_Msk                  (0xFUL << SCB_DTCMCR_SZ_Pos)                   /*!< SCB DTCMCR: SZ Mask */

+

+#define SCB_DTCMCR_RETEN_Pos                2U                                            /*!< SCB DTCMCR: RETEN Position */

+#define SCB_DTCMCR_RETEN_Msk               (1UL << SCB_DTCMCR_RETEN_Pos)                   /*!< SCB DTCMCR: RETEN Mask */

+

+#define SCB_DTCMCR_RMW_Pos                  1U                                            /*!< SCB DTCMCR: RMW Position */

+#define SCB_DTCMCR_RMW_Msk                 (1UL << SCB_DTCMCR_RMW_Pos)                    /*!< SCB DTCMCR: RMW Mask */

+

+#define SCB_DTCMCR_EN_Pos                   0U                                            /*!< SCB DTCMCR: EN Position */

+#define SCB_DTCMCR_EN_Msk                  (1UL /*<< SCB_DTCMCR_EN_Pos*/)                 /*!< SCB DTCMCR: EN Mask */

+

+/* AHBP Control Register Definitions */

+#define SCB_AHBPCR_SZ_Pos                   1U                                            /*!< SCB AHBPCR: SZ Position */

+#define SCB_AHBPCR_SZ_Msk                  (7UL << SCB_AHBPCR_SZ_Pos)                     /*!< SCB AHBPCR: SZ Mask */

+

+#define SCB_AHBPCR_EN_Pos                   0U                                            /*!< SCB AHBPCR: EN Position */

+#define SCB_AHBPCR_EN_Msk                  (1UL /*<< SCB_AHBPCR_EN_Pos*/)                 /*!< SCB AHBPCR: EN Mask */

+

+/* L1 Cache Control Register Definitions */

+#define SCB_CACR_FORCEWT_Pos                2U                                            /*!< SCB CACR: FORCEWT Position */

+#define SCB_CACR_FORCEWT_Msk               (1UL << SCB_CACR_FORCEWT_Pos)                  /*!< SCB CACR: FORCEWT Mask */

+

+#define SCB_CACR_ECCEN_Pos                  1U                                            /*!< SCB CACR: ECCEN Position */

+#define SCB_CACR_ECCEN_Msk                 (1UL << SCB_CACR_ECCEN_Pos)                    /*!< SCB CACR: ECCEN Mask */

+

+#define SCB_CACR_SIWT_Pos                   0U                                            /*!< SCB CACR: SIWT Position */

+#define SCB_CACR_SIWT_Msk                  (1UL /*<< SCB_CACR_SIWT_Pos*/)                 /*!< SCB CACR: SIWT Mask */

+

+/* AHBS Control Register Definitions */

+#define SCB_AHBSCR_INITCOUNT_Pos           11U                                            /*!< SCB AHBSCR: INITCOUNT Position */

+#define SCB_AHBSCR_INITCOUNT_Msk           (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos)           /*!< SCB AHBSCR: INITCOUNT Mask */

+

+#define SCB_AHBSCR_TPRI_Pos                 2U                                            /*!< SCB AHBSCR: TPRI Position */

+#define SCB_AHBSCR_TPRI_Msk                (0x1FFUL << SCB_AHBPCR_TPRI_Pos)               /*!< SCB AHBSCR: TPRI Mask */

+

+#define SCB_AHBSCR_CTL_Pos                  0U                                            /*!< SCB AHBSCR: CTL Position*/

+#define SCB_AHBSCR_CTL_Msk                 (3UL /*<< SCB_AHBPCR_CTL_Pos*/)                /*!< SCB AHBSCR: CTL Mask */

+

+/* Auxiliary Bus Fault Status Register Definitions */

+#define SCB_ABFSR_AXIMTYPE_Pos              8U                                            /*!< SCB ABFSR: AXIMTYPE Position*/

+#define SCB_ABFSR_AXIMTYPE_Msk             (3UL << SCB_ABFSR_AXIMTYPE_Pos)                /*!< SCB ABFSR: AXIMTYPE Mask */

+

+#define SCB_ABFSR_EPPB_Pos                  4U                                            /*!< SCB ABFSR: EPPB Position*/

+#define SCB_ABFSR_EPPB_Msk                 (1UL << SCB_ABFSR_EPPB_Pos)                    /*!< SCB ABFSR: EPPB Mask */

+

+#define SCB_ABFSR_AXIM_Pos                  3U                                            /*!< SCB ABFSR: AXIM Position*/

+#define SCB_ABFSR_AXIM_Msk                 (1UL << SCB_ABFSR_AXIM_Pos)                    /*!< SCB ABFSR: AXIM Mask */

+

+#define SCB_ABFSR_AHBP_Pos                  2U                                            /*!< SCB ABFSR: AHBP Position*/

+#define SCB_ABFSR_AHBP_Msk                 (1UL << SCB_ABFSR_AHBP_Pos)                    /*!< SCB ABFSR: AHBP Mask */

+

+#define SCB_ABFSR_DTCM_Pos                  1U                                            /*!< SCB ABFSR: DTCM Position*/

+#define SCB_ABFSR_DTCM_Msk                 (1UL << SCB_ABFSR_DTCM_Pos)                    /*!< SCB ABFSR: DTCM Mask */

+

+#define SCB_ABFSR_ITCM_Pos                  0U                                            /*!< SCB ABFSR: ITCM Position*/

+#define SCB_ABFSR_ITCM_Msk                 (1UL /*<< SCB_ABFSR_ITCM_Pos*/)                /*!< SCB ABFSR: ITCM Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)

+  \brief    Type definitions for the System Control and ID Register not in the SCB

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control and ID Register not in the SCB.

+ */

+typedef struct

+{

+        uint32_t RESERVED0[1U];

+  __IM  uint32_t ICTR;                   /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */

+  __IOM uint32_t ACTLR;                  /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */

+  __IOM uint32_t CPPWR;                  /*!< Offset: 0x00C (R/W)  Coprocessor Power Control  Register */

+} SCnSCB_Type;

+

+/* Interrupt Controller Type Register Definitions */

+#define SCnSCB_ICTR_INTLINESNUM_Pos         0U                                         /*!< ICTR: INTLINESNUM Position */

+#define SCnSCB_ICTR_INTLINESNUM_Msk        (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/)  /*!< ICTR: INTLINESNUM Mask */

+

+/*@} end of group CMSIS_SCnotSCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)

+  \brief    Type definitions for the Instrumentation Trace Macrocell (ITM)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).

+ */

+typedef struct

+{

+  __OM  union

+  {

+    __OM  uint8_t    u8;                 /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */

+    __OM  uint16_t   u16;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */

+    __OM  uint32_t   u32;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */

+  }  PORT [32U];                         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */

+        uint32_t RESERVED0[864U];

+  __IOM uint32_t TER;                    /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */

+        uint32_t RESERVED1[15U];

+  __IOM uint32_t TPR;                    /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */

+        uint32_t RESERVED2[15U];

+  __IOM uint32_t TCR;                    /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */

+        uint32_t RESERVED3[29U];

+  __OM  uint32_t IWR;                    /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */

+  __IM  uint32_t IRR;                    /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */

+  __IOM uint32_t IMCR;                   /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */

+        uint32_t RESERVED4[43U];

+  __OM  uint32_t LAR;                    /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */

+  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */

+        uint32_t RESERVED5[1U];

+  __IM  uint32_t DEVARCH;                /*!< Offset: 0xFBC (R/ )  ITM Device Architecture Register */

+        uint32_t RESERVED6[4U];

+  __IM  uint32_t PID4;                   /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */

+  __IM  uint32_t PID5;                   /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */

+  __IM  uint32_t PID6;                   /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */

+  __IM  uint32_t PID7;                   /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */

+  __IM  uint32_t PID0;                   /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */

+  __IM  uint32_t PID1;                   /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */

+  __IM  uint32_t PID2;                   /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */

+  __IM  uint32_t PID3;                   /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */

+  __IM  uint32_t CID0;                   /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */

+  __IM  uint32_t CID1;                   /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */

+  __IM  uint32_t CID2;                   /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */

+  __IM  uint32_t CID3;                   /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */

+} ITM_Type;

+

+/* ITM Stimulus Port Register Definitions */

+#define ITM_STIM_DISABLED_Pos               1U                                            /*!< ITM STIM: DISABLED Position */

+#define ITM_STIM_DISABLED_Msk              (0x1UL << ITM_STIM_DISABLED_Pos)               /*!< ITM STIM: DISABLED Mask */

+

+#define ITM_STIM_FIFOREADY_Pos              0U                                            /*!< ITM STIM: FIFOREADY Position */

+#define ITM_STIM_FIFOREADY_Msk             (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/)          /*!< ITM STIM: FIFOREADY Mask */

+

+/* ITM Trace Privilege Register Definitions */

+#define ITM_TPR_PRIVMASK_Pos                0U                                            /*!< ITM TPR: PRIVMASK Position */

+#define ITM_TPR_PRIVMASK_Msk               (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/)            /*!< ITM TPR: PRIVMASK Mask */

+

+/* ITM Trace Control Register Definitions */

+#define ITM_TCR_BUSY_Pos                   23U                                            /*!< ITM TCR: BUSY Position */

+#define ITM_TCR_BUSY_Msk                   (1UL << ITM_TCR_BUSY_Pos)                      /*!< ITM TCR: BUSY Mask */

+

+#define ITM_TCR_TRACEBUSID_Pos             16U                                            /*!< ITM TCR: ATBID Position */

+#define ITM_TCR_TRACEBUSID_Msk             (0x7FUL << ITM_TCR_TRACEBUSID_Pos)             /*!< ITM TCR: ATBID Mask */

+

+#define ITM_TCR_GTSFREQ_Pos                10U                                            /*!< ITM TCR: Global timestamp frequency Position */

+#define ITM_TCR_GTSFREQ_Msk                (3UL << ITM_TCR_GTSFREQ_Pos)                   /*!< ITM TCR: Global timestamp frequency Mask */

+

+#define ITM_TCR_TSPRESCALE_Pos              8U                                            /*!< ITM TCR: TSPRESCALE Position */

+#define ITM_TCR_TSPRESCALE_Msk             (3UL << ITM_TCR_TSPRESCALE_Pos)                /*!< ITM TCR: TSPRESCALE Mask */

+

+#define ITM_TCR_STALLENA_Pos                5U                                            /*!< ITM TCR: STALLENA Position */

+#define ITM_TCR_STALLENA_Msk               (1UL << ITM_TCR_STALLENA_Pos)                  /*!< ITM TCR: STALLENA Mask */

+

+#define ITM_TCR_SWOENA_Pos                  4U                                            /*!< ITM TCR: SWOENA Position */

+#define ITM_TCR_SWOENA_Msk                 (1UL << ITM_TCR_SWOENA_Pos)                    /*!< ITM TCR: SWOENA Mask */

+

+#define ITM_TCR_DWTENA_Pos                  3U                                            /*!< ITM TCR: DWTENA Position */

+#define ITM_TCR_DWTENA_Msk                 (1UL << ITM_TCR_DWTENA_Pos)                    /*!< ITM TCR: DWTENA Mask */

+

+#define ITM_TCR_SYNCENA_Pos                 2U                                            /*!< ITM TCR: SYNCENA Position */

+#define ITM_TCR_SYNCENA_Msk                (1UL << ITM_TCR_SYNCENA_Pos)                   /*!< ITM TCR: SYNCENA Mask */

+

+#define ITM_TCR_TSENA_Pos                   1U                                            /*!< ITM TCR: TSENA Position */

+#define ITM_TCR_TSENA_Msk                  (1UL << ITM_TCR_TSENA_Pos)                     /*!< ITM TCR: TSENA Mask */

+

+#define ITM_TCR_ITMENA_Pos                  0U                                            /*!< ITM TCR: ITM Enable bit Position */

+#define ITM_TCR_ITMENA_Msk                 (1UL /*<< ITM_TCR_ITMENA_Pos*/)                /*!< ITM TCR: ITM Enable bit Mask */

+

+/* ITM Integration Write Register Definitions */

+#define ITM_IWR_ATVALIDM_Pos                0U                                            /*!< ITM IWR: ATVALIDM Position */

+#define ITM_IWR_ATVALIDM_Msk               (1UL /*<< ITM_IWR_ATVALIDM_Pos*/)              /*!< ITM IWR: ATVALIDM Mask */

+

+/* ITM Integration Read Register Definitions */

+#define ITM_IRR_ATREADYM_Pos                0U                                            /*!< ITM IRR: ATREADYM Position */

+#define ITM_IRR_ATREADYM_Msk               (1UL /*<< ITM_IRR_ATREADYM_Pos*/)              /*!< ITM IRR: ATREADYM Mask */

+

+/* ITM Integration Mode Control Register Definitions */

+#define ITM_IMCR_INTEGRATION_Pos            0U                                            /*!< ITM IMCR: INTEGRATION Position */

+#define ITM_IMCR_INTEGRATION_Msk           (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/)          /*!< ITM IMCR: INTEGRATION Mask */

+

+/* ITM Lock Status Register Definitions */

+#define ITM_LSR_ByteAcc_Pos                 2U                                            /*!< ITM LSR: ByteAcc Position */

+#define ITM_LSR_ByteAcc_Msk                (1UL << ITM_LSR_ByteAcc_Pos)                   /*!< ITM LSR: ByteAcc Mask */

+

+#define ITM_LSR_Access_Pos                  1U                                            /*!< ITM LSR: Access Position */

+#define ITM_LSR_Access_Msk                 (1UL << ITM_LSR_Access_Pos)                    /*!< ITM LSR: Access Mask */

+

+#define ITM_LSR_Present_Pos                 0U                                            /*!< ITM LSR: Present Position */

+#define ITM_LSR_Present_Msk                (1UL /*<< ITM_LSR_Present_Pos*/)               /*!< ITM LSR: Present Mask */

+

+/*@}*/ /* end of group CMSIS_ITM */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)

+  \brief    Type definitions for the Data Watchpoint and Trace (DWT)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Data Watchpoint and Trace Register (DWT).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  Control Register */

+  __IOM uint32_t CYCCNT;                 /*!< Offset: 0x004 (R/W)  Cycle Count Register */

+  __IOM uint32_t CPICNT;                 /*!< Offset: 0x008 (R/W)  CPI Count Register */

+  __IOM uint32_t EXCCNT;                 /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */

+  __IOM uint32_t SLEEPCNT;               /*!< Offset: 0x010 (R/W)  Sleep Count Register */

+  __IOM uint32_t LSUCNT;                 /*!< Offset: 0x014 (R/W)  LSU Count Register */

+  __IOM uint32_t FOLDCNT;                /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */

+  __IM  uint32_t PCSR;                   /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */

+  __IOM uint32_t COMP0;                  /*!< Offset: 0x020 (R/W)  Comparator Register 0 */

+        uint32_t RESERVED1[1U];

+  __IOM uint32_t FUNCTION0;              /*!< Offset: 0x028 (R/W)  Function Register 0 */

+        uint32_t RESERVED2[1U];

+  __IOM uint32_t COMP1;                  /*!< Offset: 0x030 (R/W)  Comparator Register 1 */

+        uint32_t RESERVED3[1U];

+  __IOM uint32_t FUNCTION1;              /*!< Offset: 0x038 (R/W)  Function Register 1 */

+        uint32_t RESERVED4[1U];

+  __IOM uint32_t COMP2;                  /*!< Offset: 0x040 (R/W)  Comparator Register 2 */

+        uint32_t RESERVED5[1U];

+  __IOM uint32_t FUNCTION2;              /*!< Offset: 0x048 (R/W)  Function Register 2 */

+        uint32_t RESERVED6[1U];

+  __IOM uint32_t COMP3;                  /*!< Offset: 0x050 (R/W)  Comparator Register 3 */

+        uint32_t RESERVED7[1U];

+  __IOM uint32_t FUNCTION3;              /*!< Offset: 0x058 (R/W)  Function Register 3 */

+        uint32_t RESERVED8[1U];

+  __IOM uint32_t COMP4;                  /*!< Offset: 0x060 (R/W)  Comparator Register 4 */

+        uint32_t RESERVED9[1U];

+  __IOM uint32_t FUNCTION4;              /*!< Offset: 0x068 (R/W)  Function Register 4 */

+        uint32_t RESERVED10[1U];

+  __IOM uint32_t COMP5;                  /*!< Offset: 0x070 (R/W)  Comparator Register 5 */

+        uint32_t RESERVED11[1U];

+  __IOM uint32_t FUNCTION5;              /*!< Offset: 0x078 (R/W)  Function Register 5 */

+        uint32_t RESERVED12[1U];

+  __IOM uint32_t COMP6;                  /*!< Offset: 0x080 (R/W)  Comparator Register 6 */

+        uint32_t RESERVED13[1U];

+  __IOM uint32_t FUNCTION6;              /*!< Offset: 0x088 (R/W)  Function Register 6 */

+        uint32_t RESERVED14[1U];

+  __IOM uint32_t COMP7;                  /*!< Offset: 0x090 (R/W)  Comparator Register 7 */

+        uint32_t RESERVED15[1U];

+  __IOM uint32_t FUNCTION7;              /*!< Offset: 0x098 (R/W)  Function Register 7 */

+        uint32_t RESERVED16[1U];

+  __IOM uint32_t COMP8;                  /*!< Offset: 0x0A0 (R/W)  Comparator Register 8 */

+        uint32_t RESERVED17[1U];

+  __IOM uint32_t FUNCTION8;              /*!< Offset: 0x0A8 (R/W)  Function Register 8 */

+        uint32_t RESERVED18[1U];

+  __IOM uint32_t COMP9;                  /*!< Offset: 0x0B0 (R/W)  Comparator Register 9 */

+        uint32_t RESERVED19[1U];

+  __IOM uint32_t FUNCTION9;              /*!< Offset: 0x0B8 (R/W)  Function Register 9 */

+        uint32_t RESERVED20[1U];

+  __IOM uint32_t COMP10;                 /*!< Offset: 0x0C0 (R/W)  Comparator Register 10 */

+        uint32_t RESERVED21[1U];

+  __IOM uint32_t FUNCTION10;             /*!< Offset: 0x0C8 (R/W)  Function Register 10 */

+        uint32_t RESERVED22[1U];

+  __IOM uint32_t COMP11;                 /*!< Offset: 0x0D0 (R/W)  Comparator Register 11 */

+        uint32_t RESERVED23[1U];

+  __IOM uint32_t FUNCTION11;             /*!< Offset: 0x0D8 (R/W)  Function Register 11 */

+        uint32_t RESERVED24[1U];

+  __IOM uint32_t COMP12;                 /*!< Offset: 0x0E0 (R/W)  Comparator Register 12 */

+        uint32_t RESERVED25[1U];

+  __IOM uint32_t FUNCTION12;             /*!< Offset: 0x0E8 (R/W)  Function Register 12 */

+        uint32_t RESERVED26[1U];

+  __IOM uint32_t COMP13;                 /*!< Offset: 0x0F0 (R/W)  Comparator Register 13 */

+        uint32_t RESERVED27[1U];

+  __IOM uint32_t FUNCTION13;             /*!< Offset: 0x0F8 (R/W)  Function Register 13 */

+        uint32_t RESERVED28[1U];

+  __IOM uint32_t COMP14;                 /*!< Offset: 0x100 (R/W)  Comparator Register 14 */

+        uint32_t RESERVED29[1U];

+  __IOM uint32_t FUNCTION14;             /*!< Offset: 0x108 (R/W)  Function Register 14 */

+        uint32_t RESERVED30[1U];

+  __IOM uint32_t COMP15;                 /*!< Offset: 0x110 (R/W)  Comparator Register 15 */

+        uint32_t RESERVED31[1U];

+  __IOM uint32_t FUNCTION15;             /*!< Offset: 0x118 (R/W)  Function Register 15 */

+        uint32_t RESERVED32[934U];

+  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R  )  Lock Status Register */

+        uint32_t RESERVED33[1U];

+  __IM  uint32_t DEVARCH;                /*!< Offset: 0xFBC (R/ )  Device Architecture Register */

+} DWT_Type;

+

+/* DWT Control Register Definitions */

+#define DWT_CTRL_NUMCOMP_Pos               28U                                         /*!< DWT CTRL: NUMCOMP Position */

+#define DWT_CTRL_NUMCOMP_Msk               (0xFUL << DWT_CTRL_NUMCOMP_Pos)             /*!< DWT CTRL: NUMCOMP Mask */

+

+#define DWT_CTRL_NOTRCPKT_Pos              27U                                         /*!< DWT CTRL: NOTRCPKT Position */

+#define DWT_CTRL_NOTRCPKT_Msk              (0x1UL << DWT_CTRL_NOTRCPKT_Pos)            /*!< DWT CTRL: NOTRCPKT Mask */

+

+#define DWT_CTRL_NOEXTTRIG_Pos             26U                                         /*!< DWT CTRL: NOEXTTRIG Position */

+#define DWT_CTRL_NOEXTTRIG_Msk             (0x1UL << DWT_CTRL_NOEXTTRIG_Pos)           /*!< DWT CTRL: NOEXTTRIG Mask */

+

+#define DWT_CTRL_NOCYCCNT_Pos              25U                                         /*!< DWT CTRL: NOCYCCNT Position */

+#define DWT_CTRL_NOCYCCNT_Msk              (0x1UL << DWT_CTRL_NOCYCCNT_Pos)            /*!< DWT CTRL: NOCYCCNT Mask */

+

+#define DWT_CTRL_NOPRFCNT_Pos              24U                                         /*!< DWT CTRL: NOPRFCNT Position */

+#define DWT_CTRL_NOPRFCNT_Msk              (0x1UL << DWT_CTRL_NOPRFCNT_Pos)            /*!< DWT CTRL: NOPRFCNT Mask */

+

+#define DWT_CTRL_CYCDISS_Pos               23U                                         /*!< DWT CTRL: CYCDISS Position */

+#define DWT_CTRL_CYCDISS_Msk               (0x1UL << DWT_CTRL_CYCDISS_Pos)             /*!< DWT CTRL: CYCDISS Mask */

+

+#define DWT_CTRL_CYCEVTENA_Pos             22U                                         /*!< DWT CTRL: CYCEVTENA Position */

+#define DWT_CTRL_CYCEVTENA_Msk             (0x1UL << DWT_CTRL_CYCEVTENA_Pos)           /*!< DWT CTRL: CYCEVTENA Mask */

+

+#define DWT_CTRL_FOLDEVTENA_Pos            21U                                         /*!< DWT CTRL: FOLDEVTENA Position */

+#define DWT_CTRL_FOLDEVTENA_Msk            (0x1UL << DWT_CTRL_FOLDEVTENA_Pos)          /*!< DWT CTRL: FOLDEVTENA Mask */

+

+#define DWT_CTRL_LSUEVTENA_Pos             20U                                         /*!< DWT CTRL: LSUEVTENA Position */

+#define DWT_CTRL_LSUEVTENA_Msk             (0x1UL << DWT_CTRL_LSUEVTENA_Pos)           /*!< DWT CTRL: LSUEVTENA Mask */

+

+#define DWT_CTRL_SLEEPEVTENA_Pos           19U                                         /*!< DWT CTRL: SLEEPEVTENA Position */

+#define DWT_CTRL_SLEEPEVTENA_Msk           (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos)         /*!< DWT CTRL: SLEEPEVTENA Mask */

+

+#define DWT_CTRL_EXCEVTENA_Pos             18U                                         /*!< DWT CTRL: EXCEVTENA Position */

+#define DWT_CTRL_EXCEVTENA_Msk             (0x1UL << DWT_CTRL_EXCEVTENA_Pos)           /*!< DWT CTRL: EXCEVTENA Mask */

+

+#define DWT_CTRL_CPIEVTENA_Pos             17U                                         /*!< DWT CTRL: CPIEVTENA Position */

+#define DWT_CTRL_CPIEVTENA_Msk             (0x1UL << DWT_CTRL_CPIEVTENA_Pos)           /*!< DWT CTRL: CPIEVTENA Mask */

+

+#define DWT_CTRL_EXCTRCENA_Pos             16U                                         /*!< DWT CTRL: EXCTRCENA Position */

+#define DWT_CTRL_EXCTRCENA_Msk             (0x1UL << DWT_CTRL_EXCTRCENA_Pos)           /*!< DWT CTRL: EXCTRCENA Mask */

+

+#define DWT_CTRL_PCSAMPLENA_Pos            12U                                         /*!< DWT CTRL: PCSAMPLENA Position */

+#define DWT_CTRL_PCSAMPLENA_Msk            (0x1UL << DWT_CTRL_PCSAMPLENA_Pos)          /*!< DWT CTRL: PCSAMPLENA Mask */

+

+#define DWT_CTRL_SYNCTAP_Pos               10U                                         /*!< DWT CTRL: SYNCTAP Position */

+#define DWT_CTRL_SYNCTAP_Msk               (0x3UL << DWT_CTRL_SYNCTAP_Pos)             /*!< DWT CTRL: SYNCTAP Mask */

+

+#define DWT_CTRL_CYCTAP_Pos                 9U                                         /*!< DWT CTRL: CYCTAP Position */

+#define DWT_CTRL_CYCTAP_Msk                (0x1UL << DWT_CTRL_CYCTAP_Pos)              /*!< DWT CTRL: CYCTAP Mask */

+

+#define DWT_CTRL_POSTINIT_Pos               5U                                         /*!< DWT CTRL: POSTINIT Position */

+#define DWT_CTRL_POSTINIT_Msk              (0xFUL << DWT_CTRL_POSTINIT_Pos)            /*!< DWT CTRL: POSTINIT Mask */

+

+#define DWT_CTRL_POSTPRESET_Pos             1U                                         /*!< DWT CTRL: POSTPRESET Position */

+#define DWT_CTRL_POSTPRESET_Msk            (0xFUL << DWT_CTRL_POSTPRESET_Pos)          /*!< DWT CTRL: POSTPRESET Mask */

+

+#define DWT_CTRL_CYCCNTENA_Pos              0U                                         /*!< DWT CTRL: CYCCNTENA Position */

+#define DWT_CTRL_CYCCNTENA_Msk             (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/)       /*!< DWT CTRL: CYCCNTENA Mask */

+

+/* DWT CPI Count Register Definitions */

+#define DWT_CPICNT_CPICNT_Pos               0U                                         /*!< DWT CPICNT: CPICNT Position */

+#define DWT_CPICNT_CPICNT_Msk              (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/)       /*!< DWT CPICNT: CPICNT Mask */

+

+/* DWT Exception Overhead Count Register Definitions */

+#define DWT_EXCCNT_EXCCNT_Pos               0U                                         /*!< DWT EXCCNT: EXCCNT Position */

+#define DWT_EXCCNT_EXCCNT_Msk              (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/)       /*!< DWT EXCCNT: EXCCNT Mask */

+

+/* DWT Sleep Count Register Definitions */

+#define DWT_SLEEPCNT_SLEEPCNT_Pos           0U                                         /*!< DWT SLEEPCNT: SLEEPCNT Position */

+#define DWT_SLEEPCNT_SLEEPCNT_Msk          (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/)   /*!< DWT SLEEPCNT: SLEEPCNT Mask */

+

+/* DWT LSU Count Register Definitions */

+#define DWT_LSUCNT_LSUCNT_Pos               0U                                         /*!< DWT LSUCNT: LSUCNT Position */

+#define DWT_LSUCNT_LSUCNT_Msk              (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/)       /*!< DWT LSUCNT: LSUCNT Mask */

+

+/* DWT Folded-instruction Count Register Definitions */

+#define DWT_FOLDCNT_FOLDCNT_Pos             0U                                         /*!< DWT FOLDCNT: FOLDCNT Position */

+#define DWT_FOLDCNT_FOLDCNT_Msk            (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/)     /*!< DWT FOLDCNT: FOLDCNT Mask */

+

+/* DWT Comparator Function Register Definitions */

+#define DWT_FUNCTION_ID_Pos                27U                                         /*!< DWT FUNCTION: ID Position */

+#define DWT_FUNCTION_ID_Msk                (0x1FUL << DWT_FUNCTION_ID_Pos)             /*!< DWT FUNCTION: ID Mask */

+

+#define DWT_FUNCTION_MATCHED_Pos           24U                                         /*!< DWT FUNCTION: MATCHED Position */

+#define DWT_FUNCTION_MATCHED_Msk           (0x1UL << DWT_FUNCTION_MATCHED_Pos)         /*!< DWT FUNCTION: MATCHED Mask */

+

+#define DWT_FUNCTION_DATAVSIZE_Pos         10U                                         /*!< DWT FUNCTION: DATAVSIZE Position */

+#define DWT_FUNCTION_DATAVSIZE_Msk         (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos)       /*!< DWT FUNCTION: DATAVSIZE Mask */

+

+#define DWT_FUNCTION_ACTION_Pos             4U                                         /*!< DWT FUNCTION: ACTION Position */

+#define DWT_FUNCTION_ACTION_Msk            (0x1UL << DWT_FUNCTION_ACTION_Pos)          /*!< DWT FUNCTION: ACTION Mask */

+

+#define DWT_FUNCTION_MATCH_Pos              0U                                         /*!< DWT FUNCTION: MATCH Position */

+#define DWT_FUNCTION_MATCH_Msk             (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/)       /*!< DWT FUNCTION: MATCH Mask */

+

+/*@}*/ /* end of group CMSIS_DWT */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_TPI     Trace Port Interface (TPI)

+  \brief    Type definitions for the Trace Port Interface (TPI)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Trace Port Interface Register (TPI).

+ */

+typedef struct

+{

+  __IM  uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Sizes Register */

+  __IOM uint32_t CSPSR;                  /*!< Offset: 0x004 (R/W)  Current Parallel Port Sizes Register */

+        uint32_t RESERVED0[2U];

+  __IOM uint32_t ACPR;                   /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */

+        uint32_t RESERVED1[55U];

+  __IOM uint32_t SPPR;                   /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */

+        uint32_t RESERVED2[131U];

+  __IM  uint32_t FFSR;                   /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */

+  __IOM uint32_t FFCR;                   /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */

+  __IOM uint32_t PSCR;                   /*!< Offset: 0x308 (R/W)  Periodic Synchronization Control Register */

+        uint32_t RESERVED3[809U];

+  __OM  uint32_t LAR;                    /*!< Offset: 0xFB0 ( /W)  Software Lock Access Register */

+  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R/ )  Software Lock Status Register */

+        uint32_t RESERVED4[4U];

+  __IM  uint32_t TYPE;                   /*!< Offset: 0xFC8 (R/ )  Device Identifier Register */

+  __IM  uint32_t DEVTYPE;                /*!< Offset: 0xFCC (R/ )  Device Type Register */

+} TPI_Type;

+

+/* TPI Asynchronous Clock Prescaler Register Definitions */

+#define TPI_ACPR_SWOSCALER_Pos              0U                                         /*!< TPI ACPR: SWOSCALER Position */

+#define TPI_ACPR_SWOSCALER_Msk             (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/)    /*!< TPI ACPR: SWOSCALER Mask */

+

+/* TPI Selected Pin Protocol Register Definitions */

+#define TPI_SPPR_TXMODE_Pos                 0U                                         /*!< TPI SPPR: TXMODE Position */

+#define TPI_SPPR_TXMODE_Msk                (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/)          /*!< TPI SPPR: TXMODE Mask */

+

+/* TPI Formatter and Flush Status Register Definitions */

+#define TPI_FFSR_FtNonStop_Pos              3U                                         /*!< TPI FFSR: FtNonStop Position */

+#define TPI_FFSR_FtNonStop_Msk             (0x1UL << TPI_FFSR_FtNonStop_Pos)           /*!< TPI FFSR: FtNonStop Mask */

+

+#define TPI_FFSR_TCPresent_Pos              2U                                         /*!< TPI FFSR: TCPresent Position */

+#define TPI_FFSR_TCPresent_Msk             (0x1UL << TPI_FFSR_TCPresent_Pos)           /*!< TPI FFSR: TCPresent Mask */

+

+#define TPI_FFSR_FtStopped_Pos              1U                                         /*!< TPI FFSR: FtStopped Position */

+#define TPI_FFSR_FtStopped_Msk             (0x1UL << TPI_FFSR_FtStopped_Pos)           /*!< TPI FFSR: FtStopped Mask */

+

+#define TPI_FFSR_FlInProg_Pos               0U                                         /*!< TPI FFSR: FlInProg Position */

+#define TPI_FFSR_FlInProg_Msk              (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/)        /*!< TPI FFSR: FlInProg Mask */

+

+/* TPI Formatter and Flush Control Register Definitions */

+#define TPI_FFCR_TrigIn_Pos                 8U                                         /*!< TPI FFCR: TrigIn Position */

+#define TPI_FFCR_TrigIn_Msk                (0x1UL << TPI_FFCR_TrigIn_Pos)              /*!< TPI FFCR: TrigIn Mask */

+

+#define TPI_FFCR_FOnMan_Pos                 6U                                         /*!< TPI FFCR: FOnMan Position */

+#define TPI_FFCR_FOnMan_Msk                (0x1UL << TPI_FFCR_FOnMan_Pos)              /*!< TPI FFCR: FOnMan Mask */

+

+#define TPI_FFCR_EnFCont_Pos                1U                                         /*!< TPI FFCR: EnFCont Position */

+#define TPI_FFCR_EnFCont_Msk               (0x1UL << TPI_FFCR_EnFCont_Pos)             /*!< TPI FFCR: EnFCont Mask */

+

+/* TPI Periodic Synchronization Control Register Definitions */

+#define TPI_PSCR_PSCount_Pos                0U                                         /*!< TPI PSCR: PSCount Position */

+#define TPI_PSCR_PSCount_Msk               (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/)        /*!< TPI PSCR: TPSCount Mask */

+

+/* TPI Software Lock Status Register Definitions */

+#define TPI_LSR_nTT_Pos                     1U                                         /*!< TPI LSR: Not thirty-two bit. Position */

+#define TPI_LSR_nTT_Msk                    (0x1UL << TPI_LSR_nTT_Pos)                  /*!< TPI LSR: Not thirty-two bit. Mask */

+

+#define TPI_LSR_SLK_Pos                     1U                                         /*!< TPI LSR: Software Lock status Position */

+#define TPI_LSR_SLK_Msk                    (0x1UL << TPI_LSR_SLK_Pos)                  /*!< TPI LSR: Software Lock status Mask */

+

+#define TPI_LSR_SLI_Pos                     0U                                         /*!< TPI LSR: Software Lock implemented Position */

+#define TPI_LSR_SLI_Msk                    (0x1UL /*<< TPI_LSR_SLI_Pos*/)              /*!< TPI LSR: Software Lock implemented Mask */

+

+/* TPI DEVID Register Definitions */

+#define TPI_DEVID_NRZVALID_Pos             11U                                         /*!< TPI DEVID: NRZVALID Position */

+#define TPI_DEVID_NRZVALID_Msk             (0x1UL << TPI_DEVID_NRZVALID_Pos)           /*!< TPI DEVID: NRZVALID Mask */

+

+#define TPI_DEVID_MANCVALID_Pos            10U                                         /*!< TPI DEVID: MANCVALID Position */

+#define TPI_DEVID_MANCVALID_Msk            (0x1UL << TPI_DEVID_MANCVALID_Pos)          /*!< TPI DEVID: MANCVALID Mask */

+

+#define TPI_DEVID_PTINVALID_Pos             9U                                         /*!< TPI DEVID: PTINVALID Position */

+#define TPI_DEVID_PTINVALID_Msk            (0x1UL << TPI_DEVID_PTINVALID_Pos)          /*!< TPI DEVID: PTINVALID Mask */

+

+#define TPI_DEVID_FIFOSZ_Pos                6U                                         /*!< TPI DEVID: FIFO depth Position */

+#define TPI_DEVID_FIFOSZ_Msk               (0x7UL << TPI_DEVID_FIFOSZ_Pos)             /*!< TPI DEVID: FIFO depth Mask */

+

+/* TPI DEVTYPE Register Definitions */

+#define TPI_DEVTYPE_SubType_Pos             4U                                         /*!< TPI DEVTYPE: SubType Position */

+#define TPI_DEVTYPE_SubType_Msk            (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/)      /*!< TPI DEVTYPE: SubType Mask */

+

+#define TPI_DEVTYPE_MajorType_Pos           0U                                         /*!< TPI DEVTYPE: MajorType Position */

+#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */

+

+/*@}*/ /* end of group CMSIS_TPI */

+

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_MPU     Memory Protection Unit (MPU)

+  \brief    Type definitions for the Memory Protection Unit (MPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Memory Protection Unit (MPU).

+ */

+typedef struct

+{

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x000 (R/ )  MPU Type Register */

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x004 (R/W)  MPU Control Register */

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  MPU Region Number Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */

+  __IOM uint32_t RLAR;                   /*!< Offset: 0x010 (R/W)  MPU Region Limit Address Register */

+  __IOM uint32_t RBAR_A1;                /*!< Offset: 0x014 (R/W)  MPU Region Base Address Register Alias 1 */

+  __IOM uint32_t RLAR_A1;                /*!< Offset: 0x018 (R/W)  MPU Region Limit Address Register Alias 1 */

+  __IOM uint32_t RBAR_A2;                /*!< Offset: 0x01C (R/W)  MPU Region Base Address Register Alias 2 */

+  __IOM uint32_t RLAR_A2;                /*!< Offset: 0x020 (R/W)  MPU Region Limit Address Register Alias 2 */

+  __IOM uint32_t RBAR_A3;                /*!< Offset: 0x024 (R/W)  MPU Region Base Address Register Alias 3 */

+  __IOM uint32_t RLAR_A3;                /*!< Offset: 0x028 (R/W)  MPU Region Limit Address Register Alias 3 */

+        uint32_t RESERVED0[1];

+  union {

+  __IOM uint32_t MAIR[2];

+  struct {

+  __IOM uint32_t MAIR0;                  /*!< Offset: 0x030 (R/W)  MPU Memory Attribute Indirection Register 0 */

+  __IOM uint32_t MAIR1;                  /*!< Offset: 0x034 (R/W)  MPU Memory Attribute Indirection Register 1 */

+  };

+  };

+} MPU_Type;

+

+#define MPU_TYPE_RALIASES                  4U

+

+/* MPU Type Register Definitions */

+#define MPU_TYPE_IREGION_Pos               16U                                            /*!< MPU TYPE: IREGION Position */

+#define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */

+

+#define MPU_TYPE_DREGION_Pos                8U                                            /*!< MPU TYPE: DREGION Position */

+#define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */

+

+#define MPU_TYPE_SEPARATE_Pos               0U                                            /*!< MPU TYPE: SEPARATE Position */

+#define MPU_TYPE_SEPARATE_Msk              (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)             /*!< MPU TYPE: SEPARATE Mask */

+

+/* MPU Control Register Definitions */

+#define MPU_CTRL_PRIVDEFENA_Pos             2U                                            /*!< MPU CTRL: PRIVDEFENA Position */

+#define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */

+

+#define MPU_CTRL_HFNMIENA_Pos               1U                                            /*!< MPU CTRL: HFNMIENA Position */

+#define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */

+

+#define MPU_CTRL_ENABLE_Pos                 0U                                            /*!< MPU CTRL: ENABLE Position */

+#define MPU_CTRL_ENABLE_Msk                (1UL /*<< MPU_CTRL_ENABLE_Pos*/)               /*!< MPU CTRL: ENABLE Mask */

+

+/* MPU Region Number Register Definitions */

+#define MPU_RNR_REGION_Pos                  0U                                            /*!< MPU RNR: REGION Position */

+#define MPU_RNR_REGION_Msk                 (0xFFUL /*<< MPU_RNR_REGION_Pos*/)             /*!< MPU RNR: REGION Mask */

+

+/* MPU Region Base Address Register Definitions */

+#define MPU_RBAR_BASE_Pos                   5U                                            /*!< MPU RBAR: BASE Position */

+#define MPU_RBAR_BASE_Msk                  (0x7FFFFFFUL << MPU_RBAR_BASE_Pos)             /*!< MPU RBAR: BASE Mask */

+

+#define MPU_RBAR_SH_Pos                     3U                                            /*!< MPU RBAR: SH Position */

+#define MPU_RBAR_SH_Msk                    (0x3UL << MPU_RBAR_SH_Pos)                     /*!< MPU RBAR: SH Mask */

+

+#define MPU_RBAR_AP_Pos                     1U                                            /*!< MPU RBAR: AP Position */

+#define MPU_RBAR_AP_Msk                    (0x3UL << MPU_RBAR_AP_Pos)                     /*!< MPU RBAR: AP Mask */

+

+#define MPU_RBAR_XN_Pos                     0U                                            /*!< MPU RBAR: XN Position */

+#define MPU_RBAR_XN_Msk                    (01UL /*<< MPU_RBAR_XN_Pos*/)                  /*!< MPU RBAR: XN Mask */

+

+/* MPU Region Limit Address Register Definitions */

+#define MPU_RLAR_LIMIT_Pos                  5U                                            /*!< MPU RLAR: LIMIT Position */

+#define MPU_RLAR_LIMIT_Msk                 (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos)            /*!< MPU RLAR: LIMIT Mask */

+

+#define MPU_RLAR_AttrIndx_Pos               1U                                            /*!< MPU RLAR: AttrIndx Position */

+#define MPU_RLAR_AttrIndx_Msk              (0x7UL << MPU_RLAR_AttrIndx_Pos)               /*!< MPU RLAR: AttrIndx Mask */

+

+#define MPU_RLAR_EN_Pos                     0U                                            /*!< MPU RLAR: Region enable bit Position */

+#define MPU_RLAR_EN_Msk                    (1UL /*<< MPU_RLAR_EN_Pos*/)                   /*!< MPU RLAR: Region enable bit Disable Mask */

+

+/* MPU Memory Attribute Indirection Register 0 Definitions */

+#define MPU_MAIR0_Attr3_Pos                24U                                            /*!< MPU MAIR0: Attr3 Position */

+#define MPU_MAIR0_Attr3_Msk                (0xFFUL << MPU_MAIR0_Attr3_Pos)                /*!< MPU MAIR0: Attr3 Mask */

+

+#define MPU_MAIR0_Attr2_Pos                16U                                            /*!< MPU MAIR0: Attr2 Position */

+#define MPU_MAIR0_Attr2_Msk                (0xFFUL << MPU_MAIR0_Attr2_Pos)                /*!< MPU MAIR0: Attr2 Mask */

+

+#define MPU_MAIR0_Attr1_Pos                 8U                                            /*!< MPU MAIR0: Attr1 Position */

+#define MPU_MAIR0_Attr1_Msk                (0xFFUL << MPU_MAIR0_Attr1_Pos)                /*!< MPU MAIR0: Attr1 Mask */

+

+#define MPU_MAIR0_Attr0_Pos                 0U                                            /*!< MPU MAIR0: Attr0 Position */

+#define MPU_MAIR0_Attr0_Msk                (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/)            /*!< MPU MAIR0: Attr0 Mask */

+

+/* MPU Memory Attribute Indirection Register 1 Definitions */

+#define MPU_MAIR1_Attr7_Pos                24U                                            /*!< MPU MAIR1: Attr7 Position */

+#define MPU_MAIR1_Attr7_Msk                (0xFFUL << MPU_MAIR1_Attr7_Pos)                /*!< MPU MAIR1: Attr7 Mask */

+

+#define MPU_MAIR1_Attr6_Pos                16U                                            /*!< MPU MAIR1: Attr6 Position */

+#define MPU_MAIR1_Attr6_Msk                (0xFFUL << MPU_MAIR1_Attr6_Pos)                /*!< MPU MAIR1: Attr6 Mask */

+

+#define MPU_MAIR1_Attr5_Pos                 8U                                            /*!< MPU MAIR1: Attr5 Position */

+#define MPU_MAIR1_Attr5_Msk                (0xFFUL << MPU_MAIR1_Attr5_Pos)                /*!< MPU MAIR1: Attr5 Mask */

+

+#define MPU_MAIR1_Attr4_Pos                 0U                                            /*!< MPU MAIR1: Attr4 Position */

+#define MPU_MAIR1_Attr4_Msk                (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/)            /*!< MPU MAIR1: Attr4 Mask */

+

+/*@} end of group CMSIS_MPU */

+#endif

+

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SAU     Security Attribution Unit (SAU)

+  \brief    Type definitions for the Security Attribution Unit (SAU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Security Attribution Unit (SAU).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SAU Control Register */

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x004 (R/ )  SAU Type Register */

+#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U)

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  SAU Region Number Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  SAU Region Base Address Register */

+  __IOM uint32_t RLAR;                   /*!< Offset: 0x010 (R/W)  SAU Region Limit Address Register */

+#else

+        uint32_t RESERVED0[3];

+#endif

+  __IOM uint32_t SFSR;                   /*!< Offset: 0x014 (R/W)  Secure Fault Status Register */

+  __IOM uint32_t SFAR;                   /*!< Offset: 0x018 (R/W)  Secure Fault Address Register */

+} SAU_Type;

+

+/* SAU Control Register Definitions */

+#define SAU_CTRL_ALLNS_Pos                  1U                                            /*!< SAU CTRL: ALLNS Position */

+#define SAU_CTRL_ALLNS_Msk                 (1UL << SAU_CTRL_ALLNS_Pos)                    /*!< SAU CTRL: ALLNS Mask */

+

+#define SAU_CTRL_ENABLE_Pos                 0U                                            /*!< SAU CTRL: ENABLE Position */

+#define SAU_CTRL_ENABLE_Msk                (1UL /*<< SAU_CTRL_ENABLE_Pos*/)               /*!< SAU CTRL: ENABLE Mask */

+

+/* SAU Type Register Definitions */

+#define SAU_TYPE_SREGION_Pos                0U                                            /*!< SAU TYPE: SREGION Position */

+#define SAU_TYPE_SREGION_Msk               (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/)           /*!< SAU TYPE: SREGION Mask */

+

+#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U)

+/* SAU Region Number Register Definitions */

+#define SAU_RNR_REGION_Pos                  0U                                            /*!< SAU RNR: REGION Position */

+#define SAU_RNR_REGION_Msk                 (0xFFUL /*<< SAU_RNR_REGION_Pos*/)             /*!< SAU RNR: REGION Mask */

+

+/* SAU Region Base Address Register Definitions */

+#define SAU_RBAR_BADDR_Pos                  5U                                            /*!< SAU RBAR: BADDR Position */

+#define SAU_RBAR_BADDR_Msk                 (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos)            /*!< SAU RBAR: BADDR Mask */

+

+/* SAU Region Limit Address Register Definitions */

+#define SAU_RLAR_LADDR_Pos                  5U                                            /*!< SAU RLAR: LADDR Position */

+#define SAU_RLAR_LADDR_Msk                 (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos)            /*!< SAU RLAR: LADDR Mask */

+

+#define SAU_RLAR_NSC_Pos                    1U                                            /*!< SAU RLAR: NSC Position */

+#define SAU_RLAR_NSC_Msk                   (1UL << SAU_RLAR_NSC_Pos)                      /*!< SAU RLAR: NSC Mask */

+

+#define SAU_RLAR_ENABLE_Pos                 0U                                            /*!< SAU RLAR: ENABLE Position */

+#define SAU_RLAR_ENABLE_Msk                (1UL /*<< SAU_RLAR_ENABLE_Pos*/)               /*!< SAU RLAR: ENABLE Mask */

+

+#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */

+

+/* Secure Fault Status Register Definitions */

+#define SAU_SFSR_LSERR_Pos                  7U                                            /*!< SAU SFSR: LSERR Position */

+#define SAU_SFSR_LSERR_Msk                 (1UL << SAU_SFSR_LSERR_Pos)                    /*!< SAU SFSR: LSERR Mask */

+

+#define SAU_SFSR_SFARVALID_Pos              6U                                            /*!< SAU SFSR: SFARVALID Position */

+#define SAU_SFSR_SFARVALID_Msk             (1UL << SAU_SFSR_SFARVALID_Pos)                /*!< SAU SFSR: SFARVALID Mask */

+

+#define SAU_SFSR_LSPERR_Pos                 5U                                            /*!< SAU SFSR: LSPERR Position */

+#define SAU_SFSR_LSPERR_Msk                (1UL << SAU_SFSR_LSPERR_Pos)                   /*!< SAU SFSR: LSPERR Mask */

+

+#define SAU_SFSR_INVTRAN_Pos                4U                                            /*!< SAU SFSR: INVTRAN Position */

+#define SAU_SFSR_INVTRAN_Msk               (1UL << SAU_SFSR_INVTRAN_Pos)                  /*!< SAU SFSR: INVTRAN Mask */

+

+#define SAU_SFSR_AUVIOL_Pos                 3U                                            /*!< SAU SFSR: AUVIOL Position */

+#define SAU_SFSR_AUVIOL_Msk                (1UL << SAU_SFSR_AUVIOL_Pos)                   /*!< SAU SFSR: AUVIOL Mask */

+

+#define SAU_SFSR_INVER_Pos                  2U                                            /*!< SAU SFSR: INVER Position */

+#define SAU_SFSR_INVER_Msk                 (1UL << SAU_SFSR_INVER_Pos)                    /*!< SAU SFSR: INVER Mask */

+

+#define SAU_SFSR_INVIS_Pos                  1U                                            /*!< SAU SFSR: INVIS Position */

+#define SAU_SFSR_INVIS_Msk                 (1UL << SAU_SFSR_INVIS_Pos)                    /*!< SAU SFSR: INVIS Mask */

+

+#define SAU_SFSR_INVEP_Pos                  0U                                            /*!< SAU SFSR: INVEP Position */

+#define SAU_SFSR_INVEP_Msk                 (1UL /*<< SAU_SFSR_INVEP_Pos*/)                /*!< SAU SFSR: INVEP Mask */

+

+/*@} end of group CMSIS_SAU */

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_FPU     Floating Point Unit (FPU)

+  \brief    Type definitions for the Floating Point Unit (FPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Floating Point Unit (FPU).

+ */

+typedef struct

+{

+        uint32_t RESERVED0[1U];

+  __IOM uint32_t FPCCR;                  /*!< Offset: 0x004 (R/W)  Floating-Point Context Control Register */

+  __IOM uint32_t FPCAR;                  /*!< Offset: 0x008 (R/W)  Floating-Point Context Address Register */

+  __IOM uint32_t FPDSCR;                 /*!< Offset: 0x00C (R/W)  Floating-Point Default Status Control Register */

+  __IM  uint32_t MVFR0;                  /*!< Offset: 0x010 (R/ )  Media and FP Feature Register 0 */

+  __IM  uint32_t MVFR1;                  /*!< Offset: 0x014 (R/ )  Media and FP Feature Register 1 */

+} FPU_Type;

+

+/* Floating-Point Context Control Register Definitions */

+#define FPU_FPCCR_ASPEN_Pos                31U                                            /*!< FPCCR: ASPEN bit Position */

+#define FPU_FPCCR_ASPEN_Msk                (1UL << FPU_FPCCR_ASPEN_Pos)                   /*!< FPCCR: ASPEN bit Mask */

+

+#define FPU_FPCCR_LSPEN_Pos                30U                                            /*!< FPCCR: LSPEN Position */

+#define FPU_FPCCR_LSPEN_Msk                (1UL << FPU_FPCCR_LSPEN_Pos)                   /*!< FPCCR: LSPEN bit Mask */

+

+#define FPU_FPCCR_LSPENS_Pos               29U                                            /*!< FPCCR: LSPENS Position */

+#define FPU_FPCCR_LSPENS_Msk               (1UL << FPU_FPCCR_LSPENS_Pos)                  /*!< FPCCR: LSPENS bit Mask */

+

+#define FPU_FPCCR_CLRONRET_Pos             28U                                            /*!< FPCCR: CLRONRET Position */

+#define FPU_FPCCR_CLRONRET_Msk             (1UL << FPU_FPCCR_CLRONRET_Pos)                /*!< FPCCR: CLRONRET bit Mask */

+

+#define FPU_FPCCR_CLRONRETS_Pos            27U                                            /*!< FPCCR: CLRONRETS Position */

+#define FPU_FPCCR_CLRONRETS_Msk            (1UL << FPU_FPCCR_CLRONRETS_Pos)               /*!< FPCCR: CLRONRETS bit Mask */

+

+#define FPU_FPCCR_TS_Pos                   26U                                            /*!< FPCCR: TS Position */

+#define FPU_FPCCR_TS_Msk                   (1UL << FPU_FPCCR_TS_Pos)                      /*!< FPCCR: TS bit Mask */

+

+#define FPU_FPCCR_UFRDY_Pos                10U                                            /*!< FPCCR: UFRDY Position */

+#define FPU_FPCCR_UFRDY_Msk                (1UL << FPU_FPCCR_UFRDY_Pos)                   /*!< FPCCR: UFRDY bit Mask */

+

+#define FPU_FPCCR_SPLIMVIOL_Pos             9U                                            /*!< FPCCR: SPLIMVIOL Position */

+#define FPU_FPCCR_SPLIMVIOL_Msk            (1UL << FPU_FPCCR_SPLIMVIOL_Pos)               /*!< FPCCR: SPLIMVIOL bit Mask */

+

+#define FPU_FPCCR_MONRDY_Pos                8U                                            /*!< FPCCR: MONRDY Position */

+#define FPU_FPCCR_MONRDY_Msk               (1UL << FPU_FPCCR_MONRDY_Pos)                  /*!< FPCCR: MONRDY bit Mask */

+

+#define FPU_FPCCR_SFRDY_Pos                 7U                                            /*!< FPCCR: SFRDY Position */

+#define FPU_FPCCR_SFRDY_Msk                (1UL << FPU_FPCCR_SFRDY_Pos)                   /*!< FPCCR: SFRDY bit Mask */

+

+#define FPU_FPCCR_BFRDY_Pos                 6U                                            /*!< FPCCR: BFRDY Position */

+#define FPU_FPCCR_BFRDY_Msk                (1UL << FPU_FPCCR_BFRDY_Pos)                   /*!< FPCCR: BFRDY bit Mask */

+

+#define FPU_FPCCR_MMRDY_Pos                 5U                                            /*!< FPCCR: MMRDY Position */

+#define FPU_FPCCR_MMRDY_Msk                (1UL << FPU_FPCCR_MMRDY_Pos)                   /*!< FPCCR: MMRDY bit Mask */

+

+#define FPU_FPCCR_HFRDY_Pos                 4U                                            /*!< FPCCR: HFRDY Position */

+#define FPU_FPCCR_HFRDY_Msk                (1UL << FPU_FPCCR_HFRDY_Pos)                   /*!< FPCCR: HFRDY bit Mask */

+

+#define FPU_FPCCR_THREAD_Pos                3U                                            /*!< FPCCR: processor mode bit Position */

+#define FPU_FPCCR_THREAD_Msk               (1UL << FPU_FPCCR_THREAD_Pos)                  /*!< FPCCR: processor mode active bit Mask */

+

+#define FPU_FPCCR_S_Pos                     2U                                            /*!< FPCCR: Security status of the FP context bit Position */

+#define FPU_FPCCR_S_Msk                    (1UL << FPU_FPCCR_S_Pos)                       /*!< FPCCR: Security status of the FP context bit Mask */

+

+#define FPU_FPCCR_USER_Pos                  1U                                            /*!< FPCCR: privilege level bit Position */

+#define FPU_FPCCR_USER_Msk                 (1UL << FPU_FPCCR_USER_Pos)                    /*!< FPCCR: privilege level bit Mask */

+

+#define FPU_FPCCR_LSPACT_Pos                0U                                            /*!< FPCCR: Lazy state preservation active bit Position */

+#define FPU_FPCCR_LSPACT_Msk               (1UL /*<< FPU_FPCCR_LSPACT_Pos*/)              /*!< FPCCR: Lazy state preservation active bit Mask */

+

+/* Floating-Point Context Address Register Definitions */

+#define FPU_FPCAR_ADDRESS_Pos               3U                                            /*!< FPCAR: ADDRESS bit Position */

+#define FPU_FPCAR_ADDRESS_Msk              (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos)        /*!< FPCAR: ADDRESS bit Mask */

+

+/* Floating-Point Default Status Control Register Definitions */

+#define FPU_FPDSCR_AHP_Pos                 26U                                            /*!< FPDSCR: AHP bit Position */

+#define FPU_FPDSCR_AHP_Msk                 (1UL << FPU_FPDSCR_AHP_Pos)                    /*!< FPDSCR: AHP bit Mask */

+

+#define FPU_FPDSCR_DN_Pos                  25U                                            /*!< FPDSCR: DN bit Position */

+#define FPU_FPDSCR_DN_Msk                  (1UL << FPU_FPDSCR_DN_Pos)                     /*!< FPDSCR: DN bit Mask */

+

+#define FPU_FPDSCR_FZ_Pos                  24U                                            /*!< FPDSCR: FZ bit Position */

+#define FPU_FPDSCR_FZ_Msk                  (1UL << FPU_FPDSCR_FZ_Pos)                     /*!< FPDSCR: FZ bit Mask */

+

+#define FPU_FPDSCR_RMode_Pos               22U                                            /*!< FPDSCR: RMode bit Position */

+#define FPU_FPDSCR_RMode_Msk               (3UL << FPU_FPDSCR_RMode_Pos)                  /*!< FPDSCR: RMode bit Mask */

+

+/* Media and FP Feature Register 0 Definitions */

+#define FPU_MVFR0_FP_rounding_modes_Pos    28U                                            /*!< MVFR0: FP rounding modes bits Position */

+#define FPU_MVFR0_FP_rounding_modes_Msk    (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos)     /*!< MVFR0: FP rounding modes bits Mask */

+

+#define FPU_MVFR0_Short_vectors_Pos        24U                                            /*!< MVFR0: Short vectors bits Position */

+#define FPU_MVFR0_Short_vectors_Msk        (0xFUL << FPU_MVFR0_Short_vectors_Pos)         /*!< MVFR0: Short vectors bits Mask */

+

+#define FPU_MVFR0_Square_root_Pos          20U                                            /*!< MVFR0: Square root bits Position */

+#define FPU_MVFR0_Square_root_Msk          (0xFUL << FPU_MVFR0_Square_root_Pos)           /*!< MVFR0: Square root bits Mask */

+

+#define FPU_MVFR0_Divide_Pos               16U                                            /*!< MVFR0: Divide bits Position */

+#define FPU_MVFR0_Divide_Msk               (0xFUL << FPU_MVFR0_Divide_Pos)                /*!< MVFR0: Divide bits Mask */

+

+#define FPU_MVFR0_FP_excep_trapping_Pos    12U                                            /*!< MVFR0: FP exception trapping bits Position */

+#define FPU_MVFR0_FP_excep_trapping_Msk    (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos)     /*!< MVFR0: FP exception trapping bits Mask */

+

+#define FPU_MVFR0_Double_precision_Pos      8U                                            /*!< MVFR0: Double-precision bits Position */

+#define FPU_MVFR0_Double_precision_Msk     (0xFUL << FPU_MVFR0_Double_precision_Pos)      /*!< MVFR0: Double-precision bits Mask */

+

+#define FPU_MVFR0_Single_precision_Pos      4U                                            /*!< MVFR0: Single-precision bits Position */

+#define FPU_MVFR0_Single_precision_Msk     (0xFUL << FPU_MVFR0_Single_precision_Pos)      /*!< MVFR0: Single-precision bits Mask */

+

+#define FPU_MVFR0_A_SIMD_registers_Pos      0U                                            /*!< MVFR0: A_SIMD registers bits Position */

+#define FPU_MVFR0_A_SIMD_registers_Msk     (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/)  /*!< MVFR0: A_SIMD registers bits Mask */

+

+/* Media and FP Feature Register 1 Definitions */

+#define FPU_MVFR1_FP_fused_MAC_Pos         28U                                            /*!< MVFR1: FP fused MAC bits Position */

+#define FPU_MVFR1_FP_fused_MAC_Msk         (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos)          /*!< MVFR1: FP fused MAC bits Mask */

+

+#define FPU_MVFR1_FP_HPFP_Pos              24U                                            /*!< MVFR1: FP HPFP bits Position */

+#define FPU_MVFR1_FP_HPFP_Msk              (0xFUL << FPU_MVFR1_FP_HPFP_Pos)               /*!< MVFR1: FP HPFP bits Mask */

+

+#define FPU_MVFR1_D_NaN_mode_Pos            4U                                            /*!< MVFR1: D_NaN mode bits Position */

+#define FPU_MVFR1_D_NaN_mode_Msk           (0xFUL << FPU_MVFR1_D_NaN_mode_Pos)            /*!< MVFR1: D_NaN mode bits Mask */

+

+#define FPU_MVFR1_FtZ_mode_Pos              0U                                            /*!< MVFR1: FtZ mode bits Position */

+#define FPU_MVFR1_FtZ_mode_Msk             (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/)          /*!< MVFR1: FtZ mode bits Mask */

+

+/*@} end of group CMSIS_FPU */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    Type definitions for the Core Debug Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Core Debug Register (CoreDebug).

+ */

+typedef struct

+{

+  __IOM uint32_t DHCSR;                  /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */

+  __OM  uint32_t DCRSR;                  /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */

+  __IOM uint32_t DCRDR;                  /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */

+  __IOM uint32_t DEMCR;                  /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */

+        uint32_t RESERVED4[1U];

+  __IOM uint32_t DAUTHCTRL;              /*!< Offset: 0x014 (R/W)  Debug Authentication Control Register */

+  __IOM uint32_t DSCSR;                  /*!< Offset: 0x018 (R/W)  Debug Security Control and Status Register */

+} CoreDebug_Type;

+

+/* Debug Halting Control and Status Register Definitions */

+#define CoreDebug_DHCSR_DBGKEY_Pos         16U                                            /*!< CoreDebug DHCSR: DBGKEY Position */

+#define CoreDebug_DHCSR_DBGKEY_Msk         (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos)       /*!< CoreDebug DHCSR: DBGKEY Mask */

+

+#define CoreDebug_DHCSR_S_RESTART_ST_Pos   26U                                            /*!< CoreDebug DHCSR: S_RESTART_ST Position */

+#define CoreDebug_DHCSR_S_RESTART_ST_Msk   (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos)      /*!< CoreDebug DHCSR: S_RESTART_ST Mask */

+

+#define CoreDebug_DHCSR_S_RESET_ST_Pos     25U                                            /*!< CoreDebug DHCSR: S_RESET_ST Position */

+#define CoreDebug_DHCSR_S_RESET_ST_Msk     (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos)        /*!< CoreDebug DHCSR: S_RESET_ST Mask */

+

+#define CoreDebug_DHCSR_S_RETIRE_ST_Pos    24U                                            /*!< CoreDebug DHCSR: S_RETIRE_ST Position */

+#define CoreDebug_DHCSR_S_RETIRE_ST_Msk    (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos)       /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */

+

+#define CoreDebug_DHCSR_S_LOCKUP_Pos       19U                                            /*!< CoreDebug DHCSR: S_LOCKUP Position */

+#define CoreDebug_DHCSR_S_LOCKUP_Msk       (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos)          /*!< CoreDebug DHCSR: S_LOCKUP Mask */

+

+#define CoreDebug_DHCSR_S_SLEEP_Pos        18U                                            /*!< CoreDebug DHCSR: S_SLEEP Position */

+#define CoreDebug_DHCSR_S_SLEEP_Msk        (1UL << CoreDebug_DHCSR_S_SLEEP_Pos)           /*!< CoreDebug DHCSR: S_SLEEP Mask */

+

+#define CoreDebug_DHCSR_S_HALT_Pos         17U                                            /*!< CoreDebug DHCSR: S_HALT Position */

+#define CoreDebug_DHCSR_S_HALT_Msk         (1UL << CoreDebug_DHCSR_S_HALT_Pos)            /*!< CoreDebug DHCSR: S_HALT Mask */

+

+#define CoreDebug_DHCSR_S_REGRDY_Pos       16U                                            /*!< CoreDebug DHCSR: S_REGRDY Position */

+#define CoreDebug_DHCSR_S_REGRDY_Msk       (1UL << CoreDebug_DHCSR_S_REGRDY_Pos)          /*!< CoreDebug DHCSR: S_REGRDY Mask */

+

+#define CoreDebug_DHCSR_C_SNAPSTALL_Pos     5U                                            /*!< CoreDebug DHCSR: C_SNAPSTALL Position */

+#define CoreDebug_DHCSR_C_SNAPSTALL_Msk    (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos)       /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */

+

+#define CoreDebug_DHCSR_C_MASKINTS_Pos      3U                                            /*!< CoreDebug DHCSR: C_MASKINTS Position */

+#define CoreDebug_DHCSR_C_MASKINTS_Msk     (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos)        /*!< CoreDebug DHCSR: C_MASKINTS Mask */

+

+#define CoreDebug_DHCSR_C_STEP_Pos          2U                                            /*!< CoreDebug DHCSR: C_STEP Position */

+#define CoreDebug_DHCSR_C_STEP_Msk         (1UL << CoreDebug_DHCSR_C_STEP_Pos)            /*!< CoreDebug DHCSR: C_STEP Mask */

+

+#define CoreDebug_DHCSR_C_HALT_Pos          1U                                            /*!< CoreDebug DHCSR: C_HALT Position */

+#define CoreDebug_DHCSR_C_HALT_Msk         (1UL << CoreDebug_DHCSR_C_HALT_Pos)            /*!< CoreDebug DHCSR: C_HALT Mask */

+

+#define CoreDebug_DHCSR_C_DEBUGEN_Pos       0U                                            /*!< CoreDebug DHCSR: C_DEBUGEN Position */

+#define CoreDebug_DHCSR_C_DEBUGEN_Msk      (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/)     /*!< CoreDebug DHCSR: C_DEBUGEN Mask */

+

+/* Debug Core Register Selector Register Definitions */

+#define CoreDebug_DCRSR_REGWnR_Pos         16U                                            /*!< CoreDebug DCRSR: REGWnR Position */

+#define CoreDebug_DCRSR_REGWnR_Msk         (1UL << CoreDebug_DCRSR_REGWnR_Pos)            /*!< CoreDebug DCRSR: REGWnR Mask */

+

+#define CoreDebug_DCRSR_REGSEL_Pos          0U                                            /*!< CoreDebug DCRSR: REGSEL Position */

+#define CoreDebug_DCRSR_REGSEL_Msk         (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/)     /*!< CoreDebug DCRSR: REGSEL Mask */

+

+/* Debug Exception and Monitor Control Register Definitions */

+#define CoreDebug_DEMCR_TRCENA_Pos         24U                                            /*!< CoreDebug DEMCR: TRCENA Position */

+#define CoreDebug_DEMCR_TRCENA_Msk         (1UL << CoreDebug_DEMCR_TRCENA_Pos)            /*!< CoreDebug DEMCR: TRCENA Mask */

+

+#define CoreDebug_DEMCR_MON_REQ_Pos        19U                                            /*!< CoreDebug DEMCR: MON_REQ Position */

+#define CoreDebug_DEMCR_MON_REQ_Msk        (1UL << CoreDebug_DEMCR_MON_REQ_Pos)           /*!< CoreDebug DEMCR: MON_REQ Mask */

+

+#define CoreDebug_DEMCR_MON_STEP_Pos       18U                                            /*!< CoreDebug DEMCR: MON_STEP Position */

+#define CoreDebug_DEMCR_MON_STEP_Msk       (1UL << CoreDebug_DEMCR_MON_STEP_Pos)          /*!< CoreDebug DEMCR: MON_STEP Mask */

+

+#define CoreDebug_DEMCR_MON_PEND_Pos       17U                                            /*!< CoreDebug DEMCR: MON_PEND Position */

+#define CoreDebug_DEMCR_MON_PEND_Msk       (1UL << CoreDebug_DEMCR_MON_PEND_Pos)          /*!< CoreDebug DEMCR: MON_PEND Mask */

+

+#define CoreDebug_DEMCR_MON_EN_Pos         16U                                            /*!< CoreDebug DEMCR: MON_EN Position */

+#define CoreDebug_DEMCR_MON_EN_Msk         (1UL << CoreDebug_DEMCR_MON_EN_Pos)            /*!< CoreDebug DEMCR: MON_EN Mask */

+

+#define CoreDebug_DEMCR_VC_HARDERR_Pos     10U                                            /*!< CoreDebug DEMCR: VC_HARDERR Position */

+#define CoreDebug_DEMCR_VC_HARDERR_Msk     (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos)        /*!< CoreDebug DEMCR: VC_HARDERR Mask */

+

+#define CoreDebug_DEMCR_VC_INTERR_Pos       9U                                            /*!< CoreDebug DEMCR: VC_INTERR Position */

+#define CoreDebug_DEMCR_VC_INTERR_Msk      (1UL << CoreDebug_DEMCR_VC_INTERR_Pos)         /*!< CoreDebug DEMCR: VC_INTERR Mask */

+

+#define CoreDebug_DEMCR_VC_BUSERR_Pos       8U                                            /*!< CoreDebug DEMCR: VC_BUSERR Position */

+#define CoreDebug_DEMCR_VC_BUSERR_Msk      (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos)         /*!< CoreDebug DEMCR: VC_BUSERR Mask */

+

+#define CoreDebug_DEMCR_VC_STATERR_Pos      7U                                            /*!< CoreDebug DEMCR: VC_STATERR Position */

+#define CoreDebug_DEMCR_VC_STATERR_Msk     (1UL << CoreDebug_DEMCR_VC_STATERR_Pos)        /*!< CoreDebug DEMCR: VC_STATERR Mask */

+

+#define CoreDebug_DEMCR_VC_CHKERR_Pos       6U                                            /*!< CoreDebug DEMCR: VC_CHKERR Position */

+#define CoreDebug_DEMCR_VC_CHKERR_Msk      (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos)         /*!< CoreDebug DEMCR: VC_CHKERR Mask */

+

+#define CoreDebug_DEMCR_VC_NOCPERR_Pos      5U                                            /*!< CoreDebug DEMCR: VC_NOCPERR Position */

+#define CoreDebug_DEMCR_VC_NOCPERR_Msk     (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos)        /*!< CoreDebug DEMCR: VC_NOCPERR Mask */

+

+#define CoreDebug_DEMCR_VC_MMERR_Pos        4U                                            /*!< CoreDebug DEMCR: VC_MMERR Position */

+#define CoreDebug_DEMCR_VC_MMERR_Msk       (1UL << CoreDebug_DEMCR_VC_MMERR_Pos)          /*!< CoreDebug DEMCR: VC_MMERR Mask */

+

+#define CoreDebug_DEMCR_VC_CORERESET_Pos    0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */

+#define CoreDebug_DEMCR_VC_CORERESET_Msk   (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/)  /*!< CoreDebug DEMCR: VC_CORERESET Mask */

+

+/* Debug Authentication Control Register Definitions */

+#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos  3U                                            /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */

+#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos)    /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */

+

+#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos  2U                                            /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */

+#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos)    /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */

+

+#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos   1U                                            /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */

+#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk  (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos)     /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */

+

+#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos   0U                                            /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */

+#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk  (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */

+

+/* Debug Security Control and Status Register Definitions */

+#define CoreDebug_DSCSR_CDS_Pos            16U                                            /*!< CoreDebug DSCSR: CDS Position */

+#define CoreDebug_DSCSR_CDS_Msk            (1UL << CoreDebug_DSCSR_CDS_Pos)               /*!< CoreDebug DSCSR: CDS Mask */

+

+#define CoreDebug_DSCSR_SBRSEL_Pos          1U                                            /*!< CoreDebug DSCSR: SBRSEL Position */

+#define CoreDebug_DSCSR_SBRSEL_Msk         (1UL << CoreDebug_DSCSR_SBRSEL_Pos)            /*!< CoreDebug DSCSR: SBRSEL Mask */

+

+#define CoreDebug_DSCSR_SBRSELEN_Pos        0U                                            /*!< CoreDebug DSCSR: SBRSELEN Position */

+#define CoreDebug_DSCSR_SBRSELEN_Msk       (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/)      /*!< CoreDebug DSCSR: SBRSELEN Mask */

+

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+  #define SCS_BASE            (0xE000E000UL)                             /*!< System Control Space Base Address */

+  #define ITM_BASE            (0xE0000000UL)                             /*!< ITM Base Address */

+  #define DWT_BASE            (0xE0001000UL)                             /*!< DWT Base Address */

+  #define TPI_BASE            (0xE0040000UL)                             /*!< TPI Base Address */

+  #define CoreDebug_BASE      (0xE000EDF0UL)                             /*!< Core Debug Base Address */

+  #define SysTick_BASE        (SCS_BASE +  0x0010UL)                     /*!< SysTick Base Address */

+  #define NVIC_BASE           (SCS_BASE +  0x0100UL)                     /*!< NVIC Base Address */

+  #define SCB_BASE            (SCS_BASE +  0x0D00UL)                     /*!< System Control Block Base Address */

+

+  #define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE         ) /*!< System control Register not in SCB */

+  #define SCB                 ((SCB_Type       *)     SCB_BASE         ) /*!< SCB configuration struct */

+  #define SysTick             ((SysTick_Type   *)     SysTick_BASE     ) /*!< SysTick configuration struct */

+  #define NVIC                ((NVIC_Type      *)     NVIC_BASE        ) /*!< NVIC configuration struct */

+  #define ITM                 ((ITM_Type       *)     ITM_BASE         ) /*!< ITM configuration struct */

+  #define DWT                 ((DWT_Type       *)     DWT_BASE         ) /*!< DWT configuration struct */

+  #define TPI                 ((TPI_Type       *)     TPI_BASE         ) /*!< TPI configuration struct */

+  #define CoreDebug           ((CoreDebug_Type *)     CoreDebug_BASE   ) /*!< Core Debug configuration struct */

+

+  #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+    #define MPU_BASE          (SCS_BASE +  0x0D90UL)                     /*!< Memory Protection Unit */

+    #define MPU               ((MPU_Type       *)     MPU_BASE         ) /*!< Memory Protection Unit */

+  #endif

+

+  #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+    #define SAU_BASE          (SCS_BASE +  0x0DD0UL)                     /*!< Security Attribution Unit */

+    #define SAU               ((SAU_Type       *)     SAU_BASE         ) /*!< Security Attribution Unit */

+  #endif

+

+  #define FPU_BASE            (SCS_BASE +  0x0F30UL)                     /*!< Floating Point Unit */

+  #define FPU                 ((FPU_Type       *)     FPU_BASE         ) /*!< Floating Point Unit */

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+  #define SCS_BASE_NS         (0xE002E000UL)                             /*!< System Control Space Base Address (non-secure address space) */

+  #define CoreDebug_BASE_NS   (0xE002EDF0UL)                             /*!< Core Debug Base Address           (non-secure address space) */

+  #define SysTick_BASE_NS     (SCS_BASE_NS +  0x0010UL)                  /*!< SysTick Base Address              (non-secure address space) */

+  #define NVIC_BASE_NS        (SCS_BASE_NS +  0x0100UL)                  /*!< NVIC Base Address                 (non-secure address space) */

+  #define SCB_BASE_NS         (SCS_BASE_NS +  0x0D00UL)                  /*!< System Control Block Base Address (non-secure address space) */

+

+  #define SCnSCB_NS           ((SCnSCB_Type    *)     SCS_BASE_NS      ) /*!< System control Register not in SCB(non-secure address space) */

+  #define SCB_NS              ((SCB_Type       *)     SCB_BASE_NS      ) /*!< SCB configuration struct          (non-secure address space) */

+  #define SysTick_NS          ((SysTick_Type   *)     SysTick_BASE_NS  ) /*!< SysTick configuration struct      (non-secure address space) */

+  #define NVIC_NS             ((NVIC_Type      *)     NVIC_BASE_NS     ) /*!< NVIC configuration struct         (non-secure address space) */

+  #define CoreDebug_NS        ((CoreDebug_Type *)     CoreDebug_BASE_NS) /*!< Core Debug configuration struct   (non-secure address space) */

+

+  #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+    #define MPU_BASE_NS       (SCS_BASE_NS +  0x0D90UL)                  /*!< Memory Protection Unit            (non-secure address space) */

+    #define MPU_NS            ((MPU_Type       *)     MPU_BASE_NS      ) /*!< Memory Protection Unit            (non-secure address space) */

+  #endif

+

+  #define FPU_BASE_NS         (SCS_BASE_NS +  0x0F30UL)                  /*!< Floating Point Unit               (non-secure address space) */

+  #define FPU_NS              ((FPU_Type       *)     FPU_BASE_NS      ) /*!< Floating Point Unit               (non-secure address space) */

+

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Debug Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping

+  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+  #define NVIC_GetActive              __NVIC_GetActive

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* Special LR values for Secure/Non-Secure call handling and exception handling                                               */

+

+/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS                   */

+#define FNC_RETURN                 (0xFEFFFFFFUL)     /* bit [0] ignored when processing a branch                             */

+

+/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */

+#define EXC_RETURN_PREFIX          (0xFF000000UL)     /* bits [31:24] set to indicate an EXC_RETURN value                     */

+#define EXC_RETURN_S               (0x00000040UL)     /* bit [6] stack used to push registers: 0=Non-secure 1=Secure          */

+#define EXC_RETURN_DCRS            (0x00000020UL)     /* bit [5] stacking rules for called registers: 0=skipped 1=saved       */

+#define EXC_RETURN_FTYPE           (0x00000010UL)     /* bit [4] allocate stack for floating-point context: 0=done 1=skipped  */

+#define EXC_RETURN_MODE            (0x00000008UL)     /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode      */

+#define EXC_RETURN_SPSEL           (0x00000002UL)     /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP           */

+#define EXC_RETURN_ES              (0x00000001UL)     /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */

+

+/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking                            */

+#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)  /* Value for processors with floating-point extension:                  */

+#define EXC_INTEGRITY_SIGNATURE     (0xFEFA125AUL)     /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE                   */

+#else

+#define EXC_INTEGRITY_SIGNATURE     (0xFEFA125BUL)     /* Value for processors without floating-point extension                */

+#endif

+

+

+/**

+  \brief   Set Priority Grouping

+  \details Sets the priority grouping field using the required unlock sequence.

+           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.

+           Only values from 0..7 are used.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]      PriorityGroup  Priority grouping field.

+ */

+__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)

+{

+  uint32_t reg_value;

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);             /* only values 0..7 are used          */

+

+  reg_value  =  SCB->AIRCR;                                                   /* read old register configuration    */

+  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change               */

+  reg_value  =  (reg_value                                   |

+                ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                (PriorityGroupTmp << 8U)                      );              /* Insert write key and priorty group */

+  SCB->AIRCR =  reg_value;

+}

+

+

+/**

+  \brief   Get Priority Grouping

+  \details Reads the priority grouping field from the NVIC Interrupt Controller.

+  \return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void)

+{

+  return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));

+}

+

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt

+  \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   Get Interrupt Target State

+  \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+  \return             1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Target State

+  \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+                      1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |=  ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)));

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Clear Interrupt Target State

+  \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+                      1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)));

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IPR[((uint32_t)IRQn)]               = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+  else

+  {

+    SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)]               >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Encode Priority

+  \details Encodes the priority for an interrupt with the given priority group,

+           preemptive priority value, and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]     PriorityGroup  Used priority group.

+  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).

+  \param [in]       SubPriority  Subpriority value (starting from 0).

+  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().

+ */

+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  return (

+           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |

+           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))

+         );

+}

+

+

+/**

+  \brief   Decode Priority

+  \details Decodes an interrupt priority value with a given priority group to

+           preemptive priority value and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.

+  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().

+  \param [in]     PriorityGroup  Used priority group.

+  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).

+  \param [out]     pSubPriority  Subpriority value (starting from 0).

+ */

+__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);

+  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);

+}

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           VTOR must been relocated to SRAM before.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos)    |

+                           (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

+                            SCB_AIRCR_SYSRESETREQ_Msk    );         /* Keep priority group unchanged */

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   Set Priority Grouping (non-secure)

+  \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence.

+           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.

+           Only values from 0..7 are used.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]      PriorityGroup  Priority grouping field.

+ */

+__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup)

+{

+  uint32_t reg_value;

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);             /* only values 0..7 are used          */

+

+  reg_value  =  SCB_NS->AIRCR;                                                   /* read old register configuration    */

+  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk));             /* clear bits to change               */

+  reg_value  =  (reg_value                                   |

+                ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                (PriorityGroupTmp << 8U)                      );              /* Insert write key and priorty group */

+  SCB_NS->AIRCR =  reg_value;

+}

+

+

+/**

+  \brief   Get Priority Grouping (non-secure)

+  \details Reads the priority grouping field from the non-secure NVIC when in secure state.

+  \return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void)

+{

+  return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));

+}

+

+

+/**

+  \brief   Enable Interrupt (non-secure)

+  \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status (non-secure)

+  \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt (non-secure)

+  \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt (non-secure)

+  \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt (non-secure)

+  \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt (non-secure)

+  \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt (non-secure)

+  \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority (non-secure)

+  \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every non-secure processor exception.

+ */

+__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->IPR[((uint32_t)IRQn)]               = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+  else

+  {

+    SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority (non-secure)

+  \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)]               >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+#endif /*  defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+/* ##########################  MPU functions  #################################### */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+

+#include "mpu_armv8.h"

+

+#endif

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+  uint32_t mvfr0;

+

+  mvfr0 = FPU->MVFR0;

+  if      ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U)

+  {

+    return 2U;           /* Double + Single precision FPU */

+  }

+  else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U)

+  {

+    return 1U;           /* Single precision FPU */

+  }

+  else

+  {

+    return 0U;           /* No FPU */

+  }

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##########################   SAU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SAUFunctions SAU Functions

+  \brief    Functions that configure the SAU.

+  @{

+ */

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+

+/**

+  \brief   Enable SAU

+  \details Enables the Security Attribution Unit (SAU).

+ */

+__STATIC_INLINE void TZ_SAU_Enable(void)

+{

+    SAU->CTRL |=  (SAU_CTRL_ENABLE_Msk);

+}

+

+

+

+/**

+  \brief   Disable SAU

+  \details Disables the Security Attribution Unit (SAU).

+ */

+__STATIC_INLINE void TZ_SAU_Disable(void)

+{

+    SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk);

+}

+

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+/*@} end of CMSIS_Core_SAUFunctions */

+

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   System Tick Configuration (non-secure)

+  \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>TZ_SysTick_Config_NS</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+

+ */

+__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                         /* Reload value impossible */

+  }

+

+  SysTick_NS->LOAD  = (uint32_t)(ticks - 1UL);                            /* set reload register */

+  TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick_NS->VAL   = 0UL;                                                /* Load the SysTick Counter Value */

+  SysTick_NS->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                      SysTick_CTRL_TICKINT_Msk   |

+                      SysTick_CTRL_ENABLE_Msk;                            /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                           /* Function successful */

+}

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+/* ##################################### Debug In/Output function ########################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_core_DebugFunctions ITM Functions

+  \brief    Functions that access the ITM debug interface.

+  @{

+ */

+

+extern volatile int32_t ITM_RxBuffer;                              /*!< External variable to receive characters. */

+#define                 ITM_RXBUFFER_EMPTY  ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */

+

+

+/**

+  \brief   ITM Send Character

+  \details Transmits a character via the ITM channel 0, and

+           \li Just returns when no debugger is connected that has booked the output.

+           \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.

+  \param [in]     ch  Character to transmit.

+  \returns            Character to transmit.

+ */

+__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch)

+{

+  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) &&      /* ITM enabled */

+      ((ITM->TER & 1UL               ) != 0UL)   )     /* ITM Port #0 enabled */

+  {

+    while (ITM->PORT[0U].u32 == 0UL)

+    {

+      __NOP();

+    }

+    ITM->PORT[0U].u8 = (uint8_t)ch;

+  }

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Receive Character

+  \details Inputs a character via the external variable \ref ITM_RxBuffer.

+  \return             Received character.

+  \return         -1  No character pending.

+ */

+__STATIC_INLINE int32_t ITM_ReceiveChar (void)

+{

+  int32_t ch = -1;                           /* no character available */

+

+  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY)

+  {

+    ch = ITM_RxBuffer;

+    ITM_RxBuffer = ITM_RXBUFFER_EMPTY;       /* ready for next character */

+  }

+

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Check Character

+  \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer.

+  \return          0  No character available.

+  \return          1  Character available.

+ */

+__STATIC_INLINE int32_t ITM_CheckChar (void)

+{

+

+  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY)

+  {

+    return (0);                              /* no character available */

+  }

+  else

+  {

+    return (1);                              /*    character available */

+  }

+}

+

+/*@} end of CMSIS_core_DebugFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_ARMV8MML_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm0.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm0.h
new file mode 100644
index 0000000..6f82227
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm0.h
@@ -0,0 +1,949 @@
+/**************************************************************************//**

+ * @file     core_cm0.h

+ * @brief    CMSIS Cortex-M0 Core Peripheral Access Layer Header File

+ * @version  V5.0.5

+ * @date     28. May 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_CM0_H_GENERIC

+#define __CORE_CM0_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup Cortex_M0

+  @{

+ */

+

+#include "cmsis_version.h"

+ 

+/*  CMSIS CM0 definitions */

+#define __CM0_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)              /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __CM0_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)               /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __CM0_CMSIS_VERSION       ((__CM0_CMSIS_VERSION_MAIN << 16U) | \

+                                    __CM0_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_M                (0U)                                   /*!< Cortex-M Core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    This core does not support an FPU at all

+*/

+#define __FPU_USED       0U

+

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined __ARM_PCS_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined __TI_VFP_SUPPORT__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM0_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_CM0_H_DEPENDANT

+#define __CORE_CM0_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __CM0_REV

+    #define __CM0_REV               0x0000U

+    #warning "__CM0_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          2U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group Cortex_M0 */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:28;              /*!< bit:  0..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */

+    uint32_t _reserved1:3;               /*!< bit: 25..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:1;               /*!< bit:      0  Reserved */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */

+    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[1U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[31U];

+  __IOM uint32_t ICER[1U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[31U];

+  __IOM uint32_t ISPR[1U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[31U];

+  __IOM uint32_t ICPR[1U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[31U];

+        uint32_t RESERVED4[64U];

+  __IOM uint32_t IP[8U];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */

+}  NVIC_Type;

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+        uint32_t RESERVED0;

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+        uint32_t RESERVED1;

+  __IOM uint32_t SHP[2U];                /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */

+#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */

+#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.

+            Therefore they are not covered by the Cortex-M0 header file.

+  @{

+ */

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */

+#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */

+#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */

+#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */

+

+#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */

+#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */

+#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */

+

+

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping

+  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+/*#define NVIC_GetActive              __NVIC_GetActive             not available for Cortex-M0 */

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* The following EXC_RETURN values are saved the LR on exception entry */

+#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */

+#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */

+#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */

+

+

+/* Interrupt Priorities are WORD accessible only under Armv6-M                  */

+/* The following MACROS handle generation of the register offset and byte masks */

+#define _BIT_SHIFT(IRQn)         (  ((((uint32_t)(int32_t)(IRQn))         )      &  0x03UL) * 8UL)

+#define _SHP_IDX(IRQn)           ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >>    2UL)      )

+#define _IP_IDX(IRQn)            (   (((uint32_t)(int32_t)(IRQn))                >>    2UL)      )

+

+#define __NVIC_SetPriorityGrouping(X) (void)(X)

+#define __NVIC_GetPriorityGrouping()  (0U)

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IP[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+  else

+  {

+    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Encode Priority

+  \details Encodes the priority for an interrupt with the given priority group,

+           preemptive priority value, and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]     PriorityGroup  Used priority group.

+  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).

+  \param [in]       SubPriority  Subpriority value (starting from 0).

+  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().

+ */

+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  return (

+           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |

+           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))

+         );

+}

+

+

+/**

+  \brief   Decode Priority

+  \details Decodes an interrupt priority value with a given priority group to

+           preemptive priority value and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.

+  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().

+  \param [in]     PriorityGroup  Used priority group.

+  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).

+  \param [out]     pSubPriority  Subpriority value (starting from 0).

+ */

+__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);

+  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);

+}

+

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           Address 0 must be mapped to SRAM.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+  uint32_t *vectors = (uint32_t *)0x0U;

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+  uint32_t *vectors = (uint32_t *)0x0U;

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                 SCB_AIRCR_SYSRESETREQ_Msk);

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+    return 0U;           /* No FPU */

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM0_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm0plus.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm0plus.h
new file mode 100644
index 0000000..b9377e8
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm0plus.h
@@ -0,0 +1,1083 @@
+/**************************************************************************//**

+ * @file     core_cm0plus.h

+ * @brief    CMSIS Cortex-M0+ Core Peripheral Access Layer Header File

+ * @version  V5.0.6

+ * @date     28. May 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_CM0PLUS_H_GENERIC

+#define __CORE_CM0PLUS_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup Cortex-M0+

+  @{

+ */

+

+#include "cmsis_version.h"

+ 

+/*  CMSIS CM0+ definitions */

+#define __CM0PLUS_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN)                  /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __CM0PLUS_CMSIS_VERSION_SUB  (__CM_CMSIS_VERSION_SUB)                   /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __CM0PLUS_CMSIS_VERSION      ((__CM0PLUS_CMSIS_VERSION_MAIN << 16U) | \

+                                       __CM0PLUS_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_M                   (0U)                                       /*!< Cortex-M Core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    This core does not support an FPU at all

+*/

+#define __FPU_USED       0U

+

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined __ARM_PCS_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined __TI_VFP_SUPPORT__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM0PLUS_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_CM0PLUS_H_DEPENDANT

+#define __CORE_CM0PLUS_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __CM0PLUS_REV

+    #define __CM0PLUS_REV             0x0000U

+    #warning "__CM0PLUS_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MPU_PRESENT

+    #define __MPU_PRESENT             0U

+    #warning "__MPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __VTOR_PRESENT

+    #define __VTOR_PRESENT            0U

+    #warning "__VTOR_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          2U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group Cortex-M0+ */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+  - Core MPU Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:28;              /*!< bit:  0..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */

+    uint32_t _reserved1:3;               /*!< bit: 25..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t nPRIV:1;                    /*!< bit:      0  Execution privilege in Thread mode */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */

+    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+#define CONTROL_nPRIV_Pos                   0U                                            /*!< CONTROL: nPRIV Position */

+#define CONTROL_nPRIV_Msk                  (1UL /*<< CONTROL_nPRIV_Pos*/)                 /*!< CONTROL: nPRIV Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[1U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[31U];

+  __IOM uint32_t ICER[1U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[31U];

+  __IOM uint32_t ISPR[1U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[31U];

+  __IOM uint32_t ICPR[1U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[31U];

+        uint32_t RESERVED4[64U];

+  __IOM uint32_t IP[8U];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */

+}  NVIC_Type;

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+  __IOM uint32_t VTOR;                   /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */

+#else

+        uint32_t RESERVED0;

+#endif

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+        uint32_t RESERVED1;

+  __IOM uint32_t SHP[2U];                /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */

+#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_VTOR_TBLOFF_Pos                 8U                                            /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos)            /*!< SCB VTOR: TBLOFF Mask */

+#endif

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */

+#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_MPU     Memory Protection Unit (MPU)

+  \brief    Type definitions for the Memory Protection Unit (MPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Memory Protection Unit (MPU).

+ */

+typedef struct

+{

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x000 (R/ )  MPU Type Register */

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x004 (R/W)  MPU Control Register */

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */

+  __IOM uint32_t RASR;                   /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */

+} MPU_Type;

+

+#define MPU_TYPE_RALIASES                  1U

+

+/* MPU Type Register Definitions */

+#define MPU_TYPE_IREGION_Pos               16U                                            /*!< MPU TYPE: IREGION Position */

+#define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */

+

+#define MPU_TYPE_DREGION_Pos                8U                                            /*!< MPU TYPE: DREGION Position */

+#define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */

+

+#define MPU_TYPE_SEPARATE_Pos               0U                                            /*!< MPU TYPE: SEPARATE Position */

+#define MPU_TYPE_SEPARATE_Msk              (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)             /*!< MPU TYPE: SEPARATE Mask */

+

+/* MPU Control Register Definitions */

+#define MPU_CTRL_PRIVDEFENA_Pos             2U                                            /*!< MPU CTRL: PRIVDEFENA Position */

+#define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */

+

+#define MPU_CTRL_HFNMIENA_Pos               1U                                            /*!< MPU CTRL: HFNMIENA Position */

+#define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */

+

+#define MPU_CTRL_ENABLE_Pos                 0U                                            /*!< MPU CTRL: ENABLE Position */

+#define MPU_CTRL_ENABLE_Msk                (1UL /*<< MPU_CTRL_ENABLE_Pos*/)               /*!< MPU CTRL: ENABLE Mask */

+

+/* MPU Region Number Register Definitions */

+#define MPU_RNR_REGION_Pos                  0U                                            /*!< MPU RNR: REGION Position */

+#define MPU_RNR_REGION_Msk                 (0xFFUL /*<< MPU_RNR_REGION_Pos*/)             /*!< MPU RNR: REGION Mask */

+

+/* MPU Region Base Address Register Definitions */

+#define MPU_RBAR_ADDR_Pos                   8U                                            /*!< MPU RBAR: ADDR Position */

+#define MPU_RBAR_ADDR_Msk                  (0xFFFFFFUL << MPU_RBAR_ADDR_Pos)              /*!< MPU RBAR: ADDR Mask */

+

+#define MPU_RBAR_VALID_Pos                  4U                                            /*!< MPU RBAR: VALID Position */

+#define MPU_RBAR_VALID_Msk                 (1UL << MPU_RBAR_VALID_Pos)                    /*!< MPU RBAR: VALID Mask */

+

+#define MPU_RBAR_REGION_Pos                 0U                                            /*!< MPU RBAR: REGION Position */

+#define MPU_RBAR_REGION_Msk                (0xFUL /*<< MPU_RBAR_REGION_Pos*/)             /*!< MPU RBAR: REGION Mask */

+

+/* MPU Region Attribute and Size Register Definitions */

+#define MPU_RASR_ATTRS_Pos                 16U                                            /*!< MPU RASR: MPU Region Attribute field Position */

+#define MPU_RASR_ATTRS_Msk                 (0xFFFFUL << MPU_RASR_ATTRS_Pos)               /*!< MPU RASR: MPU Region Attribute field Mask */

+

+#define MPU_RASR_XN_Pos                    28U                                            /*!< MPU RASR: ATTRS.XN Position */

+#define MPU_RASR_XN_Msk                    (1UL << MPU_RASR_XN_Pos)                       /*!< MPU RASR: ATTRS.XN Mask */

+

+#define MPU_RASR_AP_Pos                    24U                                            /*!< MPU RASR: ATTRS.AP Position */

+#define MPU_RASR_AP_Msk                    (0x7UL << MPU_RASR_AP_Pos)                     /*!< MPU RASR: ATTRS.AP Mask */

+

+#define MPU_RASR_TEX_Pos                   19U                                            /*!< MPU RASR: ATTRS.TEX Position */

+#define MPU_RASR_TEX_Msk                   (0x7UL << MPU_RASR_TEX_Pos)                    /*!< MPU RASR: ATTRS.TEX Mask */

+

+#define MPU_RASR_S_Pos                     18U                                            /*!< MPU RASR: ATTRS.S Position */

+#define MPU_RASR_S_Msk                     (1UL << MPU_RASR_S_Pos)                        /*!< MPU RASR: ATTRS.S Mask */

+

+#define MPU_RASR_C_Pos                     17U                                            /*!< MPU RASR: ATTRS.C Position */

+#define MPU_RASR_C_Msk                     (1UL << MPU_RASR_C_Pos)                        /*!< MPU RASR: ATTRS.C Mask */

+

+#define MPU_RASR_B_Pos                     16U                                            /*!< MPU RASR: ATTRS.B Position */

+#define MPU_RASR_B_Msk                     (1UL << MPU_RASR_B_Pos)                        /*!< MPU RASR: ATTRS.B Mask */

+

+#define MPU_RASR_SRD_Pos                    8U                                            /*!< MPU RASR: Sub-Region Disable Position */

+#define MPU_RASR_SRD_Msk                   (0xFFUL << MPU_RASR_SRD_Pos)                   /*!< MPU RASR: Sub-Region Disable Mask */

+

+#define MPU_RASR_SIZE_Pos                   1U                                            /*!< MPU RASR: Region Size Field Position */

+#define MPU_RASR_SIZE_Msk                  (0x1FUL << MPU_RASR_SIZE_Pos)                  /*!< MPU RASR: Region Size Field Mask */

+

+#define MPU_RASR_ENABLE_Pos                 0U                                            /*!< MPU RASR: Region enable bit Position */

+#define MPU_RASR_ENABLE_Msk                (1UL /*<< MPU_RASR_ENABLE_Pos*/)               /*!< MPU RASR: Region enable bit Disable Mask */

+

+/*@} end of group CMSIS_MPU */

+#endif

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.

+            Therefore they are not covered by the Cortex-M0+ header file.

+  @{

+ */

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */

+#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */

+#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */

+#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */

+

+#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */

+#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */

+#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+  #define MPU_BASE          (SCS_BASE +  0x0D90UL)                    /*!< Memory Protection Unit */

+  #define MPU               ((MPU_Type       *)     MPU_BASE      )   /*!< Memory Protection Unit */

+#endif

+

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping

+  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+/*#define NVIC_GetActive              __NVIC_GetActive             not available for Cortex-M0+ */

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* The following EXC_RETURN values are saved the LR on exception entry */

+#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */

+#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */

+#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */

+

+

+/* Interrupt Priorities are WORD accessible only under Armv6-M                  */

+/* The following MACROS handle generation of the register offset and byte masks */

+#define _BIT_SHIFT(IRQn)         (  ((((uint32_t)(int32_t)(IRQn))         )      &  0x03UL) * 8UL)

+#define _SHP_IDX(IRQn)           ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >>    2UL)      )

+#define _IP_IDX(IRQn)            (   (((uint32_t)(int32_t)(IRQn))                >>    2UL)      )

+

+#define __NVIC_SetPriorityGrouping(X) (void)(X)

+#define __NVIC_GetPriorityGrouping()  (0U)

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IP[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+  else

+  {

+    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Encode Priority

+  \details Encodes the priority for an interrupt with the given priority group,

+           preemptive priority value, and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]     PriorityGroup  Used priority group.

+  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).

+  \param [in]       SubPriority  Subpriority value (starting from 0).

+  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().

+ */

+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  return (

+           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |

+           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))

+         );

+}

+

+

+/**

+  \brief   Decode Priority

+  \details Decodes an interrupt priority value with a given priority group to

+           preemptive priority value and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.

+  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().

+  \param [in]     PriorityGroup  Used priority group.

+  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).

+  \param [out]     pSubPriority  Subpriority value (starting from 0).

+ */

+__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);

+  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);

+}

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           VTOR must been relocated to SRAM before.

+           If VTOR is not present address 0 must be mapped to SRAM.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+#else

+    uint32_t *vectors = (uint32_t *)0x0U;

+#endif

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+#else

+  uint32_t *vectors = (uint32_t *)0x0U;

+#endif

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                 SCB_AIRCR_SYSRESETREQ_Msk);

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+/* ##########################  MPU functions  #################################### */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+

+#include "mpu_armv7.h"

+

+#endif

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+    return 0U;           /* No FPU */

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM0PLUS_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm1.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm1.h
new file mode 100644
index 0000000..fd1c407
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm1.h
@@ -0,0 +1,976 @@
+/**************************************************************************//**

+ * @file     core_cm1.h

+ * @brief    CMSIS Cortex-M1 Core Peripheral Access Layer Header File

+ * @version  V1.0.0

+ * @date     23. July 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_CM1_H_GENERIC

+#define __CORE_CM1_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup Cortex_M1

+  @{

+ */

+

+#include "cmsis_version.h"

+ 

+/*  CMSIS CM1 definitions */

+#define __CM1_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)              /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __CM1_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)               /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __CM1_CMSIS_VERSION       ((__CM1_CMSIS_VERSION_MAIN << 16U) | \

+                                    __CM1_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_M                (1U)                                   /*!< Cortex-M Core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    This core does not support an FPU at all

+*/

+#define __FPU_USED       0U

+

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined __ARM_PCS_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined __TI_VFP_SUPPORT__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM1_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_CM1_H_DEPENDANT

+#define __CORE_CM1_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __CM1_REV

+    #define __CM1_REV               0x0100U

+    #warning "__CM1_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          2U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group Cortex_M1 */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:28;              /*!< bit:  0..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */

+    uint32_t _reserved1:3;               /*!< bit: 25..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:1;               /*!< bit:      0  Reserved */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */

+    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[1U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[31U];

+  __IOM uint32_t ICER[1U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[31U];

+  __IOM uint32_t ISPR[1U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[31U];

+  __IOM uint32_t ICPR[1U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[31U];

+        uint32_t RESERVED4[64U];

+  __IOM uint32_t IP[8U];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */

+}  NVIC_Type;

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+        uint32_t RESERVED0;

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+        uint32_t RESERVED1;

+  __IOM uint32_t SHP[2U];                /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */

+#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */

+#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)

+  \brief    Type definitions for the System Control and ID Register not in the SCB

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control and ID Register not in the SCB.

+ */

+typedef struct

+{

+        uint32_t RESERVED0[2U];

+  __IOM uint32_t ACTLR;                  /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */

+} SCnSCB_Type;

+

+/* Auxiliary Control Register Definitions */

+#define SCnSCB_ACTLR_ITCMUAEN_Pos            4U                                        /*!< ACTLR: Instruction TCM Upper Alias Enable Position */

+#define SCnSCB_ACTLR_ITCMUAEN_Msk           (1UL << SCnSCB_ACTLR_ITCMUAEN_Pos)         /*!< ACTLR: Instruction TCM Upper Alias Enable Mask */

+

+#define SCnSCB_ACTLR_ITCMLAEN_Pos            3U                                        /*!< ACTLR: Instruction TCM Lower Alias Enable Position */

+#define SCnSCB_ACTLR_ITCMLAEN_Msk           (1UL << SCnSCB_ACTLR_ITCMLAEN_Pos)         /*!< ACTLR: Instruction TCM Lower Alias Enable Mask */

+

+/*@} end of group CMSIS_SCnotSCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    Cortex-M1 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.

+            Therefore they are not covered by the Cortex-M1 header file.

+  @{

+ */

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */

+#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */

+#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */

+#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */

+

+#define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE      )   /*!< System control Register not in SCB */

+#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */

+#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */

+#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */

+

+

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping

+  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+/*#define NVIC_GetActive              __NVIC_GetActive             not available for Cortex-M1 */

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* The following EXC_RETURN values are saved the LR on exception entry */

+#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */

+#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */

+#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */

+

+

+/* Interrupt Priorities are WORD accessible only under Armv6-M                  */

+/* The following MACROS handle generation of the register offset and byte masks */

+#define _BIT_SHIFT(IRQn)         (  ((((uint32_t)(int32_t)(IRQn))         )      &  0x03UL) * 8UL)

+#define _SHP_IDX(IRQn)           ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >>    2UL)      )

+#define _IP_IDX(IRQn)            (   (((uint32_t)(int32_t)(IRQn))                >>    2UL)      )

+

+#define __NVIC_SetPriorityGrouping(X) (void)(X)

+#define __NVIC_GetPriorityGrouping()  (0U)

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IP[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+  else

+  {

+    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Encode Priority

+  \details Encodes the priority for an interrupt with the given priority group,

+           preemptive priority value, and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]     PriorityGroup  Used priority group.

+  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).

+  \param [in]       SubPriority  Subpriority value (starting from 0).

+  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().

+ */

+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  return (

+           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |

+           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))

+         );

+}

+

+

+/**

+  \brief   Decode Priority

+  \details Decodes an interrupt priority value with a given priority group to

+           preemptive priority value and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.

+  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().

+  \param [in]     PriorityGroup  Used priority group.

+  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).

+  \param [out]     pSubPriority  Subpriority value (starting from 0).

+ */

+__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);

+  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);

+}

+

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           Address 0 must be mapped to SRAM.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+  uint32_t *vectors = (uint32_t *)0x0U;

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+  uint32_t *vectors = (uint32_t *)0x0U;

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                 SCB_AIRCR_SYSRESETREQ_Msk);

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+    return 0U;           /* No FPU */

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM1_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm23.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm23.h
new file mode 100644
index 0000000..8202a8d
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm23.h
@@ -0,0 +1,1993 @@
+/**************************************************************************//**

+ * @file     core_cm23.h

+ * @brief    CMSIS Cortex-M23 Core Peripheral Access Layer Header File

+ * @version  V5.0.7

+ * @date     22. June 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_CM23_H_GENERIC

+#define __CORE_CM23_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup Cortex_M23

+  @{

+ */

+

+#include "cmsis_version.h"

+

+/*  CMSIS definitions */

+#define __CM23_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)                   /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __CM23_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)                    /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __CM23_CMSIS_VERSION       ((__CM23_CMSIS_VERSION_MAIN << 16U) | \

+                                     __CM23_CMSIS_VERSION_SUB           )      /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_M                 (23U)                                       /*!< Cortex-M Core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    This core does not support an FPU at all

+*/

+#define __FPU_USED       0U

+

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined __ARM_PCS_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined __TI_VFP_SUPPORT__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM23_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_CM23_H_DEPENDANT

+#define __CORE_CM23_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __CM23_REV

+    #define __CM23_REV                0x0000U

+    #warning "__CM23_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __FPU_PRESENT

+    #define __FPU_PRESENT             0U

+    #warning "__FPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MPU_PRESENT

+    #define __MPU_PRESENT             0U

+    #warning "__MPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __SAUREGION_PRESENT

+    #define __SAUREGION_PRESENT       0U

+    #warning "__SAUREGION_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __VTOR_PRESENT

+    #define __VTOR_PRESENT            0U

+    #warning "__VTOR_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          2U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+

+  #ifndef __ETM_PRESENT

+    #define __ETM_PRESENT             0U

+    #warning "__ETM_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MTB_PRESENT

+    #define __MTB_PRESENT             0U

+    #warning "__MTB_PRESENT not defined in device header file; using default!"

+  #endif

+

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group Cortex_M23 */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+  - Core Debug Register

+  - Core MPU Register

+  - Core SAU Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:28;              /*!< bit:  0..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */

+    uint32_t _reserved1:3;               /*!< bit: 25..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t nPRIV:1;                    /*!< bit:      0  Execution privilege in Thread mode */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack-pointer select */

+    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+#define CONTROL_nPRIV_Pos                   0U                                            /*!< CONTROL: nPRIV Position */

+#define CONTROL_nPRIV_Msk                  (1UL /*<< CONTROL_nPRIV_Pos*/)                 /*!< CONTROL: nPRIV Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[16U];              /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[16U];

+  __IOM uint32_t ICER[16U];              /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[16U];

+  __IOM uint32_t ISPR[16U];              /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[16U];

+  __IOM uint32_t ICPR[16U];              /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[16U];

+  __IOM uint32_t IABR[16U];              /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */

+        uint32_t RESERVED4[16U];

+  __IOM uint32_t ITNS[16U];              /*!< Offset: 0x280 (R/W)  Interrupt Non-Secure State Register */

+        uint32_t RESERVED5[16U];

+  __IOM uint32_t IPR[124U];              /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */

+}  NVIC_Type;

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+  __IOM uint32_t VTOR;                   /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */

+#else

+        uint32_t RESERVED0;

+#endif

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+        uint32_t RESERVED1;

+  __IOM uint32_t SHPR[2U];               /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_PENDNMISET_Pos            31U                                            /*!< SCB ICSR: PENDNMISET Position */

+#define SCB_ICSR_PENDNMISET_Msk            (1UL << SCB_ICSR_PENDNMISET_Pos)               /*!< SCB ICSR: PENDNMISET Mask */

+

+#define SCB_ICSR_NMIPENDSET_Pos            SCB_ICSR_PENDNMISET_Pos                        /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */

+#define SCB_ICSR_NMIPENDSET_Msk            SCB_ICSR_PENDNMISET_Msk                        /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */

+

+#define SCB_ICSR_PENDNMICLR_Pos            30U                                            /*!< SCB ICSR: PENDNMICLR Position */

+#define SCB_ICSR_PENDNMICLR_Msk            (1UL << SCB_ICSR_PENDNMICLR_Pos)               /*!< SCB ICSR: PENDNMICLR Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_STTNS_Pos                 24U                                            /*!< SCB ICSR: STTNS Position (Security Extension) */

+#define SCB_ICSR_STTNS_Msk                 (1UL << SCB_ICSR_STTNS_Pos)                    /*!< SCB ICSR: STTNS Mask (Security Extension) */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_RETTOBASE_Pos             11U                                            /*!< SCB ICSR: RETTOBASE Position */

+#define SCB_ICSR_RETTOBASE_Msk             (1UL << SCB_ICSR_RETTOBASE_Pos)                /*!< SCB ICSR: RETTOBASE Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+/* SCB Vector Table Offset Register Definitions */

+#define SCB_VTOR_TBLOFF_Pos                 7U                                            /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos)           /*!< SCB VTOR: TBLOFF Mask */

+#endif

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_PRIS_Pos                 14U                                            /*!< SCB AIRCR: PRIS Position */

+#define SCB_AIRCR_PRIS_Msk                 (1UL << SCB_AIRCR_PRIS_Pos)                    /*!< SCB AIRCR: PRIS Mask */

+

+#define SCB_AIRCR_BFHFNMINS_Pos            13U                                            /*!< SCB AIRCR: BFHFNMINS Position */

+#define SCB_AIRCR_BFHFNMINS_Msk            (1UL << SCB_AIRCR_BFHFNMINS_Pos)               /*!< SCB AIRCR: BFHFNMINS Mask */

+

+#define SCB_AIRCR_SYSRESETREQS_Pos          3U                                            /*!< SCB AIRCR: SYSRESETREQS Position */

+#define SCB_AIRCR_SYSRESETREQS_Msk         (1UL << SCB_AIRCR_SYSRESETREQS_Pos)            /*!< SCB AIRCR: SYSRESETREQS Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEPS_Pos              3U                                            /*!< SCB SCR: SLEEPDEEPS Position */

+#define SCB_SCR_SLEEPDEEPS_Msk             (1UL << SCB_SCR_SLEEPDEEPS_Pos)                /*!< SCB SCR: SLEEPDEEPS Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_BP_Pos                     18U                                            /*!< SCB CCR: BP Position */

+#define SCB_CCR_BP_Msk                     (1UL << SCB_CCR_BP_Pos)                        /*!< SCB CCR: BP Mask */

+

+#define SCB_CCR_IC_Pos                     17U                                            /*!< SCB CCR: IC Position */

+#define SCB_CCR_IC_Msk                     (1UL << SCB_CCR_IC_Pos)                        /*!< SCB CCR: IC Mask */

+

+#define SCB_CCR_DC_Pos                     16U                                            /*!< SCB CCR: DC Position */

+#define SCB_CCR_DC_Msk                     (1UL << SCB_CCR_DC_Pos)                        /*!< SCB CCR: DC Mask */

+

+#define SCB_CCR_STKOFHFNMIGN_Pos           10U                                            /*!< SCB CCR: STKOFHFNMIGN Position */

+#define SCB_CCR_STKOFHFNMIGN_Msk           (1UL << SCB_CCR_STKOFHFNMIGN_Pos)              /*!< SCB CCR: STKOFHFNMIGN Mask */

+

+#define SCB_CCR_BFHFNMIGN_Pos               8U                                            /*!< SCB CCR: BFHFNMIGN Position */

+#define SCB_CCR_BFHFNMIGN_Msk              (1UL << SCB_CCR_BFHFNMIGN_Pos)                 /*!< SCB CCR: BFHFNMIGN Mask */

+

+#define SCB_CCR_DIV_0_TRP_Pos               4U                                            /*!< SCB CCR: DIV_0_TRP Position */

+#define SCB_CCR_DIV_0_TRP_Msk              (1UL << SCB_CCR_DIV_0_TRP_Pos)                 /*!< SCB CCR: DIV_0_TRP Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+#define SCB_CCR_USERSETMPEND_Pos            1U                                            /*!< SCB CCR: USERSETMPEND Position */

+#define SCB_CCR_USERSETMPEND_Msk           (1UL << SCB_CCR_USERSETMPEND_Pos)              /*!< SCB CCR: USERSETMPEND Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_HARDFAULTPENDED_Pos      21U                                            /*!< SCB SHCSR: HARDFAULTPENDED Position */

+#define SCB_SHCSR_HARDFAULTPENDED_Msk      (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos)         /*!< SCB SHCSR: HARDFAULTPENDED Mask */

+

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+#define SCB_SHCSR_SYSTICKACT_Pos           11U                                            /*!< SCB SHCSR: SYSTICKACT Position */

+#define SCB_SHCSR_SYSTICKACT_Msk           (1UL << SCB_SHCSR_SYSTICKACT_Pos)              /*!< SCB SHCSR: SYSTICKACT Mask */

+

+#define SCB_SHCSR_PENDSVACT_Pos            10U                                            /*!< SCB SHCSR: PENDSVACT Position */

+#define SCB_SHCSR_PENDSVACT_Msk            (1UL << SCB_SHCSR_PENDSVACT_Pos)               /*!< SCB SHCSR: PENDSVACT Mask */

+

+#define SCB_SHCSR_SVCALLACT_Pos             7U                                            /*!< SCB SHCSR: SVCALLACT Position */

+#define SCB_SHCSR_SVCALLACT_Msk            (1UL << SCB_SHCSR_SVCALLACT_Pos)               /*!< SCB SHCSR: SVCALLACT Mask */

+

+#define SCB_SHCSR_NMIACT_Pos                5U                                            /*!< SCB SHCSR: NMIACT Position */

+#define SCB_SHCSR_NMIACT_Msk               (1UL << SCB_SHCSR_NMIACT_Pos)                  /*!< SCB SHCSR: NMIACT Mask */

+

+#define SCB_SHCSR_HARDFAULTACT_Pos          2U                                            /*!< SCB SHCSR: HARDFAULTACT Position */

+#define SCB_SHCSR_HARDFAULTACT_Msk         (1UL << SCB_SHCSR_HARDFAULTACT_Pos)            /*!< SCB SHCSR: HARDFAULTACT Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)

+  \brief    Type definitions for the Data Watchpoint and Trace (DWT)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Data Watchpoint and Trace Register (DWT).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  Control Register */

+        uint32_t RESERVED0[6U];

+  __IM  uint32_t PCSR;                   /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */

+  __IOM uint32_t COMP0;                  /*!< Offset: 0x020 (R/W)  Comparator Register 0 */

+        uint32_t RESERVED1[1U];

+  __IOM uint32_t FUNCTION0;              /*!< Offset: 0x028 (R/W)  Function Register 0 */

+        uint32_t RESERVED2[1U];

+  __IOM uint32_t COMP1;                  /*!< Offset: 0x030 (R/W)  Comparator Register 1 */

+        uint32_t RESERVED3[1U];

+  __IOM uint32_t FUNCTION1;              /*!< Offset: 0x038 (R/W)  Function Register 1 */

+        uint32_t RESERVED4[1U];

+  __IOM uint32_t COMP2;                  /*!< Offset: 0x040 (R/W)  Comparator Register 2 */

+        uint32_t RESERVED5[1U];

+  __IOM uint32_t FUNCTION2;              /*!< Offset: 0x048 (R/W)  Function Register 2 */

+        uint32_t RESERVED6[1U];

+  __IOM uint32_t COMP3;                  /*!< Offset: 0x050 (R/W)  Comparator Register 3 */

+        uint32_t RESERVED7[1U];

+  __IOM uint32_t FUNCTION3;              /*!< Offset: 0x058 (R/W)  Function Register 3 */

+        uint32_t RESERVED8[1U];

+  __IOM uint32_t COMP4;                  /*!< Offset: 0x060 (R/W)  Comparator Register 4 */

+        uint32_t RESERVED9[1U];

+  __IOM uint32_t FUNCTION4;              /*!< Offset: 0x068 (R/W)  Function Register 4 */

+        uint32_t RESERVED10[1U];

+  __IOM uint32_t COMP5;                  /*!< Offset: 0x070 (R/W)  Comparator Register 5 */

+        uint32_t RESERVED11[1U];

+  __IOM uint32_t FUNCTION5;              /*!< Offset: 0x078 (R/W)  Function Register 5 */

+        uint32_t RESERVED12[1U];

+  __IOM uint32_t COMP6;                  /*!< Offset: 0x080 (R/W)  Comparator Register 6 */

+        uint32_t RESERVED13[1U];

+  __IOM uint32_t FUNCTION6;              /*!< Offset: 0x088 (R/W)  Function Register 6 */

+        uint32_t RESERVED14[1U];

+  __IOM uint32_t COMP7;                  /*!< Offset: 0x090 (R/W)  Comparator Register 7 */

+        uint32_t RESERVED15[1U];

+  __IOM uint32_t FUNCTION7;              /*!< Offset: 0x098 (R/W)  Function Register 7 */

+        uint32_t RESERVED16[1U];

+  __IOM uint32_t COMP8;                  /*!< Offset: 0x0A0 (R/W)  Comparator Register 8 */

+        uint32_t RESERVED17[1U];

+  __IOM uint32_t FUNCTION8;              /*!< Offset: 0x0A8 (R/W)  Function Register 8 */

+        uint32_t RESERVED18[1U];

+  __IOM uint32_t COMP9;                  /*!< Offset: 0x0B0 (R/W)  Comparator Register 9 */

+        uint32_t RESERVED19[1U];

+  __IOM uint32_t FUNCTION9;              /*!< Offset: 0x0B8 (R/W)  Function Register 9 */

+        uint32_t RESERVED20[1U];

+  __IOM uint32_t COMP10;                 /*!< Offset: 0x0C0 (R/W)  Comparator Register 10 */

+        uint32_t RESERVED21[1U];

+  __IOM uint32_t FUNCTION10;             /*!< Offset: 0x0C8 (R/W)  Function Register 10 */

+        uint32_t RESERVED22[1U];

+  __IOM uint32_t COMP11;                 /*!< Offset: 0x0D0 (R/W)  Comparator Register 11 */

+        uint32_t RESERVED23[1U];

+  __IOM uint32_t FUNCTION11;             /*!< Offset: 0x0D8 (R/W)  Function Register 11 */

+        uint32_t RESERVED24[1U];

+  __IOM uint32_t COMP12;                 /*!< Offset: 0x0E0 (R/W)  Comparator Register 12 */

+        uint32_t RESERVED25[1U];

+  __IOM uint32_t FUNCTION12;             /*!< Offset: 0x0E8 (R/W)  Function Register 12 */

+        uint32_t RESERVED26[1U];

+  __IOM uint32_t COMP13;                 /*!< Offset: 0x0F0 (R/W)  Comparator Register 13 */

+        uint32_t RESERVED27[1U];

+  __IOM uint32_t FUNCTION13;             /*!< Offset: 0x0F8 (R/W)  Function Register 13 */

+        uint32_t RESERVED28[1U];

+  __IOM uint32_t COMP14;                 /*!< Offset: 0x100 (R/W)  Comparator Register 14 */

+        uint32_t RESERVED29[1U];

+  __IOM uint32_t FUNCTION14;             /*!< Offset: 0x108 (R/W)  Function Register 14 */

+        uint32_t RESERVED30[1U];

+  __IOM uint32_t COMP15;                 /*!< Offset: 0x110 (R/W)  Comparator Register 15 */

+        uint32_t RESERVED31[1U];

+  __IOM uint32_t FUNCTION15;             /*!< Offset: 0x118 (R/W)  Function Register 15 */

+} DWT_Type;

+

+/* DWT Control Register Definitions */

+#define DWT_CTRL_NUMCOMP_Pos               28U                                         /*!< DWT CTRL: NUMCOMP Position */

+#define DWT_CTRL_NUMCOMP_Msk               (0xFUL << DWT_CTRL_NUMCOMP_Pos)             /*!< DWT CTRL: NUMCOMP Mask */

+

+#define DWT_CTRL_NOTRCPKT_Pos              27U                                         /*!< DWT CTRL: NOTRCPKT Position */

+#define DWT_CTRL_NOTRCPKT_Msk              (0x1UL << DWT_CTRL_NOTRCPKT_Pos)            /*!< DWT CTRL: NOTRCPKT Mask */

+

+#define DWT_CTRL_NOEXTTRIG_Pos             26U                                         /*!< DWT CTRL: NOEXTTRIG Position */

+#define DWT_CTRL_NOEXTTRIG_Msk             (0x1UL << DWT_CTRL_NOEXTTRIG_Pos)           /*!< DWT CTRL: NOEXTTRIG Mask */

+

+#define DWT_CTRL_NOCYCCNT_Pos              25U                                         /*!< DWT CTRL: NOCYCCNT Position */

+#define DWT_CTRL_NOCYCCNT_Msk              (0x1UL << DWT_CTRL_NOCYCCNT_Pos)            /*!< DWT CTRL: NOCYCCNT Mask */

+

+#define DWT_CTRL_NOPRFCNT_Pos              24U                                         /*!< DWT CTRL: NOPRFCNT Position */

+#define DWT_CTRL_NOPRFCNT_Msk              (0x1UL << DWT_CTRL_NOPRFCNT_Pos)            /*!< DWT CTRL: NOPRFCNT Mask */

+

+/* DWT Comparator Function Register Definitions */

+#define DWT_FUNCTION_ID_Pos                27U                                         /*!< DWT FUNCTION: ID Position */

+#define DWT_FUNCTION_ID_Msk                (0x1FUL << DWT_FUNCTION_ID_Pos)             /*!< DWT FUNCTION: ID Mask */

+

+#define DWT_FUNCTION_MATCHED_Pos           24U                                         /*!< DWT FUNCTION: MATCHED Position */

+#define DWT_FUNCTION_MATCHED_Msk           (0x1UL << DWT_FUNCTION_MATCHED_Pos)         /*!< DWT FUNCTION: MATCHED Mask */

+

+#define DWT_FUNCTION_DATAVSIZE_Pos         10U                                         /*!< DWT FUNCTION: DATAVSIZE Position */

+#define DWT_FUNCTION_DATAVSIZE_Msk         (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos)       /*!< DWT FUNCTION: DATAVSIZE Mask */

+

+#define DWT_FUNCTION_ACTION_Pos             4U                                         /*!< DWT FUNCTION: ACTION Position */

+#define DWT_FUNCTION_ACTION_Msk            (0x3UL << DWT_FUNCTION_ACTION_Pos)          /*!< DWT FUNCTION: ACTION Mask */

+

+#define DWT_FUNCTION_MATCH_Pos              0U                                         /*!< DWT FUNCTION: MATCH Position */

+#define DWT_FUNCTION_MATCH_Msk             (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/)       /*!< DWT FUNCTION: MATCH Mask */

+

+/*@}*/ /* end of group CMSIS_DWT */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_TPI     Trace Port Interface (TPI)

+  \brief    Type definitions for the Trace Port Interface (TPI)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Trace Port Interface Register (TPI).

+ */

+typedef struct

+{

+  __IM  uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */

+  __IOM uint32_t CSPSR;                  /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */

+        uint32_t RESERVED0[2U];

+  __IOM uint32_t ACPR;                   /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */

+        uint32_t RESERVED1[55U];

+  __IOM uint32_t SPPR;                   /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */

+        uint32_t RESERVED2[131U];

+  __IM  uint32_t FFSR;                   /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */

+  __IOM uint32_t FFCR;                   /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */

+  __IOM uint32_t PSCR;                   /*!< Offset: 0x308 (R/W)  Periodic Synchronization Control Register */

+        uint32_t RESERVED3[759U];

+  __IM  uint32_t TRIGGER;                /*!< Offset: 0xEE8 (R/ )  TRIGGER Register */

+  __IM  uint32_t ITFTTD0;                /*!< Offset: 0xEEC (R/ )  Integration Test FIFO Test Data 0 Register */

+  __IOM uint32_t ITATBCTR2;              /*!< Offset: 0xEF0 (R/W)  Integration Test ATB Control Register 2 */

+        uint32_t RESERVED4[1U];

+  __IM  uint32_t ITATBCTR0;              /*!< Offset: 0xEF8 (R/ )  Integration Test ATB Control Register 0 */

+  __IM  uint32_t ITFTTD1;                /*!< Offset: 0xEFC (R/ )  Integration Test FIFO Test Data 1 Register */

+  __IOM uint32_t ITCTRL;                 /*!< Offset: 0xF00 (R/W)  Integration Mode Control */

+        uint32_t RESERVED5[39U];

+  __IOM uint32_t CLAIMSET;               /*!< Offset: 0xFA0 (R/W)  Claim tag set */

+  __IOM uint32_t CLAIMCLR;               /*!< Offset: 0xFA4 (R/W)  Claim tag clear */

+        uint32_t RESERVED7[8U];

+  __IM  uint32_t DEVID;                  /*!< Offset: 0xFC8 (R/ )  Device Configuration Register */

+  __IM  uint32_t DEVTYPE;                /*!< Offset: 0xFCC (R/ )  Device Type Identifier Register */

+} TPI_Type;

+

+/* TPI Asynchronous Clock Prescaler Register Definitions */

+#define TPI_ACPR_PRESCALER_Pos              0U                                         /*!< TPI ACPR: PRESCALER Position */

+#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< TPI ACPR: PRESCALER Mask */

+

+/* TPI Selected Pin Protocol Register Definitions */

+#define TPI_SPPR_TXMODE_Pos                 0U                                         /*!< TPI SPPR: TXMODE Position */

+#define TPI_SPPR_TXMODE_Msk                (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/)          /*!< TPI SPPR: TXMODE Mask */

+

+/* TPI Formatter and Flush Status Register Definitions */

+#define TPI_FFSR_FtNonStop_Pos              3U                                         /*!< TPI FFSR: FtNonStop Position */

+#define TPI_FFSR_FtNonStop_Msk             (0x1UL << TPI_FFSR_FtNonStop_Pos)           /*!< TPI FFSR: FtNonStop Mask */

+

+#define TPI_FFSR_TCPresent_Pos              2U                                         /*!< TPI FFSR: TCPresent Position */

+#define TPI_FFSR_TCPresent_Msk             (0x1UL << TPI_FFSR_TCPresent_Pos)           /*!< TPI FFSR: TCPresent Mask */

+

+#define TPI_FFSR_FtStopped_Pos              1U                                         /*!< TPI FFSR: FtStopped Position */

+#define TPI_FFSR_FtStopped_Msk             (0x1UL << TPI_FFSR_FtStopped_Pos)           /*!< TPI FFSR: FtStopped Mask */

+

+#define TPI_FFSR_FlInProg_Pos               0U                                         /*!< TPI FFSR: FlInProg Position */

+#define TPI_FFSR_FlInProg_Msk              (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/)        /*!< TPI FFSR: FlInProg Mask */

+

+/* TPI Formatter and Flush Control Register Definitions */

+#define TPI_FFCR_TrigIn_Pos                 8U                                         /*!< TPI FFCR: TrigIn Position */

+#define TPI_FFCR_TrigIn_Msk                (0x1UL << TPI_FFCR_TrigIn_Pos)              /*!< TPI FFCR: TrigIn Mask */

+

+#define TPI_FFCR_FOnMan_Pos                 6U                                         /*!< TPI FFCR: FOnMan Position */

+#define TPI_FFCR_FOnMan_Msk                (0x1UL << TPI_FFCR_FOnMan_Pos)              /*!< TPI FFCR: FOnMan Mask */

+

+#define TPI_FFCR_EnFCont_Pos                1U                                         /*!< TPI FFCR: EnFCont Position */

+#define TPI_FFCR_EnFCont_Msk               (0x1UL << TPI_FFCR_EnFCont_Pos)             /*!< TPI FFCR: EnFCont Mask */

+

+/* TPI TRIGGER Register Definitions */

+#define TPI_TRIGGER_TRIGGER_Pos             0U                                         /*!< TPI TRIGGER: TRIGGER Position */

+#define TPI_TRIGGER_TRIGGER_Msk            (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/)      /*!< TPI TRIGGER: TRIGGER Mask */

+

+/* TPI Integration Test FIFO Test Data 0 Register Definitions */

+#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos    29U                                         /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */

+#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk    (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos)  /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */

+

+#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos  27U                                         /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */

+#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk  (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */

+

+#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos    26U                                         /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */

+#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk    (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos)  /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */

+

+#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos  24U                                         /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */

+#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk  (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */

+

+#define TPI_ITFTTD0_ATB_IF1_data2_Pos      16U                                         /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */

+#define TPI_ITFTTD0_ATB_IF1_data2_Msk      (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos)   /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */

+

+#define TPI_ITFTTD0_ATB_IF1_data1_Pos       8U                                         /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */

+#define TPI_ITFTTD0_ATB_IF1_data1_Msk      (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos)   /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */

+

+#define TPI_ITFTTD0_ATB_IF1_data0_Pos       0U                                          /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */

+#define TPI_ITFTTD0_ATB_IF1_data0_Msk      (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */

+

+/* TPI Integration Test ATB Control Register 2 Register Definitions */

+#define TPI_ITATBCTR2_AFVALID2S_Pos         1U                                         /*!< TPI ITATBCTR2: AFVALID2S Position */

+#define TPI_ITATBCTR2_AFVALID2S_Msk        (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos)      /*!< TPI ITATBCTR2: AFVALID2SS Mask */

+

+#define TPI_ITATBCTR2_AFVALID1S_Pos         1U                                         /*!< TPI ITATBCTR2: AFVALID1S Position */

+#define TPI_ITATBCTR2_AFVALID1S_Msk        (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos)      /*!< TPI ITATBCTR2: AFVALID1SS Mask */

+

+#define TPI_ITATBCTR2_ATREADY2S_Pos         0U                                         /*!< TPI ITATBCTR2: ATREADY2S Position */

+#define TPI_ITATBCTR2_ATREADY2S_Msk        (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/)  /*!< TPI ITATBCTR2: ATREADY2S Mask */

+

+#define TPI_ITATBCTR2_ATREADY1S_Pos         0U                                         /*!< TPI ITATBCTR2: ATREADY1S Position */

+#define TPI_ITATBCTR2_ATREADY1S_Msk        (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/)  /*!< TPI ITATBCTR2: ATREADY1S Mask */

+

+/* TPI Integration Test FIFO Test Data 1 Register Definitions */

+#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos    29U                                         /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */

+#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk    (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos)  /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */

+

+#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos  27U                                         /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */

+#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk  (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */

+

+#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos    26U                                         /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */

+#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk    (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos)  /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */

+

+#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos  24U                                         /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */

+#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk  (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */

+

+#define TPI_ITFTTD1_ATB_IF2_data2_Pos      16U                                         /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */

+#define TPI_ITFTTD1_ATB_IF2_data2_Msk      (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos)   /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */

+

+#define TPI_ITFTTD1_ATB_IF2_data1_Pos       8U                                         /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */

+#define TPI_ITFTTD1_ATB_IF2_data1_Msk      (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos)   /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */

+

+#define TPI_ITFTTD1_ATB_IF2_data0_Pos       0U                                          /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */

+#define TPI_ITFTTD1_ATB_IF2_data0_Msk      (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */

+

+/* TPI Integration Test ATB Control Register 0 Definitions */

+#define TPI_ITATBCTR0_AFVALID2S_Pos         1U                                         /*!< TPI ITATBCTR0: AFVALID2S Position */

+#define TPI_ITATBCTR0_AFVALID2S_Msk        (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos)      /*!< TPI ITATBCTR0: AFVALID2SS Mask */

+

+#define TPI_ITATBCTR0_AFVALID1S_Pos         1U                                         /*!< TPI ITATBCTR0: AFVALID1S Position */

+#define TPI_ITATBCTR0_AFVALID1S_Msk        (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos)      /*!< TPI ITATBCTR0: AFVALID1SS Mask */

+

+#define TPI_ITATBCTR0_ATREADY2S_Pos         0U                                         /*!< TPI ITATBCTR0: ATREADY2S Position */

+#define TPI_ITATBCTR0_ATREADY2S_Msk        (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/)  /*!< TPI ITATBCTR0: ATREADY2S Mask */

+

+#define TPI_ITATBCTR0_ATREADY1S_Pos         0U                                         /*!< TPI ITATBCTR0: ATREADY1S Position */

+#define TPI_ITATBCTR0_ATREADY1S_Msk        (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/)  /*!< TPI ITATBCTR0: ATREADY1S Mask */

+

+/* TPI Integration Mode Control Register Definitions */

+#define TPI_ITCTRL_Mode_Pos                 0U                                         /*!< TPI ITCTRL: Mode Position */

+#define TPI_ITCTRL_Mode_Msk                (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */

+

+/* TPI DEVID Register Definitions */

+#define TPI_DEVID_NRZVALID_Pos             11U                                         /*!< TPI DEVID: NRZVALID Position */

+#define TPI_DEVID_NRZVALID_Msk             (0x1UL << TPI_DEVID_NRZVALID_Pos)           /*!< TPI DEVID: NRZVALID Mask */

+

+#define TPI_DEVID_MANCVALID_Pos            10U                                         /*!< TPI DEVID: MANCVALID Position */

+#define TPI_DEVID_MANCVALID_Msk            (0x1UL << TPI_DEVID_MANCVALID_Pos)          /*!< TPI DEVID: MANCVALID Mask */

+

+#define TPI_DEVID_PTINVALID_Pos             9U                                         /*!< TPI DEVID: PTINVALID Position */

+#define TPI_DEVID_PTINVALID_Msk            (0x1UL << TPI_DEVID_PTINVALID_Pos)          /*!< TPI DEVID: PTINVALID Mask */

+

+#define TPI_DEVID_FIFOSZ_Pos                6U                                         /*!< TPI DEVID: FIFOSZ Position */

+#define TPI_DEVID_FIFOSZ_Msk               (0x7UL << TPI_DEVID_FIFOSZ_Pos)             /*!< TPI DEVID: FIFOSZ Mask */

+

+#define TPI_DEVID_NrTraceInput_Pos          0U                                         /*!< TPI DEVID: NrTraceInput Position */

+#define TPI_DEVID_NrTraceInput_Msk         (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */

+

+/* TPI DEVTYPE Register Definitions */

+#define TPI_DEVTYPE_SubType_Pos             4U                                         /*!< TPI DEVTYPE: SubType Position */

+#define TPI_DEVTYPE_SubType_Msk            (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/)      /*!< TPI DEVTYPE: SubType Mask */

+

+#define TPI_DEVTYPE_MajorType_Pos           0U                                         /*!< TPI DEVTYPE: MajorType Position */

+#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */

+

+/*@}*/ /* end of group CMSIS_TPI */

+

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_MPU     Memory Protection Unit (MPU)

+  \brief    Type definitions for the Memory Protection Unit (MPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Memory Protection Unit (MPU).

+ */

+typedef struct

+{

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x000 (R/ )  MPU Type Register */

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x004 (R/W)  MPU Control Register */

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  MPU Region Number Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */

+  __IOM uint32_t RLAR;                   /*!< Offset: 0x010 (R/W)  MPU Region Limit Address Register */

+        uint32_t RESERVED0[7U];

+  union {

+  __IOM uint32_t MAIR[2];

+  struct {

+  __IOM uint32_t MAIR0;                  /*!< Offset: 0x030 (R/W)  MPU Memory Attribute Indirection Register 0 */

+  __IOM uint32_t MAIR1;                  /*!< Offset: 0x034 (R/W)  MPU Memory Attribute Indirection Register 1 */

+  };

+  };

+} MPU_Type;

+

+#define MPU_TYPE_RALIASES                  1U

+

+/* MPU Type Register Definitions */

+#define MPU_TYPE_IREGION_Pos               16U                                            /*!< MPU TYPE: IREGION Position */

+#define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */

+

+#define MPU_TYPE_DREGION_Pos                8U                                            /*!< MPU TYPE: DREGION Position */

+#define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */

+

+#define MPU_TYPE_SEPARATE_Pos               0U                                            /*!< MPU TYPE: SEPARATE Position */

+#define MPU_TYPE_SEPARATE_Msk              (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)             /*!< MPU TYPE: SEPARATE Mask */

+

+/* MPU Control Register Definitions */

+#define MPU_CTRL_PRIVDEFENA_Pos             2U                                            /*!< MPU CTRL: PRIVDEFENA Position */

+#define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */

+

+#define MPU_CTRL_HFNMIENA_Pos               1U                                            /*!< MPU CTRL: HFNMIENA Position */

+#define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */

+

+#define MPU_CTRL_ENABLE_Pos                 0U                                            /*!< MPU CTRL: ENABLE Position */

+#define MPU_CTRL_ENABLE_Msk                (1UL /*<< MPU_CTRL_ENABLE_Pos*/)               /*!< MPU CTRL: ENABLE Mask */

+

+/* MPU Region Number Register Definitions */

+#define MPU_RNR_REGION_Pos                  0U                                            /*!< MPU RNR: REGION Position */

+#define MPU_RNR_REGION_Msk                 (0xFFUL /*<< MPU_RNR_REGION_Pos*/)             /*!< MPU RNR: REGION Mask */

+

+/* MPU Region Base Address Register Definitions */

+#define MPU_RBAR_BASE_Pos                   5U                                            /*!< MPU RBAR: BASE Position */

+#define MPU_RBAR_BASE_Msk                  (0x7FFFFFFUL << MPU_RBAR_BASE_Pos)             /*!< MPU RBAR: BASE Mask */

+

+#define MPU_RBAR_SH_Pos                     3U                                            /*!< MPU RBAR: SH Position */

+#define MPU_RBAR_SH_Msk                    (0x3UL << MPU_RBAR_SH_Pos)                     /*!< MPU RBAR: SH Mask */

+

+#define MPU_RBAR_AP_Pos                     1U                                            /*!< MPU RBAR: AP Position */

+#define MPU_RBAR_AP_Msk                    (0x3UL << MPU_RBAR_AP_Pos)                     /*!< MPU RBAR: AP Mask */

+

+#define MPU_RBAR_XN_Pos                     0U                                            /*!< MPU RBAR: XN Position */

+#define MPU_RBAR_XN_Msk                    (01UL /*<< MPU_RBAR_XN_Pos*/)                  /*!< MPU RBAR: XN Mask */

+

+/* MPU Region Limit Address Register Definitions */

+#define MPU_RLAR_LIMIT_Pos                  5U                                            /*!< MPU RLAR: LIMIT Position */

+#define MPU_RLAR_LIMIT_Msk                 (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos)            /*!< MPU RLAR: LIMIT Mask */

+

+#define MPU_RLAR_AttrIndx_Pos               1U                                            /*!< MPU RLAR: AttrIndx Position */

+#define MPU_RLAR_AttrIndx_Msk              (0x7UL << MPU_RLAR_AttrIndx_Pos)               /*!< MPU RLAR: AttrIndx Mask */

+

+#define MPU_RLAR_EN_Pos                     0U                                            /*!< MPU RLAR: EN Position */

+#define MPU_RLAR_EN_Msk                    (1UL /*<< MPU_RLAR_EN_Pos*/)                   /*!< MPU RLAR: EN Mask */

+

+/* MPU Memory Attribute Indirection Register 0 Definitions */

+#define MPU_MAIR0_Attr3_Pos                24U                                            /*!< MPU MAIR0: Attr3 Position */

+#define MPU_MAIR0_Attr3_Msk                (0xFFUL << MPU_MAIR0_Attr3_Pos)                /*!< MPU MAIR0: Attr3 Mask */

+

+#define MPU_MAIR0_Attr2_Pos                16U                                            /*!< MPU MAIR0: Attr2 Position */

+#define MPU_MAIR0_Attr2_Msk                (0xFFUL << MPU_MAIR0_Attr2_Pos)                /*!< MPU MAIR0: Attr2 Mask */

+

+#define MPU_MAIR0_Attr1_Pos                 8U                                            /*!< MPU MAIR0: Attr1 Position */

+#define MPU_MAIR0_Attr1_Msk                (0xFFUL << MPU_MAIR0_Attr1_Pos)                /*!< MPU MAIR0: Attr1 Mask */

+

+#define MPU_MAIR0_Attr0_Pos                 0U                                            /*!< MPU MAIR0: Attr0 Position */

+#define MPU_MAIR0_Attr0_Msk                (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/)            /*!< MPU MAIR0: Attr0 Mask */

+

+/* MPU Memory Attribute Indirection Register 1 Definitions */

+#define MPU_MAIR1_Attr7_Pos                24U                                            /*!< MPU MAIR1: Attr7 Position */

+#define MPU_MAIR1_Attr7_Msk                (0xFFUL << MPU_MAIR1_Attr7_Pos)                /*!< MPU MAIR1: Attr7 Mask */

+

+#define MPU_MAIR1_Attr6_Pos                16U                                            /*!< MPU MAIR1: Attr6 Position */

+#define MPU_MAIR1_Attr6_Msk                (0xFFUL << MPU_MAIR1_Attr6_Pos)                /*!< MPU MAIR1: Attr6 Mask */

+

+#define MPU_MAIR1_Attr5_Pos                 8U                                            /*!< MPU MAIR1: Attr5 Position */

+#define MPU_MAIR1_Attr5_Msk                (0xFFUL << MPU_MAIR1_Attr5_Pos)                /*!< MPU MAIR1: Attr5 Mask */

+

+#define MPU_MAIR1_Attr4_Pos                 0U                                            /*!< MPU MAIR1: Attr4 Position */

+#define MPU_MAIR1_Attr4_Msk                (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/)            /*!< MPU MAIR1: Attr4 Mask */

+

+/*@} end of group CMSIS_MPU */

+#endif

+

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SAU     Security Attribution Unit (SAU)

+  \brief    Type definitions for the Security Attribution Unit (SAU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Security Attribution Unit (SAU).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SAU Control Register */

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x004 (R/ )  SAU Type Register */

+#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U)

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  SAU Region Number Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  SAU Region Base Address Register */

+  __IOM uint32_t RLAR;                   /*!< Offset: 0x010 (R/W)  SAU Region Limit Address Register */

+#endif

+} SAU_Type;

+

+/* SAU Control Register Definitions */

+#define SAU_CTRL_ALLNS_Pos                  1U                                            /*!< SAU CTRL: ALLNS Position */

+#define SAU_CTRL_ALLNS_Msk                 (1UL << SAU_CTRL_ALLNS_Pos)                    /*!< SAU CTRL: ALLNS Mask */

+

+#define SAU_CTRL_ENABLE_Pos                 0U                                            /*!< SAU CTRL: ENABLE Position */

+#define SAU_CTRL_ENABLE_Msk                (1UL /*<< SAU_CTRL_ENABLE_Pos*/)               /*!< SAU CTRL: ENABLE Mask */

+

+/* SAU Type Register Definitions */

+#define SAU_TYPE_SREGION_Pos                0U                                            /*!< SAU TYPE: SREGION Position */

+#define SAU_TYPE_SREGION_Msk               (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/)           /*!< SAU TYPE: SREGION Mask */

+

+#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U)

+/* SAU Region Number Register Definitions */

+#define SAU_RNR_REGION_Pos                  0U                                            /*!< SAU RNR: REGION Position */

+#define SAU_RNR_REGION_Msk                 (0xFFUL /*<< SAU_RNR_REGION_Pos*/)             /*!< SAU RNR: REGION Mask */

+

+/* SAU Region Base Address Register Definitions */

+#define SAU_RBAR_BADDR_Pos                  5U                                            /*!< SAU RBAR: BADDR Position */

+#define SAU_RBAR_BADDR_Msk                 (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos)            /*!< SAU RBAR: BADDR Mask */

+

+/* SAU Region Limit Address Register Definitions */

+#define SAU_RLAR_LADDR_Pos                  5U                                            /*!< SAU RLAR: LADDR Position */

+#define SAU_RLAR_LADDR_Msk                 (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos)            /*!< SAU RLAR: LADDR Mask */

+

+#define SAU_RLAR_NSC_Pos                    1U                                            /*!< SAU RLAR: NSC Position */

+#define SAU_RLAR_NSC_Msk                   (1UL << SAU_RLAR_NSC_Pos)                      /*!< SAU RLAR: NSC Mask */

+

+#define SAU_RLAR_ENABLE_Pos                 0U                                            /*!< SAU RLAR: ENABLE Position */

+#define SAU_RLAR_ENABLE_Msk                (1UL /*<< SAU_RLAR_ENABLE_Pos*/)               /*!< SAU RLAR: ENABLE Mask */

+

+#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */

+

+/*@} end of group CMSIS_SAU */

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    Type definitions for the Core Debug Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Core Debug Register (CoreDebug).

+ */

+typedef struct

+{

+  __IOM uint32_t DHCSR;                  /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */

+  __OM  uint32_t DCRSR;                  /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */

+  __IOM uint32_t DCRDR;                  /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */

+  __IOM uint32_t DEMCR;                  /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */

+        uint32_t RESERVED4[1U];

+  __IOM uint32_t DAUTHCTRL;              /*!< Offset: 0x014 (R/W)  Debug Authentication Control Register */

+  __IOM uint32_t DSCSR;                  /*!< Offset: 0x018 (R/W)  Debug Security Control and Status Register */

+} CoreDebug_Type;

+

+/* Debug Halting Control and Status Register Definitions */

+#define CoreDebug_DHCSR_DBGKEY_Pos         16U                                            /*!< CoreDebug DHCSR: DBGKEY Position */

+#define CoreDebug_DHCSR_DBGKEY_Msk         (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos)       /*!< CoreDebug DHCSR: DBGKEY Mask */

+

+#define CoreDebug_DHCSR_S_RESTART_ST_Pos   26U                                            /*!< CoreDebug DHCSR: S_RESTART_ST Position */

+#define CoreDebug_DHCSR_S_RESTART_ST_Msk   (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos)      /*!< CoreDebug DHCSR: S_RESTART_ST Mask */

+

+#define CoreDebug_DHCSR_S_RESET_ST_Pos     25U                                            /*!< CoreDebug DHCSR: S_RESET_ST Position */

+#define CoreDebug_DHCSR_S_RESET_ST_Msk     (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos)        /*!< CoreDebug DHCSR: S_RESET_ST Mask */

+

+#define CoreDebug_DHCSR_S_RETIRE_ST_Pos    24U                                            /*!< CoreDebug DHCSR: S_RETIRE_ST Position */

+#define CoreDebug_DHCSR_S_RETIRE_ST_Msk    (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos)       /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */

+

+#define CoreDebug_DHCSR_S_LOCKUP_Pos       19U                                            /*!< CoreDebug DHCSR: S_LOCKUP Position */

+#define CoreDebug_DHCSR_S_LOCKUP_Msk       (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos)          /*!< CoreDebug DHCSR: S_LOCKUP Mask */

+

+#define CoreDebug_DHCSR_S_SLEEP_Pos        18U                                            /*!< CoreDebug DHCSR: S_SLEEP Position */

+#define CoreDebug_DHCSR_S_SLEEP_Msk        (1UL << CoreDebug_DHCSR_S_SLEEP_Pos)           /*!< CoreDebug DHCSR: S_SLEEP Mask */

+

+#define CoreDebug_DHCSR_S_HALT_Pos         17U                                            /*!< CoreDebug DHCSR: S_HALT Position */

+#define CoreDebug_DHCSR_S_HALT_Msk         (1UL << CoreDebug_DHCSR_S_HALT_Pos)            /*!< CoreDebug DHCSR: S_HALT Mask */

+

+#define CoreDebug_DHCSR_S_REGRDY_Pos       16U                                            /*!< CoreDebug DHCSR: S_REGRDY Position */

+#define CoreDebug_DHCSR_S_REGRDY_Msk       (1UL << CoreDebug_DHCSR_S_REGRDY_Pos)          /*!< CoreDebug DHCSR: S_REGRDY Mask */

+

+#define CoreDebug_DHCSR_C_MASKINTS_Pos      3U                                            /*!< CoreDebug DHCSR: C_MASKINTS Position */

+#define CoreDebug_DHCSR_C_MASKINTS_Msk     (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos)        /*!< CoreDebug DHCSR: C_MASKINTS Mask */

+

+#define CoreDebug_DHCSR_C_STEP_Pos          2U                                            /*!< CoreDebug DHCSR: C_STEP Position */

+#define CoreDebug_DHCSR_C_STEP_Msk         (1UL << CoreDebug_DHCSR_C_STEP_Pos)            /*!< CoreDebug DHCSR: C_STEP Mask */

+

+#define CoreDebug_DHCSR_C_HALT_Pos          1U                                            /*!< CoreDebug DHCSR: C_HALT Position */

+#define CoreDebug_DHCSR_C_HALT_Msk         (1UL << CoreDebug_DHCSR_C_HALT_Pos)            /*!< CoreDebug DHCSR: C_HALT Mask */

+

+#define CoreDebug_DHCSR_C_DEBUGEN_Pos       0U                                            /*!< CoreDebug DHCSR: C_DEBUGEN Position */

+#define CoreDebug_DHCSR_C_DEBUGEN_Msk      (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/)     /*!< CoreDebug DHCSR: C_DEBUGEN Mask */

+

+/* Debug Core Register Selector Register Definitions */

+#define CoreDebug_DCRSR_REGWnR_Pos         16U                                            /*!< CoreDebug DCRSR: REGWnR Position */

+#define CoreDebug_DCRSR_REGWnR_Msk         (1UL << CoreDebug_DCRSR_REGWnR_Pos)            /*!< CoreDebug DCRSR: REGWnR Mask */

+

+#define CoreDebug_DCRSR_REGSEL_Pos          0U                                            /*!< CoreDebug DCRSR: REGSEL Position */

+#define CoreDebug_DCRSR_REGSEL_Msk         (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/)     /*!< CoreDebug DCRSR: REGSEL Mask */

+

+/* Debug Exception and Monitor Control Register */

+#define CoreDebug_DEMCR_DWTENA_Pos         24U                                            /*!< CoreDebug DEMCR: DWTENA Position */

+#define CoreDebug_DEMCR_DWTENA_Msk         (1UL << CoreDebug_DEMCR_DWTENA_Pos)            /*!< CoreDebug DEMCR: DWTENA Mask */

+

+#define CoreDebug_DEMCR_VC_HARDERR_Pos     10U                                            /*!< CoreDebug DEMCR: VC_HARDERR Position */

+#define CoreDebug_DEMCR_VC_HARDERR_Msk     (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos)        /*!< CoreDebug DEMCR: VC_HARDERR Mask */

+

+#define CoreDebug_DEMCR_VC_CORERESET_Pos    0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */

+#define CoreDebug_DEMCR_VC_CORERESET_Msk   (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/)  /*!< CoreDebug DEMCR: VC_CORERESET Mask */

+

+/* Debug Authentication Control Register Definitions */

+#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos  3U                                            /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */

+#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos)    /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */

+

+#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos  2U                                            /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */

+#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos)    /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */

+

+#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos   1U                                            /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */

+#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk  (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos)     /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */

+

+#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos   0U                                            /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */

+#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk  (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */

+

+/* Debug Security Control and Status Register Definitions */

+#define CoreDebug_DSCSR_CDS_Pos            16U                                            /*!< CoreDebug DSCSR: CDS Position */

+#define CoreDebug_DSCSR_CDS_Msk            (1UL << CoreDebug_DSCSR_CDS_Pos)               /*!< CoreDebug DSCSR: CDS Mask */

+

+#define CoreDebug_DSCSR_SBRSEL_Pos          1U                                            /*!< CoreDebug DSCSR: SBRSEL Position */

+#define CoreDebug_DSCSR_SBRSEL_Msk         (1UL << CoreDebug_DSCSR_SBRSEL_Pos)            /*!< CoreDebug DSCSR: SBRSEL Mask */

+

+#define CoreDebug_DSCSR_SBRSELEN_Pos        0U                                            /*!< CoreDebug DSCSR: SBRSELEN Position */

+#define CoreDebug_DSCSR_SBRSELEN_Msk       (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/)      /*!< CoreDebug DSCSR: SBRSELEN Mask */

+

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+  #define SCS_BASE            (0xE000E000UL)                             /*!< System Control Space Base Address */

+  #define DWT_BASE            (0xE0001000UL)                             /*!< DWT Base Address */

+  #define TPI_BASE            (0xE0040000UL)                             /*!< TPI Base Address */

+  #define CoreDebug_BASE      (0xE000EDF0UL)                             /*!< Core Debug Base Address */

+  #define SysTick_BASE        (SCS_BASE +  0x0010UL)                     /*!< SysTick Base Address */

+  #define NVIC_BASE           (SCS_BASE +  0x0100UL)                     /*!< NVIC Base Address */

+  #define SCB_BASE            (SCS_BASE +  0x0D00UL)                     /*!< System Control Block Base Address */

+

+

+  #define SCB                 ((SCB_Type       *)     SCB_BASE         ) /*!< SCB configuration struct */

+  #define SysTick             ((SysTick_Type   *)     SysTick_BASE     ) /*!< SysTick configuration struct */

+  #define NVIC                ((NVIC_Type      *)     NVIC_BASE        ) /*!< NVIC configuration struct */

+  #define DWT                 ((DWT_Type       *)     DWT_BASE         ) /*!< DWT configuration struct */

+  #define TPI                 ((TPI_Type       *)     TPI_BASE         ) /*!< TPI configuration struct */

+  #define CoreDebug           ((CoreDebug_Type *)     CoreDebug_BASE   ) /*!< Core Debug configuration struct */

+

+  #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+    #define MPU_BASE          (SCS_BASE +  0x0D90UL)                     /*!< Memory Protection Unit */

+    #define MPU               ((MPU_Type       *)     MPU_BASE         ) /*!< Memory Protection Unit */

+  #endif

+

+  #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+    #define SAU_BASE          (SCS_BASE +  0x0DD0UL)                     /*!< Security Attribution Unit */

+    #define SAU               ((SAU_Type       *)     SAU_BASE         ) /*!< Security Attribution Unit */

+  #endif

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+  #define SCS_BASE_NS         (0xE002E000UL)                             /*!< System Control Space Base Address (non-secure address space) */

+  #define CoreDebug_BASE_NS   (0xE002EDF0UL)                             /*!< Core Debug Base Address           (non-secure address space) */

+  #define SysTick_BASE_NS     (SCS_BASE_NS +  0x0010UL)                  /*!< SysTick Base Address              (non-secure address space) */

+  #define NVIC_BASE_NS        (SCS_BASE_NS +  0x0100UL)                  /*!< NVIC Base Address                 (non-secure address space) */

+  #define SCB_BASE_NS         (SCS_BASE_NS +  0x0D00UL)                  /*!< System Control Block Base Address (non-secure address space) */

+

+  #define SCB_NS              ((SCB_Type       *)     SCB_BASE_NS      ) /*!< SCB configuration struct          (non-secure address space) */

+  #define SysTick_NS          ((SysTick_Type   *)     SysTick_BASE_NS  ) /*!< SysTick configuration struct      (non-secure address space) */

+  #define NVIC_NS             ((NVIC_Type      *)     NVIC_BASE_NS     ) /*!< NVIC configuration struct         (non-secure address space) */

+  #define CoreDebug_NS        ((CoreDebug_Type *)     CoreDebug_BASE_NS) /*!< Core Debug configuration struct   (non-secure address space) */

+

+  #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+    #define MPU_BASE_NS       (SCS_BASE_NS +  0x0D90UL)                  /*!< Memory Protection Unit            (non-secure address space) */

+    #define MPU_NS            ((MPU_Type       *)     MPU_BASE_NS      ) /*!< Memory Protection Unit            (non-secure address space) */

+  #endif

+

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+/*#define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping   not available for Cortex-M23 */

+/*#define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping   not available for Cortex-M23 */

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+  #define NVIC_GetActive              __NVIC_GetActive

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* Special LR values for Secure/Non-Secure call handling and exception handling                                               */

+

+/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS                   */ 

+#define FNC_RETURN                 (0xFEFFFFFFUL)     /* bit [0] ignored when processing a branch                             */

+

+/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */

+#define EXC_RETURN_PREFIX          (0xFF000000UL)     /* bits [31:24] set to indicate an EXC_RETURN value                     */

+#define EXC_RETURN_S               (0x00000040UL)     /* bit [6] stack used to push registers: 0=Non-secure 1=Secure          */

+#define EXC_RETURN_DCRS            (0x00000020UL)     /* bit [5] stacking rules for called registers: 0=skipped 1=saved       */

+#define EXC_RETURN_FTYPE           (0x00000010UL)     /* bit [4] allocate stack for floating-point context: 0=done 1=skipped  */

+#define EXC_RETURN_MODE            (0x00000008UL)     /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode      */

+#define EXC_RETURN_SPSEL           (0x00000002UL)     /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP           */

+#define EXC_RETURN_ES              (0x00000001UL)     /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */

+

+/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking                            */

+#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)  /* Value for processors with floating-point extension:                  */

+#define EXC_INTEGRITY_SIGNATURE     (0xFEFA125AUL)     /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE                   */

+#else 

+#define EXC_INTEGRITY_SIGNATURE     (0xFEFA125BUL)     /* Value for processors without floating-point extension                */

+#endif

+

+	

+/* Interrupt Priorities are WORD accessible only under Armv6-M                  */

+/* The following MACROS handle generation of the register offset and byte masks */

+#define _BIT_SHIFT(IRQn)         (  ((((uint32_t)(int32_t)(IRQn))         )      &  0x03UL) * 8UL)

+#define _SHP_IDX(IRQn)           ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >>    2UL)      )

+#define _IP_IDX(IRQn)            (   (((uint32_t)(int32_t)(IRQn))                >>    2UL)      )

+

+#define __NVIC_SetPriorityGrouping(X) (void)(X)

+#define __NVIC_GetPriorityGrouping()  (0U)

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt

+  \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   Get Interrupt Target State

+  \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+  \return             1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Target State

+  \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+                      1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |=  ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)));

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Clear Interrupt Target State

+  \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+                      1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)));

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IPR[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+  else

+  {

+    SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Encode Priority

+  \details Encodes the priority for an interrupt with the given priority group,

+           preemptive priority value, and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]     PriorityGroup  Used priority group.

+  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).

+  \param [in]       SubPriority  Subpriority value (starting from 0).

+  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().

+ */

+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  return (

+           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |

+           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))

+         );

+}

+

+

+/**

+  \brief   Decode Priority

+  \details Decodes an interrupt priority value with a given priority group to

+           preemptive priority value and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.

+  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().

+  \param [in]     PriorityGroup  Used priority group.

+  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).

+  \param [out]     pSubPriority  Subpriority value (starting from 0).

+ */

+__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);

+  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);

+}

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           VTOR must been relocated to SRAM before.

+           If VTOR is not present address 0 must be mapped to SRAM.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+#else

+  uint32_t *vectors = (uint32_t *)0x0U;

+#endif

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+#else

+  uint32_t *vectors = (uint32_t *)0x0U;

+#endif

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                 SCB_AIRCR_SYSRESETREQ_Msk);

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   Enable Interrupt (non-secure)

+  \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status (non-secure)

+  \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt (non-secure)

+  \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt (non-secure)

+  \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt (non-secure)

+  \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt (non-secure)

+  \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt (non-secure)

+  \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority (non-secure)

+  \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every non-secure processor exception.

+ */

+__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->IPR[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+  else

+  {

+    SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority (non-secure)

+  \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+#endif /*  defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+/* ##########################  MPU functions  #################################### */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+

+#include "mpu_armv8.h"

+

+#endif

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+    return 0U;           /* No FPU */

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##########################   SAU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SAUFunctions SAU Functions

+  \brief    Functions that configure the SAU.

+  @{

+ */

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+

+/**

+  \brief   Enable SAU

+  \details Enables the Security Attribution Unit (SAU).

+ */

+__STATIC_INLINE void TZ_SAU_Enable(void)

+{

+    SAU->CTRL |=  (SAU_CTRL_ENABLE_Msk);

+}

+

+

+

+/**

+  \brief   Disable SAU

+  \details Disables the Security Attribution Unit (SAU).

+ */

+__STATIC_INLINE void TZ_SAU_Disable(void)

+{

+    SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk);

+}

+

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+/*@} end of CMSIS_Core_SAUFunctions */

+

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   System Tick Configuration (non-secure)

+  \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>TZ_SysTick_Config_NS</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+

+ */

+__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                         /* Reload value impossible */

+  }

+

+  SysTick_NS->LOAD  = (uint32_t)(ticks - 1UL);                            /* set reload register */

+  TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick_NS->VAL   = 0UL;                                                /* Load the SysTick Counter Value */

+  SysTick_NS->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                      SysTick_CTRL_TICKINT_Msk   |

+                      SysTick_CTRL_ENABLE_Msk;                            /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                           /* Function successful */

+}

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM23_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm3.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm3.h
new file mode 100644
index 0000000..b0dfbd3
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm3.h
@@ -0,0 +1,1941 @@
+/**************************************************************************//**

+ * @file     core_cm3.h

+ * @brief    CMSIS Cortex-M3 Core Peripheral Access Layer Header File

+ * @version  V5.0.8

+ * @date     04. June 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_CM3_H_GENERIC

+#define __CORE_CM3_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup Cortex_M3

+  @{

+ */

+

+#include "cmsis_version.h"

+

+/*  CMSIS CM3 definitions */

+#define __CM3_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)              /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __CM3_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)               /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __CM3_CMSIS_VERSION       ((__CM3_CMSIS_VERSION_MAIN << 16U) | \

+                                    __CM3_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_M                (3U)                                   /*!< Cortex-M Core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    This core does not support an FPU at all

+*/

+#define __FPU_USED       0U

+

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined __ARM_PCS_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined __TI_VFP_SUPPORT__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM3_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_CM3_H_DEPENDANT

+#define __CORE_CM3_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __CM3_REV

+    #define __CM3_REV               0x0200U

+    #warning "__CM3_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MPU_PRESENT

+    #define __MPU_PRESENT             0U

+    #warning "__MPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          3U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group Cortex_M3 */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+  - Core Debug Register

+  - Core MPU Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:27;              /*!< bit:  0..26  Reserved */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+#define APSR_Q_Pos                         27U                                            /*!< APSR: Q Position */

+#define APSR_Q_Msk                         (1UL << APSR_Q_Pos)                            /*!< APSR: Q Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:1;               /*!< bit:      9  Reserved */

+    uint32_t ICI_IT_1:6;                 /*!< bit: 10..15  ICI/IT part 1 */

+    uint32_t _reserved1:8;               /*!< bit: 16..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit */

+    uint32_t ICI_IT_2:2;                 /*!< bit: 25..26  ICI/IT part 2 */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_Q_Pos                         27U                                            /*!< xPSR: Q Position */

+#define xPSR_Q_Msk                         (1UL << xPSR_Q_Pos)                            /*!< xPSR: Q Mask */

+

+#define xPSR_ICI_IT_2_Pos                  25U                                            /*!< xPSR: ICI/IT part 2 Position */

+#define xPSR_ICI_IT_2_Msk                  (3UL << xPSR_ICI_IT_2_Pos)                     /*!< xPSR: ICI/IT part 2 Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_ICI_IT_1_Pos                  10U                                            /*!< xPSR: ICI/IT part 1 Position */

+#define xPSR_ICI_IT_1_Msk                  (0x3FUL << xPSR_ICI_IT_1_Pos)                  /*!< xPSR: ICI/IT part 1 Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t nPRIV:1;                    /*!< bit:      0  Execution privilege in Thread mode */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */

+    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+#define CONTROL_nPRIV_Pos                   0U                                            /*!< CONTROL: nPRIV Position */

+#define CONTROL_nPRIV_Msk                  (1UL /*<< CONTROL_nPRIV_Pos*/)                 /*!< CONTROL: nPRIV Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[8U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[24U];

+  __IOM uint32_t ICER[8U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[24U];

+  __IOM uint32_t ISPR[8U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[24U];

+  __IOM uint32_t ICPR[8U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[24U];

+  __IOM uint32_t IABR[8U];               /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */

+        uint32_t RESERVED4[56U];

+  __IOM uint8_t  IP[240U];               /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */

+        uint32_t RESERVED5[644U];

+  __OM  uint32_t STIR;                   /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */

+}  NVIC_Type;

+

+/* Software Triggered Interrupt Register Definitions */

+#define NVIC_STIR_INTID_Pos                 0U                                         /*!< STIR: INTLINESNUM Position */

+#define NVIC_STIR_INTID_Msk                (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/)        /*!< STIR: INTLINESNUM Mask */

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+  __IOM uint32_t VTOR;                   /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+  __IOM uint8_t  SHP[12U];               /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+  __IOM uint32_t CFSR;                   /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */

+  __IOM uint32_t HFSR;                   /*!< Offset: 0x02C (R/W)  HardFault Status Register */

+  __IOM uint32_t DFSR;                   /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */

+  __IOM uint32_t MMFAR;                  /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */

+  __IOM uint32_t BFAR;                   /*!< Offset: 0x038 (R/W)  BusFault Address Register */

+  __IOM uint32_t AFSR;                   /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */

+  __IM  uint32_t PFR[2U];                /*!< Offset: 0x040 (R/ )  Processor Feature Register */

+  __IM  uint32_t DFR;                    /*!< Offset: 0x048 (R/ )  Debug Feature Register */

+  __IM  uint32_t ADR;                    /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */

+  __IM  uint32_t MMFR[4U];               /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */

+  __IM  uint32_t ISAR[5U];               /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */

+        uint32_t RESERVED0[5U];

+  __IOM uint32_t CPACR;                  /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */

+#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_RETTOBASE_Pos             11U                                            /*!< SCB ICSR: RETTOBASE Position */

+#define SCB_ICSR_RETTOBASE_Msk             (1UL << SCB_ICSR_RETTOBASE_Pos)                /*!< SCB ICSR: RETTOBASE Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+/* SCB Vector Table Offset Register Definitions */

+#if defined (__CM3_REV) && (__CM3_REV < 0x0201U)                   /* core r2p1 */

+#define SCB_VTOR_TBLBASE_Pos               29U                                            /*!< SCB VTOR: TBLBASE Position */

+#define SCB_VTOR_TBLBASE_Msk               (1UL << SCB_VTOR_TBLBASE_Pos)                  /*!< SCB VTOR: TBLBASE Mask */

+

+#define SCB_VTOR_TBLOFF_Pos                 7U                                            /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos)            /*!< SCB VTOR: TBLOFF Mask */

+#else

+#define SCB_VTOR_TBLOFF_Pos                 7U                                            /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos)           /*!< SCB VTOR: TBLOFF Mask */

+#endif

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_PRIGROUP_Pos              8U                                            /*!< SCB AIRCR: PRIGROUP Position */

+#define SCB_AIRCR_PRIGROUP_Msk             (7UL << SCB_AIRCR_PRIGROUP_Pos)                /*!< SCB AIRCR: PRIGROUP Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+#define SCB_AIRCR_VECTRESET_Pos             0U                                            /*!< SCB AIRCR: VECTRESET Position */

+#define SCB_AIRCR_VECTRESET_Msk            (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/)           /*!< SCB AIRCR: VECTRESET Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */

+#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */

+

+#define SCB_CCR_BFHFNMIGN_Pos               8U                                            /*!< SCB CCR: BFHFNMIGN Position */

+#define SCB_CCR_BFHFNMIGN_Msk              (1UL << SCB_CCR_BFHFNMIGN_Pos)                 /*!< SCB CCR: BFHFNMIGN Mask */

+

+#define SCB_CCR_DIV_0_TRP_Pos               4U                                            /*!< SCB CCR: DIV_0_TRP Position */

+#define SCB_CCR_DIV_0_TRP_Msk              (1UL << SCB_CCR_DIV_0_TRP_Pos)                 /*!< SCB CCR: DIV_0_TRP Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+#define SCB_CCR_USERSETMPEND_Pos            1U                                            /*!< SCB CCR: USERSETMPEND Position */

+#define SCB_CCR_USERSETMPEND_Msk           (1UL << SCB_CCR_USERSETMPEND_Pos)              /*!< SCB CCR: USERSETMPEND Mask */

+

+#define SCB_CCR_NONBASETHRDENA_Pos          0U                                            /*!< SCB CCR: NONBASETHRDENA Position */

+#define SCB_CCR_NONBASETHRDENA_Msk         (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/)        /*!< SCB CCR: NONBASETHRDENA Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_USGFAULTENA_Pos          18U                                            /*!< SCB SHCSR: USGFAULTENA Position */

+#define SCB_SHCSR_USGFAULTENA_Msk          (1UL << SCB_SHCSR_USGFAULTENA_Pos)             /*!< SCB SHCSR: USGFAULTENA Mask */

+

+#define SCB_SHCSR_BUSFAULTENA_Pos          17U                                            /*!< SCB SHCSR: BUSFAULTENA Position */

+#define SCB_SHCSR_BUSFAULTENA_Msk          (1UL << SCB_SHCSR_BUSFAULTENA_Pos)             /*!< SCB SHCSR: BUSFAULTENA Mask */

+

+#define SCB_SHCSR_MEMFAULTENA_Pos          16U                                            /*!< SCB SHCSR: MEMFAULTENA Position */

+#define SCB_SHCSR_MEMFAULTENA_Msk          (1UL << SCB_SHCSR_MEMFAULTENA_Pos)             /*!< SCB SHCSR: MEMFAULTENA Mask */

+

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+#define SCB_SHCSR_BUSFAULTPENDED_Pos       14U                                            /*!< SCB SHCSR: BUSFAULTPENDED Position */

+#define SCB_SHCSR_BUSFAULTPENDED_Msk       (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos)          /*!< SCB SHCSR: BUSFAULTPENDED Mask */

+

+#define SCB_SHCSR_MEMFAULTPENDED_Pos       13U                                            /*!< SCB SHCSR: MEMFAULTPENDED Position */

+#define SCB_SHCSR_MEMFAULTPENDED_Msk       (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos)          /*!< SCB SHCSR: MEMFAULTPENDED Mask */

+

+#define SCB_SHCSR_USGFAULTPENDED_Pos       12U                                            /*!< SCB SHCSR: USGFAULTPENDED Position */

+#define SCB_SHCSR_USGFAULTPENDED_Msk       (1UL << SCB_SHCSR_USGFAULTPENDED_Pos)          /*!< SCB SHCSR: USGFAULTPENDED Mask */

+

+#define SCB_SHCSR_SYSTICKACT_Pos           11U                                            /*!< SCB SHCSR: SYSTICKACT Position */

+#define SCB_SHCSR_SYSTICKACT_Msk           (1UL << SCB_SHCSR_SYSTICKACT_Pos)              /*!< SCB SHCSR: SYSTICKACT Mask */

+

+#define SCB_SHCSR_PENDSVACT_Pos            10U                                            /*!< SCB SHCSR: PENDSVACT Position */

+#define SCB_SHCSR_PENDSVACT_Msk            (1UL << SCB_SHCSR_PENDSVACT_Pos)               /*!< SCB SHCSR: PENDSVACT Mask */

+

+#define SCB_SHCSR_MONITORACT_Pos            8U                                            /*!< SCB SHCSR: MONITORACT Position */

+#define SCB_SHCSR_MONITORACT_Msk           (1UL << SCB_SHCSR_MONITORACT_Pos)              /*!< SCB SHCSR: MONITORACT Mask */

+

+#define SCB_SHCSR_SVCALLACT_Pos             7U                                            /*!< SCB SHCSR: SVCALLACT Position */

+#define SCB_SHCSR_SVCALLACT_Msk            (1UL << SCB_SHCSR_SVCALLACT_Pos)               /*!< SCB SHCSR: SVCALLACT Mask */

+

+#define SCB_SHCSR_USGFAULTACT_Pos           3U                                            /*!< SCB SHCSR: USGFAULTACT Position */

+#define SCB_SHCSR_USGFAULTACT_Msk          (1UL << SCB_SHCSR_USGFAULTACT_Pos)             /*!< SCB SHCSR: USGFAULTACT Mask */

+

+#define SCB_SHCSR_BUSFAULTACT_Pos           1U                                            /*!< SCB SHCSR: BUSFAULTACT Position */

+#define SCB_SHCSR_BUSFAULTACT_Msk          (1UL << SCB_SHCSR_BUSFAULTACT_Pos)             /*!< SCB SHCSR: BUSFAULTACT Mask */

+

+#define SCB_SHCSR_MEMFAULTACT_Pos           0U                                            /*!< SCB SHCSR: MEMFAULTACT Position */

+#define SCB_SHCSR_MEMFAULTACT_Msk          (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/)         /*!< SCB SHCSR: MEMFAULTACT Mask */

+

+/* SCB Configurable Fault Status Register Definitions */

+#define SCB_CFSR_USGFAULTSR_Pos            16U                                            /*!< SCB CFSR: Usage Fault Status Register Position */

+#define SCB_CFSR_USGFAULTSR_Msk            (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos)          /*!< SCB CFSR: Usage Fault Status Register Mask */

+

+#define SCB_CFSR_BUSFAULTSR_Pos             8U                                            /*!< SCB CFSR: Bus Fault Status Register Position */

+#define SCB_CFSR_BUSFAULTSR_Msk            (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos)            /*!< SCB CFSR: Bus Fault Status Register Mask */

+

+#define SCB_CFSR_MEMFAULTSR_Pos             0U                                            /*!< SCB CFSR: Memory Manage Fault Status Register Position */

+#define SCB_CFSR_MEMFAULTSR_Msk            (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/)        /*!< SCB CFSR: Memory Manage Fault Status Register Mask */

+

+/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_MMARVALID_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 7U)               /*!< SCB CFSR (MMFSR): MMARVALID Position */

+#define SCB_CFSR_MMARVALID_Msk             (1UL << SCB_CFSR_MMARVALID_Pos)                /*!< SCB CFSR (MMFSR): MMARVALID Mask */

+

+#define SCB_CFSR_MSTKERR_Pos               (SCB_SHCSR_MEMFAULTACT_Pos + 4U)               /*!< SCB CFSR (MMFSR): MSTKERR Position */

+#define SCB_CFSR_MSTKERR_Msk               (1UL << SCB_CFSR_MSTKERR_Pos)                  /*!< SCB CFSR (MMFSR): MSTKERR Mask */

+

+#define SCB_CFSR_MUNSTKERR_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 3U)               /*!< SCB CFSR (MMFSR): MUNSTKERR Position */

+#define SCB_CFSR_MUNSTKERR_Msk             (1UL << SCB_CFSR_MUNSTKERR_Pos)                /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */

+

+#define SCB_CFSR_DACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 1U)               /*!< SCB CFSR (MMFSR): DACCVIOL Position */

+#define SCB_CFSR_DACCVIOL_Msk              (1UL << SCB_CFSR_DACCVIOL_Pos)                 /*!< SCB CFSR (MMFSR): DACCVIOL Mask */

+

+#define SCB_CFSR_IACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 0U)               /*!< SCB CFSR (MMFSR): IACCVIOL Position */

+#define SCB_CFSR_IACCVIOL_Msk              (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/)             /*!< SCB CFSR (MMFSR): IACCVIOL Mask */

+

+/* BusFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_BFARVALID_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 7U)                  /*!< SCB CFSR (BFSR): BFARVALID Position */

+#define SCB_CFSR_BFARVALID_Msk            (1UL << SCB_CFSR_BFARVALID_Pos)                 /*!< SCB CFSR (BFSR): BFARVALID Mask */

+

+#define SCB_CFSR_STKERR_Pos               (SCB_CFSR_BUSFAULTSR_Pos + 4U)                  /*!< SCB CFSR (BFSR): STKERR Position */

+#define SCB_CFSR_STKERR_Msk               (1UL << SCB_CFSR_STKERR_Pos)                    /*!< SCB CFSR (BFSR): STKERR Mask */

+

+#define SCB_CFSR_UNSTKERR_Pos             (SCB_CFSR_BUSFAULTSR_Pos + 3U)                  /*!< SCB CFSR (BFSR): UNSTKERR Position */

+#define SCB_CFSR_UNSTKERR_Msk             (1UL << SCB_CFSR_UNSTKERR_Pos)                  /*!< SCB CFSR (BFSR): UNSTKERR Mask */

+

+#define SCB_CFSR_IMPRECISERR_Pos          (SCB_CFSR_BUSFAULTSR_Pos + 2U)                  /*!< SCB CFSR (BFSR): IMPRECISERR Position */

+#define SCB_CFSR_IMPRECISERR_Msk          (1UL << SCB_CFSR_IMPRECISERR_Pos)               /*!< SCB CFSR (BFSR): IMPRECISERR Mask */

+

+#define SCB_CFSR_PRECISERR_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 1U)                  /*!< SCB CFSR (BFSR): PRECISERR Position */

+#define SCB_CFSR_PRECISERR_Msk            (1UL << SCB_CFSR_PRECISERR_Pos)                 /*!< SCB CFSR (BFSR): PRECISERR Mask */

+

+#define SCB_CFSR_IBUSERR_Pos              (SCB_CFSR_BUSFAULTSR_Pos + 0U)                  /*!< SCB CFSR (BFSR): IBUSERR Position */

+#define SCB_CFSR_IBUSERR_Msk              (1UL << SCB_CFSR_IBUSERR_Pos)                   /*!< SCB CFSR (BFSR): IBUSERR Mask */

+

+/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_DIVBYZERO_Pos            (SCB_CFSR_USGFAULTSR_Pos + 9U)                  /*!< SCB CFSR (UFSR): DIVBYZERO Position */

+#define SCB_CFSR_DIVBYZERO_Msk            (1UL << SCB_CFSR_DIVBYZERO_Pos)                 /*!< SCB CFSR (UFSR): DIVBYZERO Mask */

+

+#define SCB_CFSR_UNALIGNED_Pos            (SCB_CFSR_USGFAULTSR_Pos + 8U)                  /*!< SCB CFSR (UFSR): UNALIGNED Position */

+#define SCB_CFSR_UNALIGNED_Msk            (1UL << SCB_CFSR_UNALIGNED_Pos)                 /*!< SCB CFSR (UFSR): UNALIGNED Mask */

+

+#define SCB_CFSR_NOCP_Pos                 (SCB_CFSR_USGFAULTSR_Pos + 3U)                  /*!< SCB CFSR (UFSR): NOCP Position */

+#define SCB_CFSR_NOCP_Msk                 (1UL << SCB_CFSR_NOCP_Pos)                      /*!< SCB CFSR (UFSR): NOCP Mask */

+

+#define SCB_CFSR_INVPC_Pos                (SCB_CFSR_USGFAULTSR_Pos + 2U)                  /*!< SCB CFSR (UFSR): INVPC Position */

+#define SCB_CFSR_INVPC_Msk                (1UL << SCB_CFSR_INVPC_Pos)                     /*!< SCB CFSR (UFSR): INVPC Mask */

+

+#define SCB_CFSR_INVSTATE_Pos             (SCB_CFSR_USGFAULTSR_Pos + 1U)                  /*!< SCB CFSR (UFSR): INVSTATE Position */

+#define SCB_CFSR_INVSTATE_Msk             (1UL << SCB_CFSR_INVSTATE_Pos)                  /*!< SCB CFSR (UFSR): INVSTATE Mask */

+

+#define SCB_CFSR_UNDEFINSTR_Pos           (SCB_CFSR_USGFAULTSR_Pos + 0U)                  /*!< SCB CFSR (UFSR): UNDEFINSTR Position */

+#define SCB_CFSR_UNDEFINSTR_Msk           (1UL << SCB_CFSR_UNDEFINSTR_Pos)                /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */

+

+/* SCB Hard Fault Status Register Definitions */

+#define SCB_HFSR_DEBUGEVT_Pos              31U                                            /*!< SCB HFSR: DEBUGEVT Position */

+#define SCB_HFSR_DEBUGEVT_Msk              (1UL << SCB_HFSR_DEBUGEVT_Pos)                 /*!< SCB HFSR: DEBUGEVT Mask */

+

+#define SCB_HFSR_FORCED_Pos                30U                                            /*!< SCB HFSR: FORCED Position */

+#define SCB_HFSR_FORCED_Msk                (1UL << SCB_HFSR_FORCED_Pos)                   /*!< SCB HFSR: FORCED Mask */

+

+#define SCB_HFSR_VECTTBL_Pos                1U                                            /*!< SCB HFSR: VECTTBL Position */

+#define SCB_HFSR_VECTTBL_Msk               (1UL << SCB_HFSR_VECTTBL_Pos)                  /*!< SCB HFSR: VECTTBL Mask */

+

+/* SCB Debug Fault Status Register Definitions */

+#define SCB_DFSR_EXTERNAL_Pos               4U                                            /*!< SCB DFSR: EXTERNAL Position */

+#define SCB_DFSR_EXTERNAL_Msk              (1UL << SCB_DFSR_EXTERNAL_Pos)                 /*!< SCB DFSR: EXTERNAL Mask */

+

+#define SCB_DFSR_VCATCH_Pos                 3U                                            /*!< SCB DFSR: VCATCH Position */

+#define SCB_DFSR_VCATCH_Msk                (1UL << SCB_DFSR_VCATCH_Pos)                   /*!< SCB DFSR: VCATCH Mask */

+

+#define SCB_DFSR_DWTTRAP_Pos                2U                                            /*!< SCB DFSR: DWTTRAP Position */

+#define SCB_DFSR_DWTTRAP_Msk               (1UL << SCB_DFSR_DWTTRAP_Pos)                  /*!< SCB DFSR: DWTTRAP Mask */

+

+#define SCB_DFSR_BKPT_Pos                   1U                                            /*!< SCB DFSR: BKPT Position */

+#define SCB_DFSR_BKPT_Msk                  (1UL << SCB_DFSR_BKPT_Pos)                     /*!< SCB DFSR: BKPT Mask */

+

+#define SCB_DFSR_HALTED_Pos                 0U                                            /*!< SCB DFSR: HALTED Position */

+#define SCB_DFSR_HALTED_Msk                (1UL /*<< SCB_DFSR_HALTED_Pos*/)               /*!< SCB DFSR: HALTED Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)

+  \brief    Type definitions for the System Control and ID Register not in the SCB

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control and ID Register not in the SCB.

+ */

+typedef struct

+{

+        uint32_t RESERVED0[1U];

+  __IM  uint32_t ICTR;                   /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */

+#if defined (__CM3_REV) && (__CM3_REV >= 0x200U)

+  __IOM uint32_t ACTLR;                  /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */

+#else

+        uint32_t RESERVED1[1U];

+#endif

+} SCnSCB_Type;

+

+/* Interrupt Controller Type Register Definitions */

+#define SCnSCB_ICTR_INTLINESNUM_Pos         0U                                         /*!< ICTR: INTLINESNUM Position */

+#define SCnSCB_ICTR_INTLINESNUM_Msk        (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/)  /*!< ICTR: INTLINESNUM Mask */

+

+/* Auxiliary Control Register Definitions */

+

+#define SCnSCB_ACTLR_DISFOLD_Pos            2U                                         /*!< ACTLR: DISFOLD Position */

+#define SCnSCB_ACTLR_DISFOLD_Msk           (1UL << SCnSCB_ACTLR_DISFOLD_Pos)           /*!< ACTLR: DISFOLD Mask */

+

+#define SCnSCB_ACTLR_DISDEFWBUF_Pos         1U                                         /*!< ACTLR: DISDEFWBUF Position */

+#define SCnSCB_ACTLR_DISDEFWBUF_Msk        (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos)        /*!< ACTLR: DISDEFWBUF Mask */

+

+#define SCnSCB_ACTLR_DISMCYCINT_Pos         0U                                         /*!< ACTLR: DISMCYCINT Position */

+#define SCnSCB_ACTLR_DISMCYCINT_Msk        (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/)    /*!< ACTLR: DISMCYCINT Mask */

+

+/*@} end of group CMSIS_SCnotSCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)

+  \brief    Type definitions for the Instrumentation Trace Macrocell (ITM)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).

+ */

+typedef struct

+{

+  __OM  union

+  {

+    __OM  uint8_t    u8;                 /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */

+    __OM  uint16_t   u16;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */

+    __OM  uint32_t   u32;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */

+  }  PORT [32U];                         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */

+        uint32_t RESERVED0[864U];

+  __IOM uint32_t TER;                    /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */

+        uint32_t RESERVED1[15U];

+  __IOM uint32_t TPR;                    /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */

+        uint32_t RESERVED2[15U];

+  __IOM uint32_t TCR;                    /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */

+        uint32_t RESERVED3[29U];

+  __OM  uint32_t IWR;                    /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */

+  __IM  uint32_t IRR;                    /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */

+  __IOM uint32_t IMCR;                   /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */

+        uint32_t RESERVED4[43U];

+  __OM  uint32_t LAR;                    /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */

+  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */

+        uint32_t RESERVED5[6U];

+  __IM  uint32_t PID4;                   /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */

+  __IM  uint32_t PID5;                   /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */

+  __IM  uint32_t PID6;                   /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */

+  __IM  uint32_t PID7;                   /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */

+  __IM  uint32_t PID0;                   /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */

+  __IM  uint32_t PID1;                   /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */

+  __IM  uint32_t PID2;                   /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */

+  __IM  uint32_t PID3;                   /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */

+  __IM  uint32_t CID0;                   /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */

+  __IM  uint32_t CID1;                   /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */

+  __IM  uint32_t CID2;                   /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */

+  __IM  uint32_t CID3;                   /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */

+} ITM_Type;

+

+/* ITM Trace Privilege Register Definitions */

+#define ITM_TPR_PRIVMASK_Pos                0U                                            /*!< ITM TPR: PRIVMASK Position */

+#define ITM_TPR_PRIVMASK_Msk               (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/)     /*!< ITM TPR: PRIVMASK Mask */

+

+/* ITM Trace Control Register Definitions */

+#define ITM_TCR_BUSY_Pos                   23U                                            /*!< ITM TCR: BUSY Position */

+#define ITM_TCR_BUSY_Msk                   (1UL << ITM_TCR_BUSY_Pos)                      /*!< ITM TCR: BUSY Mask */

+

+#define ITM_TCR_TraceBusID_Pos             16U                                            /*!< ITM TCR: ATBID Position */

+#define ITM_TCR_TraceBusID_Msk             (0x7FUL << ITM_TCR_TraceBusID_Pos)             /*!< ITM TCR: ATBID Mask */

+

+#define ITM_TCR_GTSFREQ_Pos                10U                                            /*!< ITM TCR: Global timestamp frequency Position */

+#define ITM_TCR_GTSFREQ_Msk                (3UL << ITM_TCR_GTSFREQ_Pos)                   /*!< ITM TCR: Global timestamp frequency Mask */

+

+#define ITM_TCR_TSPrescale_Pos              8U                                            /*!< ITM TCR: TSPrescale Position */

+#define ITM_TCR_TSPrescale_Msk             (3UL << ITM_TCR_TSPrescale_Pos)                /*!< ITM TCR: TSPrescale Mask */

+

+#define ITM_TCR_SWOENA_Pos                  4U                                            /*!< ITM TCR: SWOENA Position */

+#define ITM_TCR_SWOENA_Msk                 (1UL << ITM_TCR_SWOENA_Pos)                    /*!< ITM TCR: SWOENA Mask */

+

+#define ITM_TCR_DWTENA_Pos                  3U                                            /*!< ITM TCR: DWTENA Position */

+#define ITM_TCR_DWTENA_Msk                 (1UL << ITM_TCR_DWTENA_Pos)                    /*!< ITM TCR: DWTENA Mask */

+

+#define ITM_TCR_SYNCENA_Pos                 2U                                            /*!< ITM TCR: SYNCENA Position */

+#define ITM_TCR_SYNCENA_Msk                (1UL << ITM_TCR_SYNCENA_Pos)                   /*!< ITM TCR: SYNCENA Mask */

+

+#define ITM_TCR_TSENA_Pos                   1U                                            /*!< ITM TCR: TSENA Position */

+#define ITM_TCR_TSENA_Msk                  (1UL << ITM_TCR_TSENA_Pos)                     /*!< ITM TCR: TSENA Mask */

+

+#define ITM_TCR_ITMENA_Pos                  0U                                            /*!< ITM TCR: ITM Enable bit Position */

+#define ITM_TCR_ITMENA_Msk                 (1UL /*<< ITM_TCR_ITMENA_Pos*/)                /*!< ITM TCR: ITM Enable bit Mask */

+

+/* ITM Integration Write Register Definitions */

+#define ITM_IWR_ATVALIDM_Pos                0U                                            /*!< ITM IWR: ATVALIDM Position */

+#define ITM_IWR_ATVALIDM_Msk               (1UL /*<< ITM_IWR_ATVALIDM_Pos*/)              /*!< ITM IWR: ATVALIDM Mask */

+

+/* ITM Integration Read Register Definitions */

+#define ITM_IRR_ATREADYM_Pos                0U                                            /*!< ITM IRR: ATREADYM Position */

+#define ITM_IRR_ATREADYM_Msk               (1UL /*<< ITM_IRR_ATREADYM_Pos*/)              /*!< ITM IRR: ATREADYM Mask */

+

+/* ITM Integration Mode Control Register Definitions */

+#define ITM_IMCR_INTEGRATION_Pos            0U                                            /*!< ITM IMCR: INTEGRATION Position */

+#define ITM_IMCR_INTEGRATION_Msk           (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/)          /*!< ITM IMCR: INTEGRATION Mask */

+

+/* ITM Lock Status Register Definitions */

+#define ITM_LSR_ByteAcc_Pos                 2U                                            /*!< ITM LSR: ByteAcc Position */

+#define ITM_LSR_ByteAcc_Msk                (1UL << ITM_LSR_ByteAcc_Pos)                   /*!< ITM LSR: ByteAcc Mask */

+

+#define ITM_LSR_Access_Pos                  1U                                            /*!< ITM LSR: Access Position */

+#define ITM_LSR_Access_Msk                 (1UL << ITM_LSR_Access_Pos)                    /*!< ITM LSR: Access Mask */

+

+#define ITM_LSR_Present_Pos                 0U                                            /*!< ITM LSR: Present Position */

+#define ITM_LSR_Present_Msk                (1UL /*<< ITM_LSR_Present_Pos*/)               /*!< ITM LSR: Present Mask */

+

+/*@}*/ /* end of group CMSIS_ITM */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)

+  \brief    Type definitions for the Data Watchpoint and Trace (DWT)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Data Watchpoint and Trace Register (DWT).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  Control Register */

+  __IOM uint32_t CYCCNT;                 /*!< Offset: 0x004 (R/W)  Cycle Count Register */

+  __IOM uint32_t CPICNT;                 /*!< Offset: 0x008 (R/W)  CPI Count Register */

+  __IOM uint32_t EXCCNT;                 /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */

+  __IOM uint32_t SLEEPCNT;               /*!< Offset: 0x010 (R/W)  Sleep Count Register */

+  __IOM uint32_t LSUCNT;                 /*!< Offset: 0x014 (R/W)  LSU Count Register */

+  __IOM uint32_t FOLDCNT;                /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */

+  __IM  uint32_t PCSR;                   /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */

+  __IOM uint32_t COMP0;                  /*!< Offset: 0x020 (R/W)  Comparator Register 0 */

+  __IOM uint32_t MASK0;                  /*!< Offset: 0x024 (R/W)  Mask Register 0 */

+  __IOM uint32_t FUNCTION0;              /*!< Offset: 0x028 (R/W)  Function Register 0 */

+        uint32_t RESERVED0[1U];

+  __IOM uint32_t COMP1;                  /*!< Offset: 0x030 (R/W)  Comparator Register 1 */

+  __IOM uint32_t MASK1;                  /*!< Offset: 0x034 (R/W)  Mask Register 1 */

+  __IOM uint32_t FUNCTION1;              /*!< Offset: 0x038 (R/W)  Function Register 1 */

+        uint32_t RESERVED1[1U];

+  __IOM uint32_t COMP2;                  /*!< Offset: 0x040 (R/W)  Comparator Register 2 */

+  __IOM uint32_t MASK2;                  /*!< Offset: 0x044 (R/W)  Mask Register 2 */

+  __IOM uint32_t FUNCTION2;              /*!< Offset: 0x048 (R/W)  Function Register 2 */

+        uint32_t RESERVED2[1U];

+  __IOM uint32_t COMP3;                  /*!< Offset: 0x050 (R/W)  Comparator Register 3 */

+  __IOM uint32_t MASK3;                  /*!< Offset: 0x054 (R/W)  Mask Register 3 */

+  __IOM uint32_t FUNCTION3;              /*!< Offset: 0x058 (R/W)  Function Register 3 */

+} DWT_Type;

+

+/* DWT Control Register Definitions */

+#define DWT_CTRL_NUMCOMP_Pos               28U                                         /*!< DWT CTRL: NUMCOMP Position */

+#define DWT_CTRL_NUMCOMP_Msk               (0xFUL << DWT_CTRL_NUMCOMP_Pos)             /*!< DWT CTRL: NUMCOMP Mask */

+

+#define DWT_CTRL_NOTRCPKT_Pos              27U                                         /*!< DWT CTRL: NOTRCPKT Position */

+#define DWT_CTRL_NOTRCPKT_Msk              (0x1UL << DWT_CTRL_NOTRCPKT_Pos)            /*!< DWT CTRL: NOTRCPKT Mask */

+

+#define DWT_CTRL_NOEXTTRIG_Pos             26U                                         /*!< DWT CTRL: NOEXTTRIG Position */

+#define DWT_CTRL_NOEXTTRIG_Msk             (0x1UL << DWT_CTRL_NOEXTTRIG_Pos)           /*!< DWT CTRL: NOEXTTRIG Mask */

+

+#define DWT_CTRL_NOCYCCNT_Pos              25U                                         /*!< DWT CTRL: NOCYCCNT Position */

+#define DWT_CTRL_NOCYCCNT_Msk              (0x1UL << DWT_CTRL_NOCYCCNT_Pos)            /*!< DWT CTRL: NOCYCCNT Mask */

+

+#define DWT_CTRL_NOPRFCNT_Pos              24U                                         /*!< DWT CTRL: NOPRFCNT Position */

+#define DWT_CTRL_NOPRFCNT_Msk              (0x1UL << DWT_CTRL_NOPRFCNT_Pos)            /*!< DWT CTRL: NOPRFCNT Mask */

+

+#define DWT_CTRL_CYCEVTENA_Pos             22U                                         /*!< DWT CTRL: CYCEVTENA Position */

+#define DWT_CTRL_CYCEVTENA_Msk             (0x1UL << DWT_CTRL_CYCEVTENA_Pos)           /*!< DWT CTRL: CYCEVTENA Mask */

+

+#define DWT_CTRL_FOLDEVTENA_Pos            21U                                         /*!< DWT CTRL: FOLDEVTENA Position */

+#define DWT_CTRL_FOLDEVTENA_Msk            (0x1UL << DWT_CTRL_FOLDEVTENA_Pos)          /*!< DWT CTRL: FOLDEVTENA Mask */

+

+#define DWT_CTRL_LSUEVTENA_Pos             20U                                         /*!< DWT CTRL: LSUEVTENA Position */

+#define DWT_CTRL_LSUEVTENA_Msk             (0x1UL << DWT_CTRL_LSUEVTENA_Pos)           /*!< DWT CTRL: LSUEVTENA Mask */

+

+#define DWT_CTRL_SLEEPEVTENA_Pos           19U                                         /*!< DWT CTRL: SLEEPEVTENA Position */

+#define DWT_CTRL_SLEEPEVTENA_Msk           (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos)         /*!< DWT CTRL: SLEEPEVTENA Mask */

+

+#define DWT_CTRL_EXCEVTENA_Pos             18U                                         /*!< DWT CTRL: EXCEVTENA Position */

+#define DWT_CTRL_EXCEVTENA_Msk             (0x1UL << DWT_CTRL_EXCEVTENA_Pos)           /*!< DWT CTRL: EXCEVTENA Mask */

+

+#define DWT_CTRL_CPIEVTENA_Pos             17U                                         /*!< DWT CTRL: CPIEVTENA Position */

+#define DWT_CTRL_CPIEVTENA_Msk             (0x1UL << DWT_CTRL_CPIEVTENA_Pos)           /*!< DWT CTRL: CPIEVTENA Mask */

+

+#define DWT_CTRL_EXCTRCENA_Pos             16U                                         /*!< DWT CTRL: EXCTRCENA Position */

+#define DWT_CTRL_EXCTRCENA_Msk             (0x1UL << DWT_CTRL_EXCTRCENA_Pos)           /*!< DWT CTRL: EXCTRCENA Mask */

+

+#define DWT_CTRL_PCSAMPLENA_Pos            12U                                         /*!< DWT CTRL: PCSAMPLENA Position */

+#define DWT_CTRL_PCSAMPLENA_Msk            (0x1UL << DWT_CTRL_PCSAMPLENA_Pos)          /*!< DWT CTRL: PCSAMPLENA Mask */

+

+#define DWT_CTRL_SYNCTAP_Pos               10U                                         /*!< DWT CTRL: SYNCTAP Position */

+#define DWT_CTRL_SYNCTAP_Msk               (0x3UL << DWT_CTRL_SYNCTAP_Pos)             /*!< DWT CTRL: SYNCTAP Mask */

+

+#define DWT_CTRL_CYCTAP_Pos                 9U                                         /*!< DWT CTRL: CYCTAP Position */

+#define DWT_CTRL_CYCTAP_Msk                (0x1UL << DWT_CTRL_CYCTAP_Pos)              /*!< DWT CTRL: CYCTAP Mask */

+

+#define DWT_CTRL_POSTINIT_Pos               5U                                         /*!< DWT CTRL: POSTINIT Position */

+#define DWT_CTRL_POSTINIT_Msk              (0xFUL << DWT_CTRL_POSTINIT_Pos)            /*!< DWT CTRL: POSTINIT Mask */

+

+#define DWT_CTRL_POSTPRESET_Pos             1U                                         /*!< DWT CTRL: POSTPRESET Position */

+#define DWT_CTRL_POSTPRESET_Msk            (0xFUL << DWT_CTRL_POSTPRESET_Pos)          /*!< DWT CTRL: POSTPRESET Mask */

+

+#define DWT_CTRL_CYCCNTENA_Pos              0U                                         /*!< DWT CTRL: CYCCNTENA Position */

+#define DWT_CTRL_CYCCNTENA_Msk             (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/)       /*!< DWT CTRL: CYCCNTENA Mask */

+

+/* DWT CPI Count Register Definitions */

+#define DWT_CPICNT_CPICNT_Pos               0U                                         /*!< DWT CPICNT: CPICNT Position */

+#define DWT_CPICNT_CPICNT_Msk              (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/)       /*!< DWT CPICNT: CPICNT Mask */

+

+/* DWT Exception Overhead Count Register Definitions */

+#define DWT_EXCCNT_EXCCNT_Pos               0U                                         /*!< DWT EXCCNT: EXCCNT Position */

+#define DWT_EXCCNT_EXCCNT_Msk              (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/)       /*!< DWT EXCCNT: EXCCNT Mask */

+

+/* DWT Sleep Count Register Definitions */

+#define DWT_SLEEPCNT_SLEEPCNT_Pos           0U                                         /*!< DWT SLEEPCNT: SLEEPCNT Position */

+#define DWT_SLEEPCNT_SLEEPCNT_Msk          (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/)   /*!< DWT SLEEPCNT: SLEEPCNT Mask */

+

+/* DWT LSU Count Register Definitions */

+#define DWT_LSUCNT_LSUCNT_Pos               0U                                         /*!< DWT LSUCNT: LSUCNT Position */

+#define DWT_LSUCNT_LSUCNT_Msk              (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/)       /*!< DWT LSUCNT: LSUCNT Mask */

+

+/* DWT Folded-instruction Count Register Definitions */

+#define DWT_FOLDCNT_FOLDCNT_Pos             0U                                         /*!< DWT FOLDCNT: FOLDCNT Position */

+#define DWT_FOLDCNT_FOLDCNT_Msk            (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/)     /*!< DWT FOLDCNT: FOLDCNT Mask */

+

+/* DWT Comparator Mask Register Definitions */

+#define DWT_MASK_MASK_Pos                   0U                                         /*!< DWT MASK: MASK Position */

+#define DWT_MASK_MASK_Msk                  (0x1FUL /*<< DWT_MASK_MASK_Pos*/)           /*!< DWT MASK: MASK Mask */

+

+/* DWT Comparator Function Register Definitions */

+#define DWT_FUNCTION_MATCHED_Pos           24U                                         /*!< DWT FUNCTION: MATCHED Position */

+#define DWT_FUNCTION_MATCHED_Msk           (0x1UL << DWT_FUNCTION_MATCHED_Pos)         /*!< DWT FUNCTION: MATCHED Mask */

+

+#define DWT_FUNCTION_DATAVADDR1_Pos        16U                                         /*!< DWT FUNCTION: DATAVADDR1 Position */

+#define DWT_FUNCTION_DATAVADDR1_Msk        (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos)      /*!< DWT FUNCTION: DATAVADDR1 Mask */

+

+#define DWT_FUNCTION_DATAVADDR0_Pos        12U                                         /*!< DWT FUNCTION: DATAVADDR0 Position */

+#define DWT_FUNCTION_DATAVADDR0_Msk        (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos)      /*!< DWT FUNCTION: DATAVADDR0 Mask */

+

+#define DWT_FUNCTION_DATAVSIZE_Pos         10U                                         /*!< DWT FUNCTION: DATAVSIZE Position */

+#define DWT_FUNCTION_DATAVSIZE_Msk         (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos)       /*!< DWT FUNCTION: DATAVSIZE Mask */

+

+#define DWT_FUNCTION_LNK1ENA_Pos            9U                                         /*!< DWT FUNCTION: LNK1ENA Position */

+#define DWT_FUNCTION_LNK1ENA_Msk           (0x1UL << DWT_FUNCTION_LNK1ENA_Pos)         /*!< DWT FUNCTION: LNK1ENA Mask */

+

+#define DWT_FUNCTION_DATAVMATCH_Pos         8U                                         /*!< DWT FUNCTION: DATAVMATCH Position */

+#define DWT_FUNCTION_DATAVMATCH_Msk        (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos)      /*!< DWT FUNCTION: DATAVMATCH Mask */

+

+#define DWT_FUNCTION_CYCMATCH_Pos           7U                                         /*!< DWT FUNCTION: CYCMATCH Position */

+#define DWT_FUNCTION_CYCMATCH_Msk          (0x1UL << DWT_FUNCTION_CYCMATCH_Pos)        /*!< DWT FUNCTION: CYCMATCH Mask */

+

+#define DWT_FUNCTION_EMITRANGE_Pos          5U                                         /*!< DWT FUNCTION: EMITRANGE Position */

+#define DWT_FUNCTION_EMITRANGE_Msk         (0x1UL << DWT_FUNCTION_EMITRANGE_Pos)       /*!< DWT FUNCTION: EMITRANGE Mask */

+

+#define DWT_FUNCTION_FUNCTION_Pos           0U                                         /*!< DWT FUNCTION: FUNCTION Position */

+#define DWT_FUNCTION_FUNCTION_Msk          (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/)    /*!< DWT FUNCTION: FUNCTION Mask */

+

+/*@}*/ /* end of group CMSIS_DWT */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_TPI     Trace Port Interface (TPI)

+  \brief    Type definitions for the Trace Port Interface (TPI)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Trace Port Interface Register (TPI).

+ */

+typedef struct

+{

+  __IM  uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */

+  __IOM uint32_t CSPSR;                  /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */

+        uint32_t RESERVED0[2U];

+  __IOM uint32_t ACPR;                   /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */

+        uint32_t RESERVED1[55U];

+  __IOM uint32_t SPPR;                   /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */

+        uint32_t RESERVED2[131U];

+  __IM  uint32_t FFSR;                   /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */

+  __IOM uint32_t FFCR;                   /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */

+  __IM  uint32_t FSCR;                   /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */

+        uint32_t RESERVED3[759U];

+  __IM  uint32_t TRIGGER;                /*!< Offset: 0xEE8 (R/ )  TRIGGER Register */

+  __IM  uint32_t FIFO0;                  /*!< Offset: 0xEEC (R/ )  Integration ETM Data */

+  __IM  uint32_t ITATBCTR2;              /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */

+        uint32_t RESERVED4[1U];

+  __IM  uint32_t ITATBCTR0;              /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */

+  __IM  uint32_t FIFO1;                  /*!< Offset: 0xEFC (R/ )  Integration ITM Data */

+  __IOM uint32_t ITCTRL;                 /*!< Offset: 0xF00 (R/W)  Integration Mode Control */

+        uint32_t RESERVED5[39U];

+  __IOM uint32_t CLAIMSET;               /*!< Offset: 0xFA0 (R/W)  Claim tag set */

+  __IOM uint32_t CLAIMCLR;               /*!< Offset: 0xFA4 (R/W)  Claim tag clear */

+        uint32_t RESERVED7[8U];

+  __IM  uint32_t DEVID;                  /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */

+  __IM  uint32_t DEVTYPE;                /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */

+} TPI_Type;

+

+/* TPI Asynchronous Clock Prescaler Register Definitions */

+#define TPI_ACPR_PRESCALER_Pos              0U                                         /*!< TPI ACPR: PRESCALER Position */

+#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< TPI ACPR: PRESCALER Mask */

+

+/* TPI Selected Pin Protocol Register Definitions */

+#define TPI_SPPR_TXMODE_Pos                 0U                                         /*!< TPI SPPR: TXMODE Position */

+#define TPI_SPPR_TXMODE_Msk                (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/)          /*!< TPI SPPR: TXMODE Mask */

+

+/* TPI Formatter and Flush Status Register Definitions */

+#define TPI_FFSR_FtNonStop_Pos              3U                                         /*!< TPI FFSR: FtNonStop Position */

+#define TPI_FFSR_FtNonStop_Msk             (0x1UL << TPI_FFSR_FtNonStop_Pos)           /*!< TPI FFSR: FtNonStop Mask */

+

+#define TPI_FFSR_TCPresent_Pos              2U                                         /*!< TPI FFSR: TCPresent Position */

+#define TPI_FFSR_TCPresent_Msk             (0x1UL << TPI_FFSR_TCPresent_Pos)           /*!< TPI FFSR: TCPresent Mask */

+

+#define TPI_FFSR_FtStopped_Pos              1U                                         /*!< TPI FFSR: FtStopped Position */

+#define TPI_FFSR_FtStopped_Msk             (0x1UL << TPI_FFSR_FtStopped_Pos)           /*!< TPI FFSR: FtStopped Mask */

+

+#define TPI_FFSR_FlInProg_Pos               0U                                         /*!< TPI FFSR: FlInProg Position */

+#define TPI_FFSR_FlInProg_Msk              (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/)        /*!< TPI FFSR: FlInProg Mask */

+

+/* TPI Formatter and Flush Control Register Definitions */

+#define TPI_FFCR_TrigIn_Pos                 8U                                         /*!< TPI FFCR: TrigIn Position */

+#define TPI_FFCR_TrigIn_Msk                (0x1UL << TPI_FFCR_TrigIn_Pos)              /*!< TPI FFCR: TrigIn Mask */

+

+#define TPI_FFCR_EnFCont_Pos                1U                                         /*!< TPI FFCR: EnFCont Position */

+#define TPI_FFCR_EnFCont_Msk               (0x1UL << TPI_FFCR_EnFCont_Pos)             /*!< TPI FFCR: EnFCont Mask */

+

+/* TPI TRIGGER Register Definitions */

+#define TPI_TRIGGER_TRIGGER_Pos             0U                                         /*!< TPI TRIGGER: TRIGGER Position */

+#define TPI_TRIGGER_TRIGGER_Msk            (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/)      /*!< TPI TRIGGER: TRIGGER Mask */

+

+/* TPI Integration ETM Data Register Definitions (FIFO0) */

+#define TPI_FIFO0_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO0: ITM_ATVALID Position */

+#define TPI_FIFO0_ITM_ATVALID_Msk          (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos)        /*!< TPI FIFO0: ITM_ATVALID Mask */

+

+#define TPI_FIFO0_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO0: ITM_bytecount Position */

+#define TPI_FIFO0_ITM_bytecount_Msk        (0x3UL << TPI_FIFO0_ITM_bytecount_Pos)      /*!< TPI FIFO0: ITM_bytecount Mask */

+

+#define TPI_FIFO0_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO0: ETM_ATVALID Position */

+#define TPI_FIFO0_ETM_ATVALID_Msk          (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos)        /*!< TPI FIFO0: ETM_ATVALID Mask */

+

+#define TPI_FIFO0_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO0: ETM_bytecount Position */

+#define TPI_FIFO0_ETM_bytecount_Msk        (0x3UL << TPI_FIFO0_ETM_bytecount_Pos)      /*!< TPI FIFO0: ETM_bytecount Mask */

+

+#define TPI_FIFO0_ETM2_Pos                 16U                                         /*!< TPI FIFO0: ETM2 Position */

+#define TPI_FIFO0_ETM2_Msk                 (0xFFUL << TPI_FIFO0_ETM2_Pos)              /*!< TPI FIFO0: ETM2 Mask */

+

+#define TPI_FIFO0_ETM1_Pos                  8U                                         /*!< TPI FIFO0: ETM1 Position */

+#define TPI_FIFO0_ETM1_Msk                 (0xFFUL << TPI_FIFO0_ETM1_Pos)              /*!< TPI FIFO0: ETM1 Mask */

+

+#define TPI_FIFO0_ETM0_Pos                  0U                                         /*!< TPI FIFO0: ETM0 Position */

+#define TPI_FIFO0_ETM0_Msk                 (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/)          /*!< TPI FIFO0: ETM0 Mask */

+

+/* TPI ITATBCTR2 Register Definitions */

+#define TPI_ITATBCTR2_ATREADY2_Pos          0U                                         /*!< TPI ITATBCTR2: ATREADY2 Position */

+#define TPI_ITATBCTR2_ATREADY2_Msk         (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/)   /*!< TPI ITATBCTR2: ATREADY2 Mask */

+

+#define TPI_ITATBCTR2_ATREADY1_Pos          0U                                         /*!< TPI ITATBCTR2: ATREADY1 Position */

+#define TPI_ITATBCTR2_ATREADY1_Msk         (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/)   /*!< TPI ITATBCTR2: ATREADY1 Mask */

+

+/* TPI Integration ITM Data Register Definitions (FIFO1) */

+#define TPI_FIFO1_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO1: ITM_ATVALID Position */

+#define TPI_FIFO1_ITM_ATVALID_Msk          (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos)        /*!< TPI FIFO1: ITM_ATVALID Mask */

+

+#define TPI_FIFO1_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO1: ITM_bytecount Position */

+#define TPI_FIFO1_ITM_bytecount_Msk        (0x3UL << TPI_FIFO1_ITM_bytecount_Pos)      /*!< TPI FIFO1: ITM_bytecount Mask */

+

+#define TPI_FIFO1_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO1: ETM_ATVALID Position */

+#define TPI_FIFO1_ETM_ATVALID_Msk          (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos)        /*!< TPI FIFO1: ETM_ATVALID Mask */

+

+#define TPI_FIFO1_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO1: ETM_bytecount Position */

+#define TPI_FIFO1_ETM_bytecount_Msk        (0x3UL << TPI_FIFO1_ETM_bytecount_Pos)      /*!< TPI FIFO1: ETM_bytecount Mask */

+

+#define TPI_FIFO1_ITM2_Pos                 16U                                         /*!< TPI FIFO1: ITM2 Position */

+#define TPI_FIFO1_ITM2_Msk                 (0xFFUL << TPI_FIFO1_ITM2_Pos)              /*!< TPI FIFO1: ITM2 Mask */

+

+#define TPI_FIFO1_ITM1_Pos                  8U                                         /*!< TPI FIFO1: ITM1 Position */

+#define TPI_FIFO1_ITM1_Msk                 (0xFFUL << TPI_FIFO1_ITM1_Pos)              /*!< TPI FIFO1: ITM1 Mask */

+

+#define TPI_FIFO1_ITM0_Pos                  0U                                         /*!< TPI FIFO1: ITM0 Position */

+#define TPI_FIFO1_ITM0_Msk                 (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/)          /*!< TPI FIFO1: ITM0 Mask */

+

+/* TPI ITATBCTR0 Register Definitions */

+#define TPI_ITATBCTR0_ATREADY2_Pos          0U                                         /*!< TPI ITATBCTR0: ATREADY2 Position */

+#define TPI_ITATBCTR0_ATREADY2_Msk         (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/)   /*!< TPI ITATBCTR0: ATREADY2 Mask */

+

+#define TPI_ITATBCTR0_ATREADY1_Pos          0U                                         /*!< TPI ITATBCTR0: ATREADY1 Position */

+#define TPI_ITATBCTR0_ATREADY1_Msk         (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/)   /*!< TPI ITATBCTR0: ATREADY1 Mask */

+

+/* TPI Integration Mode Control Register Definitions */

+#define TPI_ITCTRL_Mode_Pos                 0U                                         /*!< TPI ITCTRL: Mode Position */

+#define TPI_ITCTRL_Mode_Msk                (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */

+

+/* TPI DEVID Register Definitions */

+#define TPI_DEVID_NRZVALID_Pos             11U                                         /*!< TPI DEVID: NRZVALID Position */

+#define TPI_DEVID_NRZVALID_Msk             (0x1UL << TPI_DEVID_NRZVALID_Pos)           /*!< TPI DEVID: NRZVALID Mask */

+

+#define TPI_DEVID_MANCVALID_Pos            10U                                         /*!< TPI DEVID: MANCVALID Position */

+#define TPI_DEVID_MANCVALID_Msk            (0x1UL << TPI_DEVID_MANCVALID_Pos)          /*!< TPI DEVID: MANCVALID Mask */

+

+#define TPI_DEVID_PTINVALID_Pos             9U                                         /*!< TPI DEVID: PTINVALID Position */

+#define TPI_DEVID_PTINVALID_Msk            (0x1UL << TPI_DEVID_PTINVALID_Pos)          /*!< TPI DEVID: PTINVALID Mask */

+

+#define TPI_DEVID_MinBufSz_Pos              6U                                         /*!< TPI DEVID: MinBufSz Position */

+#define TPI_DEVID_MinBufSz_Msk             (0x7UL << TPI_DEVID_MinBufSz_Pos)           /*!< TPI DEVID: MinBufSz Mask */

+

+#define TPI_DEVID_AsynClkIn_Pos             5U                                         /*!< TPI DEVID: AsynClkIn Position */

+#define TPI_DEVID_AsynClkIn_Msk            (0x1UL << TPI_DEVID_AsynClkIn_Pos)          /*!< TPI DEVID: AsynClkIn Mask */

+

+#define TPI_DEVID_NrTraceInput_Pos          0U                                         /*!< TPI DEVID: NrTraceInput Position */

+#define TPI_DEVID_NrTraceInput_Msk         (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */

+

+/* TPI DEVTYPE Register Definitions */

+#define TPI_DEVTYPE_SubType_Pos             4U                                         /*!< TPI DEVTYPE: SubType Position */

+#define TPI_DEVTYPE_SubType_Msk            (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/)      /*!< TPI DEVTYPE: SubType Mask */

+

+#define TPI_DEVTYPE_MajorType_Pos           0U                                         /*!< TPI DEVTYPE: MajorType Position */

+#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */

+

+/*@}*/ /* end of group CMSIS_TPI */

+

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_MPU     Memory Protection Unit (MPU)

+  \brief    Type definitions for the Memory Protection Unit (MPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Memory Protection Unit (MPU).

+ */

+typedef struct

+{

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x000 (R/ )  MPU Type Register */

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x004 (R/W)  MPU Control Register */

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */

+  __IOM uint32_t RASR;                   /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A1;                /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */

+  __IOM uint32_t RASR_A1;                /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A2;                /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */

+  __IOM uint32_t RASR_A2;                /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A3;                /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */

+  __IOM uint32_t RASR_A3;                /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */

+} MPU_Type;

+

+#define MPU_TYPE_RALIASES                  4U

+

+/* MPU Type Register Definitions */

+#define MPU_TYPE_IREGION_Pos               16U                                            /*!< MPU TYPE: IREGION Position */

+#define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */

+

+#define MPU_TYPE_DREGION_Pos                8U                                            /*!< MPU TYPE: DREGION Position */

+#define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */

+

+#define MPU_TYPE_SEPARATE_Pos               0U                                            /*!< MPU TYPE: SEPARATE Position */

+#define MPU_TYPE_SEPARATE_Msk              (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)             /*!< MPU TYPE: SEPARATE Mask */

+

+/* MPU Control Register Definitions */

+#define MPU_CTRL_PRIVDEFENA_Pos             2U                                            /*!< MPU CTRL: PRIVDEFENA Position */

+#define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */

+

+#define MPU_CTRL_HFNMIENA_Pos               1U                                            /*!< MPU CTRL: HFNMIENA Position */

+#define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */

+

+#define MPU_CTRL_ENABLE_Pos                 0U                                            /*!< MPU CTRL: ENABLE Position */

+#define MPU_CTRL_ENABLE_Msk                (1UL /*<< MPU_CTRL_ENABLE_Pos*/)               /*!< MPU CTRL: ENABLE Mask */

+

+/* MPU Region Number Register Definitions */

+#define MPU_RNR_REGION_Pos                  0U                                            /*!< MPU RNR: REGION Position */

+#define MPU_RNR_REGION_Msk                 (0xFFUL /*<< MPU_RNR_REGION_Pos*/)             /*!< MPU RNR: REGION Mask */

+

+/* MPU Region Base Address Register Definitions */

+#define MPU_RBAR_ADDR_Pos                   5U                                            /*!< MPU RBAR: ADDR Position */

+#define MPU_RBAR_ADDR_Msk                  (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos)             /*!< MPU RBAR: ADDR Mask */

+

+#define MPU_RBAR_VALID_Pos                  4U                                            /*!< MPU RBAR: VALID Position */

+#define MPU_RBAR_VALID_Msk                 (1UL << MPU_RBAR_VALID_Pos)                    /*!< MPU RBAR: VALID Mask */

+

+#define MPU_RBAR_REGION_Pos                 0U                                            /*!< MPU RBAR: REGION Position */

+#define MPU_RBAR_REGION_Msk                (0xFUL /*<< MPU_RBAR_REGION_Pos*/)             /*!< MPU RBAR: REGION Mask */

+

+/* MPU Region Attribute and Size Register Definitions */

+#define MPU_RASR_ATTRS_Pos                 16U                                            /*!< MPU RASR: MPU Region Attribute field Position */

+#define MPU_RASR_ATTRS_Msk                 (0xFFFFUL << MPU_RASR_ATTRS_Pos)               /*!< MPU RASR: MPU Region Attribute field Mask */

+

+#define MPU_RASR_XN_Pos                    28U                                            /*!< MPU RASR: ATTRS.XN Position */

+#define MPU_RASR_XN_Msk                    (1UL << MPU_RASR_XN_Pos)                       /*!< MPU RASR: ATTRS.XN Mask */

+

+#define MPU_RASR_AP_Pos                    24U                                            /*!< MPU RASR: ATTRS.AP Position */

+#define MPU_RASR_AP_Msk                    (0x7UL << MPU_RASR_AP_Pos)                     /*!< MPU RASR: ATTRS.AP Mask */

+

+#define MPU_RASR_TEX_Pos                   19U                                            /*!< MPU RASR: ATTRS.TEX Position */

+#define MPU_RASR_TEX_Msk                   (0x7UL << MPU_RASR_TEX_Pos)                    /*!< MPU RASR: ATTRS.TEX Mask */

+

+#define MPU_RASR_S_Pos                     18U                                            /*!< MPU RASR: ATTRS.S Position */

+#define MPU_RASR_S_Msk                     (1UL << MPU_RASR_S_Pos)                        /*!< MPU RASR: ATTRS.S Mask */

+

+#define MPU_RASR_C_Pos                     17U                                            /*!< MPU RASR: ATTRS.C Position */

+#define MPU_RASR_C_Msk                     (1UL << MPU_RASR_C_Pos)                        /*!< MPU RASR: ATTRS.C Mask */

+

+#define MPU_RASR_B_Pos                     16U                                            /*!< MPU RASR: ATTRS.B Position */

+#define MPU_RASR_B_Msk                     (1UL << MPU_RASR_B_Pos)                        /*!< MPU RASR: ATTRS.B Mask */

+

+#define MPU_RASR_SRD_Pos                    8U                                            /*!< MPU RASR: Sub-Region Disable Position */

+#define MPU_RASR_SRD_Msk                   (0xFFUL << MPU_RASR_SRD_Pos)                   /*!< MPU RASR: Sub-Region Disable Mask */

+

+#define MPU_RASR_SIZE_Pos                   1U                                            /*!< MPU RASR: Region Size Field Position */

+#define MPU_RASR_SIZE_Msk                  (0x1FUL << MPU_RASR_SIZE_Pos)                  /*!< MPU RASR: Region Size Field Mask */

+

+#define MPU_RASR_ENABLE_Pos                 0U                                            /*!< MPU RASR: Region enable bit Position */

+#define MPU_RASR_ENABLE_Msk                (1UL /*<< MPU_RASR_ENABLE_Pos*/)               /*!< MPU RASR: Region enable bit Disable Mask */

+

+/*@} end of group CMSIS_MPU */

+#endif

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    Type definitions for the Core Debug Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Core Debug Register (CoreDebug).

+ */

+typedef struct

+{

+  __IOM uint32_t DHCSR;                  /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */

+  __OM  uint32_t DCRSR;                  /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */

+  __IOM uint32_t DCRDR;                  /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */

+  __IOM uint32_t DEMCR;                  /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */

+} CoreDebug_Type;

+

+/* Debug Halting Control and Status Register Definitions */

+#define CoreDebug_DHCSR_DBGKEY_Pos         16U                                            /*!< CoreDebug DHCSR: DBGKEY Position */

+#define CoreDebug_DHCSR_DBGKEY_Msk         (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos)       /*!< CoreDebug DHCSR: DBGKEY Mask */

+

+#define CoreDebug_DHCSR_S_RESET_ST_Pos     25U                                            /*!< CoreDebug DHCSR: S_RESET_ST Position */

+#define CoreDebug_DHCSR_S_RESET_ST_Msk     (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos)        /*!< CoreDebug DHCSR: S_RESET_ST Mask */

+

+#define CoreDebug_DHCSR_S_RETIRE_ST_Pos    24U                                            /*!< CoreDebug DHCSR: S_RETIRE_ST Position */

+#define CoreDebug_DHCSR_S_RETIRE_ST_Msk    (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos)       /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */

+

+#define CoreDebug_DHCSR_S_LOCKUP_Pos       19U                                            /*!< CoreDebug DHCSR: S_LOCKUP Position */

+#define CoreDebug_DHCSR_S_LOCKUP_Msk       (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos)          /*!< CoreDebug DHCSR: S_LOCKUP Mask */

+

+#define CoreDebug_DHCSR_S_SLEEP_Pos        18U                                            /*!< CoreDebug DHCSR: S_SLEEP Position */

+#define CoreDebug_DHCSR_S_SLEEP_Msk        (1UL << CoreDebug_DHCSR_S_SLEEP_Pos)           /*!< CoreDebug DHCSR: S_SLEEP Mask */

+

+#define CoreDebug_DHCSR_S_HALT_Pos         17U                                            /*!< CoreDebug DHCSR: S_HALT Position */

+#define CoreDebug_DHCSR_S_HALT_Msk         (1UL << CoreDebug_DHCSR_S_HALT_Pos)            /*!< CoreDebug DHCSR: S_HALT Mask */

+

+#define CoreDebug_DHCSR_S_REGRDY_Pos       16U                                            /*!< CoreDebug DHCSR: S_REGRDY Position */

+#define CoreDebug_DHCSR_S_REGRDY_Msk       (1UL << CoreDebug_DHCSR_S_REGRDY_Pos)          /*!< CoreDebug DHCSR: S_REGRDY Mask */

+

+#define CoreDebug_DHCSR_C_SNAPSTALL_Pos     5U                                            /*!< CoreDebug DHCSR: C_SNAPSTALL Position */

+#define CoreDebug_DHCSR_C_SNAPSTALL_Msk    (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos)       /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */

+

+#define CoreDebug_DHCSR_C_MASKINTS_Pos      3U                                            /*!< CoreDebug DHCSR: C_MASKINTS Position */

+#define CoreDebug_DHCSR_C_MASKINTS_Msk     (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos)        /*!< CoreDebug DHCSR: C_MASKINTS Mask */

+

+#define CoreDebug_DHCSR_C_STEP_Pos          2U                                            /*!< CoreDebug DHCSR: C_STEP Position */

+#define CoreDebug_DHCSR_C_STEP_Msk         (1UL << CoreDebug_DHCSR_C_STEP_Pos)            /*!< CoreDebug DHCSR: C_STEP Mask */

+

+#define CoreDebug_DHCSR_C_HALT_Pos          1U                                            /*!< CoreDebug DHCSR: C_HALT Position */

+#define CoreDebug_DHCSR_C_HALT_Msk         (1UL << CoreDebug_DHCSR_C_HALT_Pos)            /*!< CoreDebug DHCSR: C_HALT Mask */

+

+#define CoreDebug_DHCSR_C_DEBUGEN_Pos       0U                                            /*!< CoreDebug DHCSR: C_DEBUGEN Position */

+#define CoreDebug_DHCSR_C_DEBUGEN_Msk      (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/)     /*!< CoreDebug DHCSR: C_DEBUGEN Mask */

+

+/* Debug Core Register Selector Register Definitions */

+#define CoreDebug_DCRSR_REGWnR_Pos         16U                                            /*!< CoreDebug DCRSR: REGWnR Position */

+#define CoreDebug_DCRSR_REGWnR_Msk         (1UL << CoreDebug_DCRSR_REGWnR_Pos)            /*!< CoreDebug DCRSR: REGWnR Mask */

+

+#define CoreDebug_DCRSR_REGSEL_Pos          0U                                            /*!< CoreDebug DCRSR: REGSEL Position */

+#define CoreDebug_DCRSR_REGSEL_Msk         (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/)     /*!< CoreDebug DCRSR: REGSEL Mask */

+

+/* Debug Exception and Monitor Control Register Definitions */

+#define CoreDebug_DEMCR_TRCENA_Pos         24U                                            /*!< CoreDebug DEMCR: TRCENA Position */

+#define CoreDebug_DEMCR_TRCENA_Msk         (1UL << CoreDebug_DEMCR_TRCENA_Pos)            /*!< CoreDebug DEMCR: TRCENA Mask */

+

+#define CoreDebug_DEMCR_MON_REQ_Pos        19U                                            /*!< CoreDebug DEMCR: MON_REQ Position */

+#define CoreDebug_DEMCR_MON_REQ_Msk        (1UL << CoreDebug_DEMCR_MON_REQ_Pos)           /*!< CoreDebug DEMCR: MON_REQ Mask */

+

+#define CoreDebug_DEMCR_MON_STEP_Pos       18U                                            /*!< CoreDebug DEMCR: MON_STEP Position */

+#define CoreDebug_DEMCR_MON_STEP_Msk       (1UL << CoreDebug_DEMCR_MON_STEP_Pos)          /*!< CoreDebug DEMCR: MON_STEP Mask */

+

+#define CoreDebug_DEMCR_MON_PEND_Pos       17U                                            /*!< CoreDebug DEMCR: MON_PEND Position */

+#define CoreDebug_DEMCR_MON_PEND_Msk       (1UL << CoreDebug_DEMCR_MON_PEND_Pos)          /*!< CoreDebug DEMCR: MON_PEND Mask */

+

+#define CoreDebug_DEMCR_MON_EN_Pos         16U                                            /*!< CoreDebug DEMCR: MON_EN Position */

+#define CoreDebug_DEMCR_MON_EN_Msk         (1UL << CoreDebug_DEMCR_MON_EN_Pos)            /*!< CoreDebug DEMCR: MON_EN Mask */

+

+#define CoreDebug_DEMCR_VC_HARDERR_Pos     10U                                            /*!< CoreDebug DEMCR: VC_HARDERR Position */

+#define CoreDebug_DEMCR_VC_HARDERR_Msk     (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos)        /*!< CoreDebug DEMCR: VC_HARDERR Mask */

+

+#define CoreDebug_DEMCR_VC_INTERR_Pos       9U                                            /*!< CoreDebug DEMCR: VC_INTERR Position */

+#define CoreDebug_DEMCR_VC_INTERR_Msk      (1UL << CoreDebug_DEMCR_VC_INTERR_Pos)         /*!< CoreDebug DEMCR: VC_INTERR Mask */

+

+#define CoreDebug_DEMCR_VC_BUSERR_Pos       8U                                            /*!< CoreDebug DEMCR: VC_BUSERR Position */

+#define CoreDebug_DEMCR_VC_BUSERR_Msk      (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos)         /*!< CoreDebug DEMCR: VC_BUSERR Mask */

+

+#define CoreDebug_DEMCR_VC_STATERR_Pos      7U                                            /*!< CoreDebug DEMCR: VC_STATERR Position */

+#define CoreDebug_DEMCR_VC_STATERR_Msk     (1UL << CoreDebug_DEMCR_VC_STATERR_Pos)        /*!< CoreDebug DEMCR: VC_STATERR Mask */

+

+#define CoreDebug_DEMCR_VC_CHKERR_Pos       6U                                            /*!< CoreDebug DEMCR: VC_CHKERR Position */

+#define CoreDebug_DEMCR_VC_CHKERR_Msk      (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos)         /*!< CoreDebug DEMCR: VC_CHKERR Mask */

+

+#define CoreDebug_DEMCR_VC_NOCPERR_Pos      5U                                            /*!< CoreDebug DEMCR: VC_NOCPERR Position */

+#define CoreDebug_DEMCR_VC_NOCPERR_Msk     (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos)        /*!< CoreDebug DEMCR: VC_NOCPERR Mask */

+

+#define CoreDebug_DEMCR_VC_MMERR_Pos        4U                                            /*!< CoreDebug DEMCR: VC_MMERR Position */

+#define CoreDebug_DEMCR_VC_MMERR_Msk       (1UL << CoreDebug_DEMCR_VC_MMERR_Pos)          /*!< CoreDebug DEMCR: VC_MMERR Mask */

+

+#define CoreDebug_DEMCR_VC_CORERESET_Pos    0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */

+#define CoreDebug_DEMCR_VC_CORERESET_Msk   (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/)  /*!< CoreDebug DEMCR: VC_CORERESET Mask */

+

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */

+#define ITM_BASE            (0xE0000000UL)                            /*!< ITM Base Address */

+#define DWT_BASE            (0xE0001000UL)                            /*!< DWT Base Address */

+#define TPI_BASE            (0xE0040000UL)                            /*!< TPI Base Address */

+#define CoreDebug_BASE      (0xE000EDF0UL)                            /*!< Core Debug Base Address */

+#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */

+#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */

+#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */

+

+#define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE      )   /*!< System control Register not in SCB */

+#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */

+#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */

+#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */

+#define ITM                 ((ITM_Type       *)     ITM_BASE      )   /*!< ITM configuration struct */

+#define DWT                 ((DWT_Type       *)     DWT_BASE      )   /*!< DWT configuration struct */

+#define TPI                 ((TPI_Type       *)     TPI_BASE      )   /*!< TPI configuration struct */

+#define CoreDebug           ((CoreDebug_Type *)     CoreDebug_BASE)   /*!< Core Debug configuration struct */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+  #define MPU_BASE          (SCS_BASE +  0x0D90UL)                    /*!< Memory Protection Unit */

+  #define MPU               ((MPU_Type       *)     MPU_BASE      )   /*!< Memory Protection Unit */

+#endif

+

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Debug Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping

+  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+  #define NVIC_GetActive              __NVIC_GetActive

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+   #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* The following EXC_RETURN values are saved the LR on exception entry */

+#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */

+#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */

+#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */

+

+

+/**

+  \brief   Set Priority Grouping

+  \details Sets the priority grouping field using the required unlock sequence.

+           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.

+           Only values from 0..7 are used.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]      PriorityGroup  Priority grouping field.

+ */

+__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)

+{

+  uint32_t reg_value;

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);             /* only values 0..7 are used          */

+

+  reg_value  =  SCB->AIRCR;                                                   /* read old register configuration    */

+  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change               */

+  reg_value  =  (reg_value                                   |

+                ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) );               /* Insert write key and priority group */

+  SCB->AIRCR =  reg_value;

+}

+

+

+/**

+  \brief   Get Priority Grouping

+  \details Reads the priority grouping field from the NVIC Interrupt Controller.

+  \return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void)

+{

+  return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));

+}

+

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt

+  \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IP[((uint32_t)IRQn)]               = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+  else

+  {

+    SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return(((uint32_t)NVIC->IP[((uint32_t)IRQn)]               >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Encode Priority

+  \details Encodes the priority for an interrupt with the given priority group,

+           preemptive priority value, and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]     PriorityGroup  Used priority group.

+  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).

+  \param [in]       SubPriority  Subpriority value (starting from 0).

+  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().

+ */

+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  return (

+           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |

+           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))

+         );

+}

+

+

+/**

+  \brief   Decode Priority

+  \details Decodes an interrupt priority value with a given priority group to

+           preemptive priority value and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.

+  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().

+  \param [in]     PriorityGroup  Used priority group.

+  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).

+  \param [out]     pSubPriority  Subpriority value (starting from 0).

+ */

+__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);

+  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);

+}

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           VTOR must been relocated to SRAM before.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos)    |

+                           (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

+                            SCB_AIRCR_SYSRESETREQ_Msk    );         /* Keep priority group unchanged */

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+/* ##########################  MPU functions  #################################### */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+

+#include "mpu_armv7.h"

+

+#endif

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+    return 0U;           /* No FPU */

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+/* ##################################### Debug In/Output function ########################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_core_DebugFunctions ITM Functions

+  \brief    Functions that access the ITM debug interface.

+  @{

+ */

+

+extern volatile int32_t ITM_RxBuffer;                              /*!< External variable to receive characters. */

+#define                 ITM_RXBUFFER_EMPTY  ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */

+

+

+/**

+  \brief   ITM Send Character

+  \details Transmits a character via the ITM channel 0, and

+           \li Just returns when no debugger is connected that has booked the output.

+           \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.

+  \param [in]     ch  Character to transmit.

+  \returns            Character to transmit.

+ */

+__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch)

+{

+  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) &&      /* ITM enabled */

+      ((ITM->TER & 1UL               ) != 0UL)   )     /* ITM Port #0 enabled */

+  {

+    while (ITM->PORT[0U].u32 == 0UL)

+    {

+      __NOP();

+    }

+    ITM->PORT[0U].u8 = (uint8_t)ch;

+  }

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Receive Character

+  \details Inputs a character via the external variable \ref ITM_RxBuffer.

+  \return             Received character.

+  \return         -1  No character pending.

+ */

+__STATIC_INLINE int32_t ITM_ReceiveChar (void)

+{

+  int32_t ch = -1;                           /* no character available */

+

+  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY)

+  {

+    ch = ITM_RxBuffer;

+    ITM_RxBuffer = ITM_RXBUFFER_EMPTY;       /* ready for next character */

+  }

+

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Check Character

+  \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer.

+  \return          0  No character available.

+  \return          1  Character available.

+ */

+__STATIC_INLINE int32_t ITM_CheckChar (void)

+{

+

+  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY)

+  {

+    return (0);                              /* no character available */

+  }

+  else

+  {

+    return (1);                              /*    character available */

+  }

+}

+

+/*@} end of CMSIS_core_DebugFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM3_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm33.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm33.h
new file mode 100644
index 0000000..02f82e2
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm33.h
@@ -0,0 +1,3002 @@
+/**************************************************************************//**

+ * @file     core_cm33.h

+ * @brief    CMSIS Cortex-M33 Core Peripheral Access Layer Header File

+ * @version  V5.0.9

+ * @date     06. July 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_CM33_H_GENERIC

+#define __CORE_CM33_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup Cortex_M33

+  @{

+ */

+

+#include "cmsis_version.h"

+

+/*  CMSIS CM33 definitions */

+#define __CM33_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)                   /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __CM33_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)                    /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __CM33_CMSIS_VERSION       ((__CM33_CMSIS_VERSION_MAIN << 16U) | \

+                                     __CM33_CMSIS_VERSION_SUB           )      /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_M                 (33U)                                       /*!< Cortex-M Core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions.

+*/

+#if defined ( __CC_ARM )

+  #if defined (__TARGET_FPU_VFP)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+  #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U)

+    #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U)

+      #define __DSP_USED       1U

+    #else

+      #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)"

+      #define __DSP_USED         0U

+    #endif

+  #else

+    #define __DSP_USED         0U

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined (__ARM_PCS_VFP)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+  #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U)

+    #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U)

+      #define __DSP_USED       1U

+    #else

+      #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)"

+      #define __DSP_USED         0U

+    #endif

+  #else

+    #define __DSP_USED         0U

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+  #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U)

+    #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U)

+      #define __DSP_USED       1U

+    #else

+      #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)"

+      #define __DSP_USED         0U

+    #endif

+  #else

+    #define __DSP_USED         0U

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined (__ARMVFP__)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+  #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U)

+    #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U)

+      #define __DSP_USED       1U

+    #else

+      #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)"

+      #define __DSP_USED         0U

+    #endif

+  #else

+    #define __DSP_USED         0U

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined (__TI_VFP_SUPPORT__)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined (__FPU_VFP__)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM33_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_CM33_H_DEPENDANT

+#define __CORE_CM33_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __CM33_REV

+    #define __CM33_REV                0x0000U

+    #warning "__CM33_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __FPU_PRESENT

+    #define __FPU_PRESENT             0U

+    #warning "__FPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MPU_PRESENT

+    #define __MPU_PRESENT             0U

+    #warning "__MPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __SAUREGION_PRESENT

+    #define __SAUREGION_PRESENT       0U

+    #warning "__SAUREGION_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __DSP_PRESENT

+    #define __DSP_PRESENT             0U

+    #warning "__DSP_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          3U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group Cortex_M33 */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+  - Core Debug Register

+  - Core MPU Register

+  - Core SAU Register

+  - Core FPU Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:16;              /*!< bit:  0..15  Reserved */

+    uint32_t GE:4;                       /*!< bit: 16..19  Greater than or Equal flags */

+    uint32_t _reserved1:7;               /*!< bit: 20..26  Reserved */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+#define APSR_Q_Pos                         27U                                            /*!< APSR: Q Position */

+#define APSR_Q_Msk                         (1UL << APSR_Q_Pos)                            /*!< APSR: Q Mask */

+

+#define APSR_GE_Pos                        16U                                            /*!< APSR: GE Position */

+#define APSR_GE_Msk                        (0xFUL << APSR_GE_Pos)                         /*!< APSR: GE Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:7;               /*!< bit:  9..15  Reserved */

+    uint32_t GE:4;                       /*!< bit: 16..19  Greater than or Equal flags */

+    uint32_t _reserved1:4;               /*!< bit: 20..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */

+    uint32_t IT:2;                       /*!< bit: 25..26  saved IT state   (read 0) */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_Q_Pos                         27U                                            /*!< xPSR: Q Position */

+#define xPSR_Q_Msk                         (1UL << xPSR_Q_Pos)                            /*!< xPSR: Q Mask */

+

+#define xPSR_IT_Pos                        25U                                            /*!< xPSR: IT Position */

+#define xPSR_IT_Msk                        (3UL << xPSR_IT_Pos)                           /*!< xPSR: IT Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_GE_Pos                        16U                                            /*!< xPSR: GE Position */

+#define xPSR_GE_Msk                        (0xFUL << xPSR_GE_Pos)                         /*!< xPSR: GE Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t nPRIV:1;                    /*!< bit:      0  Execution privilege in Thread mode */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack-pointer select */

+    uint32_t FPCA:1;                     /*!< bit:      2  Floating-point context active */

+    uint32_t SFPA:1;                     /*!< bit:      3  Secure floating-point active */

+    uint32_t _reserved1:28;              /*!< bit:  4..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_SFPA_Pos                    3U                                            /*!< CONTROL: SFPA Position */

+#define CONTROL_SFPA_Msk                   (1UL << CONTROL_SFPA_Pos)                      /*!< CONTROL: SFPA Mask */

+

+#define CONTROL_FPCA_Pos                    2U                                            /*!< CONTROL: FPCA Position */

+#define CONTROL_FPCA_Msk                   (1UL << CONTROL_FPCA_Pos)                      /*!< CONTROL: FPCA Mask */

+

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+#define CONTROL_nPRIV_Pos                   0U                                            /*!< CONTROL: nPRIV Position */

+#define CONTROL_nPRIV_Msk                  (1UL /*<< CONTROL_nPRIV_Pos*/)                 /*!< CONTROL: nPRIV Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[16U];              /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[16U];

+  __IOM uint32_t ICER[16U];              /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[16U];

+  __IOM uint32_t ISPR[16U];              /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[16U];

+  __IOM uint32_t ICPR[16U];              /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[16U];

+  __IOM uint32_t IABR[16U];              /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */

+        uint32_t RESERVED4[16U];

+  __IOM uint32_t ITNS[16U];              /*!< Offset: 0x280 (R/W)  Interrupt Non-Secure State Register */

+        uint32_t RESERVED5[16U];

+  __IOM uint8_t  IPR[496U];              /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */

+        uint32_t RESERVED6[580U];

+  __OM  uint32_t STIR;                   /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */

+}  NVIC_Type;

+

+/* Software Triggered Interrupt Register Definitions */

+#define NVIC_STIR_INTID_Pos                 0U                                         /*!< STIR: INTLINESNUM Position */

+#define NVIC_STIR_INTID_Msk                (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/)        /*!< STIR: INTLINESNUM Mask */

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+  __IOM uint32_t VTOR;                   /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+  __IOM uint8_t  SHPR[12U];              /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+  __IOM uint32_t CFSR;                   /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */

+  __IOM uint32_t HFSR;                   /*!< Offset: 0x02C (R/W)  HardFault Status Register */

+  __IOM uint32_t DFSR;                   /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */

+  __IOM uint32_t MMFAR;                  /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */

+  __IOM uint32_t BFAR;                   /*!< Offset: 0x038 (R/W)  BusFault Address Register */

+  __IOM uint32_t AFSR;                   /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */

+  __IM  uint32_t ID_PFR[2U];             /*!< Offset: 0x040 (R/ )  Processor Feature Register */

+  __IM  uint32_t ID_DFR;                 /*!< Offset: 0x048 (R/ )  Debug Feature Register */

+  __IM  uint32_t ID_ADR;                 /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */

+  __IM  uint32_t ID_MMFR[4U];            /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */

+  __IM  uint32_t ID_ISAR[6U];            /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */

+  __IM  uint32_t CLIDR;                  /*!< Offset: 0x078 (R/ )  Cache Level ID register */

+  __IM  uint32_t CTR;                    /*!< Offset: 0x07C (R/ )  Cache Type register */

+  __IM  uint32_t CCSIDR;                 /*!< Offset: 0x080 (R/ )  Cache Size ID Register */

+  __IOM uint32_t CSSELR;                 /*!< Offset: 0x084 (R/W)  Cache Size Selection Register */

+  __IOM uint32_t CPACR;                  /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */

+  __IOM uint32_t NSACR;                  /*!< Offset: 0x08C (R/W)  Non-Secure Access Control Register */

+        uint32_t RESERVED3[92U];

+  __OM  uint32_t STIR;                   /*!< Offset: 0x200 ( /W)  Software Triggered Interrupt Register */

+        uint32_t RESERVED4[15U];

+  __IM  uint32_t MVFR0;                  /*!< Offset: 0x240 (R/ )  Media and VFP Feature Register 0 */

+  __IM  uint32_t MVFR1;                  /*!< Offset: 0x244 (R/ )  Media and VFP Feature Register 1 */

+  __IM  uint32_t MVFR2;                  /*!< Offset: 0x248 (R/ )  Media and VFP Feature Register 2 */

+        uint32_t RESERVED5[1U];

+  __OM  uint32_t ICIALLU;                /*!< Offset: 0x250 ( /W)  I-Cache Invalidate All to PoU */

+        uint32_t RESERVED6[1U];

+  __OM  uint32_t ICIMVAU;                /*!< Offset: 0x258 ( /W)  I-Cache Invalidate by MVA to PoU */

+  __OM  uint32_t DCIMVAC;                /*!< Offset: 0x25C ( /W)  D-Cache Invalidate by MVA to PoC */

+  __OM  uint32_t DCISW;                  /*!< Offset: 0x260 ( /W)  D-Cache Invalidate by Set-way */

+  __OM  uint32_t DCCMVAU;                /*!< Offset: 0x264 ( /W)  D-Cache Clean by MVA to PoU */

+  __OM  uint32_t DCCMVAC;                /*!< Offset: 0x268 ( /W)  D-Cache Clean by MVA to PoC */

+  __OM  uint32_t DCCSW;                  /*!< Offset: 0x26C ( /W)  D-Cache Clean by Set-way */

+  __OM  uint32_t DCCIMVAC;               /*!< Offset: 0x270 ( /W)  D-Cache Clean and Invalidate by MVA to PoC */

+  __OM  uint32_t DCCISW;                 /*!< Offset: 0x274 ( /W)  D-Cache Clean and Invalidate by Set-way */

+        uint32_t RESERVED7[6U];

+  __IOM uint32_t ITCMCR;                 /*!< Offset: 0x290 (R/W)  Instruction Tightly-Coupled Memory Control Register */

+  __IOM uint32_t DTCMCR;                 /*!< Offset: 0x294 (R/W)  Data Tightly-Coupled Memory Control Registers */

+  __IOM uint32_t AHBPCR;                 /*!< Offset: 0x298 (R/W)  AHBP Control Register */

+  __IOM uint32_t CACR;                   /*!< Offset: 0x29C (R/W)  L1 Cache Control Register */

+  __IOM uint32_t AHBSCR;                 /*!< Offset: 0x2A0 (R/W)  AHB Slave Control Register */

+        uint32_t RESERVED8[1U];

+  __IOM uint32_t ABFSR;                  /*!< Offset: 0x2A8 (R/W)  Auxiliary Bus Fault Status Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_PENDNMISET_Pos            31U                                            /*!< SCB ICSR: PENDNMISET Position */

+#define SCB_ICSR_PENDNMISET_Msk            (1UL << SCB_ICSR_PENDNMISET_Pos)               /*!< SCB ICSR: PENDNMISET Mask */

+

+#define SCB_ICSR_NMIPENDSET_Pos            SCB_ICSR_PENDNMISET_Pos                        /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */

+#define SCB_ICSR_NMIPENDSET_Msk            SCB_ICSR_PENDNMISET_Msk                        /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */

+

+#define SCB_ICSR_PENDNMICLR_Pos            30U                                            /*!< SCB ICSR: PENDNMICLR Position */

+#define SCB_ICSR_PENDNMICLR_Msk            (1UL << SCB_ICSR_PENDNMICLR_Pos)               /*!< SCB ICSR: PENDNMICLR Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_STTNS_Pos                 24U                                            /*!< SCB ICSR: STTNS Position (Security Extension) */

+#define SCB_ICSR_STTNS_Msk                 (1UL << SCB_ICSR_STTNS_Pos)                    /*!< SCB ICSR: STTNS Mask (Security Extension) */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_RETTOBASE_Pos             11U                                            /*!< SCB ICSR: RETTOBASE Position */

+#define SCB_ICSR_RETTOBASE_Msk             (1UL << SCB_ICSR_RETTOBASE_Pos)                /*!< SCB ICSR: RETTOBASE Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+/* SCB Vector Table Offset Register Definitions */

+#define SCB_VTOR_TBLOFF_Pos                 7U                                            /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos)           /*!< SCB VTOR: TBLOFF Mask */

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_PRIS_Pos                 14U                                            /*!< SCB AIRCR: PRIS Position */

+#define SCB_AIRCR_PRIS_Msk                 (1UL << SCB_AIRCR_PRIS_Pos)                    /*!< SCB AIRCR: PRIS Mask */

+

+#define SCB_AIRCR_BFHFNMINS_Pos            13U                                            /*!< SCB AIRCR: BFHFNMINS Position */

+#define SCB_AIRCR_BFHFNMINS_Msk            (1UL << SCB_AIRCR_BFHFNMINS_Pos)               /*!< SCB AIRCR: BFHFNMINS Mask */

+

+#define SCB_AIRCR_PRIGROUP_Pos              8U                                            /*!< SCB AIRCR: PRIGROUP Position */

+#define SCB_AIRCR_PRIGROUP_Msk             (7UL << SCB_AIRCR_PRIGROUP_Pos)                /*!< SCB AIRCR: PRIGROUP Mask */

+

+#define SCB_AIRCR_SYSRESETREQS_Pos          3U                                            /*!< SCB AIRCR: SYSRESETREQS Position */

+#define SCB_AIRCR_SYSRESETREQS_Msk         (1UL << SCB_AIRCR_SYSRESETREQS_Pos)            /*!< SCB AIRCR: SYSRESETREQS Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEPS_Pos              3U                                            /*!< SCB SCR: SLEEPDEEPS Position */

+#define SCB_SCR_SLEEPDEEPS_Msk             (1UL << SCB_SCR_SLEEPDEEPS_Pos)                /*!< SCB SCR: SLEEPDEEPS Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_BP_Pos                     18U                                            /*!< SCB CCR: BP Position */

+#define SCB_CCR_BP_Msk                     (1UL << SCB_CCR_BP_Pos)                        /*!< SCB CCR: BP Mask */

+

+#define SCB_CCR_IC_Pos                     17U                                            /*!< SCB CCR: IC Position */

+#define SCB_CCR_IC_Msk                     (1UL << SCB_CCR_IC_Pos)                        /*!< SCB CCR: IC Mask */

+

+#define SCB_CCR_DC_Pos                     16U                                            /*!< SCB CCR: DC Position */

+#define SCB_CCR_DC_Msk                     (1UL << SCB_CCR_DC_Pos)                        /*!< SCB CCR: DC Mask */

+

+#define SCB_CCR_STKOFHFNMIGN_Pos           10U                                            /*!< SCB CCR: STKOFHFNMIGN Position */

+#define SCB_CCR_STKOFHFNMIGN_Msk           (1UL << SCB_CCR_STKOFHFNMIGN_Pos)              /*!< SCB CCR: STKOFHFNMIGN Mask */

+

+#define SCB_CCR_BFHFNMIGN_Pos               8U                                            /*!< SCB CCR: BFHFNMIGN Position */

+#define SCB_CCR_BFHFNMIGN_Msk              (1UL << SCB_CCR_BFHFNMIGN_Pos)                 /*!< SCB CCR: BFHFNMIGN Mask */

+

+#define SCB_CCR_DIV_0_TRP_Pos               4U                                            /*!< SCB CCR: DIV_0_TRP Position */

+#define SCB_CCR_DIV_0_TRP_Msk              (1UL << SCB_CCR_DIV_0_TRP_Pos)                 /*!< SCB CCR: DIV_0_TRP Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+#define SCB_CCR_USERSETMPEND_Pos            1U                                            /*!< SCB CCR: USERSETMPEND Position */

+#define SCB_CCR_USERSETMPEND_Msk           (1UL << SCB_CCR_USERSETMPEND_Pos)              /*!< SCB CCR: USERSETMPEND Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_HARDFAULTPENDED_Pos      21U                                            /*!< SCB SHCSR: HARDFAULTPENDED Position */

+#define SCB_SHCSR_HARDFAULTPENDED_Msk      (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos)         /*!< SCB SHCSR: HARDFAULTPENDED Mask */

+

+#define SCB_SHCSR_SECUREFAULTPENDED_Pos    20U                                            /*!< SCB SHCSR: SECUREFAULTPENDED Position */

+#define SCB_SHCSR_SECUREFAULTPENDED_Msk    (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos)       /*!< SCB SHCSR: SECUREFAULTPENDED Mask */

+

+#define SCB_SHCSR_SECUREFAULTENA_Pos       19U                                            /*!< SCB SHCSR: SECUREFAULTENA Position */

+#define SCB_SHCSR_SECUREFAULTENA_Msk       (1UL << SCB_SHCSR_SECUREFAULTENA_Pos)          /*!< SCB SHCSR: SECUREFAULTENA Mask */

+

+#define SCB_SHCSR_USGFAULTENA_Pos          18U                                            /*!< SCB SHCSR: USGFAULTENA Position */

+#define SCB_SHCSR_USGFAULTENA_Msk          (1UL << SCB_SHCSR_USGFAULTENA_Pos)             /*!< SCB SHCSR: USGFAULTENA Mask */

+

+#define SCB_SHCSR_BUSFAULTENA_Pos          17U                                            /*!< SCB SHCSR: BUSFAULTENA Position */

+#define SCB_SHCSR_BUSFAULTENA_Msk          (1UL << SCB_SHCSR_BUSFAULTENA_Pos)             /*!< SCB SHCSR: BUSFAULTENA Mask */

+

+#define SCB_SHCSR_MEMFAULTENA_Pos          16U                                            /*!< SCB SHCSR: MEMFAULTENA Position */

+#define SCB_SHCSR_MEMFAULTENA_Msk          (1UL << SCB_SHCSR_MEMFAULTENA_Pos)             /*!< SCB SHCSR: MEMFAULTENA Mask */

+

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+#define SCB_SHCSR_BUSFAULTPENDED_Pos       14U                                            /*!< SCB SHCSR: BUSFAULTPENDED Position */

+#define SCB_SHCSR_BUSFAULTPENDED_Msk       (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos)          /*!< SCB SHCSR: BUSFAULTPENDED Mask */

+

+#define SCB_SHCSR_MEMFAULTPENDED_Pos       13U                                            /*!< SCB SHCSR: MEMFAULTPENDED Position */

+#define SCB_SHCSR_MEMFAULTPENDED_Msk       (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos)          /*!< SCB SHCSR: MEMFAULTPENDED Mask */

+

+#define SCB_SHCSR_USGFAULTPENDED_Pos       12U                                            /*!< SCB SHCSR: USGFAULTPENDED Position */

+#define SCB_SHCSR_USGFAULTPENDED_Msk       (1UL << SCB_SHCSR_USGFAULTPENDED_Pos)          /*!< SCB SHCSR: USGFAULTPENDED Mask */

+

+#define SCB_SHCSR_SYSTICKACT_Pos           11U                                            /*!< SCB SHCSR: SYSTICKACT Position */

+#define SCB_SHCSR_SYSTICKACT_Msk           (1UL << SCB_SHCSR_SYSTICKACT_Pos)              /*!< SCB SHCSR: SYSTICKACT Mask */

+

+#define SCB_SHCSR_PENDSVACT_Pos            10U                                            /*!< SCB SHCSR: PENDSVACT Position */

+#define SCB_SHCSR_PENDSVACT_Msk            (1UL << SCB_SHCSR_PENDSVACT_Pos)               /*!< SCB SHCSR: PENDSVACT Mask */

+

+#define SCB_SHCSR_MONITORACT_Pos            8U                                            /*!< SCB SHCSR: MONITORACT Position */

+#define SCB_SHCSR_MONITORACT_Msk           (1UL << SCB_SHCSR_MONITORACT_Pos)              /*!< SCB SHCSR: MONITORACT Mask */

+

+#define SCB_SHCSR_SVCALLACT_Pos             7U                                            /*!< SCB SHCSR: SVCALLACT Position */

+#define SCB_SHCSR_SVCALLACT_Msk            (1UL << SCB_SHCSR_SVCALLACT_Pos)               /*!< SCB SHCSR: SVCALLACT Mask */

+

+#define SCB_SHCSR_NMIACT_Pos                5U                                            /*!< SCB SHCSR: NMIACT Position */

+#define SCB_SHCSR_NMIACT_Msk               (1UL << SCB_SHCSR_NMIACT_Pos)                  /*!< SCB SHCSR: NMIACT Mask */

+

+#define SCB_SHCSR_SECUREFAULTACT_Pos        4U                                            /*!< SCB SHCSR: SECUREFAULTACT Position */

+#define SCB_SHCSR_SECUREFAULTACT_Msk       (1UL << SCB_SHCSR_SECUREFAULTACT_Pos)          /*!< SCB SHCSR: SECUREFAULTACT Mask */

+

+#define SCB_SHCSR_USGFAULTACT_Pos           3U                                            /*!< SCB SHCSR: USGFAULTACT Position */

+#define SCB_SHCSR_USGFAULTACT_Msk          (1UL << SCB_SHCSR_USGFAULTACT_Pos)             /*!< SCB SHCSR: USGFAULTACT Mask */

+

+#define SCB_SHCSR_HARDFAULTACT_Pos          2U                                            /*!< SCB SHCSR: HARDFAULTACT Position */

+#define SCB_SHCSR_HARDFAULTACT_Msk         (1UL << SCB_SHCSR_HARDFAULTACT_Pos)            /*!< SCB SHCSR: HARDFAULTACT Mask */

+

+#define SCB_SHCSR_BUSFAULTACT_Pos           1U                                            /*!< SCB SHCSR: BUSFAULTACT Position */

+#define SCB_SHCSR_BUSFAULTACT_Msk          (1UL << SCB_SHCSR_BUSFAULTACT_Pos)             /*!< SCB SHCSR: BUSFAULTACT Mask */

+

+#define SCB_SHCSR_MEMFAULTACT_Pos           0U                                            /*!< SCB SHCSR: MEMFAULTACT Position */

+#define SCB_SHCSR_MEMFAULTACT_Msk          (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/)         /*!< SCB SHCSR: MEMFAULTACT Mask */

+

+/* SCB Configurable Fault Status Register Definitions */

+#define SCB_CFSR_USGFAULTSR_Pos            16U                                            /*!< SCB CFSR: Usage Fault Status Register Position */

+#define SCB_CFSR_USGFAULTSR_Msk            (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos)          /*!< SCB CFSR: Usage Fault Status Register Mask */

+

+#define SCB_CFSR_BUSFAULTSR_Pos             8U                                            /*!< SCB CFSR: Bus Fault Status Register Position */

+#define SCB_CFSR_BUSFAULTSR_Msk            (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos)            /*!< SCB CFSR: Bus Fault Status Register Mask */

+

+#define SCB_CFSR_MEMFAULTSR_Pos             0U                                            /*!< SCB CFSR: Memory Manage Fault Status Register Position */

+#define SCB_CFSR_MEMFAULTSR_Msk            (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/)        /*!< SCB CFSR: Memory Manage Fault Status Register Mask */

+

+/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_MMARVALID_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 7U)               /*!< SCB CFSR (MMFSR): MMARVALID Position */

+#define SCB_CFSR_MMARVALID_Msk             (1UL << SCB_CFSR_MMARVALID_Pos)                /*!< SCB CFSR (MMFSR): MMARVALID Mask */

+

+#define SCB_CFSR_MLSPERR_Pos               (SCB_SHCSR_MEMFAULTACT_Pos + 5U)               /*!< SCB CFSR (MMFSR): MLSPERR Position */

+#define SCB_CFSR_MLSPERR_Msk               (1UL << SCB_CFSR_MLSPERR_Pos)                  /*!< SCB CFSR (MMFSR): MLSPERR Mask */

+

+#define SCB_CFSR_MSTKERR_Pos               (SCB_SHCSR_MEMFAULTACT_Pos + 4U)               /*!< SCB CFSR (MMFSR): MSTKERR Position */

+#define SCB_CFSR_MSTKERR_Msk               (1UL << SCB_CFSR_MSTKERR_Pos)                  /*!< SCB CFSR (MMFSR): MSTKERR Mask */

+

+#define SCB_CFSR_MUNSTKERR_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 3U)               /*!< SCB CFSR (MMFSR): MUNSTKERR Position */

+#define SCB_CFSR_MUNSTKERR_Msk             (1UL << SCB_CFSR_MUNSTKERR_Pos)                /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */

+

+#define SCB_CFSR_DACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 1U)               /*!< SCB CFSR (MMFSR): DACCVIOL Position */

+#define SCB_CFSR_DACCVIOL_Msk              (1UL << SCB_CFSR_DACCVIOL_Pos)                 /*!< SCB CFSR (MMFSR): DACCVIOL Mask */

+

+#define SCB_CFSR_IACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 0U)               /*!< SCB CFSR (MMFSR): IACCVIOL Position */

+#define SCB_CFSR_IACCVIOL_Msk              (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/)             /*!< SCB CFSR (MMFSR): IACCVIOL Mask */

+

+/* BusFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_BFARVALID_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 7U)                  /*!< SCB CFSR (BFSR): BFARVALID Position */

+#define SCB_CFSR_BFARVALID_Msk            (1UL << SCB_CFSR_BFARVALID_Pos)                 /*!< SCB CFSR (BFSR): BFARVALID Mask */

+

+#define SCB_CFSR_LSPERR_Pos               (SCB_CFSR_BUSFAULTSR_Pos + 5U)                  /*!< SCB CFSR (BFSR): LSPERR Position */

+#define SCB_CFSR_LSPERR_Msk               (1UL << SCB_CFSR_LSPERR_Pos)                    /*!< SCB CFSR (BFSR): LSPERR Mask */

+

+#define SCB_CFSR_STKERR_Pos               (SCB_CFSR_BUSFAULTSR_Pos + 4U)                  /*!< SCB CFSR (BFSR): STKERR Position */

+#define SCB_CFSR_STKERR_Msk               (1UL << SCB_CFSR_STKERR_Pos)                    /*!< SCB CFSR (BFSR): STKERR Mask */

+

+#define SCB_CFSR_UNSTKERR_Pos             (SCB_CFSR_BUSFAULTSR_Pos + 3U)                  /*!< SCB CFSR (BFSR): UNSTKERR Position */

+#define SCB_CFSR_UNSTKERR_Msk             (1UL << SCB_CFSR_UNSTKERR_Pos)                  /*!< SCB CFSR (BFSR): UNSTKERR Mask */

+

+#define SCB_CFSR_IMPRECISERR_Pos          (SCB_CFSR_BUSFAULTSR_Pos + 2U)                  /*!< SCB CFSR (BFSR): IMPRECISERR Position */

+#define SCB_CFSR_IMPRECISERR_Msk          (1UL << SCB_CFSR_IMPRECISERR_Pos)               /*!< SCB CFSR (BFSR): IMPRECISERR Mask */

+

+#define SCB_CFSR_PRECISERR_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 1U)                  /*!< SCB CFSR (BFSR): PRECISERR Position */

+#define SCB_CFSR_PRECISERR_Msk            (1UL << SCB_CFSR_PRECISERR_Pos)                 /*!< SCB CFSR (BFSR): PRECISERR Mask */

+

+#define SCB_CFSR_IBUSERR_Pos              (SCB_CFSR_BUSFAULTSR_Pos + 0U)                  /*!< SCB CFSR (BFSR): IBUSERR Position */

+#define SCB_CFSR_IBUSERR_Msk              (1UL << SCB_CFSR_IBUSERR_Pos)                   /*!< SCB CFSR (BFSR): IBUSERR Mask */

+

+/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_DIVBYZERO_Pos            (SCB_CFSR_USGFAULTSR_Pos + 9U)                  /*!< SCB CFSR (UFSR): DIVBYZERO Position */

+#define SCB_CFSR_DIVBYZERO_Msk            (1UL << SCB_CFSR_DIVBYZERO_Pos)                 /*!< SCB CFSR (UFSR): DIVBYZERO Mask */

+

+#define SCB_CFSR_UNALIGNED_Pos            (SCB_CFSR_USGFAULTSR_Pos + 8U)                  /*!< SCB CFSR (UFSR): UNALIGNED Position */

+#define SCB_CFSR_UNALIGNED_Msk            (1UL << SCB_CFSR_UNALIGNED_Pos)                 /*!< SCB CFSR (UFSR): UNALIGNED Mask */

+

+#define SCB_CFSR_STKOF_Pos                (SCB_CFSR_USGFAULTSR_Pos + 4U)                  /*!< SCB CFSR (UFSR): STKOF Position */

+#define SCB_CFSR_STKOF_Msk                (1UL << SCB_CFSR_STKOF_Pos)                     /*!< SCB CFSR (UFSR): STKOF Mask */

+

+#define SCB_CFSR_NOCP_Pos                 (SCB_CFSR_USGFAULTSR_Pos + 3U)                  /*!< SCB CFSR (UFSR): NOCP Position */

+#define SCB_CFSR_NOCP_Msk                 (1UL << SCB_CFSR_NOCP_Pos)                      /*!< SCB CFSR (UFSR): NOCP Mask */

+

+#define SCB_CFSR_INVPC_Pos                (SCB_CFSR_USGFAULTSR_Pos + 2U)                  /*!< SCB CFSR (UFSR): INVPC Position */

+#define SCB_CFSR_INVPC_Msk                (1UL << SCB_CFSR_INVPC_Pos)                     /*!< SCB CFSR (UFSR): INVPC Mask */

+

+#define SCB_CFSR_INVSTATE_Pos             (SCB_CFSR_USGFAULTSR_Pos + 1U)                  /*!< SCB CFSR (UFSR): INVSTATE Position */

+#define SCB_CFSR_INVSTATE_Msk             (1UL << SCB_CFSR_INVSTATE_Pos)                  /*!< SCB CFSR (UFSR): INVSTATE Mask */

+

+#define SCB_CFSR_UNDEFINSTR_Pos           (SCB_CFSR_USGFAULTSR_Pos + 0U)                  /*!< SCB CFSR (UFSR): UNDEFINSTR Position */

+#define SCB_CFSR_UNDEFINSTR_Msk           (1UL << SCB_CFSR_UNDEFINSTR_Pos)                /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */

+

+/* SCB Hard Fault Status Register Definitions */

+#define SCB_HFSR_DEBUGEVT_Pos              31U                                            /*!< SCB HFSR: DEBUGEVT Position */

+#define SCB_HFSR_DEBUGEVT_Msk              (1UL << SCB_HFSR_DEBUGEVT_Pos)                 /*!< SCB HFSR: DEBUGEVT Mask */

+

+#define SCB_HFSR_FORCED_Pos                30U                                            /*!< SCB HFSR: FORCED Position */

+#define SCB_HFSR_FORCED_Msk                (1UL << SCB_HFSR_FORCED_Pos)                   /*!< SCB HFSR: FORCED Mask */

+

+#define SCB_HFSR_VECTTBL_Pos                1U                                            /*!< SCB HFSR: VECTTBL Position */

+#define SCB_HFSR_VECTTBL_Msk               (1UL << SCB_HFSR_VECTTBL_Pos)                  /*!< SCB HFSR: VECTTBL Mask */

+

+/* SCB Debug Fault Status Register Definitions */

+#define SCB_DFSR_EXTERNAL_Pos               4U                                            /*!< SCB DFSR: EXTERNAL Position */

+#define SCB_DFSR_EXTERNAL_Msk              (1UL << SCB_DFSR_EXTERNAL_Pos)                 /*!< SCB DFSR: EXTERNAL Mask */

+

+#define SCB_DFSR_VCATCH_Pos                 3U                                            /*!< SCB DFSR: VCATCH Position */

+#define SCB_DFSR_VCATCH_Msk                (1UL << SCB_DFSR_VCATCH_Pos)                   /*!< SCB DFSR: VCATCH Mask */

+

+#define SCB_DFSR_DWTTRAP_Pos                2U                                            /*!< SCB DFSR: DWTTRAP Position */

+#define SCB_DFSR_DWTTRAP_Msk               (1UL << SCB_DFSR_DWTTRAP_Pos)                  /*!< SCB DFSR: DWTTRAP Mask */

+

+#define SCB_DFSR_BKPT_Pos                   1U                                            /*!< SCB DFSR: BKPT Position */

+#define SCB_DFSR_BKPT_Msk                  (1UL << SCB_DFSR_BKPT_Pos)                     /*!< SCB DFSR: BKPT Mask */

+

+#define SCB_DFSR_HALTED_Pos                 0U                                            /*!< SCB DFSR: HALTED Position */

+#define SCB_DFSR_HALTED_Msk                (1UL /*<< SCB_DFSR_HALTED_Pos*/)               /*!< SCB DFSR: HALTED Mask */

+

+/* SCB Non-Secure Access Control Register Definitions */

+#define SCB_NSACR_CP11_Pos                 11U                                            /*!< SCB NSACR: CP11 Position */

+#define SCB_NSACR_CP11_Msk                 (1UL << SCB_NSACR_CP11_Pos)                    /*!< SCB NSACR: CP11 Mask */

+

+#define SCB_NSACR_CP10_Pos                 10U                                            /*!< SCB NSACR: CP10 Position */

+#define SCB_NSACR_CP10_Msk                 (1UL << SCB_NSACR_CP10_Pos)                    /*!< SCB NSACR: CP10 Mask */

+

+#define SCB_NSACR_CPn_Pos                   0U                                            /*!< SCB NSACR: CPn Position */

+#define SCB_NSACR_CPn_Msk                  (1UL /*<< SCB_NSACR_CPn_Pos*/)                 /*!< SCB NSACR: CPn Mask */

+

+/* SCB Cache Level ID Register Definitions */

+#define SCB_CLIDR_LOUU_Pos                 27U                                            /*!< SCB CLIDR: LoUU Position */

+#define SCB_CLIDR_LOUU_Msk                 (7UL << SCB_CLIDR_LOUU_Pos)                    /*!< SCB CLIDR: LoUU Mask */

+

+#define SCB_CLIDR_LOC_Pos                  24U                                            /*!< SCB CLIDR: LoC Position */

+#define SCB_CLIDR_LOC_Msk                  (7UL << SCB_CLIDR_LOC_Pos)                     /*!< SCB CLIDR: LoC Mask */

+

+/* SCB Cache Type Register Definitions */

+#define SCB_CTR_FORMAT_Pos                 29U                                            /*!< SCB CTR: Format Position */

+#define SCB_CTR_FORMAT_Msk                 (7UL << SCB_CTR_FORMAT_Pos)                    /*!< SCB CTR: Format Mask */

+

+#define SCB_CTR_CWG_Pos                    24U                                            /*!< SCB CTR: CWG Position */

+#define SCB_CTR_CWG_Msk                    (0xFUL << SCB_CTR_CWG_Pos)                     /*!< SCB CTR: CWG Mask */

+

+#define SCB_CTR_ERG_Pos                    20U                                            /*!< SCB CTR: ERG Position */

+#define SCB_CTR_ERG_Msk                    (0xFUL << SCB_CTR_ERG_Pos)                     /*!< SCB CTR: ERG Mask */

+

+#define SCB_CTR_DMINLINE_Pos               16U                                            /*!< SCB CTR: DminLine Position */

+#define SCB_CTR_DMINLINE_Msk               (0xFUL << SCB_CTR_DMINLINE_Pos)                /*!< SCB CTR: DminLine Mask */

+

+#define SCB_CTR_IMINLINE_Pos                0U                                            /*!< SCB CTR: ImInLine Position */

+#define SCB_CTR_IMINLINE_Msk               (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/)            /*!< SCB CTR: ImInLine Mask */

+

+/* SCB Cache Size ID Register Definitions */

+#define SCB_CCSIDR_WT_Pos                  31U                                            /*!< SCB CCSIDR: WT Position */

+#define SCB_CCSIDR_WT_Msk                  (1UL << SCB_CCSIDR_WT_Pos)                     /*!< SCB CCSIDR: WT Mask */

+

+#define SCB_CCSIDR_WB_Pos                  30U                                            /*!< SCB CCSIDR: WB Position */

+#define SCB_CCSIDR_WB_Msk                  (1UL << SCB_CCSIDR_WB_Pos)                     /*!< SCB CCSIDR: WB Mask */

+

+#define SCB_CCSIDR_RA_Pos                  29U                                            /*!< SCB CCSIDR: RA Position */

+#define SCB_CCSIDR_RA_Msk                  (1UL << SCB_CCSIDR_RA_Pos)                     /*!< SCB CCSIDR: RA Mask */

+

+#define SCB_CCSIDR_WA_Pos                  28U                                            /*!< SCB CCSIDR: WA Position */

+#define SCB_CCSIDR_WA_Msk                  (1UL << SCB_CCSIDR_WA_Pos)                     /*!< SCB CCSIDR: WA Mask */

+

+#define SCB_CCSIDR_NUMSETS_Pos             13U                                            /*!< SCB CCSIDR: NumSets Position */

+#define SCB_CCSIDR_NUMSETS_Msk             (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos)           /*!< SCB CCSIDR: NumSets Mask */

+

+#define SCB_CCSIDR_ASSOCIATIVITY_Pos        3U                                            /*!< SCB CCSIDR: Associativity Position */

+#define SCB_CCSIDR_ASSOCIATIVITY_Msk       (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos)      /*!< SCB CCSIDR: Associativity Mask */

+

+#define SCB_CCSIDR_LINESIZE_Pos             0U                                            /*!< SCB CCSIDR: LineSize Position */

+#define SCB_CCSIDR_LINESIZE_Msk            (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/)           /*!< SCB CCSIDR: LineSize Mask */

+

+/* SCB Cache Size Selection Register Definitions */

+#define SCB_CSSELR_LEVEL_Pos                1U                                            /*!< SCB CSSELR: Level Position */

+#define SCB_CSSELR_LEVEL_Msk               (7UL << SCB_CSSELR_LEVEL_Pos)                  /*!< SCB CSSELR: Level Mask */

+

+#define SCB_CSSELR_IND_Pos                  0U                                            /*!< SCB CSSELR: InD Position */

+#define SCB_CSSELR_IND_Msk                 (1UL /*<< SCB_CSSELR_IND_Pos*/)                /*!< SCB CSSELR: InD Mask */

+

+/* SCB Software Triggered Interrupt Register Definitions */

+#define SCB_STIR_INTID_Pos                  0U                                            /*!< SCB STIR: INTID Position */

+#define SCB_STIR_INTID_Msk                 (0x1FFUL /*<< SCB_STIR_INTID_Pos*/)            /*!< SCB STIR: INTID Mask */

+

+/* SCB D-Cache Invalidate by Set-way Register Definitions */

+#define SCB_DCISW_WAY_Pos                  30U                                            /*!< SCB DCISW: Way Position */

+#define SCB_DCISW_WAY_Msk                  (3UL << SCB_DCISW_WAY_Pos)                     /*!< SCB DCISW: Way Mask */

+

+#define SCB_DCISW_SET_Pos                   5U                                            /*!< SCB DCISW: Set Position */

+#define SCB_DCISW_SET_Msk                  (0x1FFUL << SCB_DCISW_SET_Pos)                 /*!< SCB DCISW: Set Mask */

+

+/* SCB D-Cache Clean by Set-way Register Definitions */

+#define SCB_DCCSW_WAY_Pos                  30U                                            /*!< SCB DCCSW: Way Position */

+#define SCB_DCCSW_WAY_Msk                  (3UL << SCB_DCCSW_WAY_Pos)                     /*!< SCB DCCSW: Way Mask */

+

+#define SCB_DCCSW_SET_Pos                   5U                                            /*!< SCB DCCSW: Set Position */

+#define SCB_DCCSW_SET_Msk                  (0x1FFUL << SCB_DCCSW_SET_Pos)                 /*!< SCB DCCSW: Set Mask */

+

+/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */

+#define SCB_DCCISW_WAY_Pos                 30U                                            /*!< SCB DCCISW: Way Position */

+#define SCB_DCCISW_WAY_Msk                 (3UL << SCB_DCCISW_WAY_Pos)                    /*!< SCB DCCISW: Way Mask */

+

+#define SCB_DCCISW_SET_Pos                  5U                                            /*!< SCB DCCISW: Set Position */

+#define SCB_DCCISW_SET_Msk                 (0x1FFUL << SCB_DCCISW_SET_Pos)                /*!< SCB DCCISW: Set Mask */

+

+/* Instruction Tightly-Coupled Memory Control Register Definitions */

+#define SCB_ITCMCR_SZ_Pos                   3U                                            /*!< SCB ITCMCR: SZ Position */

+#define SCB_ITCMCR_SZ_Msk                  (0xFUL << SCB_ITCMCR_SZ_Pos)                   /*!< SCB ITCMCR: SZ Mask */

+

+#define SCB_ITCMCR_RETEN_Pos                2U                                            /*!< SCB ITCMCR: RETEN Position */

+#define SCB_ITCMCR_RETEN_Msk               (1UL << SCB_ITCMCR_RETEN_Pos)                  /*!< SCB ITCMCR: RETEN Mask */

+

+#define SCB_ITCMCR_RMW_Pos                  1U                                            /*!< SCB ITCMCR: RMW Position */

+#define SCB_ITCMCR_RMW_Msk                 (1UL << SCB_ITCMCR_RMW_Pos)                    /*!< SCB ITCMCR: RMW Mask */

+

+#define SCB_ITCMCR_EN_Pos                   0U                                            /*!< SCB ITCMCR: EN Position */

+#define SCB_ITCMCR_EN_Msk                  (1UL /*<< SCB_ITCMCR_EN_Pos*/)                 /*!< SCB ITCMCR: EN Mask */

+

+/* Data Tightly-Coupled Memory Control Register Definitions */

+#define SCB_DTCMCR_SZ_Pos                   3U                                            /*!< SCB DTCMCR: SZ Position */

+#define SCB_DTCMCR_SZ_Msk                  (0xFUL << SCB_DTCMCR_SZ_Pos)                   /*!< SCB DTCMCR: SZ Mask */

+

+#define SCB_DTCMCR_RETEN_Pos                2U                                            /*!< SCB DTCMCR: RETEN Position */

+#define SCB_DTCMCR_RETEN_Msk               (1UL << SCB_DTCMCR_RETEN_Pos)                   /*!< SCB DTCMCR: RETEN Mask */

+

+#define SCB_DTCMCR_RMW_Pos                  1U                                            /*!< SCB DTCMCR: RMW Position */

+#define SCB_DTCMCR_RMW_Msk                 (1UL << SCB_DTCMCR_RMW_Pos)                    /*!< SCB DTCMCR: RMW Mask */

+

+#define SCB_DTCMCR_EN_Pos                   0U                                            /*!< SCB DTCMCR: EN Position */

+#define SCB_DTCMCR_EN_Msk                  (1UL /*<< SCB_DTCMCR_EN_Pos*/)                 /*!< SCB DTCMCR: EN Mask */

+

+/* AHBP Control Register Definitions */

+#define SCB_AHBPCR_SZ_Pos                   1U                                            /*!< SCB AHBPCR: SZ Position */

+#define SCB_AHBPCR_SZ_Msk                  (7UL << SCB_AHBPCR_SZ_Pos)                     /*!< SCB AHBPCR: SZ Mask */

+

+#define SCB_AHBPCR_EN_Pos                   0U                                            /*!< SCB AHBPCR: EN Position */

+#define SCB_AHBPCR_EN_Msk                  (1UL /*<< SCB_AHBPCR_EN_Pos*/)                 /*!< SCB AHBPCR: EN Mask */

+

+/* L1 Cache Control Register Definitions */

+#define SCB_CACR_FORCEWT_Pos                2U                                            /*!< SCB CACR: FORCEWT Position */

+#define SCB_CACR_FORCEWT_Msk               (1UL << SCB_CACR_FORCEWT_Pos)                  /*!< SCB CACR: FORCEWT Mask */

+

+#define SCB_CACR_ECCEN_Pos                  1U                                            /*!< SCB CACR: ECCEN Position */

+#define SCB_CACR_ECCEN_Msk                 (1UL << SCB_CACR_ECCEN_Pos)                    /*!< SCB CACR: ECCEN Mask */

+

+#define SCB_CACR_SIWT_Pos                   0U                                            /*!< SCB CACR: SIWT Position */

+#define SCB_CACR_SIWT_Msk                  (1UL /*<< SCB_CACR_SIWT_Pos*/)                 /*!< SCB CACR: SIWT Mask */

+

+/* AHBS Control Register Definitions */

+#define SCB_AHBSCR_INITCOUNT_Pos           11U                                            /*!< SCB AHBSCR: INITCOUNT Position */

+#define SCB_AHBSCR_INITCOUNT_Msk           (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos)           /*!< SCB AHBSCR: INITCOUNT Mask */

+

+#define SCB_AHBSCR_TPRI_Pos                 2U                                            /*!< SCB AHBSCR: TPRI Position */

+#define SCB_AHBSCR_TPRI_Msk                (0x1FFUL << SCB_AHBPCR_TPRI_Pos)               /*!< SCB AHBSCR: TPRI Mask */

+

+#define SCB_AHBSCR_CTL_Pos                  0U                                            /*!< SCB AHBSCR: CTL Position*/

+#define SCB_AHBSCR_CTL_Msk                 (3UL /*<< SCB_AHBPCR_CTL_Pos*/)                /*!< SCB AHBSCR: CTL Mask */

+

+/* Auxiliary Bus Fault Status Register Definitions */

+#define SCB_ABFSR_AXIMTYPE_Pos              8U                                            /*!< SCB ABFSR: AXIMTYPE Position*/

+#define SCB_ABFSR_AXIMTYPE_Msk             (3UL << SCB_ABFSR_AXIMTYPE_Pos)                /*!< SCB ABFSR: AXIMTYPE Mask */

+

+#define SCB_ABFSR_EPPB_Pos                  4U                                            /*!< SCB ABFSR: EPPB Position*/

+#define SCB_ABFSR_EPPB_Msk                 (1UL << SCB_ABFSR_EPPB_Pos)                    /*!< SCB ABFSR: EPPB Mask */

+

+#define SCB_ABFSR_AXIM_Pos                  3U                                            /*!< SCB ABFSR: AXIM Position*/

+#define SCB_ABFSR_AXIM_Msk                 (1UL << SCB_ABFSR_AXIM_Pos)                    /*!< SCB ABFSR: AXIM Mask */

+

+#define SCB_ABFSR_AHBP_Pos                  2U                                            /*!< SCB ABFSR: AHBP Position*/

+#define SCB_ABFSR_AHBP_Msk                 (1UL << SCB_ABFSR_AHBP_Pos)                    /*!< SCB ABFSR: AHBP Mask */

+

+#define SCB_ABFSR_DTCM_Pos                  1U                                            /*!< SCB ABFSR: DTCM Position*/

+#define SCB_ABFSR_DTCM_Msk                 (1UL << SCB_ABFSR_DTCM_Pos)                    /*!< SCB ABFSR: DTCM Mask */

+

+#define SCB_ABFSR_ITCM_Pos                  0U                                            /*!< SCB ABFSR: ITCM Position*/

+#define SCB_ABFSR_ITCM_Msk                 (1UL /*<< SCB_ABFSR_ITCM_Pos*/)                /*!< SCB ABFSR: ITCM Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)

+  \brief    Type definitions for the System Control and ID Register not in the SCB

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control and ID Register not in the SCB.

+ */

+typedef struct

+{

+        uint32_t RESERVED0[1U];

+  __IM  uint32_t ICTR;                   /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */

+  __IOM uint32_t ACTLR;                  /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */

+  __IOM uint32_t CPPWR;                  /*!< Offset: 0x00C (R/W)  Coprocessor Power Control  Register */

+} SCnSCB_Type;

+

+/* Interrupt Controller Type Register Definitions */

+#define SCnSCB_ICTR_INTLINESNUM_Pos         0U                                         /*!< ICTR: INTLINESNUM Position */

+#define SCnSCB_ICTR_INTLINESNUM_Msk        (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/)  /*!< ICTR: INTLINESNUM Mask */

+

+/*@} end of group CMSIS_SCnotSCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)

+  \brief    Type definitions for the Instrumentation Trace Macrocell (ITM)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).

+ */

+typedef struct

+{

+  __OM  union

+  {

+    __OM  uint8_t    u8;                 /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */

+    __OM  uint16_t   u16;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */

+    __OM  uint32_t   u32;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */

+  }  PORT [32U];                         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */

+        uint32_t RESERVED0[864U];

+  __IOM uint32_t TER;                    /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */

+        uint32_t RESERVED1[15U];

+  __IOM uint32_t TPR;                    /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */

+        uint32_t RESERVED2[15U];

+  __IOM uint32_t TCR;                    /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */

+        uint32_t RESERVED3[29U];

+  __OM  uint32_t IWR;                    /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */

+  __IM  uint32_t IRR;                    /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */

+  __IOM uint32_t IMCR;                   /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */

+        uint32_t RESERVED4[43U];

+  __OM  uint32_t LAR;                    /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */

+  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */

+        uint32_t RESERVED5[1U];

+  __IM  uint32_t DEVARCH;                /*!< Offset: 0xFBC (R/ )  ITM Device Architecture Register */

+        uint32_t RESERVED6[4U];

+  __IM  uint32_t PID4;                   /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */

+  __IM  uint32_t PID5;                   /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */

+  __IM  uint32_t PID6;                   /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */

+  __IM  uint32_t PID7;                   /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */

+  __IM  uint32_t PID0;                   /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */

+  __IM  uint32_t PID1;                   /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */

+  __IM  uint32_t PID2;                   /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */

+  __IM  uint32_t PID3;                   /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */

+  __IM  uint32_t CID0;                   /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */

+  __IM  uint32_t CID1;                   /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */

+  __IM  uint32_t CID2;                   /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */

+  __IM  uint32_t CID3;                   /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */

+} ITM_Type;

+

+/* ITM Stimulus Port Register Definitions */

+#define ITM_STIM_DISABLED_Pos               1U                                            /*!< ITM STIM: DISABLED Position */

+#define ITM_STIM_DISABLED_Msk              (0x1UL << ITM_STIM_DISABLED_Pos)               /*!< ITM STIM: DISABLED Mask */

+

+#define ITM_STIM_FIFOREADY_Pos              0U                                            /*!< ITM STIM: FIFOREADY Position */

+#define ITM_STIM_FIFOREADY_Msk             (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/)          /*!< ITM STIM: FIFOREADY Mask */

+

+/* ITM Trace Privilege Register Definitions */

+#define ITM_TPR_PRIVMASK_Pos                0U                                            /*!< ITM TPR: PRIVMASK Position */

+#define ITM_TPR_PRIVMASK_Msk               (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/)     /*!< ITM TPR: PRIVMASK Mask */

+

+/* ITM Trace Control Register Definitions */

+#define ITM_TCR_BUSY_Pos                   23U                                            /*!< ITM TCR: BUSY Position */

+#define ITM_TCR_BUSY_Msk                   (1UL << ITM_TCR_BUSY_Pos)                      /*!< ITM TCR: BUSY Mask */

+

+#define ITM_TCR_TRACEBUSID_Pos             16U                                            /*!< ITM TCR: ATBID Position */

+#define ITM_TCR_TRACEBUSID_Msk             (0x7FUL << ITM_TCR_TRACEBUSID_Pos)             /*!< ITM TCR: ATBID Mask */

+

+#define ITM_TCR_GTSFREQ_Pos                10U                                            /*!< ITM TCR: Global timestamp frequency Position */

+#define ITM_TCR_GTSFREQ_Msk                (3UL << ITM_TCR_GTSFREQ_Pos)                   /*!< ITM TCR: Global timestamp frequency Mask */

+

+#define ITM_TCR_TSPRESCALE_Pos              8U                                            /*!< ITM TCR: TSPRESCALE Position */

+#define ITM_TCR_TSPRESCALE_Msk             (3UL << ITM_TCR_TSPRESCALE_Pos)                /*!< ITM TCR: TSPRESCALE Mask */

+

+#define ITM_TCR_STALLENA_Pos                5U                                            /*!< ITM TCR: STALLENA Position */

+#define ITM_TCR_STALLENA_Msk               (1UL << ITM_TCR_STALLENA_Pos)                  /*!< ITM TCR: STALLENA Mask */

+

+#define ITM_TCR_SWOENA_Pos                  4U                                            /*!< ITM TCR: SWOENA Position */

+#define ITM_TCR_SWOENA_Msk                 (1UL << ITM_TCR_SWOENA_Pos)                    /*!< ITM TCR: SWOENA Mask */

+

+#define ITM_TCR_DWTENA_Pos                  3U                                            /*!< ITM TCR: DWTENA Position */

+#define ITM_TCR_DWTENA_Msk                 (1UL << ITM_TCR_DWTENA_Pos)                    /*!< ITM TCR: DWTENA Mask */

+

+#define ITM_TCR_SYNCENA_Pos                 2U                                            /*!< ITM TCR: SYNCENA Position */

+#define ITM_TCR_SYNCENA_Msk                (1UL << ITM_TCR_SYNCENA_Pos)                   /*!< ITM TCR: SYNCENA Mask */

+

+#define ITM_TCR_TSENA_Pos                   1U                                            /*!< ITM TCR: TSENA Position */

+#define ITM_TCR_TSENA_Msk                  (1UL << ITM_TCR_TSENA_Pos)                     /*!< ITM TCR: TSENA Mask */

+

+#define ITM_TCR_ITMENA_Pos                  0U                                            /*!< ITM TCR: ITM Enable bit Position */

+#define ITM_TCR_ITMENA_Msk                 (1UL /*<< ITM_TCR_ITMENA_Pos*/)                /*!< ITM TCR: ITM Enable bit Mask */

+

+/* ITM Integration Write Register Definitions */

+#define ITM_IWR_ATVALIDM_Pos                0U                                            /*!< ITM IWR: ATVALIDM Position */

+#define ITM_IWR_ATVALIDM_Msk               (1UL /*<< ITM_IWR_ATVALIDM_Pos*/)              /*!< ITM IWR: ATVALIDM Mask */

+

+/* ITM Integration Read Register Definitions */

+#define ITM_IRR_ATREADYM_Pos                0U                                            /*!< ITM IRR: ATREADYM Position */

+#define ITM_IRR_ATREADYM_Msk               (1UL /*<< ITM_IRR_ATREADYM_Pos*/)              /*!< ITM IRR: ATREADYM Mask */

+

+/* ITM Integration Mode Control Register Definitions */

+#define ITM_IMCR_INTEGRATION_Pos            0U                                            /*!< ITM IMCR: INTEGRATION Position */

+#define ITM_IMCR_INTEGRATION_Msk           (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/)          /*!< ITM IMCR: INTEGRATION Mask */

+

+/* ITM Lock Status Register Definitions */

+#define ITM_LSR_ByteAcc_Pos                 2U                                            /*!< ITM LSR: ByteAcc Position */

+#define ITM_LSR_ByteAcc_Msk                (1UL << ITM_LSR_ByteAcc_Pos)                   /*!< ITM LSR: ByteAcc Mask */

+

+#define ITM_LSR_Access_Pos                  1U                                            /*!< ITM LSR: Access Position */

+#define ITM_LSR_Access_Msk                 (1UL << ITM_LSR_Access_Pos)                    /*!< ITM LSR: Access Mask */

+

+#define ITM_LSR_Present_Pos                 0U                                            /*!< ITM LSR: Present Position */

+#define ITM_LSR_Present_Msk                (1UL /*<< ITM_LSR_Present_Pos*/)               /*!< ITM LSR: Present Mask */

+

+/*@}*/ /* end of group CMSIS_ITM */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)

+  \brief    Type definitions for the Data Watchpoint and Trace (DWT)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Data Watchpoint and Trace Register (DWT).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  Control Register */

+  __IOM uint32_t CYCCNT;                 /*!< Offset: 0x004 (R/W)  Cycle Count Register */

+  __IOM uint32_t CPICNT;                 /*!< Offset: 0x008 (R/W)  CPI Count Register */

+  __IOM uint32_t EXCCNT;                 /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */

+  __IOM uint32_t SLEEPCNT;               /*!< Offset: 0x010 (R/W)  Sleep Count Register */

+  __IOM uint32_t LSUCNT;                 /*!< Offset: 0x014 (R/W)  LSU Count Register */

+  __IOM uint32_t FOLDCNT;                /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */

+  __IM  uint32_t PCSR;                   /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */

+  __IOM uint32_t COMP0;                  /*!< Offset: 0x020 (R/W)  Comparator Register 0 */

+        uint32_t RESERVED1[1U];

+  __IOM uint32_t FUNCTION0;              /*!< Offset: 0x028 (R/W)  Function Register 0 */

+        uint32_t RESERVED2[1U];

+  __IOM uint32_t COMP1;                  /*!< Offset: 0x030 (R/W)  Comparator Register 1 */

+        uint32_t RESERVED3[1U];

+  __IOM uint32_t FUNCTION1;              /*!< Offset: 0x038 (R/W)  Function Register 1 */

+        uint32_t RESERVED4[1U];

+  __IOM uint32_t COMP2;                  /*!< Offset: 0x040 (R/W)  Comparator Register 2 */

+        uint32_t RESERVED5[1U];

+  __IOM uint32_t FUNCTION2;              /*!< Offset: 0x048 (R/W)  Function Register 2 */

+        uint32_t RESERVED6[1U];

+  __IOM uint32_t COMP3;                  /*!< Offset: 0x050 (R/W)  Comparator Register 3 */

+        uint32_t RESERVED7[1U];

+  __IOM uint32_t FUNCTION3;              /*!< Offset: 0x058 (R/W)  Function Register 3 */

+        uint32_t RESERVED8[1U];

+  __IOM uint32_t COMP4;                  /*!< Offset: 0x060 (R/W)  Comparator Register 4 */

+        uint32_t RESERVED9[1U];

+  __IOM uint32_t FUNCTION4;              /*!< Offset: 0x068 (R/W)  Function Register 4 */

+        uint32_t RESERVED10[1U];

+  __IOM uint32_t COMP5;                  /*!< Offset: 0x070 (R/W)  Comparator Register 5 */

+        uint32_t RESERVED11[1U];

+  __IOM uint32_t FUNCTION5;              /*!< Offset: 0x078 (R/W)  Function Register 5 */

+        uint32_t RESERVED12[1U];

+  __IOM uint32_t COMP6;                  /*!< Offset: 0x080 (R/W)  Comparator Register 6 */

+        uint32_t RESERVED13[1U];

+  __IOM uint32_t FUNCTION6;              /*!< Offset: 0x088 (R/W)  Function Register 6 */

+        uint32_t RESERVED14[1U];

+  __IOM uint32_t COMP7;                  /*!< Offset: 0x090 (R/W)  Comparator Register 7 */

+        uint32_t RESERVED15[1U];

+  __IOM uint32_t FUNCTION7;              /*!< Offset: 0x098 (R/W)  Function Register 7 */

+        uint32_t RESERVED16[1U];

+  __IOM uint32_t COMP8;                  /*!< Offset: 0x0A0 (R/W)  Comparator Register 8 */

+        uint32_t RESERVED17[1U];

+  __IOM uint32_t FUNCTION8;              /*!< Offset: 0x0A8 (R/W)  Function Register 8 */

+        uint32_t RESERVED18[1U];

+  __IOM uint32_t COMP9;                  /*!< Offset: 0x0B0 (R/W)  Comparator Register 9 */

+        uint32_t RESERVED19[1U];

+  __IOM uint32_t FUNCTION9;              /*!< Offset: 0x0B8 (R/W)  Function Register 9 */

+        uint32_t RESERVED20[1U];

+  __IOM uint32_t COMP10;                 /*!< Offset: 0x0C0 (R/W)  Comparator Register 10 */

+        uint32_t RESERVED21[1U];

+  __IOM uint32_t FUNCTION10;             /*!< Offset: 0x0C8 (R/W)  Function Register 10 */

+        uint32_t RESERVED22[1U];

+  __IOM uint32_t COMP11;                 /*!< Offset: 0x0D0 (R/W)  Comparator Register 11 */

+        uint32_t RESERVED23[1U];

+  __IOM uint32_t FUNCTION11;             /*!< Offset: 0x0D8 (R/W)  Function Register 11 */

+        uint32_t RESERVED24[1U];

+  __IOM uint32_t COMP12;                 /*!< Offset: 0x0E0 (R/W)  Comparator Register 12 */

+        uint32_t RESERVED25[1U];

+  __IOM uint32_t FUNCTION12;             /*!< Offset: 0x0E8 (R/W)  Function Register 12 */

+        uint32_t RESERVED26[1U];

+  __IOM uint32_t COMP13;                 /*!< Offset: 0x0F0 (R/W)  Comparator Register 13 */

+        uint32_t RESERVED27[1U];

+  __IOM uint32_t FUNCTION13;             /*!< Offset: 0x0F8 (R/W)  Function Register 13 */

+        uint32_t RESERVED28[1U];

+  __IOM uint32_t COMP14;                 /*!< Offset: 0x100 (R/W)  Comparator Register 14 */

+        uint32_t RESERVED29[1U];

+  __IOM uint32_t FUNCTION14;             /*!< Offset: 0x108 (R/W)  Function Register 14 */

+        uint32_t RESERVED30[1U];

+  __IOM uint32_t COMP15;                 /*!< Offset: 0x110 (R/W)  Comparator Register 15 */

+        uint32_t RESERVED31[1U];

+  __IOM uint32_t FUNCTION15;             /*!< Offset: 0x118 (R/W)  Function Register 15 */

+        uint32_t RESERVED32[934U];

+  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R  )  Lock Status Register */

+        uint32_t RESERVED33[1U];

+  __IM  uint32_t DEVARCH;                /*!< Offset: 0xFBC (R/ )  Device Architecture Register */

+} DWT_Type;

+

+/* DWT Control Register Definitions */

+#define DWT_CTRL_NUMCOMP_Pos               28U                                         /*!< DWT CTRL: NUMCOMP Position */

+#define DWT_CTRL_NUMCOMP_Msk               (0xFUL << DWT_CTRL_NUMCOMP_Pos)             /*!< DWT CTRL: NUMCOMP Mask */

+

+#define DWT_CTRL_NOTRCPKT_Pos              27U                                         /*!< DWT CTRL: NOTRCPKT Position */

+#define DWT_CTRL_NOTRCPKT_Msk              (0x1UL << DWT_CTRL_NOTRCPKT_Pos)            /*!< DWT CTRL: NOTRCPKT Mask */

+

+#define DWT_CTRL_NOEXTTRIG_Pos             26U                                         /*!< DWT CTRL: NOEXTTRIG Position */

+#define DWT_CTRL_NOEXTTRIG_Msk             (0x1UL << DWT_CTRL_NOEXTTRIG_Pos)           /*!< DWT CTRL: NOEXTTRIG Mask */

+

+#define DWT_CTRL_NOCYCCNT_Pos              25U                                         /*!< DWT CTRL: NOCYCCNT Position */

+#define DWT_CTRL_NOCYCCNT_Msk              (0x1UL << DWT_CTRL_NOCYCCNT_Pos)            /*!< DWT CTRL: NOCYCCNT Mask */

+

+#define DWT_CTRL_NOPRFCNT_Pos              24U                                         /*!< DWT CTRL: NOPRFCNT Position */

+#define DWT_CTRL_NOPRFCNT_Msk              (0x1UL << DWT_CTRL_NOPRFCNT_Pos)            /*!< DWT CTRL: NOPRFCNT Mask */

+

+#define DWT_CTRL_CYCDISS_Pos               23U                                         /*!< DWT CTRL: CYCDISS Position */

+#define DWT_CTRL_CYCDISS_Msk               (0x1UL << DWT_CTRL_CYCDISS_Pos)             /*!< DWT CTRL: CYCDISS Mask */

+

+#define DWT_CTRL_CYCEVTENA_Pos             22U                                         /*!< DWT CTRL: CYCEVTENA Position */

+#define DWT_CTRL_CYCEVTENA_Msk             (0x1UL << DWT_CTRL_CYCEVTENA_Pos)           /*!< DWT CTRL: CYCEVTENA Mask */

+

+#define DWT_CTRL_FOLDEVTENA_Pos            21U                                         /*!< DWT CTRL: FOLDEVTENA Position */

+#define DWT_CTRL_FOLDEVTENA_Msk            (0x1UL << DWT_CTRL_FOLDEVTENA_Pos)          /*!< DWT CTRL: FOLDEVTENA Mask */

+

+#define DWT_CTRL_LSUEVTENA_Pos             20U                                         /*!< DWT CTRL: LSUEVTENA Position */

+#define DWT_CTRL_LSUEVTENA_Msk             (0x1UL << DWT_CTRL_LSUEVTENA_Pos)           /*!< DWT CTRL: LSUEVTENA Mask */

+

+#define DWT_CTRL_SLEEPEVTENA_Pos           19U                                         /*!< DWT CTRL: SLEEPEVTENA Position */

+#define DWT_CTRL_SLEEPEVTENA_Msk           (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos)         /*!< DWT CTRL: SLEEPEVTENA Mask */

+

+#define DWT_CTRL_EXCEVTENA_Pos             18U                                         /*!< DWT CTRL: EXCEVTENA Position */

+#define DWT_CTRL_EXCEVTENA_Msk             (0x1UL << DWT_CTRL_EXCEVTENA_Pos)           /*!< DWT CTRL: EXCEVTENA Mask */

+

+#define DWT_CTRL_CPIEVTENA_Pos             17U                                         /*!< DWT CTRL: CPIEVTENA Position */

+#define DWT_CTRL_CPIEVTENA_Msk             (0x1UL << DWT_CTRL_CPIEVTENA_Pos)           /*!< DWT CTRL: CPIEVTENA Mask */

+

+#define DWT_CTRL_EXCTRCENA_Pos             16U                                         /*!< DWT CTRL: EXCTRCENA Position */

+#define DWT_CTRL_EXCTRCENA_Msk             (0x1UL << DWT_CTRL_EXCTRCENA_Pos)           /*!< DWT CTRL: EXCTRCENA Mask */

+

+#define DWT_CTRL_PCSAMPLENA_Pos            12U                                         /*!< DWT CTRL: PCSAMPLENA Position */

+#define DWT_CTRL_PCSAMPLENA_Msk            (0x1UL << DWT_CTRL_PCSAMPLENA_Pos)          /*!< DWT CTRL: PCSAMPLENA Mask */

+

+#define DWT_CTRL_SYNCTAP_Pos               10U                                         /*!< DWT CTRL: SYNCTAP Position */

+#define DWT_CTRL_SYNCTAP_Msk               (0x3UL << DWT_CTRL_SYNCTAP_Pos)             /*!< DWT CTRL: SYNCTAP Mask */

+

+#define DWT_CTRL_CYCTAP_Pos                 9U                                         /*!< DWT CTRL: CYCTAP Position */

+#define DWT_CTRL_CYCTAP_Msk                (0x1UL << DWT_CTRL_CYCTAP_Pos)              /*!< DWT CTRL: CYCTAP Mask */

+

+#define DWT_CTRL_POSTINIT_Pos               5U                                         /*!< DWT CTRL: POSTINIT Position */

+#define DWT_CTRL_POSTINIT_Msk              (0xFUL << DWT_CTRL_POSTINIT_Pos)            /*!< DWT CTRL: POSTINIT Mask */

+

+#define DWT_CTRL_POSTPRESET_Pos             1U                                         /*!< DWT CTRL: POSTPRESET Position */

+#define DWT_CTRL_POSTPRESET_Msk            (0xFUL << DWT_CTRL_POSTPRESET_Pos)          /*!< DWT CTRL: POSTPRESET Mask */

+

+#define DWT_CTRL_CYCCNTENA_Pos              0U                                         /*!< DWT CTRL: CYCCNTENA Position */

+#define DWT_CTRL_CYCCNTENA_Msk             (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/)       /*!< DWT CTRL: CYCCNTENA Mask */

+

+/* DWT CPI Count Register Definitions */

+#define DWT_CPICNT_CPICNT_Pos               0U                                         /*!< DWT CPICNT: CPICNT Position */

+#define DWT_CPICNT_CPICNT_Msk              (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/)       /*!< DWT CPICNT: CPICNT Mask */

+

+/* DWT Exception Overhead Count Register Definitions */

+#define DWT_EXCCNT_EXCCNT_Pos               0U                                         /*!< DWT EXCCNT: EXCCNT Position */

+#define DWT_EXCCNT_EXCCNT_Msk              (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/)       /*!< DWT EXCCNT: EXCCNT Mask */

+

+/* DWT Sleep Count Register Definitions */

+#define DWT_SLEEPCNT_SLEEPCNT_Pos           0U                                         /*!< DWT SLEEPCNT: SLEEPCNT Position */

+#define DWT_SLEEPCNT_SLEEPCNT_Msk          (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/)   /*!< DWT SLEEPCNT: SLEEPCNT Mask */

+

+/* DWT LSU Count Register Definitions */

+#define DWT_LSUCNT_LSUCNT_Pos               0U                                         /*!< DWT LSUCNT: LSUCNT Position */

+#define DWT_LSUCNT_LSUCNT_Msk              (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/)       /*!< DWT LSUCNT: LSUCNT Mask */

+

+/* DWT Folded-instruction Count Register Definitions */

+#define DWT_FOLDCNT_FOLDCNT_Pos             0U                                         /*!< DWT FOLDCNT: FOLDCNT Position */

+#define DWT_FOLDCNT_FOLDCNT_Msk            (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/)     /*!< DWT FOLDCNT: FOLDCNT Mask */

+

+/* DWT Comparator Function Register Definitions */

+#define DWT_FUNCTION_ID_Pos                27U                                         /*!< DWT FUNCTION: ID Position */

+#define DWT_FUNCTION_ID_Msk                (0x1FUL << DWT_FUNCTION_ID_Pos)             /*!< DWT FUNCTION: ID Mask */

+

+#define DWT_FUNCTION_MATCHED_Pos           24U                                         /*!< DWT FUNCTION: MATCHED Position */

+#define DWT_FUNCTION_MATCHED_Msk           (0x1UL << DWT_FUNCTION_MATCHED_Pos)         /*!< DWT FUNCTION: MATCHED Mask */

+

+#define DWT_FUNCTION_DATAVSIZE_Pos         10U                                         /*!< DWT FUNCTION: DATAVSIZE Position */

+#define DWT_FUNCTION_DATAVSIZE_Msk         (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos)       /*!< DWT FUNCTION: DATAVSIZE Mask */

+

+#define DWT_FUNCTION_ACTION_Pos             4U                                         /*!< DWT FUNCTION: ACTION Position */

+#define DWT_FUNCTION_ACTION_Msk            (0x1UL << DWT_FUNCTION_ACTION_Pos)          /*!< DWT FUNCTION: ACTION Mask */

+

+#define DWT_FUNCTION_MATCH_Pos              0U                                         /*!< DWT FUNCTION: MATCH Position */

+#define DWT_FUNCTION_MATCH_Msk             (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/)       /*!< DWT FUNCTION: MATCH Mask */

+

+/*@}*/ /* end of group CMSIS_DWT */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_TPI     Trace Port Interface (TPI)

+  \brief    Type definitions for the Trace Port Interface (TPI)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Trace Port Interface Register (TPI).

+ */

+typedef struct

+{

+  __IM  uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */

+  __IOM uint32_t CSPSR;                  /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */

+        uint32_t RESERVED0[2U];

+  __IOM uint32_t ACPR;                   /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */

+        uint32_t RESERVED1[55U];

+  __IOM uint32_t SPPR;                   /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */

+        uint32_t RESERVED2[131U];

+  __IM  uint32_t FFSR;                   /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */

+  __IOM uint32_t FFCR;                   /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */

+  __IOM uint32_t PSCR;                   /*!< Offset: 0x308 (R/W)  Periodic Synchronization Control Register */

+        uint32_t RESERVED3[759U];

+  __IM  uint32_t TRIGGER;                /*!< Offset: 0xEE8 (R/ )  TRIGGER Register */

+  __IM  uint32_t ITFTTD0;                /*!< Offset: 0xEEC (R/ )  Integration Test FIFO Test Data 0 Register */

+  __IOM uint32_t ITATBCTR2;              /*!< Offset: 0xEF0 (R/W)  Integration Test ATB Control Register 2 */

+        uint32_t RESERVED4[1U];

+  __IM  uint32_t ITATBCTR0;              /*!< Offset: 0xEF8 (R/ )  Integration Test ATB Control Register 0 */

+  __IM  uint32_t ITFTTD1;                /*!< Offset: 0xEFC (R/ )  Integration Test FIFO Test Data 1 Register */

+  __IOM uint32_t ITCTRL;                 /*!< Offset: 0xF00 (R/W)  Integration Mode Control */

+        uint32_t RESERVED5[39U];

+  __IOM uint32_t CLAIMSET;               /*!< Offset: 0xFA0 (R/W)  Claim tag set */

+  __IOM uint32_t CLAIMCLR;               /*!< Offset: 0xFA4 (R/W)  Claim tag clear */

+        uint32_t RESERVED7[8U];

+  __IM  uint32_t DEVID;                  /*!< Offset: 0xFC8 (R/ )  Device Configuration Register */

+  __IM  uint32_t DEVTYPE;                /*!< Offset: 0xFCC (R/ )  Device Type Identifier Register */

+} TPI_Type;

+

+/* TPI Asynchronous Clock Prescaler Register Definitions */

+#define TPI_ACPR_PRESCALER_Pos              0U                                         /*!< TPI ACPR: PRESCALER Position */

+#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< TPI ACPR: PRESCALER Mask */

+

+/* TPI Selected Pin Protocol Register Definitions */

+#define TPI_SPPR_TXMODE_Pos                 0U                                         /*!< TPI SPPR: TXMODE Position */

+#define TPI_SPPR_TXMODE_Msk                (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/)          /*!< TPI SPPR: TXMODE Mask */

+

+/* TPI Formatter and Flush Status Register Definitions */

+#define TPI_FFSR_FtNonStop_Pos              3U                                         /*!< TPI FFSR: FtNonStop Position */

+#define TPI_FFSR_FtNonStop_Msk             (0x1UL << TPI_FFSR_FtNonStop_Pos)           /*!< TPI FFSR: FtNonStop Mask */

+

+#define TPI_FFSR_TCPresent_Pos              2U                                         /*!< TPI FFSR: TCPresent Position */

+#define TPI_FFSR_TCPresent_Msk             (0x1UL << TPI_FFSR_TCPresent_Pos)           /*!< TPI FFSR: TCPresent Mask */

+

+#define TPI_FFSR_FtStopped_Pos              1U                                         /*!< TPI FFSR: FtStopped Position */

+#define TPI_FFSR_FtStopped_Msk             (0x1UL << TPI_FFSR_FtStopped_Pos)           /*!< TPI FFSR: FtStopped Mask */

+

+#define TPI_FFSR_FlInProg_Pos               0U                                         /*!< TPI FFSR: FlInProg Position */

+#define TPI_FFSR_FlInProg_Msk              (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/)        /*!< TPI FFSR: FlInProg Mask */

+

+/* TPI Formatter and Flush Control Register Definitions */

+#define TPI_FFCR_TrigIn_Pos                 8U                                         /*!< TPI FFCR: TrigIn Position */

+#define TPI_FFCR_TrigIn_Msk                (0x1UL << TPI_FFCR_TrigIn_Pos)              /*!< TPI FFCR: TrigIn Mask */

+

+#define TPI_FFCR_FOnMan_Pos                 6U                                         /*!< TPI FFCR: FOnMan Position */

+#define TPI_FFCR_FOnMan_Msk                (0x1UL << TPI_FFCR_FOnMan_Pos)              /*!< TPI FFCR: FOnMan Mask */

+

+#define TPI_FFCR_EnFCont_Pos                1U                                         /*!< TPI FFCR: EnFCont Position */

+#define TPI_FFCR_EnFCont_Msk               (0x1UL << TPI_FFCR_EnFCont_Pos)             /*!< TPI FFCR: EnFCont Mask */

+

+/* TPI TRIGGER Register Definitions */

+#define TPI_TRIGGER_TRIGGER_Pos             0U                                         /*!< TPI TRIGGER: TRIGGER Position */

+#define TPI_TRIGGER_TRIGGER_Msk            (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/)      /*!< TPI TRIGGER: TRIGGER Mask */

+

+/* TPI Integration Test FIFO Test Data 0 Register Definitions */

+#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos    29U                                         /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */

+#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk    (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos)  /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */

+

+#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos  27U                                         /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */

+#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk  (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */

+

+#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos    26U                                         /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */

+#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk    (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos)  /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */

+

+#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos  24U                                         /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */

+#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk  (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */

+

+#define TPI_ITFTTD0_ATB_IF1_data2_Pos      16U                                         /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */

+#define TPI_ITFTTD0_ATB_IF1_data2_Msk      (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos)   /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */

+

+#define TPI_ITFTTD0_ATB_IF1_data1_Pos       8U                                         /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */

+#define TPI_ITFTTD0_ATB_IF1_data1_Msk      (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos)   /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */

+

+#define TPI_ITFTTD0_ATB_IF1_data0_Pos       0U                                          /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */

+#define TPI_ITFTTD0_ATB_IF1_data0_Msk      (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */

+

+/* TPI Integration Test ATB Control Register 2 Register Definitions */

+#define TPI_ITATBCTR2_AFVALID2S_Pos         1U                                         /*!< TPI ITATBCTR2: AFVALID2S Position */

+#define TPI_ITATBCTR2_AFVALID2S_Msk        (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos)      /*!< TPI ITATBCTR2: AFVALID2SS Mask */

+

+#define TPI_ITATBCTR2_AFVALID1S_Pos         1U                                         /*!< TPI ITATBCTR2: AFVALID1S Position */

+#define TPI_ITATBCTR2_AFVALID1S_Msk        (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos)      /*!< TPI ITATBCTR2: AFVALID1SS Mask */

+

+#define TPI_ITATBCTR2_ATREADY2S_Pos         0U                                         /*!< TPI ITATBCTR2: ATREADY2S Position */

+#define TPI_ITATBCTR2_ATREADY2S_Msk        (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/)  /*!< TPI ITATBCTR2: ATREADY2S Mask */

+

+#define TPI_ITATBCTR2_ATREADY1S_Pos         0U                                         /*!< TPI ITATBCTR2: ATREADY1S Position */

+#define TPI_ITATBCTR2_ATREADY1S_Msk        (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/)  /*!< TPI ITATBCTR2: ATREADY1S Mask */

+

+/* TPI Integration Test FIFO Test Data 1 Register Definitions */

+#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos    29U                                         /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */

+#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk    (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos)  /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */

+

+#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos  27U                                         /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */

+#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk  (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */

+

+#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos    26U                                         /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */

+#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk    (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos)  /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */

+

+#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos  24U                                         /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */

+#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk  (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */

+

+#define TPI_ITFTTD1_ATB_IF2_data2_Pos      16U                                         /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */

+#define TPI_ITFTTD1_ATB_IF2_data2_Msk      (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos)   /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */

+

+#define TPI_ITFTTD1_ATB_IF2_data1_Pos       8U                                         /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */

+#define TPI_ITFTTD1_ATB_IF2_data1_Msk      (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos)   /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */

+

+#define TPI_ITFTTD1_ATB_IF2_data0_Pos       0U                                          /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */

+#define TPI_ITFTTD1_ATB_IF2_data0_Msk      (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */

+

+/* TPI Integration Test ATB Control Register 0 Definitions */

+#define TPI_ITATBCTR0_AFVALID2S_Pos         1U                                         /*!< TPI ITATBCTR0: AFVALID2S Position */

+#define TPI_ITATBCTR0_AFVALID2S_Msk        (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos)      /*!< TPI ITATBCTR0: AFVALID2SS Mask */

+

+#define TPI_ITATBCTR0_AFVALID1S_Pos         1U                                         /*!< TPI ITATBCTR0: AFVALID1S Position */

+#define TPI_ITATBCTR0_AFVALID1S_Msk        (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos)      /*!< TPI ITATBCTR0: AFVALID1SS Mask */

+

+#define TPI_ITATBCTR0_ATREADY2S_Pos         0U                                         /*!< TPI ITATBCTR0: ATREADY2S Position */

+#define TPI_ITATBCTR0_ATREADY2S_Msk        (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/)  /*!< TPI ITATBCTR0: ATREADY2S Mask */

+

+#define TPI_ITATBCTR0_ATREADY1S_Pos         0U                                         /*!< TPI ITATBCTR0: ATREADY1S Position */

+#define TPI_ITATBCTR0_ATREADY1S_Msk        (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/)  /*!< TPI ITATBCTR0: ATREADY1S Mask */

+

+/* TPI Integration Mode Control Register Definitions */

+#define TPI_ITCTRL_Mode_Pos                 0U                                         /*!< TPI ITCTRL: Mode Position */

+#define TPI_ITCTRL_Mode_Msk                (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */

+

+/* TPI DEVID Register Definitions */

+#define TPI_DEVID_NRZVALID_Pos             11U                                         /*!< TPI DEVID: NRZVALID Position */

+#define TPI_DEVID_NRZVALID_Msk             (0x1UL << TPI_DEVID_NRZVALID_Pos)           /*!< TPI DEVID: NRZVALID Mask */

+

+#define TPI_DEVID_MANCVALID_Pos            10U                                         /*!< TPI DEVID: MANCVALID Position */

+#define TPI_DEVID_MANCVALID_Msk            (0x1UL << TPI_DEVID_MANCVALID_Pos)          /*!< TPI DEVID: MANCVALID Mask */

+

+#define TPI_DEVID_PTINVALID_Pos             9U                                         /*!< TPI DEVID: PTINVALID Position */

+#define TPI_DEVID_PTINVALID_Msk            (0x1UL << TPI_DEVID_PTINVALID_Pos)          /*!< TPI DEVID: PTINVALID Mask */

+

+#define TPI_DEVID_FIFOSZ_Pos                6U                                         /*!< TPI DEVID: FIFOSZ Position */

+#define TPI_DEVID_FIFOSZ_Msk               (0x7UL << TPI_DEVID_FIFOSZ_Pos)             /*!< TPI DEVID: FIFOSZ Mask */

+

+#define TPI_DEVID_NrTraceInput_Pos          0U                                         /*!< TPI DEVID: NrTraceInput Position */

+#define TPI_DEVID_NrTraceInput_Msk         (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */

+

+/* TPI DEVTYPE Register Definitions */

+#define TPI_DEVTYPE_SubType_Pos             4U                                         /*!< TPI DEVTYPE: SubType Position */

+#define TPI_DEVTYPE_SubType_Msk            (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/)      /*!< TPI DEVTYPE: SubType Mask */

+

+#define TPI_DEVTYPE_MajorType_Pos           0U                                         /*!< TPI DEVTYPE: MajorType Position */

+#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */

+

+/*@}*/ /* end of group CMSIS_TPI */

+

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_MPU     Memory Protection Unit (MPU)

+  \brief    Type definitions for the Memory Protection Unit (MPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Memory Protection Unit (MPU).

+ */

+typedef struct

+{

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x000 (R/ )  MPU Type Register */

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x004 (R/W)  MPU Control Register */

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  MPU Region Number Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */

+  __IOM uint32_t RLAR;                   /*!< Offset: 0x010 (R/W)  MPU Region Limit Address Register */

+  __IOM uint32_t RBAR_A1;                /*!< Offset: 0x014 (R/W)  MPU Region Base Address Register Alias 1 */

+  __IOM uint32_t RLAR_A1;                /*!< Offset: 0x018 (R/W)  MPU Region Limit Address Register Alias 1 */

+  __IOM uint32_t RBAR_A2;                /*!< Offset: 0x01C (R/W)  MPU Region Base Address Register Alias 2 */

+  __IOM uint32_t RLAR_A2;                /*!< Offset: 0x020 (R/W)  MPU Region Limit Address Register Alias 2 */

+  __IOM uint32_t RBAR_A3;                /*!< Offset: 0x024 (R/W)  MPU Region Base Address Register Alias 3 */

+  __IOM uint32_t RLAR_A3;                /*!< Offset: 0x028 (R/W)  MPU Region Limit Address Register Alias 3 */

+        uint32_t RESERVED0[1];

+  union {

+  __IOM uint32_t MAIR[2];

+  struct {

+  __IOM uint32_t MAIR0;                  /*!< Offset: 0x030 (R/W)  MPU Memory Attribute Indirection Register 0 */

+  __IOM uint32_t MAIR1;                  /*!< Offset: 0x034 (R/W)  MPU Memory Attribute Indirection Register 1 */

+  };

+  };

+} MPU_Type;

+

+#define MPU_TYPE_RALIASES                  4U

+

+/* MPU Type Register Definitions */

+#define MPU_TYPE_IREGION_Pos               16U                                            /*!< MPU TYPE: IREGION Position */

+#define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */

+

+#define MPU_TYPE_DREGION_Pos                8U                                            /*!< MPU TYPE: DREGION Position */

+#define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */

+

+#define MPU_TYPE_SEPARATE_Pos               0U                                            /*!< MPU TYPE: SEPARATE Position */

+#define MPU_TYPE_SEPARATE_Msk              (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)             /*!< MPU TYPE: SEPARATE Mask */

+

+/* MPU Control Register Definitions */

+#define MPU_CTRL_PRIVDEFENA_Pos             2U                                            /*!< MPU CTRL: PRIVDEFENA Position */

+#define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */

+

+#define MPU_CTRL_HFNMIENA_Pos               1U                                            /*!< MPU CTRL: HFNMIENA Position */

+#define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */

+

+#define MPU_CTRL_ENABLE_Pos                 0U                                            /*!< MPU CTRL: ENABLE Position */

+#define MPU_CTRL_ENABLE_Msk                (1UL /*<< MPU_CTRL_ENABLE_Pos*/)               /*!< MPU CTRL: ENABLE Mask */

+

+/* MPU Region Number Register Definitions */

+#define MPU_RNR_REGION_Pos                  0U                                            /*!< MPU RNR: REGION Position */

+#define MPU_RNR_REGION_Msk                 (0xFFUL /*<< MPU_RNR_REGION_Pos*/)             /*!< MPU RNR: REGION Mask */

+

+/* MPU Region Base Address Register Definitions */

+#define MPU_RBAR_BASE_Pos                   5U                                            /*!< MPU RBAR: BASE Position */

+#define MPU_RBAR_BASE_Msk                  (0x7FFFFFFUL << MPU_RBAR_BASE_Pos)             /*!< MPU RBAR: BASE Mask */

+

+#define MPU_RBAR_SH_Pos                     3U                                            /*!< MPU RBAR: SH Position */

+#define MPU_RBAR_SH_Msk                    (0x3UL << MPU_RBAR_SH_Pos)                     /*!< MPU RBAR: SH Mask */

+

+#define MPU_RBAR_AP_Pos                     1U                                            /*!< MPU RBAR: AP Position */

+#define MPU_RBAR_AP_Msk                    (0x3UL << MPU_RBAR_AP_Pos)                     /*!< MPU RBAR: AP Mask */

+

+#define MPU_RBAR_XN_Pos                     0U                                            /*!< MPU RBAR: XN Position */

+#define MPU_RBAR_XN_Msk                    (01UL /*<< MPU_RBAR_XN_Pos*/)                  /*!< MPU RBAR: XN Mask */

+

+/* MPU Region Limit Address Register Definitions */

+#define MPU_RLAR_LIMIT_Pos                  5U                                            /*!< MPU RLAR: LIMIT Position */

+#define MPU_RLAR_LIMIT_Msk                 (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos)            /*!< MPU RLAR: LIMIT Mask */

+

+#define MPU_RLAR_AttrIndx_Pos               1U                                            /*!< MPU RLAR: AttrIndx Position */

+#define MPU_RLAR_AttrIndx_Msk              (0x7UL << MPU_RLAR_AttrIndx_Pos)               /*!< MPU RLAR: AttrIndx Mask */

+

+#define MPU_RLAR_EN_Pos                     0U                                            /*!< MPU RLAR: Region enable bit Position */

+#define MPU_RLAR_EN_Msk                    (1UL /*<< MPU_RLAR_EN_Pos*/)                   /*!< MPU RLAR: Region enable bit Disable Mask */

+

+/* MPU Memory Attribute Indirection Register 0 Definitions */

+#define MPU_MAIR0_Attr3_Pos                24U                                            /*!< MPU MAIR0: Attr3 Position */

+#define MPU_MAIR0_Attr3_Msk                (0xFFUL << MPU_MAIR0_Attr3_Pos)                /*!< MPU MAIR0: Attr3 Mask */

+

+#define MPU_MAIR0_Attr2_Pos                16U                                            /*!< MPU MAIR0: Attr2 Position */

+#define MPU_MAIR0_Attr2_Msk                (0xFFUL << MPU_MAIR0_Attr2_Pos)                /*!< MPU MAIR0: Attr2 Mask */

+

+#define MPU_MAIR0_Attr1_Pos                 8U                                            /*!< MPU MAIR0: Attr1 Position */

+#define MPU_MAIR0_Attr1_Msk                (0xFFUL << MPU_MAIR0_Attr1_Pos)                /*!< MPU MAIR0: Attr1 Mask */

+

+#define MPU_MAIR0_Attr0_Pos                 0U                                            /*!< MPU MAIR0: Attr0 Position */

+#define MPU_MAIR0_Attr0_Msk                (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/)            /*!< MPU MAIR0: Attr0 Mask */

+

+/* MPU Memory Attribute Indirection Register 1 Definitions */

+#define MPU_MAIR1_Attr7_Pos                24U                                            /*!< MPU MAIR1: Attr7 Position */

+#define MPU_MAIR1_Attr7_Msk                (0xFFUL << MPU_MAIR1_Attr7_Pos)                /*!< MPU MAIR1: Attr7 Mask */

+

+#define MPU_MAIR1_Attr6_Pos                16U                                            /*!< MPU MAIR1: Attr6 Position */

+#define MPU_MAIR1_Attr6_Msk                (0xFFUL << MPU_MAIR1_Attr6_Pos)                /*!< MPU MAIR1: Attr6 Mask */

+

+#define MPU_MAIR1_Attr5_Pos                 8U                                            /*!< MPU MAIR1: Attr5 Position */

+#define MPU_MAIR1_Attr5_Msk                (0xFFUL << MPU_MAIR1_Attr5_Pos)                /*!< MPU MAIR1: Attr5 Mask */

+

+#define MPU_MAIR1_Attr4_Pos                 0U                                            /*!< MPU MAIR1: Attr4 Position */

+#define MPU_MAIR1_Attr4_Msk                (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/)            /*!< MPU MAIR1: Attr4 Mask */

+

+/*@} end of group CMSIS_MPU */

+#endif

+

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SAU     Security Attribution Unit (SAU)

+  \brief    Type definitions for the Security Attribution Unit (SAU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Security Attribution Unit (SAU).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SAU Control Register */

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x004 (R/ )  SAU Type Register */

+#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U)

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  SAU Region Number Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  SAU Region Base Address Register */

+  __IOM uint32_t RLAR;                   /*!< Offset: 0x010 (R/W)  SAU Region Limit Address Register */

+#else

+        uint32_t RESERVED0[3];

+#endif

+  __IOM uint32_t SFSR;                   /*!< Offset: 0x014 (R/W)  Secure Fault Status Register */

+  __IOM uint32_t SFAR;                   /*!< Offset: 0x018 (R/W)  Secure Fault Address Register */

+} SAU_Type;

+

+/* SAU Control Register Definitions */

+#define SAU_CTRL_ALLNS_Pos                  1U                                            /*!< SAU CTRL: ALLNS Position */

+#define SAU_CTRL_ALLNS_Msk                 (1UL << SAU_CTRL_ALLNS_Pos)                    /*!< SAU CTRL: ALLNS Mask */

+

+#define SAU_CTRL_ENABLE_Pos                 0U                                            /*!< SAU CTRL: ENABLE Position */

+#define SAU_CTRL_ENABLE_Msk                (1UL /*<< SAU_CTRL_ENABLE_Pos*/)               /*!< SAU CTRL: ENABLE Mask */

+

+/* SAU Type Register Definitions */

+#define SAU_TYPE_SREGION_Pos                0U                                            /*!< SAU TYPE: SREGION Position */

+#define SAU_TYPE_SREGION_Msk               (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/)           /*!< SAU TYPE: SREGION Mask */

+

+#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U)

+/* SAU Region Number Register Definitions */

+#define SAU_RNR_REGION_Pos                  0U                                            /*!< SAU RNR: REGION Position */

+#define SAU_RNR_REGION_Msk                 (0xFFUL /*<< SAU_RNR_REGION_Pos*/)             /*!< SAU RNR: REGION Mask */

+

+/* SAU Region Base Address Register Definitions */

+#define SAU_RBAR_BADDR_Pos                  5U                                            /*!< SAU RBAR: BADDR Position */

+#define SAU_RBAR_BADDR_Msk                 (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos)            /*!< SAU RBAR: BADDR Mask */

+

+/* SAU Region Limit Address Register Definitions */

+#define SAU_RLAR_LADDR_Pos                  5U                                            /*!< SAU RLAR: LADDR Position */

+#define SAU_RLAR_LADDR_Msk                 (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos)            /*!< SAU RLAR: LADDR Mask */

+

+#define SAU_RLAR_NSC_Pos                    1U                                            /*!< SAU RLAR: NSC Position */

+#define SAU_RLAR_NSC_Msk                   (1UL << SAU_RLAR_NSC_Pos)                      /*!< SAU RLAR: NSC Mask */

+

+#define SAU_RLAR_ENABLE_Pos                 0U                                            /*!< SAU RLAR: ENABLE Position */

+#define SAU_RLAR_ENABLE_Msk                (1UL /*<< SAU_RLAR_ENABLE_Pos*/)               /*!< SAU RLAR: ENABLE Mask */

+

+#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */

+

+/* Secure Fault Status Register Definitions */

+#define SAU_SFSR_LSERR_Pos                  7U                                            /*!< SAU SFSR: LSERR Position */

+#define SAU_SFSR_LSERR_Msk                 (1UL << SAU_SFSR_LSERR_Pos)                    /*!< SAU SFSR: LSERR Mask */

+

+#define SAU_SFSR_SFARVALID_Pos              6U                                            /*!< SAU SFSR: SFARVALID Position */

+#define SAU_SFSR_SFARVALID_Msk             (1UL << SAU_SFSR_SFARVALID_Pos)                /*!< SAU SFSR: SFARVALID Mask */

+

+#define SAU_SFSR_LSPERR_Pos                 5U                                            /*!< SAU SFSR: LSPERR Position */

+#define SAU_SFSR_LSPERR_Msk                (1UL << SAU_SFSR_LSPERR_Pos)                   /*!< SAU SFSR: LSPERR Mask */

+

+#define SAU_SFSR_INVTRAN_Pos                4U                                            /*!< SAU SFSR: INVTRAN Position */

+#define SAU_SFSR_INVTRAN_Msk               (1UL << SAU_SFSR_INVTRAN_Pos)                  /*!< SAU SFSR: INVTRAN Mask */

+

+#define SAU_SFSR_AUVIOL_Pos                 3U                                            /*!< SAU SFSR: AUVIOL Position */

+#define SAU_SFSR_AUVIOL_Msk                (1UL << SAU_SFSR_AUVIOL_Pos)                   /*!< SAU SFSR: AUVIOL Mask */

+

+#define SAU_SFSR_INVER_Pos                  2U                                            /*!< SAU SFSR: INVER Position */

+#define SAU_SFSR_INVER_Msk                 (1UL << SAU_SFSR_INVER_Pos)                    /*!< SAU SFSR: INVER Mask */

+

+#define SAU_SFSR_INVIS_Pos                  1U                                            /*!< SAU SFSR: INVIS Position */

+#define SAU_SFSR_INVIS_Msk                 (1UL << SAU_SFSR_INVIS_Pos)                    /*!< SAU SFSR: INVIS Mask */

+

+#define SAU_SFSR_INVEP_Pos                  0U                                            /*!< SAU SFSR: INVEP Position */

+#define SAU_SFSR_INVEP_Msk                 (1UL /*<< SAU_SFSR_INVEP_Pos*/)                /*!< SAU SFSR: INVEP Mask */

+

+/*@} end of group CMSIS_SAU */

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_FPU     Floating Point Unit (FPU)

+  \brief    Type definitions for the Floating Point Unit (FPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Floating Point Unit (FPU).

+ */

+typedef struct

+{

+        uint32_t RESERVED0[1U];

+  __IOM uint32_t FPCCR;                  /*!< Offset: 0x004 (R/W)  Floating-Point Context Control Register */

+  __IOM uint32_t FPCAR;                  /*!< Offset: 0x008 (R/W)  Floating-Point Context Address Register */

+  __IOM uint32_t FPDSCR;                 /*!< Offset: 0x00C (R/W)  Floating-Point Default Status Control Register */

+  __IM  uint32_t MVFR0;                  /*!< Offset: 0x010 (R/ )  Media and FP Feature Register 0 */

+  __IM  uint32_t MVFR1;                  /*!< Offset: 0x014 (R/ )  Media and FP Feature Register 1 */

+} FPU_Type;

+

+/* Floating-Point Context Control Register Definitions */

+#define FPU_FPCCR_ASPEN_Pos                31U                                            /*!< FPCCR: ASPEN bit Position */

+#define FPU_FPCCR_ASPEN_Msk                (1UL << FPU_FPCCR_ASPEN_Pos)                   /*!< FPCCR: ASPEN bit Mask */

+

+#define FPU_FPCCR_LSPEN_Pos                30U                                            /*!< FPCCR: LSPEN Position */

+#define FPU_FPCCR_LSPEN_Msk                (1UL << FPU_FPCCR_LSPEN_Pos)                   /*!< FPCCR: LSPEN bit Mask */

+

+#define FPU_FPCCR_LSPENS_Pos               29U                                            /*!< FPCCR: LSPENS Position */

+#define FPU_FPCCR_LSPENS_Msk               (1UL << FPU_FPCCR_LSPENS_Pos)                  /*!< FPCCR: LSPENS bit Mask */

+

+#define FPU_FPCCR_CLRONRET_Pos             28U                                            /*!< FPCCR: CLRONRET Position */

+#define FPU_FPCCR_CLRONRET_Msk             (1UL << FPU_FPCCR_CLRONRET_Pos)                /*!< FPCCR: CLRONRET bit Mask */

+

+#define FPU_FPCCR_CLRONRETS_Pos            27U                                            /*!< FPCCR: CLRONRETS Position */

+#define FPU_FPCCR_CLRONRETS_Msk            (1UL << FPU_FPCCR_CLRONRETS_Pos)               /*!< FPCCR: CLRONRETS bit Mask */

+

+#define FPU_FPCCR_TS_Pos                   26U                                            /*!< FPCCR: TS Position */

+#define FPU_FPCCR_TS_Msk                   (1UL << FPU_FPCCR_TS_Pos)                      /*!< FPCCR: TS bit Mask */

+

+#define FPU_FPCCR_UFRDY_Pos                10U                                            /*!< FPCCR: UFRDY Position */

+#define FPU_FPCCR_UFRDY_Msk                (1UL << FPU_FPCCR_UFRDY_Pos)                   /*!< FPCCR: UFRDY bit Mask */

+

+#define FPU_FPCCR_SPLIMVIOL_Pos             9U                                            /*!< FPCCR: SPLIMVIOL Position */

+#define FPU_FPCCR_SPLIMVIOL_Msk            (1UL << FPU_FPCCR_SPLIMVIOL_Pos)               /*!< FPCCR: SPLIMVIOL bit Mask */

+

+#define FPU_FPCCR_MONRDY_Pos                8U                                            /*!< FPCCR: MONRDY Position */

+#define FPU_FPCCR_MONRDY_Msk               (1UL << FPU_FPCCR_MONRDY_Pos)                  /*!< FPCCR: MONRDY bit Mask */

+

+#define FPU_FPCCR_SFRDY_Pos                 7U                                            /*!< FPCCR: SFRDY Position */

+#define FPU_FPCCR_SFRDY_Msk                (1UL << FPU_FPCCR_SFRDY_Pos)                   /*!< FPCCR: SFRDY bit Mask */

+

+#define FPU_FPCCR_BFRDY_Pos                 6U                                            /*!< FPCCR: BFRDY Position */

+#define FPU_FPCCR_BFRDY_Msk                (1UL << FPU_FPCCR_BFRDY_Pos)                   /*!< FPCCR: BFRDY bit Mask */

+

+#define FPU_FPCCR_MMRDY_Pos                 5U                                            /*!< FPCCR: MMRDY Position */

+#define FPU_FPCCR_MMRDY_Msk                (1UL << FPU_FPCCR_MMRDY_Pos)                   /*!< FPCCR: MMRDY bit Mask */

+

+#define FPU_FPCCR_HFRDY_Pos                 4U                                            /*!< FPCCR: HFRDY Position */

+#define FPU_FPCCR_HFRDY_Msk                (1UL << FPU_FPCCR_HFRDY_Pos)                   /*!< FPCCR: HFRDY bit Mask */

+

+#define FPU_FPCCR_THREAD_Pos                3U                                            /*!< FPCCR: processor mode bit Position */

+#define FPU_FPCCR_THREAD_Msk               (1UL << FPU_FPCCR_THREAD_Pos)                  /*!< FPCCR: processor mode active bit Mask */

+

+#define FPU_FPCCR_S_Pos                     2U                                            /*!< FPCCR: Security status of the FP context bit Position */

+#define FPU_FPCCR_S_Msk                    (1UL << FPU_FPCCR_S_Pos)                       /*!< FPCCR: Security status of the FP context bit Mask */

+

+#define FPU_FPCCR_USER_Pos                  1U                                            /*!< FPCCR: privilege level bit Position */

+#define FPU_FPCCR_USER_Msk                 (1UL << FPU_FPCCR_USER_Pos)                    /*!< FPCCR: privilege level bit Mask */

+

+#define FPU_FPCCR_LSPACT_Pos                0U                                            /*!< FPCCR: Lazy state preservation active bit Position */

+#define FPU_FPCCR_LSPACT_Msk               (1UL /*<< FPU_FPCCR_LSPACT_Pos*/)              /*!< FPCCR: Lazy state preservation active bit Mask */

+

+/* Floating-Point Context Address Register Definitions */

+#define FPU_FPCAR_ADDRESS_Pos               3U                                            /*!< FPCAR: ADDRESS bit Position */

+#define FPU_FPCAR_ADDRESS_Msk              (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos)        /*!< FPCAR: ADDRESS bit Mask */

+

+/* Floating-Point Default Status Control Register Definitions */

+#define FPU_FPDSCR_AHP_Pos                 26U                                            /*!< FPDSCR: AHP bit Position */

+#define FPU_FPDSCR_AHP_Msk                 (1UL << FPU_FPDSCR_AHP_Pos)                    /*!< FPDSCR: AHP bit Mask */

+

+#define FPU_FPDSCR_DN_Pos                  25U                                            /*!< FPDSCR: DN bit Position */

+#define FPU_FPDSCR_DN_Msk                  (1UL << FPU_FPDSCR_DN_Pos)                     /*!< FPDSCR: DN bit Mask */

+

+#define FPU_FPDSCR_FZ_Pos                  24U                                            /*!< FPDSCR: FZ bit Position */

+#define FPU_FPDSCR_FZ_Msk                  (1UL << FPU_FPDSCR_FZ_Pos)                     /*!< FPDSCR: FZ bit Mask */

+

+#define FPU_FPDSCR_RMode_Pos               22U                                            /*!< FPDSCR: RMode bit Position */

+#define FPU_FPDSCR_RMode_Msk               (3UL << FPU_FPDSCR_RMode_Pos)                  /*!< FPDSCR: RMode bit Mask */

+

+/* Media and FP Feature Register 0 Definitions */

+#define FPU_MVFR0_FP_rounding_modes_Pos    28U                                            /*!< MVFR0: FP rounding modes bits Position */

+#define FPU_MVFR0_FP_rounding_modes_Msk    (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos)     /*!< MVFR0: FP rounding modes bits Mask */

+

+#define FPU_MVFR0_Short_vectors_Pos        24U                                            /*!< MVFR0: Short vectors bits Position */

+#define FPU_MVFR0_Short_vectors_Msk        (0xFUL << FPU_MVFR0_Short_vectors_Pos)         /*!< MVFR0: Short vectors bits Mask */

+

+#define FPU_MVFR0_Square_root_Pos          20U                                            /*!< MVFR0: Square root bits Position */

+#define FPU_MVFR0_Square_root_Msk          (0xFUL << FPU_MVFR0_Square_root_Pos)           /*!< MVFR0: Square root bits Mask */

+

+#define FPU_MVFR0_Divide_Pos               16U                                            /*!< MVFR0: Divide bits Position */

+#define FPU_MVFR0_Divide_Msk               (0xFUL << FPU_MVFR0_Divide_Pos)                /*!< MVFR0: Divide bits Mask */

+

+#define FPU_MVFR0_FP_excep_trapping_Pos    12U                                            /*!< MVFR0: FP exception trapping bits Position */

+#define FPU_MVFR0_FP_excep_trapping_Msk    (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos)     /*!< MVFR0: FP exception trapping bits Mask */

+

+#define FPU_MVFR0_Double_precision_Pos      8U                                            /*!< MVFR0: Double-precision bits Position */

+#define FPU_MVFR0_Double_precision_Msk     (0xFUL << FPU_MVFR0_Double_precision_Pos)      /*!< MVFR0: Double-precision bits Mask */

+

+#define FPU_MVFR0_Single_precision_Pos      4U                                            /*!< MVFR0: Single-precision bits Position */

+#define FPU_MVFR0_Single_precision_Msk     (0xFUL << FPU_MVFR0_Single_precision_Pos)      /*!< MVFR0: Single-precision bits Mask */

+

+#define FPU_MVFR0_A_SIMD_registers_Pos      0U                                            /*!< MVFR0: A_SIMD registers bits Position */

+#define FPU_MVFR0_A_SIMD_registers_Msk     (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/)  /*!< MVFR0: A_SIMD registers bits Mask */

+

+/* Media and FP Feature Register 1 Definitions */

+#define FPU_MVFR1_FP_fused_MAC_Pos         28U                                            /*!< MVFR1: FP fused MAC bits Position */

+#define FPU_MVFR1_FP_fused_MAC_Msk         (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos)          /*!< MVFR1: FP fused MAC bits Mask */

+

+#define FPU_MVFR1_FP_HPFP_Pos              24U                                            /*!< MVFR1: FP HPFP bits Position */

+#define FPU_MVFR1_FP_HPFP_Msk              (0xFUL << FPU_MVFR1_FP_HPFP_Pos)               /*!< MVFR1: FP HPFP bits Mask */

+

+#define FPU_MVFR1_D_NaN_mode_Pos            4U                                            /*!< MVFR1: D_NaN mode bits Position */

+#define FPU_MVFR1_D_NaN_mode_Msk           (0xFUL << FPU_MVFR1_D_NaN_mode_Pos)            /*!< MVFR1: D_NaN mode bits Mask */

+

+#define FPU_MVFR1_FtZ_mode_Pos              0U                                            /*!< MVFR1: FtZ mode bits Position */

+#define FPU_MVFR1_FtZ_mode_Msk             (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/)          /*!< MVFR1: FtZ mode bits Mask */

+

+/*@} end of group CMSIS_FPU */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    Type definitions for the Core Debug Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Core Debug Register (CoreDebug).

+ */

+typedef struct

+{

+  __IOM uint32_t DHCSR;                  /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */

+  __OM  uint32_t DCRSR;                  /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */

+  __IOM uint32_t DCRDR;                  /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */

+  __IOM uint32_t DEMCR;                  /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */

+        uint32_t RESERVED4[1U];

+  __IOM uint32_t DAUTHCTRL;              /*!< Offset: 0x014 (R/W)  Debug Authentication Control Register */

+  __IOM uint32_t DSCSR;                  /*!< Offset: 0x018 (R/W)  Debug Security Control and Status Register */

+} CoreDebug_Type;

+

+/* Debug Halting Control and Status Register Definitions */

+#define CoreDebug_DHCSR_DBGKEY_Pos         16U                                            /*!< CoreDebug DHCSR: DBGKEY Position */

+#define CoreDebug_DHCSR_DBGKEY_Msk         (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos)       /*!< CoreDebug DHCSR: DBGKEY Mask */

+

+#define CoreDebug_DHCSR_S_RESTART_ST_Pos   26U                                            /*!< CoreDebug DHCSR: S_RESTART_ST Position */

+#define CoreDebug_DHCSR_S_RESTART_ST_Msk   (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos)      /*!< CoreDebug DHCSR: S_RESTART_ST Mask */

+

+#define CoreDebug_DHCSR_S_RESET_ST_Pos     25U                                            /*!< CoreDebug DHCSR: S_RESET_ST Position */

+#define CoreDebug_DHCSR_S_RESET_ST_Msk     (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos)        /*!< CoreDebug DHCSR: S_RESET_ST Mask */

+

+#define CoreDebug_DHCSR_S_RETIRE_ST_Pos    24U                                            /*!< CoreDebug DHCSR: S_RETIRE_ST Position */

+#define CoreDebug_DHCSR_S_RETIRE_ST_Msk    (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos)       /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */

+

+#define CoreDebug_DHCSR_S_LOCKUP_Pos       19U                                            /*!< CoreDebug DHCSR: S_LOCKUP Position */

+#define CoreDebug_DHCSR_S_LOCKUP_Msk       (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos)          /*!< CoreDebug DHCSR: S_LOCKUP Mask */

+

+#define CoreDebug_DHCSR_S_SLEEP_Pos        18U                                            /*!< CoreDebug DHCSR: S_SLEEP Position */

+#define CoreDebug_DHCSR_S_SLEEP_Msk        (1UL << CoreDebug_DHCSR_S_SLEEP_Pos)           /*!< CoreDebug DHCSR: S_SLEEP Mask */

+

+#define CoreDebug_DHCSR_S_HALT_Pos         17U                                            /*!< CoreDebug DHCSR: S_HALT Position */

+#define CoreDebug_DHCSR_S_HALT_Msk         (1UL << CoreDebug_DHCSR_S_HALT_Pos)            /*!< CoreDebug DHCSR: S_HALT Mask */

+

+#define CoreDebug_DHCSR_S_REGRDY_Pos       16U                                            /*!< CoreDebug DHCSR: S_REGRDY Position */

+#define CoreDebug_DHCSR_S_REGRDY_Msk       (1UL << CoreDebug_DHCSR_S_REGRDY_Pos)          /*!< CoreDebug DHCSR: S_REGRDY Mask */

+

+#define CoreDebug_DHCSR_C_SNAPSTALL_Pos     5U                                            /*!< CoreDebug DHCSR: C_SNAPSTALL Position */

+#define CoreDebug_DHCSR_C_SNAPSTALL_Msk    (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos)       /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */

+

+#define CoreDebug_DHCSR_C_MASKINTS_Pos      3U                                            /*!< CoreDebug DHCSR: C_MASKINTS Position */

+#define CoreDebug_DHCSR_C_MASKINTS_Msk     (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos)        /*!< CoreDebug DHCSR: C_MASKINTS Mask */

+

+#define CoreDebug_DHCSR_C_STEP_Pos          2U                                            /*!< CoreDebug DHCSR: C_STEP Position */

+#define CoreDebug_DHCSR_C_STEP_Msk         (1UL << CoreDebug_DHCSR_C_STEP_Pos)            /*!< CoreDebug DHCSR: C_STEP Mask */

+

+#define CoreDebug_DHCSR_C_HALT_Pos          1U                                            /*!< CoreDebug DHCSR: C_HALT Position */

+#define CoreDebug_DHCSR_C_HALT_Msk         (1UL << CoreDebug_DHCSR_C_HALT_Pos)            /*!< CoreDebug DHCSR: C_HALT Mask */

+

+#define CoreDebug_DHCSR_C_DEBUGEN_Pos       0U                                            /*!< CoreDebug DHCSR: C_DEBUGEN Position */

+#define CoreDebug_DHCSR_C_DEBUGEN_Msk      (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/)     /*!< CoreDebug DHCSR: C_DEBUGEN Mask */

+

+/* Debug Core Register Selector Register Definitions */

+#define CoreDebug_DCRSR_REGWnR_Pos         16U                                            /*!< CoreDebug DCRSR: REGWnR Position */

+#define CoreDebug_DCRSR_REGWnR_Msk         (1UL << CoreDebug_DCRSR_REGWnR_Pos)            /*!< CoreDebug DCRSR: REGWnR Mask */

+

+#define CoreDebug_DCRSR_REGSEL_Pos          0U                                            /*!< CoreDebug DCRSR: REGSEL Position */

+#define CoreDebug_DCRSR_REGSEL_Msk         (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/)     /*!< CoreDebug DCRSR: REGSEL Mask */

+

+/* Debug Exception and Monitor Control Register Definitions */

+#define CoreDebug_DEMCR_TRCENA_Pos         24U                                            /*!< CoreDebug DEMCR: TRCENA Position */

+#define CoreDebug_DEMCR_TRCENA_Msk         (1UL << CoreDebug_DEMCR_TRCENA_Pos)            /*!< CoreDebug DEMCR: TRCENA Mask */

+

+#define CoreDebug_DEMCR_MON_REQ_Pos        19U                                            /*!< CoreDebug DEMCR: MON_REQ Position */

+#define CoreDebug_DEMCR_MON_REQ_Msk        (1UL << CoreDebug_DEMCR_MON_REQ_Pos)           /*!< CoreDebug DEMCR: MON_REQ Mask */

+

+#define CoreDebug_DEMCR_MON_STEP_Pos       18U                                            /*!< CoreDebug DEMCR: MON_STEP Position */

+#define CoreDebug_DEMCR_MON_STEP_Msk       (1UL << CoreDebug_DEMCR_MON_STEP_Pos)          /*!< CoreDebug DEMCR: MON_STEP Mask */

+

+#define CoreDebug_DEMCR_MON_PEND_Pos       17U                                            /*!< CoreDebug DEMCR: MON_PEND Position */

+#define CoreDebug_DEMCR_MON_PEND_Msk       (1UL << CoreDebug_DEMCR_MON_PEND_Pos)          /*!< CoreDebug DEMCR: MON_PEND Mask */

+

+#define CoreDebug_DEMCR_MON_EN_Pos         16U                                            /*!< CoreDebug DEMCR: MON_EN Position */

+#define CoreDebug_DEMCR_MON_EN_Msk         (1UL << CoreDebug_DEMCR_MON_EN_Pos)            /*!< CoreDebug DEMCR: MON_EN Mask */

+

+#define CoreDebug_DEMCR_VC_HARDERR_Pos     10U                                            /*!< CoreDebug DEMCR: VC_HARDERR Position */

+#define CoreDebug_DEMCR_VC_HARDERR_Msk     (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos)        /*!< CoreDebug DEMCR: VC_HARDERR Mask */

+

+#define CoreDebug_DEMCR_VC_INTERR_Pos       9U                                            /*!< CoreDebug DEMCR: VC_INTERR Position */

+#define CoreDebug_DEMCR_VC_INTERR_Msk      (1UL << CoreDebug_DEMCR_VC_INTERR_Pos)         /*!< CoreDebug DEMCR: VC_INTERR Mask */

+

+#define CoreDebug_DEMCR_VC_BUSERR_Pos       8U                                            /*!< CoreDebug DEMCR: VC_BUSERR Position */

+#define CoreDebug_DEMCR_VC_BUSERR_Msk      (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos)         /*!< CoreDebug DEMCR: VC_BUSERR Mask */

+

+#define CoreDebug_DEMCR_VC_STATERR_Pos      7U                                            /*!< CoreDebug DEMCR: VC_STATERR Position */

+#define CoreDebug_DEMCR_VC_STATERR_Msk     (1UL << CoreDebug_DEMCR_VC_STATERR_Pos)        /*!< CoreDebug DEMCR: VC_STATERR Mask */

+

+#define CoreDebug_DEMCR_VC_CHKERR_Pos       6U                                            /*!< CoreDebug DEMCR: VC_CHKERR Position */

+#define CoreDebug_DEMCR_VC_CHKERR_Msk      (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos)         /*!< CoreDebug DEMCR: VC_CHKERR Mask */

+

+#define CoreDebug_DEMCR_VC_NOCPERR_Pos      5U                                            /*!< CoreDebug DEMCR: VC_NOCPERR Position */

+#define CoreDebug_DEMCR_VC_NOCPERR_Msk     (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos)        /*!< CoreDebug DEMCR: VC_NOCPERR Mask */

+

+#define CoreDebug_DEMCR_VC_MMERR_Pos        4U                                            /*!< CoreDebug DEMCR: VC_MMERR Position */

+#define CoreDebug_DEMCR_VC_MMERR_Msk       (1UL << CoreDebug_DEMCR_VC_MMERR_Pos)          /*!< CoreDebug DEMCR: VC_MMERR Mask */

+

+#define CoreDebug_DEMCR_VC_CORERESET_Pos    0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */

+#define CoreDebug_DEMCR_VC_CORERESET_Msk   (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/)  /*!< CoreDebug DEMCR: VC_CORERESET Mask */

+

+/* Debug Authentication Control Register Definitions */

+#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos  3U                                            /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */

+#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos)    /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */

+

+#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos  2U                                            /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */

+#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos)    /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */

+

+#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos   1U                                            /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */

+#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk  (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos)     /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */

+

+#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos   0U                                            /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */

+#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk  (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */

+

+/* Debug Security Control and Status Register Definitions */

+#define CoreDebug_DSCSR_CDS_Pos            16U                                            /*!< CoreDebug DSCSR: CDS Position */

+#define CoreDebug_DSCSR_CDS_Msk            (1UL << CoreDebug_DSCSR_CDS_Pos)               /*!< CoreDebug DSCSR: CDS Mask */

+

+#define CoreDebug_DSCSR_SBRSEL_Pos          1U                                            /*!< CoreDebug DSCSR: SBRSEL Position */

+#define CoreDebug_DSCSR_SBRSEL_Msk         (1UL << CoreDebug_DSCSR_SBRSEL_Pos)            /*!< CoreDebug DSCSR: SBRSEL Mask */

+

+#define CoreDebug_DSCSR_SBRSELEN_Pos        0U                                            /*!< CoreDebug DSCSR: SBRSELEN Position */

+#define CoreDebug_DSCSR_SBRSELEN_Msk       (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/)      /*!< CoreDebug DSCSR: SBRSELEN Mask */

+

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+  #define SCS_BASE            (0xE000E000UL)                             /*!< System Control Space Base Address */

+  #define ITM_BASE            (0xE0000000UL)                             /*!< ITM Base Address */

+  #define DWT_BASE            (0xE0001000UL)                             /*!< DWT Base Address */

+  #define TPI_BASE            (0xE0040000UL)                             /*!< TPI Base Address */

+  #define CoreDebug_BASE      (0xE000EDF0UL)                             /*!< Core Debug Base Address */

+  #define SysTick_BASE        (SCS_BASE +  0x0010UL)                     /*!< SysTick Base Address */

+  #define NVIC_BASE           (SCS_BASE +  0x0100UL)                     /*!< NVIC Base Address */

+  #define SCB_BASE            (SCS_BASE +  0x0D00UL)                     /*!< System Control Block Base Address */

+

+  #define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE         ) /*!< System control Register not in SCB */

+  #define SCB                 ((SCB_Type       *)     SCB_BASE         ) /*!< SCB configuration struct */

+  #define SysTick             ((SysTick_Type   *)     SysTick_BASE     ) /*!< SysTick configuration struct */

+  #define NVIC                ((NVIC_Type      *)     NVIC_BASE        ) /*!< NVIC configuration struct */

+  #define ITM                 ((ITM_Type       *)     ITM_BASE         ) /*!< ITM configuration struct */

+  #define DWT                 ((DWT_Type       *)     DWT_BASE         ) /*!< DWT configuration struct */

+  #define TPI                 ((TPI_Type       *)     TPI_BASE         ) /*!< TPI configuration struct */

+  #define CoreDebug           ((CoreDebug_Type *)     CoreDebug_BASE   ) /*!< Core Debug configuration struct */

+

+  #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+    #define MPU_BASE          (SCS_BASE +  0x0D90UL)                     /*!< Memory Protection Unit */

+    #define MPU               ((MPU_Type       *)     MPU_BASE         ) /*!< Memory Protection Unit */

+  #endif

+

+  #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+    #define SAU_BASE          (SCS_BASE +  0x0DD0UL)                     /*!< Security Attribution Unit */

+    #define SAU               ((SAU_Type       *)     SAU_BASE         ) /*!< Security Attribution Unit */

+  #endif

+

+  #define FPU_BASE            (SCS_BASE +  0x0F30UL)                     /*!< Floating Point Unit */

+  #define FPU                 ((FPU_Type       *)     FPU_BASE         ) /*!< Floating Point Unit */

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+  #define SCS_BASE_NS         (0xE002E000UL)                             /*!< System Control Space Base Address (non-secure address space) */

+  #define CoreDebug_BASE_NS   (0xE002EDF0UL)                             /*!< Core Debug Base Address           (non-secure address space) */

+  #define SysTick_BASE_NS     (SCS_BASE_NS +  0x0010UL)                  /*!< SysTick Base Address              (non-secure address space) */

+  #define NVIC_BASE_NS        (SCS_BASE_NS +  0x0100UL)                  /*!< NVIC Base Address                 (non-secure address space) */

+  #define SCB_BASE_NS         (SCS_BASE_NS +  0x0D00UL)                  /*!< System Control Block Base Address (non-secure address space) */

+

+  #define SCnSCB_NS           ((SCnSCB_Type    *)     SCS_BASE_NS      ) /*!< System control Register not in SCB(non-secure address space) */

+  #define SCB_NS              ((SCB_Type       *)     SCB_BASE_NS      ) /*!< SCB configuration struct          (non-secure address space) */

+  #define SysTick_NS          ((SysTick_Type   *)     SysTick_BASE_NS  ) /*!< SysTick configuration struct      (non-secure address space) */

+  #define NVIC_NS             ((NVIC_Type      *)     NVIC_BASE_NS     ) /*!< NVIC configuration struct         (non-secure address space) */

+  #define CoreDebug_NS        ((CoreDebug_Type *)     CoreDebug_BASE_NS) /*!< Core Debug configuration struct   (non-secure address space) */

+

+  #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+    #define MPU_BASE_NS       (SCS_BASE_NS +  0x0D90UL)                  /*!< Memory Protection Unit            (non-secure address space) */

+    #define MPU_NS            ((MPU_Type       *)     MPU_BASE_NS      ) /*!< Memory Protection Unit            (non-secure address space) */

+  #endif

+

+  #define FPU_BASE_NS         (SCS_BASE_NS +  0x0F30UL)                  /*!< Floating Point Unit               (non-secure address space) */

+  #define FPU_NS              ((FPU_Type       *)     FPU_BASE_NS      ) /*!< Floating Point Unit               (non-secure address space) */

+

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Debug Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping

+  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+  #define NVIC_GetActive              __NVIC_GetActive

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* Special LR values for Secure/Non-Secure call handling and exception handling                                               */

+

+/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS                   */ 

+#define FNC_RETURN                 (0xFEFFFFFFUL)     /* bit [0] ignored when processing a branch                             */

+

+/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */

+#define EXC_RETURN_PREFIX          (0xFF000000UL)     /* bits [31:24] set to indicate an EXC_RETURN value                     */

+#define EXC_RETURN_S               (0x00000040UL)     /* bit [6] stack used to push registers: 0=Non-secure 1=Secure          */

+#define EXC_RETURN_DCRS            (0x00000020UL)     /* bit [5] stacking rules for called registers: 0=skipped 1=saved       */

+#define EXC_RETURN_FTYPE           (0x00000010UL)     /* bit [4] allocate stack for floating-point context: 0=done 1=skipped  */

+#define EXC_RETURN_MODE            (0x00000008UL)     /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode      */

+#define EXC_RETURN_SPSEL           (0x00000002UL)     /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP           */

+#define EXC_RETURN_ES              (0x00000001UL)     /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */

+

+/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking                            */

+#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)  /* Value for processors with floating-point extension:                  */

+#define EXC_INTEGRITY_SIGNATURE     (0xFEFA125AUL)     /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE                   */

+#else 

+#define EXC_INTEGRITY_SIGNATURE     (0xFEFA125BUL)     /* Value for processors without floating-point extension                */

+#endif

+

+

+/**

+  \brief   Set Priority Grouping

+  \details Sets the priority grouping field using the required unlock sequence.

+           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.

+           Only values from 0..7 are used.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]      PriorityGroup  Priority grouping field.

+ */

+__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)

+{

+  uint32_t reg_value;

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);             /* only values 0..7 are used          */

+

+  reg_value  =  SCB->AIRCR;                                                   /* read old register configuration    */

+  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change               */

+  reg_value  =  (reg_value                                   |

+                ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                (PriorityGroupTmp << 8U)                      );              /* Insert write key and priority group */

+  SCB->AIRCR =  reg_value;

+}

+

+

+/**

+  \brief   Get Priority Grouping

+  \details Reads the priority grouping field from the NVIC Interrupt Controller.

+  \return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void)

+{

+  return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));

+}

+

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt

+  \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   Get Interrupt Target State

+  \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+  \return             1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Target State

+  \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+                      1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |=  ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)));

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Clear Interrupt Target State

+  \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  if interrupt is assigned to Secure

+                      1  if interrupt is assigned to Non Secure

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)));

+    return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IPR[((uint32_t)IRQn)]               = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+  else

+  {

+    SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)]               >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Encode Priority

+  \details Encodes the priority for an interrupt with the given priority group,

+           preemptive priority value, and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]     PriorityGroup  Used priority group.

+  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).

+  \param [in]       SubPriority  Subpriority value (starting from 0).

+  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().

+ */

+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  return (

+           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |

+           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))

+         );

+}

+

+

+/**

+  \brief   Decode Priority

+  \details Decodes an interrupt priority value with a given priority group to

+           preemptive priority value and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.

+  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().

+  \param [in]     PriorityGroup  Used priority group.

+  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).

+  \param [out]     pSubPriority  Subpriority value (starting from 0).

+ */

+__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);

+  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);

+}

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           VTOR must been relocated to SRAM before.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos)    |

+                           (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

+                            SCB_AIRCR_SYSRESETREQ_Msk    );         /* Keep priority group unchanged */

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   Set Priority Grouping (non-secure)

+  \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence.

+           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.

+           Only values from 0..7 are used.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]      PriorityGroup  Priority grouping field.

+ */

+__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup)

+{

+  uint32_t reg_value;

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);             /* only values 0..7 are used          */

+

+  reg_value  =  SCB_NS->AIRCR;                                                /* read old register configuration    */

+  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change               */

+  reg_value  =  (reg_value                                   |

+                ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos)  );              /* Insert write key and priority group */

+  SCB_NS->AIRCR =  reg_value;

+}

+

+

+/**

+  \brief   Get Priority Grouping (non-secure)

+  \details Reads the priority grouping field from the non-secure NVIC when in secure state.

+  \return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void)

+{

+  return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));

+}

+

+

+/**

+  \brief   Enable Interrupt (non-secure)

+  \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status (non-secure)

+  \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt (non-secure)

+  \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt (non-secure)

+  \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt (non-secure)

+  \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt (non-secure)

+  \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt (non-secure)

+  \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority (non-secure)

+  \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every non-secure processor exception.

+ */

+__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC_NS->IPR[((uint32_t)IRQn)]               = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+  else

+  {

+    SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority (non-secure)

+  \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)]               >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+#endif /*  defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+/* ##########################  MPU functions  #################################### */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+

+#include "mpu_armv8.h"

+

+#endif

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+  uint32_t mvfr0;

+

+  mvfr0 = FPU->MVFR0;

+  if      ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U)

+  {

+    return 2U;           /* Double + Single precision FPU */

+  }

+  else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U)

+  {

+    return 1U;           /* Single precision FPU */

+  }

+  else

+  {

+    return 0U;           /* No FPU */

+  }

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##########################   SAU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SAUFunctions SAU Functions

+  \brief    Functions that configure the SAU.

+  @{

+ */

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+

+/**

+  \brief   Enable SAU

+  \details Enables the Security Attribution Unit (SAU).

+ */

+__STATIC_INLINE void TZ_SAU_Enable(void)

+{

+    SAU->CTRL |=  (SAU_CTRL_ENABLE_Msk);

+}

+

+

+

+/**

+  \brief   Disable SAU

+  \details Disables the Security Attribution Unit (SAU).

+ */

+__STATIC_INLINE void TZ_SAU_Disable(void)

+{

+    SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk);

+}

+

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+/*@} end of CMSIS_Core_SAUFunctions */

+

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

+/**

+  \brief   System Tick Configuration (non-secure)

+  \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>TZ_SysTick_Config_NS</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+

+ */

+__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                         /* Reload value impossible */

+  }

+

+  SysTick_NS->LOAD  = (uint32_t)(ticks - 1UL);                            /* set reload register */

+  TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick_NS->VAL   = 0UL;                                                /* Load the SysTick Counter Value */

+  SysTick_NS->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                      SysTick_CTRL_TICKINT_Msk   |

+                      SysTick_CTRL_ENABLE_Msk;                            /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                           /* Function successful */

+}

+#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+/* ##################################### Debug In/Output function ########################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_core_DebugFunctions ITM Functions

+  \brief    Functions that access the ITM debug interface.

+  @{

+ */

+

+extern volatile int32_t ITM_RxBuffer;                              /*!< External variable to receive characters. */

+#define                 ITM_RXBUFFER_EMPTY  ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */

+

+

+/**

+  \brief   ITM Send Character

+  \details Transmits a character via the ITM channel 0, and

+           \li Just returns when no debugger is connected that has booked the output.

+           \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.

+  \param [in]     ch  Character to transmit.

+  \returns            Character to transmit.

+ */

+__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch)

+{

+  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) &&      /* ITM enabled */

+      ((ITM->TER & 1UL               ) != 0UL)   )     /* ITM Port #0 enabled */

+  {

+    while (ITM->PORT[0U].u32 == 0UL)

+    {

+      __NOP();

+    }

+    ITM->PORT[0U].u8 = (uint8_t)ch;

+  }

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Receive Character

+  \details Inputs a character via the external variable \ref ITM_RxBuffer.

+  \return             Received character.

+  \return         -1  No character pending.

+ */

+__STATIC_INLINE int32_t ITM_ReceiveChar (void)

+{

+  int32_t ch = -1;                           /* no character available */

+

+  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY)

+  {

+    ch = ITM_RxBuffer;

+    ITM_RxBuffer = ITM_RXBUFFER_EMPTY;       /* ready for next character */

+  }

+

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Check Character

+  \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer.

+  \return          0  No character available.

+  \return          1  Character available.

+ */

+__STATIC_INLINE int32_t ITM_CheckChar (void)

+{

+

+  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY)

+  {

+    return (0);                              /* no character available */

+  }

+  else

+  {

+    return (1);                              /*    character available */

+  }

+}

+

+/*@} end of CMSIS_core_DebugFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM33_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm4.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm4.h
new file mode 100644
index 0000000..308b868
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm4.h
@@ -0,0 +1,2129 @@
+/**************************************************************************//**

+ * @file     core_cm4.h

+ * @brief    CMSIS Cortex-M4 Core Peripheral Access Layer Header File

+ * @version  V5.0.8

+ * @date     04. June 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_CM4_H_GENERIC

+#define __CORE_CM4_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup Cortex_M4

+  @{

+ */

+

+#include "cmsis_version.h"

+

+/* CMSIS CM4 definitions */

+#define __CM4_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)              /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __CM4_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)               /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __CM4_CMSIS_VERSION       ((__CM4_CMSIS_VERSION_MAIN << 16U) | \

+                                    __CM4_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_M                (4U)                                   /*!< Cortex-M Core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions.

+*/

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined __ARM_PCS_VFP

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined __TI_VFP_SUPPORT__

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM4_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_CM4_H_DEPENDANT

+#define __CORE_CM4_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __CM4_REV

+    #define __CM4_REV               0x0000U

+    #warning "__CM4_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __FPU_PRESENT

+    #define __FPU_PRESENT             0U

+    #warning "__FPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MPU_PRESENT

+    #define __MPU_PRESENT             0U

+    #warning "__MPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          3U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group Cortex_M4 */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+  - Core Debug Register

+  - Core MPU Register

+  - Core FPU Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:16;              /*!< bit:  0..15  Reserved */

+    uint32_t GE:4;                       /*!< bit: 16..19  Greater than or Equal flags */

+    uint32_t _reserved1:7;               /*!< bit: 20..26  Reserved */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+#define APSR_Q_Pos                         27U                                            /*!< APSR: Q Position */

+#define APSR_Q_Msk                         (1UL << APSR_Q_Pos)                            /*!< APSR: Q Mask */

+

+#define APSR_GE_Pos                        16U                                            /*!< APSR: GE Position */

+#define APSR_GE_Msk                        (0xFUL << APSR_GE_Pos)                         /*!< APSR: GE Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:1;               /*!< bit:      9  Reserved */

+    uint32_t ICI_IT_1:6;                 /*!< bit: 10..15  ICI/IT part 1 */

+    uint32_t GE:4;                       /*!< bit: 16..19  Greater than or Equal flags */

+    uint32_t _reserved1:4;               /*!< bit: 20..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit */

+    uint32_t ICI_IT_2:2;                 /*!< bit: 25..26  ICI/IT part 2 */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_Q_Pos                         27U                                            /*!< xPSR: Q Position */

+#define xPSR_Q_Msk                         (1UL << xPSR_Q_Pos)                            /*!< xPSR: Q Mask */

+

+#define xPSR_ICI_IT_2_Pos                  25U                                            /*!< xPSR: ICI/IT part 2 Position */

+#define xPSR_ICI_IT_2_Msk                  (3UL << xPSR_ICI_IT_2_Pos)                     /*!< xPSR: ICI/IT part 2 Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_GE_Pos                        16U                                            /*!< xPSR: GE Position */

+#define xPSR_GE_Msk                        (0xFUL << xPSR_GE_Pos)                         /*!< xPSR: GE Mask */

+

+#define xPSR_ICI_IT_1_Pos                  10U                                            /*!< xPSR: ICI/IT part 1 Position */

+#define xPSR_ICI_IT_1_Msk                  (0x3FUL << xPSR_ICI_IT_1_Pos)                  /*!< xPSR: ICI/IT part 1 Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t nPRIV:1;                    /*!< bit:      0  Execution privilege in Thread mode */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */

+    uint32_t FPCA:1;                     /*!< bit:      2  FP extension active flag */

+    uint32_t _reserved0:29;              /*!< bit:  3..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_FPCA_Pos                    2U                                            /*!< CONTROL: FPCA Position */

+#define CONTROL_FPCA_Msk                   (1UL << CONTROL_FPCA_Pos)                      /*!< CONTROL: FPCA Mask */

+

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+#define CONTROL_nPRIV_Pos                   0U                                            /*!< CONTROL: nPRIV Position */

+#define CONTROL_nPRIV_Msk                  (1UL /*<< CONTROL_nPRIV_Pos*/)                 /*!< CONTROL: nPRIV Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[8U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[24U];

+  __IOM uint32_t ICER[8U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[24U];

+  __IOM uint32_t ISPR[8U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[24U];

+  __IOM uint32_t ICPR[8U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[24U];

+  __IOM uint32_t IABR[8U];               /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */

+        uint32_t RESERVED4[56U];

+  __IOM uint8_t  IP[240U];               /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */

+        uint32_t RESERVED5[644U];

+  __OM  uint32_t STIR;                   /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */

+}  NVIC_Type;

+

+/* Software Triggered Interrupt Register Definitions */

+#define NVIC_STIR_INTID_Pos                 0U                                         /*!< STIR: INTLINESNUM Position */

+#define NVIC_STIR_INTID_Msk                (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/)        /*!< STIR: INTLINESNUM Mask */

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+  __IOM uint32_t VTOR;                   /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+  __IOM uint8_t  SHP[12U];               /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+  __IOM uint32_t CFSR;                   /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */

+  __IOM uint32_t HFSR;                   /*!< Offset: 0x02C (R/W)  HardFault Status Register */

+  __IOM uint32_t DFSR;                   /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */

+  __IOM uint32_t MMFAR;                  /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */

+  __IOM uint32_t BFAR;                   /*!< Offset: 0x038 (R/W)  BusFault Address Register */

+  __IOM uint32_t AFSR;                   /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */

+  __IM  uint32_t PFR[2U];                /*!< Offset: 0x040 (R/ )  Processor Feature Register */

+  __IM  uint32_t DFR;                    /*!< Offset: 0x048 (R/ )  Debug Feature Register */

+  __IM  uint32_t ADR;                    /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */

+  __IM  uint32_t MMFR[4U];               /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */

+  __IM  uint32_t ISAR[5U];               /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */

+        uint32_t RESERVED0[5U];

+  __IOM uint32_t CPACR;                  /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */

+#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_RETTOBASE_Pos             11U                                            /*!< SCB ICSR: RETTOBASE Position */

+#define SCB_ICSR_RETTOBASE_Msk             (1UL << SCB_ICSR_RETTOBASE_Pos)                /*!< SCB ICSR: RETTOBASE Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+/* SCB Vector Table Offset Register Definitions */

+#define SCB_VTOR_TBLOFF_Pos                 7U                                            /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos)           /*!< SCB VTOR: TBLOFF Mask */

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_PRIGROUP_Pos              8U                                            /*!< SCB AIRCR: PRIGROUP Position */

+#define SCB_AIRCR_PRIGROUP_Msk             (7UL << SCB_AIRCR_PRIGROUP_Pos)                /*!< SCB AIRCR: PRIGROUP Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+#define SCB_AIRCR_VECTRESET_Pos             0U                                            /*!< SCB AIRCR: VECTRESET Position */

+#define SCB_AIRCR_VECTRESET_Msk            (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/)           /*!< SCB AIRCR: VECTRESET Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */

+#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */

+

+#define SCB_CCR_BFHFNMIGN_Pos               8U                                            /*!< SCB CCR: BFHFNMIGN Position */

+#define SCB_CCR_BFHFNMIGN_Msk              (1UL << SCB_CCR_BFHFNMIGN_Pos)                 /*!< SCB CCR: BFHFNMIGN Mask */

+

+#define SCB_CCR_DIV_0_TRP_Pos               4U                                            /*!< SCB CCR: DIV_0_TRP Position */

+#define SCB_CCR_DIV_0_TRP_Msk              (1UL << SCB_CCR_DIV_0_TRP_Pos)                 /*!< SCB CCR: DIV_0_TRP Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+#define SCB_CCR_USERSETMPEND_Pos            1U                                            /*!< SCB CCR: USERSETMPEND Position */

+#define SCB_CCR_USERSETMPEND_Msk           (1UL << SCB_CCR_USERSETMPEND_Pos)              /*!< SCB CCR: USERSETMPEND Mask */

+

+#define SCB_CCR_NONBASETHRDENA_Pos          0U                                            /*!< SCB CCR: NONBASETHRDENA Position */

+#define SCB_CCR_NONBASETHRDENA_Msk         (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/)        /*!< SCB CCR: NONBASETHRDENA Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_USGFAULTENA_Pos          18U                                            /*!< SCB SHCSR: USGFAULTENA Position */

+#define SCB_SHCSR_USGFAULTENA_Msk          (1UL << SCB_SHCSR_USGFAULTENA_Pos)             /*!< SCB SHCSR: USGFAULTENA Mask */

+

+#define SCB_SHCSR_BUSFAULTENA_Pos          17U                                            /*!< SCB SHCSR: BUSFAULTENA Position */

+#define SCB_SHCSR_BUSFAULTENA_Msk          (1UL << SCB_SHCSR_BUSFAULTENA_Pos)             /*!< SCB SHCSR: BUSFAULTENA Mask */

+

+#define SCB_SHCSR_MEMFAULTENA_Pos          16U                                            /*!< SCB SHCSR: MEMFAULTENA Position */

+#define SCB_SHCSR_MEMFAULTENA_Msk          (1UL << SCB_SHCSR_MEMFAULTENA_Pos)             /*!< SCB SHCSR: MEMFAULTENA Mask */

+

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+#define SCB_SHCSR_BUSFAULTPENDED_Pos       14U                                            /*!< SCB SHCSR: BUSFAULTPENDED Position */

+#define SCB_SHCSR_BUSFAULTPENDED_Msk       (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos)          /*!< SCB SHCSR: BUSFAULTPENDED Mask */

+

+#define SCB_SHCSR_MEMFAULTPENDED_Pos       13U                                            /*!< SCB SHCSR: MEMFAULTPENDED Position */

+#define SCB_SHCSR_MEMFAULTPENDED_Msk       (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos)          /*!< SCB SHCSR: MEMFAULTPENDED Mask */

+

+#define SCB_SHCSR_USGFAULTPENDED_Pos       12U                                            /*!< SCB SHCSR: USGFAULTPENDED Position */

+#define SCB_SHCSR_USGFAULTPENDED_Msk       (1UL << SCB_SHCSR_USGFAULTPENDED_Pos)          /*!< SCB SHCSR: USGFAULTPENDED Mask */

+

+#define SCB_SHCSR_SYSTICKACT_Pos           11U                                            /*!< SCB SHCSR: SYSTICKACT Position */

+#define SCB_SHCSR_SYSTICKACT_Msk           (1UL << SCB_SHCSR_SYSTICKACT_Pos)              /*!< SCB SHCSR: SYSTICKACT Mask */

+

+#define SCB_SHCSR_PENDSVACT_Pos            10U                                            /*!< SCB SHCSR: PENDSVACT Position */

+#define SCB_SHCSR_PENDSVACT_Msk            (1UL << SCB_SHCSR_PENDSVACT_Pos)               /*!< SCB SHCSR: PENDSVACT Mask */

+

+#define SCB_SHCSR_MONITORACT_Pos            8U                                            /*!< SCB SHCSR: MONITORACT Position */

+#define SCB_SHCSR_MONITORACT_Msk           (1UL << SCB_SHCSR_MONITORACT_Pos)              /*!< SCB SHCSR: MONITORACT Mask */

+

+#define SCB_SHCSR_SVCALLACT_Pos             7U                                            /*!< SCB SHCSR: SVCALLACT Position */

+#define SCB_SHCSR_SVCALLACT_Msk            (1UL << SCB_SHCSR_SVCALLACT_Pos)               /*!< SCB SHCSR: SVCALLACT Mask */

+

+#define SCB_SHCSR_USGFAULTACT_Pos           3U                                            /*!< SCB SHCSR: USGFAULTACT Position */

+#define SCB_SHCSR_USGFAULTACT_Msk          (1UL << SCB_SHCSR_USGFAULTACT_Pos)             /*!< SCB SHCSR: USGFAULTACT Mask */

+

+#define SCB_SHCSR_BUSFAULTACT_Pos           1U                                            /*!< SCB SHCSR: BUSFAULTACT Position */

+#define SCB_SHCSR_BUSFAULTACT_Msk          (1UL << SCB_SHCSR_BUSFAULTACT_Pos)             /*!< SCB SHCSR: BUSFAULTACT Mask */

+

+#define SCB_SHCSR_MEMFAULTACT_Pos           0U                                            /*!< SCB SHCSR: MEMFAULTACT Position */

+#define SCB_SHCSR_MEMFAULTACT_Msk          (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/)         /*!< SCB SHCSR: MEMFAULTACT Mask */

+

+/* SCB Configurable Fault Status Register Definitions */

+#define SCB_CFSR_USGFAULTSR_Pos            16U                                            /*!< SCB CFSR: Usage Fault Status Register Position */

+#define SCB_CFSR_USGFAULTSR_Msk            (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos)          /*!< SCB CFSR: Usage Fault Status Register Mask */

+

+#define SCB_CFSR_BUSFAULTSR_Pos             8U                                            /*!< SCB CFSR: Bus Fault Status Register Position */

+#define SCB_CFSR_BUSFAULTSR_Msk            (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos)            /*!< SCB CFSR: Bus Fault Status Register Mask */

+

+#define SCB_CFSR_MEMFAULTSR_Pos             0U                                            /*!< SCB CFSR: Memory Manage Fault Status Register Position */

+#define SCB_CFSR_MEMFAULTSR_Msk            (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/)        /*!< SCB CFSR: Memory Manage Fault Status Register Mask */

+

+/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_MMARVALID_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 7U)               /*!< SCB CFSR (MMFSR): MMARVALID Position */

+#define SCB_CFSR_MMARVALID_Msk             (1UL << SCB_CFSR_MMARVALID_Pos)                /*!< SCB CFSR (MMFSR): MMARVALID Mask */

+

+#define SCB_CFSR_MLSPERR_Pos               (SCB_SHCSR_MEMFAULTACT_Pos + 5U)               /*!< SCB CFSR (MMFSR): MLSPERR Position */

+#define SCB_CFSR_MLSPERR_Msk               (1UL << SCB_CFSR_MLSPERR_Pos)                  /*!< SCB CFSR (MMFSR): MLSPERR Mask */

+

+#define SCB_CFSR_MSTKERR_Pos               (SCB_SHCSR_MEMFAULTACT_Pos + 4U)               /*!< SCB CFSR (MMFSR): MSTKERR Position */

+#define SCB_CFSR_MSTKERR_Msk               (1UL << SCB_CFSR_MSTKERR_Pos)                  /*!< SCB CFSR (MMFSR): MSTKERR Mask */

+

+#define SCB_CFSR_MUNSTKERR_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 3U)               /*!< SCB CFSR (MMFSR): MUNSTKERR Position */

+#define SCB_CFSR_MUNSTKERR_Msk             (1UL << SCB_CFSR_MUNSTKERR_Pos)                /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */

+

+#define SCB_CFSR_DACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 1U)               /*!< SCB CFSR (MMFSR): DACCVIOL Position */

+#define SCB_CFSR_DACCVIOL_Msk              (1UL << SCB_CFSR_DACCVIOL_Pos)                 /*!< SCB CFSR (MMFSR): DACCVIOL Mask */

+

+#define SCB_CFSR_IACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 0U)               /*!< SCB CFSR (MMFSR): IACCVIOL Position */

+#define SCB_CFSR_IACCVIOL_Msk              (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/)             /*!< SCB CFSR (MMFSR): IACCVIOL Mask */

+

+/* BusFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_BFARVALID_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 7U)                  /*!< SCB CFSR (BFSR): BFARVALID Position */

+#define SCB_CFSR_BFARVALID_Msk            (1UL << SCB_CFSR_BFARVALID_Pos)                 /*!< SCB CFSR (BFSR): BFARVALID Mask */

+

+#define SCB_CFSR_LSPERR_Pos               (SCB_CFSR_BUSFAULTSR_Pos + 5U)                  /*!< SCB CFSR (BFSR): LSPERR Position */

+#define SCB_CFSR_LSPERR_Msk               (1UL << SCB_CFSR_LSPERR_Pos)                    /*!< SCB CFSR (BFSR): LSPERR Mask */

+

+#define SCB_CFSR_STKERR_Pos               (SCB_CFSR_BUSFAULTSR_Pos + 4U)                  /*!< SCB CFSR (BFSR): STKERR Position */

+#define SCB_CFSR_STKERR_Msk               (1UL << SCB_CFSR_STKERR_Pos)                    /*!< SCB CFSR (BFSR): STKERR Mask */

+

+#define SCB_CFSR_UNSTKERR_Pos             (SCB_CFSR_BUSFAULTSR_Pos + 3U)                  /*!< SCB CFSR (BFSR): UNSTKERR Position */

+#define SCB_CFSR_UNSTKERR_Msk             (1UL << SCB_CFSR_UNSTKERR_Pos)                  /*!< SCB CFSR (BFSR): UNSTKERR Mask */

+

+#define SCB_CFSR_IMPRECISERR_Pos          (SCB_CFSR_BUSFAULTSR_Pos + 2U)                  /*!< SCB CFSR (BFSR): IMPRECISERR Position */

+#define SCB_CFSR_IMPRECISERR_Msk          (1UL << SCB_CFSR_IMPRECISERR_Pos)               /*!< SCB CFSR (BFSR): IMPRECISERR Mask */

+

+#define SCB_CFSR_PRECISERR_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 1U)                  /*!< SCB CFSR (BFSR): PRECISERR Position */

+#define SCB_CFSR_PRECISERR_Msk            (1UL << SCB_CFSR_PRECISERR_Pos)                 /*!< SCB CFSR (BFSR): PRECISERR Mask */

+

+#define SCB_CFSR_IBUSERR_Pos              (SCB_CFSR_BUSFAULTSR_Pos + 0U)                  /*!< SCB CFSR (BFSR): IBUSERR Position */

+#define SCB_CFSR_IBUSERR_Msk              (1UL << SCB_CFSR_IBUSERR_Pos)                   /*!< SCB CFSR (BFSR): IBUSERR Mask */

+

+/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_DIVBYZERO_Pos            (SCB_CFSR_USGFAULTSR_Pos + 9U)                  /*!< SCB CFSR (UFSR): DIVBYZERO Position */

+#define SCB_CFSR_DIVBYZERO_Msk            (1UL << SCB_CFSR_DIVBYZERO_Pos)                 /*!< SCB CFSR (UFSR): DIVBYZERO Mask */

+

+#define SCB_CFSR_UNALIGNED_Pos            (SCB_CFSR_USGFAULTSR_Pos + 8U)                  /*!< SCB CFSR (UFSR): UNALIGNED Position */

+#define SCB_CFSR_UNALIGNED_Msk            (1UL << SCB_CFSR_UNALIGNED_Pos)                 /*!< SCB CFSR (UFSR): UNALIGNED Mask */

+

+#define SCB_CFSR_NOCP_Pos                 (SCB_CFSR_USGFAULTSR_Pos + 3U)                  /*!< SCB CFSR (UFSR): NOCP Position */

+#define SCB_CFSR_NOCP_Msk                 (1UL << SCB_CFSR_NOCP_Pos)                      /*!< SCB CFSR (UFSR): NOCP Mask */

+

+#define SCB_CFSR_INVPC_Pos                (SCB_CFSR_USGFAULTSR_Pos + 2U)                  /*!< SCB CFSR (UFSR): INVPC Position */

+#define SCB_CFSR_INVPC_Msk                (1UL << SCB_CFSR_INVPC_Pos)                     /*!< SCB CFSR (UFSR): INVPC Mask */

+

+#define SCB_CFSR_INVSTATE_Pos             (SCB_CFSR_USGFAULTSR_Pos + 1U)                  /*!< SCB CFSR (UFSR): INVSTATE Position */

+#define SCB_CFSR_INVSTATE_Msk             (1UL << SCB_CFSR_INVSTATE_Pos)                  /*!< SCB CFSR (UFSR): INVSTATE Mask */

+

+#define SCB_CFSR_UNDEFINSTR_Pos           (SCB_CFSR_USGFAULTSR_Pos + 0U)                  /*!< SCB CFSR (UFSR): UNDEFINSTR Position */

+#define SCB_CFSR_UNDEFINSTR_Msk           (1UL << SCB_CFSR_UNDEFINSTR_Pos)                /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */

+

+/* SCB Hard Fault Status Register Definitions */

+#define SCB_HFSR_DEBUGEVT_Pos              31U                                            /*!< SCB HFSR: DEBUGEVT Position */

+#define SCB_HFSR_DEBUGEVT_Msk              (1UL << SCB_HFSR_DEBUGEVT_Pos)                 /*!< SCB HFSR: DEBUGEVT Mask */

+

+#define SCB_HFSR_FORCED_Pos                30U                                            /*!< SCB HFSR: FORCED Position */

+#define SCB_HFSR_FORCED_Msk                (1UL << SCB_HFSR_FORCED_Pos)                   /*!< SCB HFSR: FORCED Mask */

+

+#define SCB_HFSR_VECTTBL_Pos                1U                                            /*!< SCB HFSR: VECTTBL Position */

+#define SCB_HFSR_VECTTBL_Msk               (1UL << SCB_HFSR_VECTTBL_Pos)                  /*!< SCB HFSR: VECTTBL Mask */

+

+/* SCB Debug Fault Status Register Definitions */

+#define SCB_DFSR_EXTERNAL_Pos               4U                                            /*!< SCB DFSR: EXTERNAL Position */

+#define SCB_DFSR_EXTERNAL_Msk              (1UL << SCB_DFSR_EXTERNAL_Pos)                 /*!< SCB DFSR: EXTERNAL Mask */

+

+#define SCB_DFSR_VCATCH_Pos                 3U                                            /*!< SCB DFSR: VCATCH Position */

+#define SCB_DFSR_VCATCH_Msk                (1UL << SCB_DFSR_VCATCH_Pos)                   /*!< SCB DFSR: VCATCH Mask */

+

+#define SCB_DFSR_DWTTRAP_Pos                2U                                            /*!< SCB DFSR: DWTTRAP Position */

+#define SCB_DFSR_DWTTRAP_Msk               (1UL << SCB_DFSR_DWTTRAP_Pos)                  /*!< SCB DFSR: DWTTRAP Mask */

+

+#define SCB_DFSR_BKPT_Pos                   1U                                            /*!< SCB DFSR: BKPT Position */

+#define SCB_DFSR_BKPT_Msk                  (1UL << SCB_DFSR_BKPT_Pos)                     /*!< SCB DFSR: BKPT Mask */

+

+#define SCB_DFSR_HALTED_Pos                 0U                                            /*!< SCB DFSR: HALTED Position */

+#define SCB_DFSR_HALTED_Msk                (1UL /*<< SCB_DFSR_HALTED_Pos*/)               /*!< SCB DFSR: HALTED Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)

+  \brief    Type definitions for the System Control and ID Register not in the SCB

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control and ID Register not in the SCB.

+ */

+typedef struct

+{

+        uint32_t RESERVED0[1U];

+  __IM  uint32_t ICTR;                   /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */

+  __IOM uint32_t ACTLR;                  /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */

+} SCnSCB_Type;

+

+/* Interrupt Controller Type Register Definitions */

+#define SCnSCB_ICTR_INTLINESNUM_Pos         0U                                         /*!< ICTR: INTLINESNUM Position */

+#define SCnSCB_ICTR_INTLINESNUM_Msk        (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/)  /*!< ICTR: INTLINESNUM Mask */

+

+/* Auxiliary Control Register Definitions */

+#define SCnSCB_ACTLR_DISOOFP_Pos            9U                                         /*!< ACTLR: DISOOFP Position */

+#define SCnSCB_ACTLR_DISOOFP_Msk           (1UL << SCnSCB_ACTLR_DISOOFP_Pos)           /*!< ACTLR: DISOOFP Mask */

+

+#define SCnSCB_ACTLR_DISFPCA_Pos            8U                                         /*!< ACTLR: DISFPCA Position */

+#define SCnSCB_ACTLR_DISFPCA_Msk           (1UL << SCnSCB_ACTLR_DISFPCA_Pos)           /*!< ACTLR: DISFPCA Mask */

+

+#define SCnSCB_ACTLR_DISFOLD_Pos            2U                                         /*!< ACTLR: DISFOLD Position */

+#define SCnSCB_ACTLR_DISFOLD_Msk           (1UL << SCnSCB_ACTLR_DISFOLD_Pos)           /*!< ACTLR: DISFOLD Mask */

+

+#define SCnSCB_ACTLR_DISDEFWBUF_Pos         1U                                         /*!< ACTLR: DISDEFWBUF Position */

+#define SCnSCB_ACTLR_DISDEFWBUF_Msk        (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos)        /*!< ACTLR: DISDEFWBUF Mask */

+

+#define SCnSCB_ACTLR_DISMCYCINT_Pos         0U                                         /*!< ACTLR: DISMCYCINT Position */

+#define SCnSCB_ACTLR_DISMCYCINT_Msk        (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/)    /*!< ACTLR: DISMCYCINT Mask */

+

+/*@} end of group CMSIS_SCnotSCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)

+  \brief    Type definitions for the Instrumentation Trace Macrocell (ITM)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).

+ */

+typedef struct

+{

+  __OM  union

+  {

+    __OM  uint8_t    u8;                 /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */

+    __OM  uint16_t   u16;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */

+    __OM  uint32_t   u32;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */

+  }  PORT [32U];                         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */

+        uint32_t RESERVED0[864U];

+  __IOM uint32_t TER;                    /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */

+        uint32_t RESERVED1[15U];

+  __IOM uint32_t TPR;                    /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */

+        uint32_t RESERVED2[15U];

+  __IOM uint32_t TCR;                    /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */

+        uint32_t RESERVED3[29U];

+  __OM  uint32_t IWR;                    /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */

+  __IM  uint32_t IRR;                    /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */

+  __IOM uint32_t IMCR;                   /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */

+        uint32_t RESERVED4[43U];

+  __OM  uint32_t LAR;                    /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */

+  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */

+        uint32_t RESERVED5[6U];

+  __IM  uint32_t PID4;                   /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */

+  __IM  uint32_t PID5;                   /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */

+  __IM  uint32_t PID6;                   /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */

+  __IM  uint32_t PID7;                   /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */

+  __IM  uint32_t PID0;                   /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */

+  __IM  uint32_t PID1;                   /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */

+  __IM  uint32_t PID2;                   /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */

+  __IM  uint32_t PID3;                   /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */

+  __IM  uint32_t CID0;                   /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */

+  __IM  uint32_t CID1;                   /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */

+  __IM  uint32_t CID2;                   /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */

+  __IM  uint32_t CID3;                   /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */

+} ITM_Type;

+

+/* ITM Trace Privilege Register Definitions */

+#define ITM_TPR_PRIVMASK_Pos                0U                                            /*!< ITM TPR: PRIVMASK Position */

+#define ITM_TPR_PRIVMASK_Msk               (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/)     /*!< ITM TPR: PRIVMASK Mask */

+

+/* ITM Trace Control Register Definitions */

+#define ITM_TCR_BUSY_Pos                   23U                                            /*!< ITM TCR: BUSY Position */

+#define ITM_TCR_BUSY_Msk                   (1UL << ITM_TCR_BUSY_Pos)                      /*!< ITM TCR: BUSY Mask */

+

+#define ITM_TCR_TraceBusID_Pos             16U                                            /*!< ITM TCR: ATBID Position */

+#define ITM_TCR_TraceBusID_Msk             (0x7FUL << ITM_TCR_TraceBusID_Pos)             /*!< ITM TCR: ATBID Mask */

+

+#define ITM_TCR_GTSFREQ_Pos                10U                                            /*!< ITM TCR: Global timestamp frequency Position */

+#define ITM_TCR_GTSFREQ_Msk                (3UL << ITM_TCR_GTSFREQ_Pos)                   /*!< ITM TCR: Global timestamp frequency Mask */

+

+#define ITM_TCR_TSPrescale_Pos              8U                                            /*!< ITM TCR: TSPrescale Position */

+#define ITM_TCR_TSPrescale_Msk             (3UL << ITM_TCR_TSPrescale_Pos)                /*!< ITM TCR: TSPrescale Mask */

+

+#define ITM_TCR_SWOENA_Pos                  4U                                            /*!< ITM TCR: SWOENA Position */

+#define ITM_TCR_SWOENA_Msk                 (1UL << ITM_TCR_SWOENA_Pos)                    /*!< ITM TCR: SWOENA Mask */

+

+#define ITM_TCR_DWTENA_Pos                  3U                                            /*!< ITM TCR: DWTENA Position */

+#define ITM_TCR_DWTENA_Msk                 (1UL << ITM_TCR_DWTENA_Pos)                    /*!< ITM TCR: DWTENA Mask */

+

+#define ITM_TCR_SYNCENA_Pos                 2U                                            /*!< ITM TCR: SYNCENA Position */

+#define ITM_TCR_SYNCENA_Msk                (1UL << ITM_TCR_SYNCENA_Pos)                   /*!< ITM TCR: SYNCENA Mask */

+

+#define ITM_TCR_TSENA_Pos                   1U                                            /*!< ITM TCR: TSENA Position */

+#define ITM_TCR_TSENA_Msk                  (1UL << ITM_TCR_TSENA_Pos)                     /*!< ITM TCR: TSENA Mask */

+

+#define ITM_TCR_ITMENA_Pos                  0U                                            /*!< ITM TCR: ITM Enable bit Position */

+#define ITM_TCR_ITMENA_Msk                 (1UL /*<< ITM_TCR_ITMENA_Pos*/)                /*!< ITM TCR: ITM Enable bit Mask */

+

+/* ITM Integration Write Register Definitions */

+#define ITM_IWR_ATVALIDM_Pos                0U                                            /*!< ITM IWR: ATVALIDM Position */

+#define ITM_IWR_ATVALIDM_Msk               (1UL /*<< ITM_IWR_ATVALIDM_Pos*/)              /*!< ITM IWR: ATVALIDM Mask */

+

+/* ITM Integration Read Register Definitions */

+#define ITM_IRR_ATREADYM_Pos                0U                                            /*!< ITM IRR: ATREADYM Position */

+#define ITM_IRR_ATREADYM_Msk               (1UL /*<< ITM_IRR_ATREADYM_Pos*/)              /*!< ITM IRR: ATREADYM Mask */

+

+/* ITM Integration Mode Control Register Definitions */

+#define ITM_IMCR_INTEGRATION_Pos            0U                                            /*!< ITM IMCR: INTEGRATION Position */

+#define ITM_IMCR_INTEGRATION_Msk           (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/)          /*!< ITM IMCR: INTEGRATION Mask */

+

+/* ITM Lock Status Register Definitions */

+#define ITM_LSR_ByteAcc_Pos                 2U                                            /*!< ITM LSR: ByteAcc Position */

+#define ITM_LSR_ByteAcc_Msk                (1UL << ITM_LSR_ByteAcc_Pos)                   /*!< ITM LSR: ByteAcc Mask */

+

+#define ITM_LSR_Access_Pos                  1U                                            /*!< ITM LSR: Access Position */

+#define ITM_LSR_Access_Msk                 (1UL << ITM_LSR_Access_Pos)                    /*!< ITM LSR: Access Mask */

+

+#define ITM_LSR_Present_Pos                 0U                                            /*!< ITM LSR: Present Position */

+#define ITM_LSR_Present_Msk                (1UL /*<< ITM_LSR_Present_Pos*/)               /*!< ITM LSR: Present Mask */

+

+/*@}*/ /* end of group CMSIS_ITM */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)

+  \brief    Type definitions for the Data Watchpoint and Trace (DWT)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Data Watchpoint and Trace Register (DWT).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  Control Register */

+  __IOM uint32_t CYCCNT;                 /*!< Offset: 0x004 (R/W)  Cycle Count Register */

+  __IOM uint32_t CPICNT;                 /*!< Offset: 0x008 (R/W)  CPI Count Register */

+  __IOM uint32_t EXCCNT;                 /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */

+  __IOM uint32_t SLEEPCNT;               /*!< Offset: 0x010 (R/W)  Sleep Count Register */

+  __IOM uint32_t LSUCNT;                 /*!< Offset: 0x014 (R/W)  LSU Count Register */

+  __IOM uint32_t FOLDCNT;                /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */

+  __IM  uint32_t PCSR;                   /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */

+  __IOM uint32_t COMP0;                  /*!< Offset: 0x020 (R/W)  Comparator Register 0 */

+  __IOM uint32_t MASK0;                  /*!< Offset: 0x024 (R/W)  Mask Register 0 */

+  __IOM uint32_t FUNCTION0;              /*!< Offset: 0x028 (R/W)  Function Register 0 */

+        uint32_t RESERVED0[1U];

+  __IOM uint32_t COMP1;                  /*!< Offset: 0x030 (R/W)  Comparator Register 1 */

+  __IOM uint32_t MASK1;                  /*!< Offset: 0x034 (R/W)  Mask Register 1 */

+  __IOM uint32_t FUNCTION1;              /*!< Offset: 0x038 (R/W)  Function Register 1 */

+        uint32_t RESERVED1[1U];

+  __IOM uint32_t COMP2;                  /*!< Offset: 0x040 (R/W)  Comparator Register 2 */

+  __IOM uint32_t MASK2;                  /*!< Offset: 0x044 (R/W)  Mask Register 2 */

+  __IOM uint32_t FUNCTION2;              /*!< Offset: 0x048 (R/W)  Function Register 2 */

+        uint32_t RESERVED2[1U];

+  __IOM uint32_t COMP3;                  /*!< Offset: 0x050 (R/W)  Comparator Register 3 */

+  __IOM uint32_t MASK3;                  /*!< Offset: 0x054 (R/W)  Mask Register 3 */

+  __IOM uint32_t FUNCTION3;              /*!< Offset: 0x058 (R/W)  Function Register 3 */

+} DWT_Type;

+

+/* DWT Control Register Definitions */

+#define DWT_CTRL_NUMCOMP_Pos               28U                                         /*!< DWT CTRL: NUMCOMP Position */

+#define DWT_CTRL_NUMCOMP_Msk               (0xFUL << DWT_CTRL_NUMCOMP_Pos)             /*!< DWT CTRL: NUMCOMP Mask */

+

+#define DWT_CTRL_NOTRCPKT_Pos              27U                                         /*!< DWT CTRL: NOTRCPKT Position */

+#define DWT_CTRL_NOTRCPKT_Msk              (0x1UL << DWT_CTRL_NOTRCPKT_Pos)            /*!< DWT CTRL: NOTRCPKT Mask */

+

+#define DWT_CTRL_NOEXTTRIG_Pos             26U                                         /*!< DWT CTRL: NOEXTTRIG Position */

+#define DWT_CTRL_NOEXTTRIG_Msk             (0x1UL << DWT_CTRL_NOEXTTRIG_Pos)           /*!< DWT CTRL: NOEXTTRIG Mask */

+

+#define DWT_CTRL_NOCYCCNT_Pos              25U                                         /*!< DWT CTRL: NOCYCCNT Position */

+#define DWT_CTRL_NOCYCCNT_Msk              (0x1UL << DWT_CTRL_NOCYCCNT_Pos)            /*!< DWT CTRL: NOCYCCNT Mask */

+

+#define DWT_CTRL_NOPRFCNT_Pos              24U                                         /*!< DWT CTRL: NOPRFCNT Position */

+#define DWT_CTRL_NOPRFCNT_Msk              (0x1UL << DWT_CTRL_NOPRFCNT_Pos)            /*!< DWT CTRL: NOPRFCNT Mask */

+

+#define DWT_CTRL_CYCEVTENA_Pos             22U                                         /*!< DWT CTRL: CYCEVTENA Position */

+#define DWT_CTRL_CYCEVTENA_Msk             (0x1UL << DWT_CTRL_CYCEVTENA_Pos)           /*!< DWT CTRL: CYCEVTENA Mask */

+

+#define DWT_CTRL_FOLDEVTENA_Pos            21U                                         /*!< DWT CTRL: FOLDEVTENA Position */

+#define DWT_CTRL_FOLDEVTENA_Msk            (0x1UL << DWT_CTRL_FOLDEVTENA_Pos)          /*!< DWT CTRL: FOLDEVTENA Mask */

+

+#define DWT_CTRL_LSUEVTENA_Pos             20U                                         /*!< DWT CTRL: LSUEVTENA Position */

+#define DWT_CTRL_LSUEVTENA_Msk             (0x1UL << DWT_CTRL_LSUEVTENA_Pos)           /*!< DWT CTRL: LSUEVTENA Mask */

+

+#define DWT_CTRL_SLEEPEVTENA_Pos           19U                                         /*!< DWT CTRL: SLEEPEVTENA Position */

+#define DWT_CTRL_SLEEPEVTENA_Msk           (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos)         /*!< DWT CTRL: SLEEPEVTENA Mask */

+

+#define DWT_CTRL_EXCEVTENA_Pos             18U                                         /*!< DWT CTRL: EXCEVTENA Position */

+#define DWT_CTRL_EXCEVTENA_Msk             (0x1UL << DWT_CTRL_EXCEVTENA_Pos)           /*!< DWT CTRL: EXCEVTENA Mask */

+

+#define DWT_CTRL_CPIEVTENA_Pos             17U                                         /*!< DWT CTRL: CPIEVTENA Position */

+#define DWT_CTRL_CPIEVTENA_Msk             (0x1UL << DWT_CTRL_CPIEVTENA_Pos)           /*!< DWT CTRL: CPIEVTENA Mask */

+

+#define DWT_CTRL_EXCTRCENA_Pos             16U                                         /*!< DWT CTRL: EXCTRCENA Position */

+#define DWT_CTRL_EXCTRCENA_Msk             (0x1UL << DWT_CTRL_EXCTRCENA_Pos)           /*!< DWT CTRL: EXCTRCENA Mask */

+

+#define DWT_CTRL_PCSAMPLENA_Pos            12U                                         /*!< DWT CTRL: PCSAMPLENA Position */

+#define DWT_CTRL_PCSAMPLENA_Msk            (0x1UL << DWT_CTRL_PCSAMPLENA_Pos)          /*!< DWT CTRL: PCSAMPLENA Mask */

+

+#define DWT_CTRL_SYNCTAP_Pos               10U                                         /*!< DWT CTRL: SYNCTAP Position */

+#define DWT_CTRL_SYNCTAP_Msk               (0x3UL << DWT_CTRL_SYNCTAP_Pos)             /*!< DWT CTRL: SYNCTAP Mask */

+

+#define DWT_CTRL_CYCTAP_Pos                 9U                                         /*!< DWT CTRL: CYCTAP Position */

+#define DWT_CTRL_CYCTAP_Msk                (0x1UL << DWT_CTRL_CYCTAP_Pos)              /*!< DWT CTRL: CYCTAP Mask */

+

+#define DWT_CTRL_POSTINIT_Pos               5U                                         /*!< DWT CTRL: POSTINIT Position */

+#define DWT_CTRL_POSTINIT_Msk              (0xFUL << DWT_CTRL_POSTINIT_Pos)            /*!< DWT CTRL: POSTINIT Mask */

+

+#define DWT_CTRL_POSTPRESET_Pos             1U                                         /*!< DWT CTRL: POSTPRESET Position */

+#define DWT_CTRL_POSTPRESET_Msk            (0xFUL << DWT_CTRL_POSTPRESET_Pos)          /*!< DWT CTRL: POSTPRESET Mask */

+

+#define DWT_CTRL_CYCCNTENA_Pos              0U                                         /*!< DWT CTRL: CYCCNTENA Position */

+#define DWT_CTRL_CYCCNTENA_Msk             (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/)       /*!< DWT CTRL: CYCCNTENA Mask */

+

+/* DWT CPI Count Register Definitions */

+#define DWT_CPICNT_CPICNT_Pos               0U                                         /*!< DWT CPICNT: CPICNT Position */

+#define DWT_CPICNT_CPICNT_Msk              (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/)       /*!< DWT CPICNT: CPICNT Mask */

+

+/* DWT Exception Overhead Count Register Definitions */

+#define DWT_EXCCNT_EXCCNT_Pos               0U                                         /*!< DWT EXCCNT: EXCCNT Position */

+#define DWT_EXCCNT_EXCCNT_Msk              (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/)       /*!< DWT EXCCNT: EXCCNT Mask */

+

+/* DWT Sleep Count Register Definitions */

+#define DWT_SLEEPCNT_SLEEPCNT_Pos           0U                                         /*!< DWT SLEEPCNT: SLEEPCNT Position */

+#define DWT_SLEEPCNT_SLEEPCNT_Msk          (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/)   /*!< DWT SLEEPCNT: SLEEPCNT Mask */

+

+/* DWT LSU Count Register Definitions */

+#define DWT_LSUCNT_LSUCNT_Pos               0U                                         /*!< DWT LSUCNT: LSUCNT Position */

+#define DWT_LSUCNT_LSUCNT_Msk              (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/)       /*!< DWT LSUCNT: LSUCNT Mask */

+

+/* DWT Folded-instruction Count Register Definitions */

+#define DWT_FOLDCNT_FOLDCNT_Pos             0U                                         /*!< DWT FOLDCNT: FOLDCNT Position */

+#define DWT_FOLDCNT_FOLDCNT_Msk            (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/)     /*!< DWT FOLDCNT: FOLDCNT Mask */

+

+/* DWT Comparator Mask Register Definitions */

+#define DWT_MASK_MASK_Pos                   0U                                         /*!< DWT MASK: MASK Position */

+#define DWT_MASK_MASK_Msk                  (0x1FUL /*<< DWT_MASK_MASK_Pos*/)           /*!< DWT MASK: MASK Mask */

+

+/* DWT Comparator Function Register Definitions */

+#define DWT_FUNCTION_MATCHED_Pos           24U                                         /*!< DWT FUNCTION: MATCHED Position */

+#define DWT_FUNCTION_MATCHED_Msk           (0x1UL << DWT_FUNCTION_MATCHED_Pos)         /*!< DWT FUNCTION: MATCHED Mask */

+

+#define DWT_FUNCTION_DATAVADDR1_Pos        16U                                         /*!< DWT FUNCTION: DATAVADDR1 Position */

+#define DWT_FUNCTION_DATAVADDR1_Msk        (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos)      /*!< DWT FUNCTION: DATAVADDR1 Mask */

+

+#define DWT_FUNCTION_DATAVADDR0_Pos        12U                                         /*!< DWT FUNCTION: DATAVADDR0 Position */

+#define DWT_FUNCTION_DATAVADDR0_Msk        (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos)      /*!< DWT FUNCTION: DATAVADDR0 Mask */

+

+#define DWT_FUNCTION_DATAVSIZE_Pos         10U                                         /*!< DWT FUNCTION: DATAVSIZE Position */

+#define DWT_FUNCTION_DATAVSIZE_Msk         (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos)       /*!< DWT FUNCTION: DATAVSIZE Mask */

+

+#define DWT_FUNCTION_LNK1ENA_Pos            9U                                         /*!< DWT FUNCTION: LNK1ENA Position */

+#define DWT_FUNCTION_LNK1ENA_Msk           (0x1UL << DWT_FUNCTION_LNK1ENA_Pos)         /*!< DWT FUNCTION: LNK1ENA Mask */

+

+#define DWT_FUNCTION_DATAVMATCH_Pos         8U                                         /*!< DWT FUNCTION: DATAVMATCH Position */

+#define DWT_FUNCTION_DATAVMATCH_Msk        (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos)      /*!< DWT FUNCTION: DATAVMATCH Mask */

+

+#define DWT_FUNCTION_CYCMATCH_Pos           7U                                         /*!< DWT FUNCTION: CYCMATCH Position */

+#define DWT_FUNCTION_CYCMATCH_Msk          (0x1UL << DWT_FUNCTION_CYCMATCH_Pos)        /*!< DWT FUNCTION: CYCMATCH Mask */

+

+#define DWT_FUNCTION_EMITRANGE_Pos          5U                                         /*!< DWT FUNCTION: EMITRANGE Position */

+#define DWT_FUNCTION_EMITRANGE_Msk         (0x1UL << DWT_FUNCTION_EMITRANGE_Pos)       /*!< DWT FUNCTION: EMITRANGE Mask */

+

+#define DWT_FUNCTION_FUNCTION_Pos           0U                                         /*!< DWT FUNCTION: FUNCTION Position */

+#define DWT_FUNCTION_FUNCTION_Msk          (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/)    /*!< DWT FUNCTION: FUNCTION Mask */

+

+/*@}*/ /* end of group CMSIS_DWT */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_TPI     Trace Port Interface (TPI)

+  \brief    Type definitions for the Trace Port Interface (TPI)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Trace Port Interface Register (TPI).

+ */

+typedef struct

+{

+  __IM  uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */

+  __IOM uint32_t CSPSR;                  /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */

+        uint32_t RESERVED0[2U];

+  __IOM uint32_t ACPR;                   /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */

+        uint32_t RESERVED1[55U];

+  __IOM uint32_t SPPR;                   /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */

+        uint32_t RESERVED2[131U];

+  __IM  uint32_t FFSR;                   /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */

+  __IOM uint32_t FFCR;                   /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */

+  __IM  uint32_t FSCR;                   /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */

+        uint32_t RESERVED3[759U];

+  __IM  uint32_t TRIGGER;                /*!< Offset: 0xEE8 (R/ )  TRIGGER Register */

+  __IM  uint32_t FIFO0;                  /*!< Offset: 0xEEC (R/ )  Integration ETM Data */

+  __IM  uint32_t ITATBCTR2;              /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */

+        uint32_t RESERVED4[1U];

+  __IM  uint32_t ITATBCTR0;              /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */

+  __IM  uint32_t FIFO1;                  /*!< Offset: 0xEFC (R/ )  Integration ITM Data */

+  __IOM uint32_t ITCTRL;                 /*!< Offset: 0xF00 (R/W)  Integration Mode Control */

+        uint32_t RESERVED5[39U];

+  __IOM uint32_t CLAIMSET;               /*!< Offset: 0xFA0 (R/W)  Claim tag set */

+  __IOM uint32_t CLAIMCLR;               /*!< Offset: 0xFA4 (R/W)  Claim tag clear */

+        uint32_t RESERVED7[8U];

+  __IM  uint32_t DEVID;                  /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */

+  __IM  uint32_t DEVTYPE;                /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */

+} TPI_Type;

+

+/* TPI Asynchronous Clock Prescaler Register Definitions */

+#define TPI_ACPR_PRESCALER_Pos              0U                                         /*!< TPI ACPR: PRESCALER Position */

+#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< TPI ACPR: PRESCALER Mask */

+

+/* TPI Selected Pin Protocol Register Definitions */

+#define TPI_SPPR_TXMODE_Pos                 0U                                         /*!< TPI SPPR: TXMODE Position */

+#define TPI_SPPR_TXMODE_Msk                (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/)          /*!< TPI SPPR: TXMODE Mask */

+

+/* TPI Formatter and Flush Status Register Definitions */

+#define TPI_FFSR_FtNonStop_Pos              3U                                         /*!< TPI FFSR: FtNonStop Position */

+#define TPI_FFSR_FtNonStop_Msk             (0x1UL << TPI_FFSR_FtNonStop_Pos)           /*!< TPI FFSR: FtNonStop Mask */

+

+#define TPI_FFSR_TCPresent_Pos              2U                                         /*!< TPI FFSR: TCPresent Position */

+#define TPI_FFSR_TCPresent_Msk             (0x1UL << TPI_FFSR_TCPresent_Pos)           /*!< TPI FFSR: TCPresent Mask */

+

+#define TPI_FFSR_FtStopped_Pos              1U                                         /*!< TPI FFSR: FtStopped Position */

+#define TPI_FFSR_FtStopped_Msk             (0x1UL << TPI_FFSR_FtStopped_Pos)           /*!< TPI FFSR: FtStopped Mask */

+

+#define TPI_FFSR_FlInProg_Pos               0U                                         /*!< TPI FFSR: FlInProg Position */

+#define TPI_FFSR_FlInProg_Msk              (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/)        /*!< TPI FFSR: FlInProg Mask */

+

+/* TPI Formatter and Flush Control Register Definitions */

+#define TPI_FFCR_TrigIn_Pos                 8U                                         /*!< TPI FFCR: TrigIn Position */

+#define TPI_FFCR_TrigIn_Msk                (0x1UL << TPI_FFCR_TrigIn_Pos)              /*!< TPI FFCR: TrigIn Mask */

+

+#define TPI_FFCR_EnFCont_Pos                1U                                         /*!< TPI FFCR: EnFCont Position */

+#define TPI_FFCR_EnFCont_Msk               (0x1UL << TPI_FFCR_EnFCont_Pos)             /*!< TPI FFCR: EnFCont Mask */

+

+/* TPI TRIGGER Register Definitions */

+#define TPI_TRIGGER_TRIGGER_Pos             0U                                         /*!< TPI TRIGGER: TRIGGER Position */

+#define TPI_TRIGGER_TRIGGER_Msk            (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/)      /*!< TPI TRIGGER: TRIGGER Mask */

+

+/* TPI Integration ETM Data Register Definitions (FIFO0) */

+#define TPI_FIFO0_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO0: ITM_ATVALID Position */

+#define TPI_FIFO0_ITM_ATVALID_Msk          (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos)        /*!< TPI FIFO0: ITM_ATVALID Mask */

+

+#define TPI_FIFO0_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO0: ITM_bytecount Position */

+#define TPI_FIFO0_ITM_bytecount_Msk        (0x3UL << TPI_FIFO0_ITM_bytecount_Pos)      /*!< TPI FIFO0: ITM_bytecount Mask */

+

+#define TPI_FIFO0_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO0: ETM_ATVALID Position */

+#define TPI_FIFO0_ETM_ATVALID_Msk          (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos)        /*!< TPI FIFO0: ETM_ATVALID Mask */

+

+#define TPI_FIFO0_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO0: ETM_bytecount Position */

+#define TPI_FIFO0_ETM_bytecount_Msk        (0x3UL << TPI_FIFO0_ETM_bytecount_Pos)      /*!< TPI FIFO0: ETM_bytecount Mask */

+

+#define TPI_FIFO0_ETM2_Pos                 16U                                         /*!< TPI FIFO0: ETM2 Position */

+#define TPI_FIFO0_ETM2_Msk                 (0xFFUL << TPI_FIFO0_ETM2_Pos)              /*!< TPI FIFO0: ETM2 Mask */

+

+#define TPI_FIFO0_ETM1_Pos                  8U                                         /*!< TPI FIFO0: ETM1 Position */

+#define TPI_FIFO0_ETM1_Msk                 (0xFFUL << TPI_FIFO0_ETM1_Pos)              /*!< TPI FIFO0: ETM1 Mask */

+

+#define TPI_FIFO0_ETM0_Pos                  0U                                         /*!< TPI FIFO0: ETM0 Position */

+#define TPI_FIFO0_ETM0_Msk                 (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/)          /*!< TPI FIFO0: ETM0 Mask */

+

+/* TPI ITATBCTR2 Register Definitions */

+#define TPI_ITATBCTR2_ATREADY2_Pos          0U                                         /*!< TPI ITATBCTR2: ATREADY2 Position */

+#define TPI_ITATBCTR2_ATREADY2_Msk         (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/)   /*!< TPI ITATBCTR2: ATREADY2 Mask */

+

+#define TPI_ITATBCTR2_ATREADY1_Pos          0U                                         /*!< TPI ITATBCTR2: ATREADY1 Position */

+#define TPI_ITATBCTR2_ATREADY1_Msk         (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/)   /*!< TPI ITATBCTR2: ATREADY1 Mask */

+

+/* TPI Integration ITM Data Register Definitions (FIFO1) */

+#define TPI_FIFO1_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO1: ITM_ATVALID Position */

+#define TPI_FIFO1_ITM_ATVALID_Msk          (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos)        /*!< TPI FIFO1: ITM_ATVALID Mask */

+

+#define TPI_FIFO1_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO1: ITM_bytecount Position */

+#define TPI_FIFO1_ITM_bytecount_Msk        (0x3UL << TPI_FIFO1_ITM_bytecount_Pos)      /*!< TPI FIFO1: ITM_bytecount Mask */

+

+#define TPI_FIFO1_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO1: ETM_ATVALID Position */

+#define TPI_FIFO1_ETM_ATVALID_Msk          (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos)        /*!< TPI FIFO1: ETM_ATVALID Mask */

+

+#define TPI_FIFO1_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO1: ETM_bytecount Position */

+#define TPI_FIFO1_ETM_bytecount_Msk        (0x3UL << TPI_FIFO1_ETM_bytecount_Pos)      /*!< TPI FIFO1: ETM_bytecount Mask */

+

+#define TPI_FIFO1_ITM2_Pos                 16U                                         /*!< TPI FIFO1: ITM2 Position */

+#define TPI_FIFO1_ITM2_Msk                 (0xFFUL << TPI_FIFO1_ITM2_Pos)              /*!< TPI FIFO1: ITM2 Mask */

+

+#define TPI_FIFO1_ITM1_Pos                  8U                                         /*!< TPI FIFO1: ITM1 Position */

+#define TPI_FIFO1_ITM1_Msk                 (0xFFUL << TPI_FIFO1_ITM1_Pos)              /*!< TPI FIFO1: ITM1 Mask */

+

+#define TPI_FIFO1_ITM0_Pos                  0U                                         /*!< TPI FIFO1: ITM0 Position */

+#define TPI_FIFO1_ITM0_Msk                 (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/)          /*!< TPI FIFO1: ITM0 Mask */

+

+/* TPI ITATBCTR0 Register Definitions */

+#define TPI_ITATBCTR0_ATREADY2_Pos          0U                                         /*!< TPI ITATBCTR0: ATREADY2 Position */

+#define TPI_ITATBCTR0_ATREADY2_Msk         (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/)   /*!< TPI ITATBCTR0: ATREADY2 Mask */

+

+#define TPI_ITATBCTR0_ATREADY1_Pos          0U                                         /*!< TPI ITATBCTR0: ATREADY1 Position */

+#define TPI_ITATBCTR0_ATREADY1_Msk         (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/)   /*!< TPI ITATBCTR0: ATREADY1 Mask */

+

+/* TPI Integration Mode Control Register Definitions */

+#define TPI_ITCTRL_Mode_Pos                 0U                                         /*!< TPI ITCTRL: Mode Position */

+#define TPI_ITCTRL_Mode_Msk                (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */

+

+/* TPI DEVID Register Definitions */

+#define TPI_DEVID_NRZVALID_Pos             11U                                         /*!< TPI DEVID: NRZVALID Position */

+#define TPI_DEVID_NRZVALID_Msk             (0x1UL << TPI_DEVID_NRZVALID_Pos)           /*!< TPI DEVID: NRZVALID Mask */

+

+#define TPI_DEVID_MANCVALID_Pos            10U                                         /*!< TPI DEVID: MANCVALID Position */

+#define TPI_DEVID_MANCVALID_Msk            (0x1UL << TPI_DEVID_MANCVALID_Pos)          /*!< TPI DEVID: MANCVALID Mask */

+

+#define TPI_DEVID_PTINVALID_Pos             9U                                         /*!< TPI DEVID: PTINVALID Position */

+#define TPI_DEVID_PTINVALID_Msk            (0x1UL << TPI_DEVID_PTINVALID_Pos)          /*!< TPI DEVID: PTINVALID Mask */

+

+#define TPI_DEVID_MinBufSz_Pos              6U                                         /*!< TPI DEVID: MinBufSz Position */

+#define TPI_DEVID_MinBufSz_Msk             (0x7UL << TPI_DEVID_MinBufSz_Pos)           /*!< TPI DEVID: MinBufSz Mask */

+

+#define TPI_DEVID_AsynClkIn_Pos             5U                                         /*!< TPI DEVID: AsynClkIn Position */

+#define TPI_DEVID_AsynClkIn_Msk            (0x1UL << TPI_DEVID_AsynClkIn_Pos)          /*!< TPI DEVID: AsynClkIn Mask */

+

+#define TPI_DEVID_NrTraceInput_Pos          0U                                         /*!< TPI DEVID: NrTraceInput Position */

+#define TPI_DEVID_NrTraceInput_Msk         (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */

+

+/* TPI DEVTYPE Register Definitions */

+#define TPI_DEVTYPE_SubType_Pos             4U                                         /*!< TPI DEVTYPE: SubType Position */

+#define TPI_DEVTYPE_SubType_Msk            (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/)      /*!< TPI DEVTYPE: SubType Mask */

+

+#define TPI_DEVTYPE_MajorType_Pos           0U                                         /*!< TPI DEVTYPE: MajorType Position */

+#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */

+

+/*@}*/ /* end of group CMSIS_TPI */

+

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_MPU     Memory Protection Unit (MPU)

+  \brief    Type definitions for the Memory Protection Unit (MPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Memory Protection Unit (MPU).

+ */

+typedef struct

+{

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x000 (R/ )  MPU Type Register */

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x004 (R/W)  MPU Control Register */

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */

+  __IOM uint32_t RASR;                   /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A1;                /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */

+  __IOM uint32_t RASR_A1;                /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A2;                /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */

+  __IOM uint32_t RASR_A2;                /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A3;                /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */

+  __IOM uint32_t RASR_A3;                /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */

+} MPU_Type;

+

+#define MPU_TYPE_RALIASES                  4U

+

+/* MPU Type Register Definitions */

+#define MPU_TYPE_IREGION_Pos               16U                                            /*!< MPU TYPE: IREGION Position */

+#define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */

+

+#define MPU_TYPE_DREGION_Pos                8U                                            /*!< MPU TYPE: DREGION Position */

+#define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */

+

+#define MPU_TYPE_SEPARATE_Pos               0U                                            /*!< MPU TYPE: SEPARATE Position */

+#define MPU_TYPE_SEPARATE_Msk              (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)             /*!< MPU TYPE: SEPARATE Mask */

+

+/* MPU Control Register Definitions */

+#define MPU_CTRL_PRIVDEFENA_Pos             2U                                            /*!< MPU CTRL: PRIVDEFENA Position */

+#define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */

+

+#define MPU_CTRL_HFNMIENA_Pos               1U                                            /*!< MPU CTRL: HFNMIENA Position */

+#define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */

+

+#define MPU_CTRL_ENABLE_Pos                 0U                                            /*!< MPU CTRL: ENABLE Position */

+#define MPU_CTRL_ENABLE_Msk                (1UL /*<< MPU_CTRL_ENABLE_Pos*/)               /*!< MPU CTRL: ENABLE Mask */

+

+/* MPU Region Number Register Definitions */

+#define MPU_RNR_REGION_Pos                  0U                                            /*!< MPU RNR: REGION Position */

+#define MPU_RNR_REGION_Msk                 (0xFFUL /*<< MPU_RNR_REGION_Pos*/)             /*!< MPU RNR: REGION Mask */

+

+/* MPU Region Base Address Register Definitions */

+#define MPU_RBAR_ADDR_Pos                   5U                                            /*!< MPU RBAR: ADDR Position */

+#define MPU_RBAR_ADDR_Msk                  (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos)             /*!< MPU RBAR: ADDR Mask */

+

+#define MPU_RBAR_VALID_Pos                  4U                                            /*!< MPU RBAR: VALID Position */

+#define MPU_RBAR_VALID_Msk                 (1UL << MPU_RBAR_VALID_Pos)                    /*!< MPU RBAR: VALID Mask */

+

+#define MPU_RBAR_REGION_Pos                 0U                                            /*!< MPU RBAR: REGION Position */

+#define MPU_RBAR_REGION_Msk                (0xFUL /*<< MPU_RBAR_REGION_Pos*/)             /*!< MPU RBAR: REGION Mask */

+

+/* MPU Region Attribute and Size Register Definitions */

+#define MPU_RASR_ATTRS_Pos                 16U                                            /*!< MPU RASR: MPU Region Attribute field Position */

+#define MPU_RASR_ATTRS_Msk                 (0xFFFFUL << MPU_RASR_ATTRS_Pos)               /*!< MPU RASR: MPU Region Attribute field Mask */

+

+#define MPU_RASR_XN_Pos                    28U                                            /*!< MPU RASR: ATTRS.XN Position */

+#define MPU_RASR_XN_Msk                    (1UL << MPU_RASR_XN_Pos)                       /*!< MPU RASR: ATTRS.XN Mask */

+

+#define MPU_RASR_AP_Pos                    24U                                            /*!< MPU RASR: ATTRS.AP Position */

+#define MPU_RASR_AP_Msk                    (0x7UL << MPU_RASR_AP_Pos)                     /*!< MPU RASR: ATTRS.AP Mask */

+

+#define MPU_RASR_TEX_Pos                   19U                                            /*!< MPU RASR: ATTRS.TEX Position */

+#define MPU_RASR_TEX_Msk                   (0x7UL << MPU_RASR_TEX_Pos)                    /*!< MPU RASR: ATTRS.TEX Mask */

+

+#define MPU_RASR_S_Pos                     18U                                            /*!< MPU RASR: ATTRS.S Position */

+#define MPU_RASR_S_Msk                     (1UL << MPU_RASR_S_Pos)                        /*!< MPU RASR: ATTRS.S Mask */

+

+#define MPU_RASR_C_Pos                     17U                                            /*!< MPU RASR: ATTRS.C Position */

+#define MPU_RASR_C_Msk                     (1UL << MPU_RASR_C_Pos)                        /*!< MPU RASR: ATTRS.C Mask */

+

+#define MPU_RASR_B_Pos                     16U                                            /*!< MPU RASR: ATTRS.B Position */

+#define MPU_RASR_B_Msk                     (1UL << MPU_RASR_B_Pos)                        /*!< MPU RASR: ATTRS.B Mask */

+

+#define MPU_RASR_SRD_Pos                    8U                                            /*!< MPU RASR: Sub-Region Disable Position */

+#define MPU_RASR_SRD_Msk                   (0xFFUL << MPU_RASR_SRD_Pos)                   /*!< MPU RASR: Sub-Region Disable Mask */

+

+#define MPU_RASR_SIZE_Pos                   1U                                            /*!< MPU RASR: Region Size Field Position */

+#define MPU_RASR_SIZE_Msk                  (0x1FUL << MPU_RASR_SIZE_Pos)                  /*!< MPU RASR: Region Size Field Mask */

+

+#define MPU_RASR_ENABLE_Pos                 0U                                            /*!< MPU RASR: Region enable bit Position */

+#define MPU_RASR_ENABLE_Msk                (1UL /*<< MPU_RASR_ENABLE_Pos*/)               /*!< MPU RASR: Region enable bit Disable Mask */

+

+/*@} end of group CMSIS_MPU */

+#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_FPU     Floating Point Unit (FPU)

+  \brief    Type definitions for the Floating Point Unit (FPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Floating Point Unit (FPU).

+ */

+typedef struct

+{

+        uint32_t RESERVED0[1U];

+  __IOM uint32_t FPCCR;                  /*!< Offset: 0x004 (R/W)  Floating-Point Context Control Register */

+  __IOM uint32_t FPCAR;                  /*!< Offset: 0x008 (R/W)  Floating-Point Context Address Register */

+  __IOM uint32_t FPDSCR;                 /*!< Offset: 0x00C (R/W)  Floating-Point Default Status Control Register */

+  __IM  uint32_t MVFR0;                  /*!< Offset: 0x010 (R/ )  Media and FP Feature Register 0 */

+  __IM  uint32_t MVFR1;                  /*!< Offset: 0x014 (R/ )  Media and FP Feature Register 1 */

+} FPU_Type;

+

+/* Floating-Point Context Control Register Definitions */

+#define FPU_FPCCR_ASPEN_Pos                31U                                            /*!< FPCCR: ASPEN bit Position */

+#define FPU_FPCCR_ASPEN_Msk                (1UL << FPU_FPCCR_ASPEN_Pos)                   /*!< FPCCR: ASPEN bit Mask */

+

+#define FPU_FPCCR_LSPEN_Pos                30U                                            /*!< FPCCR: LSPEN Position */

+#define FPU_FPCCR_LSPEN_Msk                (1UL << FPU_FPCCR_LSPEN_Pos)                   /*!< FPCCR: LSPEN bit Mask */

+

+#define FPU_FPCCR_MONRDY_Pos                8U                                            /*!< FPCCR: MONRDY Position */

+#define FPU_FPCCR_MONRDY_Msk               (1UL << FPU_FPCCR_MONRDY_Pos)                  /*!< FPCCR: MONRDY bit Mask */

+

+#define FPU_FPCCR_BFRDY_Pos                 6U                                            /*!< FPCCR: BFRDY Position */

+#define FPU_FPCCR_BFRDY_Msk                (1UL << FPU_FPCCR_BFRDY_Pos)                   /*!< FPCCR: BFRDY bit Mask */

+

+#define FPU_FPCCR_MMRDY_Pos                 5U                                            /*!< FPCCR: MMRDY Position */

+#define FPU_FPCCR_MMRDY_Msk                (1UL << FPU_FPCCR_MMRDY_Pos)                   /*!< FPCCR: MMRDY bit Mask */

+

+#define FPU_FPCCR_HFRDY_Pos                 4U                                            /*!< FPCCR: HFRDY Position */

+#define FPU_FPCCR_HFRDY_Msk                (1UL << FPU_FPCCR_HFRDY_Pos)                   /*!< FPCCR: HFRDY bit Mask */

+

+#define FPU_FPCCR_THREAD_Pos                3U                                            /*!< FPCCR: processor mode bit Position */

+#define FPU_FPCCR_THREAD_Msk               (1UL << FPU_FPCCR_THREAD_Pos)                  /*!< FPCCR: processor mode active bit Mask */

+

+#define FPU_FPCCR_USER_Pos                  1U                                            /*!< FPCCR: privilege level bit Position */

+#define FPU_FPCCR_USER_Msk                 (1UL << FPU_FPCCR_USER_Pos)                    /*!< FPCCR: privilege level bit Mask */

+

+#define FPU_FPCCR_LSPACT_Pos                0U                                            /*!< FPCCR: Lazy state preservation active bit Position */

+#define FPU_FPCCR_LSPACT_Msk               (1UL /*<< FPU_FPCCR_LSPACT_Pos*/)              /*!< FPCCR: Lazy state preservation active bit Mask */

+

+/* Floating-Point Context Address Register Definitions */

+#define FPU_FPCAR_ADDRESS_Pos               3U                                            /*!< FPCAR: ADDRESS bit Position */

+#define FPU_FPCAR_ADDRESS_Msk              (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos)        /*!< FPCAR: ADDRESS bit Mask */

+

+/* Floating-Point Default Status Control Register Definitions */

+#define FPU_FPDSCR_AHP_Pos                 26U                                            /*!< FPDSCR: AHP bit Position */

+#define FPU_FPDSCR_AHP_Msk                 (1UL << FPU_FPDSCR_AHP_Pos)                    /*!< FPDSCR: AHP bit Mask */

+

+#define FPU_FPDSCR_DN_Pos                  25U                                            /*!< FPDSCR: DN bit Position */

+#define FPU_FPDSCR_DN_Msk                  (1UL << FPU_FPDSCR_DN_Pos)                     /*!< FPDSCR: DN bit Mask */

+

+#define FPU_FPDSCR_FZ_Pos                  24U                                            /*!< FPDSCR: FZ bit Position */

+#define FPU_FPDSCR_FZ_Msk                  (1UL << FPU_FPDSCR_FZ_Pos)                     /*!< FPDSCR: FZ bit Mask */

+

+#define FPU_FPDSCR_RMode_Pos               22U                                            /*!< FPDSCR: RMode bit Position */

+#define FPU_FPDSCR_RMode_Msk               (3UL << FPU_FPDSCR_RMode_Pos)                  /*!< FPDSCR: RMode bit Mask */

+

+/* Media and FP Feature Register 0 Definitions */

+#define FPU_MVFR0_FP_rounding_modes_Pos    28U                                            /*!< MVFR0: FP rounding modes bits Position */

+#define FPU_MVFR0_FP_rounding_modes_Msk    (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos)     /*!< MVFR0: FP rounding modes bits Mask */

+

+#define FPU_MVFR0_Short_vectors_Pos        24U                                            /*!< MVFR0: Short vectors bits Position */

+#define FPU_MVFR0_Short_vectors_Msk        (0xFUL << FPU_MVFR0_Short_vectors_Pos)         /*!< MVFR0: Short vectors bits Mask */

+

+#define FPU_MVFR0_Square_root_Pos          20U                                            /*!< MVFR0: Square root bits Position */

+#define FPU_MVFR0_Square_root_Msk          (0xFUL << FPU_MVFR0_Square_root_Pos)           /*!< MVFR0: Square root bits Mask */

+

+#define FPU_MVFR0_Divide_Pos               16U                                            /*!< MVFR0: Divide bits Position */

+#define FPU_MVFR0_Divide_Msk               (0xFUL << FPU_MVFR0_Divide_Pos)                /*!< MVFR0: Divide bits Mask */

+

+#define FPU_MVFR0_FP_excep_trapping_Pos    12U                                            /*!< MVFR0: FP exception trapping bits Position */

+#define FPU_MVFR0_FP_excep_trapping_Msk    (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos)     /*!< MVFR0: FP exception trapping bits Mask */

+

+#define FPU_MVFR0_Double_precision_Pos      8U                                            /*!< MVFR0: Double-precision bits Position */

+#define FPU_MVFR0_Double_precision_Msk     (0xFUL << FPU_MVFR0_Double_precision_Pos)      /*!< MVFR0: Double-precision bits Mask */

+

+#define FPU_MVFR0_Single_precision_Pos      4U                                            /*!< MVFR0: Single-precision bits Position */

+#define FPU_MVFR0_Single_precision_Msk     (0xFUL << FPU_MVFR0_Single_precision_Pos)      /*!< MVFR0: Single-precision bits Mask */

+

+#define FPU_MVFR0_A_SIMD_registers_Pos      0U                                            /*!< MVFR0: A_SIMD registers bits Position */

+#define FPU_MVFR0_A_SIMD_registers_Msk     (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/)  /*!< MVFR0: A_SIMD registers bits Mask */

+

+/* Media and FP Feature Register 1 Definitions */

+#define FPU_MVFR1_FP_fused_MAC_Pos         28U                                            /*!< MVFR1: FP fused MAC bits Position */

+#define FPU_MVFR1_FP_fused_MAC_Msk         (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos)          /*!< MVFR1: FP fused MAC bits Mask */

+

+#define FPU_MVFR1_FP_HPFP_Pos              24U                                            /*!< MVFR1: FP HPFP bits Position */

+#define FPU_MVFR1_FP_HPFP_Msk              (0xFUL << FPU_MVFR1_FP_HPFP_Pos)               /*!< MVFR1: FP HPFP bits Mask */

+

+#define FPU_MVFR1_D_NaN_mode_Pos            4U                                            /*!< MVFR1: D_NaN mode bits Position */

+#define FPU_MVFR1_D_NaN_mode_Msk           (0xFUL << FPU_MVFR1_D_NaN_mode_Pos)            /*!< MVFR1: D_NaN mode bits Mask */

+

+#define FPU_MVFR1_FtZ_mode_Pos              0U                                            /*!< MVFR1: FtZ mode bits Position */

+#define FPU_MVFR1_FtZ_mode_Msk             (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/)          /*!< MVFR1: FtZ mode bits Mask */

+

+/*@} end of group CMSIS_FPU */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    Type definitions for the Core Debug Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Core Debug Register (CoreDebug).

+ */

+typedef struct

+{

+  __IOM uint32_t DHCSR;                  /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */

+  __OM  uint32_t DCRSR;                  /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */

+  __IOM uint32_t DCRDR;                  /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */

+  __IOM uint32_t DEMCR;                  /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */

+} CoreDebug_Type;

+

+/* Debug Halting Control and Status Register Definitions */

+#define CoreDebug_DHCSR_DBGKEY_Pos         16U                                            /*!< CoreDebug DHCSR: DBGKEY Position */

+#define CoreDebug_DHCSR_DBGKEY_Msk         (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos)       /*!< CoreDebug DHCSR: DBGKEY Mask */

+

+#define CoreDebug_DHCSR_S_RESET_ST_Pos     25U                                            /*!< CoreDebug DHCSR: S_RESET_ST Position */

+#define CoreDebug_DHCSR_S_RESET_ST_Msk     (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos)        /*!< CoreDebug DHCSR: S_RESET_ST Mask */

+

+#define CoreDebug_DHCSR_S_RETIRE_ST_Pos    24U                                            /*!< CoreDebug DHCSR: S_RETIRE_ST Position */

+#define CoreDebug_DHCSR_S_RETIRE_ST_Msk    (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos)       /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */

+

+#define CoreDebug_DHCSR_S_LOCKUP_Pos       19U                                            /*!< CoreDebug DHCSR: S_LOCKUP Position */

+#define CoreDebug_DHCSR_S_LOCKUP_Msk       (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos)          /*!< CoreDebug DHCSR: S_LOCKUP Mask */

+

+#define CoreDebug_DHCSR_S_SLEEP_Pos        18U                                            /*!< CoreDebug DHCSR: S_SLEEP Position */

+#define CoreDebug_DHCSR_S_SLEEP_Msk        (1UL << CoreDebug_DHCSR_S_SLEEP_Pos)           /*!< CoreDebug DHCSR: S_SLEEP Mask */

+

+#define CoreDebug_DHCSR_S_HALT_Pos         17U                                            /*!< CoreDebug DHCSR: S_HALT Position */

+#define CoreDebug_DHCSR_S_HALT_Msk         (1UL << CoreDebug_DHCSR_S_HALT_Pos)            /*!< CoreDebug DHCSR: S_HALT Mask */

+

+#define CoreDebug_DHCSR_S_REGRDY_Pos       16U                                            /*!< CoreDebug DHCSR: S_REGRDY Position */

+#define CoreDebug_DHCSR_S_REGRDY_Msk       (1UL << CoreDebug_DHCSR_S_REGRDY_Pos)          /*!< CoreDebug DHCSR: S_REGRDY Mask */

+

+#define CoreDebug_DHCSR_C_SNAPSTALL_Pos     5U                                            /*!< CoreDebug DHCSR: C_SNAPSTALL Position */

+#define CoreDebug_DHCSR_C_SNAPSTALL_Msk    (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos)       /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */

+

+#define CoreDebug_DHCSR_C_MASKINTS_Pos      3U                                            /*!< CoreDebug DHCSR: C_MASKINTS Position */

+#define CoreDebug_DHCSR_C_MASKINTS_Msk     (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos)        /*!< CoreDebug DHCSR: C_MASKINTS Mask */

+

+#define CoreDebug_DHCSR_C_STEP_Pos          2U                                            /*!< CoreDebug DHCSR: C_STEP Position */

+#define CoreDebug_DHCSR_C_STEP_Msk         (1UL << CoreDebug_DHCSR_C_STEP_Pos)            /*!< CoreDebug DHCSR: C_STEP Mask */

+

+#define CoreDebug_DHCSR_C_HALT_Pos          1U                                            /*!< CoreDebug DHCSR: C_HALT Position */

+#define CoreDebug_DHCSR_C_HALT_Msk         (1UL << CoreDebug_DHCSR_C_HALT_Pos)            /*!< CoreDebug DHCSR: C_HALT Mask */

+

+#define CoreDebug_DHCSR_C_DEBUGEN_Pos       0U                                            /*!< CoreDebug DHCSR: C_DEBUGEN Position */

+#define CoreDebug_DHCSR_C_DEBUGEN_Msk      (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/)     /*!< CoreDebug DHCSR: C_DEBUGEN Mask */

+

+/* Debug Core Register Selector Register Definitions */

+#define CoreDebug_DCRSR_REGWnR_Pos         16U                                            /*!< CoreDebug DCRSR: REGWnR Position */

+#define CoreDebug_DCRSR_REGWnR_Msk         (1UL << CoreDebug_DCRSR_REGWnR_Pos)            /*!< CoreDebug DCRSR: REGWnR Mask */

+

+#define CoreDebug_DCRSR_REGSEL_Pos          0U                                            /*!< CoreDebug DCRSR: REGSEL Position */

+#define CoreDebug_DCRSR_REGSEL_Msk         (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/)     /*!< CoreDebug DCRSR: REGSEL Mask */

+

+/* Debug Exception and Monitor Control Register Definitions */

+#define CoreDebug_DEMCR_TRCENA_Pos         24U                                            /*!< CoreDebug DEMCR: TRCENA Position */

+#define CoreDebug_DEMCR_TRCENA_Msk         (1UL << CoreDebug_DEMCR_TRCENA_Pos)            /*!< CoreDebug DEMCR: TRCENA Mask */

+

+#define CoreDebug_DEMCR_MON_REQ_Pos        19U                                            /*!< CoreDebug DEMCR: MON_REQ Position */

+#define CoreDebug_DEMCR_MON_REQ_Msk        (1UL << CoreDebug_DEMCR_MON_REQ_Pos)           /*!< CoreDebug DEMCR: MON_REQ Mask */

+

+#define CoreDebug_DEMCR_MON_STEP_Pos       18U                                            /*!< CoreDebug DEMCR: MON_STEP Position */

+#define CoreDebug_DEMCR_MON_STEP_Msk       (1UL << CoreDebug_DEMCR_MON_STEP_Pos)          /*!< CoreDebug DEMCR: MON_STEP Mask */

+

+#define CoreDebug_DEMCR_MON_PEND_Pos       17U                                            /*!< CoreDebug DEMCR: MON_PEND Position */

+#define CoreDebug_DEMCR_MON_PEND_Msk       (1UL << CoreDebug_DEMCR_MON_PEND_Pos)          /*!< CoreDebug DEMCR: MON_PEND Mask */

+

+#define CoreDebug_DEMCR_MON_EN_Pos         16U                                            /*!< CoreDebug DEMCR: MON_EN Position */

+#define CoreDebug_DEMCR_MON_EN_Msk         (1UL << CoreDebug_DEMCR_MON_EN_Pos)            /*!< CoreDebug DEMCR: MON_EN Mask */

+

+#define CoreDebug_DEMCR_VC_HARDERR_Pos     10U                                            /*!< CoreDebug DEMCR: VC_HARDERR Position */

+#define CoreDebug_DEMCR_VC_HARDERR_Msk     (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos)        /*!< CoreDebug DEMCR: VC_HARDERR Mask */

+

+#define CoreDebug_DEMCR_VC_INTERR_Pos       9U                                            /*!< CoreDebug DEMCR: VC_INTERR Position */

+#define CoreDebug_DEMCR_VC_INTERR_Msk      (1UL << CoreDebug_DEMCR_VC_INTERR_Pos)         /*!< CoreDebug DEMCR: VC_INTERR Mask */

+

+#define CoreDebug_DEMCR_VC_BUSERR_Pos       8U                                            /*!< CoreDebug DEMCR: VC_BUSERR Position */

+#define CoreDebug_DEMCR_VC_BUSERR_Msk      (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos)         /*!< CoreDebug DEMCR: VC_BUSERR Mask */

+

+#define CoreDebug_DEMCR_VC_STATERR_Pos      7U                                            /*!< CoreDebug DEMCR: VC_STATERR Position */

+#define CoreDebug_DEMCR_VC_STATERR_Msk     (1UL << CoreDebug_DEMCR_VC_STATERR_Pos)        /*!< CoreDebug DEMCR: VC_STATERR Mask */

+

+#define CoreDebug_DEMCR_VC_CHKERR_Pos       6U                                            /*!< CoreDebug DEMCR: VC_CHKERR Position */

+#define CoreDebug_DEMCR_VC_CHKERR_Msk      (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos)         /*!< CoreDebug DEMCR: VC_CHKERR Mask */

+

+#define CoreDebug_DEMCR_VC_NOCPERR_Pos      5U                                            /*!< CoreDebug DEMCR: VC_NOCPERR Position */

+#define CoreDebug_DEMCR_VC_NOCPERR_Msk     (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos)        /*!< CoreDebug DEMCR: VC_NOCPERR Mask */

+

+#define CoreDebug_DEMCR_VC_MMERR_Pos        4U                                            /*!< CoreDebug DEMCR: VC_MMERR Position */

+#define CoreDebug_DEMCR_VC_MMERR_Msk       (1UL << CoreDebug_DEMCR_VC_MMERR_Pos)          /*!< CoreDebug DEMCR: VC_MMERR Mask */

+

+#define CoreDebug_DEMCR_VC_CORERESET_Pos    0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */

+#define CoreDebug_DEMCR_VC_CORERESET_Msk   (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/)  /*!< CoreDebug DEMCR: VC_CORERESET Mask */

+

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */

+#define ITM_BASE            (0xE0000000UL)                            /*!< ITM Base Address */

+#define DWT_BASE            (0xE0001000UL)                            /*!< DWT Base Address */

+#define TPI_BASE            (0xE0040000UL)                            /*!< TPI Base Address */

+#define CoreDebug_BASE      (0xE000EDF0UL)                            /*!< Core Debug Base Address */

+#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */

+#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */

+#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */

+

+#define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE      )   /*!< System control Register not in SCB */

+#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */

+#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */

+#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */

+#define ITM                 ((ITM_Type       *)     ITM_BASE      )   /*!< ITM configuration struct */

+#define DWT                 ((DWT_Type       *)     DWT_BASE      )   /*!< DWT configuration struct */

+#define TPI                 ((TPI_Type       *)     TPI_BASE      )   /*!< TPI configuration struct */

+#define CoreDebug           ((CoreDebug_Type *)     CoreDebug_BASE)   /*!< Core Debug configuration struct */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+  #define MPU_BASE          (SCS_BASE +  0x0D90UL)                    /*!< Memory Protection Unit */

+  #define MPU               ((MPU_Type       *)     MPU_BASE      )   /*!< Memory Protection Unit */

+#endif

+

+#define FPU_BASE            (SCS_BASE +  0x0F30UL)                    /*!< Floating Point Unit */

+#define FPU                 ((FPU_Type       *)     FPU_BASE      )   /*!< Floating Point Unit */

+

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Debug Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping

+  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+  #define NVIC_GetActive              __NVIC_GetActive

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+   #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* The following EXC_RETURN values are saved the LR on exception entry */

+#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */

+#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */

+#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */

+#define EXC_RETURN_HANDLER_FPU     (0xFFFFFFE1UL)     /* return to Handler mode, uses MSP after return, restore floating-point state */

+#define EXC_RETURN_THREAD_MSP_FPU  (0xFFFFFFE9UL)     /* return to Thread mode, uses MSP after return, restore floating-point state  */

+#define EXC_RETURN_THREAD_PSP_FPU  (0xFFFFFFEDUL)     /* return to Thread mode, uses PSP after return, restore floating-point state  */

+

+

+/**

+  \brief   Set Priority Grouping

+  \details Sets the priority grouping field using the required unlock sequence.

+           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.

+           Only values from 0..7 are used.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]      PriorityGroup  Priority grouping field.

+ */

+__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)

+{

+  uint32_t reg_value;

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);             /* only values 0..7 are used          */

+

+  reg_value  =  SCB->AIRCR;                                                   /* read old register configuration    */

+  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change               */

+  reg_value  =  (reg_value                                   |

+                ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos)  );              /* Insert write key and priority group */

+  SCB->AIRCR =  reg_value;

+}

+

+

+/**

+  \brief   Get Priority Grouping

+  \details Reads the priority grouping field from the NVIC Interrupt Controller.

+  \return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void)

+{

+  return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));

+}

+

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt

+  \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IP[((uint32_t)IRQn)]               = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+  else

+  {

+    SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return(((uint32_t)NVIC->IP[((uint32_t)IRQn)]               >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Encode Priority

+  \details Encodes the priority for an interrupt with the given priority group,

+           preemptive priority value, and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]     PriorityGroup  Used priority group.

+  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).

+  \param [in]       SubPriority  Subpriority value (starting from 0).

+  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().

+ */

+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  return (

+           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |

+           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))

+         );

+}

+

+

+/**

+  \brief   Decode Priority

+  \details Decodes an interrupt priority value with a given priority group to

+           preemptive priority value and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.

+  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().

+  \param [in]     PriorityGroup  Used priority group.

+  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).

+  \param [out]     pSubPriority  Subpriority value (starting from 0).

+ */

+__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);

+  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);

+}

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           VTOR must been relocated to SRAM before.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos)    |

+                           (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

+                            SCB_AIRCR_SYSRESETREQ_Msk    );         /* Keep priority group unchanged */

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+/* ##########################  MPU functions  #################################### */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+

+#include "mpu_armv7.h"

+

+#endif

+

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+  uint32_t mvfr0;

+

+  mvfr0 = FPU->MVFR0;

+  if      ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U)

+  {

+    return 1U;           /* Single precision FPU */

+  }

+  else

+  {

+    return 0U;           /* No FPU */

+  }

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+/* ##################################### Debug In/Output function ########################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_core_DebugFunctions ITM Functions

+  \brief    Functions that access the ITM debug interface.

+  @{

+ */

+

+extern volatile int32_t ITM_RxBuffer;                              /*!< External variable to receive characters. */

+#define                 ITM_RXBUFFER_EMPTY  ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */

+

+

+/**

+  \brief   ITM Send Character

+  \details Transmits a character via the ITM channel 0, and

+           \li Just returns when no debugger is connected that has booked the output.

+           \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.

+  \param [in]     ch  Character to transmit.

+  \returns            Character to transmit.

+ */

+__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch)

+{

+  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) &&      /* ITM enabled */

+      ((ITM->TER & 1UL               ) != 0UL)   )     /* ITM Port #0 enabled */

+  {

+    while (ITM->PORT[0U].u32 == 0UL)

+    {

+      __NOP();

+    }

+    ITM->PORT[0U].u8 = (uint8_t)ch;

+  }

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Receive Character

+  \details Inputs a character via the external variable \ref ITM_RxBuffer.

+  \return             Received character.

+  \return         -1  No character pending.

+ */

+__STATIC_INLINE int32_t ITM_ReceiveChar (void)

+{

+  int32_t ch = -1;                           /* no character available */

+

+  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY)

+  {

+    ch = ITM_RxBuffer;

+    ITM_RxBuffer = ITM_RXBUFFER_EMPTY;       /* ready for next character */

+  }

+

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Check Character

+  \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer.

+  \return          0  No character available.

+  \return          1  Character available.

+ */

+__STATIC_INLINE int32_t ITM_CheckChar (void)

+{

+

+  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY)

+  {

+    return (0);                              /* no character available */

+  }

+  else

+  {

+    return (1);                              /*    character available */

+  }

+}

+

+/*@} end of CMSIS_core_DebugFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM4_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm7.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm7.h
new file mode 100644
index 0000000..ada6c2a
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_cm7.h
@@ -0,0 +1,2671 @@
+/**************************************************************************//**

+ * @file     core_cm7.h

+ * @brief    CMSIS Cortex-M7 Core Peripheral Access Layer Header File

+ * @version  V5.0.8

+ * @date     04. June 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_CM7_H_GENERIC

+#define __CORE_CM7_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup Cortex_M7

+  @{

+ */

+

+#include "cmsis_version.h"

+

+/* CMSIS CM7 definitions */

+#define __CM7_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)                  /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __CM7_CMSIS_VERSION_SUB   ( __CM_CMSIS_VERSION_SUB)                  /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __CM7_CMSIS_VERSION       ((__CM7_CMSIS_VERSION_MAIN << 16U) | \

+                                    __CM7_CMSIS_VERSION_SUB           )      /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_M                (7U)                                       /*!< Cortex-M Core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions.

+*/

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined __ARM_PCS_VFP

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined __TI_VFP_SUPPORT__

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)

+      #define __FPU_USED       1U

+    #else

+      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+      #define __FPU_USED       0U

+    #endif

+  #else

+    #define __FPU_USED         0U

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM7_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_CM7_H_DEPENDANT

+#define __CORE_CM7_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __CM7_REV

+    #define __CM7_REV               0x0000U

+    #warning "__CM7_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __FPU_PRESENT

+    #define __FPU_PRESENT             0U

+    #warning "__FPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MPU_PRESENT

+    #define __MPU_PRESENT             0U

+    #warning "__MPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __ICACHE_PRESENT

+    #define __ICACHE_PRESENT          0U

+    #warning "__ICACHE_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __DCACHE_PRESENT

+    #define __DCACHE_PRESENT          0U

+    #warning "__DCACHE_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __DTCM_PRESENT

+    #define __DTCM_PRESENT            0U

+    #warning "__DTCM_PRESENT        not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          3U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group Cortex_M7 */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+  - Core Debug Register

+  - Core MPU Register

+  - Core FPU Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:16;              /*!< bit:  0..15  Reserved */

+    uint32_t GE:4;                       /*!< bit: 16..19  Greater than or Equal flags */

+    uint32_t _reserved1:7;               /*!< bit: 20..26  Reserved */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+#define APSR_Q_Pos                         27U                                            /*!< APSR: Q Position */

+#define APSR_Q_Msk                         (1UL << APSR_Q_Pos)                            /*!< APSR: Q Mask */

+

+#define APSR_GE_Pos                        16U                                            /*!< APSR: GE Position */

+#define APSR_GE_Msk                        (0xFUL << APSR_GE_Pos)                         /*!< APSR: GE Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:1;               /*!< bit:      9  Reserved */

+    uint32_t ICI_IT_1:6;                 /*!< bit: 10..15  ICI/IT part 1 */

+    uint32_t GE:4;                       /*!< bit: 16..19  Greater than or Equal flags */

+    uint32_t _reserved1:4;               /*!< bit: 20..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit */

+    uint32_t ICI_IT_2:2;                 /*!< bit: 25..26  ICI/IT part 2 */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_Q_Pos                         27U                                            /*!< xPSR: Q Position */

+#define xPSR_Q_Msk                         (1UL << xPSR_Q_Pos)                            /*!< xPSR: Q Mask */

+

+#define xPSR_ICI_IT_2_Pos                  25U                                            /*!< xPSR: ICI/IT part 2 Position */

+#define xPSR_ICI_IT_2_Msk                  (3UL << xPSR_ICI_IT_2_Pos)                     /*!< xPSR: ICI/IT part 2 Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_GE_Pos                        16U                                            /*!< xPSR: GE Position */

+#define xPSR_GE_Msk                        (0xFUL << xPSR_GE_Pos)                         /*!< xPSR: GE Mask */

+

+#define xPSR_ICI_IT_1_Pos                  10U                                            /*!< xPSR: ICI/IT part 1 Position */

+#define xPSR_ICI_IT_1_Msk                  (0x3FUL << xPSR_ICI_IT_1_Pos)                  /*!< xPSR: ICI/IT part 1 Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t nPRIV:1;                    /*!< bit:      0  Execution privilege in Thread mode */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */

+    uint32_t FPCA:1;                     /*!< bit:      2  FP extension active flag */

+    uint32_t _reserved0:29;              /*!< bit:  3..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_FPCA_Pos                    2U                                            /*!< CONTROL: FPCA Position */

+#define CONTROL_FPCA_Msk                   (1UL << CONTROL_FPCA_Pos)                      /*!< CONTROL: FPCA Mask */

+

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+#define CONTROL_nPRIV_Pos                   0U                                            /*!< CONTROL: nPRIV Position */

+#define CONTROL_nPRIV_Msk                  (1UL /*<< CONTROL_nPRIV_Pos*/)                 /*!< CONTROL: nPRIV Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[8U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[24U];

+  __IOM uint32_t ICER[8U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[24U];

+  __IOM uint32_t ISPR[8U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[24U];

+  __IOM uint32_t ICPR[8U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[24U];

+  __IOM uint32_t IABR[8U];               /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */

+        uint32_t RESERVED4[56U];

+  __IOM uint8_t  IP[240U];               /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */

+        uint32_t RESERVED5[644U];

+  __OM  uint32_t STIR;                   /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */

+}  NVIC_Type;

+

+/* Software Triggered Interrupt Register Definitions */

+#define NVIC_STIR_INTID_Pos                 0U                                         /*!< STIR: INTLINESNUM Position */

+#define NVIC_STIR_INTID_Msk                (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/)        /*!< STIR: INTLINESNUM Mask */

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+  __IOM uint32_t VTOR;                   /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+  __IOM uint8_t  SHPR[12U];              /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+  __IOM uint32_t CFSR;                   /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */

+  __IOM uint32_t HFSR;                   /*!< Offset: 0x02C (R/W)  HardFault Status Register */

+  __IOM uint32_t DFSR;                   /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */

+  __IOM uint32_t MMFAR;                  /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */

+  __IOM uint32_t BFAR;                   /*!< Offset: 0x038 (R/W)  BusFault Address Register */

+  __IOM uint32_t AFSR;                   /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */

+  __IM  uint32_t ID_PFR[2U];             /*!< Offset: 0x040 (R/ )  Processor Feature Register */

+  __IM  uint32_t ID_DFR;                 /*!< Offset: 0x048 (R/ )  Debug Feature Register */

+  __IM  uint32_t ID_AFR;                 /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */

+  __IM  uint32_t ID_MFR[4U];             /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */

+  __IM  uint32_t ID_ISAR[5U];            /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */

+        uint32_t RESERVED0[1U];

+  __IM  uint32_t CLIDR;                  /*!< Offset: 0x078 (R/ )  Cache Level ID register */

+  __IM  uint32_t CTR;                    /*!< Offset: 0x07C (R/ )  Cache Type register */

+  __IM  uint32_t CCSIDR;                 /*!< Offset: 0x080 (R/ )  Cache Size ID Register */

+  __IOM uint32_t CSSELR;                 /*!< Offset: 0x084 (R/W)  Cache Size Selection Register */

+  __IOM uint32_t CPACR;                  /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */

+        uint32_t RESERVED3[93U];

+  __OM  uint32_t STIR;                   /*!< Offset: 0x200 ( /W)  Software Triggered Interrupt Register */

+        uint32_t RESERVED4[15U];

+  __IM  uint32_t MVFR0;                  /*!< Offset: 0x240 (R/ )  Media and VFP Feature Register 0 */

+  __IM  uint32_t MVFR1;                  /*!< Offset: 0x244 (R/ )  Media and VFP Feature Register 1 */

+  __IM  uint32_t MVFR2;                  /*!< Offset: 0x248 (R/ )  Media and VFP Feature Register 2 */

+        uint32_t RESERVED5[1U];

+  __OM  uint32_t ICIALLU;                /*!< Offset: 0x250 ( /W)  I-Cache Invalidate All to PoU */

+        uint32_t RESERVED6[1U];

+  __OM  uint32_t ICIMVAU;                /*!< Offset: 0x258 ( /W)  I-Cache Invalidate by MVA to PoU */

+  __OM  uint32_t DCIMVAC;                /*!< Offset: 0x25C ( /W)  D-Cache Invalidate by MVA to PoC */

+  __OM  uint32_t DCISW;                  /*!< Offset: 0x260 ( /W)  D-Cache Invalidate by Set-way */

+  __OM  uint32_t DCCMVAU;                /*!< Offset: 0x264 ( /W)  D-Cache Clean by MVA to PoU */

+  __OM  uint32_t DCCMVAC;                /*!< Offset: 0x268 ( /W)  D-Cache Clean by MVA to PoC */

+  __OM  uint32_t DCCSW;                  /*!< Offset: 0x26C ( /W)  D-Cache Clean by Set-way */

+  __OM  uint32_t DCCIMVAC;               /*!< Offset: 0x270 ( /W)  D-Cache Clean and Invalidate by MVA to PoC */

+  __OM  uint32_t DCCISW;                 /*!< Offset: 0x274 ( /W)  D-Cache Clean and Invalidate by Set-way */

+        uint32_t RESERVED7[6U];

+  __IOM uint32_t ITCMCR;                 /*!< Offset: 0x290 (R/W)  Instruction Tightly-Coupled Memory Control Register */

+  __IOM uint32_t DTCMCR;                 /*!< Offset: 0x294 (R/W)  Data Tightly-Coupled Memory Control Registers */

+  __IOM uint32_t AHBPCR;                 /*!< Offset: 0x298 (R/W)  AHBP Control Register */

+  __IOM uint32_t CACR;                   /*!< Offset: 0x29C (R/W)  L1 Cache Control Register */

+  __IOM uint32_t AHBSCR;                 /*!< Offset: 0x2A0 (R/W)  AHB Slave Control Register */

+        uint32_t RESERVED8[1U];

+  __IOM uint32_t ABFSR;                  /*!< Offset: 0x2A8 (R/W)  Auxiliary Bus Fault Status Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */

+#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_RETTOBASE_Pos             11U                                            /*!< SCB ICSR: RETTOBASE Position */

+#define SCB_ICSR_RETTOBASE_Msk             (1UL << SCB_ICSR_RETTOBASE_Pos)                /*!< SCB ICSR: RETTOBASE Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+/* SCB Vector Table Offset Register Definitions */

+#define SCB_VTOR_TBLOFF_Pos                 7U                                            /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos)           /*!< SCB VTOR: TBLOFF Mask */

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_PRIGROUP_Pos              8U                                            /*!< SCB AIRCR: PRIGROUP Position */

+#define SCB_AIRCR_PRIGROUP_Msk             (7UL << SCB_AIRCR_PRIGROUP_Pos)                /*!< SCB AIRCR: PRIGROUP Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+#define SCB_AIRCR_VECTRESET_Pos             0U                                            /*!< SCB AIRCR: VECTRESET Position */

+#define SCB_AIRCR_VECTRESET_Msk            (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/)           /*!< SCB AIRCR: VECTRESET Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_BP_Pos                      18U                                           /*!< SCB CCR: Branch prediction enable bit Position */

+#define SCB_CCR_BP_Msk                     (1UL << SCB_CCR_BP_Pos)                        /*!< SCB CCR: Branch prediction enable bit Mask */

+

+#define SCB_CCR_IC_Pos                      17U                                           /*!< SCB CCR: Instruction cache enable bit Position */

+#define SCB_CCR_IC_Msk                     (1UL << SCB_CCR_IC_Pos)                        /*!< SCB CCR: Instruction cache enable bit Mask */

+

+#define SCB_CCR_DC_Pos                      16U                                           /*!< SCB CCR: Cache enable bit Position */

+#define SCB_CCR_DC_Msk                     (1UL << SCB_CCR_DC_Pos)                        /*!< SCB CCR: Cache enable bit Mask */

+

+#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */

+#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */

+

+#define SCB_CCR_BFHFNMIGN_Pos               8U                                            /*!< SCB CCR: BFHFNMIGN Position */

+#define SCB_CCR_BFHFNMIGN_Msk              (1UL << SCB_CCR_BFHFNMIGN_Pos)                 /*!< SCB CCR: BFHFNMIGN Mask */

+

+#define SCB_CCR_DIV_0_TRP_Pos               4U                                            /*!< SCB CCR: DIV_0_TRP Position */

+#define SCB_CCR_DIV_0_TRP_Msk              (1UL << SCB_CCR_DIV_0_TRP_Pos)                 /*!< SCB CCR: DIV_0_TRP Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+#define SCB_CCR_USERSETMPEND_Pos            1U                                            /*!< SCB CCR: USERSETMPEND Position */

+#define SCB_CCR_USERSETMPEND_Msk           (1UL << SCB_CCR_USERSETMPEND_Pos)              /*!< SCB CCR: USERSETMPEND Mask */

+

+#define SCB_CCR_NONBASETHRDENA_Pos          0U                                            /*!< SCB CCR: NONBASETHRDENA Position */

+#define SCB_CCR_NONBASETHRDENA_Msk         (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/)        /*!< SCB CCR: NONBASETHRDENA Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_USGFAULTENA_Pos          18U                                            /*!< SCB SHCSR: USGFAULTENA Position */

+#define SCB_SHCSR_USGFAULTENA_Msk          (1UL << SCB_SHCSR_USGFAULTENA_Pos)             /*!< SCB SHCSR: USGFAULTENA Mask */

+

+#define SCB_SHCSR_BUSFAULTENA_Pos          17U                                            /*!< SCB SHCSR: BUSFAULTENA Position */

+#define SCB_SHCSR_BUSFAULTENA_Msk          (1UL << SCB_SHCSR_BUSFAULTENA_Pos)             /*!< SCB SHCSR: BUSFAULTENA Mask */

+

+#define SCB_SHCSR_MEMFAULTENA_Pos          16U                                            /*!< SCB SHCSR: MEMFAULTENA Position */

+#define SCB_SHCSR_MEMFAULTENA_Msk          (1UL << SCB_SHCSR_MEMFAULTENA_Pos)             /*!< SCB SHCSR: MEMFAULTENA Mask */

+

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+#define SCB_SHCSR_BUSFAULTPENDED_Pos       14U                                            /*!< SCB SHCSR: BUSFAULTPENDED Position */

+#define SCB_SHCSR_BUSFAULTPENDED_Msk       (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos)          /*!< SCB SHCSR: BUSFAULTPENDED Mask */

+

+#define SCB_SHCSR_MEMFAULTPENDED_Pos       13U                                            /*!< SCB SHCSR: MEMFAULTPENDED Position */

+#define SCB_SHCSR_MEMFAULTPENDED_Msk       (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos)          /*!< SCB SHCSR: MEMFAULTPENDED Mask */

+

+#define SCB_SHCSR_USGFAULTPENDED_Pos       12U                                            /*!< SCB SHCSR: USGFAULTPENDED Position */

+#define SCB_SHCSR_USGFAULTPENDED_Msk       (1UL << SCB_SHCSR_USGFAULTPENDED_Pos)          /*!< SCB SHCSR: USGFAULTPENDED Mask */

+

+#define SCB_SHCSR_SYSTICKACT_Pos           11U                                            /*!< SCB SHCSR: SYSTICKACT Position */

+#define SCB_SHCSR_SYSTICKACT_Msk           (1UL << SCB_SHCSR_SYSTICKACT_Pos)              /*!< SCB SHCSR: SYSTICKACT Mask */

+

+#define SCB_SHCSR_PENDSVACT_Pos            10U                                            /*!< SCB SHCSR: PENDSVACT Position */

+#define SCB_SHCSR_PENDSVACT_Msk            (1UL << SCB_SHCSR_PENDSVACT_Pos)               /*!< SCB SHCSR: PENDSVACT Mask */

+

+#define SCB_SHCSR_MONITORACT_Pos            8U                                            /*!< SCB SHCSR: MONITORACT Position */

+#define SCB_SHCSR_MONITORACT_Msk           (1UL << SCB_SHCSR_MONITORACT_Pos)              /*!< SCB SHCSR: MONITORACT Mask */

+

+#define SCB_SHCSR_SVCALLACT_Pos             7U                                            /*!< SCB SHCSR: SVCALLACT Position */

+#define SCB_SHCSR_SVCALLACT_Msk            (1UL << SCB_SHCSR_SVCALLACT_Pos)               /*!< SCB SHCSR: SVCALLACT Mask */

+

+#define SCB_SHCSR_USGFAULTACT_Pos           3U                                            /*!< SCB SHCSR: USGFAULTACT Position */

+#define SCB_SHCSR_USGFAULTACT_Msk          (1UL << SCB_SHCSR_USGFAULTACT_Pos)             /*!< SCB SHCSR: USGFAULTACT Mask */

+

+#define SCB_SHCSR_BUSFAULTACT_Pos           1U                                            /*!< SCB SHCSR: BUSFAULTACT Position */

+#define SCB_SHCSR_BUSFAULTACT_Msk          (1UL << SCB_SHCSR_BUSFAULTACT_Pos)             /*!< SCB SHCSR: BUSFAULTACT Mask */

+

+#define SCB_SHCSR_MEMFAULTACT_Pos           0U                                            /*!< SCB SHCSR: MEMFAULTACT Position */

+#define SCB_SHCSR_MEMFAULTACT_Msk          (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/)         /*!< SCB SHCSR: MEMFAULTACT Mask */

+

+/* SCB Configurable Fault Status Register Definitions */

+#define SCB_CFSR_USGFAULTSR_Pos            16U                                            /*!< SCB CFSR: Usage Fault Status Register Position */

+#define SCB_CFSR_USGFAULTSR_Msk            (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos)          /*!< SCB CFSR: Usage Fault Status Register Mask */

+

+#define SCB_CFSR_BUSFAULTSR_Pos             8U                                            /*!< SCB CFSR: Bus Fault Status Register Position */

+#define SCB_CFSR_BUSFAULTSR_Msk            (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos)            /*!< SCB CFSR: Bus Fault Status Register Mask */

+

+#define SCB_CFSR_MEMFAULTSR_Pos             0U                                            /*!< SCB CFSR: Memory Manage Fault Status Register Position */

+#define SCB_CFSR_MEMFAULTSR_Msk            (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/)        /*!< SCB CFSR: Memory Manage Fault Status Register Mask */

+

+/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_MMARVALID_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 7U)               /*!< SCB CFSR (MMFSR): MMARVALID Position */

+#define SCB_CFSR_MMARVALID_Msk             (1UL << SCB_CFSR_MMARVALID_Pos)                /*!< SCB CFSR (MMFSR): MMARVALID Mask */

+

+#define SCB_CFSR_MLSPERR_Pos               (SCB_SHCSR_MEMFAULTACT_Pos + 5U)               /*!< SCB CFSR (MMFSR): MLSPERR Position */

+#define SCB_CFSR_MLSPERR_Msk               (1UL << SCB_CFSR_MLSPERR_Pos)                  /*!< SCB CFSR (MMFSR): MLSPERR Mask */

+

+#define SCB_CFSR_MSTKERR_Pos               (SCB_SHCSR_MEMFAULTACT_Pos + 4U)               /*!< SCB CFSR (MMFSR): MSTKERR Position */

+#define SCB_CFSR_MSTKERR_Msk               (1UL << SCB_CFSR_MSTKERR_Pos)                  /*!< SCB CFSR (MMFSR): MSTKERR Mask */

+

+#define SCB_CFSR_MUNSTKERR_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 3U)               /*!< SCB CFSR (MMFSR): MUNSTKERR Position */

+#define SCB_CFSR_MUNSTKERR_Msk             (1UL << SCB_CFSR_MUNSTKERR_Pos)                /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */

+

+#define SCB_CFSR_DACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 1U)               /*!< SCB CFSR (MMFSR): DACCVIOL Position */

+#define SCB_CFSR_DACCVIOL_Msk              (1UL << SCB_CFSR_DACCVIOL_Pos)                 /*!< SCB CFSR (MMFSR): DACCVIOL Mask */

+

+#define SCB_CFSR_IACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 0U)               /*!< SCB CFSR (MMFSR): IACCVIOL Position */

+#define SCB_CFSR_IACCVIOL_Msk              (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/)             /*!< SCB CFSR (MMFSR): IACCVIOL Mask */

+

+/* BusFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_BFARVALID_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 7U)                  /*!< SCB CFSR (BFSR): BFARVALID Position */

+#define SCB_CFSR_BFARVALID_Msk            (1UL << SCB_CFSR_BFARVALID_Pos)                 /*!< SCB CFSR (BFSR): BFARVALID Mask */

+

+#define SCB_CFSR_LSPERR_Pos               (SCB_CFSR_BUSFAULTSR_Pos + 5U)                  /*!< SCB CFSR (BFSR): LSPERR Position */

+#define SCB_CFSR_LSPERR_Msk               (1UL << SCB_CFSR_LSPERR_Pos)                    /*!< SCB CFSR (BFSR): LSPERR Mask */

+

+#define SCB_CFSR_STKERR_Pos               (SCB_CFSR_BUSFAULTSR_Pos + 4U)                  /*!< SCB CFSR (BFSR): STKERR Position */

+#define SCB_CFSR_STKERR_Msk               (1UL << SCB_CFSR_STKERR_Pos)                    /*!< SCB CFSR (BFSR): STKERR Mask */

+

+#define SCB_CFSR_UNSTKERR_Pos             (SCB_CFSR_BUSFAULTSR_Pos + 3U)                  /*!< SCB CFSR (BFSR): UNSTKERR Position */

+#define SCB_CFSR_UNSTKERR_Msk             (1UL << SCB_CFSR_UNSTKERR_Pos)                  /*!< SCB CFSR (BFSR): UNSTKERR Mask */

+

+#define SCB_CFSR_IMPRECISERR_Pos          (SCB_CFSR_BUSFAULTSR_Pos + 2U)                  /*!< SCB CFSR (BFSR): IMPRECISERR Position */

+#define SCB_CFSR_IMPRECISERR_Msk          (1UL << SCB_CFSR_IMPRECISERR_Pos)               /*!< SCB CFSR (BFSR): IMPRECISERR Mask */

+

+#define SCB_CFSR_PRECISERR_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 1U)                  /*!< SCB CFSR (BFSR): PRECISERR Position */

+#define SCB_CFSR_PRECISERR_Msk            (1UL << SCB_CFSR_PRECISERR_Pos)                 /*!< SCB CFSR (BFSR): PRECISERR Mask */

+

+#define SCB_CFSR_IBUSERR_Pos              (SCB_CFSR_BUSFAULTSR_Pos + 0U)                  /*!< SCB CFSR (BFSR): IBUSERR Position */

+#define SCB_CFSR_IBUSERR_Msk              (1UL << SCB_CFSR_IBUSERR_Pos)                   /*!< SCB CFSR (BFSR): IBUSERR Mask */

+

+/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_DIVBYZERO_Pos            (SCB_CFSR_USGFAULTSR_Pos + 9U)                  /*!< SCB CFSR (UFSR): DIVBYZERO Position */

+#define SCB_CFSR_DIVBYZERO_Msk            (1UL << SCB_CFSR_DIVBYZERO_Pos)                 /*!< SCB CFSR (UFSR): DIVBYZERO Mask */

+

+#define SCB_CFSR_UNALIGNED_Pos            (SCB_CFSR_USGFAULTSR_Pos + 8U)                  /*!< SCB CFSR (UFSR): UNALIGNED Position */

+#define SCB_CFSR_UNALIGNED_Msk            (1UL << SCB_CFSR_UNALIGNED_Pos)                 /*!< SCB CFSR (UFSR): UNALIGNED Mask */

+

+#define SCB_CFSR_NOCP_Pos                 (SCB_CFSR_USGFAULTSR_Pos + 3U)                  /*!< SCB CFSR (UFSR): NOCP Position */

+#define SCB_CFSR_NOCP_Msk                 (1UL << SCB_CFSR_NOCP_Pos)                      /*!< SCB CFSR (UFSR): NOCP Mask */

+

+#define SCB_CFSR_INVPC_Pos                (SCB_CFSR_USGFAULTSR_Pos + 2U)                  /*!< SCB CFSR (UFSR): INVPC Position */

+#define SCB_CFSR_INVPC_Msk                (1UL << SCB_CFSR_INVPC_Pos)                     /*!< SCB CFSR (UFSR): INVPC Mask */

+

+#define SCB_CFSR_INVSTATE_Pos             (SCB_CFSR_USGFAULTSR_Pos + 1U)                  /*!< SCB CFSR (UFSR): INVSTATE Position */

+#define SCB_CFSR_INVSTATE_Msk             (1UL << SCB_CFSR_INVSTATE_Pos)                  /*!< SCB CFSR (UFSR): INVSTATE Mask */

+

+#define SCB_CFSR_UNDEFINSTR_Pos           (SCB_CFSR_USGFAULTSR_Pos + 0U)                  /*!< SCB CFSR (UFSR): UNDEFINSTR Position */

+#define SCB_CFSR_UNDEFINSTR_Msk           (1UL << SCB_CFSR_UNDEFINSTR_Pos)                /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */

+

+/* SCB Hard Fault Status Register Definitions */

+#define SCB_HFSR_DEBUGEVT_Pos              31U                                            /*!< SCB HFSR: DEBUGEVT Position */

+#define SCB_HFSR_DEBUGEVT_Msk              (1UL << SCB_HFSR_DEBUGEVT_Pos)                 /*!< SCB HFSR: DEBUGEVT Mask */

+

+#define SCB_HFSR_FORCED_Pos                30U                                            /*!< SCB HFSR: FORCED Position */

+#define SCB_HFSR_FORCED_Msk                (1UL << SCB_HFSR_FORCED_Pos)                   /*!< SCB HFSR: FORCED Mask */

+

+#define SCB_HFSR_VECTTBL_Pos                1U                                            /*!< SCB HFSR: VECTTBL Position */

+#define SCB_HFSR_VECTTBL_Msk               (1UL << SCB_HFSR_VECTTBL_Pos)                  /*!< SCB HFSR: VECTTBL Mask */

+

+/* SCB Debug Fault Status Register Definitions */

+#define SCB_DFSR_EXTERNAL_Pos               4U                                            /*!< SCB DFSR: EXTERNAL Position */

+#define SCB_DFSR_EXTERNAL_Msk              (1UL << SCB_DFSR_EXTERNAL_Pos)                 /*!< SCB DFSR: EXTERNAL Mask */

+

+#define SCB_DFSR_VCATCH_Pos                 3U                                            /*!< SCB DFSR: VCATCH Position */

+#define SCB_DFSR_VCATCH_Msk                (1UL << SCB_DFSR_VCATCH_Pos)                   /*!< SCB DFSR: VCATCH Mask */

+

+#define SCB_DFSR_DWTTRAP_Pos                2U                                            /*!< SCB DFSR: DWTTRAP Position */

+#define SCB_DFSR_DWTTRAP_Msk               (1UL << SCB_DFSR_DWTTRAP_Pos)                  /*!< SCB DFSR: DWTTRAP Mask */

+

+#define SCB_DFSR_BKPT_Pos                   1U                                            /*!< SCB DFSR: BKPT Position */

+#define SCB_DFSR_BKPT_Msk                  (1UL << SCB_DFSR_BKPT_Pos)                     /*!< SCB DFSR: BKPT Mask */

+

+#define SCB_DFSR_HALTED_Pos                 0U                                            /*!< SCB DFSR: HALTED Position */

+#define SCB_DFSR_HALTED_Msk                (1UL /*<< SCB_DFSR_HALTED_Pos*/)               /*!< SCB DFSR: HALTED Mask */

+

+/* SCB Cache Level ID Register Definitions */

+#define SCB_CLIDR_LOUU_Pos                 27U                                            /*!< SCB CLIDR: LoUU Position */

+#define SCB_CLIDR_LOUU_Msk                 (7UL << SCB_CLIDR_LOUU_Pos)                    /*!< SCB CLIDR: LoUU Mask */

+

+#define SCB_CLIDR_LOC_Pos                  24U                                            /*!< SCB CLIDR: LoC Position */

+#define SCB_CLIDR_LOC_Msk                  (7UL << SCB_CLIDR_LOC_Pos)                     /*!< SCB CLIDR: LoC Mask */

+

+/* SCB Cache Type Register Definitions */

+#define SCB_CTR_FORMAT_Pos                 29U                                            /*!< SCB CTR: Format Position */

+#define SCB_CTR_FORMAT_Msk                 (7UL << SCB_CTR_FORMAT_Pos)                    /*!< SCB CTR: Format Mask */

+

+#define SCB_CTR_CWG_Pos                    24U                                            /*!< SCB CTR: CWG Position */

+#define SCB_CTR_CWG_Msk                    (0xFUL << SCB_CTR_CWG_Pos)                     /*!< SCB CTR: CWG Mask */

+

+#define SCB_CTR_ERG_Pos                    20U                                            /*!< SCB CTR: ERG Position */

+#define SCB_CTR_ERG_Msk                    (0xFUL << SCB_CTR_ERG_Pos)                     /*!< SCB CTR: ERG Mask */

+

+#define SCB_CTR_DMINLINE_Pos               16U                                            /*!< SCB CTR: DminLine Position */

+#define SCB_CTR_DMINLINE_Msk               (0xFUL << SCB_CTR_DMINLINE_Pos)                /*!< SCB CTR: DminLine Mask */

+

+#define SCB_CTR_IMINLINE_Pos                0U                                            /*!< SCB CTR: ImInLine Position */

+#define SCB_CTR_IMINLINE_Msk               (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/)            /*!< SCB CTR: ImInLine Mask */

+

+/* SCB Cache Size ID Register Definitions */

+#define SCB_CCSIDR_WT_Pos                  31U                                            /*!< SCB CCSIDR: WT Position */

+#define SCB_CCSIDR_WT_Msk                  (1UL << SCB_CCSIDR_WT_Pos)                     /*!< SCB CCSIDR: WT Mask */

+

+#define SCB_CCSIDR_WB_Pos                  30U                                            /*!< SCB CCSIDR: WB Position */

+#define SCB_CCSIDR_WB_Msk                  (1UL << SCB_CCSIDR_WB_Pos)                     /*!< SCB CCSIDR: WB Mask */

+

+#define SCB_CCSIDR_RA_Pos                  29U                                            /*!< SCB CCSIDR: RA Position */

+#define SCB_CCSIDR_RA_Msk                  (1UL << SCB_CCSIDR_RA_Pos)                     /*!< SCB CCSIDR: RA Mask */

+

+#define SCB_CCSIDR_WA_Pos                  28U                                            /*!< SCB CCSIDR: WA Position */

+#define SCB_CCSIDR_WA_Msk                  (1UL << SCB_CCSIDR_WA_Pos)                     /*!< SCB CCSIDR: WA Mask */

+

+#define SCB_CCSIDR_NUMSETS_Pos             13U                                            /*!< SCB CCSIDR: NumSets Position */

+#define SCB_CCSIDR_NUMSETS_Msk             (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos)           /*!< SCB CCSIDR: NumSets Mask */

+

+#define SCB_CCSIDR_ASSOCIATIVITY_Pos        3U                                            /*!< SCB CCSIDR: Associativity Position */

+#define SCB_CCSIDR_ASSOCIATIVITY_Msk       (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos)      /*!< SCB CCSIDR: Associativity Mask */

+

+#define SCB_CCSIDR_LINESIZE_Pos             0U                                            /*!< SCB CCSIDR: LineSize Position */

+#define SCB_CCSIDR_LINESIZE_Msk            (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/)           /*!< SCB CCSIDR: LineSize Mask */

+

+/* SCB Cache Size Selection Register Definitions */

+#define SCB_CSSELR_LEVEL_Pos                1U                                            /*!< SCB CSSELR: Level Position */

+#define SCB_CSSELR_LEVEL_Msk               (7UL << SCB_CSSELR_LEVEL_Pos)                  /*!< SCB CSSELR: Level Mask */

+

+#define SCB_CSSELR_IND_Pos                  0U                                            /*!< SCB CSSELR: InD Position */

+#define SCB_CSSELR_IND_Msk                 (1UL /*<< SCB_CSSELR_IND_Pos*/)                /*!< SCB CSSELR: InD Mask */

+

+/* SCB Software Triggered Interrupt Register Definitions */

+#define SCB_STIR_INTID_Pos                  0U                                            /*!< SCB STIR: INTID Position */

+#define SCB_STIR_INTID_Msk                 (0x1FFUL /*<< SCB_STIR_INTID_Pos*/)            /*!< SCB STIR: INTID Mask */

+

+/* SCB D-Cache Invalidate by Set-way Register Definitions */

+#define SCB_DCISW_WAY_Pos                  30U                                            /*!< SCB DCISW: Way Position */

+#define SCB_DCISW_WAY_Msk                  (3UL << SCB_DCISW_WAY_Pos)                     /*!< SCB DCISW: Way Mask */

+

+#define SCB_DCISW_SET_Pos                   5U                                            /*!< SCB DCISW: Set Position */

+#define SCB_DCISW_SET_Msk                  (0x1FFUL << SCB_DCISW_SET_Pos)                 /*!< SCB DCISW: Set Mask */

+

+/* SCB D-Cache Clean by Set-way Register Definitions */

+#define SCB_DCCSW_WAY_Pos                  30U                                            /*!< SCB DCCSW: Way Position */

+#define SCB_DCCSW_WAY_Msk                  (3UL << SCB_DCCSW_WAY_Pos)                     /*!< SCB DCCSW: Way Mask */

+

+#define SCB_DCCSW_SET_Pos                   5U                                            /*!< SCB DCCSW: Set Position */

+#define SCB_DCCSW_SET_Msk                  (0x1FFUL << SCB_DCCSW_SET_Pos)                 /*!< SCB DCCSW: Set Mask */

+

+/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */

+#define SCB_DCCISW_WAY_Pos                 30U                                            /*!< SCB DCCISW: Way Position */

+#define SCB_DCCISW_WAY_Msk                 (3UL << SCB_DCCISW_WAY_Pos)                    /*!< SCB DCCISW: Way Mask */

+

+#define SCB_DCCISW_SET_Pos                  5U                                            /*!< SCB DCCISW: Set Position */

+#define SCB_DCCISW_SET_Msk                 (0x1FFUL << SCB_DCCISW_SET_Pos)                /*!< SCB DCCISW: Set Mask */

+

+/* Instruction Tightly-Coupled Memory Control Register Definitions */

+#define SCB_ITCMCR_SZ_Pos                   3U                                            /*!< SCB ITCMCR: SZ Position */

+#define SCB_ITCMCR_SZ_Msk                  (0xFUL << SCB_ITCMCR_SZ_Pos)                   /*!< SCB ITCMCR: SZ Mask */

+

+#define SCB_ITCMCR_RETEN_Pos                2U                                            /*!< SCB ITCMCR: RETEN Position */

+#define SCB_ITCMCR_RETEN_Msk               (1UL << SCB_ITCMCR_RETEN_Pos)                  /*!< SCB ITCMCR: RETEN Mask */

+

+#define SCB_ITCMCR_RMW_Pos                  1U                                            /*!< SCB ITCMCR: RMW Position */

+#define SCB_ITCMCR_RMW_Msk                 (1UL << SCB_ITCMCR_RMW_Pos)                    /*!< SCB ITCMCR: RMW Mask */

+

+#define SCB_ITCMCR_EN_Pos                   0U                                            /*!< SCB ITCMCR: EN Position */

+#define SCB_ITCMCR_EN_Msk                  (1UL /*<< SCB_ITCMCR_EN_Pos*/)                 /*!< SCB ITCMCR: EN Mask */

+

+/* Data Tightly-Coupled Memory Control Register Definitions */

+#define SCB_DTCMCR_SZ_Pos                   3U                                            /*!< SCB DTCMCR: SZ Position */

+#define SCB_DTCMCR_SZ_Msk                  (0xFUL << SCB_DTCMCR_SZ_Pos)                   /*!< SCB DTCMCR: SZ Mask */

+

+#define SCB_DTCMCR_RETEN_Pos                2U                                            /*!< SCB DTCMCR: RETEN Position */

+#define SCB_DTCMCR_RETEN_Msk               (1UL << SCB_DTCMCR_RETEN_Pos)                   /*!< SCB DTCMCR: RETEN Mask */

+

+#define SCB_DTCMCR_RMW_Pos                  1U                                            /*!< SCB DTCMCR: RMW Position */

+#define SCB_DTCMCR_RMW_Msk                 (1UL << SCB_DTCMCR_RMW_Pos)                    /*!< SCB DTCMCR: RMW Mask */

+

+#define SCB_DTCMCR_EN_Pos                   0U                                            /*!< SCB DTCMCR: EN Position */

+#define SCB_DTCMCR_EN_Msk                  (1UL /*<< SCB_DTCMCR_EN_Pos*/)                 /*!< SCB DTCMCR: EN Mask */

+

+/* AHBP Control Register Definitions */

+#define SCB_AHBPCR_SZ_Pos                   1U                                            /*!< SCB AHBPCR: SZ Position */

+#define SCB_AHBPCR_SZ_Msk                  (7UL << SCB_AHBPCR_SZ_Pos)                     /*!< SCB AHBPCR: SZ Mask */

+

+#define SCB_AHBPCR_EN_Pos                   0U                                            /*!< SCB AHBPCR: EN Position */

+#define SCB_AHBPCR_EN_Msk                  (1UL /*<< SCB_AHBPCR_EN_Pos*/)                 /*!< SCB AHBPCR: EN Mask */

+

+/* L1 Cache Control Register Definitions */

+#define SCB_CACR_FORCEWT_Pos                2U                                            /*!< SCB CACR: FORCEWT Position */

+#define SCB_CACR_FORCEWT_Msk               (1UL << SCB_CACR_FORCEWT_Pos)                  /*!< SCB CACR: FORCEWT Mask */

+

+#define SCB_CACR_ECCEN_Pos                  1U                                            /*!< SCB CACR: ECCEN Position */

+#define SCB_CACR_ECCEN_Msk                 (1UL << SCB_CACR_ECCEN_Pos)                    /*!< SCB CACR: ECCEN Mask */

+

+#define SCB_CACR_SIWT_Pos                   0U                                            /*!< SCB CACR: SIWT Position */

+#define SCB_CACR_SIWT_Msk                  (1UL /*<< SCB_CACR_SIWT_Pos*/)                 /*!< SCB CACR: SIWT Mask */

+

+/* AHBS Control Register Definitions */

+#define SCB_AHBSCR_INITCOUNT_Pos           11U                                            /*!< SCB AHBSCR: INITCOUNT Position */

+#define SCB_AHBSCR_INITCOUNT_Msk           (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos)           /*!< SCB AHBSCR: INITCOUNT Mask */

+

+#define SCB_AHBSCR_TPRI_Pos                 2U                                            /*!< SCB AHBSCR: TPRI Position */

+#define SCB_AHBSCR_TPRI_Msk                (0x1FFUL << SCB_AHBPCR_TPRI_Pos)               /*!< SCB AHBSCR: TPRI Mask */

+

+#define SCB_AHBSCR_CTL_Pos                  0U                                            /*!< SCB AHBSCR: CTL Position*/

+#define SCB_AHBSCR_CTL_Msk                 (3UL /*<< SCB_AHBPCR_CTL_Pos*/)                /*!< SCB AHBSCR: CTL Mask */

+

+/* Auxiliary Bus Fault Status Register Definitions */

+#define SCB_ABFSR_AXIMTYPE_Pos              8U                                            /*!< SCB ABFSR: AXIMTYPE Position*/

+#define SCB_ABFSR_AXIMTYPE_Msk             (3UL << SCB_ABFSR_AXIMTYPE_Pos)                /*!< SCB ABFSR: AXIMTYPE Mask */

+

+#define SCB_ABFSR_EPPB_Pos                  4U                                            /*!< SCB ABFSR: EPPB Position*/

+#define SCB_ABFSR_EPPB_Msk                 (1UL << SCB_ABFSR_EPPB_Pos)                    /*!< SCB ABFSR: EPPB Mask */

+

+#define SCB_ABFSR_AXIM_Pos                  3U                                            /*!< SCB ABFSR: AXIM Position*/

+#define SCB_ABFSR_AXIM_Msk                 (1UL << SCB_ABFSR_AXIM_Pos)                    /*!< SCB ABFSR: AXIM Mask */

+

+#define SCB_ABFSR_AHBP_Pos                  2U                                            /*!< SCB ABFSR: AHBP Position*/

+#define SCB_ABFSR_AHBP_Msk                 (1UL << SCB_ABFSR_AHBP_Pos)                    /*!< SCB ABFSR: AHBP Mask */

+

+#define SCB_ABFSR_DTCM_Pos                  1U                                            /*!< SCB ABFSR: DTCM Position*/

+#define SCB_ABFSR_DTCM_Msk                 (1UL << SCB_ABFSR_DTCM_Pos)                    /*!< SCB ABFSR: DTCM Mask */

+

+#define SCB_ABFSR_ITCM_Pos                  0U                                            /*!< SCB ABFSR: ITCM Position*/

+#define SCB_ABFSR_ITCM_Msk                 (1UL /*<< SCB_ABFSR_ITCM_Pos*/)                /*!< SCB ABFSR: ITCM Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)

+  \brief    Type definitions for the System Control and ID Register not in the SCB

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control and ID Register not in the SCB.

+ */

+typedef struct

+{

+        uint32_t RESERVED0[1U];

+  __IM  uint32_t ICTR;                   /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */

+  __IOM uint32_t ACTLR;                  /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */

+} SCnSCB_Type;

+

+/* Interrupt Controller Type Register Definitions */

+#define SCnSCB_ICTR_INTLINESNUM_Pos         0U                                         /*!< ICTR: INTLINESNUM Position */

+#define SCnSCB_ICTR_INTLINESNUM_Msk        (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/)  /*!< ICTR: INTLINESNUM Mask */

+

+/* Auxiliary Control Register Definitions */

+#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos    12U                                         /*!< ACTLR: DISITMATBFLUSH Position */

+#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk    (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos)    /*!< ACTLR: DISITMATBFLUSH Mask */

+

+#define SCnSCB_ACTLR_DISRAMODE_Pos         11U                                         /*!< ACTLR: DISRAMODE Position */

+#define SCnSCB_ACTLR_DISRAMODE_Msk         (1UL << SCnSCB_ACTLR_DISRAMODE_Pos)         /*!< ACTLR: DISRAMODE Mask */

+

+#define SCnSCB_ACTLR_FPEXCODIS_Pos         10U                                         /*!< ACTLR: FPEXCODIS Position */

+#define SCnSCB_ACTLR_FPEXCODIS_Msk         (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos)         /*!< ACTLR: FPEXCODIS Mask */

+

+#define SCnSCB_ACTLR_DISFOLD_Pos            2U                                         /*!< ACTLR: DISFOLD Position */

+#define SCnSCB_ACTLR_DISFOLD_Msk           (1UL << SCnSCB_ACTLR_DISFOLD_Pos)           /*!< ACTLR: DISFOLD Mask */

+

+#define SCnSCB_ACTLR_DISMCYCINT_Pos         0U                                         /*!< ACTLR: DISMCYCINT Position */

+#define SCnSCB_ACTLR_DISMCYCINT_Msk        (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/)    /*!< ACTLR: DISMCYCINT Mask */

+

+/*@} end of group CMSIS_SCnotSCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)

+  \brief    Type definitions for the Instrumentation Trace Macrocell (ITM)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).

+ */

+typedef struct

+{

+  __OM  union

+  {

+    __OM  uint8_t    u8;                 /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */

+    __OM  uint16_t   u16;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */

+    __OM  uint32_t   u32;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */

+  }  PORT [32U];                         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */

+        uint32_t RESERVED0[864U];

+  __IOM uint32_t TER;                    /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */

+        uint32_t RESERVED1[15U];

+  __IOM uint32_t TPR;                    /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */

+        uint32_t RESERVED2[15U];

+  __IOM uint32_t TCR;                    /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */

+        uint32_t RESERVED3[29U];

+  __OM  uint32_t IWR;                    /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */

+  __IM  uint32_t IRR;                    /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */

+  __IOM uint32_t IMCR;                   /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */

+        uint32_t RESERVED4[43U];

+  __OM  uint32_t LAR;                    /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */

+  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */

+        uint32_t RESERVED5[6U];

+  __IM  uint32_t PID4;                   /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */

+  __IM  uint32_t PID5;                   /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */

+  __IM  uint32_t PID6;                   /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */

+  __IM  uint32_t PID7;                   /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */

+  __IM  uint32_t PID0;                   /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */

+  __IM  uint32_t PID1;                   /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */

+  __IM  uint32_t PID2;                   /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */

+  __IM  uint32_t PID3;                   /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */

+  __IM  uint32_t CID0;                   /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */

+  __IM  uint32_t CID1;                   /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */

+  __IM  uint32_t CID2;                   /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */

+  __IM  uint32_t CID3;                   /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */

+} ITM_Type;

+

+/* ITM Trace Privilege Register Definitions */

+#define ITM_TPR_PRIVMASK_Pos                0U                                            /*!< ITM TPR: PRIVMASK Position */

+#define ITM_TPR_PRIVMASK_Msk               (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/)     /*!< ITM TPR: PRIVMASK Mask */

+

+/* ITM Trace Control Register Definitions */

+#define ITM_TCR_BUSY_Pos                   23U                                            /*!< ITM TCR: BUSY Position */

+#define ITM_TCR_BUSY_Msk                   (1UL << ITM_TCR_BUSY_Pos)                      /*!< ITM TCR: BUSY Mask */

+

+#define ITM_TCR_TraceBusID_Pos             16U                                            /*!< ITM TCR: ATBID Position */

+#define ITM_TCR_TraceBusID_Msk             (0x7FUL << ITM_TCR_TraceBusID_Pos)             /*!< ITM TCR: ATBID Mask */

+

+#define ITM_TCR_GTSFREQ_Pos                10U                                            /*!< ITM TCR: Global timestamp frequency Position */

+#define ITM_TCR_GTSFREQ_Msk                (3UL << ITM_TCR_GTSFREQ_Pos)                   /*!< ITM TCR: Global timestamp frequency Mask */

+

+#define ITM_TCR_TSPrescale_Pos              8U                                            /*!< ITM TCR: TSPrescale Position */

+#define ITM_TCR_TSPrescale_Msk             (3UL << ITM_TCR_TSPrescale_Pos)                /*!< ITM TCR: TSPrescale Mask */

+

+#define ITM_TCR_SWOENA_Pos                  4U                                            /*!< ITM TCR: SWOENA Position */

+#define ITM_TCR_SWOENA_Msk                 (1UL << ITM_TCR_SWOENA_Pos)                    /*!< ITM TCR: SWOENA Mask */

+

+#define ITM_TCR_DWTENA_Pos                  3U                                            /*!< ITM TCR: DWTENA Position */

+#define ITM_TCR_DWTENA_Msk                 (1UL << ITM_TCR_DWTENA_Pos)                    /*!< ITM TCR: DWTENA Mask */

+

+#define ITM_TCR_SYNCENA_Pos                 2U                                            /*!< ITM TCR: SYNCENA Position */

+#define ITM_TCR_SYNCENA_Msk                (1UL << ITM_TCR_SYNCENA_Pos)                   /*!< ITM TCR: SYNCENA Mask */

+

+#define ITM_TCR_TSENA_Pos                   1U                                            /*!< ITM TCR: TSENA Position */

+#define ITM_TCR_TSENA_Msk                  (1UL << ITM_TCR_TSENA_Pos)                     /*!< ITM TCR: TSENA Mask */

+

+#define ITM_TCR_ITMENA_Pos                  0U                                            /*!< ITM TCR: ITM Enable bit Position */

+#define ITM_TCR_ITMENA_Msk                 (1UL /*<< ITM_TCR_ITMENA_Pos*/)                /*!< ITM TCR: ITM Enable bit Mask */

+

+/* ITM Integration Write Register Definitions */

+#define ITM_IWR_ATVALIDM_Pos                0U                                            /*!< ITM IWR: ATVALIDM Position */

+#define ITM_IWR_ATVALIDM_Msk               (1UL /*<< ITM_IWR_ATVALIDM_Pos*/)              /*!< ITM IWR: ATVALIDM Mask */

+

+/* ITM Integration Read Register Definitions */

+#define ITM_IRR_ATREADYM_Pos                0U                                            /*!< ITM IRR: ATREADYM Position */

+#define ITM_IRR_ATREADYM_Msk               (1UL /*<< ITM_IRR_ATREADYM_Pos*/)              /*!< ITM IRR: ATREADYM Mask */

+

+/* ITM Integration Mode Control Register Definitions */

+#define ITM_IMCR_INTEGRATION_Pos            0U                                            /*!< ITM IMCR: INTEGRATION Position */

+#define ITM_IMCR_INTEGRATION_Msk           (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/)          /*!< ITM IMCR: INTEGRATION Mask */

+

+/* ITM Lock Status Register Definitions */

+#define ITM_LSR_ByteAcc_Pos                 2U                                            /*!< ITM LSR: ByteAcc Position */

+#define ITM_LSR_ByteAcc_Msk                (1UL << ITM_LSR_ByteAcc_Pos)                   /*!< ITM LSR: ByteAcc Mask */

+

+#define ITM_LSR_Access_Pos                  1U                                            /*!< ITM LSR: Access Position */

+#define ITM_LSR_Access_Msk                 (1UL << ITM_LSR_Access_Pos)                    /*!< ITM LSR: Access Mask */

+

+#define ITM_LSR_Present_Pos                 0U                                            /*!< ITM LSR: Present Position */

+#define ITM_LSR_Present_Msk                (1UL /*<< ITM_LSR_Present_Pos*/)               /*!< ITM LSR: Present Mask */

+

+/*@}*/ /* end of group CMSIS_ITM */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)

+  \brief    Type definitions for the Data Watchpoint and Trace (DWT)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Data Watchpoint and Trace Register (DWT).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  Control Register */

+  __IOM uint32_t CYCCNT;                 /*!< Offset: 0x004 (R/W)  Cycle Count Register */

+  __IOM uint32_t CPICNT;                 /*!< Offset: 0x008 (R/W)  CPI Count Register */

+  __IOM uint32_t EXCCNT;                 /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */

+  __IOM uint32_t SLEEPCNT;               /*!< Offset: 0x010 (R/W)  Sleep Count Register */

+  __IOM uint32_t LSUCNT;                 /*!< Offset: 0x014 (R/W)  LSU Count Register */

+  __IOM uint32_t FOLDCNT;                /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */

+  __IM  uint32_t PCSR;                   /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */

+  __IOM uint32_t COMP0;                  /*!< Offset: 0x020 (R/W)  Comparator Register 0 */

+  __IOM uint32_t MASK0;                  /*!< Offset: 0x024 (R/W)  Mask Register 0 */

+  __IOM uint32_t FUNCTION0;              /*!< Offset: 0x028 (R/W)  Function Register 0 */

+        uint32_t RESERVED0[1U];

+  __IOM uint32_t COMP1;                  /*!< Offset: 0x030 (R/W)  Comparator Register 1 */

+  __IOM uint32_t MASK1;                  /*!< Offset: 0x034 (R/W)  Mask Register 1 */

+  __IOM uint32_t FUNCTION1;              /*!< Offset: 0x038 (R/W)  Function Register 1 */

+        uint32_t RESERVED1[1U];

+  __IOM uint32_t COMP2;                  /*!< Offset: 0x040 (R/W)  Comparator Register 2 */

+  __IOM uint32_t MASK2;                  /*!< Offset: 0x044 (R/W)  Mask Register 2 */

+  __IOM uint32_t FUNCTION2;              /*!< Offset: 0x048 (R/W)  Function Register 2 */

+        uint32_t RESERVED2[1U];

+  __IOM uint32_t COMP3;                  /*!< Offset: 0x050 (R/W)  Comparator Register 3 */

+  __IOM uint32_t MASK3;                  /*!< Offset: 0x054 (R/W)  Mask Register 3 */

+  __IOM uint32_t FUNCTION3;              /*!< Offset: 0x058 (R/W)  Function Register 3 */

+        uint32_t RESERVED3[981U];

+  __OM  uint32_t LAR;                    /*!< Offset: 0xFB0 (  W)  Lock Access Register */

+  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R  )  Lock Status Register */

+} DWT_Type;

+

+/* DWT Control Register Definitions */

+#define DWT_CTRL_NUMCOMP_Pos               28U                                         /*!< DWT CTRL: NUMCOMP Position */

+#define DWT_CTRL_NUMCOMP_Msk               (0xFUL << DWT_CTRL_NUMCOMP_Pos)             /*!< DWT CTRL: NUMCOMP Mask */

+

+#define DWT_CTRL_NOTRCPKT_Pos              27U                                         /*!< DWT CTRL: NOTRCPKT Position */

+#define DWT_CTRL_NOTRCPKT_Msk              (0x1UL << DWT_CTRL_NOTRCPKT_Pos)            /*!< DWT CTRL: NOTRCPKT Mask */

+

+#define DWT_CTRL_NOEXTTRIG_Pos             26U                                         /*!< DWT CTRL: NOEXTTRIG Position */

+#define DWT_CTRL_NOEXTTRIG_Msk             (0x1UL << DWT_CTRL_NOEXTTRIG_Pos)           /*!< DWT CTRL: NOEXTTRIG Mask */

+

+#define DWT_CTRL_NOCYCCNT_Pos              25U                                         /*!< DWT CTRL: NOCYCCNT Position */

+#define DWT_CTRL_NOCYCCNT_Msk              (0x1UL << DWT_CTRL_NOCYCCNT_Pos)            /*!< DWT CTRL: NOCYCCNT Mask */

+

+#define DWT_CTRL_NOPRFCNT_Pos              24U                                         /*!< DWT CTRL: NOPRFCNT Position */

+#define DWT_CTRL_NOPRFCNT_Msk              (0x1UL << DWT_CTRL_NOPRFCNT_Pos)            /*!< DWT CTRL: NOPRFCNT Mask */

+

+#define DWT_CTRL_CYCEVTENA_Pos             22U                                         /*!< DWT CTRL: CYCEVTENA Position */

+#define DWT_CTRL_CYCEVTENA_Msk             (0x1UL << DWT_CTRL_CYCEVTENA_Pos)           /*!< DWT CTRL: CYCEVTENA Mask */

+

+#define DWT_CTRL_FOLDEVTENA_Pos            21U                                         /*!< DWT CTRL: FOLDEVTENA Position */

+#define DWT_CTRL_FOLDEVTENA_Msk            (0x1UL << DWT_CTRL_FOLDEVTENA_Pos)          /*!< DWT CTRL: FOLDEVTENA Mask */

+

+#define DWT_CTRL_LSUEVTENA_Pos             20U                                         /*!< DWT CTRL: LSUEVTENA Position */

+#define DWT_CTRL_LSUEVTENA_Msk             (0x1UL << DWT_CTRL_LSUEVTENA_Pos)           /*!< DWT CTRL: LSUEVTENA Mask */

+

+#define DWT_CTRL_SLEEPEVTENA_Pos           19U                                         /*!< DWT CTRL: SLEEPEVTENA Position */

+#define DWT_CTRL_SLEEPEVTENA_Msk           (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos)         /*!< DWT CTRL: SLEEPEVTENA Mask */

+

+#define DWT_CTRL_EXCEVTENA_Pos             18U                                         /*!< DWT CTRL: EXCEVTENA Position */

+#define DWT_CTRL_EXCEVTENA_Msk             (0x1UL << DWT_CTRL_EXCEVTENA_Pos)           /*!< DWT CTRL: EXCEVTENA Mask */

+

+#define DWT_CTRL_CPIEVTENA_Pos             17U                                         /*!< DWT CTRL: CPIEVTENA Position */

+#define DWT_CTRL_CPIEVTENA_Msk             (0x1UL << DWT_CTRL_CPIEVTENA_Pos)           /*!< DWT CTRL: CPIEVTENA Mask */

+

+#define DWT_CTRL_EXCTRCENA_Pos             16U                                         /*!< DWT CTRL: EXCTRCENA Position */

+#define DWT_CTRL_EXCTRCENA_Msk             (0x1UL << DWT_CTRL_EXCTRCENA_Pos)           /*!< DWT CTRL: EXCTRCENA Mask */

+

+#define DWT_CTRL_PCSAMPLENA_Pos            12U                                         /*!< DWT CTRL: PCSAMPLENA Position */

+#define DWT_CTRL_PCSAMPLENA_Msk            (0x1UL << DWT_CTRL_PCSAMPLENA_Pos)          /*!< DWT CTRL: PCSAMPLENA Mask */

+

+#define DWT_CTRL_SYNCTAP_Pos               10U                                         /*!< DWT CTRL: SYNCTAP Position */

+#define DWT_CTRL_SYNCTAP_Msk               (0x3UL << DWT_CTRL_SYNCTAP_Pos)             /*!< DWT CTRL: SYNCTAP Mask */

+

+#define DWT_CTRL_CYCTAP_Pos                 9U                                         /*!< DWT CTRL: CYCTAP Position */

+#define DWT_CTRL_CYCTAP_Msk                (0x1UL << DWT_CTRL_CYCTAP_Pos)              /*!< DWT CTRL: CYCTAP Mask */

+

+#define DWT_CTRL_POSTINIT_Pos               5U                                         /*!< DWT CTRL: POSTINIT Position */

+#define DWT_CTRL_POSTINIT_Msk              (0xFUL << DWT_CTRL_POSTINIT_Pos)            /*!< DWT CTRL: POSTINIT Mask */

+

+#define DWT_CTRL_POSTPRESET_Pos             1U                                         /*!< DWT CTRL: POSTPRESET Position */

+#define DWT_CTRL_POSTPRESET_Msk            (0xFUL << DWT_CTRL_POSTPRESET_Pos)          /*!< DWT CTRL: POSTPRESET Mask */

+

+#define DWT_CTRL_CYCCNTENA_Pos              0U                                         /*!< DWT CTRL: CYCCNTENA Position */

+#define DWT_CTRL_CYCCNTENA_Msk             (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/)       /*!< DWT CTRL: CYCCNTENA Mask */

+

+/* DWT CPI Count Register Definitions */

+#define DWT_CPICNT_CPICNT_Pos               0U                                         /*!< DWT CPICNT: CPICNT Position */

+#define DWT_CPICNT_CPICNT_Msk              (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/)       /*!< DWT CPICNT: CPICNT Mask */

+

+/* DWT Exception Overhead Count Register Definitions */

+#define DWT_EXCCNT_EXCCNT_Pos               0U                                         /*!< DWT EXCCNT: EXCCNT Position */

+#define DWT_EXCCNT_EXCCNT_Msk              (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/)       /*!< DWT EXCCNT: EXCCNT Mask */

+

+/* DWT Sleep Count Register Definitions */

+#define DWT_SLEEPCNT_SLEEPCNT_Pos           0U                                         /*!< DWT SLEEPCNT: SLEEPCNT Position */

+#define DWT_SLEEPCNT_SLEEPCNT_Msk          (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/)   /*!< DWT SLEEPCNT: SLEEPCNT Mask */

+

+/* DWT LSU Count Register Definitions */

+#define DWT_LSUCNT_LSUCNT_Pos               0U                                         /*!< DWT LSUCNT: LSUCNT Position */

+#define DWT_LSUCNT_LSUCNT_Msk              (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/)       /*!< DWT LSUCNT: LSUCNT Mask */

+

+/* DWT Folded-instruction Count Register Definitions */

+#define DWT_FOLDCNT_FOLDCNT_Pos             0U                                         /*!< DWT FOLDCNT: FOLDCNT Position */

+#define DWT_FOLDCNT_FOLDCNT_Msk            (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/)     /*!< DWT FOLDCNT: FOLDCNT Mask */

+

+/* DWT Comparator Mask Register Definitions */

+#define DWT_MASK_MASK_Pos                   0U                                         /*!< DWT MASK: MASK Position */

+#define DWT_MASK_MASK_Msk                  (0x1FUL /*<< DWT_MASK_MASK_Pos*/)           /*!< DWT MASK: MASK Mask */

+

+/* DWT Comparator Function Register Definitions */

+#define DWT_FUNCTION_MATCHED_Pos           24U                                         /*!< DWT FUNCTION: MATCHED Position */

+#define DWT_FUNCTION_MATCHED_Msk           (0x1UL << DWT_FUNCTION_MATCHED_Pos)         /*!< DWT FUNCTION: MATCHED Mask */

+

+#define DWT_FUNCTION_DATAVADDR1_Pos        16U                                         /*!< DWT FUNCTION: DATAVADDR1 Position */

+#define DWT_FUNCTION_DATAVADDR1_Msk        (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos)      /*!< DWT FUNCTION: DATAVADDR1 Mask */

+

+#define DWT_FUNCTION_DATAVADDR0_Pos        12U                                         /*!< DWT FUNCTION: DATAVADDR0 Position */

+#define DWT_FUNCTION_DATAVADDR0_Msk        (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos)      /*!< DWT FUNCTION: DATAVADDR0 Mask */

+

+#define DWT_FUNCTION_DATAVSIZE_Pos         10U                                         /*!< DWT FUNCTION: DATAVSIZE Position */

+#define DWT_FUNCTION_DATAVSIZE_Msk         (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos)       /*!< DWT FUNCTION: DATAVSIZE Mask */

+

+#define DWT_FUNCTION_LNK1ENA_Pos            9U                                         /*!< DWT FUNCTION: LNK1ENA Position */

+#define DWT_FUNCTION_LNK1ENA_Msk           (0x1UL << DWT_FUNCTION_LNK1ENA_Pos)         /*!< DWT FUNCTION: LNK1ENA Mask */

+

+#define DWT_FUNCTION_DATAVMATCH_Pos         8U                                         /*!< DWT FUNCTION: DATAVMATCH Position */

+#define DWT_FUNCTION_DATAVMATCH_Msk        (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos)      /*!< DWT FUNCTION: DATAVMATCH Mask */

+

+#define DWT_FUNCTION_CYCMATCH_Pos           7U                                         /*!< DWT FUNCTION: CYCMATCH Position */

+#define DWT_FUNCTION_CYCMATCH_Msk          (0x1UL << DWT_FUNCTION_CYCMATCH_Pos)        /*!< DWT FUNCTION: CYCMATCH Mask */

+

+#define DWT_FUNCTION_EMITRANGE_Pos          5U                                         /*!< DWT FUNCTION: EMITRANGE Position */

+#define DWT_FUNCTION_EMITRANGE_Msk         (0x1UL << DWT_FUNCTION_EMITRANGE_Pos)       /*!< DWT FUNCTION: EMITRANGE Mask */

+

+#define DWT_FUNCTION_FUNCTION_Pos           0U                                         /*!< DWT FUNCTION: FUNCTION Position */

+#define DWT_FUNCTION_FUNCTION_Msk          (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/)    /*!< DWT FUNCTION: FUNCTION Mask */

+

+/*@}*/ /* end of group CMSIS_DWT */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_TPI     Trace Port Interface (TPI)

+  \brief    Type definitions for the Trace Port Interface (TPI)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Trace Port Interface Register (TPI).

+ */

+typedef struct

+{

+  __IM  uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */

+  __IOM uint32_t CSPSR;                  /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */

+        uint32_t RESERVED0[2U];

+  __IOM uint32_t ACPR;                   /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */

+        uint32_t RESERVED1[55U];

+  __IOM uint32_t SPPR;                   /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */

+        uint32_t RESERVED2[131U];

+  __IM  uint32_t FFSR;                   /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */

+  __IOM uint32_t FFCR;                   /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */

+  __IM  uint32_t FSCR;                   /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */

+        uint32_t RESERVED3[759U];

+  __IM  uint32_t TRIGGER;                /*!< Offset: 0xEE8 (R/ )  TRIGGER Register */

+  __IM  uint32_t FIFO0;                  /*!< Offset: 0xEEC (R/ )  Integration ETM Data */

+  __IM  uint32_t ITATBCTR2;              /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */

+        uint32_t RESERVED4[1U];

+  __IM  uint32_t ITATBCTR0;              /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */

+  __IM  uint32_t FIFO1;                  /*!< Offset: 0xEFC (R/ )  Integration ITM Data */

+  __IOM uint32_t ITCTRL;                 /*!< Offset: 0xF00 (R/W)  Integration Mode Control */

+        uint32_t RESERVED5[39U];

+  __IOM uint32_t CLAIMSET;               /*!< Offset: 0xFA0 (R/W)  Claim tag set */

+  __IOM uint32_t CLAIMCLR;               /*!< Offset: 0xFA4 (R/W)  Claim tag clear */

+        uint32_t RESERVED7[8U];

+  __IM  uint32_t DEVID;                  /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */

+  __IM  uint32_t DEVTYPE;                /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */

+} TPI_Type;

+

+/* TPI Asynchronous Clock Prescaler Register Definitions */

+#define TPI_ACPR_PRESCALER_Pos              0U                                         /*!< TPI ACPR: PRESCALER Position */

+#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< TPI ACPR: PRESCALER Mask */

+

+/* TPI Selected Pin Protocol Register Definitions */

+#define TPI_SPPR_TXMODE_Pos                 0U                                         /*!< TPI SPPR: TXMODE Position */

+#define TPI_SPPR_TXMODE_Msk                (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/)          /*!< TPI SPPR: TXMODE Mask */

+

+/* TPI Formatter and Flush Status Register Definitions */

+#define TPI_FFSR_FtNonStop_Pos              3U                                         /*!< TPI FFSR: FtNonStop Position */

+#define TPI_FFSR_FtNonStop_Msk             (0x1UL << TPI_FFSR_FtNonStop_Pos)           /*!< TPI FFSR: FtNonStop Mask */

+

+#define TPI_FFSR_TCPresent_Pos              2U                                         /*!< TPI FFSR: TCPresent Position */

+#define TPI_FFSR_TCPresent_Msk             (0x1UL << TPI_FFSR_TCPresent_Pos)           /*!< TPI FFSR: TCPresent Mask */

+

+#define TPI_FFSR_FtStopped_Pos              1U                                         /*!< TPI FFSR: FtStopped Position */

+#define TPI_FFSR_FtStopped_Msk             (0x1UL << TPI_FFSR_FtStopped_Pos)           /*!< TPI FFSR: FtStopped Mask */

+

+#define TPI_FFSR_FlInProg_Pos               0U                                         /*!< TPI FFSR: FlInProg Position */

+#define TPI_FFSR_FlInProg_Msk              (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/)        /*!< TPI FFSR: FlInProg Mask */

+

+/* TPI Formatter and Flush Control Register Definitions */

+#define TPI_FFCR_TrigIn_Pos                 8U                                         /*!< TPI FFCR: TrigIn Position */

+#define TPI_FFCR_TrigIn_Msk                (0x1UL << TPI_FFCR_TrigIn_Pos)              /*!< TPI FFCR: TrigIn Mask */

+

+#define TPI_FFCR_EnFCont_Pos                1U                                         /*!< TPI FFCR: EnFCont Position */

+#define TPI_FFCR_EnFCont_Msk               (0x1UL << TPI_FFCR_EnFCont_Pos)             /*!< TPI FFCR: EnFCont Mask */

+

+/* TPI TRIGGER Register Definitions */

+#define TPI_TRIGGER_TRIGGER_Pos             0U                                         /*!< TPI TRIGGER: TRIGGER Position */

+#define TPI_TRIGGER_TRIGGER_Msk            (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/)      /*!< TPI TRIGGER: TRIGGER Mask */

+

+/* TPI Integration ETM Data Register Definitions (FIFO0) */

+#define TPI_FIFO0_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO0: ITM_ATVALID Position */

+#define TPI_FIFO0_ITM_ATVALID_Msk          (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos)        /*!< TPI FIFO0: ITM_ATVALID Mask */

+

+#define TPI_FIFO0_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO0: ITM_bytecount Position */

+#define TPI_FIFO0_ITM_bytecount_Msk        (0x3UL << TPI_FIFO0_ITM_bytecount_Pos)      /*!< TPI FIFO0: ITM_bytecount Mask */

+

+#define TPI_FIFO0_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO0: ETM_ATVALID Position */

+#define TPI_FIFO0_ETM_ATVALID_Msk          (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos)        /*!< TPI FIFO0: ETM_ATVALID Mask */

+

+#define TPI_FIFO0_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO0: ETM_bytecount Position */

+#define TPI_FIFO0_ETM_bytecount_Msk        (0x3UL << TPI_FIFO0_ETM_bytecount_Pos)      /*!< TPI FIFO0: ETM_bytecount Mask */

+

+#define TPI_FIFO0_ETM2_Pos                 16U                                         /*!< TPI FIFO0: ETM2 Position */

+#define TPI_FIFO0_ETM2_Msk                 (0xFFUL << TPI_FIFO0_ETM2_Pos)              /*!< TPI FIFO0: ETM2 Mask */

+

+#define TPI_FIFO0_ETM1_Pos                  8U                                         /*!< TPI FIFO0: ETM1 Position */

+#define TPI_FIFO0_ETM1_Msk                 (0xFFUL << TPI_FIFO0_ETM1_Pos)              /*!< TPI FIFO0: ETM1 Mask */

+

+#define TPI_FIFO0_ETM0_Pos                  0U                                         /*!< TPI FIFO0: ETM0 Position */

+#define TPI_FIFO0_ETM0_Msk                 (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/)          /*!< TPI FIFO0: ETM0 Mask */

+

+/* TPI ITATBCTR2 Register Definitions */

+#define TPI_ITATBCTR2_ATREADY2_Pos          0U                                         /*!< TPI ITATBCTR2: ATREADY2 Position */

+#define TPI_ITATBCTR2_ATREADY2_Msk         (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/)   /*!< TPI ITATBCTR2: ATREADY2 Mask */

+

+#define TPI_ITATBCTR2_ATREADY1_Pos          0U                                         /*!< TPI ITATBCTR2: ATREADY1 Position */

+#define TPI_ITATBCTR2_ATREADY1_Msk         (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/)   /*!< TPI ITATBCTR2: ATREADY1 Mask */

+

+/* TPI Integration ITM Data Register Definitions (FIFO1) */

+#define TPI_FIFO1_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO1: ITM_ATVALID Position */

+#define TPI_FIFO1_ITM_ATVALID_Msk          (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos)        /*!< TPI FIFO1: ITM_ATVALID Mask */

+

+#define TPI_FIFO1_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO1: ITM_bytecount Position */

+#define TPI_FIFO1_ITM_bytecount_Msk        (0x3UL << TPI_FIFO1_ITM_bytecount_Pos)      /*!< TPI FIFO1: ITM_bytecount Mask */

+

+#define TPI_FIFO1_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO1: ETM_ATVALID Position */

+#define TPI_FIFO1_ETM_ATVALID_Msk          (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos)        /*!< TPI FIFO1: ETM_ATVALID Mask */

+

+#define TPI_FIFO1_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO1: ETM_bytecount Position */

+#define TPI_FIFO1_ETM_bytecount_Msk        (0x3UL << TPI_FIFO1_ETM_bytecount_Pos)      /*!< TPI FIFO1: ETM_bytecount Mask */

+

+#define TPI_FIFO1_ITM2_Pos                 16U                                         /*!< TPI FIFO1: ITM2 Position */

+#define TPI_FIFO1_ITM2_Msk                 (0xFFUL << TPI_FIFO1_ITM2_Pos)              /*!< TPI FIFO1: ITM2 Mask */

+

+#define TPI_FIFO1_ITM1_Pos                  8U                                         /*!< TPI FIFO1: ITM1 Position */

+#define TPI_FIFO1_ITM1_Msk                 (0xFFUL << TPI_FIFO1_ITM1_Pos)              /*!< TPI FIFO1: ITM1 Mask */

+

+#define TPI_FIFO1_ITM0_Pos                  0U                                         /*!< TPI FIFO1: ITM0 Position */

+#define TPI_FIFO1_ITM0_Msk                 (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/)          /*!< TPI FIFO1: ITM0 Mask */

+

+/* TPI ITATBCTR0 Register Definitions */

+#define TPI_ITATBCTR0_ATREADY2_Pos          0U                                         /*!< TPI ITATBCTR0: ATREADY2 Position */

+#define TPI_ITATBCTR0_ATREADY2_Msk         (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/)   /*!< TPI ITATBCTR0: ATREADY2 Mask */

+

+#define TPI_ITATBCTR0_ATREADY1_Pos          0U                                         /*!< TPI ITATBCTR0: ATREADY1 Position */

+#define TPI_ITATBCTR0_ATREADY1_Msk         (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/)   /*!< TPI ITATBCTR0: ATREADY1 Mask */

+

+/* TPI Integration Mode Control Register Definitions */

+#define TPI_ITCTRL_Mode_Pos                 0U                                         /*!< TPI ITCTRL: Mode Position */

+#define TPI_ITCTRL_Mode_Msk                (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */

+

+/* TPI DEVID Register Definitions */

+#define TPI_DEVID_NRZVALID_Pos             11U                                         /*!< TPI DEVID: NRZVALID Position */

+#define TPI_DEVID_NRZVALID_Msk             (0x1UL << TPI_DEVID_NRZVALID_Pos)           /*!< TPI DEVID: NRZVALID Mask */

+

+#define TPI_DEVID_MANCVALID_Pos            10U                                         /*!< TPI DEVID: MANCVALID Position */

+#define TPI_DEVID_MANCVALID_Msk            (0x1UL << TPI_DEVID_MANCVALID_Pos)          /*!< TPI DEVID: MANCVALID Mask */

+

+#define TPI_DEVID_PTINVALID_Pos             9U                                         /*!< TPI DEVID: PTINVALID Position */

+#define TPI_DEVID_PTINVALID_Msk            (0x1UL << TPI_DEVID_PTINVALID_Pos)          /*!< TPI DEVID: PTINVALID Mask */

+

+#define TPI_DEVID_MinBufSz_Pos              6U                                         /*!< TPI DEVID: MinBufSz Position */

+#define TPI_DEVID_MinBufSz_Msk             (0x7UL << TPI_DEVID_MinBufSz_Pos)           /*!< TPI DEVID: MinBufSz Mask */

+

+#define TPI_DEVID_AsynClkIn_Pos             5U                                         /*!< TPI DEVID: AsynClkIn Position */

+#define TPI_DEVID_AsynClkIn_Msk            (0x1UL << TPI_DEVID_AsynClkIn_Pos)          /*!< TPI DEVID: AsynClkIn Mask */

+

+#define TPI_DEVID_NrTraceInput_Pos          0U                                         /*!< TPI DEVID: NrTraceInput Position */

+#define TPI_DEVID_NrTraceInput_Msk         (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */

+

+/* TPI DEVTYPE Register Definitions */

+#define TPI_DEVTYPE_SubType_Pos             4U                                         /*!< TPI DEVTYPE: SubType Position */

+#define TPI_DEVTYPE_SubType_Msk            (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/)      /*!< TPI DEVTYPE: SubType Mask */

+

+#define TPI_DEVTYPE_MajorType_Pos           0U                                         /*!< TPI DEVTYPE: MajorType Position */

+#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */

+

+/*@}*/ /* end of group CMSIS_TPI */

+

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_MPU     Memory Protection Unit (MPU)

+  \brief    Type definitions for the Memory Protection Unit (MPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Memory Protection Unit (MPU).

+ */

+typedef struct

+{

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x000 (R/ )  MPU Type Register */

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x004 (R/W)  MPU Control Register */

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */

+  __IOM uint32_t RASR;                   /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A1;                /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */

+  __IOM uint32_t RASR_A1;                /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A2;                /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */

+  __IOM uint32_t RASR_A2;                /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A3;                /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */

+  __IOM uint32_t RASR_A3;                /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */

+} MPU_Type;

+

+#define MPU_TYPE_RALIASES                  4U

+

+/* MPU Type Register Definitions */

+#define MPU_TYPE_IREGION_Pos               16U                                            /*!< MPU TYPE: IREGION Position */

+#define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */

+

+#define MPU_TYPE_DREGION_Pos                8U                                            /*!< MPU TYPE: DREGION Position */

+#define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */

+

+#define MPU_TYPE_SEPARATE_Pos               0U                                            /*!< MPU TYPE: SEPARATE Position */

+#define MPU_TYPE_SEPARATE_Msk              (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)             /*!< MPU TYPE: SEPARATE Mask */

+

+/* MPU Control Register Definitions */

+#define MPU_CTRL_PRIVDEFENA_Pos             2U                                            /*!< MPU CTRL: PRIVDEFENA Position */

+#define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */

+

+#define MPU_CTRL_HFNMIENA_Pos               1U                                            /*!< MPU CTRL: HFNMIENA Position */

+#define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */

+

+#define MPU_CTRL_ENABLE_Pos                 0U                                            /*!< MPU CTRL: ENABLE Position */

+#define MPU_CTRL_ENABLE_Msk                (1UL /*<< MPU_CTRL_ENABLE_Pos*/)               /*!< MPU CTRL: ENABLE Mask */

+

+/* MPU Region Number Register Definitions */

+#define MPU_RNR_REGION_Pos                  0U                                            /*!< MPU RNR: REGION Position */

+#define MPU_RNR_REGION_Msk                 (0xFFUL /*<< MPU_RNR_REGION_Pos*/)             /*!< MPU RNR: REGION Mask */

+

+/* MPU Region Base Address Register Definitions */

+#define MPU_RBAR_ADDR_Pos                   5U                                            /*!< MPU RBAR: ADDR Position */

+#define MPU_RBAR_ADDR_Msk                  (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos)             /*!< MPU RBAR: ADDR Mask */

+

+#define MPU_RBAR_VALID_Pos                  4U                                            /*!< MPU RBAR: VALID Position */

+#define MPU_RBAR_VALID_Msk                 (1UL << MPU_RBAR_VALID_Pos)                    /*!< MPU RBAR: VALID Mask */

+

+#define MPU_RBAR_REGION_Pos                 0U                                            /*!< MPU RBAR: REGION Position */

+#define MPU_RBAR_REGION_Msk                (0xFUL /*<< MPU_RBAR_REGION_Pos*/)             /*!< MPU RBAR: REGION Mask */

+

+/* MPU Region Attribute and Size Register Definitions */

+#define MPU_RASR_ATTRS_Pos                 16U                                            /*!< MPU RASR: MPU Region Attribute field Position */

+#define MPU_RASR_ATTRS_Msk                 (0xFFFFUL << MPU_RASR_ATTRS_Pos)               /*!< MPU RASR: MPU Region Attribute field Mask */

+

+#define MPU_RASR_XN_Pos                    28U                                            /*!< MPU RASR: ATTRS.XN Position */

+#define MPU_RASR_XN_Msk                    (1UL << MPU_RASR_XN_Pos)                       /*!< MPU RASR: ATTRS.XN Mask */

+

+#define MPU_RASR_AP_Pos                    24U                                            /*!< MPU RASR: ATTRS.AP Position */

+#define MPU_RASR_AP_Msk                    (0x7UL << MPU_RASR_AP_Pos)                     /*!< MPU RASR: ATTRS.AP Mask */

+

+#define MPU_RASR_TEX_Pos                   19U                                            /*!< MPU RASR: ATTRS.TEX Position */

+#define MPU_RASR_TEX_Msk                   (0x7UL << MPU_RASR_TEX_Pos)                    /*!< MPU RASR: ATTRS.TEX Mask */

+

+#define MPU_RASR_S_Pos                     18U                                            /*!< MPU RASR: ATTRS.S Position */

+#define MPU_RASR_S_Msk                     (1UL << MPU_RASR_S_Pos)                        /*!< MPU RASR: ATTRS.S Mask */

+

+#define MPU_RASR_C_Pos                     17U                                            /*!< MPU RASR: ATTRS.C Position */

+#define MPU_RASR_C_Msk                     (1UL << MPU_RASR_C_Pos)                        /*!< MPU RASR: ATTRS.C Mask */

+

+#define MPU_RASR_B_Pos                     16U                                            /*!< MPU RASR: ATTRS.B Position */

+#define MPU_RASR_B_Msk                     (1UL << MPU_RASR_B_Pos)                        /*!< MPU RASR: ATTRS.B Mask */

+

+#define MPU_RASR_SRD_Pos                    8U                                            /*!< MPU RASR: Sub-Region Disable Position */

+#define MPU_RASR_SRD_Msk                   (0xFFUL << MPU_RASR_SRD_Pos)                   /*!< MPU RASR: Sub-Region Disable Mask */

+

+#define MPU_RASR_SIZE_Pos                   1U                                            /*!< MPU RASR: Region Size Field Position */

+#define MPU_RASR_SIZE_Msk                  (0x1FUL << MPU_RASR_SIZE_Pos)                  /*!< MPU RASR: Region Size Field Mask */

+

+#define MPU_RASR_ENABLE_Pos                 0U                                            /*!< MPU RASR: Region enable bit Position */

+#define MPU_RASR_ENABLE_Msk                (1UL /*<< MPU_RASR_ENABLE_Pos*/)               /*!< MPU RASR: Region enable bit Disable Mask */

+

+/*@} end of group CMSIS_MPU */

+#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_FPU     Floating Point Unit (FPU)

+  \brief    Type definitions for the Floating Point Unit (FPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Floating Point Unit (FPU).

+ */

+typedef struct

+{

+        uint32_t RESERVED0[1U];

+  __IOM uint32_t FPCCR;                  /*!< Offset: 0x004 (R/W)  Floating-Point Context Control Register */

+  __IOM uint32_t FPCAR;                  /*!< Offset: 0x008 (R/W)  Floating-Point Context Address Register */

+  __IOM uint32_t FPDSCR;                 /*!< Offset: 0x00C (R/W)  Floating-Point Default Status Control Register */

+  __IM  uint32_t MVFR0;                  /*!< Offset: 0x010 (R/ )  Media and FP Feature Register 0 */

+  __IM  uint32_t MVFR1;                  /*!< Offset: 0x014 (R/ )  Media and FP Feature Register 1 */

+  __IM  uint32_t MVFR2;                  /*!< Offset: 0x018 (R/ )  Media and FP Feature Register 2 */

+} FPU_Type;

+

+/* Floating-Point Context Control Register Definitions */

+#define FPU_FPCCR_ASPEN_Pos                31U                                            /*!< FPCCR: ASPEN bit Position */

+#define FPU_FPCCR_ASPEN_Msk                (1UL << FPU_FPCCR_ASPEN_Pos)                   /*!< FPCCR: ASPEN bit Mask */

+

+#define FPU_FPCCR_LSPEN_Pos                30U                                            /*!< FPCCR: LSPEN Position */

+#define FPU_FPCCR_LSPEN_Msk                (1UL << FPU_FPCCR_LSPEN_Pos)                   /*!< FPCCR: LSPEN bit Mask */

+

+#define FPU_FPCCR_MONRDY_Pos                8U                                            /*!< FPCCR: MONRDY Position */

+#define FPU_FPCCR_MONRDY_Msk               (1UL << FPU_FPCCR_MONRDY_Pos)                  /*!< FPCCR: MONRDY bit Mask */

+

+#define FPU_FPCCR_BFRDY_Pos                 6U                                            /*!< FPCCR: BFRDY Position */

+#define FPU_FPCCR_BFRDY_Msk                (1UL << FPU_FPCCR_BFRDY_Pos)                   /*!< FPCCR: BFRDY bit Mask */

+

+#define FPU_FPCCR_MMRDY_Pos                 5U                                            /*!< FPCCR: MMRDY Position */

+#define FPU_FPCCR_MMRDY_Msk                (1UL << FPU_FPCCR_MMRDY_Pos)                   /*!< FPCCR: MMRDY bit Mask */

+

+#define FPU_FPCCR_HFRDY_Pos                 4U                                            /*!< FPCCR: HFRDY Position */

+#define FPU_FPCCR_HFRDY_Msk                (1UL << FPU_FPCCR_HFRDY_Pos)                   /*!< FPCCR: HFRDY bit Mask */

+

+#define FPU_FPCCR_THREAD_Pos                3U                                            /*!< FPCCR: processor mode bit Position */

+#define FPU_FPCCR_THREAD_Msk               (1UL << FPU_FPCCR_THREAD_Pos)                  /*!< FPCCR: processor mode active bit Mask */

+

+#define FPU_FPCCR_USER_Pos                  1U                                            /*!< FPCCR: privilege level bit Position */

+#define FPU_FPCCR_USER_Msk                 (1UL << FPU_FPCCR_USER_Pos)                    /*!< FPCCR: privilege level bit Mask */

+

+#define FPU_FPCCR_LSPACT_Pos                0U                                            /*!< FPCCR: Lazy state preservation active bit Position */

+#define FPU_FPCCR_LSPACT_Msk               (1UL /*<< FPU_FPCCR_LSPACT_Pos*/)              /*!< FPCCR: Lazy state preservation active bit Mask */

+

+/* Floating-Point Context Address Register Definitions */

+#define FPU_FPCAR_ADDRESS_Pos               3U                                            /*!< FPCAR: ADDRESS bit Position */

+#define FPU_FPCAR_ADDRESS_Msk              (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos)        /*!< FPCAR: ADDRESS bit Mask */

+

+/* Floating-Point Default Status Control Register Definitions */

+#define FPU_FPDSCR_AHP_Pos                 26U                                            /*!< FPDSCR: AHP bit Position */

+#define FPU_FPDSCR_AHP_Msk                 (1UL << FPU_FPDSCR_AHP_Pos)                    /*!< FPDSCR: AHP bit Mask */

+

+#define FPU_FPDSCR_DN_Pos                  25U                                            /*!< FPDSCR: DN bit Position */

+#define FPU_FPDSCR_DN_Msk                  (1UL << FPU_FPDSCR_DN_Pos)                     /*!< FPDSCR: DN bit Mask */

+

+#define FPU_FPDSCR_FZ_Pos                  24U                                            /*!< FPDSCR: FZ bit Position */

+#define FPU_FPDSCR_FZ_Msk                  (1UL << FPU_FPDSCR_FZ_Pos)                     /*!< FPDSCR: FZ bit Mask */

+

+#define FPU_FPDSCR_RMode_Pos               22U                                            /*!< FPDSCR: RMode bit Position */

+#define FPU_FPDSCR_RMode_Msk               (3UL << FPU_FPDSCR_RMode_Pos)                  /*!< FPDSCR: RMode bit Mask */

+

+/* Media and FP Feature Register 0 Definitions */

+#define FPU_MVFR0_FP_rounding_modes_Pos    28U                                            /*!< MVFR0: FP rounding modes bits Position */

+#define FPU_MVFR0_FP_rounding_modes_Msk    (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos)     /*!< MVFR0: FP rounding modes bits Mask */

+

+#define FPU_MVFR0_Short_vectors_Pos        24U                                            /*!< MVFR0: Short vectors bits Position */

+#define FPU_MVFR0_Short_vectors_Msk        (0xFUL << FPU_MVFR0_Short_vectors_Pos)         /*!< MVFR0: Short vectors bits Mask */

+

+#define FPU_MVFR0_Square_root_Pos          20U                                            /*!< MVFR0: Square root bits Position */

+#define FPU_MVFR0_Square_root_Msk          (0xFUL << FPU_MVFR0_Square_root_Pos)           /*!< MVFR0: Square root bits Mask */

+

+#define FPU_MVFR0_Divide_Pos               16U                                            /*!< MVFR0: Divide bits Position */

+#define FPU_MVFR0_Divide_Msk               (0xFUL << FPU_MVFR0_Divide_Pos)                /*!< MVFR0: Divide bits Mask */

+

+#define FPU_MVFR0_FP_excep_trapping_Pos    12U                                            /*!< MVFR0: FP exception trapping bits Position */

+#define FPU_MVFR0_FP_excep_trapping_Msk    (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos)     /*!< MVFR0: FP exception trapping bits Mask */

+

+#define FPU_MVFR0_Double_precision_Pos      8U                                            /*!< MVFR0: Double-precision bits Position */

+#define FPU_MVFR0_Double_precision_Msk     (0xFUL << FPU_MVFR0_Double_precision_Pos)      /*!< MVFR0: Double-precision bits Mask */

+

+#define FPU_MVFR0_Single_precision_Pos      4U                                            /*!< MVFR0: Single-precision bits Position */

+#define FPU_MVFR0_Single_precision_Msk     (0xFUL << FPU_MVFR0_Single_precision_Pos)      /*!< MVFR0: Single-precision bits Mask */

+

+#define FPU_MVFR0_A_SIMD_registers_Pos      0U                                            /*!< MVFR0: A_SIMD registers bits Position */

+#define FPU_MVFR0_A_SIMD_registers_Msk     (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/)  /*!< MVFR0: A_SIMD registers bits Mask */

+

+/* Media and FP Feature Register 1 Definitions */

+#define FPU_MVFR1_FP_fused_MAC_Pos         28U                                            /*!< MVFR1: FP fused MAC bits Position */

+#define FPU_MVFR1_FP_fused_MAC_Msk         (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos)          /*!< MVFR1: FP fused MAC bits Mask */

+

+#define FPU_MVFR1_FP_HPFP_Pos              24U                                            /*!< MVFR1: FP HPFP bits Position */

+#define FPU_MVFR1_FP_HPFP_Msk              (0xFUL << FPU_MVFR1_FP_HPFP_Pos)               /*!< MVFR1: FP HPFP bits Mask */

+

+#define FPU_MVFR1_D_NaN_mode_Pos            4U                                            /*!< MVFR1: D_NaN mode bits Position */

+#define FPU_MVFR1_D_NaN_mode_Msk           (0xFUL << FPU_MVFR1_D_NaN_mode_Pos)            /*!< MVFR1: D_NaN mode bits Mask */

+

+#define FPU_MVFR1_FtZ_mode_Pos              0U                                            /*!< MVFR1: FtZ mode bits Position */

+#define FPU_MVFR1_FtZ_mode_Msk             (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/)          /*!< MVFR1: FtZ mode bits Mask */

+

+/* Media and FP Feature Register 2 Definitions */

+

+/*@} end of group CMSIS_FPU */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    Type definitions for the Core Debug Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Core Debug Register (CoreDebug).

+ */

+typedef struct

+{

+  __IOM uint32_t DHCSR;                  /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */

+  __OM  uint32_t DCRSR;                  /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */

+  __IOM uint32_t DCRDR;                  /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */

+  __IOM uint32_t DEMCR;                  /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */

+} CoreDebug_Type;

+

+/* Debug Halting Control and Status Register Definitions */

+#define CoreDebug_DHCSR_DBGKEY_Pos         16U                                            /*!< CoreDebug DHCSR: DBGKEY Position */

+#define CoreDebug_DHCSR_DBGKEY_Msk         (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos)       /*!< CoreDebug DHCSR: DBGKEY Mask */

+

+#define CoreDebug_DHCSR_S_RESET_ST_Pos     25U                                            /*!< CoreDebug DHCSR: S_RESET_ST Position */

+#define CoreDebug_DHCSR_S_RESET_ST_Msk     (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos)        /*!< CoreDebug DHCSR: S_RESET_ST Mask */

+

+#define CoreDebug_DHCSR_S_RETIRE_ST_Pos    24U                                            /*!< CoreDebug DHCSR: S_RETIRE_ST Position */

+#define CoreDebug_DHCSR_S_RETIRE_ST_Msk    (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos)       /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */

+

+#define CoreDebug_DHCSR_S_LOCKUP_Pos       19U                                            /*!< CoreDebug DHCSR: S_LOCKUP Position */

+#define CoreDebug_DHCSR_S_LOCKUP_Msk       (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos)          /*!< CoreDebug DHCSR: S_LOCKUP Mask */

+

+#define CoreDebug_DHCSR_S_SLEEP_Pos        18U                                            /*!< CoreDebug DHCSR: S_SLEEP Position */

+#define CoreDebug_DHCSR_S_SLEEP_Msk        (1UL << CoreDebug_DHCSR_S_SLEEP_Pos)           /*!< CoreDebug DHCSR: S_SLEEP Mask */

+

+#define CoreDebug_DHCSR_S_HALT_Pos         17U                                            /*!< CoreDebug DHCSR: S_HALT Position */

+#define CoreDebug_DHCSR_S_HALT_Msk         (1UL << CoreDebug_DHCSR_S_HALT_Pos)            /*!< CoreDebug DHCSR: S_HALT Mask */

+

+#define CoreDebug_DHCSR_S_REGRDY_Pos       16U                                            /*!< CoreDebug DHCSR: S_REGRDY Position */

+#define CoreDebug_DHCSR_S_REGRDY_Msk       (1UL << CoreDebug_DHCSR_S_REGRDY_Pos)          /*!< CoreDebug DHCSR: S_REGRDY Mask */

+

+#define CoreDebug_DHCSR_C_SNAPSTALL_Pos     5U                                            /*!< CoreDebug DHCSR: C_SNAPSTALL Position */

+#define CoreDebug_DHCSR_C_SNAPSTALL_Msk    (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos)       /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */

+

+#define CoreDebug_DHCSR_C_MASKINTS_Pos      3U                                            /*!< CoreDebug DHCSR: C_MASKINTS Position */

+#define CoreDebug_DHCSR_C_MASKINTS_Msk     (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos)        /*!< CoreDebug DHCSR: C_MASKINTS Mask */

+

+#define CoreDebug_DHCSR_C_STEP_Pos          2U                                            /*!< CoreDebug DHCSR: C_STEP Position */

+#define CoreDebug_DHCSR_C_STEP_Msk         (1UL << CoreDebug_DHCSR_C_STEP_Pos)            /*!< CoreDebug DHCSR: C_STEP Mask */

+

+#define CoreDebug_DHCSR_C_HALT_Pos          1U                                            /*!< CoreDebug DHCSR: C_HALT Position */

+#define CoreDebug_DHCSR_C_HALT_Msk         (1UL << CoreDebug_DHCSR_C_HALT_Pos)            /*!< CoreDebug DHCSR: C_HALT Mask */

+

+#define CoreDebug_DHCSR_C_DEBUGEN_Pos       0U                                            /*!< CoreDebug DHCSR: C_DEBUGEN Position */

+#define CoreDebug_DHCSR_C_DEBUGEN_Msk      (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/)     /*!< CoreDebug DHCSR: C_DEBUGEN Mask */

+

+/* Debug Core Register Selector Register Definitions */

+#define CoreDebug_DCRSR_REGWnR_Pos         16U                                            /*!< CoreDebug DCRSR: REGWnR Position */

+#define CoreDebug_DCRSR_REGWnR_Msk         (1UL << CoreDebug_DCRSR_REGWnR_Pos)            /*!< CoreDebug DCRSR: REGWnR Mask */

+

+#define CoreDebug_DCRSR_REGSEL_Pos          0U                                            /*!< CoreDebug DCRSR: REGSEL Position */

+#define CoreDebug_DCRSR_REGSEL_Msk         (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/)     /*!< CoreDebug DCRSR: REGSEL Mask */

+

+/* Debug Exception and Monitor Control Register Definitions */

+#define CoreDebug_DEMCR_TRCENA_Pos         24U                                            /*!< CoreDebug DEMCR: TRCENA Position */

+#define CoreDebug_DEMCR_TRCENA_Msk         (1UL << CoreDebug_DEMCR_TRCENA_Pos)            /*!< CoreDebug DEMCR: TRCENA Mask */

+

+#define CoreDebug_DEMCR_MON_REQ_Pos        19U                                            /*!< CoreDebug DEMCR: MON_REQ Position */

+#define CoreDebug_DEMCR_MON_REQ_Msk        (1UL << CoreDebug_DEMCR_MON_REQ_Pos)           /*!< CoreDebug DEMCR: MON_REQ Mask */

+

+#define CoreDebug_DEMCR_MON_STEP_Pos       18U                                            /*!< CoreDebug DEMCR: MON_STEP Position */

+#define CoreDebug_DEMCR_MON_STEP_Msk       (1UL << CoreDebug_DEMCR_MON_STEP_Pos)          /*!< CoreDebug DEMCR: MON_STEP Mask */

+

+#define CoreDebug_DEMCR_MON_PEND_Pos       17U                                            /*!< CoreDebug DEMCR: MON_PEND Position */

+#define CoreDebug_DEMCR_MON_PEND_Msk       (1UL << CoreDebug_DEMCR_MON_PEND_Pos)          /*!< CoreDebug DEMCR: MON_PEND Mask */

+

+#define CoreDebug_DEMCR_MON_EN_Pos         16U                                            /*!< CoreDebug DEMCR: MON_EN Position */

+#define CoreDebug_DEMCR_MON_EN_Msk         (1UL << CoreDebug_DEMCR_MON_EN_Pos)            /*!< CoreDebug DEMCR: MON_EN Mask */

+

+#define CoreDebug_DEMCR_VC_HARDERR_Pos     10U                                            /*!< CoreDebug DEMCR: VC_HARDERR Position */

+#define CoreDebug_DEMCR_VC_HARDERR_Msk     (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos)        /*!< CoreDebug DEMCR: VC_HARDERR Mask */

+

+#define CoreDebug_DEMCR_VC_INTERR_Pos       9U                                            /*!< CoreDebug DEMCR: VC_INTERR Position */

+#define CoreDebug_DEMCR_VC_INTERR_Msk      (1UL << CoreDebug_DEMCR_VC_INTERR_Pos)         /*!< CoreDebug DEMCR: VC_INTERR Mask */

+

+#define CoreDebug_DEMCR_VC_BUSERR_Pos       8U                                            /*!< CoreDebug DEMCR: VC_BUSERR Position */

+#define CoreDebug_DEMCR_VC_BUSERR_Msk      (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos)         /*!< CoreDebug DEMCR: VC_BUSERR Mask */

+

+#define CoreDebug_DEMCR_VC_STATERR_Pos      7U                                            /*!< CoreDebug DEMCR: VC_STATERR Position */

+#define CoreDebug_DEMCR_VC_STATERR_Msk     (1UL << CoreDebug_DEMCR_VC_STATERR_Pos)        /*!< CoreDebug DEMCR: VC_STATERR Mask */

+

+#define CoreDebug_DEMCR_VC_CHKERR_Pos       6U                                            /*!< CoreDebug DEMCR: VC_CHKERR Position */

+#define CoreDebug_DEMCR_VC_CHKERR_Msk      (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos)         /*!< CoreDebug DEMCR: VC_CHKERR Mask */

+

+#define CoreDebug_DEMCR_VC_NOCPERR_Pos      5U                                            /*!< CoreDebug DEMCR: VC_NOCPERR Position */

+#define CoreDebug_DEMCR_VC_NOCPERR_Msk     (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos)        /*!< CoreDebug DEMCR: VC_NOCPERR Mask */

+

+#define CoreDebug_DEMCR_VC_MMERR_Pos        4U                                            /*!< CoreDebug DEMCR: VC_MMERR Position */

+#define CoreDebug_DEMCR_VC_MMERR_Msk       (1UL << CoreDebug_DEMCR_VC_MMERR_Pos)          /*!< CoreDebug DEMCR: VC_MMERR Mask */

+

+#define CoreDebug_DEMCR_VC_CORERESET_Pos    0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */

+#define CoreDebug_DEMCR_VC_CORERESET_Msk   (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/)  /*!< CoreDebug DEMCR: VC_CORERESET Mask */

+

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */

+#define ITM_BASE            (0xE0000000UL)                            /*!< ITM Base Address */

+#define DWT_BASE            (0xE0001000UL)                            /*!< DWT Base Address */

+#define TPI_BASE            (0xE0040000UL)                            /*!< TPI Base Address */

+#define CoreDebug_BASE      (0xE000EDF0UL)                            /*!< Core Debug Base Address */

+#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */

+#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */

+#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */

+

+#define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE      )   /*!< System control Register not in SCB */

+#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */

+#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */

+#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */

+#define ITM                 ((ITM_Type       *)     ITM_BASE      )   /*!< ITM configuration struct */

+#define DWT                 ((DWT_Type       *)     DWT_BASE      )   /*!< DWT configuration struct */

+#define TPI                 ((TPI_Type       *)     TPI_BASE      )   /*!< TPI configuration struct */

+#define CoreDebug           ((CoreDebug_Type *)     CoreDebug_BASE)   /*!< Core Debug configuration struct */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+  #define MPU_BASE          (SCS_BASE +  0x0D90UL)                    /*!< Memory Protection Unit */

+  #define MPU               ((MPU_Type       *)     MPU_BASE      )   /*!< Memory Protection Unit */

+#endif

+

+#define FPU_BASE            (SCS_BASE +  0x0F30UL)                    /*!< Floating Point Unit */

+#define FPU                 ((FPU_Type       *)     FPU_BASE      )   /*!< Floating Point Unit */

+

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Debug Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping

+  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+  #define NVIC_GetActive              __NVIC_GetActive

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* The following EXC_RETURN values are saved the LR on exception entry */

+#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */

+#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */

+#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */

+#define EXC_RETURN_HANDLER_FPU     (0xFFFFFFE1UL)     /* return to Handler mode, uses MSP after return, restore floating-point state */

+#define EXC_RETURN_THREAD_MSP_FPU  (0xFFFFFFE9UL)     /* return to Thread mode, uses MSP after return, restore floating-point state  */

+#define EXC_RETURN_THREAD_PSP_FPU  (0xFFFFFFEDUL)     /* return to Thread mode, uses PSP after return, restore floating-point state  */

+

+

+/**

+  \brief   Set Priority Grouping

+  \details Sets the priority grouping field using the required unlock sequence.

+           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.

+           Only values from 0..7 are used.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]      PriorityGroup  Priority grouping field.

+ */

+__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)

+{

+  uint32_t reg_value;

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);             /* only values 0..7 are used          */

+

+  reg_value  =  SCB->AIRCR;                                                   /* read old register configuration    */

+  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change               */

+  reg_value  =  (reg_value                                   |

+                ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos)  );              /* Insert write key and priority group */

+  SCB->AIRCR =  reg_value;

+}

+

+

+/**

+  \brief   Get Priority Grouping

+  \details Reads the priority grouping field from the NVIC Interrupt Controller.

+  \return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void)

+{

+  return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));

+}

+

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt

+  \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IP[((uint32_t)IRQn)]                = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+  else

+  {

+    SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return(((uint32_t)NVIC->IP[((uint32_t)IRQn)]                >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Encode Priority

+  \details Encodes the priority for an interrupt with the given priority group,

+           preemptive priority value, and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]     PriorityGroup  Used priority group.

+  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).

+  \param [in]       SubPriority  Subpriority value (starting from 0).

+  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().

+ */

+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  return (

+           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |

+           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))

+         );

+}

+

+

+/**

+  \brief   Decode Priority

+  \details Decodes an interrupt priority value with a given priority group to

+           preemptive priority value and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.

+  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().

+  \param [in]     PriorityGroup  Used priority group.

+  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).

+  \param [out]     pSubPriority  Subpriority value (starting from 0).

+ */

+__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);

+  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);

+}

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           VTOR must been relocated to SRAM before.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos)    |

+                           (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

+                            SCB_AIRCR_SYSRESETREQ_Msk    );         /* Keep priority group unchanged */

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+/* ##########################  MPU functions  #################################### */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+

+#include "mpu_armv7.h"

+

+#endif

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+  uint32_t mvfr0;

+

+  mvfr0 = SCB->MVFR0;

+  if      ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U)

+  {

+    return 2U;           /* Double + Single precision FPU */

+  }

+  else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U)

+  {

+    return 1U;           /* Single precision FPU */

+  }

+  else

+  {

+    return 0U;           /* No FPU */

+  }

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##########################  Cache functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_CacheFunctions Cache Functions

+  \brief    Functions that configure Instruction and Data cache.

+  @{

+ */

+

+/* Cache Size ID Register Macros */

+#define CCSIDR_WAYS(x)         (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos)

+#define CCSIDR_SETS(x)         (((x) & SCB_CCSIDR_NUMSETS_Msk      ) >> SCB_CCSIDR_NUMSETS_Pos      )

+

+

+/**

+  \brief   Enable I-Cache

+  \details Turns on I-Cache

+  */

+__STATIC_INLINE void SCB_EnableICache (void)

+{

+  #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)

+    __DSB();

+    __ISB();

+    SCB->ICIALLU = 0UL;                     /* invalidate I-Cache */

+    __DSB();

+    __ISB();

+    SCB->CCR |=  (uint32_t)SCB_CCR_IC_Msk;  /* enable I-Cache */

+    __DSB();

+    __ISB();

+  #endif

+}

+

+

+/**

+  \brief   Disable I-Cache

+  \details Turns off I-Cache

+  */

+__STATIC_INLINE void SCB_DisableICache (void)

+{

+  #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)

+    __DSB();

+    __ISB();

+    SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk;  /* disable I-Cache */

+    SCB->ICIALLU = 0UL;                     /* invalidate I-Cache */

+    __DSB();

+    __ISB();

+  #endif

+}

+

+

+/**

+  \brief   Invalidate I-Cache

+  \details Invalidates I-Cache

+  */

+__STATIC_INLINE void SCB_InvalidateICache (void)

+{

+  #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)

+    __DSB();

+    __ISB();

+    SCB->ICIALLU = 0UL;

+    __DSB();

+    __ISB();

+  #endif

+}

+

+

+/**

+  \brief   Enable D-Cache

+  \details Turns on D-Cache

+  */

+__STATIC_INLINE void SCB_EnableDCache (void)

+{

+  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)

+    uint32_t ccsidr;

+    uint32_t sets;

+    uint32_t ways;

+

+    SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/  /* Level 1 data cache */

+    __DSB();

+

+    ccsidr = SCB->CCSIDR;

+

+                                            /* invalidate D-Cache */

+    sets = (uint32_t)(CCSIDR_SETS(ccsidr));

+    do {

+      ways = (uint32_t)(CCSIDR_WAYS(ccsidr));

+      do {

+        SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |

+                      ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk)  );

+        #if defined ( __CC_ARM )

+          __schedule_barrier();

+        #endif

+      } while (ways-- != 0U);

+    } while(sets-- != 0U);

+    __DSB();

+

+    SCB->CCR |=  (uint32_t)SCB_CCR_DC_Msk;  /* enable D-Cache */

+

+    __DSB();

+    __ISB();

+  #endif

+}

+

+

+/**

+  \brief   Disable D-Cache

+  \details Turns off D-Cache

+  */

+__STATIC_INLINE void SCB_DisableDCache (void)

+{

+  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)

+    uint32_t ccsidr;

+    uint32_t sets;

+    uint32_t ways;

+

+    SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/  /* Level 1 data cache */

+    __DSB();

+

+    SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk;  /* disable D-Cache */

+    __DSB();

+

+    ccsidr = SCB->CCSIDR;

+

+                                            /* clean & invalidate D-Cache */

+    sets = (uint32_t)(CCSIDR_SETS(ccsidr));

+    do {

+      ways = (uint32_t)(CCSIDR_WAYS(ccsidr));

+      do {

+        SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) |

+                       ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk)  );

+        #if defined ( __CC_ARM )

+          __schedule_barrier();

+        #endif

+      } while (ways-- != 0U);

+    } while(sets-- != 0U);

+

+    __DSB();

+    __ISB();

+  #endif

+}

+

+

+/**

+  \brief   Invalidate D-Cache

+  \details Invalidates D-Cache

+  */

+__STATIC_INLINE void SCB_InvalidateDCache (void)

+{

+  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)

+    uint32_t ccsidr;

+    uint32_t sets;

+    uint32_t ways;

+

+    SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/  /* Level 1 data cache */

+    __DSB();

+

+    ccsidr = SCB->CCSIDR;

+

+                                            /* invalidate D-Cache */

+    sets = (uint32_t)(CCSIDR_SETS(ccsidr));

+    do {

+      ways = (uint32_t)(CCSIDR_WAYS(ccsidr));

+      do {

+        SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |

+                      ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk)  );

+        #if defined ( __CC_ARM )

+          __schedule_barrier();

+        #endif

+      } while (ways-- != 0U);

+    } while(sets-- != 0U);

+

+    __DSB();

+    __ISB();

+  #endif

+}

+

+

+/**

+  \brief   Clean D-Cache

+  \details Cleans D-Cache

+  */

+__STATIC_INLINE void SCB_CleanDCache (void)

+{

+  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)

+    uint32_t ccsidr;

+    uint32_t sets;

+    uint32_t ways;

+

+     SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/  /* Level 1 data cache */

+   __DSB();

+

+    ccsidr = SCB->CCSIDR;

+

+                                            /* clean D-Cache */

+    sets = (uint32_t)(CCSIDR_SETS(ccsidr));

+    do {

+      ways = (uint32_t)(CCSIDR_WAYS(ccsidr));

+      do {

+        SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) |

+                      ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk)  );

+        #if defined ( __CC_ARM )

+          __schedule_barrier();

+        #endif

+      } while (ways-- != 0U);

+    } while(sets-- != 0U);

+

+    __DSB();

+    __ISB();

+  #endif

+}

+

+

+/**

+  \brief   Clean & Invalidate D-Cache

+  \details Cleans and Invalidates D-Cache

+  */

+__STATIC_INLINE void SCB_CleanInvalidateDCache (void)

+{

+  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)

+    uint32_t ccsidr;

+    uint32_t sets;

+    uint32_t ways;

+

+    SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/  /* Level 1 data cache */

+    __DSB();

+

+    ccsidr = SCB->CCSIDR;

+

+                                            /* clean & invalidate D-Cache */

+    sets = (uint32_t)(CCSIDR_SETS(ccsidr));

+    do {

+      ways = (uint32_t)(CCSIDR_WAYS(ccsidr));

+      do {

+        SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) |

+                       ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk)  );

+        #if defined ( __CC_ARM )

+          __schedule_barrier();

+        #endif

+      } while (ways-- != 0U);

+    } while(sets-- != 0U);

+

+    __DSB();

+    __ISB();

+  #endif

+}

+

+

+/**

+  \brief   D-Cache Invalidate by address

+  \details Invalidates D-Cache for the given address

+  \param[in]   addr    address (aligned to 32-byte boundary)

+  \param[in]   dsize   size of memory block (in number of bytes)

+*/

+__STATIC_INLINE void SCB_InvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize)

+{

+  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)

+     int32_t op_size = dsize;

+    uint32_t op_addr = (uint32_t)addr;

+     int32_t linesize = 32;                /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */

+

+    __DSB();

+

+    while (op_size > 0) {

+      SCB->DCIMVAC = op_addr;

+      op_addr += (uint32_t)linesize;

+      op_size -=           linesize;

+    }

+

+    __DSB();

+    __ISB();

+  #endif

+}

+

+

+/**

+  \brief   D-Cache Clean by address

+  \details Cleans D-Cache for the given address

+  \param[in]   addr    address (aligned to 32-byte boundary)

+  \param[in]   dsize   size of memory block (in number of bytes)

+*/

+__STATIC_INLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize)

+{

+  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)

+     int32_t op_size = dsize;

+    uint32_t op_addr = (uint32_t) addr;

+     int32_t linesize = 32;                /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */

+

+    __DSB();

+

+    while (op_size > 0) {

+      SCB->DCCMVAC = op_addr;

+      op_addr += (uint32_t)linesize;

+      op_size -=           linesize;

+    }

+

+    __DSB();

+    __ISB();

+  #endif

+}

+

+

+/**

+  \brief   D-Cache Clean and Invalidate by address

+  \details Cleans and invalidates D_Cache for the given address

+  \param[in]   addr    address (aligned to 32-byte boundary)

+  \param[in]   dsize   size of memory block (in number of bytes)

+*/

+__STATIC_INLINE void SCB_CleanInvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize)

+{

+  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)

+     int32_t op_size = dsize;

+    uint32_t op_addr = (uint32_t) addr;

+     int32_t linesize = 32;                /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */

+

+    __DSB();

+

+    while (op_size > 0) {

+      SCB->DCCIMVAC = op_addr;

+      op_addr += (uint32_t)linesize;

+      op_size -=           linesize;

+    }

+

+    __DSB();

+    __ISB();

+  #endif

+}

+

+

+/*@} end of CMSIS_Core_CacheFunctions */

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+/* ##################################### Debug In/Output function ########################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_core_DebugFunctions ITM Functions

+  \brief    Functions that access the ITM debug interface.

+  @{

+ */

+

+extern volatile int32_t ITM_RxBuffer;                              /*!< External variable to receive characters. */

+#define                 ITM_RXBUFFER_EMPTY  ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */

+

+

+/**

+  \brief   ITM Send Character

+  \details Transmits a character via the ITM channel 0, and

+           \li Just returns when no debugger is connected that has booked the output.

+           \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.

+  \param [in]     ch  Character to transmit.

+  \returns            Character to transmit.

+ */

+__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch)

+{

+  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) &&      /* ITM enabled */

+      ((ITM->TER & 1UL               ) != 0UL)   )     /* ITM Port #0 enabled */

+  {

+    while (ITM->PORT[0U].u32 == 0UL)

+    {

+      __NOP();

+    }

+    ITM->PORT[0U].u8 = (uint8_t)ch;

+  }

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Receive Character

+  \details Inputs a character via the external variable \ref ITM_RxBuffer.

+  \return             Received character.

+  \return         -1  No character pending.

+ */

+__STATIC_INLINE int32_t ITM_ReceiveChar (void)

+{

+  int32_t ch = -1;                           /* no character available */

+

+  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY)

+  {

+    ch = ITM_RxBuffer;

+    ITM_RxBuffer = ITM_RXBUFFER_EMPTY;       /* ready for next character */

+  }

+

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Check Character

+  \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer.

+  \return          0  No character available.

+  \return          1  Character available.

+ */

+__STATIC_INLINE int32_t ITM_CheckChar (void)

+{

+

+  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY)

+  {

+    return (0);                              /* no character available */

+  }

+  else

+  {

+    return (1);                              /*    character available */

+  }

+}

+

+/*@} end of CMSIS_core_DebugFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_CM7_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_sc000.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_sc000.h
new file mode 100644
index 0000000..9086c64
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_sc000.h
@@ -0,0 +1,1022 @@
+/**************************************************************************//**

+ * @file     core_sc000.h

+ * @brief    CMSIS SC000 Core Peripheral Access Layer Header File

+ * @version  V5.0.5

+ * @date     28. May 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_SC000_H_GENERIC

+#define __CORE_SC000_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup SC000

+  @{

+ */

+

+#include "cmsis_version.h"

+

+/*  CMSIS SC000 definitions */

+#define __SC000_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)                /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __SC000_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)                 /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __SC000_CMSIS_VERSION       ((__SC000_CMSIS_VERSION_MAIN << 16U) | \

+                                      __SC000_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_SC                 (000U)                                   /*!< Cortex secure core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    This core does not support an FPU at all

+*/

+#define __FPU_USED       0U

+

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined __ARM_PCS_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined __TI_VFP_SUPPORT__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_SC000_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_SC000_H_DEPENDANT

+#define __CORE_SC000_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __SC000_REV

+    #define __SC000_REV             0x0000U

+    #warning "__SC000_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MPU_PRESENT

+    #define __MPU_PRESENT             0U

+    #warning "__MPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          2U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group SC000 */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+  - Core MPU Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:28;              /*!< bit:  0..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */

+    uint32_t _reserved1:3;               /*!< bit: 25..27  Reserved */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:1;               /*!< bit:      0  Reserved */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */

+    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[1U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[31U];

+  __IOM uint32_t ICER[1U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[31U];

+  __IOM uint32_t ISPR[1U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[31U];

+  __IOM uint32_t ICPR[1U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[31U];

+        uint32_t RESERVED4[64U];

+  __IOM uint32_t IP[8U];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */

+}  NVIC_Type;

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+  __IOM uint32_t VTOR;                   /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+        uint32_t RESERVED0[1U];

+  __IOM uint32_t SHP[2U];                /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+        uint32_t RESERVED1[154U];

+  __IOM uint32_t SFCR;                   /*!< Offset: 0x290 (R/W)  Security Features Control Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */

+#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_VTOR_TBLOFF_Pos                 7U                                            /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos)           /*!< SCB VTOR: TBLOFF Mask */

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */

+#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)

+  \brief    Type definitions for the System Control and ID Register not in the SCB

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control and ID Register not in the SCB.

+ */

+typedef struct

+{

+        uint32_t RESERVED0[2U];

+  __IOM uint32_t ACTLR;                  /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */

+} SCnSCB_Type;

+

+/* Auxiliary Control Register Definitions */

+#define SCnSCB_ACTLR_DISMCYCINT_Pos         0U                                         /*!< ACTLR: DISMCYCINT Position */

+#define SCnSCB_ACTLR_DISMCYCINT_Msk        (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/)    /*!< ACTLR: DISMCYCINT Mask */

+

+/*@} end of group CMSIS_SCnotSCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_MPU     Memory Protection Unit (MPU)

+  \brief    Type definitions for the Memory Protection Unit (MPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Memory Protection Unit (MPU).

+ */

+typedef struct

+{

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x000 (R/ )  MPU Type Register */

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x004 (R/W)  MPU Control Register */

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */

+  __IOM uint32_t RASR;                   /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */

+} MPU_Type;

+

+/* MPU Type Register Definitions */

+#define MPU_TYPE_IREGION_Pos               16U                                            /*!< MPU TYPE: IREGION Position */

+#define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */

+

+#define MPU_TYPE_DREGION_Pos                8U                                            /*!< MPU TYPE: DREGION Position */

+#define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */

+

+#define MPU_TYPE_SEPARATE_Pos               0U                                            /*!< MPU TYPE: SEPARATE Position */

+#define MPU_TYPE_SEPARATE_Msk              (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)             /*!< MPU TYPE: SEPARATE Mask */

+

+/* MPU Control Register Definitions */

+#define MPU_CTRL_PRIVDEFENA_Pos             2U                                            /*!< MPU CTRL: PRIVDEFENA Position */

+#define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */

+

+#define MPU_CTRL_HFNMIENA_Pos               1U                                            /*!< MPU CTRL: HFNMIENA Position */

+#define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */

+

+#define MPU_CTRL_ENABLE_Pos                 0U                                            /*!< MPU CTRL: ENABLE Position */

+#define MPU_CTRL_ENABLE_Msk                (1UL /*<< MPU_CTRL_ENABLE_Pos*/)               /*!< MPU CTRL: ENABLE Mask */

+

+/* MPU Region Number Register Definitions */

+#define MPU_RNR_REGION_Pos                  0U                                            /*!< MPU RNR: REGION Position */

+#define MPU_RNR_REGION_Msk                 (0xFFUL /*<< MPU_RNR_REGION_Pos*/)             /*!< MPU RNR: REGION Mask */

+

+/* MPU Region Base Address Register Definitions */

+#define MPU_RBAR_ADDR_Pos                   8U                                            /*!< MPU RBAR: ADDR Position */

+#define MPU_RBAR_ADDR_Msk                  (0xFFFFFFUL << MPU_RBAR_ADDR_Pos)              /*!< MPU RBAR: ADDR Mask */

+

+#define MPU_RBAR_VALID_Pos                  4U                                            /*!< MPU RBAR: VALID Position */

+#define MPU_RBAR_VALID_Msk                 (1UL << MPU_RBAR_VALID_Pos)                    /*!< MPU RBAR: VALID Mask */

+

+#define MPU_RBAR_REGION_Pos                 0U                                            /*!< MPU RBAR: REGION Position */

+#define MPU_RBAR_REGION_Msk                (0xFUL /*<< MPU_RBAR_REGION_Pos*/)             /*!< MPU RBAR: REGION Mask */

+

+/* MPU Region Attribute and Size Register Definitions */

+#define MPU_RASR_ATTRS_Pos                 16U                                            /*!< MPU RASR: MPU Region Attribute field Position */

+#define MPU_RASR_ATTRS_Msk                 (0xFFFFUL << MPU_RASR_ATTRS_Pos)               /*!< MPU RASR: MPU Region Attribute field Mask */

+

+#define MPU_RASR_XN_Pos                    28U                                            /*!< MPU RASR: ATTRS.XN Position */

+#define MPU_RASR_XN_Msk                    (1UL << MPU_RASR_XN_Pos)                       /*!< MPU RASR: ATTRS.XN Mask */

+

+#define MPU_RASR_AP_Pos                    24U                                            /*!< MPU RASR: ATTRS.AP Position */

+#define MPU_RASR_AP_Msk                    (0x7UL << MPU_RASR_AP_Pos)                     /*!< MPU RASR: ATTRS.AP Mask */

+

+#define MPU_RASR_TEX_Pos                   19U                                            /*!< MPU RASR: ATTRS.TEX Position */

+#define MPU_RASR_TEX_Msk                   (0x7UL << MPU_RASR_TEX_Pos)                    /*!< MPU RASR: ATTRS.TEX Mask */

+

+#define MPU_RASR_S_Pos                     18U                                            /*!< MPU RASR: ATTRS.S Position */

+#define MPU_RASR_S_Msk                     (1UL << MPU_RASR_S_Pos)                        /*!< MPU RASR: ATTRS.S Mask */

+

+#define MPU_RASR_C_Pos                     17U                                            /*!< MPU RASR: ATTRS.C Position */

+#define MPU_RASR_C_Msk                     (1UL << MPU_RASR_C_Pos)                        /*!< MPU RASR: ATTRS.C Mask */

+

+#define MPU_RASR_B_Pos                     16U                                            /*!< MPU RASR: ATTRS.B Position */

+#define MPU_RASR_B_Msk                     (1UL << MPU_RASR_B_Pos)                        /*!< MPU RASR: ATTRS.B Mask */

+

+#define MPU_RASR_SRD_Pos                    8U                                            /*!< MPU RASR: Sub-Region Disable Position */

+#define MPU_RASR_SRD_Msk                   (0xFFUL << MPU_RASR_SRD_Pos)                   /*!< MPU RASR: Sub-Region Disable Mask */

+

+#define MPU_RASR_SIZE_Pos                   1U                                            /*!< MPU RASR: Region Size Field Position */

+#define MPU_RASR_SIZE_Msk                  (0x1FUL << MPU_RASR_SIZE_Pos)                  /*!< MPU RASR: Region Size Field Mask */

+

+#define MPU_RASR_ENABLE_Pos                 0U                                            /*!< MPU RASR: Region enable bit Position */

+#define MPU_RASR_ENABLE_Msk                (1UL /*<< MPU_RASR_ENABLE_Pos*/)               /*!< MPU RASR: Region enable bit Disable Mask */

+

+/*@} end of group CMSIS_MPU */

+#endif

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.

+            Therefore they are not covered by the SC000 header file.

+  @{

+ */

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */

+#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */

+#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */

+#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */

+

+#define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE      )   /*!< System control Register not in SCB */

+#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */

+#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */

+#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+  #define MPU_BASE          (SCS_BASE +  0x0D90UL)                    /*!< Memory Protection Unit */

+  #define MPU               ((MPU_Type       *)     MPU_BASE      )   /*!< Memory Protection Unit */

+#endif

+

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+/*#define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping   not available for SC000 */

+/*#define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping   not available for SC000 */

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+/*#define NVIC_GetActive              __NVIC_GetActive             not available for SC000 */

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* The following EXC_RETURN values are saved the LR on exception entry */

+#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */

+#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */

+#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */

+

+

+/* Interrupt Priorities are WORD accessible only under Armv6-M                  */

+/* The following MACROS handle generation of the register offset and byte masks */

+#define _BIT_SHIFT(IRQn)         (  ((((uint32_t)(int32_t)(IRQn))         )      &  0x03UL) * 8UL)

+#define _SHP_IDX(IRQn)           ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >>    2UL)      )

+#define _IP_IDX(IRQn)            (   (((uint32_t)(int32_t)(IRQn))                >>    2UL)      )

+

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IP[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+  else

+  {

+    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |

+       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           VTOR must been relocated to SRAM before.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                 SCB_AIRCR_SYSRESETREQ_Msk);

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+    return 0U;           /* No FPU */

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_SC000_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_sc300.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_sc300.h
new file mode 100644
index 0000000..665822d
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/core_sc300.h
@@ -0,0 +1,1915 @@
+/**************************************************************************//**

+ * @file     core_sc300.h

+ * @brief    CMSIS SC300 Core Peripheral Access Layer Header File

+ * @version  V5.0.6

+ * @date     04. June 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef __CORE_SC300_H_GENERIC

+#define __CORE_SC300_H_GENERIC

+

+#include <stdint.h>

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/**

+  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/**

+  \ingroup SC3000

+  @{

+ */

+

+#include "cmsis_version.h"

+

+/*  CMSIS SC300 definitions */

+#define __SC300_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)                /*!< \deprecated [31:16] CMSIS HAL main version */

+#define __SC300_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)                 /*!< \deprecated [15:0]  CMSIS HAL sub version */

+#define __SC300_CMSIS_VERSION       ((__SC300_CMSIS_VERSION_MAIN << 16U) | \

+                                      __SC300_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */

+

+#define __CORTEX_SC                 (300U)                                   /*!< Cortex secure core */

+

+/** __FPU_USED indicates whether an FPU is used or not.

+    This core does not support an FPU at all

+*/

+#define __FPU_USED       0U

+

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

+  #if defined __ARM_PCS_VFP

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TI_ARM__ )

+  #if defined __TI_VFP_SUPPORT__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __CSMC__ )

+  #if ( __CSMC__ & 0x400U)

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#endif

+

+#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_SC300_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_SC300_H_DEPENDANT

+#define __CORE_SC300_H_DEPENDANT

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __SC300_REV

+    #define __SC300_REV               0x0000U

+    #warning "__SC300_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MPU_PRESENT

+    #define __MPU_PRESENT             0U

+    #warning "__MPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          3U

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0U

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions */

+

+/* following defines should be used for structure members */

+#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */

+#define     __OM     volatile            /*! Defines 'write only' structure member permissions */

+#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */

+

+/*@} end of group SC300 */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+  - Core Debug Register

+  - Core MPU Register

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_core_register Defines and Type Definitions

+  \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_CORE  Status and Control Registers

+  \brief      Core Register type definitions.

+  @{

+ */

+

+/**

+  \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t _reserved0:27;              /*!< bit:  0..26  Reserved */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} APSR_Type;

+

+/* APSR Register Definitions */

+#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */

+#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */

+

+#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */

+#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */

+

+#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */

+#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */

+

+#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */

+#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */

+

+#define APSR_Q_Pos                         27U                                            /*!< APSR: Q Position */

+#define APSR_Q_Msk                         (1UL << APSR_Q_Pos)                            /*!< APSR: Q Mask */

+

+

+/**

+  \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} IPSR_Type;

+

+/* IPSR Register Definitions */

+#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */

+#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */

+    uint32_t _reserved0:1;               /*!< bit:      9  Reserved */

+    uint32_t ICI_IT_1:6;                 /*!< bit: 10..15  ICI/IT part 1 */

+    uint32_t _reserved1:8;               /*!< bit: 16..23  Reserved */

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit */

+    uint32_t ICI_IT_2:2;                 /*!< bit: 25..26  ICI/IT part 2 */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} xPSR_Type;

+

+/* xPSR Register Definitions */

+#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */

+#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */

+

+#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */

+#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */

+

+#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */

+#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */

+

+#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */

+#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */

+

+#define xPSR_Q_Pos                         27U                                            /*!< xPSR: Q Position */

+#define xPSR_Q_Msk                         (1UL << xPSR_Q_Pos)                            /*!< xPSR: Q Mask */

+

+#define xPSR_ICI_IT_2_Pos                  25U                                            /*!< xPSR: ICI/IT part 2 Position */

+#define xPSR_ICI_IT_2_Msk                  (3UL << xPSR_ICI_IT_2_Pos)                     /*!< xPSR: ICI/IT part 2 Mask */

+

+#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */

+#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */

+

+#define xPSR_ICI_IT_1_Pos                  10U                                            /*!< xPSR: ICI/IT part 1 Position */

+#define xPSR_ICI_IT_1_Msk                  (0x3FUL << xPSR_ICI_IT_1_Pos)                  /*!< xPSR: ICI/IT part 1 Mask */

+

+#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */

+#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */

+

+

+/**

+  \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t nPRIV:1;                    /*!< bit:      0  Execution privilege in Thread mode */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */

+    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */

+  } b;                                   /*!< Structure used for bit  access */

+  uint32_t w;                            /*!< Type      used for word access */

+} CONTROL_Type;

+

+/* CONTROL Register Definitions */

+#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */

+#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */

+

+#define CONTROL_nPRIV_Pos                   0U                                            /*!< CONTROL: nPRIV Position */

+#define CONTROL_nPRIV_Msk                  (1UL /*<< CONTROL_nPRIV_Pos*/)                 /*!< CONTROL: nPRIV Mask */

+

+/*@} end of group CMSIS_CORE */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+  \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IOM uint32_t ISER[8U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */

+        uint32_t RESERVED0[24U];

+  __IOM uint32_t ICER[8U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */

+        uint32_t RSERVED1[24U];

+  __IOM uint32_t ISPR[8U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */

+        uint32_t RESERVED2[24U];

+  __IOM uint32_t ICPR[8U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */

+        uint32_t RESERVED3[24U];

+  __IOM uint32_t IABR[8U];               /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */

+        uint32_t RESERVED4[56U];

+  __IOM uint8_t  IP[240U];               /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */

+        uint32_t RESERVED5[644U];

+  __OM  uint32_t STIR;                   /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */

+}  NVIC_Type;

+

+/* Software Triggered Interrupt Register Definitions */

+#define NVIC_STIR_INTID_Pos                 0U                                         /*!< STIR: INTLINESNUM Position */

+#define NVIC_STIR_INTID_Msk                (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/)        /*!< STIR: INTLINESNUM Mask */

+

+/*@} end of group CMSIS_NVIC */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCB     System Control Block (SCB)

+  \brief    Type definitions for the System Control Block Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */

+  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */

+  __IOM uint32_t VTOR;                   /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */

+  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */

+  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */

+  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */

+  __IOM uint8_t  SHP[12U];               /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */

+  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */

+  __IOM uint32_t CFSR;                   /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */

+  __IOM uint32_t HFSR;                   /*!< Offset: 0x02C (R/W)  HardFault Status Register */

+  __IOM uint32_t DFSR;                   /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */

+  __IOM uint32_t MMFAR;                  /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */

+  __IOM uint32_t BFAR;                   /*!< Offset: 0x038 (R/W)  BusFault Address Register */

+  __IOM uint32_t AFSR;                   /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */

+  __IM  uint32_t PFR[2U];                /*!< Offset: 0x040 (R/ )  Processor Feature Register */

+  __IM  uint32_t DFR;                    /*!< Offset: 0x048 (R/ )  Debug Feature Register */

+  __IM  uint32_t ADR;                    /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */

+  __IM  uint32_t MMFR[4U];               /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */

+  __IM  uint32_t ISAR[5U];               /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */

+        uint32_t RESERVED0[5U];

+  __IOM uint32_t CPACR;                  /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */

+        uint32_t RESERVED1[129U];

+  __IOM uint32_t SFCR;                   /*!< Offset: 0x290 (R/W)  Security Features Control Register */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */

+#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_RETTOBASE_Pos             11U                                            /*!< SCB ICSR: RETTOBASE Position */

+#define SCB_ICSR_RETTOBASE_Msk             (1UL << SCB_ICSR_RETTOBASE_Pos)                /*!< SCB ICSR: RETTOBASE Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */

+

+/* SCB Vector Table Offset Register Definitions */

+#define SCB_VTOR_TBLBASE_Pos               29U                                            /*!< SCB VTOR: TBLBASE Position */

+#define SCB_VTOR_TBLBASE_Msk               (1UL << SCB_VTOR_TBLBASE_Pos)                  /*!< SCB VTOR: TBLBASE Mask */

+

+#define SCB_VTOR_TBLOFF_Pos                 7U                                            /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos)            /*!< SCB VTOR: TBLOFF Mask */

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_PRIGROUP_Pos              8U                                            /*!< SCB AIRCR: PRIGROUP Position */

+#define SCB_AIRCR_PRIGROUP_Msk             (7UL << SCB_AIRCR_PRIGROUP_Pos)                /*!< SCB AIRCR: PRIGROUP Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+#define SCB_AIRCR_VECTRESET_Pos             0U                                            /*!< SCB AIRCR: VECTRESET Position */

+#define SCB_AIRCR_VECTRESET_Msk            (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/)           /*!< SCB AIRCR: VECTRESET Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */

+#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */

+

+#define SCB_CCR_BFHFNMIGN_Pos               8U                                            /*!< SCB CCR: BFHFNMIGN Position */

+#define SCB_CCR_BFHFNMIGN_Msk              (1UL << SCB_CCR_BFHFNMIGN_Pos)                 /*!< SCB CCR: BFHFNMIGN Mask */

+

+#define SCB_CCR_DIV_0_TRP_Pos               4U                                            /*!< SCB CCR: DIV_0_TRP Position */

+#define SCB_CCR_DIV_0_TRP_Msk              (1UL << SCB_CCR_DIV_0_TRP_Pos)                 /*!< SCB CCR: DIV_0_TRP Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+#define SCB_CCR_USERSETMPEND_Pos            1U                                            /*!< SCB CCR: USERSETMPEND Position */

+#define SCB_CCR_USERSETMPEND_Msk           (1UL << SCB_CCR_USERSETMPEND_Pos)              /*!< SCB CCR: USERSETMPEND Mask */

+

+#define SCB_CCR_NONBASETHRDENA_Pos          0U                                            /*!< SCB CCR: NONBASETHRDENA Position */

+#define SCB_CCR_NONBASETHRDENA_Msk         (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/)        /*!< SCB CCR: NONBASETHRDENA Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_USGFAULTENA_Pos          18U                                            /*!< SCB SHCSR: USGFAULTENA Position */

+#define SCB_SHCSR_USGFAULTENA_Msk          (1UL << SCB_SHCSR_USGFAULTENA_Pos)             /*!< SCB SHCSR: USGFAULTENA Mask */

+

+#define SCB_SHCSR_BUSFAULTENA_Pos          17U                                            /*!< SCB SHCSR: BUSFAULTENA Position */

+#define SCB_SHCSR_BUSFAULTENA_Msk          (1UL << SCB_SHCSR_BUSFAULTENA_Pos)             /*!< SCB SHCSR: BUSFAULTENA Mask */

+

+#define SCB_SHCSR_MEMFAULTENA_Pos          16U                                            /*!< SCB SHCSR: MEMFAULTENA Position */

+#define SCB_SHCSR_MEMFAULTENA_Msk          (1UL << SCB_SHCSR_MEMFAULTENA_Pos)             /*!< SCB SHCSR: MEMFAULTENA Mask */

+

+#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+#define SCB_SHCSR_BUSFAULTPENDED_Pos       14U                                            /*!< SCB SHCSR: BUSFAULTPENDED Position */

+#define SCB_SHCSR_BUSFAULTPENDED_Msk       (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos)          /*!< SCB SHCSR: BUSFAULTPENDED Mask */

+

+#define SCB_SHCSR_MEMFAULTPENDED_Pos       13U                                            /*!< SCB SHCSR: MEMFAULTPENDED Position */

+#define SCB_SHCSR_MEMFAULTPENDED_Msk       (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos)          /*!< SCB SHCSR: MEMFAULTPENDED Mask */

+

+#define SCB_SHCSR_USGFAULTPENDED_Pos       12U                                            /*!< SCB SHCSR: USGFAULTPENDED Position */

+#define SCB_SHCSR_USGFAULTPENDED_Msk       (1UL << SCB_SHCSR_USGFAULTPENDED_Pos)          /*!< SCB SHCSR: USGFAULTPENDED Mask */

+

+#define SCB_SHCSR_SYSTICKACT_Pos           11U                                            /*!< SCB SHCSR: SYSTICKACT Position */

+#define SCB_SHCSR_SYSTICKACT_Msk           (1UL << SCB_SHCSR_SYSTICKACT_Pos)              /*!< SCB SHCSR: SYSTICKACT Mask */

+

+#define SCB_SHCSR_PENDSVACT_Pos            10U                                            /*!< SCB SHCSR: PENDSVACT Position */

+#define SCB_SHCSR_PENDSVACT_Msk            (1UL << SCB_SHCSR_PENDSVACT_Pos)               /*!< SCB SHCSR: PENDSVACT Mask */

+

+#define SCB_SHCSR_MONITORACT_Pos            8U                                            /*!< SCB SHCSR: MONITORACT Position */

+#define SCB_SHCSR_MONITORACT_Msk           (1UL << SCB_SHCSR_MONITORACT_Pos)              /*!< SCB SHCSR: MONITORACT Mask */

+

+#define SCB_SHCSR_SVCALLACT_Pos             7U                                            /*!< SCB SHCSR: SVCALLACT Position */

+#define SCB_SHCSR_SVCALLACT_Msk            (1UL << SCB_SHCSR_SVCALLACT_Pos)               /*!< SCB SHCSR: SVCALLACT Mask */

+

+#define SCB_SHCSR_USGFAULTACT_Pos           3U                                            /*!< SCB SHCSR: USGFAULTACT Position */

+#define SCB_SHCSR_USGFAULTACT_Msk          (1UL << SCB_SHCSR_USGFAULTACT_Pos)             /*!< SCB SHCSR: USGFAULTACT Mask */

+

+#define SCB_SHCSR_BUSFAULTACT_Pos           1U                                            /*!< SCB SHCSR: BUSFAULTACT Position */

+#define SCB_SHCSR_BUSFAULTACT_Msk          (1UL << SCB_SHCSR_BUSFAULTACT_Pos)             /*!< SCB SHCSR: BUSFAULTACT Mask */

+

+#define SCB_SHCSR_MEMFAULTACT_Pos           0U                                            /*!< SCB SHCSR: MEMFAULTACT Position */

+#define SCB_SHCSR_MEMFAULTACT_Msk          (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/)         /*!< SCB SHCSR: MEMFAULTACT Mask */

+

+/* SCB Configurable Fault Status Register Definitions */

+#define SCB_CFSR_USGFAULTSR_Pos            16U                                            /*!< SCB CFSR: Usage Fault Status Register Position */

+#define SCB_CFSR_USGFAULTSR_Msk            (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos)          /*!< SCB CFSR: Usage Fault Status Register Mask */

+

+#define SCB_CFSR_BUSFAULTSR_Pos             8U                                            /*!< SCB CFSR: Bus Fault Status Register Position */

+#define SCB_CFSR_BUSFAULTSR_Msk            (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos)            /*!< SCB CFSR: Bus Fault Status Register Mask */

+

+#define SCB_CFSR_MEMFAULTSR_Pos             0U                                            /*!< SCB CFSR: Memory Manage Fault Status Register Position */

+#define SCB_CFSR_MEMFAULTSR_Msk            (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/)        /*!< SCB CFSR: Memory Manage Fault Status Register Mask */

+

+/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_MMARVALID_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 7U)               /*!< SCB CFSR (MMFSR): MMARVALID Position */

+#define SCB_CFSR_MMARVALID_Msk             (1UL << SCB_CFSR_MMARVALID_Pos)                /*!< SCB CFSR (MMFSR): MMARVALID Mask */

+

+#define SCB_CFSR_MSTKERR_Pos               (SCB_SHCSR_MEMFAULTACT_Pos + 4U)               /*!< SCB CFSR (MMFSR): MSTKERR Position */

+#define SCB_CFSR_MSTKERR_Msk               (1UL << SCB_CFSR_MSTKERR_Pos)                  /*!< SCB CFSR (MMFSR): MSTKERR Mask */

+

+#define SCB_CFSR_MUNSTKERR_Pos             (SCB_SHCSR_MEMFAULTACT_Pos + 3U)               /*!< SCB CFSR (MMFSR): MUNSTKERR Position */

+#define SCB_CFSR_MUNSTKERR_Msk             (1UL << SCB_CFSR_MUNSTKERR_Pos)                /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */

+

+#define SCB_CFSR_DACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 1U)               /*!< SCB CFSR (MMFSR): DACCVIOL Position */

+#define SCB_CFSR_DACCVIOL_Msk              (1UL << SCB_CFSR_DACCVIOL_Pos)                 /*!< SCB CFSR (MMFSR): DACCVIOL Mask */

+

+#define SCB_CFSR_IACCVIOL_Pos              (SCB_SHCSR_MEMFAULTACT_Pos + 0U)               /*!< SCB CFSR (MMFSR): IACCVIOL Position */

+#define SCB_CFSR_IACCVIOL_Msk              (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/)             /*!< SCB CFSR (MMFSR): IACCVIOL Mask */

+

+/* BusFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_BFARVALID_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 7U)                  /*!< SCB CFSR (BFSR): BFARVALID Position */

+#define SCB_CFSR_BFARVALID_Msk            (1UL << SCB_CFSR_BFARVALID_Pos)                 /*!< SCB CFSR (BFSR): BFARVALID Mask */

+

+#define SCB_CFSR_STKERR_Pos               (SCB_CFSR_BUSFAULTSR_Pos + 4U)                  /*!< SCB CFSR (BFSR): STKERR Position */

+#define SCB_CFSR_STKERR_Msk               (1UL << SCB_CFSR_STKERR_Pos)                    /*!< SCB CFSR (BFSR): STKERR Mask */

+

+#define SCB_CFSR_UNSTKERR_Pos             (SCB_CFSR_BUSFAULTSR_Pos + 3U)                  /*!< SCB CFSR (BFSR): UNSTKERR Position */

+#define SCB_CFSR_UNSTKERR_Msk             (1UL << SCB_CFSR_UNSTKERR_Pos)                  /*!< SCB CFSR (BFSR): UNSTKERR Mask */

+

+#define SCB_CFSR_IMPRECISERR_Pos          (SCB_CFSR_BUSFAULTSR_Pos + 2U)                  /*!< SCB CFSR (BFSR): IMPRECISERR Position */

+#define SCB_CFSR_IMPRECISERR_Msk          (1UL << SCB_CFSR_IMPRECISERR_Pos)               /*!< SCB CFSR (BFSR): IMPRECISERR Mask */

+

+#define SCB_CFSR_PRECISERR_Pos            (SCB_CFSR_BUSFAULTSR_Pos + 1U)                  /*!< SCB CFSR (BFSR): PRECISERR Position */

+#define SCB_CFSR_PRECISERR_Msk            (1UL << SCB_CFSR_PRECISERR_Pos)                 /*!< SCB CFSR (BFSR): PRECISERR Mask */

+

+#define SCB_CFSR_IBUSERR_Pos              (SCB_CFSR_BUSFAULTSR_Pos + 0U)                  /*!< SCB CFSR (BFSR): IBUSERR Position */

+#define SCB_CFSR_IBUSERR_Msk              (1UL << SCB_CFSR_IBUSERR_Pos)                   /*!< SCB CFSR (BFSR): IBUSERR Mask */

+

+/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */

+#define SCB_CFSR_DIVBYZERO_Pos            (SCB_CFSR_USGFAULTSR_Pos + 9U)                  /*!< SCB CFSR (UFSR): DIVBYZERO Position */

+#define SCB_CFSR_DIVBYZERO_Msk            (1UL << SCB_CFSR_DIVBYZERO_Pos)                 /*!< SCB CFSR (UFSR): DIVBYZERO Mask */

+

+#define SCB_CFSR_UNALIGNED_Pos            (SCB_CFSR_USGFAULTSR_Pos + 8U)                  /*!< SCB CFSR (UFSR): UNALIGNED Position */

+#define SCB_CFSR_UNALIGNED_Msk            (1UL << SCB_CFSR_UNALIGNED_Pos)                 /*!< SCB CFSR (UFSR): UNALIGNED Mask */

+

+#define SCB_CFSR_NOCP_Pos                 (SCB_CFSR_USGFAULTSR_Pos + 3U)                  /*!< SCB CFSR (UFSR): NOCP Position */

+#define SCB_CFSR_NOCP_Msk                 (1UL << SCB_CFSR_NOCP_Pos)                      /*!< SCB CFSR (UFSR): NOCP Mask */

+

+#define SCB_CFSR_INVPC_Pos                (SCB_CFSR_USGFAULTSR_Pos + 2U)                  /*!< SCB CFSR (UFSR): INVPC Position */

+#define SCB_CFSR_INVPC_Msk                (1UL << SCB_CFSR_INVPC_Pos)                     /*!< SCB CFSR (UFSR): INVPC Mask */

+

+#define SCB_CFSR_INVSTATE_Pos             (SCB_CFSR_USGFAULTSR_Pos + 1U)                  /*!< SCB CFSR (UFSR): INVSTATE Position */

+#define SCB_CFSR_INVSTATE_Msk             (1UL << SCB_CFSR_INVSTATE_Pos)                  /*!< SCB CFSR (UFSR): INVSTATE Mask */

+

+#define SCB_CFSR_UNDEFINSTR_Pos           (SCB_CFSR_USGFAULTSR_Pos + 0U)                  /*!< SCB CFSR (UFSR): UNDEFINSTR Position */

+#define SCB_CFSR_UNDEFINSTR_Msk           (1UL << SCB_CFSR_UNDEFINSTR_Pos)                /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */

+

+/* SCB Hard Fault Status Register Definitions */

+#define SCB_HFSR_DEBUGEVT_Pos              31U                                            /*!< SCB HFSR: DEBUGEVT Position */

+#define SCB_HFSR_DEBUGEVT_Msk              (1UL << SCB_HFSR_DEBUGEVT_Pos)                 /*!< SCB HFSR: DEBUGEVT Mask */

+

+#define SCB_HFSR_FORCED_Pos                30U                                            /*!< SCB HFSR: FORCED Position */

+#define SCB_HFSR_FORCED_Msk                (1UL << SCB_HFSR_FORCED_Pos)                   /*!< SCB HFSR: FORCED Mask */

+

+#define SCB_HFSR_VECTTBL_Pos                1U                                            /*!< SCB HFSR: VECTTBL Position */

+#define SCB_HFSR_VECTTBL_Msk               (1UL << SCB_HFSR_VECTTBL_Pos)                  /*!< SCB HFSR: VECTTBL Mask */

+

+/* SCB Debug Fault Status Register Definitions */

+#define SCB_DFSR_EXTERNAL_Pos               4U                                            /*!< SCB DFSR: EXTERNAL Position */

+#define SCB_DFSR_EXTERNAL_Msk              (1UL << SCB_DFSR_EXTERNAL_Pos)                 /*!< SCB DFSR: EXTERNAL Mask */

+

+#define SCB_DFSR_VCATCH_Pos                 3U                                            /*!< SCB DFSR: VCATCH Position */

+#define SCB_DFSR_VCATCH_Msk                (1UL << SCB_DFSR_VCATCH_Pos)                   /*!< SCB DFSR: VCATCH Mask */

+

+#define SCB_DFSR_DWTTRAP_Pos                2U                                            /*!< SCB DFSR: DWTTRAP Position */

+#define SCB_DFSR_DWTTRAP_Msk               (1UL << SCB_DFSR_DWTTRAP_Pos)                  /*!< SCB DFSR: DWTTRAP Mask */

+

+#define SCB_DFSR_BKPT_Pos                   1U                                            /*!< SCB DFSR: BKPT Position */

+#define SCB_DFSR_BKPT_Msk                  (1UL << SCB_DFSR_BKPT_Pos)                     /*!< SCB DFSR: BKPT Mask */

+

+#define SCB_DFSR_HALTED_Pos                 0U                                            /*!< SCB DFSR: HALTED Position */

+#define SCB_DFSR_HALTED_Msk                (1UL /*<< SCB_DFSR_HALTED_Pos*/)               /*!< SCB DFSR: HALTED Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)

+  \brief    Type definitions for the System Control and ID Register not in the SCB

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Control and ID Register not in the SCB.

+ */

+typedef struct

+{

+        uint32_t RESERVED0[1U];

+  __IM  uint32_t ICTR;                   /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */

+        uint32_t RESERVED1[1U];

+} SCnSCB_Type;

+

+/* Interrupt Controller Type Register Definitions */

+#define SCnSCB_ICTR_INTLINESNUM_Pos         0U                                         /*!< ICTR: INTLINESNUM Position */

+#define SCnSCB_ICTR_INTLINESNUM_Msk        (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/)  /*!< ICTR: INTLINESNUM Mask */

+

+/*@} end of group CMSIS_SCnotSCB */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+  \brief    Type definitions for the System Timer Registers.

+  @{

+ */

+

+/**

+  \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

+  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

+  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)

+  \brief    Type definitions for the Instrumentation Trace Macrocell (ITM)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).

+ */

+typedef struct

+{

+  __OM  union

+  {

+    __OM  uint8_t    u8;                 /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */

+    __OM  uint16_t   u16;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */

+    __OM  uint32_t   u32;                /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */

+  }  PORT [32U];                         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */

+        uint32_t RESERVED0[864U];

+  __IOM uint32_t TER;                    /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */

+        uint32_t RESERVED1[15U];

+  __IOM uint32_t TPR;                    /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */

+        uint32_t RESERVED2[15U];

+  __IOM uint32_t TCR;                    /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */

+        uint32_t RESERVED3[29U];

+  __OM  uint32_t IWR;                    /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */

+  __IM  uint32_t IRR;                    /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */

+  __IOM uint32_t IMCR;                   /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */

+        uint32_t RESERVED4[43U];

+  __OM  uint32_t LAR;                    /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */

+  __IM  uint32_t LSR;                    /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */

+        uint32_t RESERVED5[6U];

+  __IM  uint32_t PID4;                   /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */

+  __IM  uint32_t PID5;                   /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */

+  __IM  uint32_t PID6;                   /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */

+  __IM  uint32_t PID7;                   /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */

+  __IM  uint32_t PID0;                   /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */

+  __IM  uint32_t PID1;                   /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */

+  __IM  uint32_t PID2;                   /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */

+  __IM  uint32_t PID3;                   /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */

+  __IM  uint32_t CID0;                   /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */

+  __IM  uint32_t CID1;                   /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */

+  __IM  uint32_t CID2;                   /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */

+  __IM  uint32_t CID3;                   /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */

+} ITM_Type;

+

+/* ITM Trace Privilege Register Definitions */

+#define ITM_TPR_PRIVMASK_Pos                0U                                            /*!< ITM TPR: PRIVMASK Position */

+#define ITM_TPR_PRIVMASK_Msk               (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/)            /*!< ITM TPR: PRIVMASK Mask */

+

+/* ITM Trace Control Register Definitions */

+#define ITM_TCR_BUSY_Pos                   23U                                            /*!< ITM TCR: BUSY Position */

+#define ITM_TCR_BUSY_Msk                   (1UL << ITM_TCR_BUSY_Pos)                      /*!< ITM TCR: BUSY Mask */

+

+#define ITM_TCR_TraceBusID_Pos             16U                                            /*!< ITM TCR: ATBID Position */

+#define ITM_TCR_TraceBusID_Msk             (0x7FUL << ITM_TCR_TraceBusID_Pos)             /*!< ITM TCR: ATBID Mask */

+

+#define ITM_TCR_GTSFREQ_Pos                10U                                            /*!< ITM TCR: Global timestamp frequency Position */

+#define ITM_TCR_GTSFREQ_Msk                (3UL << ITM_TCR_GTSFREQ_Pos)                   /*!< ITM TCR: Global timestamp frequency Mask */

+

+#define ITM_TCR_TSPrescale_Pos              8U                                            /*!< ITM TCR: TSPrescale Position */

+#define ITM_TCR_TSPrescale_Msk             (3UL << ITM_TCR_TSPrescale_Pos)                /*!< ITM TCR: TSPrescale Mask */

+

+#define ITM_TCR_SWOENA_Pos                  4U                                            /*!< ITM TCR: SWOENA Position */

+#define ITM_TCR_SWOENA_Msk                 (1UL << ITM_TCR_SWOENA_Pos)                    /*!< ITM TCR: SWOENA Mask */

+

+#define ITM_TCR_DWTENA_Pos                  3U                                            /*!< ITM TCR: DWTENA Position */

+#define ITM_TCR_DWTENA_Msk                 (1UL << ITM_TCR_DWTENA_Pos)                    /*!< ITM TCR: DWTENA Mask */

+

+#define ITM_TCR_SYNCENA_Pos                 2U                                            /*!< ITM TCR: SYNCENA Position */

+#define ITM_TCR_SYNCENA_Msk                (1UL << ITM_TCR_SYNCENA_Pos)                   /*!< ITM TCR: SYNCENA Mask */

+

+#define ITM_TCR_TSENA_Pos                   1U                                            /*!< ITM TCR: TSENA Position */

+#define ITM_TCR_TSENA_Msk                  (1UL << ITM_TCR_TSENA_Pos)                     /*!< ITM TCR: TSENA Mask */

+

+#define ITM_TCR_ITMENA_Pos                  0U                                            /*!< ITM TCR: ITM Enable bit Position */

+#define ITM_TCR_ITMENA_Msk                 (1UL /*<< ITM_TCR_ITMENA_Pos*/)                /*!< ITM TCR: ITM Enable bit Mask */

+

+/* ITM Integration Write Register Definitions */

+#define ITM_IWR_ATVALIDM_Pos                0U                                            /*!< ITM IWR: ATVALIDM Position */

+#define ITM_IWR_ATVALIDM_Msk               (1UL /*<< ITM_IWR_ATVALIDM_Pos*/)              /*!< ITM IWR: ATVALIDM Mask */

+

+/* ITM Integration Read Register Definitions */

+#define ITM_IRR_ATREADYM_Pos                0U                                            /*!< ITM IRR: ATREADYM Position */

+#define ITM_IRR_ATREADYM_Msk               (1UL /*<< ITM_IRR_ATREADYM_Pos*/)              /*!< ITM IRR: ATREADYM Mask */

+

+/* ITM Integration Mode Control Register Definitions */

+#define ITM_IMCR_INTEGRATION_Pos            0U                                            /*!< ITM IMCR: INTEGRATION Position */

+#define ITM_IMCR_INTEGRATION_Msk           (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/)          /*!< ITM IMCR: INTEGRATION Mask */

+

+/* ITM Lock Status Register Definitions */

+#define ITM_LSR_ByteAcc_Pos                 2U                                            /*!< ITM LSR: ByteAcc Position */

+#define ITM_LSR_ByteAcc_Msk                (1UL << ITM_LSR_ByteAcc_Pos)                   /*!< ITM LSR: ByteAcc Mask */

+

+#define ITM_LSR_Access_Pos                  1U                                            /*!< ITM LSR: Access Position */

+#define ITM_LSR_Access_Msk                 (1UL << ITM_LSR_Access_Pos)                    /*!< ITM LSR: Access Mask */

+

+#define ITM_LSR_Present_Pos                 0U                                            /*!< ITM LSR: Present Position */

+#define ITM_LSR_Present_Msk                (1UL /*<< ITM_LSR_Present_Pos*/)               /*!< ITM LSR: Present Mask */

+

+/*@}*/ /* end of group CMSIS_ITM */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)

+  \brief    Type definitions for the Data Watchpoint and Trace (DWT)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Data Watchpoint and Trace Register (DWT).

+ */

+typedef struct

+{

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  Control Register */

+  __IOM uint32_t CYCCNT;                 /*!< Offset: 0x004 (R/W)  Cycle Count Register */

+  __IOM uint32_t CPICNT;                 /*!< Offset: 0x008 (R/W)  CPI Count Register */

+  __IOM uint32_t EXCCNT;                 /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */

+  __IOM uint32_t SLEEPCNT;               /*!< Offset: 0x010 (R/W)  Sleep Count Register */

+  __IOM uint32_t LSUCNT;                 /*!< Offset: 0x014 (R/W)  LSU Count Register */

+  __IOM uint32_t FOLDCNT;                /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */

+  __IM  uint32_t PCSR;                   /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */

+  __IOM uint32_t COMP0;                  /*!< Offset: 0x020 (R/W)  Comparator Register 0 */

+  __IOM uint32_t MASK0;                  /*!< Offset: 0x024 (R/W)  Mask Register 0 */

+  __IOM uint32_t FUNCTION0;              /*!< Offset: 0x028 (R/W)  Function Register 0 */

+        uint32_t RESERVED0[1U];

+  __IOM uint32_t COMP1;                  /*!< Offset: 0x030 (R/W)  Comparator Register 1 */

+  __IOM uint32_t MASK1;                  /*!< Offset: 0x034 (R/W)  Mask Register 1 */

+  __IOM uint32_t FUNCTION1;              /*!< Offset: 0x038 (R/W)  Function Register 1 */

+        uint32_t RESERVED1[1U];

+  __IOM uint32_t COMP2;                  /*!< Offset: 0x040 (R/W)  Comparator Register 2 */

+  __IOM uint32_t MASK2;                  /*!< Offset: 0x044 (R/W)  Mask Register 2 */

+  __IOM uint32_t FUNCTION2;              /*!< Offset: 0x048 (R/W)  Function Register 2 */

+        uint32_t RESERVED2[1U];

+  __IOM uint32_t COMP3;                  /*!< Offset: 0x050 (R/W)  Comparator Register 3 */

+  __IOM uint32_t MASK3;                  /*!< Offset: 0x054 (R/W)  Mask Register 3 */

+  __IOM uint32_t FUNCTION3;              /*!< Offset: 0x058 (R/W)  Function Register 3 */

+} DWT_Type;

+

+/* DWT Control Register Definitions */

+#define DWT_CTRL_NUMCOMP_Pos               28U                                         /*!< DWT CTRL: NUMCOMP Position */

+#define DWT_CTRL_NUMCOMP_Msk               (0xFUL << DWT_CTRL_NUMCOMP_Pos)             /*!< DWT CTRL: NUMCOMP Mask */

+

+#define DWT_CTRL_NOTRCPKT_Pos              27U                                         /*!< DWT CTRL: NOTRCPKT Position */

+#define DWT_CTRL_NOTRCPKT_Msk              (0x1UL << DWT_CTRL_NOTRCPKT_Pos)            /*!< DWT CTRL: NOTRCPKT Mask */

+

+#define DWT_CTRL_NOEXTTRIG_Pos             26U                                         /*!< DWT CTRL: NOEXTTRIG Position */

+#define DWT_CTRL_NOEXTTRIG_Msk             (0x1UL << DWT_CTRL_NOEXTTRIG_Pos)           /*!< DWT CTRL: NOEXTTRIG Mask */

+

+#define DWT_CTRL_NOCYCCNT_Pos              25U                                         /*!< DWT CTRL: NOCYCCNT Position */

+#define DWT_CTRL_NOCYCCNT_Msk              (0x1UL << DWT_CTRL_NOCYCCNT_Pos)            /*!< DWT CTRL: NOCYCCNT Mask */

+

+#define DWT_CTRL_NOPRFCNT_Pos              24U                                         /*!< DWT CTRL: NOPRFCNT Position */

+#define DWT_CTRL_NOPRFCNT_Msk              (0x1UL << DWT_CTRL_NOPRFCNT_Pos)            /*!< DWT CTRL: NOPRFCNT Mask */

+

+#define DWT_CTRL_CYCEVTENA_Pos             22U                                         /*!< DWT CTRL: CYCEVTENA Position */

+#define DWT_CTRL_CYCEVTENA_Msk             (0x1UL << DWT_CTRL_CYCEVTENA_Pos)           /*!< DWT CTRL: CYCEVTENA Mask */

+

+#define DWT_CTRL_FOLDEVTENA_Pos            21U                                         /*!< DWT CTRL: FOLDEVTENA Position */

+#define DWT_CTRL_FOLDEVTENA_Msk            (0x1UL << DWT_CTRL_FOLDEVTENA_Pos)          /*!< DWT CTRL: FOLDEVTENA Mask */

+

+#define DWT_CTRL_LSUEVTENA_Pos             20U                                         /*!< DWT CTRL: LSUEVTENA Position */

+#define DWT_CTRL_LSUEVTENA_Msk             (0x1UL << DWT_CTRL_LSUEVTENA_Pos)           /*!< DWT CTRL: LSUEVTENA Mask */

+

+#define DWT_CTRL_SLEEPEVTENA_Pos           19U                                         /*!< DWT CTRL: SLEEPEVTENA Position */

+#define DWT_CTRL_SLEEPEVTENA_Msk           (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos)         /*!< DWT CTRL: SLEEPEVTENA Mask */

+

+#define DWT_CTRL_EXCEVTENA_Pos             18U                                         /*!< DWT CTRL: EXCEVTENA Position */

+#define DWT_CTRL_EXCEVTENA_Msk             (0x1UL << DWT_CTRL_EXCEVTENA_Pos)           /*!< DWT CTRL: EXCEVTENA Mask */

+

+#define DWT_CTRL_CPIEVTENA_Pos             17U                                         /*!< DWT CTRL: CPIEVTENA Position */

+#define DWT_CTRL_CPIEVTENA_Msk             (0x1UL << DWT_CTRL_CPIEVTENA_Pos)           /*!< DWT CTRL: CPIEVTENA Mask */

+

+#define DWT_CTRL_EXCTRCENA_Pos             16U                                         /*!< DWT CTRL: EXCTRCENA Position */

+#define DWT_CTRL_EXCTRCENA_Msk             (0x1UL << DWT_CTRL_EXCTRCENA_Pos)           /*!< DWT CTRL: EXCTRCENA Mask */

+

+#define DWT_CTRL_PCSAMPLENA_Pos            12U                                         /*!< DWT CTRL: PCSAMPLENA Position */

+#define DWT_CTRL_PCSAMPLENA_Msk            (0x1UL << DWT_CTRL_PCSAMPLENA_Pos)          /*!< DWT CTRL: PCSAMPLENA Mask */

+

+#define DWT_CTRL_SYNCTAP_Pos               10U                                         /*!< DWT CTRL: SYNCTAP Position */

+#define DWT_CTRL_SYNCTAP_Msk               (0x3UL << DWT_CTRL_SYNCTAP_Pos)             /*!< DWT CTRL: SYNCTAP Mask */

+

+#define DWT_CTRL_CYCTAP_Pos                 9U                                         /*!< DWT CTRL: CYCTAP Position */

+#define DWT_CTRL_CYCTAP_Msk                (0x1UL << DWT_CTRL_CYCTAP_Pos)              /*!< DWT CTRL: CYCTAP Mask */

+

+#define DWT_CTRL_POSTINIT_Pos               5U                                         /*!< DWT CTRL: POSTINIT Position */

+#define DWT_CTRL_POSTINIT_Msk              (0xFUL << DWT_CTRL_POSTINIT_Pos)            /*!< DWT CTRL: POSTINIT Mask */

+

+#define DWT_CTRL_POSTPRESET_Pos             1U                                         /*!< DWT CTRL: POSTPRESET Position */

+#define DWT_CTRL_POSTPRESET_Msk            (0xFUL << DWT_CTRL_POSTPRESET_Pos)          /*!< DWT CTRL: POSTPRESET Mask */

+

+#define DWT_CTRL_CYCCNTENA_Pos              0U                                         /*!< DWT CTRL: CYCCNTENA Position */

+#define DWT_CTRL_CYCCNTENA_Msk             (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/)       /*!< DWT CTRL: CYCCNTENA Mask */

+

+/* DWT CPI Count Register Definitions */

+#define DWT_CPICNT_CPICNT_Pos               0U                                         /*!< DWT CPICNT: CPICNT Position */

+#define DWT_CPICNT_CPICNT_Msk              (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/)       /*!< DWT CPICNT: CPICNT Mask */

+

+/* DWT Exception Overhead Count Register Definitions */

+#define DWT_EXCCNT_EXCCNT_Pos               0U                                         /*!< DWT EXCCNT: EXCCNT Position */

+#define DWT_EXCCNT_EXCCNT_Msk              (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/)       /*!< DWT EXCCNT: EXCCNT Mask */

+

+/* DWT Sleep Count Register Definitions */

+#define DWT_SLEEPCNT_SLEEPCNT_Pos           0U                                         /*!< DWT SLEEPCNT: SLEEPCNT Position */

+#define DWT_SLEEPCNT_SLEEPCNT_Msk          (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/)   /*!< DWT SLEEPCNT: SLEEPCNT Mask */

+

+/* DWT LSU Count Register Definitions */

+#define DWT_LSUCNT_LSUCNT_Pos               0U                                         /*!< DWT LSUCNT: LSUCNT Position */

+#define DWT_LSUCNT_LSUCNT_Msk              (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/)       /*!< DWT LSUCNT: LSUCNT Mask */

+

+/* DWT Folded-instruction Count Register Definitions */

+#define DWT_FOLDCNT_FOLDCNT_Pos             0U                                         /*!< DWT FOLDCNT: FOLDCNT Position */

+#define DWT_FOLDCNT_FOLDCNT_Msk            (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/)     /*!< DWT FOLDCNT: FOLDCNT Mask */

+

+/* DWT Comparator Mask Register Definitions */

+#define DWT_MASK_MASK_Pos                   0U                                         /*!< DWT MASK: MASK Position */

+#define DWT_MASK_MASK_Msk                  (0x1FUL /*<< DWT_MASK_MASK_Pos*/)           /*!< DWT MASK: MASK Mask */

+

+/* DWT Comparator Function Register Definitions */

+#define DWT_FUNCTION_MATCHED_Pos           24U                                         /*!< DWT FUNCTION: MATCHED Position */

+#define DWT_FUNCTION_MATCHED_Msk           (0x1UL << DWT_FUNCTION_MATCHED_Pos)         /*!< DWT FUNCTION: MATCHED Mask */

+

+#define DWT_FUNCTION_DATAVADDR1_Pos        16U                                         /*!< DWT FUNCTION: DATAVADDR1 Position */

+#define DWT_FUNCTION_DATAVADDR1_Msk        (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos)      /*!< DWT FUNCTION: DATAVADDR1 Mask */

+

+#define DWT_FUNCTION_DATAVADDR0_Pos        12U                                         /*!< DWT FUNCTION: DATAVADDR0 Position */

+#define DWT_FUNCTION_DATAVADDR0_Msk        (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos)      /*!< DWT FUNCTION: DATAVADDR0 Mask */

+

+#define DWT_FUNCTION_DATAVSIZE_Pos         10U                                         /*!< DWT FUNCTION: DATAVSIZE Position */

+#define DWT_FUNCTION_DATAVSIZE_Msk         (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos)       /*!< DWT FUNCTION: DATAVSIZE Mask */

+

+#define DWT_FUNCTION_LNK1ENA_Pos            9U                                         /*!< DWT FUNCTION: LNK1ENA Position */

+#define DWT_FUNCTION_LNK1ENA_Msk           (0x1UL << DWT_FUNCTION_LNK1ENA_Pos)         /*!< DWT FUNCTION: LNK1ENA Mask */

+

+#define DWT_FUNCTION_DATAVMATCH_Pos         8U                                         /*!< DWT FUNCTION: DATAVMATCH Position */

+#define DWT_FUNCTION_DATAVMATCH_Msk        (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos)      /*!< DWT FUNCTION: DATAVMATCH Mask */

+

+#define DWT_FUNCTION_CYCMATCH_Pos           7U                                         /*!< DWT FUNCTION: CYCMATCH Position */

+#define DWT_FUNCTION_CYCMATCH_Msk          (0x1UL << DWT_FUNCTION_CYCMATCH_Pos)        /*!< DWT FUNCTION: CYCMATCH Mask */

+

+#define DWT_FUNCTION_EMITRANGE_Pos          5U                                         /*!< DWT FUNCTION: EMITRANGE Position */

+#define DWT_FUNCTION_EMITRANGE_Msk         (0x1UL << DWT_FUNCTION_EMITRANGE_Pos)       /*!< DWT FUNCTION: EMITRANGE Mask */

+

+#define DWT_FUNCTION_FUNCTION_Pos           0U                                         /*!< DWT FUNCTION: FUNCTION Position */

+#define DWT_FUNCTION_FUNCTION_Msk          (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/)    /*!< DWT FUNCTION: FUNCTION Mask */

+

+/*@}*/ /* end of group CMSIS_DWT */

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_TPI     Trace Port Interface (TPI)

+  \brief    Type definitions for the Trace Port Interface (TPI)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Trace Port Interface Register (TPI).

+ */

+typedef struct

+{

+  __IM  uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */

+  __IOM uint32_t CSPSR;                  /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */

+        uint32_t RESERVED0[2U];

+  __IOM uint32_t ACPR;                   /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */

+        uint32_t RESERVED1[55U];

+  __IOM uint32_t SPPR;                   /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */

+        uint32_t RESERVED2[131U];

+  __IM  uint32_t FFSR;                   /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */

+  __IOM uint32_t FFCR;                   /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */

+  __IM  uint32_t FSCR;                   /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */

+        uint32_t RESERVED3[759U];

+  __IM  uint32_t TRIGGER;                /*!< Offset: 0xEE8 (R/ )  TRIGGER Register */

+  __IM  uint32_t FIFO0;                  /*!< Offset: 0xEEC (R/ )  Integration ETM Data */

+  __IM  uint32_t ITATBCTR2;              /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */

+        uint32_t RESERVED4[1U];

+  __IM  uint32_t ITATBCTR0;              /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */

+  __IM  uint32_t FIFO1;                  /*!< Offset: 0xEFC (R/ )  Integration ITM Data */

+  __IOM uint32_t ITCTRL;                 /*!< Offset: 0xF00 (R/W)  Integration Mode Control */

+        uint32_t RESERVED5[39U];

+  __IOM uint32_t CLAIMSET;               /*!< Offset: 0xFA0 (R/W)  Claim tag set */

+  __IOM uint32_t CLAIMCLR;               /*!< Offset: 0xFA4 (R/W)  Claim tag clear */

+        uint32_t RESERVED7[8U];

+  __IM  uint32_t DEVID;                  /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */

+  __IM  uint32_t DEVTYPE;                /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */

+} TPI_Type;

+

+/* TPI Asynchronous Clock Prescaler Register Definitions */

+#define TPI_ACPR_PRESCALER_Pos              0U                                         /*!< TPI ACPR: PRESCALER Position */

+#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< TPI ACPR: PRESCALER Mask */

+

+/* TPI Selected Pin Protocol Register Definitions */

+#define TPI_SPPR_TXMODE_Pos                 0U                                         /*!< TPI SPPR: TXMODE Position */

+#define TPI_SPPR_TXMODE_Msk                (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/)          /*!< TPI SPPR: TXMODE Mask */

+

+/* TPI Formatter and Flush Status Register Definitions */

+#define TPI_FFSR_FtNonStop_Pos              3U                                         /*!< TPI FFSR: FtNonStop Position */

+#define TPI_FFSR_FtNonStop_Msk             (0x1UL << TPI_FFSR_FtNonStop_Pos)           /*!< TPI FFSR: FtNonStop Mask */

+

+#define TPI_FFSR_TCPresent_Pos              2U                                         /*!< TPI FFSR: TCPresent Position */

+#define TPI_FFSR_TCPresent_Msk             (0x1UL << TPI_FFSR_TCPresent_Pos)           /*!< TPI FFSR: TCPresent Mask */

+

+#define TPI_FFSR_FtStopped_Pos              1U                                         /*!< TPI FFSR: FtStopped Position */

+#define TPI_FFSR_FtStopped_Msk             (0x1UL << TPI_FFSR_FtStopped_Pos)           /*!< TPI FFSR: FtStopped Mask */

+

+#define TPI_FFSR_FlInProg_Pos               0U                                         /*!< TPI FFSR: FlInProg Position */

+#define TPI_FFSR_FlInProg_Msk              (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/)        /*!< TPI FFSR: FlInProg Mask */

+

+/* TPI Formatter and Flush Control Register Definitions */

+#define TPI_FFCR_TrigIn_Pos                 8U                                         /*!< TPI FFCR: TrigIn Position */

+#define TPI_FFCR_TrigIn_Msk                (0x1UL << TPI_FFCR_TrigIn_Pos)              /*!< TPI FFCR: TrigIn Mask */

+

+#define TPI_FFCR_EnFCont_Pos                1U                                         /*!< TPI FFCR: EnFCont Position */

+#define TPI_FFCR_EnFCont_Msk               (0x1UL << TPI_FFCR_EnFCont_Pos)             /*!< TPI FFCR: EnFCont Mask */

+

+/* TPI TRIGGER Register Definitions */

+#define TPI_TRIGGER_TRIGGER_Pos             0U                                         /*!< TPI TRIGGER: TRIGGER Position */

+#define TPI_TRIGGER_TRIGGER_Msk            (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/)      /*!< TPI TRIGGER: TRIGGER Mask */

+

+/* TPI Integration ETM Data Register Definitions (FIFO0) */

+#define TPI_FIFO0_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO0: ITM_ATVALID Position */

+#define TPI_FIFO0_ITM_ATVALID_Msk          (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos)        /*!< TPI FIFO0: ITM_ATVALID Mask */

+

+#define TPI_FIFO0_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO0: ITM_bytecount Position */

+#define TPI_FIFO0_ITM_bytecount_Msk        (0x3UL << TPI_FIFO0_ITM_bytecount_Pos)      /*!< TPI FIFO0: ITM_bytecount Mask */

+

+#define TPI_FIFO0_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO0: ETM_ATVALID Position */

+#define TPI_FIFO0_ETM_ATVALID_Msk          (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos)        /*!< TPI FIFO0: ETM_ATVALID Mask */

+

+#define TPI_FIFO0_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO0: ETM_bytecount Position */

+#define TPI_FIFO0_ETM_bytecount_Msk        (0x3UL << TPI_FIFO0_ETM_bytecount_Pos)      /*!< TPI FIFO0: ETM_bytecount Mask */

+

+#define TPI_FIFO0_ETM2_Pos                 16U                                         /*!< TPI FIFO0: ETM2 Position */

+#define TPI_FIFO0_ETM2_Msk                 (0xFFUL << TPI_FIFO0_ETM2_Pos)              /*!< TPI FIFO0: ETM2 Mask */

+

+#define TPI_FIFO0_ETM1_Pos                  8U                                         /*!< TPI FIFO0: ETM1 Position */

+#define TPI_FIFO0_ETM1_Msk                 (0xFFUL << TPI_FIFO0_ETM1_Pos)              /*!< TPI FIFO0: ETM1 Mask */

+

+#define TPI_FIFO0_ETM0_Pos                  0U                                         /*!< TPI FIFO0: ETM0 Position */

+#define TPI_FIFO0_ETM0_Msk                 (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/)          /*!< TPI FIFO0: ETM0 Mask */

+

+/* TPI ITATBCTR2 Register Definitions */

+#define TPI_ITATBCTR2_ATREADY2_Pos          0U                                         /*!< TPI ITATBCTR2: ATREADY2 Position */

+#define TPI_ITATBCTR2_ATREADY2_Msk         (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/)   /*!< TPI ITATBCTR2: ATREADY2 Mask */

+

+#define TPI_ITATBCTR2_ATREADY1_Pos          0U                                         /*!< TPI ITATBCTR2: ATREADY1 Position */

+#define TPI_ITATBCTR2_ATREADY1_Msk         (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/)   /*!< TPI ITATBCTR2: ATREADY1 Mask */

+

+/* TPI Integration ITM Data Register Definitions (FIFO1) */

+#define TPI_FIFO1_ITM_ATVALID_Pos          29U                                         /*!< TPI FIFO1: ITM_ATVALID Position */

+#define TPI_FIFO1_ITM_ATVALID_Msk          (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos)        /*!< TPI FIFO1: ITM_ATVALID Mask */

+

+#define TPI_FIFO1_ITM_bytecount_Pos        27U                                         /*!< TPI FIFO1: ITM_bytecount Position */

+#define TPI_FIFO1_ITM_bytecount_Msk        (0x3UL << TPI_FIFO1_ITM_bytecount_Pos)      /*!< TPI FIFO1: ITM_bytecount Mask */

+

+#define TPI_FIFO1_ETM_ATVALID_Pos          26U                                         /*!< TPI FIFO1: ETM_ATVALID Position */

+#define TPI_FIFO1_ETM_ATVALID_Msk          (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos)        /*!< TPI FIFO1: ETM_ATVALID Mask */

+

+#define TPI_FIFO1_ETM_bytecount_Pos        24U                                         /*!< TPI FIFO1: ETM_bytecount Position */

+#define TPI_FIFO1_ETM_bytecount_Msk        (0x3UL << TPI_FIFO1_ETM_bytecount_Pos)      /*!< TPI FIFO1: ETM_bytecount Mask */

+

+#define TPI_FIFO1_ITM2_Pos                 16U                                         /*!< TPI FIFO1: ITM2 Position */

+#define TPI_FIFO1_ITM2_Msk                 (0xFFUL << TPI_FIFO1_ITM2_Pos)              /*!< TPI FIFO1: ITM2 Mask */

+

+#define TPI_FIFO1_ITM1_Pos                  8U                                         /*!< TPI FIFO1: ITM1 Position */

+#define TPI_FIFO1_ITM1_Msk                 (0xFFUL << TPI_FIFO1_ITM1_Pos)              /*!< TPI FIFO1: ITM1 Mask */

+

+#define TPI_FIFO1_ITM0_Pos                  0U                                         /*!< TPI FIFO1: ITM0 Position */

+#define TPI_FIFO1_ITM0_Msk                 (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/)          /*!< TPI FIFO1: ITM0 Mask */

+

+/* TPI ITATBCTR0 Register Definitions */

+#define TPI_ITATBCTR0_ATREADY2_Pos          0U                                         /*!< TPI ITATBCTR0: ATREADY2 Position */

+#define TPI_ITATBCTR0_ATREADY2_Msk         (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/)   /*!< TPI ITATBCTR0: ATREADY2 Mask */

+

+#define TPI_ITATBCTR0_ATREADY1_Pos          0U                                         /*!< TPI ITATBCTR0: ATREADY1 Position */

+#define TPI_ITATBCTR0_ATREADY1_Msk         (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/)   /*!< TPI ITATBCTR0: ATREADY1 Mask */

+

+/* TPI Integration Mode Control Register Definitions */

+#define TPI_ITCTRL_Mode_Pos                 0U                                         /*!< TPI ITCTRL: Mode Position */

+#define TPI_ITCTRL_Mode_Msk                (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */

+

+/* TPI DEVID Register Definitions */

+#define TPI_DEVID_NRZVALID_Pos             11U                                         /*!< TPI DEVID: NRZVALID Position */

+#define TPI_DEVID_NRZVALID_Msk             (0x1UL << TPI_DEVID_NRZVALID_Pos)           /*!< TPI DEVID: NRZVALID Mask */

+

+#define TPI_DEVID_MANCVALID_Pos            10U                                         /*!< TPI DEVID: MANCVALID Position */

+#define TPI_DEVID_MANCVALID_Msk            (0x1UL << TPI_DEVID_MANCVALID_Pos)          /*!< TPI DEVID: MANCVALID Mask */

+

+#define TPI_DEVID_PTINVALID_Pos             9U                                         /*!< TPI DEVID: PTINVALID Position */

+#define TPI_DEVID_PTINVALID_Msk            (0x1UL << TPI_DEVID_PTINVALID_Pos)          /*!< TPI DEVID: PTINVALID Mask */

+

+#define TPI_DEVID_MinBufSz_Pos              6U                                         /*!< TPI DEVID: MinBufSz Position */

+#define TPI_DEVID_MinBufSz_Msk             (0x7UL << TPI_DEVID_MinBufSz_Pos)           /*!< TPI DEVID: MinBufSz Mask */

+

+#define TPI_DEVID_AsynClkIn_Pos             5U                                         /*!< TPI DEVID: AsynClkIn Position */

+#define TPI_DEVID_AsynClkIn_Msk            (0x1UL << TPI_DEVID_AsynClkIn_Pos)          /*!< TPI DEVID: AsynClkIn Mask */

+

+#define TPI_DEVID_NrTraceInput_Pos          0U                                         /*!< TPI DEVID: NrTraceInput Position */

+#define TPI_DEVID_NrTraceInput_Msk         (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */

+

+/* TPI DEVTYPE Register Definitions */

+#define TPI_DEVTYPE_SubType_Pos             4U                                         /*!< TPI DEVTYPE: SubType Position */

+#define TPI_DEVTYPE_SubType_Msk            (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/)      /*!< TPI DEVTYPE: SubType Mask */

+

+#define TPI_DEVTYPE_MajorType_Pos           0U                                         /*!< TPI DEVTYPE: MajorType Position */

+#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */

+

+/*@}*/ /* end of group CMSIS_TPI */

+

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_MPU     Memory Protection Unit (MPU)

+  \brief    Type definitions for the Memory Protection Unit (MPU)

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Memory Protection Unit (MPU).

+ */

+typedef struct

+{

+  __IM  uint32_t TYPE;                   /*!< Offset: 0x000 (R/ )  MPU Type Register */

+  __IOM uint32_t CTRL;                   /*!< Offset: 0x004 (R/W)  MPU Control Register */

+  __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */

+  __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */

+  __IOM uint32_t RASR;                   /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A1;                /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */

+  __IOM uint32_t RASR_A1;                /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A2;                /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */

+  __IOM uint32_t RASR_A2;                /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */

+  __IOM uint32_t RBAR_A3;                /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */

+  __IOM uint32_t RASR_A3;                /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */

+} MPU_Type;

+

+/* MPU Type Register Definitions */

+#define MPU_TYPE_IREGION_Pos               16U                                            /*!< MPU TYPE: IREGION Position */

+#define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */

+

+#define MPU_TYPE_DREGION_Pos                8U                                            /*!< MPU TYPE: DREGION Position */

+#define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */

+

+#define MPU_TYPE_SEPARATE_Pos               0U                                            /*!< MPU TYPE: SEPARATE Position */

+#define MPU_TYPE_SEPARATE_Msk              (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)             /*!< MPU TYPE: SEPARATE Mask */

+

+/* MPU Control Register Definitions */

+#define MPU_CTRL_PRIVDEFENA_Pos             2U                                            /*!< MPU CTRL: PRIVDEFENA Position */

+#define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */

+

+#define MPU_CTRL_HFNMIENA_Pos               1U                                            /*!< MPU CTRL: HFNMIENA Position */

+#define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */

+

+#define MPU_CTRL_ENABLE_Pos                 0U                                            /*!< MPU CTRL: ENABLE Position */

+#define MPU_CTRL_ENABLE_Msk                (1UL /*<< MPU_CTRL_ENABLE_Pos*/)               /*!< MPU CTRL: ENABLE Mask */

+

+/* MPU Region Number Register Definitions */

+#define MPU_RNR_REGION_Pos                  0U                                            /*!< MPU RNR: REGION Position */

+#define MPU_RNR_REGION_Msk                 (0xFFUL /*<< MPU_RNR_REGION_Pos*/)             /*!< MPU RNR: REGION Mask */

+

+/* MPU Region Base Address Register Definitions */

+#define MPU_RBAR_ADDR_Pos                   5U                                            /*!< MPU RBAR: ADDR Position */

+#define MPU_RBAR_ADDR_Msk                  (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos)             /*!< MPU RBAR: ADDR Mask */

+

+#define MPU_RBAR_VALID_Pos                  4U                                            /*!< MPU RBAR: VALID Position */

+#define MPU_RBAR_VALID_Msk                 (1UL << MPU_RBAR_VALID_Pos)                    /*!< MPU RBAR: VALID Mask */

+

+#define MPU_RBAR_REGION_Pos                 0U                                            /*!< MPU RBAR: REGION Position */

+#define MPU_RBAR_REGION_Msk                (0xFUL /*<< MPU_RBAR_REGION_Pos*/)             /*!< MPU RBAR: REGION Mask */

+

+/* MPU Region Attribute and Size Register Definitions */

+#define MPU_RASR_ATTRS_Pos                 16U                                            /*!< MPU RASR: MPU Region Attribute field Position */

+#define MPU_RASR_ATTRS_Msk                 (0xFFFFUL << MPU_RASR_ATTRS_Pos)               /*!< MPU RASR: MPU Region Attribute field Mask */

+

+#define MPU_RASR_XN_Pos                    28U                                            /*!< MPU RASR: ATTRS.XN Position */

+#define MPU_RASR_XN_Msk                    (1UL << MPU_RASR_XN_Pos)                       /*!< MPU RASR: ATTRS.XN Mask */

+

+#define MPU_RASR_AP_Pos                    24U                                            /*!< MPU RASR: ATTRS.AP Position */

+#define MPU_RASR_AP_Msk                    (0x7UL << MPU_RASR_AP_Pos)                     /*!< MPU RASR: ATTRS.AP Mask */

+

+#define MPU_RASR_TEX_Pos                   19U                                            /*!< MPU RASR: ATTRS.TEX Position */

+#define MPU_RASR_TEX_Msk                   (0x7UL << MPU_RASR_TEX_Pos)                    /*!< MPU RASR: ATTRS.TEX Mask */

+

+#define MPU_RASR_S_Pos                     18U                                            /*!< MPU RASR: ATTRS.S Position */

+#define MPU_RASR_S_Msk                     (1UL << MPU_RASR_S_Pos)                        /*!< MPU RASR: ATTRS.S Mask */

+

+#define MPU_RASR_C_Pos                     17U                                            /*!< MPU RASR: ATTRS.C Position */

+#define MPU_RASR_C_Msk                     (1UL << MPU_RASR_C_Pos)                        /*!< MPU RASR: ATTRS.C Mask */

+

+#define MPU_RASR_B_Pos                     16U                                            /*!< MPU RASR: ATTRS.B Position */

+#define MPU_RASR_B_Msk                     (1UL << MPU_RASR_B_Pos)                        /*!< MPU RASR: ATTRS.B Mask */

+

+#define MPU_RASR_SRD_Pos                    8U                                            /*!< MPU RASR: Sub-Region Disable Position */

+#define MPU_RASR_SRD_Msk                   (0xFFUL << MPU_RASR_SRD_Pos)                   /*!< MPU RASR: Sub-Region Disable Mask */

+

+#define MPU_RASR_SIZE_Pos                   1U                                            /*!< MPU RASR: Region Size Field Position */

+#define MPU_RASR_SIZE_Msk                  (0x1FUL << MPU_RASR_SIZE_Pos)                  /*!< MPU RASR: Region Size Field Mask */

+

+#define MPU_RASR_ENABLE_Pos                 0U                                            /*!< MPU RASR: Region enable bit Position */

+#define MPU_RASR_ENABLE_Msk                (1UL /*<< MPU_RASR_ENABLE_Pos*/)               /*!< MPU RASR: Region enable bit Disable Mask */

+

+/*@} end of group CMSIS_MPU */

+#endif

+

+

+/**

+  \ingroup  CMSIS_core_register

+  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+  \brief    Type definitions for the Core Debug Registers

+  @{

+ */

+

+/**

+  \brief  Structure type to access the Core Debug Register (CoreDebug).

+ */

+typedef struct

+{

+  __IOM uint32_t DHCSR;                  /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */

+  __OM  uint32_t DCRSR;                  /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */

+  __IOM uint32_t DCRDR;                  /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */

+  __IOM uint32_t DEMCR;                  /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */

+} CoreDebug_Type;

+

+/* Debug Halting Control and Status Register Definitions */

+#define CoreDebug_DHCSR_DBGKEY_Pos         16U                                            /*!< CoreDebug DHCSR: DBGKEY Position */

+#define CoreDebug_DHCSR_DBGKEY_Msk         (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos)       /*!< CoreDebug DHCSR: DBGKEY Mask */

+

+#define CoreDebug_DHCSR_S_RESET_ST_Pos     25U                                            /*!< CoreDebug DHCSR: S_RESET_ST Position */

+#define CoreDebug_DHCSR_S_RESET_ST_Msk     (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos)        /*!< CoreDebug DHCSR: S_RESET_ST Mask */

+

+#define CoreDebug_DHCSR_S_RETIRE_ST_Pos    24U                                            /*!< CoreDebug DHCSR: S_RETIRE_ST Position */

+#define CoreDebug_DHCSR_S_RETIRE_ST_Msk    (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos)       /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */

+

+#define CoreDebug_DHCSR_S_LOCKUP_Pos       19U                                            /*!< CoreDebug DHCSR: S_LOCKUP Position */

+#define CoreDebug_DHCSR_S_LOCKUP_Msk       (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos)          /*!< CoreDebug DHCSR: S_LOCKUP Mask */

+

+#define CoreDebug_DHCSR_S_SLEEP_Pos        18U                                            /*!< CoreDebug DHCSR: S_SLEEP Position */

+#define CoreDebug_DHCSR_S_SLEEP_Msk        (1UL << CoreDebug_DHCSR_S_SLEEP_Pos)           /*!< CoreDebug DHCSR: S_SLEEP Mask */

+

+#define CoreDebug_DHCSR_S_HALT_Pos         17U                                            /*!< CoreDebug DHCSR: S_HALT Position */

+#define CoreDebug_DHCSR_S_HALT_Msk         (1UL << CoreDebug_DHCSR_S_HALT_Pos)            /*!< CoreDebug DHCSR: S_HALT Mask */

+

+#define CoreDebug_DHCSR_S_REGRDY_Pos       16U                                            /*!< CoreDebug DHCSR: S_REGRDY Position */

+#define CoreDebug_DHCSR_S_REGRDY_Msk       (1UL << CoreDebug_DHCSR_S_REGRDY_Pos)          /*!< CoreDebug DHCSR: S_REGRDY Mask */

+

+#define CoreDebug_DHCSR_C_SNAPSTALL_Pos     5U                                            /*!< CoreDebug DHCSR: C_SNAPSTALL Position */

+#define CoreDebug_DHCSR_C_SNAPSTALL_Msk    (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos)       /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */

+

+#define CoreDebug_DHCSR_C_MASKINTS_Pos      3U                                            /*!< CoreDebug DHCSR: C_MASKINTS Position */

+#define CoreDebug_DHCSR_C_MASKINTS_Msk     (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos)        /*!< CoreDebug DHCSR: C_MASKINTS Mask */

+

+#define CoreDebug_DHCSR_C_STEP_Pos          2U                                            /*!< CoreDebug DHCSR: C_STEP Position */

+#define CoreDebug_DHCSR_C_STEP_Msk         (1UL << CoreDebug_DHCSR_C_STEP_Pos)            /*!< CoreDebug DHCSR: C_STEP Mask */

+

+#define CoreDebug_DHCSR_C_HALT_Pos          1U                                            /*!< CoreDebug DHCSR: C_HALT Position */

+#define CoreDebug_DHCSR_C_HALT_Msk         (1UL << CoreDebug_DHCSR_C_HALT_Pos)            /*!< CoreDebug DHCSR: C_HALT Mask */

+

+#define CoreDebug_DHCSR_C_DEBUGEN_Pos       0U                                            /*!< CoreDebug DHCSR: C_DEBUGEN Position */

+#define CoreDebug_DHCSR_C_DEBUGEN_Msk      (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/)     /*!< CoreDebug DHCSR: C_DEBUGEN Mask */

+

+/* Debug Core Register Selector Register Definitions */

+#define CoreDebug_DCRSR_REGWnR_Pos         16U                                            /*!< CoreDebug DCRSR: REGWnR Position */

+#define CoreDebug_DCRSR_REGWnR_Msk         (1UL << CoreDebug_DCRSR_REGWnR_Pos)            /*!< CoreDebug DCRSR: REGWnR Mask */

+

+#define CoreDebug_DCRSR_REGSEL_Pos          0U                                            /*!< CoreDebug DCRSR: REGSEL Position */

+#define CoreDebug_DCRSR_REGSEL_Msk         (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/)     /*!< CoreDebug DCRSR: REGSEL Mask */

+

+/* Debug Exception and Monitor Control Register Definitions */

+#define CoreDebug_DEMCR_TRCENA_Pos         24U                                            /*!< CoreDebug DEMCR: TRCENA Position */

+#define CoreDebug_DEMCR_TRCENA_Msk         (1UL << CoreDebug_DEMCR_TRCENA_Pos)            /*!< CoreDebug DEMCR: TRCENA Mask */

+

+#define CoreDebug_DEMCR_MON_REQ_Pos        19U                                            /*!< CoreDebug DEMCR: MON_REQ Position */

+#define CoreDebug_DEMCR_MON_REQ_Msk        (1UL << CoreDebug_DEMCR_MON_REQ_Pos)           /*!< CoreDebug DEMCR: MON_REQ Mask */

+

+#define CoreDebug_DEMCR_MON_STEP_Pos       18U                                            /*!< CoreDebug DEMCR: MON_STEP Position */

+#define CoreDebug_DEMCR_MON_STEP_Msk       (1UL << CoreDebug_DEMCR_MON_STEP_Pos)          /*!< CoreDebug DEMCR: MON_STEP Mask */

+

+#define CoreDebug_DEMCR_MON_PEND_Pos       17U                                            /*!< CoreDebug DEMCR: MON_PEND Position */

+#define CoreDebug_DEMCR_MON_PEND_Msk       (1UL << CoreDebug_DEMCR_MON_PEND_Pos)          /*!< CoreDebug DEMCR: MON_PEND Mask */

+

+#define CoreDebug_DEMCR_MON_EN_Pos         16U                                            /*!< CoreDebug DEMCR: MON_EN Position */

+#define CoreDebug_DEMCR_MON_EN_Msk         (1UL << CoreDebug_DEMCR_MON_EN_Pos)            /*!< CoreDebug DEMCR: MON_EN Mask */

+

+#define CoreDebug_DEMCR_VC_HARDERR_Pos     10U                                            /*!< CoreDebug DEMCR: VC_HARDERR Position */

+#define CoreDebug_DEMCR_VC_HARDERR_Msk     (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos)        /*!< CoreDebug DEMCR: VC_HARDERR Mask */

+

+#define CoreDebug_DEMCR_VC_INTERR_Pos       9U                                            /*!< CoreDebug DEMCR: VC_INTERR Position */

+#define CoreDebug_DEMCR_VC_INTERR_Msk      (1UL << CoreDebug_DEMCR_VC_INTERR_Pos)         /*!< CoreDebug DEMCR: VC_INTERR Mask */

+

+#define CoreDebug_DEMCR_VC_BUSERR_Pos       8U                                            /*!< CoreDebug DEMCR: VC_BUSERR Position */

+#define CoreDebug_DEMCR_VC_BUSERR_Msk      (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos)         /*!< CoreDebug DEMCR: VC_BUSERR Mask */

+

+#define CoreDebug_DEMCR_VC_STATERR_Pos      7U                                            /*!< CoreDebug DEMCR: VC_STATERR Position */

+#define CoreDebug_DEMCR_VC_STATERR_Msk     (1UL << CoreDebug_DEMCR_VC_STATERR_Pos)        /*!< CoreDebug DEMCR: VC_STATERR Mask */

+

+#define CoreDebug_DEMCR_VC_CHKERR_Pos       6U                                            /*!< CoreDebug DEMCR: VC_CHKERR Position */

+#define CoreDebug_DEMCR_VC_CHKERR_Msk      (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos)         /*!< CoreDebug DEMCR: VC_CHKERR Mask */

+

+#define CoreDebug_DEMCR_VC_NOCPERR_Pos      5U                                            /*!< CoreDebug DEMCR: VC_NOCPERR Position */

+#define CoreDebug_DEMCR_VC_NOCPERR_Msk     (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos)        /*!< CoreDebug DEMCR: VC_NOCPERR Mask */

+

+#define CoreDebug_DEMCR_VC_MMERR_Pos        4U                                            /*!< CoreDebug DEMCR: VC_MMERR Position */

+#define CoreDebug_DEMCR_VC_MMERR_Msk       (1UL << CoreDebug_DEMCR_VC_MMERR_Pos)          /*!< CoreDebug DEMCR: VC_MMERR Mask */

+

+#define CoreDebug_DEMCR_VC_CORERESET_Pos    0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */

+#define CoreDebug_DEMCR_VC_CORERESET_Msk   (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/)  /*!< CoreDebug DEMCR: VC_CORERESET Mask */

+

+/*@} end of group CMSIS_CoreDebug */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_bitfield     Core register bit field macros

+  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).

+  @{

+ */

+

+/**

+  \brief   Mask and shift a bit field value for use in a register bit range.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted value.

+*/

+#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)

+

+/**

+  \brief     Mask and shift a register value to extract a bit filed value.

+  \param[in] field  Name of the register bit field.

+  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.

+  \return           Masked and shifted bit field value.

+*/

+#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)

+

+/*@} end of group CMSIS_core_bitfield */

+

+

+/**

+  \ingroup    CMSIS_core_register

+  \defgroup   CMSIS_core_base     Core Definitions

+  \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Core Hardware */

+#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */

+#define ITM_BASE            (0xE0000000UL)                            /*!< ITM Base Address */

+#define DWT_BASE            (0xE0001000UL)                            /*!< DWT Base Address */

+#define TPI_BASE            (0xE0040000UL)                            /*!< TPI Base Address */

+#define CoreDebug_BASE      (0xE000EDF0UL)                            /*!< Core Debug Base Address */

+#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */

+#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */

+#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */

+

+#define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE      )   /*!< System control Register not in SCB */

+#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */

+#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */

+#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */

+#define ITM                 ((ITM_Type       *)     ITM_BASE      )   /*!< ITM configuration struct */

+#define DWT                 ((DWT_Type       *)     DWT_BASE      )   /*!< DWT configuration struct */

+#define TPI                 ((TPI_Type       *)     TPI_BASE      )   /*!< TPI configuration struct */

+#define CoreDebug           ((CoreDebug_Type *)     CoreDebug_BASE)   /*!< Core Debug configuration struct */

+

+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)

+  #define MPU_BASE          (SCS_BASE +  0x0D90UL)                    /*!< Memory Protection Unit */

+  #define MPU               ((MPU_Type       *)     MPU_BASE      )   /*!< Memory Protection Unit */

+#endif

+

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Debug Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/**

+  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+  \brief    Functions that manage interrupts and exceptions via the NVIC.

+  @{

+ */

+

+#ifdef CMSIS_NVIC_VIRTUAL

+  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE

+    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"

+  #endif

+  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping

+  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping

+  #define NVIC_EnableIRQ              __NVIC_EnableIRQ

+  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ

+  #define NVIC_DisableIRQ             __NVIC_DisableIRQ

+  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ

+  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ

+  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ

+  #define NVIC_GetActive              __NVIC_GetActive

+  #define NVIC_SetPriority            __NVIC_SetPriority

+  #define NVIC_GetPriority            __NVIC_GetPriority

+  #define NVIC_SystemReset            __NVIC_SystemReset

+#endif /* CMSIS_NVIC_VIRTUAL */

+

+#ifdef CMSIS_VECTAB_VIRTUAL

+  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"

+  #endif

+  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE

+#else

+  #define NVIC_SetVector              __NVIC_SetVector

+  #define NVIC_GetVector              __NVIC_GetVector

+#endif  /* (CMSIS_VECTAB_VIRTUAL) */

+

+#define NVIC_USER_IRQ_OFFSET          16

+

+

+/* The following EXC_RETURN values are saved the LR on exception entry */

+#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */

+#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */

+#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */

+

+

+

+/**

+  \brief   Set Priority Grouping

+  \details Sets the priority grouping field using the required unlock sequence.

+           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.

+           Only values from 0..7 are used.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]      PriorityGroup  Priority grouping field.

+ */

+__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)

+{

+  uint32_t reg_value;

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);             /* only values 0..7 are used          */

+

+  reg_value  =  SCB->AIRCR;                                                   /* read old register configuration    */

+  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change               */

+  reg_value  =  (reg_value                                   |

+                ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |

+                (PriorityGroupTmp << 8U)                      );              /* Insert write key and priorty group */

+  SCB->AIRCR =  reg_value;

+}

+

+

+/**

+  \brief   Get Priority Grouping

+  \details Reads the priority grouping field from the NVIC Interrupt Controller.

+  \return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void)

+{

+  return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));

+}

+

+

+/**

+  \brief   Enable Interrupt

+  \details Enables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Enable status

+  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt is not enabled.

+  \return             1  Interrupt is enabled.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Disable Interrupt

+  \details Disables a device specific interrupt in the NVIC interrupt controller.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+    __DSB();

+    __ISB();

+  }

+}

+

+

+/**

+  \brief   Get Pending Interrupt

+  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not pending.

+  \return             1  Interrupt status is pending.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Pending Interrupt

+  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Clear Pending Interrupt

+  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.

+  \param [in]      IRQn  Device specific interrupt number.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));

+  }

+}

+

+

+/**

+  \brief   Get Active Interrupt

+  \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.

+  \param [in]      IRQn  Device specific interrupt number.

+  \return             0  Interrupt status is not active.

+  \return             1  Interrupt status is active.

+  \note    IRQn must not be negative.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));

+  }

+  else

+  {

+    return(0U);

+  }

+}

+

+

+/**

+  \brief   Set Interrupt Priority

+  \details Sets the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]      IRQn  Interrupt number.

+  \param [in]  priority  Priority to set.

+  \note    The priority cannot be set for every processor exception.

+ */

+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if ((int32_t)(IRQn) >= 0)

+  {

+    NVIC->IP[((uint32_t)IRQn)]               = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+  else

+  {

+    SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

+  }

+}

+

+

+/**

+  \brief   Get Interrupt Priority

+  \details Reads the priority of a device specific interrupt or a processor exception.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn  Interrupt number.

+  \return             Interrupt Priority.

+                      Value is aligned automatically to the implemented priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if ((int32_t)(IRQn) >= 0)

+  {

+    return(((uint32_t)NVIC->IP[((uint32_t)IRQn)]               >> (8U - __NVIC_PRIO_BITS)));

+  }

+  else

+  {

+    return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));

+  }

+}

+

+

+/**

+  \brief   Encode Priority

+  \details Encodes the priority for an interrupt with the given priority group,

+           preemptive priority value, and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.

+  \param [in]     PriorityGroup  Used priority group.

+  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).

+  \param [in]       SubPriority  Subpriority value (starting from 0).

+  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().

+ */

+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  return (

+           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |

+           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))

+         );

+}

+

+

+/**

+  \brief   Decode Priority

+  \details Decodes an interrupt priority value with a given priority group to

+           preemptive priority value and subpriority value.

+           In case of a conflict between priority grouping and available

+           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.

+  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().

+  \param [in]     PriorityGroup  Used priority group.

+  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).

+  \param [out]     pSubPriority  Subpriority value (starting from 0).

+ */

+__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)

+{

+  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */

+  uint32_t PreemptPriorityBits;

+  uint32_t SubPriorityBits;

+

+  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);

+  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));

+

+  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);

+  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);

+}

+

+

+/**

+  \brief   Set Interrupt Vector

+  \details Sets an interrupt vector in SRAM based interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+           VTOR must been relocated to SRAM before.

+  \param [in]   IRQn      Interrupt number

+  \param [in]   vector    Address of interrupt handler function

+ */

+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;

+}

+

+

+/**

+  \brief   Get Interrupt Vector

+  \details Reads an interrupt vector from interrupt vector table.

+           The interrupt number can be positive to specify a device specific interrupt,

+           or negative to specify a processor exception.

+  \param [in]   IRQn      Interrupt number.

+  \return                 Address of interrupt handler function

+ */

+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)

+{

+  uint32_t *vectors = (uint32_t *)SCB->VTOR;

+  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];

+}

+

+

+/**

+  \brief   System Reset

+  \details Initiates a system reset request to reset the MCU.

+ */

+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)

+{

+  __DSB();                                                          /* Ensure all outstanding memory accesses included

+                                                                       buffered write are completed before reset */

+  SCB->AIRCR  = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos)    |

+                           (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

+                            SCB_AIRCR_SYSRESETREQ_Msk    );         /* Keep priority group unchanged */

+  __DSB();                                                          /* Ensure completion of memory access */

+

+  for(;;)                                                           /* wait until reset */

+  {

+    __NOP();

+  }

+}

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+

+/* ##########################  FPU functions  #################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_FpuFunctions FPU Functions

+  \brief    Function that provides FPU type.

+  @{

+ */

+

+/**

+  \brief   get FPU type

+  \details returns the FPU type

+  \returns

+   - \b  0: No FPU

+   - \b  1: Single precision FPU

+   - \b  2: Double + Single precision FPU

+ */

+__STATIC_INLINE uint32_t SCB_GetFPUType(void)

+{

+    return 0U;           /* No FPU */

+}

+

+

+/*@} end of CMSIS_Core_FpuFunctions */

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+  \brief    Functions that configure the System.

+  @{

+ */

+

+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

+

+/**

+  \brief   System Tick Configuration

+  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+           Counter is in free running mode to generate periodic interrupts.

+  \param [in]  ticks  Number of ticks between two interrupts.

+  \return          0  Function succeeded.

+  \return          1  Function failed.

+  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+           must contain a vendor-specific implementation of this function.

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)

+  {

+    return (1UL);                                                   /* Reload value impossible */

+  }

+

+  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

+  return (0UL);                                                     /* Function successful */

+}

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+/* ##################################### Debug In/Output function ########################################### */

+/**

+  \ingroup  CMSIS_Core_FunctionInterface

+  \defgroup CMSIS_core_DebugFunctions ITM Functions

+  \brief    Functions that access the ITM debug interface.

+  @{

+ */

+

+extern volatile int32_t ITM_RxBuffer;                              /*!< External variable to receive characters. */

+#define                 ITM_RXBUFFER_EMPTY  ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */

+

+

+/**

+  \brief   ITM Send Character

+  \details Transmits a character via the ITM channel 0, and

+           \li Just returns when no debugger is connected that has booked the output.

+           \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.

+  \param [in]     ch  Character to transmit.

+  \returns            Character to transmit.

+ */

+__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch)

+{

+  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) &&      /* ITM enabled */

+      ((ITM->TER & 1UL               ) != 0UL)   )     /* ITM Port #0 enabled */

+  {

+    while (ITM->PORT[0U].u32 == 0UL)

+    {

+      __NOP();

+    }

+    ITM->PORT[0U].u8 = (uint8_t)ch;

+  }

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Receive Character

+  \details Inputs a character via the external variable \ref ITM_RxBuffer.

+  \return             Received character.

+  \return         -1  No character pending.

+ */

+__STATIC_INLINE int32_t ITM_ReceiveChar (void)

+{

+  int32_t ch = -1;                           /* no character available */

+

+  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY)

+  {

+    ch = ITM_RxBuffer;

+    ITM_RxBuffer = ITM_RXBUFFER_EMPTY;       /* ready for next character */

+  }

+

+  return (ch);

+}

+

+

+/**

+  \brief   ITM Check Character

+  \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer.

+  \return          0  No character available.

+  \return          1  Character available.

+ */

+__STATIC_INLINE int32_t ITM_CheckChar (void)

+{

+

+  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY)

+  {

+    return (0);                              /* no character available */

+  }

+  else

+  {

+    return (1);                              /*    character available */

+  }

+}

+

+/*@} end of CMSIS_core_DebugFunctions */

+

+

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __CORE_SC300_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/mpu_armv7.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/mpu_armv7.h
new file mode 100644
index 0000000..7d4b600
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/mpu_armv7.h
@@ -0,0 +1,270 @@
+/******************************************************************************

+ * @file     mpu_armv7.h

+ * @brief    CMSIS MPU API for Armv7-M MPU

+ * @version  V5.0.4

+ * @date     10. January 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2017-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+ 

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header    /* treat file as system include file */

+#endif

+ 

+#ifndef ARM_MPU_ARMV7_H

+#define ARM_MPU_ARMV7_H

+

+#define ARM_MPU_REGION_SIZE_32B      ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes

+#define ARM_MPU_REGION_SIZE_64B      ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes

+#define ARM_MPU_REGION_SIZE_128B     ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes

+#define ARM_MPU_REGION_SIZE_256B     ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes

+#define ARM_MPU_REGION_SIZE_512B     ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes

+#define ARM_MPU_REGION_SIZE_1KB      ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte

+#define ARM_MPU_REGION_SIZE_2KB      ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes

+#define ARM_MPU_REGION_SIZE_4KB      ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes

+#define ARM_MPU_REGION_SIZE_8KB      ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes

+#define ARM_MPU_REGION_SIZE_16KB     ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes

+#define ARM_MPU_REGION_SIZE_32KB     ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes

+#define ARM_MPU_REGION_SIZE_64KB     ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes

+#define ARM_MPU_REGION_SIZE_128KB    ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes

+#define ARM_MPU_REGION_SIZE_256KB    ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes

+#define ARM_MPU_REGION_SIZE_512KB    ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes

+#define ARM_MPU_REGION_SIZE_1MB      ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte

+#define ARM_MPU_REGION_SIZE_2MB      ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes

+#define ARM_MPU_REGION_SIZE_4MB      ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes

+#define ARM_MPU_REGION_SIZE_8MB      ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes

+#define ARM_MPU_REGION_SIZE_16MB     ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes

+#define ARM_MPU_REGION_SIZE_32MB     ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes

+#define ARM_MPU_REGION_SIZE_64MB     ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes

+#define ARM_MPU_REGION_SIZE_128MB    ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes

+#define ARM_MPU_REGION_SIZE_256MB    ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes

+#define ARM_MPU_REGION_SIZE_512MB    ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes

+#define ARM_MPU_REGION_SIZE_1GB      ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte

+#define ARM_MPU_REGION_SIZE_2GB      ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes

+#define ARM_MPU_REGION_SIZE_4GB      ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes

+

+#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access

+#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only

+#define ARM_MPU_AP_URO  2U ///!< MPU Access Permission unprivileged access read-only

+#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access

+#define ARM_MPU_AP_PRO  5U ///!< MPU Access Permission privileged access read-only

+#define ARM_MPU_AP_RO   6U ///!< MPU Access Permission read-only access

+

+/** MPU Region Base Address Register Value

+*

+* \param Region The region to be configured, number 0 to 15.

+* \param BaseAddress The base address for the region.

+*/

+#define ARM_MPU_RBAR(Region, BaseAddress) \

+  (((BaseAddress) & MPU_RBAR_ADDR_Msk) |  \

+   ((Region) & MPU_RBAR_REGION_Msk)    |  \

+   (MPU_RBAR_VALID_Msk))

+

+/**

+* MPU Memory Access Attributes

+* 

+* \param TypeExtField      Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral.

+* \param IsShareable       Region is shareable between multiple bus masters.

+* \param IsCacheable       Region is cacheable, i.e. its value may be kept in cache.

+* \param IsBufferable      Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy.

+*/  

+#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable)   \

+  ((((TypeExtField ) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk)                 | \

+   (((IsShareable ) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk)                      | \

+   (((IsCacheable ) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk)                      | \

+   (((IsBufferable ) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk))

+

+/**

+* MPU Region Attribute and Size Register Value

+* 

+* \param DisableExec       Instruction access disable bit, 1= disable instruction fetches.

+* \param AccessPermission  Data access permissions, allows you to configure read/write access for User and Privileged mode.

+* \param AccessAttributes  Memory access attribution, see \ref ARM_MPU_ACCESS_.

+* \param SubRegionDisable  Sub-region disable field.

+* \param Size              Region size of the region to be configured, for example 4K, 8K.

+*/

+#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size)      \

+  ((((DisableExec ) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk)                                          | \

+   (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk)                                      | \

+   (((AccessAttributes) ) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk)))

+  

+/**

+* MPU Region Attribute and Size Register Value

+* 

+* \param DisableExec       Instruction access disable bit, 1= disable instruction fetches.

+* \param AccessPermission  Data access permissions, allows you to configure read/write access for User and Privileged mode.

+* \param TypeExtField      Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral.

+* \param IsShareable       Region is shareable between multiple bus masters.

+* \param IsCacheable       Region is cacheable, i.e. its value may be kept in cache.

+* \param IsBufferable      Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy.

+* \param SubRegionDisable  Sub-region disable field.

+* \param Size              Region size of the region to be configured, for example 4K, 8K.

+*/                         

+#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \

+  ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size)

+

+/**

+* MPU Memory Access Attribute for strongly ordered memory.

+*  - TEX: 000b

+*  - Shareable

+*  - Non-cacheable

+*  - Non-bufferable

+*/ 

+#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U)

+

+/**

+* MPU Memory Access Attribute for device memory.

+*  - TEX: 000b (if non-shareable) or 010b (if shareable)

+*  - Shareable or non-shareable

+*  - Non-cacheable

+*  - Bufferable (if shareable) or non-bufferable (if non-shareable)

+*

+* \param IsShareable Configures the device memory as shareable or non-shareable.

+*/ 

+#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U))

+

+/**

+* MPU Memory Access Attribute for normal memory.

+*  - TEX: 1BBb (reflecting outer cacheability rules)

+*  - Shareable or non-shareable

+*  - Cacheable or non-cacheable (reflecting inner cacheability rules)

+*  - Bufferable or non-bufferable (reflecting inner cacheability rules)

+*

+* \param OuterCp Configures the outer cache policy.

+* \param InnerCp Configures the inner cache policy.

+* \param IsShareable Configures the memory as shareable or non-shareable.

+*/ 

+#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) & 2U), ((InnerCp) & 1U))

+

+/**

+* MPU Memory Access Attribute non-cacheable policy.

+*/

+#define ARM_MPU_CACHEP_NOCACHE 0U

+

+/**

+* MPU Memory Access Attribute write-back, write and read allocate policy.

+*/

+#define ARM_MPU_CACHEP_WB_WRA 1U

+

+/**

+* MPU Memory Access Attribute write-through, no write allocate policy.

+*/

+#define ARM_MPU_CACHEP_WT_NWA 2U

+

+/**

+* MPU Memory Access Attribute write-back, no write allocate policy.

+*/

+#define ARM_MPU_CACHEP_WB_NWA 3U

+

+

+/**

+* Struct for a single MPU Region

+*/

+typedef struct {

+  uint32_t RBAR; //!< The region base address register value (RBAR)

+  uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR

+} ARM_MPU_Region_t;

+    

+/** Enable the MPU.

+* \param MPU_Control Default access permissions for unconfigured regions.

+*/

+__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control)

+{

+  __DSB();

+  __ISB();

+  MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;

+#ifdef SCB_SHCSR_MEMFAULTENA_Msk

+  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;

+#endif

+}

+

+/** Disable the MPU.

+*/

+__STATIC_INLINE void ARM_MPU_Disable(void)

+{

+  __DSB();

+  __ISB();

+#ifdef SCB_SHCSR_MEMFAULTENA_Msk

+  SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;

+#endif

+  MPU->CTRL  &= ~MPU_CTRL_ENABLE_Msk;

+}

+

+/** Clear and disable the given MPU region.

+* \param rnr Region number to be cleared.

+*/

+__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr)

+{

+  MPU->RNR = rnr;

+  MPU->RASR = 0U;

+}

+

+/** Configure an MPU region.

+* \param rbar Value for RBAR register.

+* \param rsar Value for RSAR register.

+*/   

+__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr)

+{

+  MPU->RBAR = rbar;

+  MPU->RASR = rasr;

+}

+

+/** Configure the given MPU region.

+* \param rnr Region number to be configured.

+* \param rbar Value for RBAR register.

+* \param rsar Value for RSAR register.

+*/   

+__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr)

+{

+  MPU->RNR = rnr;

+  MPU->RBAR = rbar;

+  MPU->RASR = rasr;

+}

+

+/** Memcopy with strictly ordered memory access, e.g. for register targets.

+* \param dst Destination data is copied to.

+* \param src Source data is copied from.

+* \param len Amount of data words to be copied.

+*/

+__STATIC_INLINE void orderedCpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len)

+{

+  uint32_t i;

+  for (i = 0U; i < len; ++i) 

+  {

+    dst[i] = src[i];

+  }

+}

+

+/** Load the given number of MPU regions from a table.

+* \param table Pointer to the MPU configuration table.

+* \param cnt Amount of regions to be configured.

+*/

+__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) 

+{

+  const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U;

+  while (cnt > MPU_TYPE_RALIASES) {

+    orderedCpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize);

+    table += MPU_TYPE_RALIASES;

+    cnt -= MPU_TYPE_RALIASES;

+  }

+  orderedCpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize);

+}

+

+#endif

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/mpu_armv8.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/mpu_armv8.h
new file mode 100644
index 0000000..99ee9f9
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/mpu_armv8.h
@@ -0,0 +1,333 @@
+/******************************************************************************

+ * @file     mpu_armv8.h

+ * @brief    CMSIS MPU API for Armv8-M MPU

+ * @version  V5.0.4

+ * @date     10. January 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2017-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header    /* treat file as system include file */

+#endif

+

+#ifndef ARM_MPU_ARMV8_H

+#define ARM_MPU_ARMV8_H

+

+/** \brief Attribute for device memory (outer only) */

+#define ARM_MPU_ATTR_DEVICE                           ( 0U )

+

+/** \brief Attribute for non-cacheable, normal memory */

+#define ARM_MPU_ATTR_NON_CACHEABLE                    ( 4U )

+

+/** \brief Attribute for normal memory (outer and inner)

+* \param NT Non-Transient: Set to 1 for non-transient data.

+* \param WB Write-Back: Set to 1 to use write-back update policy.

+* \param RA Read Allocation: Set to 1 to use cache allocation on read miss.

+* \param WA Write Allocation: Set to 1 to use cache allocation on write miss.

+*/

+#define ARM_MPU_ATTR_MEMORY_(NT, WB, RA, WA) \

+  (((NT & 1U) << 3U) | ((WB & 1U) << 2U) | ((RA & 1U) << 1U) | (WA & 1U))

+

+/** \brief Device memory type non Gathering, non Re-ordering, non Early Write Acknowledgement */

+#define ARM_MPU_ATTR_DEVICE_nGnRnE (0U)

+

+/** \brief Device memory type non Gathering, non Re-ordering, Early Write Acknowledgement */

+#define ARM_MPU_ATTR_DEVICE_nGnRE  (1U)

+

+/** \brief Device memory type non Gathering, Re-ordering, Early Write Acknowledgement */

+#define ARM_MPU_ATTR_DEVICE_nGRE   (2U)

+

+/** \brief Device memory type Gathering, Re-ordering, Early Write Acknowledgement */

+#define ARM_MPU_ATTR_DEVICE_GRE    (3U)

+

+/** \brief Memory Attribute

+* \param O Outer memory attributes

+* \param I O == ARM_MPU_ATTR_DEVICE: Device memory attributes, else: Inner memory attributes

+*/

+#define ARM_MPU_ATTR(O, I) (((O & 0xFU) << 4U) | (((O & 0xFU) != 0U) ? (I & 0xFU) : ((I & 0x3U) << 2U)))

+

+/** \brief Normal memory non-shareable  */

+#define ARM_MPU_SH_NON   (0U)

+

+/** \brief Normal memory outer shareable  */

+#define ARM_MPU_SH_OUTER (2U)

+

+/** \brief Normal memory inner shareable  */

+#define ARM_MPU_SH_INNER (3U)

+

+/** \brief Memory access permissions

+* \param RO Read-Only: Set to 1 for read-only memory.

+* \param NP Non-Privileged: Set to 1 for non-privileged memory.

+*/

+#define ARM_MPU_AP_(RO, NP) (((RO & 1U) << 1U) | (NP & 1U))

+

+/** \brief Region Base Address Register value

+* \param BASE The base address bits [31:5] of a memory region. The value is zero extended. Effective address gets 32 byte aligned.

+* \param SH Defines the Shareability domain for this memory region.

+* \param RO Read-Only: Set to 1 for a read-only memory region.

+* \param NP Non-Privileged: Set to 1 for a non-privileged memory region.

+* \oaram XN eXecute Never: Set to 1 for a non-executable memory region.

+*/

+#define ARM_MPU_RBAR(BASE, SH, RO, NP, XN) \

+  ((BASE & MPU_RBAR_BASE_Msk) | \

+  ((SH << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk) | \

+  ((ARM_MPU_AP_(RO, NP) << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk) | \

+  ((XN << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk))

+

+/** \brief Region Limit Address Register value

+* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended.

+* \param IDX The attribute index to be associated with this memory region.

+*/

+#define ARM_MPU_RLAR(LIMIT, IDX) \

+  ((LIMIT & MPU_RLAR_LIMIT_Msk) | \

+  ((IDX << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \

+  (MPU_RLAR_EN_Msk))

+

+/**

+* Struct for a single MPU Region

+*/

+typedef struct {

+  uint32_t RBAR;                   /*!< Region Base Address Register value */

+  uint32_t RLAR;                   /*!< Region Limit Address Register value */

+} ARM_MPU_Region_t;

+    

+/** Enable the MPU.

+* \param MPU_Control Default access permissions for unconfigured regions.

+*/

+__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control)

+{

+  __DSB();

+  __ISB();

+  MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;

+#ifdef SCB_SHCSR_MEMFAULTENA_Msk

+  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;

+#endif

+}

+

+/** Disable the MPU.

+*/

+__STATIC_INLINE void ARM_MPU_Disable(void)

+{

+  __DSB();

+  __ISB();

+#ifdef SCB_SHCSR_MEMFAULTENA_Msk

+  SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;

+#endif

+  MPU->CTRL  &= ~MPU_CTRL_ENABLE_Msk;

+}

+

+#ifdef MPU_NS

+/** Enable the Non-secure MPU.

+* \param MPU_Control Default access permissions for unconfigured regions.

+*/

+__STATIC_INLINE void ARM_MPU_Enable_NS(uint32_t MPU_Control)

+{

+  __DSB();

+  __ISB();

+  MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;

+#ifdef SCB_SHCSR_MEMFAULTENA_Msk

+  SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;

+#endif

+}

+

+/** Disable the Non-secure MPU.

+*/

+__STATIC_INLINE void ARM_MPU_Disable_NS(void)

+{

+  __DSB();

+  __ISB();

+#ifdef SCB_SHCSR_MEMFAULTENA_Msk

+  SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;

+#endif

+  MPU_NS->CTRL  &= ~MPU_CTRL_ENABLE_Msk;

+}

+#endif

+

+/** Set the memory attribute encoding to the given MPU.

+* \param mpu Pointer to the MPU to be configured.

+* \param idx The attribute index to be set [0-7]

+* \param attr The attribute value to be set.

+*/

+__STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t attr)

+{

+  const uint8_t reg = idx / 4U;

+  const uint32_t pos = ((idx % 4U) * 8U);

+  const uint32_t mask = 0xFFU << pos;

+  

+  if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) {

+    return; // invalid index

+  }

+  

+  mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask));

+}

+

+/** Set the memory attribute encoding.

+* \param idx The attribute index to be set [0-7]

+* \param attr The attribute value to be set.

+*/

+__STATIC_INLINE void ARM_MPU_SetMemAttr(uint8_t idx, uint8_t attr)

+{

+  ARM_MPU_SetMemAttrEx(MPU, idx, attr);

+}

+

+#ifdef MPU_NS

+/** Set the memory attribute encoding to the Non-secure MPU.

+* \param idx The attribute index to be set [0-7]

+* \param attr The attribute value to be set.

+*/

+__STATIC_INLINE void ARM_MPU_SetMemAttr_NS(uint8_t idx, uint8_t attr)

+{

+  ARM_MPU_SetMemAttrEx(MPU_NS, idx, attr);

+}

+#endif

+

+/** Clear and disable the given MPU region of the given MPU.

+* \param mpu Pointer to MPU to be used.

+* \param rnr Region number to be cleared.

+*/

+__STATIC_INLINE void ARM_MPU_ClrRegionEx(MPU_Type* mpu, uint32_t rnr)

+{

+  mpu->RNR = rnr;

+  mpu->RLAR = 0U;

+}

+

+/** Clear and disable the given MPU region.

+* \param rnr Region number to be cleared.

+*/

+__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr)

+{

+  ARM_MPU_ClrRegionEx(MPU, rnr);

+}

+

+#ifdef MPU_NS

+/** Clear and disable the given Non-secure MPU region.

+* \param rnr Region number to be cleared.

+*/

+__STATIC_INLINE void ARM_MPU_ClrRegion_NS(uint32_t rnr)

+{  

+  ARM_MPU_ClrRegionEx(MPU_NS, rnr);

+}

+#endif

+

+/** Configure the given MPU region of the given MPU.

+* \param mpu Pointer to MPU to be used.

+* \param rnr Region number to be configured.

+* \param rbar Value for RBAR register.

+* \param rlar Value for RLAR register.

+*/   

+__STATIC_INLINE void ARM_MPU_SetRegionEx(MPU_Type* mpu, uint32_t rnr, uint32_t rbar, uint32_t rlar)

+{

+  mpu->RNR = rnr;

+  mpu->RBAR = rbar;

+  mpu->RLAR = rlar;

+}

+

+/** Configure the given MPU region.

+* \param rnr Region number to be configured.

+* \param rbar Value for RBAR register.

+* \param rlar Value for RLAR register.

+*/   

+__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rnr, uint32_t rbar, uint32_t rlar)

+{

+  ARM_MPU_SetRegionEx(MPU, rnr, rbar, rlar);

+}

+

+#ifdef MPU_NS

+/** Configure the given Non-secure MPU region.

+* \param rnr Region number to be configured.

+* \param rbar Value for RBAR register.

+* \param rlar Value for RLAR register.

+*/   

+__STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t rlar)

+{

+  ARM_MPU_SetRegionEx(MPU_NS, rnr, rbar, rlar);  

+}

+#endif

+

+/** Memcopy with strictly ordered memory access, e.g. for register targets.

+* \param dst Destination data is copied to.

+* \param src Source data is copied from.

+* \param len Amount of data words to be copied.

+*/

+__STATIC_INLINE void orderedCpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len)

+{

+  uint32_t i;

+  for (i = 0U; i < len; ++i) 

+  {

+    dst[i] = src[i];

+  }

+}

+

+/** Load the given number of MPU regions from a table to the given MPU.

+* \param mpu Pointer to the MPU registers to be used.

+* \param rnr First region number to be configured.

+* \param table Pointer to the MPU configuration table.

+* \param cnt Amount of regions to be configured.

+*/

+__STATIC_INLINE void ARM_MPU_LoadEx(MPU_Type* mpu, uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) 

+{

+  const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U;

+  if (cnt == 1U) {

+    mpu->RNR = rnr;

+    orderedCpy(&(mpu->RBAR), &(table->RBAR), rowWordSize);

+  } else {

+    uint32_t rnrBase   = rnr & ~(MPU_TYPE_RALIASES-1U);

+    uint32_t rnrOffset = rnr % MPU_TYPE_RALIASES;

+    

+    mpu->RNR = rnrBase;

+    while ((rnrOffset + cnt) > MPU_TYPE_RALIASES) {

+      uint32_t c = MPU_TYPE_RALIASES - rnrOffset;

+      orderedCpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), c*rowWordSize);

+      table += c;

+      cnt -= c;

+      rnrOffset = 0U;

+      rnrBase += MPU_TYPE_RALIASES;

+      mpu->RNR = rnrBase;

+    }

+    

+    orderedCpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), cnt*rowWordSize);

+  }

+}

+

+/** Load the given number of MPU regions from a table.

+* \param rnr First region number to be configured.

+* \param table Pointer to the MPU configuration table.

+* \param cnt Amount of regions to be configured.

+*/

+__STATIC_INLINE void ARM_MPU_Load(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) 

+{

+  ARM_MPU_LoadEx(MPU, rnr, table, cnt);

+}

+

+#ifdef MPU_NS

+/** Load the given number of MPU regions from a table to the Non-secure MPU.

+* \param rnr First region number to be configured.

+* \param table Pointer to the MPU configuration table.

+* \param cnt Amount of regions to be configured.

+*/

+__STATIC_INLINE void ARM_MPU_Load_NS(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) 

+{

+  ARM_MPU_LoadEx(MPU_NS, rnr, table, cnt);

+}

+#endif

+

+#endif

+

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/tz_context.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/tz_context.h
new file mode 100644
index 0000000..d4c1474
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/CMSIS/Include/tz_context.h
@@ -0,0 +1,70 @@
+/******************************************************************************

+ * @file     tz_context.h

+ * @brief    Context Management for Armv8-M TrustZone

+ * @version  V1.0.1

+ * @date     10. January 2018

+ ******************************************************************************/

+/*

+ * Copyright (c) 2017-2018 Arm Limited. All rights reserved.

+ *

+ * SPDX-License-Identifier: Apache-2.0

+ *

+ * Licensed under the Apache License, Version 2.0 (the License); you may

+ * not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ * www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT

+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+#if   defined ( __ICCARM__ )

+  #pragma system_include         /* treat file as system include file for MISRA check */

+#elif defined (__clang__)

+  #pragma clang system_header   /* treat file as system include file */

+#endif

+

+#ifndef TZ_CONTEXT_H

+#define TZ_CONTEXT_H

+ 

+#include <stdint.h>

+ 

+#ifndef TZ_MODULEID_T

+#define TZ_MODULEID_T

+/// \details Data type that identifies secure software modules called by a process.

+typedef uint32_t TZ_ModuleId_t;

+#endif

+ 

+/// \details TZ Memory ID identifies an allocated memory slot.

+typedef uint32_t TZ_MemoryId_t;

+  

+/// Initialize secure context memory system

+/// \return execution status (1: success, 0: error)

+uint32_t TZ_InitContextSystem_S (void);

+ 

+/// Allocate context memory for calling secure software modules in TrustZone

+/// \param[in]  module   identifies software modules called from non-secure mode

+/// \return value != 0 id TrustZone memory slot identifier

+/// \return value 0    no memory available or internal error

+TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module);

+ 

+/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S

+/// \param[in]  id  TrustZone memory slot identifier

+/// \return execution status (1: success, 0: error)

+uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id);

+ 

+/// Load secure context (called on RTOS thread context switch)

+/// \param[in]  id  TrustZone memory slot identifier

+/// \return execution status (1: success, 0: error)

+uint32_t TZ_LoadContext_S (TZ_MemoryId_t id);

+ 

+/// Store secure context (called on RTOS thread context switch)

+/// \param[in]  id  TrustZone memory slot identifier

+/// \return execution status (1: success, 0: error)

+uint32_t TZ_StoreContext_S (TZ_MemoryId_t id);

+ 

+#endif  // TZ_CONTEXT_H

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
new file mode 100644
index 0000000..c8d02a1
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
@@ -0,0 +1,3516 @@
+/**

+  ******************************************************************************

+  * @file    stm32_hal_legacy.h

+  * @author  MCD Application Team

+  * @brief   This file contains aliases definition for the STM32Cube HAL constants

+  *          macros and functions maintained for legacy purpose.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2018 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef STM32_HAL_LEGACY

+#define STM32_HAL_LEGACY

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+/* Exported types ------------------------------------------------------------*/

+/* Exported constants --------------------------------------------------------*/

+

+/** @defgroup HAL_AES_Aliased_Defines HAL CRYP Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define AES_FLAG_RDERR                  CRYP_FLAG_RDERR

+#define AES_FLAG_WRERR                  CRYP_FLAG_WRERR

+#define AES_CLEARFLAG_CCF               CRYP_CLEARFLAG_CCF

+#define AES_CLEARFLAG_RDERR             CRYP_CLEARFLAG_RDERR

+#define AES_CLEARFLAG_WRERR             CRYP_CLEARFLAG_WRERR

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define ADC_RESOLUTION12b               ADC_RESOLUTION_12B

+#define ADC_RESOLUTION10b               ADC_RESOLUTION_10B

+#define ADC_RESOLUTION8b                ADC_RESOLUTION_8B

+#define ADC_RESOLUTION6b                ADC_RESOLUTION_6B

+#define OVR_DATA_OVERWRITTEN            ADC_OVR_DATA_OVERWRITTEN

+#define OVR_DATA_PRESERVED              ADC_OVR_DATA_PRESERVED

+#define EOC_SINGLE_CONV                 ADC_EOC_SINGLE_CONV

+#define EOC_SEQ_CONV                    ADC_EOC_SEQ_CONV

+#define EOC_SINGLE_SEQ_CONV             ADC_EOC_SINGLE_SEQ_CONV

+#define REGULAR_GROUP                   ADC_REGULAR_GROUP

+#define INJECTED_GROUP                  ADC_INJECTED_GROUP

+#define REGULAR_INJECTED_GROUP          ADC_REGULAR_INJECTED_GROUP

+#define AWD_EVENT                       ADC_AWD_EVENT

+#define AWD1_EVENT                      ADC_AWD1_EVENT

+#define AWD2_EVENT                      ADC_AWD2_EVENT

+#define AWD3_EVENT                      ADC_AWD3_EVENT

+#define OVR_EVENT                       ADC_OVR_EVENT

+#define JQOVF_EVENT                     ADC_JQOVF_EVENT

+#define ALL_CHANNELS                    ADC_ALL_CHANNELS

+#define REGULAR_CHANNELS                ADC_REGULAR_CHANNELS

+#define INJECTED_CHANNELS               ADC_INJECTED_CHANNELS

+#define SYSCFG_FLAG_SENSOR_ADC          ADC_FLAG_SENSOR

+#define SYSCFG_FLAG_VREF_ADC            ADC_FLAG_VREFINT

+#define ADC_CLOCKPRESCALER_PCLK_DIV1    ADC_CLOCK_SYNC_PCLK_DIV1

+#define ADC_CLOCKPRESCALER_PCLK_DIV2    ADC_CLOCK_SYNC_PCLK_DIV2

+#define ADC_CLOCKPRESCALER_PCLK_DIV4    ADC_CLOCK_SYNC_PCLK_DIV4

+#define ADC_CLOCKPRESCALER_PCLK_DIV6    ADC_CLOCK_SYNC_PCLK_DIV6

+#define ADC_CLOCKPRESCALER_PCLK_DIV8    ADC_CLOCK_SYNC_PCLK_DIV8

+#define ADC_EXTERNALTRIG0_T6_TRGO       ADC_EXTERNALTRIGCONV_T6_TRGO

+#define ADC_EXTERNALTRIG1_T21_CC2       ADC_EXTERNALTRIGCONV_T21_CC2

+#define ADC_EXTERNALTRIG2_T2_TRGO       ADC_EXTERNALTRIGCONV_T2_TRGO

+#define ADC_EXTERNALTRIG3_T2_CC4        ADC_EXTERNALTRIGCONV_T2_CC4

+#define ADC_EXTERNALTRIG4_T22_TRGO      ADC_EXTERNALTRIGCONV_T22_TRGO

+#define ADC_EXTERNALTRIG7_EXT_IT11      ADC_EXTERNALTRIGCONV_EXT_IT11

+#define ADC_CLOCK_ASYNC                 ADC_CLOCK_ASYNC_DIV1

+#define ADC_EXTERNALTRIG_EDGE_NONE      ADC_EXTERNALTRIGCONVEDGE_NONE

+#define ADC_EXTERNALTRIG_EDGE_RISING    ADC_EXTERNALTRIGCONVEDGE_RISING

+#define ADC_EXTERNALTRIG_EDGE_FALLING   ADC_EXTERNALTRIGCONVEDGE_FALLING

+#define ADC_EXTERNALTRIG_EDGE_RISINGFALLING ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING

+#define ADC_SAMPLETIME_2CYCLE_5         ADC_SAMPLETIME_2CYCLES_5

+

+#define HAL_ADC_STATE_BUSY_REG          HAL_ADC_STATE_REG_BUSY

+#define HAL_ADC_STATE_BUSY_INJ          HAL_ADC_STATE_INJ_BUSY

+#define HAL_ADC_STATE_EOC_REG           HAL_ADC_STATE_REG_EOC

+#define HAL_ADC_STATE_EOC_INJ           HAL_ADC_STATE_INJ_EOC

+#define HAL_ADC_STATE_ERROR             HAL_ADC_STATE_ERROR_INTERNAL

+#define HAL_ADC_STATE_BUSY              HAL_ADC_STATE_BUSY_INTERNAL

+#define HAL_ADC_STATE_AWD               HAL_ADC_STATE_AWD1

+

+#if defined(STM32H7)

+#define ADC_CHANNEL_VBAT_DIV4           ADC_CHANNEL_VBAT

+#endif /* STM32H7 */

+/**

+  * @}

+  */

+

+/** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define COMP_WINDOWMODE_DISABLED       COMP_WINDOWMODE_DISABLE

+#define COMP_WINDOWMODE_ENABLED        COMP_WINDOWMODE_ENABLE

+#define COMP_EXTI_LINE_COMP1_EVENT     COMP_EXTI_LINE_COMP1

+#define COMP_EXTI_LINE_COMP2_EVENT     COMP_EXTI_LINE_COMP2

+#define COMP_EXTI_LINE_COMP3_EVENT     COMP_EXTI_LINE_COMP3

+#define COMP_EXTI_LINE_COMP4_EVENT     COMP_EXTI_LINE_COMP4

+#define COMP_EXTI_LINE_COMP5_EVENT     COMP_EXTI_LINE_COMP5

+#define COMP_EXTI_LINE_COMP6_EVENT     COMP_EXTI_LINE_COMP6

+#define COMP_EXTI_LINE_COMP7_EVENT     COMP_EXTI_LINE_COMP7

+#if defined(STM32L0)

+#define COMP_LPTIMCONNECTION_ENABLED   ((uint32_t)0x00000003U)    /*!< COMPX output generic naming: connected to LPTIM input 1 for COMP1, LPTIM input 2 for COMP2 */

+#endif

+#define COMP_OUTPUT_COMP6TIM2OCREFCLR  COMP_OUTPUT_COMP6_TIM2OCREFCLR

+#if defined(STM32F373xC) || defined(STM32F378xx)

+#define COMP_OUTPUT_TIM3IC1            COMP_OUTPUT_COMP1_TIM3IC1

+#define COMP_OUTPUT_TIM3OCREFCLR       COMP_OUTPUT_COMP1_TIM3OCREFCLR

+#endif /* STM32F373xC || STM32F378xx */

+

+#if defined(STM32L0) || defined(STM32L4)

+#define COMP_WINDOWMODE_ENABLE         COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON

+

+#define COMP_NONINVERTINGINPUT_IO1      COMP_INPUT_PLUS_IO1

+#define COMP_NONINVERTINGINPUT_IO2      COMP_INPUT_PLUS_IO2

+#define COMP_NONINVERTINGINPUT_IO3      COMP_INPUT_PLUS_IO3

+#define COMP_NONINVERTINGINPUT_IO4      COMP_INPUT_PLUS_IO4

+#define COMP_NONINVERTINGINPUT_IO5      COMP_INPUT_PLUS_IO5

+#define COMP_NONINVERTINGINPUT_IO6      COMP_INPUT_PLUS_IO6

+

+#define COMP_INVERTINGINPUT_1_4VREFINT  COMP_INPUT_MINUS_1_4VREFINT

+#define COMP_INVERTINGINPUT_1_2VREFINT  COMP_INPUT_MINUS_1_2VREFINT

+#define COMP_INVERTINGINPUT_3_4VREFINT  COMP_INPUT_MINUS_3_4VREFINT

+#define COMP_INVERTINGINPUT_VREFINT     COMP_INPUT_MINUS_VREFINT

+#define COMP_INVERTINGINPUT_DAC1_CH1    COMP_INPUT_MINUS_DAC1_CH1

+#define COMP_INVERTINGINPUT_DAC1_CH2    COMP_INPUT_MINUS_DAC1_CH2

+#define COMP_INVERTINGINPUT_DAC1        COMP_INPUT_MINUS_DAC1_CH1

+#define COMP_INVERTINGINPUT_DAC2        COMP_INPUT_MINUS_DAC1_CH2

+#define COMP_INVERTINGINPUT_IO1         COMP_INPUT_MINUS_IO1

+#if defined(STM32L0)

+/* Issue fixed on STM32L0 COMP driver: only 2 dedicated IO (IO1 and IO2),     */

+/* IO2 was wrongly assigned to IO shared with DAC and IO3 was corresponding   */

+/* to the second dedicated IO (only for COMP2).                               */

+#define COMP_INVERTINGINPUT_IO2         COMP_INPUT_MINUS_DAC1_CH2

+#define COMP_INVERTINGINPUT_IO3         COMP_INPUT_MINUS_IO2

+#else

+#define COMP_INVERTINGINPUT_IO2         COMP_INPUT_MINUS_IO2

+#define COMP_INVERTINGINPUT_IO3         COMP_INPUT_MINUS_IO3

+#endif

+#define COMP_INVERTINGINPUT_IO4         COMP_INPUT_MINUS_IO4

+#define COMP_INVERTINGINPUT_IO5         COMP_INPUT_MINUS_IO5

+

+#define COMP_OUTPUTLEVEL_LOW            COMP_OUTPUT_LEVEL_LOW

+#define COMP_OUTPUTLEVEL_HIGH           COMP_OUTPUT_LEVEL_HIGH

+

+/* Note: Literal "COMP_FLAG_LOCK" kept for legacy purpose.                    */

+/*       To check COMP lock state, use macro "__HAL_COMP_IS_LOCKED()".        */

+#if defined(COMP_CSR_LOCK)

+#define COMP_FLAG_LOCK                 COMP_CSR_LOCK

+#elif defined(COMP_CSR_COMP1LOCK)

+#define COMP_FLAG_LOCK                 COMP_CSR_COMP1LOCK

+#elif defined(COMP_CSR_COMPxLOCK)

+#define COMP_FLAG_LOCK                 COMP_CSR_COMPxLOCK

+#endif

+

+#if defined(STM32L4)

+#define COMP_BLANKINGSRCE_TIM1OC5        COMP_BLANKINGSRC_TIM1_OC5_COMP1

+#define COMP_BLANKINGSRCE_TIM2OC3        COMP_BLANKINGSRC_TIM2_OC3_COMP1

+#define COMP_BLANKINGSRCE_TIM3OC3        COMP_BLANKINGSRC_TIM3_OC3_COMP1

+#define COMP_BLANKINGSRCE_TIM3OC4        COMP_BLANKINGSRC_TIM3_OC4_COMP2

+#define COMP_BLANKINGSRCE_TIM8OC5        COMP_BLANKINGSRC_TIM8_OC5_COMP2

+#define COMP_BLANKINGSRCE_TIM15OC1       COMP_BLANKINGSRC_TIM15_OC1_COMP2

+#define COMP_BLANKINGSRCE_NONE           COMP_BLANKINGSRC_NONE

+#endif

+

+#if defined(STM32L0)

+#define COMP_MODE_HIGHSPEED              COMP_POWERMODE_MEDIUMSPEED

+#define COMP_MODE_LOWSPEED               COMP_POWERMODE_ULTRALOWPOWER

+#else

+#define COMP_MODE_HIGHSPEED              COMP_POWERMODE_HIGHSPEED

+#define COMP_MODE_MEDIUMSPEED            COMP_POWERMODE_MEDIUMSPEED

+#define COMP_MODE_LOWPOWER               COMP_POWERMODE_LOWPOWER

+#define COMP_MODE_ULTRALOWPOWER          COMP_POWERMODE_ULTRALOWPOWER

+#endif

+

+#endif

+/**

+  * @}

+  */

+

+/** @defgroup HAL_CORTEX_Aliased_Defines HAL CORTEX Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define __HAL_CORTEX_SYSTICKCLK_CONFIG HAL_SYSTICK_CLKSourceConfig

+/**

+  * @}

+  */

+

+/** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+#define CRC_OUTPUTDATA_INVERSION_DISABLED    CRC_OUTPUTDATA_INVERSION_DISABLE

+#define CRC_OUTPUTDATA_INVERSION_ENABLED     CRC_OUTPUTDATA_INVERSION_ENABLE

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_DAC_Aliased_Defines HAL DAC Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+#define DAC1_CHANNEL_1                                  DAC_CHANNEL_1

+#define DAC1_CHANNEL_2                                  DAC_CHANNEL_2

+#define DAC2_CHANNEL_1                                  DAC_CHANNEL_1

+#define DAC_WAVE_NONE                                   0x00000000U

+#define DAC_WAVE_NOISE                                  DAC_CR_WAVE1_0

+#define DAC_WAVE_TRIANGLE                               DAC_CR_WAVE1_1

+#define DAC_WAVEGENERATION_NONE                         DAC_WAVE_NONE

+#define DAC_WAVEGENERATION_NOISE                        DAC_WAVE_NOISE

+#define DAC_WAVEGENERATION_TRIANGLE                     DAC_WAVE_TRIANGLE

+

+#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0)

+#define HAL_DAC_MSP_INIT_CB_ID       HAL_DAC_MSPINIT_CB_ID

+#define HAL_DAC_MSP_DEINIT_CB_ID     HAL_DAC_MSPDEINIT_CB_ID

+#endif

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define HAL_REMAPDMA_ADC_DMA_CH2                DMA_REMAP_ADC_DMA_CH2

+#define HAL_REMAPDMA_USART1_TX_DMA_CH4          DMA_REMAP_USART1_TX_DMA_CH4

+#define HAL_REMAPDMA_USART1_RX_DMA_CH5          DMA_REMAP_USART1_RX_DMA_CH5

+#define HAL_REMAPDMA_TIM16_DMA_CH4              DMA_REMAP_TIM16_DMA_CH4

+#define HAL_REMAPDMA_TIM17_DMA_CH2              DMA_REMAP_TIM17_DMA_CH2

+#define HAL_REMAPDMA_USART3_DMA_CH32            DMA_REMAP_USART3_DMA_CH32

+#define HAL_REMAPDMA_TIM16_DMA_CH6              DMA_REMAP_TIM16_DMA_CH6

+#define HAL_REMAPDMA_TIM17_DMA_CH7              DMA_REMAP_TIM17_DMA_CH7

+#define HAL_REMAPDMA_SPI2_DMA_CH67              DMA_REMAP_SPI2_DMA_CH67

+#define HAL_REMAPDMA_USART2_DMA_CH67            DMA_REMAP_USART2_DMA_CH67

+#define HAL_REMAPDMA_I2C1_DMA_CH76              DMA_REMAP_I2C1_DMA_CH76

+#define HAL_REMAPDMA_TIM1_DMA_CH6               DMA_REMAP_TIM1_DMA_CH6

+#define HAL_REMAPDMA_TIM2_DMA_CH7               DMA_REMAP_TIM2_DMA_CH7

+#define HAL_REMAPDMA_TIM3_DMA_CH6               DMA_REMAP_TIM3_DMA_CH6

+

+#define IS_HAL_REMAPDMA                          IS_DMA_REMAP

+#define __HAL_REMAPDMA_CHANNEL_ENABLE            __HAL_DMA_REMAP_CHANNEL_ENABLE

+#define __HAL_REMAPDMA_CHANNEL_DISABLE           __HAL_DMA_REMAP_CHANNEL_DISABLE

+

+#if defined(STM32L4)

+

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI0            HAL_DMAMUX1_REQ_GEN_EXTI0

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI1            HAL_DMAMUX1_REQ_GEN_EXTI1

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI2            HAL_DMAMUX1_REQ_GEN_EXTI2

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI3            HAL_DMAMUX1_REQ_GEN_EXTI3

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI4            HAL_DMAMUX1_REQ_GEN_EXTI4

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI5            HAL_DMAMUX1_REQ_GEN_EXTI5

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI6            HAL_DMAMUX1_REQ_GEN_EXTI6

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI7            HAL_DMAMUX1_REQ_GEN_EXTI7

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI8            HAL_DMAMUX1_REQ_GEN_EXTI8

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI9            HAL_DMAMUX1_REQ_GEN_EXTI9

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI10           HAL_DMAMUX1_REQ_GEN_EXTI10

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI11           HAL_DMAMUX1_REQ_GEN_EXTI11

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI12           HAL_DMAMUX1_REQ_GEN_EXTI12

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI13           HAL_DMAMUX1_REQ_GEN_EXTI13

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI14           HAL_DMAMUX1_REQ_GEN_EXTI14

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI15           HAL_DMAMUX1_REQ_GEN_EXTI15

+#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT  HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT

+#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT  HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT

+#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT  HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT

+#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT  HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT

+#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT       HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT

+#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT       HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT

+#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE           HAL_DMAMUX1_REQ_GEN_DSI_TE

+#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT          HAL_DMAMUX1_REQ_GEN_DSI_EOT

+#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT        HAL_DMAMUX1_REQ_GEN_DMA2D_EOT

+#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT          HAL_DMAMUX1_REQ_GEN_LTDC_IT

+

+#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT          HAL_DMAMUX_REQ_GEN_NO_EVENT

+#define HAL_DMAMUX_REQUEST_GEN_RISING            HAL_DMAMUX_REQ_GEN_RISING

+#define HAL_DMAMUX_REQUEST_GEN_FALLING           HAL_DMAMUX_REQ_GEN_FALLING

+#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING    HAL_DMAMUX_REQ_GEN_RISING_FALLING

+

+#endif /* STM32L4 */

+

+#if defined(STM32H7)

+

+#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1

+#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2

+

+#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX

+#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX

+

+#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT    HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT

+#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT    HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT

+#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT    HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT

+#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT         HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT

+#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT         HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT

+#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT         HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT

+#define HAL_DMAMUX1_REQUEST_GEN_EXTI0              HAL_DMAMUX1_REQ_GEN_EXTI0

+#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO         HAL_DMAMUX1_REQ_GEN_TIM12_TRGO

+

+#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT    HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT

+#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT    HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT

+#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT    HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT

+#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT    HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT

+#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT    HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT

+#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT    HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT

+#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT    HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT

+#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP    HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP

+#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP    HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP

+#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP        HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP

+#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT         HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT

+#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP        HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP

+#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT         HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT

+#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP        HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP

+#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP        HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP

+#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP          HAL_DMAMUX2_REQ_GEN_I2C4_WKUP

+#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP          HAL_DMAMUX2_REQ_GEN_SPI6_WKUP

+#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT          HAL_DMAMUX2_REQ_GEN_COMP1_OUT

+#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT          HAL_DMAMUX2_REQ_GEN_COMP2_OUT

+#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP           HAL_DMAMUX2_REQ_GEN_RTC_WKUP

+#define HAL_DMAMUX2_REQUEST_GEN_EXTI0              HAL_DMAMUX2_REQ_GEN_EXTI0

+#define HAL_DMAMUX2_REQUEST_GEN_EXTI2              HAL_DMAMUX2_REQ_GEN_EXTI2

+#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT        HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT

+#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT            HAL_DMAMUX2_REQ_GEN_SPI6_IT

+#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT      HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT

+#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT      HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT

+#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT            HAL_DMAMUX2_REQ_GEN_ADC3_IT

+#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT      HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT

+#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT        HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT

+#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT        HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT

+

+#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT            HAL_DMAMUX_REQ_GEN_NO_EVENT

+#define HAL_DMAMUX_REQUEST_GEN_RISING              HAL_DMAMUX_REQ_GEN_RISING

+#define HAL_DMAMUX_REQUEST_GEN_FALLING             HAL_DMAMUX_REQ_GEN_FALLING

+#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING      HAL_DMAMUX_REQ_GEN_RISING_FALLING

+

+#define DFSDM_FILTER_EXT_TRIG_LPTIM1               DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT

+#define DFSDM_FILTER_EXT_TRIG_LPTIM2               DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT

+#define DFSDM_FILTER_EXT_TRIG_LPTIM3               DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT

+

+#endif /* STM32H7 */

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+#define TYPEPROGRAM_BYTE              FLASH_TYPEPROGRAM_BYTE

+#define TYPEPROGRAM_HALFWORD          FLASH_TYPEPROGRAM_HALFWORD

+#define TYPEPROGRAM_WORD              FLASH_TYPEPROGRAM_WORD

+#define TYPEPROGRAM_DOUBLEWORD        FLASH_TYPEPROGRAM_DOUBLEWORD

+#define TYPEERASE_SECTORS             FLASH_TYPEERASE_SECTORS

+#define TYPEERASE_PAGES               FLASH_TYPEERASE_PAGES

+#define TYPEERASE_PAGEERASE           FLASH_TYPEERASE_PAGES

+#define TYPEERASE_MASSERASE           FLASH_TYPEERASE_MASSERASE

+#define WRPSTATE_DISABLE              OB_WRPSTATE_DISABLE

+#define WRPSTATE_ENABLE               OB_WRPSTATE_ENABLE

+#define HAL_FLASH_TIMEOUT_VALUE       FLASH_TIMEOUT_VALUE

+#define OBEX_PCROP                    OPTIONBYTE_PCROP

+#define OBEX_BOOTCONFIG               OPTIONBYTE_BOOTCONFIG

+#define PCROPSTATE_DISABLE            OB_PCROP_STATE_DISABLE

+#define PCROPSTATE_ENABLE             OB_PCROP_STATE_ENABLE

+#define TYPEERASEDATA_BYTE            FLASH_TYPEERASEDATA_BYTE

+#define TYPEERASEDATA_HALFWORD        FLASH_TYPEERASEDATA_HALFWORD

+#define TYPEERASEDATA_WORD            FLASH_TYPEERASEDATA_WORD

+#define TYPEPROGRAMDATA_BYTE          FLASH_TYPEPROGRAMDATA_BYTE

+#define TYPEPROGRAMDATA_HALFWORD      FLASH_TYPEPROGRAMDATA_HALFWORD

+#define TYPEPROGRAMDATA_WORD          FLASH_TYPEPROGRAMDATA_WORD

+#define TYPEPROGRAMDATA_FASTBYTE      FLASH_TYPEPROGRAMDATA_FASTBYTE

+#define TYPEPROGRAMDATA_FASTHALFWORD  FLASH_TYPEPROGRAMDATA_FASTHALFWORD

+#define TYPEPROGRAMDATA_FASTWORD      FLASH_TYPEPROGRAMDATA_FASTWORD

+#define PAGESIZE                      FLASH_PAGE_SIZE

+#define TYPEPROGRAM_FASTBYTE          FLASH_TYPEPROGRAM_BYTE

+#define TYPEPROGRAM_FASTHALFWORD      FLASH_TYPEPROGRAM_HALFWORD

+#define TYPEPROGRAM_FASTWORD          FLASH_TYPEPROGRAM_WORD

+#define VOLTAGE_RANGE_1               FLASH_VOLTAGE_RANGE_1

+#define VOLTAGE_RANGE_2               FLASH_VOLTAGE_RANGE_2

+#define VOLTAGE_RANGE_3               FLASH_VOLTAGE_RANGE_3

+#define VOLTAGE_RANGE_4               FLASH_VOLTAGE_RANGE_4

+#define TYPEPROGRAM_FAST              FLASH_TYPEPROGRAM_FAST

+#define TYPEPROGRAM_FAST_AND_LAST     FLASH_TYPEPROGRAM_FAST_AND_LAST

+#define WRPAREA_BANK1_AREAA           OB_WRPAREA_BANK1_AREAA

+#define WRPAREA_BANK1_AREAB           OB_WRPAREA_BANK1_AREAB

+#define WRPAREA_BANK2_AREAA           OB_WRPAREA_BANK2_AREAA

+#define WRPAREA_BANK2_AREAB           OB_WRPAREA_BANK2_AREAB

+#define IWDG_STDBY_FREEZE             OB_IWDG_STDBY_FREEZE

+#define IWDG_STDBY_ACTIVE             OB_IWDG_STDBY_RUN

+#define IWDG_STOP_FREEZE              OB_IWDG_STOP_FREEZE

+#define IWDG_STOP_ACTIVE              OB_IWDG_STOP_RUN

+#define FLASH_ERROR_NONE              HAL_FLASH_ERROR_NONE

+#define FLASH_ERROR_RD                HAL_FLASH_ERROR_RD

+#define FLASH_ERROR_PG                HAL_FLASH_ERROR_PROG

+#define FLASH_ERROR_PGP               HAL_FLASH_ERROR_PGS

+#define FLASH_ERROR_WRP               HAL_FLASH_ERROR_WRP

+#define FLASH_ERROR_OPTV              HAL_FLASH_ERROR_OPTV

+#define FLASH_ERROR_OPTVUSR           HAL_FLASH_ERROR_OPTVUSR

+#define FLASH_ERROR_PROG              HAL_FLASH_ERROR_PROG

+#define FLASH_ERROR_OP                HAL_FLASH_ERROR_OPERATION

+#define FLASH_ERROR_PGA               HAL_FLASH_ERROR_PGA

+#define FLASH_ERROR_SIZE              HAL_FLASH_ERROR_SIZE

+#define FLASH_ERROR_SIZ               HAL_FLASH_ERROR_SIZE

+#define FLASH_ERROR_PGS               HAL_FLASH_ERROR_PGS

+#define FLASH_ERROR_MIS               HAL_FLASH_ERROR_MIS

+#define FLASH_ERROR_FAST              HAL_FLASH_ERROR_FAST

+#define FLASH_ERROR_FWWERR            HAL_FLASH_ERROR_FWWERR

+#define FLASH_ERROR_NOTZERO           HAL_FLASH_ERROR_NOTZERO

+#define FLASH_ERROR_OPERATION         HAL_FLASH_ERROR_OPERATION

+#define FLASH_ERROR_ERS               HAL_FLASH_ERROR_ERS

+#define OB_WDG_SW                     OB_IWDG_SW

+#define OB_WDG_HW                     OB_IWDG_HW

+#define OB_SDADC12_VDD_MONITOR_SET    OB_SDACD_VDD_MONITOR_SET

+#define OB_SDADC12_VDD_MONITOR_RESET  OB_SDACD_VDD_MONITOR_RESET

+#define OB_RAM_PARITY_CHECK_SET       OB_SRAM_PARITY_SET

+#define OB_RAM_PARITY_CHECK_RESET     OB_SRAM_PARITY_RESET

+#define IS_OB_SDADC12_VDD_MONITOR     IS_OB_SDACD_VDD_MONITOR

+#define OB_RDP_LEVEL0                 OB_RDP_LEVEL_0

+#define OB_RDP_LEVEL1                 OB_RDP_LEVEL_1

+#define OB_RDP_LEVEL2                 OB_RDP_LEVEL_2

+#if defined(STM32G0)

+#define OB_BOOT_LOCK_DISABLE          OB_BOOT_ENTRY_FORCED_NONE

+#define OB_BOOT_LOCK_ENABLE           OB_BOOT_ENTRY_FORCED_FLASH

+#else

+#define OB_BOOT_ENTRY_FORCED_NONE     OB_BOOT_LOCK_DISABLE

+#define OB_BOOT_ENTRY_FORCED_FLASH    OB_BOOT_LOCK_ENABLE

+#endif

+#if defined(STM32H7)

+#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1

+#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1

+#define FLASH_FLAG_STRBER_BANK1R  FLASH_FLAG_STRBERR_BANK1

+#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2

+#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2

+#define FLASH_FLAG_STRBER_BANK2R  FLASH_FLAG_STRBERR_BANK2

+#endif

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#if defined(STM32H7)

+#define __HAL_RCC_JPEG_CLK_ENABLE               __HAL_RCC_JPGDECEN_CLK_ENABLE

+#define __HAL_RCC_JPEG_CLK_DISABLE              __HAL_RCC_JPGDECEN_CLK_DISABLE

+#define __HAL_RCC_JPEG_FORCE_RESET              __HAL_RCC_JPGDECRST_FORCE_RESET

+#define __HAL_RCC_JPEG_RELEASE_RESET            __HAL_RCC_JPGDECRST_RELEASE_RESET

+#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE         __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE

+#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE        __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE

+#endif /* STM32H7 */

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9    I2C_FASTMODEPLUS_PA9

+#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10   I2C_FASTMODEPLUS_PA10

+#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6    I2C_FASTMODEPLUS_PB6

+#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB7    I2C_FASTMODEPLUS_PB7

+#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB8    I2C_FASTMODEPLUS_PB8

+#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB9    I2C_FASTMODEPLUS_PB9

+#define HAL_SYSCFG_FASTMODEPLUS_I2C1       I2C_FASTMODEPLUS_I2C1

+#define HAL_SYSCFG_FASTMODEPLUS_I2C2       I2C_FASTMODEPLUS_I2C2

+#define HAL_SYSCFG_FASTMODEPLUS_I2C3       I2C_FASTMODEPLUS_I2C3

+

+/**

+  * @}

+  */

+

+

+/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose

+  * @{

+  */

+#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7)

+#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE       FMC_NAND_WAIT_FEATURE_DISABLE

+#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE        FMC_NAND_WAIT_FEATURE_ENABLE

+#define FMC_NAND_PCC_MEM_BUS_WIDTH_8            FMC_NAND_MEM_BUS_WIDTH_8

+#define FMC_NAND_PCC_MEM_BUS_WIDTH_16           FMC_NAND_MEM_BUS_WIDTH_16

+#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4)

+#define FMC_NAND_WAIT_FEATURE_DISABLE           FMC_NAND_PCC_WAIT_FEATURE_DISABLE

+#define FMC_NAND_WAIT_FEATURE_ENABLE            FMC_NAND_PCC_WAIT_FEATURE_ENABLE

+#define FMC_NAND_MEM_BUS_WIDTH_8                FMC_NAND_PCC_MEM_BUS_WIDTH_8

+#define FMC_NAND_MEM_BUS_WIDTH_16               FMC_NAND_PCC_MEM_BUS_WIDTH_16

+#endif

+/**

+  * @}

+  */

+

+/** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+#define FSMC_NORSRAM_TYPEDEF                      FSMC_NORSRAM_TypeDef

+#define FSMC_NORSRAM_EXTENDED_TYPEDEF             FSMC_NORSRAM_EXTENDED_TypeDef

+/**

+  * @}

+  */

+

+/** @defgroup HAL_GPIO_Aliased_Macros HAL GPIO Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define GET_GPIO_SOURCE                           GPIO_GET_INDEX

+#define GET_GPIO_INDEX                            GPIO_GET_INDEX

+

+#if defined(STM32F4)

+#define GPIO_AF12_SDMMC                           GPIO_AF12_SDIO

+#define GPIO_AF12_SDMMC1                          GPIO_AF12_SDIO

+#endif

+

+#if defined(STM32F7)

+#define GPIO_AF12_SDIO                            GPIO_AF12_SDMMC1

+#define GPIO_AF12_SDMMC                           GPIO_AF12_SDMMC1

+#endif

+

+#if defined(STM32L4)

+#define GPIO_AF12_SDIO                            GPIO_AF12_SDMMC1

+#define GPIO_AF12_SDMMC                           GPIO_AF12_SDMMC1

+#endif

+

+#if defined(STM32H7)

+#define GPIO_AF7_SDIO1                            GPIO_AF7_SDMMC1

+#define GPIO_AF8_SDIO1                            GPIO_AF8_SDMMC1

+#define GPIO_AF12_SDIO1                           GPIO_AF12_SDMMC1

+#define GPIO_AF9_SDIO2                            GPIO_AF9_SDMMC2

+#define GPIO_AF10_SDIO2                           GPIO_AF10_SDMMC2

+#define GPIO_AF11_SDIO2                           GPIO_AF11_SDMMC2

+#endif

+

+#define GPIO_AF0_LPTIM                            GPIO_AF0_LPTIM1

+#define GPIO_AF1_LPTIM                            GPIO_AF1_LPTIM1

+#define GPIO_AF2_LPTIM                            GPIO_AF2_LPTIM1

+

+#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32H7)

+#define  GPIO_SPEED_LOW                           GPIO_SPEED_FREQ_LOW

+#define  GPIO_SPEED_MEDIUM                        GPIO_SPEED_FREQ_MEDIUM

+#define  GPIO_SPEED_FAST                          GPIO_SPEED_FREQ_HIGH

+#define  GPIO_SPEED_HIGH                          GPIO_SPEED_FREQ_VERY_HIGH

+#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32H7*/

+

+#if defined(STM32L1)

+ #define  GPIO_SPEED_VERY_LOW    GPIO_SPEED_FREQ_LOW

+ #define  GPIO_SPEED_LOW         GPIO_SPEED_FREQ_MEDIUM

+ #define  GPIO_SPEED_MEDIUM      GPIO_SPEED_FREQ_HIGH

+ #define  GPIO_SPEED_HIGH        GPIO_SPEED_FREQ_VERY_HIGH

+#endif /* STM32L1 */

+

+#if defined(STM32F0) || defined(STM32F3) || defined(STM32F1)

+ #define  GPIO_SPEED_LOW    GPIO_SPEED_FREQ_LOW

+ #define  GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM

+ #define  GPIO_SPEED_HIGH   GPIO_SPEED_FREQ_HIGH

+#endif /* STM32F0 || STM32F3 || STM32F1 */

+

+#define GPIO_AF6_DFSDM                            GPIO_AF6_DFSDM1

+/**

+  * @}

+  */

+

+/** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define HRTIM_TIMDELAYEDPROTECTION_DISABLED           HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED

+#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_EEV6

+#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_EEV6

+#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV6

+#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV68     HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV6

+#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_DEEV7

+#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7

+#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7

+#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79     HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7

+

+#define __HAL_HRTIM_SetCounter        __HAL_HRTIM_SETCOUNTER

+#define __HAL_HRTIM_GetCounter        __HAL_HRTIM_GETCOUNTER

+#define __HAL_HRTIM_SetPeriod         __HAL_HRTIM_SETPERIOD

+#define __HAL_HRTIM_GetPeriod         __HAL_HRTIM_GETPERIOD

+#define __HAL_HRTIM_SetClockPrescaler __HAL_HRTIM_SETCLOCKPRESCALER

+#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER

+#define __HAL_HRTIM_SetCompare        __HAL_HRTIM_SETCOMPARE

+#define __HAL_HRTIM_GetCompare        __HAL_HRTIM_GETCOMPARE

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_I2C_Aliased_Defines HAL I2C Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define I2C_DUALADDRESS_DISABLED                I2C_DUALADDRESS_DISABLE

+#define I2C_DUALADDRESS_ENABLED                 I2C_DUALADDRESS_ENABLE

+#define I2C_GENERALCALL_DISABLED                I2C_GENERALCALL_DISABLE

+#define I2C_GENERALCALL_ENABLED                 I2C_GENERALCALL_ENABLE

+#define I2C_NOSTRETCH_DISABLED                  I2C_NOSTRETCH_DISABLE

+#define I2C_NOSTRETCH_ENABLED                   I2C_NOSTRETCH_ENABLE

+#define I2C_ANALOGFILTER_ENABLED                I2C_ANALOGFILTER_ENABLE

+#define I2C_ANALOGFILTER_DISABLED               I2C_ANALOGFILTER_DISABLE

+#if defined(STM32F0) || defined(STM32F1) || defined(STM32F3) || defined(STM32G0) || defined(STM32L4) || defined(STM32L1) || defined(STM32F7)

+#define HAL_I2C_STATE_MEM_BUSY_TX               HAL_I2C_STATE_BUSY_TX

+#define HAL_I2C_STATE_MEM_BUSY_RX               HAL_I2C_STATE_BUSY_RX

+#define HAL_I2C_STATE_MASTER_BUSY_TX            HAL_I2C_STATE_BUSY_TX

+#define HAL_I2C_STATE_MASTER_BUSY_RX            HAL_I2C_STATE_BUSY_RX

+#define HAL_I2C_STATE_SLAVE_BUSY_TX             HAL_I2C_STATE_BUSY_TX

+#define HAL_I2C_STATE_SLAVE_BUSY_RX             HAL_I2C_STATE_BUSY_RX

+#endif

+/**

+  * @}

+  */

+

+/** @defgroup HAL_IRDA_Aliased_Defines HAL IRDA Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define IRDA_ONE_BIT_SAMPLE_DISABLED            IRDA_ONE_BIT_SAMPLE_DISABLE

+#define IRDA_ONE_BIT_SAMPLE_ENABLED             IRDA_ONE_BIT_SAMPLE_ENABLE

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_IWDG_Aliased_Defines HAL IWDG Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define KR_KEY_RELOAD                   IWDG_KEY_RELOAD

+#define KR_KEY_ENABLE                   IWDG_KEY_ENABLE

+#define KR_KEY_EWA                      IWDG_KEY_WRITE_ACCESS_ENABLE

+#define KR_KEY_DWA                      IWDG_KEY_WRITE_ACCESS_DISABLE

+/**

+  * @}

+  */

+

+/** @defgroup HAL_LPTIM_Aliased_Defines HAL LPTIM Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+#define LPTIM_CLOCKSAMPLETIME_DIRECTTRANSISTION LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION

+#define LPTIM_CLOCKSAMPLETIME_2TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_2TRANSITIONS

+#define LPTIM_CLOCKSAMPLETIME_4TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_4TRANSITIONS

+#define LPTIM_CLOCKSAMPLETIME_8TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_8TRANSITIONS

+

+#define LPTIM_CLOCKPOLARITY_RISINGEDGE          LPTIM_CLOCKPOLARITY_RISING

+#define LPTIM_CLOCKPOLARITY_FALLINGEDGE         LPTIM_CLOCKPOLARITY_FALLING

+#define LPTIM_CLOCKPOLARITY_BOTHEDGES           LPTIM_CLOCKPOLARITY_RISING_FALLING

+

+#define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION  LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION

+#define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS      LPTIM_TRIGSAMPLETIME_2TRANSITIONS

+#define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS      LPTIM_TRIGSAMPLETIME_4TRANSITIONS

+#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS      LPTIM_TRIGSAMPLETIME_8TRANSITIONS

+

+/* The following 3 definition have also been present in a temporary version of lptim.h */

+/* They need to be renamed also to the right name, just in case */

+#define LPTIM_TRIGSAMPLETIME_2TRANSITION        LPTIM_TRIGSAMPLETIME_2TRANSITIONS

+#define LPTIM_TRIGSAMPLETIME_4TRANSITION        LPTIM_TRIGSAMPLETIME_4TRANSITIONS

+#define LPTIM_TRIGSAMPLETIME_8TRANSITION        LPTIM_TRIGSAMPLETIME_8TRANSITIONS

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_NAND_Aliased_Defines HAL NAND Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define HAL_NAND_Read_Page              HAL_NAND_Read_Page_8b

+#define HAL_NAND_Write_Page             HAL_NAND_Write_Page_8b

+#define HAL_NAND_Read_SpareArea         HAL_NAND_Read_SpareArea_8b

+#define HAL_NAND_Write_SpareArea        HAL_NAND_Write_SpareArea_8b

+

+#define NAND_AddressTypedef             NAND_AddressTypeDef

+

+#define __ARRAY_ADDRESS                 ARRAY_ADDRESS

+#define __ADDR_1st_CYCLE                ADDR_1ST_CYCLE

+#define __ADDR_2nd_CYCLE                ADDR_2ND_CYCLE

+#define __ADDR_3rd_CYCLE                ADDR_3RD_CYCLE

+#define __ADDR_4th_CYCLE                ADDR_4TH_CYCLE

+/**

+  * @}

+  */

+

+/** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define NOR_StatusTypedef              HAL_NOR_StatusTypeDef

+#define NOR_SUCCESS                    HAL_NOR_STATUS_SUCCESS

+#define NOR_ONGOING                    HAL_NOR_STATUS_ONGOING

+#define NOR_ERROR                      HAL_NOR_STATUS_ERROR

+#define NOR_TIMEOUT                    HAL_NOR_STATUS_TIMEOUT

+

+#define __NOR_WRITE                    NOR_WRITE

+#define __NOR_ADDR_SHIFT               NOR_ADDR_SHIFT

+/**

+  * @}

+  */

+

+/** @defgroup HAL_OPAMP_Aliased_Defines HAL OPAMP Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+#define OPAMP_NONINVERTINGINPUT_VP0           OPAMP_NONINVERTINGINPUT_IO0

+#define OPAMP_NONINVERTINGINPUT_VP1           OPAMP_NONINVERTINGINPUT_IO1

+#define OPAMP_NONINVERTINGINPUT_VP2           OPAMP_NONINVERTINGINPUT_IO2

+#define OPAMP_NONINVERTINGINPUT_VP3           OPAMP_NONINVERTINGINPUT_IO3

+

+#define OPAMP_SEC_NONINVERTINGINPUT_VP0       OPAMP_SEC_NONINVERTINGINPUT_IO0

+#define OPAMP_SEC_NONINVERTINGINPUT_VP1       OPAMP_SEC_NONINVERTINGINPUT_IO1

+#define OPAMP_SEC_NONINVERTINGINPUT_VP2       OPAMP_SEC_NONINVERTINGINPUT_IO2

+#define OPAMP_SEC_NONINVERTINGINPUT_VP3       OPAMP_SEC_NONINVERTINGINPUT_IO3

+

+#define OPAMP_INVERTINGINPUT_VM0              OPAMP_INVERTINGINPUT_IO0

+#define OPAMP_INVERTINGINPUT_VM1              OPAMP_INVERTINGINPUT_IO1

+

+#define IOPAMP_INVERTINGINPUT_VM0             OPAMP_INVERTINGINPUT_IO0

+#define IOPAMP_INVERTINGINPUT_VM1             OPAMP_INVERTINGINPUT_IO1

+

+#define OPAMP_SEC_INVERTINGINPUT_VM0          OPAMP_SEC_INVERTINGINPUT_IO0

+#define OPAMP_SEC_INVERTINGINPUT_VM1          OPAMP_SEC_INVERTINGINPUT_IO1

+

+#define OPAMP_INVERTINGINPUT_VINM             OPAMP_SEC_INVERTINGINPUT_IO1

+

+#define OPAMP_PGACONNECT_NO                   OPAMP_PGA_CONNECT_INVERTINGINPUT_NO

+#define OPAMP_PGACONNECT_VM0                  OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0

+#define OPAMP_PGACONNECT_VM1                  OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1

+

+#if defined(STM32L1) || defined(STM32L4)

+#define HAL_OPAMP_MSP_INIT_CB_ID       HAL_OPAMP_MSPINIT_CB_ID

+#define HAL_OPAMP_MSP_DEINIT_CB_ID     HAL_OPAMP_MSPDEINIT_CB_ID

+#endif

+

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_I2S_Aliased_Defines HAL I2S Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define I2S_STANDARD_PHILLIPS      I2S_STANDARD_PHILIPS

+

+#if defined(STM32H7)

+  #define I2S_IT_TXE               I2S_IT_TXP

+  #define I2S_IT_RXNE              I2S_IT_RXP

+

+  #define I2S_FLAG_TXE             I2S_FLAG_TXP

+  #define I2S_FLAG_RXNE            I2S_FLAG_RXP

+#endif

+

+#if defined(STM32F7)

+  #define I2S_CLOCK_SYSCLK           I2S_CLOCK_PLL

+#endif

+/**

+  * @}

+  */

+

+/** @defgroup HAL_PCCARD_Aliased_Defines HAL PCCARD Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+/* Compact Flash-ATA registers description */

+#define CF_DATA                       ATA_DATA

+#define CF_SECTOR_COUNT               ATA_SECTOR_COUNT

+#define CF_SECTOR_NUMBER              ATA_SECTOR_NUMBER

+#define CF_CYLINDER_LOW               ATA_CYLINDER_LOW

+#define CF_CYLINDER_HIGH              ATA_CYLINDER_HIGH

+#define CF_CARD_HEAD                  ATA_CARD_HEAD

+#define CF_STATUS_CMD                 ATA_STATUS_CMD

+#define CF_STATUS_CMD_ALTERNATE       ATA_STATUS_CMD_ALTERNATE

+#define CF_COMMON_DATA_AREA           ATA_COMMON_DATA_AREA

+

+/* Compact Flash-ATA commands */

+#define CF_READ_SECTOR_CMD            ATA_READ_SECTOR_CMD

+#define CF_WRITE_SECTOR_CMD           ATA_WRITE_SECTOR_CMD

+#define CF_ERASE_SECTOR_CMD           ATA_ERASE_SECTOR_CMD

+#define CF_IDENTIFY_CMD               ATA_IDENTIFY_CMD

+

+#define PCCARD_StatusTypedef          HAL_PCCARD_StatusTypeDef

+#define PCCARD_SUCCESS                HAL_PCCARD_STATUS_SUCCESS

+#define PCCARD_ONGOING                HAL_PCCARD_STATUS_ONGOING

+#define PCCARD_ERROR                  HAL_PCCARD_STATUS_ERROR

+#define PCCARD_TIMEOUT                HAL_PCCARD_STATUS_TIMEOUT

+/**

+  * @}

+  */

+

+/** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+#define FORMAT_BIN                  RTC_FORMAT_BIN

+#define FORMAT_BCD                  RTC_FORMAT_BCD

+

+#define RTC_ALARMSUBSECONDMASK_None     RTC_ALARMSUBSECONDMASK_NONE

+#define RTC_TAMPERERASEBACKUP_DISABLED  RTC_TAMPER_ERASE_BACKUP_DISABLE

+#define RTC_TAMPERMASK_FLAG_DISABLED    RTC_TAMPERMASK_FLAG_DISABLE

+#define RTC_TAMPERMASK_FLAG_ENABLED     RTC_TAMPERMASK_FLAG_ENABLE

+

+#define RTC_MASKTAMPERFLAG_DISABLED     RTC_TAMPERMASK_FLAG_DISABLE

+#define RTC_MASKTAMPERFLAG_ENABLED      RTC_TAMPERMASK_FLAG_ENABLE

+#define RTC_TAMPERERASEBACKUP_ENABLED   RTC_TAMPER_ERASE_BACKUP_ENABLE

+#define RTC_TAMPER1_2_INTERRUPT         RTC_ALL_TAMPER_INTERRUPT

+#define RTC_TAMPER1_2_3_INTERRUPT       RTC_ALL_TAMPER_INTERRUPT

+

+#define RTC_TIMESTAMPPIN_PC13  RTC_TIMESTAMPPIN_DEFAULT

+#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1

+#define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1

+#define RTC_TIMESTAMPPIN_PC1   RTC_TIMESTAMPPIN_POS2

+

+#define RTC_OUTPUT_REMAP_PC13  RTC_OUTPUT_REMAP_NONE

+#define RTC_OUTPUT_REMAP_PB14  RTC_OUTPUT_REMAP_POS1

+#define RTC_OUTPUT_REMAP_PB2   RTC_OUTPUT_REMAP_POS1

+

+#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT

+#define RTC_TAMPERPIN_PA0  RTC_TAMPERPIN_POS1

+#define RTC_TAMPERPIN_PI8  RTC_TAMPERPIN_POS1

+

+/**

+  * @}

+  */

+

+

+/** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define SMARTCARD_NACK_ENABLED                  SMARTCARD_NACK_ENABLE

+#define SMARTCARD_NACK_DISABLED                 SMARTCARD_NACK_DISABLE

+

+#define SMARTCARD_ONEBIT_SAMPLING_DISABLED      SMARTCARD_ONE_BIT_SAMPLE_DISABLE

+#define SMARTCARD_ONEBIT_SAMPLING_ENABLED       SMARTCARD_ONE_BIT_SAMPLE_ENABLE

+#define SMARTCARD_ONEBIT_SAMPLING_DISABLE       SMARTCARD_ONE_BIT_SAMPLE_DISABLE

+#define SMARTCARD_ONEBIT_SAMPLING_ENABLE        SMARTCARD_ONE_BIT_SAMPLE_ENABLE

+

+#define SMARTCARD_TIMEOUT_DISABLED              SMARTCARD_TIMEOUT_DISABLE

+#define SMARTCARD_TIMEOUT_ENABLED               SMARTCARD_TIMEOUT_ENABLE

+

+#define SMARTCARD_LASTBIT_DISABLED              SMARTCARD_LASTBIT_DISABLE

+#define SMARTCARD_LASTBIT_ENABLED               SMARTCARD_LASTBIT_ENABLE

+/**

+  * @}

+  */

+

+

+/** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define SMBUS_DUALADDRESS_DISABLED      SMBUS_DUALADDRESS_DISABLE

+#define SMBUS_DUALADDRESS_ENABLED       SMBUS_DUALADDRESS_ENABLE

+#define SMBUS_GENERALCALL_DISABLED      SMBUS_GENERALCALL_DISABLE

+#define SMBUS_GENERALCALL_ENABLED       SMBUS_GENERALCALL_ENABLE

+#define SMBUS_NOSTRETCH_DISABLED        SMBUS_NOSTRETCH_DISABLE

+#define SMBUS_NOSTRETCH_ENABLED         SMBUS_NOSTRETCH_ENABLE

+#define SMBUS_ANALOGFILTER_ENABLED      SMBUS_ANALOGFILTER_ENABLE

+#define SMBUS_ANALOGFILTER_DISABLED     SMBUS_ANALOGFILTER_DISABLE

+#define SMBUS_PEC_DISABLED              SMBUS_PEC_DISABLE

+#define SMBUS_PEC_ENABLED               SMBUS_PEC_ENABLE

+#define HAL_SMBUS_STATE_SLAVE_LISTEN    HAL_SMBUS_STATE_LISTEN

+/**

+  * @}

+  */

+

+/** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define SPI_TIMODE_DISABLED             SPI_TIMODE_DISABLE

+#define SPI_TIMODE_ENABLED              SPI_TIMODE_ENABLE

+

+#define SPI_CRCCALCULATION_DISABLED     SPI_CRCCALCULATION_DISABLE

+#define SPI_CRCCALCULATION_ENABLED      SPI_CRCCALCULATION_ENABLE

+

+#define SPI_NSS_PULSE_DISABLED          SPI_NSS_PULSE_DISABLE

+#define SPI_NSS_PULSE_ENABLED           SPI_NSS_PULSE_ENABLE

+

+#if defined(STM32H7)

+

+ #define SPI_FLAG_TXE                    SPI_FLAG_TXP

+ #define SPI_FLAG_RXNE                   SPI_FLAG_RXP

+

+ #define SPI_IT_TXE                      SPI_IT_TXP

+ #define SPI_IT_RXNE                     SPI_IT_RXP

+

+ #define SPI_FRLVL_EMPTY                 SPI_RX_FIFO_0PACKET

+ #define SPI_FRLVL_QUARTER_FULL          SPI_RX_FIFO_1PACKET

+ #define SPI_FRLVL_HALF_FULL             SPI_RX_FIFO_2PACKET

+ #define SPI_FRLVL_FULL                  SPI_RX_FIFO_3PACKET

+

+#endif /* STM32H7 */

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define CCER_CCxE_MASK                   TIM_CCER_CCxE_MASK

+#define CCER_CCxNE_MASK                  TIM_CCER_CCxNE_MASK

+

+#define TIM_DMABase_CR1                  TIM_DMABASE_CR1

+#define TIM_DMABase_CR2                  TIM_DMABASE_CR2

+#define TIM_DMABase_SMCR                 TIM_DMABASE_SMCR

+#define TIM_DMABase_DIER                 TIM_DMABASE_DIER

+#define TIM_DMABase_SR                   TIM_DMABASE_SR

+#define TIM_DMABase_EGR                  TIM_DMABASE_EGR

+#define TIM_DMABase_CCMR1                TIM_DMABASE_CCMR1

+#define TIM_DMABase_CCMR2                TIM_DMABASE_CCMR2

+#define TIM_DMABase_CCER                 TIM_DMABASE_CCER

+#define TIM_DMABase_CNT                  TIM_DMABASE_CNT

+#define TIM_DMABase_PSC                  TIM_DMABASE_PSC

+#define TIM_DMABase_ARR                  TIM_DMABASE_ARR

+#define TIM_DMABase_RCR                  TIM_DMABASE_RCR

+#define TIM_DMABase_CCR1                 TIM_DMABASE_CCR1

+#define TIM_DMABase_CCR2                 TIM_DMABASE_CCR2

+#define TIM_DMABase_CCR3                 TIM_DMABASE_CCR3

+#define TIM_DMABase_CCR4                 TIM_DMABASE_CCR4

+#define TIM_DMABase_BDTR                 TIM_DMABASE_BDTR

+#define TIM_DMABase_DCR                  TIM_DMABASE_DCR

+#define TIM_DMABase_DMAR                 TIM_DMABASE_DMAR

+#define TIM_DMABase_OR1                  TIM_DMABASE_OR1

+#define TIM_DMABase_CCMR3                TIM_DMABASE_CCMR3

+#define TIM_DMABase_CCR5                 TIM_DMABASE_CCR5

+#define TIM_DMABase_CCR6                 TIM_DMABASE_CCR6

+#define TIM_DMABase_OR2                  TIM_DMABASE_OR2

+#define TIM_DMABase_OR3                  TIM_DMABASE_OR3

+#define TIM_DMABase_OR                   TIM_DMABASE_OR

+

+#define TIM_EventSource_Update           TIM_EVENTSOURCE_UPDATE

+#define TIM_EventSource_CC1              TIM_EVENTSOURCE_CC1

+#define TIM_EventSource_CC2              TIM_EVENTSOURCE_CC2

+#define TIM_EventSource_CC3              TIM_EVENTSOURCE_CC3

+#define TIM_EventSource_CC4              TIM_EVENTSOURCE_CC4

+#define TIM_EventSource_COM              TIM_EVENTSOURCE_COM

+#define TIM_EventSource_Trigger          TIM_EVENTSOURCE_TRIGGER

+#define TIM_EventSource_Break            TIM_EVENTSOURCE_BREAK

+#define TIM_EventSource_Break2           TIM_EVENTSOURCE_BREAK2

+

+#define TIM_DMABurstLength_1Transfer     TIM_DMABURSTLENGTH_1TRANSFER

+#define TIM_DMABurstLength_2Transfers    TIM_DMABURSTLENGTH_2TRANSFERS

+#define TIM_DMABurstLength_3Transfers    TIM_DMABURSTLENGTH_3TRANSFERS

+#define TIM_DMABurstLength_4Transfers    TIM_DMABURSTLENGTH_4TRANSFERS

+#define TIM_DMABurstLength_5Transfers    TIM_DMABURSTLENGTH_5TRANSFERS

+#define TIM_DMABurstLength_6Transfers    TIM_DMABURSTLENGTH_6TRANSFERS

+#define TIM_DMABurstLength_7Transfers    TIM_DMABURSTLENGTH_7TRANSFERS

+#define TIM_DMABurstLength_8Transfers    TIM_DMABURSTLENGTH_8TRANSFERS

+#define TIM_DMABurstLength_9Transfers    TIM_DMABURSTLENGTH_9TRANSFERS

+#define TIM_DMABurstLength_10Transfers   TIM_DMABURSTLENGTH_10TRANSFERS

+#define TIM_DMABurstLength_11Transfers   TIM_DMABURSTLENGTH_11TRANSFERS

+#define TIM_DMABurstLength_12Transfers   TIM_DMABURSTLENGTH_12TRANSFERS

+#define TIM_DMABurstLength_13Transfers   TIM_DMABURSTLENGTH_13TRANSFERS

+#define TIM_DMABurstLength_14Transfers   TIM_DMABURSTLENGTH_14TRANSFERS

+#define TIM_DMABurstLength_15Transfers   TIM_DMABURSTLENGTH_15TRANSFERS

+#define TIM_DMABurstLength_16Transfers   TIM_DMABURSTLENGTH_16TRANSFERS

+#define TIM_DMABurstLength_17Transfers   TIM_DMABURSTLENGTH_17TRANSFERS

+#define TIM_DMABurstLength_18Transfers   TIM_DMABURSTLENGTH_18TRANSFERS

+

+#if defined(STM32L0)

+#define TIM22_TI1_GPIO1   TIM22_TI1_GPIO

+#define TIM22_TI1_GPIO2   TIM22_TI1_GPIO

+#endif

+

+#if defined(STM32F3)

+#define IS_TIM_HALL_INTERFACE_INSTANCE   IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE

+#endif

+

+#if defined(STM32H7)

+#define TIM_TIM1_ETR_COMP1_OUT        TIM_TIM1_ETR_COMP1

+#define TIM_TIM1_ETR_COMP2_OUT        TIM_TIM1_ETR_COMP2

+#define TIM_TIM8_ETR_COMP1_OUT        TIM_TIM8_ETR_COMP1

+#define TIM_TIM8_ETR_COMP2_OUT        TIM_TIM8_ETR_COMP2

+#define TIM_TIM2_ETR_COMP1_OUT        TIM_TIM2_ETR_COMP1

+#define TIM_TIM2_ETR_COMP2_OUT        TIM_TIM2_ETR_COMP2

+#define TIM_TIM3_ETR_COMP1_OUT        TIM_TIM3_ETR_COMP1

+#define TIM_TIM1_TI1_COMP1_OUT        TIM_TIM1_TI1_COMP1

+#define TIM_TIM8_TI1_COMP2_OUT        TIM_TIM8_TI1_COMP2

+#define TIM_TIM2_TI4_COMP1_OUT        TIM_TIM2_TI4_COMP1

+#define TIM_TIM2_TI4_COMP2_OUT        TIM_TIM2_TI4_COMP2

+#define TIM_TIM2_TI4_COMP1COMP2_OUT   TIM_TIM2_TI4_COMP1_COMP2

+#define TIM_TIM3_TI1_COMP1_OUT        TIM_TIM3_TI1_COMP1

+#define TIM_TIM3_TI1_COMP2_OUT        TIM_TIM3_TI1_COMP2

+#define TIM_TIM3_TI1_COMP1COMP2_OUT   TIM_TIM3_TI1_COMP1_COMP2

+#endif

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_TSC_Aliased_Defines HAL TSC Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define TSC_SYNC_POL_FALL        TSC_SYNC_POLARITY_FALLING

+#define TSC_SYNC_POL_RISE_HIGH   TSC_SYNC_POLARITY_RISING

+/**

+  * @}

+  */

+

+/** @defgroup HAL_UART_Aliased_Defines HAL UART Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define UART_ONEBIT_SAMPLING_DISABLED   UART_ONE_BIT_SAMPLE_DISABLE

+#define UART_ONEBIT_SAMPLING_ENABLED    UART_ONE_BIT_SAMPLE_ENABLE

+#define UART_ONE_BIT_SAMPLE_DISABLED    UART_ONE_BIT_SAMPLE_DISABLE

+#define UART_ONE_BIT_SAMPLE_ENABLED     UART_ONE_BIT_SAMPLE_ENABLE

+

+#define __HAL_UART_ONEBIT_ENABLE        __HAL_UART_ONE_BIT_SAMPLE_ENABLE

+#define __HAL_UART_ONEBIT_DISABLE       __HAL_UART_ONE_BIT_SAMPLE_DISABLE

+

+#define __DIV_SAMPLING16                UART_DIV_SAMPLING16

+#define __DIVMANT_SAMPLING16            UART_DIVMANT_SAMPLING16

+#define __DIVFRAQ_SAMPLING16            UART_DIVFRAQ_SAMPLING16

+#define __UART_BRR_SAMPLING16           UART_BRR_SAMPLING16

+

+#define __DIV_SAMPLING8                 UART_DIV_SAMPLING8

+#define __DIVMANT_SAMPLING8             UART_DIVMANT_SAMPLING8

+#define __DIVFRAQ_SAMPLING8             UART_DIVFRAQ_SAMPLING8

+#define __UART_BRR_SAMPLING8            UART_BRR_SAMPLING8

+

+#define __DIV_LPUART                    UART_DIV_LPUART

+

+#define UART_WAKEUPMETHODE_IDLELINE     UART_WAKEUPMETHOD_IDLELINE

+#define UART_WAKEUPMETHODE_ADDRESSMARK  UART_WAKEUPMETHOD_ADDRESSMARK

+

+/**

+  * @}

+  */

+

+

+/** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+#define USART_CLOCK_DISABLED            USART_CLOCK_DISABLE

+#define USART_CLOCK_ENABLED             USART_CLOCK_ENABLE

+

+#define USARTNACK_ENABLED               USART_NACK_ENABLE

+#define USARTNACK_DISABLED              USART_NACK_DISABLE

+/**

+  * @}

+  */

+

+/** @defgroup HAL_WWDG_Aliased_Defines HAL WWDG Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define CFR_BASE                    WWDG_CFR_BASE

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_CAN_Aliased_Defines HAL CAN Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define CAN_FilterFIFO0             CAN_FILTER_FIFO0

+#define CAN_FilterFIFO1             CAN_FILTER_FIFO1

+#define CAN_IT_RQCP0                CAN_IT_TME

+#define CAN_IT_RQCP1                CAN_IT_TME

+#define CAN_IT_RQCP2                CAN_IT_TME

+#define INAK_TIMEOUT                CAN_TIMEOUT_VALUE

+#define SLAK_TIMEOUT                CAN_TIMEOUT_VALUE

+#define CAN_TXSTATUS_FAILED         ((uint8_t)0x00U)

+#define CAN_TXSTATUS_OK             ((uint8_t)0x01U)

+#define CAN_TXSTATUS_PENDING        ((uint8_t)0x02U)

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+#define VLAN_TAG                ETH_VLAN_TAG

+#define MIN_ETH_PAYLOAD         ETH_MIN_ETH_PAYLOAD

+#define MAX_ETH_PAYLOAD         ETH_MAX_ETH_PAYLOAD

+#define JUMBO_FRAME_PAYLOAD     ETH_JUMBO_FRAME_PAYLOAD

+#define MACMIIAR_CR_MASK        ETH_MACMIIAR_CR_MASK

+#define MACCR_CLEAR_MASK        ETH_MACCR_CLEAR_MASK

+#define MACFCR_CLEAR_MASK       ETH_MACFCR_CLEAR_MASK

+#define DMAOMR_CLEAR_MASK       ETH_DMAOMR_CLEAR_MASK

+

+#define ETH_MMCCR              0x00000100U

+#define ETH_MMCRIR             0x00000104U

+#define ETH_MMCTIR             0x00000108U

+#define ETH_MMCRIMR            0x0000010CU

+#define ETH_MMCTIMR            0x00000110U

+#define ETH_MMCTGFSCCR         0x0000014CU

+#define ETH_MMCTGFMSCCR        0x00000150U

+#define ETH_MMCTGFCR           0x00000168U

+#define ETH_MMCRFCECR          0x00000194U

+#define ETH_MMCRFAECR          0x00000198U

+#define ETH_MMCRGUFCR          0x000001C4U

+

+#define ETH_MAC_TXFIFO_FULL                             0x02000000U  /* Tx FIFO full */

+#define ETH_MAC_TXFIFONOT_EMPTY                         0x01000000U  /* Tx FIFO not empty */

+#define ETH_MAC_TXFIFO_WRITE_ACTIVE                     0x00400000U  /* Tx FIFO write active */

+#define ETH_MAC_TXFIFO_IDLE                             0x00000000U  /* Tx FIFO read status: Idle */

+#define ETH_MAC_TXFIFO_READ                             0x00100000U  /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */

+#define ETH_MAC_TXFIFO_WAITING                          0x00200000U  /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */

+#define ETH_MAC_TXFIFO_WRITING                          0x00300000U  /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */

+#define ETH_MAC_TRANSMISSION_PAUSE                      0x00080000U  /* MAC transmitter in pause */

+#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE            0x00000000U  /* MAC transmit frame controller: Idle */

+#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING         0x00020000U  /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */

+#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF   0x00040000U  /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */

+#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING    0x00060000U  /* MAC transmit frame controller: Transferring input frame for transmission */

+#define ETH_MAC_MII_TRANSMIT_ACTIVE           0x00010000U  /* MAC MII transmit engine active */

+#define ETH_MAC_RXFIFO_EMPTY                  0x00000000U  /* Rx FIFO fill level: empty */

+#define ETH_MAC_RXFIFO_BELOW_THRESHOLD        0x00000100U  /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */

+#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD        0x00000200U  /* Rx FIFO fill level: fill-level above flow-control activate threshold */

+#define ETH_MAC_RXFIFO_FULL                   0x00000300U  /* Rx FIFO fill level: full */

+#if defined(STM32F1)

+#else

+#define ETH_MAC_READCONTROLLER_IDLE           0x00000000U  /* Rx FIFO read controller IDLE state */

+#define ETH_MAC_READCONTROLLER_READING_DATA   0x00000020U  /* Rx FIFO read controller Reading frame data */

+#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U  /* Rx FIFO read controller Reading frame status (or time-stamp) */

+#endif

+#define ETH_MAC_READCONTROLLER_FLUSHING       0x00000060U  /* Rx FIFO read controller Flushing the frame data and status */

+#define ETH_MAC_RXFIFO_WRITE_ACTIVE           0x00000010U  /* Rx FIFO write controller active */

+#define ETH_MAC_SMALL_FIFO_NOTACTIVE          0x00000000U  /* MAC small FIFO read / write controllers not active */

+#define ETH_MAC_SMALL_FIFO_READ_ACTIVE        0x00000002U  /* MAC small FIFO read controller active */

+#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE       0x00000004U  /* MAC small FIFO write controller active */

+#define ETH_MAC_SMALL_FIFO_RW_ACTIVE          0x00000006U  /* MAC small FIFO read / write controllers active */

+#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE   0x00000001U  /* MAC MII receive protocol engine active */

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define HAL_DCMI_ERROR_OVF      HAL_DCMI_ERROR_OVR

+#define DCMI_IT_OVF             DCMI_IT_OVR

+#define DCMI_FLAG_OVFRI         DCMI_FLAG_OVRRI

+#define DCMI_FLAG_OVFMI         DCMI_FLAG_OVRMI

+

+#define HAL_DCMI_ConfigCROP     HAL_DCMI_ConfigCrop

+#define HAL_DCMI_EnableCROP     HAL_DCMI_EnableCrop

+#define HAL_DCMI_DisableCROP    HAL_DCMI_DisableCrop

+

+/**

+  * @}

+  */

+

+#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \

+  || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \

+  || defined(STM32H7)

+/** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose

+  * @{

+  */

+#define DMA2D_ARGB8888          DMA2D_OUTPUT_ARGB8888

+#define DMA2D_RGB888            DMA2D_OUTPUT_RGB888

+#define DMA2D_RGB565            DMA2D_OUTPUT_RGB565

+#define DMA2D_ARGB1555          DMA2D_OUTPUT_ARGB1555

+#define DMA2D_ARGB4444          DMA2D_OUTPUT_ARGB4444

+

+#define CM_ARGB8888             DMA2D_INPUT_ARGB8888

+#define CM_RGB888               DMA2D_INPUT_RGB888

+#define CM_RGB565               DMA2D_INPUT_RGB565

+#define CM_ARGB1555             DMA2D_INPUT_ARGB1555

+#define CM_ARGB4444             DMA2D_INPUT_ARGB4444

+#define CM_L8                   DMA2D_INPUT_L8

+#define CM_AL44                 DMA2D_INPUT_AL44

+#define CM_AL88                 DMA2D_INPUT_AL88

+#define CM_L4                   DMA2D_INPUT_L4

+#define CM_A8                   DMA2D_INPUT_A8

+#define CM_A4                   DMA2D_INPUT_A4

+/**

+  * @}

+  */

+#endif  /* STM32L4 ||  STM32F7 ||  STM32F4 ||  STM32H7 */

+

+/** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose

+  * @{

+  */

+

+/**

+  * @}

+  */

+

+/* Exported functions --------------------------------------------------------*/

+

+/** @defgroup HAL_CRYP_Aliased_Functions HAL CRYP Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#define HAL_CRYP_ComputationCpltCallback     HAL_CRYPEx_ComputationCpltCallback

+/**

+  * @}

+  */

+

+/** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#define HAL_HASH_STATETypeDef        HAL_HASH_StateTypeDef

+#define HAL_HASHPhaseTypeDef         HAL_HASH_PhaseTypeDef

+#define HAL_HMAC_MD5_Finish          HAL_HASH_MD5_Finish

+#define HAL_HMAC_SHA1_Finish         HAL_HASH_SHA1_Finish

+#define HAL_HMAC_SHA224_Finish       HAL_HASH_SHA224_Finish

+#define HAL_HMAC_SHA256_Finish       HAL_HASH_SHA256_Finish

+

+/*HASH Algorithm Selection*/

+

+#define HASH_AlgoSelection_SHA1      HASH_ALGOSELECTION_SHA1

+#define HASH_AlgoSelection_SHA224    HASH_ALGOSELECTION_SHA224

+#define HASH_AlgoSelection_SHA256    HASH_ALGOSELECTION_SHA256

+#define HASH_AlgoSelection_MD5       HASH_ALGOSELECTION_MD5

+

+#define HASH_AlgoMode_HASH         HASH_ALGOMODE_HASH

+#define HASH_AlgoMode_HMAC         HASH_ALGOMODE_HMAC

+

+#define HASH_HMACKeyType_ShortKey  HASH_HMAC_KEYTYPE_SHORTKEY

+#define HASH_HMACKeyType_LongKey   HASH_HMAC_KEYTYPE_LONGKEY

+/**

+  * @}

+  */

+

+/** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#define HAL_EnableDBGSleepMode HAL_DBGMCU_EnableDBGSleepMode

+#define HAL_DisableDBGSleepMode HAL_DBGMCU_DisableDBGSleepMode

+#define HAL_EnableDBGStopMode HAL_DBGMCU_EnableDBGStopMode

+#define HAL_DisableDBGStopMode HAL_DBGMCU_DisableDBGStopMode

+#define HAL_EnableDBGStandbyMode HAL_DBGMCU_EnableDBGStandbyMode

+#define HAL_DisableDBGStandbyMode HAL_DBGMCU_DisableDBGStandbyMode

+#define HAL_DBG_LowPowerConfig(Periph, cmd) (((cmd)==ENABLE)? HAL_DBGMCU_DBG_EnableLowPowerConfig(Periph) : HAL_DBGMCU_DBG_DisableLowPowerConfig(Periph))

+#define HAL_VREFINT_OutputSelect  HAL_SYSCFG_VREFINT_OutputSelect

+#define HAL_Lock_Cmd(cmd) (((cmd)==ENABLE) ? HAL_SYSCFG_Enable_Lock_VREFINT() : HAL_SYSCFG_Disable_Lock_VREFINT())

+#if defined(STM32L0)

+#else

+#define HAL_VREFINT_Cmd(cmd) (((cmd)==ENABLE)? HAL_SYSCFG_EnableVREFINT() : HAL_SYSCFG_DisableVREFINT())

+#endif

+#define HAL_ADC_EnableBuffer_Cmd(cmd)  (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())

+#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd)==ENABLE) ?  HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())

+/**

+  * @}

+  */

+

+/** @defgroup HAL_FLASH_Aliased_Functions HAL FLASH Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#define FLASH_HalfPageProgram      HAL_FLASHEx_HalfPageProgram

+#define FLASH_EnableRunPowerDown   HAL_FLASHEx_EnableRunPowerDown

+#define FLASH_DisableRunPowerDown  HAL_FLASHEx_DisableRunPowerDown

+#define HAL_DATA_EEPROMEx_Unlock   HAL_FLASHEx_DATAEEPROM_Unlock

+#define HAL_DATA_EEPROMEx_Lock     HAL_FLASHEx_DATAEEPROM_Lock

+#define HAL_DATA_EEPROMEx_Erase    HAL_FLASHEx_DATAEEPROM_Erase

+#define HAL_DATA_EEPROMEx_Program  HAL_FLASHEx_DATAEEPROM_Program

+

+ /**

+  * @}

+  */

+

+/** @defgroup HAL_I2C_Aliased_Functions HAL I2C Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#define HAL_I2CEx_AnalogFilter_Config         HAL_I2CEx_ConfigAnalogFilter

+#define HAL_I2CEx_DigitalFilter_Config        HAL_I2CEx_ConfigDigitalFilter

+#define HAL_FMPI2CEx_AnalogFilter_Config      HAL_FMPI2CEx_ConfigAnalogFilter

+#define HAL_FMPI2CEx_DigitalFilter_Config     HAL_FMPI2CEx_ConfigDigitalFilter

+

+#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd)==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))

+

+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4)

+#define HAL_I2C_Master_Sequential_Transmit_IT  HAL_I2C_Master_Seq_Transmit_IT

+#define HAL_I2C_Master_Sequential_Receive_IT   HAL_I2C_Master_Seq_Receive_IT

+#define HAL_I2C_Slave_Sequential_Transmit_IT   HAL_I2C_Slave_Seq_Transmit_IT

+#define HAL_I2C_Slave_Sequential_Receive_IT    HAL_I2C_Slave_Seq_Receive_IT

+#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA

+#define HAL_I2C_Master_Sequential_Receive_DMA  HAL_I2C_Master_Seq_Receive_DMA

+#define HAL_I2C_Slave_Sequential_Transmit_DMA  HAL_I2C_Slave_Seq_Transmit_DMA

+#define HAL_I2C_Slave_Sequential_Receive_DMA   HAL_I2C_Slave_Seq_Receive_DMA

+#endif /* STM32H7 || STM32WB  || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 */

+

+#if defined(STM32F4)

+#define HAL_FMPI2C_Master_Sequential_Transmit_IT  HAL_FMPI2C_Master_Seq_Transmit_IT

+#define HAL_FMPI2C_Master_Sequential_Receive_IT   HAL_FMPI2C_Master_Seq_Receive_IT

+#define HAL_FMPI2C_Slave_Sequential_Transmit_IT   HAL_FMPI2C_Slave_Seq_Transmit_IT

+#define HAL_FMPI2C_Slave_Sequential_Receive_IT    HAL_FMPI2C_Slave_Seq_Receive_IT

+#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA

+#define HAL_FMPI2C_Master_Sequential_Receive_DMA  HAL_FMPI2C_Master_Seq_Receive_DMA

+#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA  HAL_FMPI2C_Slave_Seq_Transmit_DMA

+#define HAL_FMPI2C_Slave_Sequential_Receive_DMA   HAL_FMPI2C_Slave_Seq_Receive_DMA

+#endif /* STM32F4 */

+ /**

+  * @}

+  */

+

+/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose

+  * @{

+  */

+#define HAL_PWR_PVDConfig                             HAL_PWR_ConfigPVD

+#define HAL_PWR_DisableBkUpReg                        HAL_PWREx_DisableBkUpReg

+#define HAL_PWR_DisableFlashPowerDown                 HAL_PWREx_DisableFlashPowerDown

+#define HAL_PWR_DisableVddio2Monitor                  HAL_PWREx_DisableVddio2Monitor

+#define HAL_PWR_EnableBkUpReg                         HAL_PWREx_EnableBkUpReg

+#define HAL_PWR_EnableFlashPowerDown                  HAL_PWREx_EnableFlashPowerDown

+#define HAL_PWR_EnableVddio2Monitor                   HAL_PWREx_EnableVddio2Monitor

+#define HAL_PWR_PVD_PVM_IRQHandler                    HAL_PWREx_PVD_PVM_IRQHandler

+#define HAL_PWR_PVDLevelConfig                        HAL_PWR_ConfigPVD

+#define HAL_PWR_Vddio2Monitor_IRQHandler              HAL_PWREx_Vddio2Monitor_IRQHandler

+#define HAL_PWR_Vddio2MonitorCallback                 HAL_PWREx_Vddio2MonitorCallback

+#define HAL_PWREx_ActivateOverDrive                   HAL_PWREx_EnableOverDrive

+#define HAL_PWREx_DeactivateOverDrive                 HAL_PWREx_DisableOverDrive

+#define HAL_PWREx_DisableSDADCAnalog                  HAL_PWREx_DisableSDADC

+#define HAL_PWREx_EnableSDADCAnalog                   HAL_PWREx_EnableSDADC

+#define HAL_PWREx_PVMConfig                           HAL_PWREx_ConfigPVM

+

+#define PWR_MODE_NORMAL                               PWR_PVD_MODE_NORMAL

+#define PWR_MODE_IT_RISING                            PWR_PVD_MODE_IT_RISING

+#define PWR_MODE_IT_FALLING                           PWR_PVD_MODE_IT_FALLING

+#define PWR_MODE_IT_RISING_FALLING                    PWR_PVD_MODE_IT_RISING_FALLING

+#define PWR_MODE_EVENT_RISING                         PWR_PVD_MODE_EVENT_RISING

+#define PWR_MODE_EVENT_FALLING                        PWR_PVD_MODE_EVENT_FALLING

+#define PWR_MODE_EVENT_RISING_FALLING                 PWR_PVD_MODE_EVENT_RISING_FALLING

+

+#define CR_OFFSET_BB                                  PWR_CR_OFFSET_BB

+#define CSR_OFFSET_BB                                 PWR_CSR_OFFSET_BB

+#define PMODE_BIT_NUMBER                              VOS_BIT_NUMBER

+#define CR_PMODE_BB                                   CR_VOS_BB

+

+#define DBP_BitNumber                                 DBP_BIT_NUMBER

+#define PVDE_BitNumber                                PVDE_BIT_NUMBER

+#define PMODE_BitNumber                               PMODE_BIT_NUMBER

+#define EWUP_BitNumber                                EWUP_BIT_NUMBER

+#define FPDS_BitNumber                                FPDS_BIT_NUMBER

+#define ODEN_BitNumber                                ODEN_BIT_NUMBER

+#define ODSWEN_BitNumber                              ODSWEN_BIT_NUMBER

+#define MRLVDS_BitNumber                              MRLVDS_BIT_NUMBER

+#define LPLVDS_BitNumber                              LPLVDS_BIT_NUMBER

+#define BRE_BitNumber                                 BRE_BIT_NUMBER

+

+#define PWR_MODE_EVT                                  PWR_PVD_MODE_NORMAL

+

+ /**

+  * @}

+  */

+

+/** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#define HAL_SMBUS_Slave_Listen_IT          HAL_SMBUS_EnableListen_IT

+#define HAL_SMBUS_SlaveAddrCallback        HAL_SMBUS_AddrCallback

+#define HAL_SMBUS_SlaveListenCpltCallback  HAL_SMBUS_ListenCpltCallback

+/**

+  * @}

+  */

+

+/** @defgroup HAL_SPI_Aliased_Functions HAL SPI Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#define HAL_SPI_FlushRxFifo                HAL_SPIEx_FlushRxFifo

+/**

+  * @}

+  */

+

+/** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#define HAL_TIM_DMADelayPulseCplt                       TIM_DMADelayPulseCplt

+#define HAL_TIM_DMAError                                TIM_DMAError

+#define HAL_TIM_DMACaptureCplt                          TIM_DMACaptureCplt

+#define HAL_TIMEx_DMACommutationCplt                    TIMEx_DMACommutationCplt

+#if defined(STM32H7) || defined(STM32G0) || defined(STM32F7) || defined(STM32F4) || defined(STM32L0) || defined(STM32L4)

+#define HAL_TIM_SlaveConfigSynchronization              HAL_TIM_SlaveConfigSynchro

+#define HAL_TIM_SlaveConfigSynchronization_IT           HAL_TIM_SlaveConfigSynchro_IT

+#define HAL_TIMEx_CommutationCallback                   HAL_TIMEx_CommutCallback

+#define HAL_TIMEx_ConfigCommutationEvent                HAL_TIMEx_ConfigCommutEvent

+#define HAL_TIMEx_ConfigCommutationEvent_IT             HAL_TIMEx_ConfigCommutEvent_IT

+#define HAL_TIMEx_ConfigCommutationEvent_DMA            HAL_TIMEx_ConfigCommutEvent_DMA

+#endif /* STM32H7 || STM32G0 || STM32F7 || STM32F4  || STM32L0 */

+/**

+  * @}

+  */

+

+/** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback

+/**

+  * @}

+  */

+

+/** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback

+#define HAL_LTDC_Relaod           HAL_LTDC_Reload

+#define HAL_LTDC_StructInitFromVideoConfig  HAL_LTDCEx_StructInitFromVideoConfig

+#define HAL_LTDC_StructInitFromAdaptedCommandConfig  HAL_LTDCEx_StructInitFromAdaptedCommandConfig

+/**

+  * @}

+  */

+

+

+/** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose

+  * @{

+  */

+

+/**

+  * @}

+  */

+

+/* Exported macros ------------------------------------------------------------*/

+

+/** @defgroup HAL_AES_Aliased_Macros HAL CRYP Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define AES_IT_CC                      CRYP_IT_CC

+#define AES_IT_ERR                     CRYP_IT_ERR

+#define AES_FLAG_CCF                   CRYP_FLAG_CCF

+/**

+  * @}

+  */

+

+/** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define __HAL_GET_BOOT_MODE                   __HAL_SYSCFG_GET_BOOT_MODE

+#define __HAL_REMAPMEMORY_FLASH               __HAL_SYSCFG_REMAPMEMORY_FLASH

+#define __HAL_REMAPMEMORY_SYSTEMFLASH         __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH

+#define __HAL_REMAPMEMORY_SRAM                __HAL_SYSCFG_REMAPMEMORY_SRAM

+#define __HAL_REMAPMEMORY_FMC                 __HAL_SYSCFG_REMAPMEMORY_FMC

+#define __HAL_REMAPMEMORY_FMC_SDRAM           __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM

+#define __HAL_REMAPMEMORY_FSMC                __HAL_SYSCFG_REMAPMEMORY_FSMC

+#define __HAL_REMAPMEMORY_QUADSPI             __HAL_SYSCFG_REMAPMEMORY_QUADSPI

+#define __HAL_FMC_BANK                        __HAL_SYSCFG_FMC_BANK

+#define __HAL_GET_FLAG                        __HAL_SYSCFG_GET_FLAG

+#define __HAL_CLEAR_FLAG                      __HAL_SYSCFG_CLEAR_FLAG

+#define __HAL_VREFINT_OUT_ENABLE              __HAL_SYSCFG_VREFINT_OUT_ENABLE

+#define __HAL_VREFINT_OUT_DISABLE             __HAL_SYSCFG_VREFINT_OUT_DISABLE

+#define __HAL_SYSCFG_SRAM2_WRP_ENABLE         __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE

+

+#define SYSCFG_FLAG_VREF_READY                SYSCFG_FLAG_VREFINT_READY

+#define SYSCFG_FLAG_RC48                      RCC_FLAG_HSI48

+#define IS_SYSCFG_FASTMODEPLUS_CONFIG         IS_I2C_FASTMODEPLUS

+#define UFB_MODE_BitNumber                    UFB_MODE_BIT_NUMBER

+#define CMP_PD_BitNumber                      CMP_PD_BIT_NUMBER

+

+/**

+  * @}

+  */

+

+

+/** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define __ADC_ENABLE                                     __HAL_ADC_ENABLE

+#define __ADC_DISABLE                                    __HAL_ADC_DISABLE

+#define __HAL_ADC_ENABLING_CONDITIONS                    ADC_ENABLING_CONDITIONS

+#define __HAL_ADC_DISABLING_CONDITIONS                   ADC_DISABLING_CONDITIONS

+#define __HAL_ADC_IS_ENABLED                             ADC_IS_ENABLE

+#define __ADC_IS_ENABLED                                 ADC_IS_ENABLE

+#define __HAL_ADC_IS_SOFTWARE_START_REGULAR              ADC_IS_SOFTWARE_START_REGULAR

+#define __HAL_ADC_IS_SOFTWARE_START_INJECTED             ADC_IS_SOFTWARE_START_INJECTED

+#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED

+#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR          ADC_IS_CONVERSION_ONGOING_REGULAR

+#define __HAL_ADC_IS_CONVERSION_ONGOING_INJECTED         ADC_IS_CONVERSION_ONGOING_INJECTED

+#define __HAL_ADC_IS_CONVERSION_ONGOING                  ADC_IS_CONVERSION_ONGOING

+#define __HAL_ADC_CLEAR_ERRORCODE                        ADC_CLEAR_ERRORCODE

+

+#define __HAL_ADC_GET_RESOLUTION                         ADC_GET_RESOLUTION

+#define __HAL_ADC_JSQR_RK                                ADC_JSQR_RK

+#define __HAL_ADC_CFGR_AWD1CH                            ADC_CFGR_AWD1CH_SHIFT

+#define __HAL_ADC_CFGR_AWD23CR                           ADC_CFGR_AWD23CR

+#define __HAL_ADC_CFGR_INJECT_AUTO_CONVERSION            ADC_CFGR_INJECT_AUTO_CONVERSION

+#define __HAL_ADC_CFGR_INJECT_CONTEXT_QUEUE              ADC_CFGR_INJECT_CONTEXT_QUEUE

+#define __HAL_ADC_CFGR_INJECT_DISCCONTINUOUS             ADC_CFGR_INJECT_DISCCONTINUOUS

+#define __HAL_ADC_CFGR_REG_DISCCONTINUOUS                ADC_CFGR_REG_DISCCONTINUOUS

+#define __HAL_ADC_CFGR_DISCONTINUOUS_NUM                 ADC_CFGR_DISCONTINUOUS_NUM

+#define __HAL_ADC_CFGR_AUTOWAIT                          ADC_CFGR_AUTOWAIT

+#define __HAL_ADC_CFGR_CONTINUOUS                        ADC_CFGR_CONTINUOUS

+#define __HAL_ADC_CFGR_OVERRUN                           ADC_CFGR_OVERRUN

+#define __HAL_ADC_CFGR_DMACONTREQ                        ADC_CFGR_DMACONTREQ

+#define __HAL_ADC_CFGR_EXTSEL                            ADC_CFGR_EXTSEL_SET

+#define __HAL_ADC_JSQR_JEXTSEL                           ADC_JSQR_JEXTSEL_SET

+#define __HAL_ADC_OFR_CHANNEL                            ADC_OFR_CHANNEL

+#define __HAL_ADC_DIFSEL_CHANNEL                         ADC_DIFSEL_CHANNEL

+#define __HAL_ADC_CALFACT_DIFF_SET                       ADC_CALFACT_DIFF_SET

+#define __HAL_ADC_CALFACT_DIFF_GET                       ADC_CALFACT_DIFF_GET

+#define __HAL_ADC_TRX_HIGHTHRESHOLD                      ADC_TRX_HIGHTHRESHOLD

+

+#define __HAL_ADC_OFFSET_SHIFT_RESOLUTION                ADC_OFFSET_SHIFT_RESOLUTION

+#define __HAL_ADC_AWD1THRESHOLD_SHIFT_RESOLUTION         ADC_AWD1THRESHOLD_SHIFT_RESOLUTION

+#define __HAL_ADC_AWD23THRESHOLD_SHIFT_RESOLUTION        ADC_AWD23THRESHOLD_SHIFT_RESOLUTION

+#define __HAL_ADC_COMMON_REGISTER                        ADC_COMMON_REGISTER

+#define __HAL_ADC_COMMON_CCR_MULTI                       ADC_COMMON_CCR_MULTI

+#define __HAL_ADC_MULTIMODE_IS_ENABLED                   ADC_MULTIMODE_IS_ENABLE

+#define __ADC_MULTIMODE_IS_ENABLED                       ADC_MULTIMODE_IS_ENABLE

+#define __HAL_ADC_NONMULTIMODE_OR_MULTIMODEMASTER        ADC_NONMULTIMODE_OR_MULTIMODEMASTER

+#define __HAL_ADC_COMMON_ADC_OTHER                       ADC_COMMON_ADC_OTHER

+#define __HAL_ADC_MULTI_SLAVE                            ADC_MULTI_SLAVE

+

+#define __HAL_ADC_SQR1_L                                 ADC_SQR1_L_SHIFT

+#define __HAL_ADC_JSQR_JL                                ADC_JSQR_JL_SHIFT

+#define __HAL_ADC_JSQR_RK_JL                             ADC_JSQR_RK_JL

+#define __HAL_ADC_CR1_DISCONTINUOUS_NUM                  ADC_CR1_DISCONTINUOUS_NUM

+#define __HAL_ADC_CR1_SCAN                               ADC_CR1_SCAN_SET

+#define __HAL_ADC_CONVCYCLES_MAX_RANGE                   ADC_CONVCYCLES_MAX_RANGE

+#define __HAL_ADC_CLOCK_PRESCALER_RANGE                  ADC_CLOCK_PRESCALER_RANGE

+#define __HAL_ADC_GET_CLOCK_PRESCALER                    ADC_GET_CLOCK_PRESCALER

+

+#define __HAL_ADC_SQR1                                   ADC_SQR1

+#define __HAL_ADC_SMPR1                                  ADC_SMPR1

+#define __HAL_ADC_SMPR2                                  ADC_SMPR2

+#define __HAL_ADC_SQR3_RK                                ADC_SQR3_RK

+#define __HAL_ADC_SQR2_RK                                ADC_SQR2_RK

+#define __HAL_ADC_SQR1_RK                                ADC_SQR1_RK

+#define __HAL_ADC_CR2_CONTINUOUS                         ADC_CR2_CONTINUOUS

+#define __HAL_ADC_CR1_DISCONTINUOUS                      ADC_CR1_DISCONTINUOUS

+#define __HAL_ADC_CR1_SCANCONV                           ADC_CR1_SCANCONV

+#define __HAL_ADC_CR2_EOCSelection                       ADC_CR2_EOCSelection

+#define __HAL_ADC_CR2_DMAContReq                         ADC_CR2_DMAContReq

+#define __HAL_ADC_JSQR                                   ADC_JSQR

+

+#define __HAL_ADC_CHSELR_CHANNEL                         ADC_CHSELR_CHANNEL

+#define __HAL_ADC_CFGR1_REG_DISCCONTINUOUS               ADC_CFGR1_REG_DISCCONTINUOUS

+#define __HAL_ADC_CFGR1_AUTOOFF                          ADC_CFGR1_AUTOOFF

+#define __HAL_ADC_CFGR1_AUTOWAIT                         ADC_CFGR1_AUTOWAIT

+#define __HAL_ADC_CFGR1_CONTINUOUS                       ADC_CFGR1_CONTINUOUS

+#define __HAL_ADC_CFGR1_OVERRUN                          ADC_CFGR1_OVERRUN

+#define __HAL_ADC_CFGR1_SCANDIR                          ADC_CFGR1_SCANDIR

+#define __HAL_ADC_CFGR1_DMACONTREQ                       ADC_CFGR1_DMACONTREQ

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define __HAL_DHR12R1_ALIGNEMENT                        DAC_DHR12R1_ALIGNMENT

+#define __HAL_DHR12R2_ALIGNEMENT                        DAC_DHR12R2_ALIGNMENT

+#define __HAL_DHR12RD_ALIGNEMENT                        DAC_DHR12RD_ALIGNMENT

+#define IS_DAC_GENERATE_WAVE                            IS_DAC_WAVE

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define __HAL_FREEZE_TIM1_DBGMCU __HAL_DBGMCU_FREEZE_TIM1

+#define __HAL_UNFREEZE_TIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM1

+#define __HAL_FREEZE_TIM2_DBGMCU __HAL_DBGMCU_FREEZE_TIM2

+#define __HAL_UNFREEZE_TIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM2

+#define __HAL_FREEZE_TIM3_DBGMCU __HAL_DBGMCU_FREEZE_TIM3

+#define __HAL_UNFREEZE_TIM3_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM3

+#define __HAL_FREEZE_TIM4_DBGMCU __HAL_DBGMCU_FREEZE_TIM4

+#define __HAL_UNFREEZE_TIM4_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM4

+#define __HAL_FREEZE_TIM5_DBGMCU __HAL_DBGMCU_FREEZE_TIM5

+#define __HAL_UNFREEZE_TIM5_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM5

+#define __HAL_FREEZE_TIM6_DBGMCU __HAL_DBGMCU_FREEZE_TIM6

+#define __HAL_UNFREEZE_TIM6_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM6

+#define __HAL_FREEZE_TIM7_DBGMCU __HAL_DBGMCU_FREEZE_TIM7

+#define __HAL_UNFREEZE_TIM7_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM7

+#define __HAL_FREEZE_TIM8_DBGMCU __HAL_DBGMCU_FREEZE_TIM8

+#define __HAL_UNFREEZE_TIM8_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM8

+

+#define __HAL_FREEZE_TIM9_DBGMCU __HAL_DBGMCU_FREEZE_TIM9

+#define __HAL_UNFREEZE_TIM9_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM9

+#define __HAL_FREEZE_TIM10_DBGMCU __HAL_DBGMCU_FREEZE_TIM10

+#define __HAL_UNFREEZE_TIM10_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM10

+#define __HAL_FREEZE_TIM11_DBGMCU __HAL_DBGMCU_FREEZE_TIM11

+#define __HAL_UNFREEZE_TIM11_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM11

+#define __HAL_FREEZE_TIM12_DBGMCU __HAL_DBGMCU_FREEZE_TIM12

+#define __HAL_UNFREEZE_TIM12_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM12

+#define __HAL_FREEZE_TIM13_DBGMCU __HAL_DBGMCU_FREEZE_TIM13

+#define __HAL_UNFREEZE_TIM13_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM13

+#define __HAL_FREEZE_TIM14_DBGMCU __HAL_DBGMCU_FREEZE_TIM14

+#define __HAL_UNFREEZE_TIM14_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM14

+#define __HAL_FREEZE_CAN2_DBGMCU __HAL_DBGMCU_FREEZE_CAN2

+#define __HAL_UNFREEZE_CAN2_DBGMCU __HAL_DBGMCU_UNFREEZE_CAN2

+

+

+#define __HAL_FREEZE_TIM15_DBGMCU __HAL_DBGMCU_FREEZE_TIM15

+#define __HAL_UNFREEZE_TIM15_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM15

+#define __HAL_FREEZE_TIM16_DBGMCU __HAL_DBGMCU_FREEZE_TIM16

+#define __HAL_UNFREEZE_TIM16_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM16

+#define __HAL_FREEZE_TIM17_DBGMCU __HAL_DBGMCU_FREEZE_TIM17

+#define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17

+#define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC

+#define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC

+#if defined(STM32H7)

+  #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1

+  #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1

+  #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1

+  #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1

+#else

+  #define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG

+  #define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG

+  #define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG

+  #define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG

+#endif /* STM32H7 */

+#define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT

+#define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT

+#define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT

+#define __HAL_UNFREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT

+#define __HAL_FREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT

+#define __HAL_UNFREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT

+#define __HAL_FREEZE_CAN1_DBGMCU __HAL_DBGMCU_FREEZE_CAN1

+#define __HAL_UNFREEZE_CAN1_DBGMCU __HAL_DBGMCU_UNFREEZE_CAN1

+#define __HAL_FREEZE_LPTIM1_DBGMCU __HAL_DBGMCU_FREEZE_LPTIM1

+#define __HAL_UNFREEZE_LPTIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_LPTIM1

+#define __HAL_FREEZE_LPTIM2_DBGMCU __HAL_DBGMCU_FREEZE_LPTIM2

+#define __HAL_UNFREEZE_LPTIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_LPTIM2

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_COMP_Aliased_Macros HAL COMP Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#if defined(STM32F3)

+#define COMP_START                                       __HAL_COMP_ENABLE

+#define COMP_STOP                                        __HAL_COMP_DISABLE

+#define COMP_LOCK                                        __HAL_COMP_LOCK

+

+#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)

+#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)   (((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \

+                                                          __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE())

+#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)  (((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \

+                                                          __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE())

+#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)  (((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE())

+#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE())

+#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)          (((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \

+                                                          __HAL_COMP_COMP6_EXTI_ENABLE_IT())

+#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)         (((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \

+                                                          __HAL_COMP_COMP6_EXTI_DISABLE_IT())

+#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)               (((__FLAG__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \

+                                                          __HAL_COMP_COMP6_EXTI_GET_FLAG())

+#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)             (((__FLAG__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \

+                                                          __HAL_COMP_COMP6_EXTI_CLEAR_FLAG())

+# endif

+# if defined(STM32F302xE) || defined(STM32F302xC)

+#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)   (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \

+                                                          __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE())

+#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)  (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \

+                                                          __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE())

+#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)  (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE())

+#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE())

+#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)          (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \

+                                                          __HAL_COMP_COMP6_EXTI_ENABLE_IT())

+#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)         (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \

+                                                          __HAL_COMP_COMP6_EXTI_DISABLE_IT())

+#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)               (((__FLAG__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \

+                                                          __HAL_COMP_COMP6_EXTI_GET_FLAG())

+#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)             (((__FLAG__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \

+                                                          __HAL_COMP_COMP6_EXTI_CLEAR_FLAG())

+# endif

+# if defined(STM32F303xE) || defined(STM32F398xx) || defined(STM32F303xC) || defined(STM32F358xx)

+#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)   (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE() : \

+                                                          __HAL_COMP_COMP7_EXTI_ENABLE_RISING_EDGE())

+#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)  (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_RISING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE() : \

+                                                          __HAL_COMP_COMP7_EXTI_DISABLE_RISING_EDGE())

+#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)  (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          __HAL_COMP_COMP7_EXTI_ENABLE_FALLING_EDGE())

+#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          __HAL_COMP_COMP7_EXTI_DISABLE_FALLING_EDGE())

+#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)          (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_IT() : \

+                                                          __HAL_COMP_COMP7_EXTI_ENABLE_IT())

+#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)         (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_IT() : \

+                                                          ((__EXTILINE__)  == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_IT() : \

+                                                          __HAL_COMP_COMP7_EXTI_DISABLE_IT())

+#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)               (((__FLAG__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_GET_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_GET_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_GET_FLAG() : \

+                                                          __HAL_COMP_COMP7_EXTI_GET_FLAG())

+#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)             (((__FLAG__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_CLEAR_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_CLEAR_FLAG() : \

+                                                          ((__FLAG__)  == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_CLEAR_FLAG() : \

+                                                          __HAL_COMP_COMP7_EXTI_CLEAR_FLAG())

+# endif

+# if defined(STM32F373xC) ||defined(STM32F378xx)

+#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)   (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \

+                                                          __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE())

+#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)  (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \

+                                                          __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE())

+#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)  (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE())

+#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE())

+#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)          (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \

+                                                          __HAL_COMP_COMP2_EXTI_ENABLE_IT())

+#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)         (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \

+                                                          __HAL_COMP_COMP2_EXTI_DISABLE_IT())

+#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)               (((__FLAG__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \

+                                                          __HAL_COMP_COMP2_EXTI_GET_FLAG())

+#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)             (((__FLAG__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \

+                                                          __HAL_COMP_COMP2_EXTI_CLEAR_FLAG())

+# endif

+#else

+#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)   (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \

+                                                          __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE())

+#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)  (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \

+                                                          __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE())

+#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)  (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \

+                                                          __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE())

+#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \

+                                                          __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE())

+#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)          (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \

+                                                          __HAL_COMP_COMP2_EXTI_ENABLE_IT())

+#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)         (((__EXTILINE__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \

+                                                          __HAL_COMP_COMP2_EXTI_DISABLE_IT())

+#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)               (((__FLAG__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \

+                                                          __HAL_COMP_COMP2_EXTI_GET_FLAG())

+#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)             (((__FLAG__)  == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \

+                                                          __HAL_COMP_COMP2_EXTI_CLEAR_FLAG())

+#endif

+

+#define __HAL_COMP_GET_EXTI_LINE  COMP_GET_EXTI_LINE

+

+#if defined(STM32L0) || defined(STM32L4)

+/* Note: On these STM32 families, the only argument of this macro             */

+/*       is COMP_FLAG_LOCK.                                                   */

+/*       This macro is replaced by __HAL_COMP_IS_LOCKED with only HAL handle  */

+/*       argument.                                                            */

+#define __HAL_COMP_GET_FLAG(__HANDLE__, __FLAG__)  (__HAL_COMP_IS_LOCKED(__HANDLE__))

+#endif

+/**

+  * @}

+  */

+

+#if defined(STM32L0) || defined(STM32L4)

+/** @defgroup HAL_COMP_Aliased_Functions HAL COMP Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#define HAL_COMP_Start_IT       HAL_COMP_Start /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */

+#define HAL_COMP_Stop_IT        HAL_COMP_Stop  /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */

+/**

+  * @}

+  */

+#endif

+

+/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \

+                          ((WAVE) == DAC_WAVE_NOISE)|| \

+                          ((WAVE) == DAC_WAVE_TRIANGLE))

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_FLASH_Aliased_Macros HAL FLASH Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define IS_WRPAREA          IS_OB_WRPAREA

+#define IS_TYPEPROGRAM      IS_FLASH_TYPEPROGRAM

+#define IS_TYPEPROGRAMFLASH IS_FLASH_TYPEPROGRAM

+#define IS_TYPEERASE        IS_FLASH_TYPEERASE

+#define IS_NBSECTORS        IS_FLASH_NBSECTORS

+#define IS_OB_WDG_SOURCE    IS_OB_IWDG_SOURCE

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define __HAL_I2C_RESET_CR2             I2C_RESET_CR2

+#define __HAL_I2C_GENERATE_START        I2C_GENERATE_START

+#if defined(STM32F1)

+#define __HAL_I2C_FREQ_RANGE            I2C_FREQRANGE

+#else

+#define __HAL_I2C_FREQ_RANGE            I2C_FREQ_RANGE

+#endif /* STM32F1 */

+#define __HAL_I2C_RISE_TIME             I2C_RISE_TIME

+#define __HAL_I2C_SPEED_STANDARD        I2C_SPEED_STANDARD

+#define __HAL_I2C_SPEED_FAST            I2C_SPEED_FAST

+#define __HAL_I2C_SPEED                 I2C_SPEED

+#define __HAL_I2C_7BIT_ADD_WRITE        I2C_7BIT_ADD_WRITE

+#define __HAL_I2C_7BIT_ADD_READ         I2C_7BIT_ADD_READ

+#define __HAL_I2C_10BIT_ADDRESS         I2C_10BIT_ADDRESS

+#define __HAL_I2C_10BIT_HEADER_WRITE    I2C_10BIT_HEADER_WRITE

+#define __HAL_I2C_10BIT_HEADER_READ     I2C_10BIT_HEADER_READ

+#define __HAL_I2C_MEM_ADD_MSB           I2C_MEM_ADD_MSB

+#define __HAL_I2C_MEM_ADD_LSB           I2C_MEM_ADD_LSB

+#define __HAL_I2C_FREQRANGE             I2C_FREQRANGE

+/**

+  * @}

+  */

+

+/** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define IS_I2S_INSTANCE                 IS_I2S_ALL_INSTANCE

+#define IS_I2S_INSTANCE_EXT             IS_I2S_ALL_INSTANCE_EXT

+

+#if defined(STM32H7)

+  #define __HAL_I2S_CLEAR_FREFLAG       __HAL_I2S_CLEAR_TIFREFLAG

+#endif

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define __IRDA_DISABLE                  __HAL_IRDA_DISABLE

+#define __IRDA_ENABLE                   __HAL_IRDA_ENABLE

+

+#define __HAL_IRDA_GETCLOCKSOURCE       IRDA_GETCLOCKSOURCE

+#define __HAL_IRDA_MASK_COMPUTATION     IRDA_MASK_COMPUTATION

+#define __IRDA_GETCLOCKSOURCE           IRDA_GETCLOCKSOURCE

+#define __IRDA_MASK_COMPUTATION         IRDA_MASK_COMPUTATION

+

+#define IS_IRDA_ONEBIT_SAMPLE           IS_IRDA_ONE_BIT_SAMPLE

+

+

+/**

+  * @}

+  */

+

+

+/** @defgroup HAL_IWDG_Aliased_Macros HAL IWDG Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define __HAL_IWDG_ENABLE_WRITE_ACCESS  IWDG_ENABLE_WRITE_ACCESS

+#define __HAL_IWDG_DISABLE_WRITE_ACCESS IWDG_DISABLE_WRITE_ACCESS

+/**

+  * @}

+  */

+

+

+/** @defgroup HAL_LPTIM_Aliased_Macros HAL LPTIM Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define __HAL_LPTIM_ENABLE_INTERRUPT    __HAL_LPTIM_ENABLE_IT

+#define __HAL_LPTIM_DISABLE_INTERRUPT   __HAL_LPTIM_DISABLE_IT

+#define __HAL_LPTIM_GET_ITSTATUS        __HAL_LPTIM_GET_IT_SOURCE

+

+/**

+  * @}

+  */

+

+

+/** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define __OPAMP_CSR_OPAXPD                OPAMP_CSR_OPAXPD

+#define __OPAMP_CSR_S3SELX                OPAMP_CSR_S3SELX

+#define __OPAMP_CSR_S4SELX                OPAMP_CSR_S4SELX

+#define __OPAMP_CSR_S5SELX                OPAMP_CSR_S5SELX

+#define __OPAMP_CSR_S6SELX                OPAMP_CSR_S6SELX

+#define __OPAMP_CSR_OPAXCAL_L             OPAMP_CSR_OPAXCAL_L

+#define __OPAMP_CSR_OPAXCAL_H             OPAMP_CSR_OPAXCAL_H

+#define __OPAMP_CSR_OPAXLPM               OPAMP_CSR_OPAXLPM

+#define __OPAMP_CSR_ALL_SWITCHES          OPAMP_CSR_ALL_SWITCHES

+#define __OPAMP_CSR_ANAWSELX              OPAMP_CSR_ANAWSELX

+#define __OPAMP_CSR_OPAXCALOUT            OPAMP_CSR_OPAXCALOUT

+#define __OPAMP_OFFSET_TRIM_BITSPOSITION  OPAMP_OFFSET_TRIM_BITSPOSITION

+#define __OPAMP_OFFSET_TRIM_SET           OPAMP_OFFSET_TRIM_SET

+

+/**

+  * @}

+  */

+

+

+/** @defgroup HAL_PWR_Aliased_Macros HAL PWR Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define __HAL_PVD_EVENT_DISABLE                                  __HAL_PWR_PVD_EXTI_DISABLE_EVENT

+#define __HAL_PVD_EVENT_ENABLE                                   __HAL_PWR_PVD_EXTI_ENABLE_EVENT

+#define __HAL_PVD_EXTI_FALLINGTRIGGER_DISABLE                    __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE

+#define __HAL_PVD_EXTI_FALLINGTRIGGER_ENABLE                     __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE

+#define __HAL_PVD_EXTI_RISINGTRIGGER_DISABLE                     __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE

+#define __HAL_PVD_EXTI_RISINGTRIGGER_ENABLE                      __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE

+#define __HAL_PVM_EVENT_DISABLE                                  __HAL_PWR_PVM_EVENT_DISABLE

+#define __HAL_PVM_EVENT_ENABLE                                   __HAL_PWR_PVM_EVENT_ENABLE

+#define __HAL_PVM_EXTI_FALLINGTRIGGER_DISABLE                    __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_DISABLE

+#define __HAL_PVM_EXTI_FALLINGTRIGGER_ENABLE                     __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_ENABLE

+#define __HAL_PVM_EXTI_RISINGTRIGGER_DISABLE                     __HAL_PWR_PVM_EXTI_RISINGTRIGGER_DISABLE

+#define __HAL_PVM_EXTI_RISINGTRIGGER_ENABLE                      __HAL_PWR_PVM_EXTI_RISINGTRIGGER_ENABLE

+#define __HAL_PWR_INTERNALWAKEUP_DISABLE                         HAL_PWREx_DisableInternalWakeUpLine

+#define __HAL_PWR_INTERNALWAKEUP_ENABLE                          HAL_PWREx_EnableInternalWakeUpLine

+#define __HAL_PWR_PULL_UP_DOWN_CONFIG_DISABLE                    HAL_PWREx_DisablePullUpPullDownConfig

+#define __HAL_PWR_PULL_UP_DOWN_CONFIG_ENABLE                     HAL_PWREx_EnablePullUpPullDownConfig

+#define __HAL_PWR_PVD_EXTI_CLEAR_EGDE_TRIGGER()                  do { __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); } while(0)

+#define __HAL_PWR_PVD_EXTI_EVENT_DISABLE                         __HAL_PWR_PVD_EXTI_DISABLE_EVENT

+#define __HAL_PWR_PVD_EXTI_EVENT_ENABLE                          __HAL_PWR_PVD_EXTI_ENABLE_EVENT

+#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_DISABLE                __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE

+#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_ENABLE                 __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE

+#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_DISABLE                 __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE

+#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_ENABLE                  __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE

+#define __HAL_PWR_PVD_EXTI_SET_FALLING_EGDE_TRIGGER              __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE

+#define __HAL_PWR_PVD_EXTI_SET_RISING_EDGE_TRIGGER               __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE

+#define __HAL_PWR_PVM_DISABLE()                                  do { HAL_PWREx_DisablePVM1();HAL_PWREx_DisablePVM2();HAL_PWREx_DisablePVM3();HAL_PWREx_DisablePVM4(); } while(0)

+#define __HAL_PWR_PVM_ENABLE()                                   do { HAL_PWREx_EnablePVM1();HAL_PWREx_EnablePVM2();HAL_PWREx_EnablePVM3();HAL_PWREx_EnablePVM4(); } while(0)

+#define __HAL_PWR_SRAM2CONTENT_PRESERVE_DISABLE                  HAL_PWREx_DisableSRAM2ContentRetention

+#define __HAL_PWR_SRAM2CONTENT_PRESERVE_ENABLE                   HAL_PWREx_EnableSRAM2ContentRetention

+#define __HAL_PWR_VDDIO2_DISABLE                                 HAL_PWREx_DisableVddIO2

+#define __HAL_PWR_VDDIO2_ENABLE                                  HAL_PWREx_EnableVddIO2

+#define __HAL_PWR_VDDIO2_EXTI_CLEAR_EGDE_TRIGGER                 __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE

+#define __HAL_PWR_VDDIO2_EXTI_SET_FALLING_EGDE_TRIGGER           __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE

+#define __HAL_PWR_VDDUSB_DISABLE                                 HAL_PWREx_DisableVddUSB

+#define __HAL_PWR_VDDUSB_ENABLE                                  HAL_PWREx_EnableVddUSB

+

+#if defined (STM32F4)

+#define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD)         __HAL_PWR_PVD_EXTI_ENABLE_IT()

+#define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD)        __HAL_PWR_PVD_EXTI_DISABLE_IT()

+#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD)          __HAL_PWR_PVD_EXTI_GET_FLAG()

+#define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD)        __HAL_PWR_PVD_EXTI_CLEAR_FLAG()

+#define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD)     __HAL_PWR_PVD_EXTI_GENERATE_SWIT()

+#else

+#define __HAL_PVD_EXTI_CLEAR_FLAG                                __HAL_PWR_PVD_EXTI_CLEAR_FLAG

+#define __HAL_PVD_EXTI_DISABLE_IT                                __HAL_PWR_PVD_EXTI_DISABLE_IT

+#define __HAL_PVD_EXTI_ENABLE_IT                                 __HAL_PWR_PVD_EXTI_ENABLE_IT

+#define __HAL_PVD_EXTI_GENERATE_SWIT                             __HAL_PWR_PVD_EXTI_GENERATE_SWIT

+#define __HAL_PVD_EXTI_GET_FLAG                                  __HAL_PWR_PVD_EXTI_GET_FLAG

+#endif /* STM32F4 */

+/**

+  * @}

+  */

+

+

+/** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose

+  * @{

+  */

+

+#define RCC_StopWakeUpClock_MSI     RCC_STOP_WAKEUPCLOCK_MSI

+#define RCC_StopWakeUpClock_HSI     RCC_STOP_WAKEUPCLOCK_HSI

+

+#define HAL_RCC_CCSCallback HAL_RCC_CSSCallback

+#define HAL_RC48_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_RCCEx_EnableHSI48_VREFINT() : HAL_RCCEx_DisableHSI48_VREFINT())

+

+#define __ADC_CLK_DISABLE          __HAL_RCC_ADC_CLK_DISABLE

+#define __ADC_CLK_ENABLE           __HAL_RCC_ADC_CLK_ENABLE

+#define __ADC_CLK_SLEEP_DISABLE    __HAL_RCC_ADC_CLK_SLEEP_DISABLE

+#define __ADC_CLK_SLEEP_ENABLE     __HAL_RCC_ADC_CLK_SLEEP_ENABLE

+#define __ADC_FORCE_RESET          __HAL_RCC_ADC_FORCE_RESET

+#define __ADC_RELEASE_RESET        __HAL_RCC_ADC_RELEASE_RESET

+#define __ADC1_CLK_DISABLE         __HAL_RCC_ADC1_CLK_DISABLE

+#define __ADC1_CLK_ENABLE          __HAL_RCC_ADC1_CLK_ENABLE

+#define __ADC1_FORCE_RESET         __HAL_RCC_ADC1_FORCE_RESET

+#define __ADC1_RELEASE_RESET       __HAL_RCC_ADC1_RELEASE_RESET

+#define __ADC1_CLK_SLEEP_ENABLE    __HAL_RCC_ADC1_CLK_SLEEP_ENABLE

+#define __ADC1_CLK_SLEEP_DISABLE   __HAL_RCC_ADC1_CLK_SLEEP_DISABLE

+#define __ADC2_CLK_DISABLE         __HAL_RCC_ADC2_CLK_DISABLE

+#define __ADC2_CLK_ENABLE          __HAL_RCC_ADC2_CLK_ENABLE

+#define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET

+#define __ADC2_RELEASE_RESET __HAL_RCC_ADC2_RELEASE_RESET

+#define __ADC3_CLK_DISABLE __HAL_RCC_ADC3_CLK_DISABLE

+#define __ADC3_CLK_ENABLE __HAL_RCC_ADC3_CLK_ENABLE

+#define __ADC3_FORCE_RESET __HAL_RCC_ADC3_FORCE_RESET

+#define __ADC3_RELEASE_RESET __HAL_RCC_ADC3_RELEASE_RESET

+#define __AES_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE

+#define __AES_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE

+#define __AES_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE

+#define __AES_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE

+#define __AES_FORCE_RESET __HAL_RCC_AES_FORCE_RESET

+#define __AES_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET

+#define __CRYP_CLK_SLEEP_ENABLE      __HAL_RCC_CRYP_CLK_SLEEP_ENABLE

+#define __CRYP_CLK_SLEEP_DISABLE  __HAL_RCC_CRYP_CLK_SLEEP_DISABLE

+#define __CRYP_CLK_ENABLE  __HAL_RCC_CRYP_CLK_ENABLE

+#define __CRYP_CLK_DISABLE  __HAL_RCC_CRYP_CLK_DISABLE

+#define __CRYP_FORCE_RESET       __HAL_RCC_CRYP_FORCE_RESET

+#define __CRYP_RELEASE_RESET  __HAL_RCC_CRYP_RELEASE_RESET

+#define __AFIO_CLK_DISABLE __HAL_RCC_AFIO_CLK_DISABLE

+#define __AFIO_CLK_ENABLE __HAL_RCC_AFIO_CLK_ENABLE

+#define __AFIO_FORCE_RESET __HAL_RCC_AFIO_FORCE_RESET

+#define __AFIO_RELEASE_RESET __HAL_RCC_AFIO_RELEASE_RESET

+#define __AHB_FORCE_RESET __HAL_RCC_AHB_FORCE_RESET

+#define __AHB_RELEASE_RESET __HAL_RCC_AHB_RELEASE_RESET

+#define __AHB1_FORCE_RESET __HAL_RCC_AHB1_FORCE_RESET

+#define __AHB1_RELEASE_RESET __HAL_RCC_AHB1_RELEASE_RESET

+#define __AHB2_FORCE_RESET __HAL_RCC_AHB2_FORCE_RESET

+#define __AHB2_RELEASE_RESET __HAL_RCC_AHB2_RELEASE_RESET

+#define __AHB3_FORCE_RESET __HAL_RCC_AHB3_FORCE_RESET

+#define __AHB3_RELEASE_RESET __HAL_RCC_AHB3_RELEASE_RESET

+#define __APB1_FORCE_RESET __HAL_RCC_APB1_FORCE_RESET

+#define __APB1_RELEASE_RESET __HAL_RCC_APB1_RELEASE_RESET

+#define __APB2_FORCE_RESET __HAL_RCC_APB2_FORCE_RESET

+#define __APB2_RELEASE_RESET __HAL_RCC_APB2_RELEASE_RESET

+#define __BKP_CLK_DISABLE __HAL_RCC_BKP_CLK_DISABLE

+#define __BKP_CLK_ENABLE __HAL_RCC_BKP_CLK_ENABLE

+#define __BKP_FORCE_RESET __HAL_RCC_BKP_FORCE_RESET

+#define __BKP_RELEASE_RESET __HAL_RCC_BKP_RELEASE_RESET

+#define __CAN1_CLK_DISABLE __HAL_RCC_CAN1_CLK_DISABLE

+#define __CAN1_CLK_ENABLE __HAL_RCC_CAN1_CLK_ENABLE

+#define __CAN1_CLK_SLEEP_DISABLE __HAL_RCC_CAN1_CLK_SLEEP_DISABLE

+#define __CAN1_CLK_SLEEP_ENABLE __HAL_RCC_CAN1_CLK_SLEEP_ENABLE

+#define __CAN1_FORCE_RESET __HAL_RCC_CAN1_FORCE_RESET

+#define __CAN1_RELEASE_RESET __HAL_RCC_CAN1_RELEASE_RESET

+#define __CAN_CLK_DISABLE         __HAL_RCC_CAN1_CLK_DISABLE

+#define __CAN_CLK_ENABLE          __HAL_RCC_CAN1_CLK_ENABLE

+#define __CAN_FORCE_RESET         __HAL_RCC_CAN1_FORCE_RESET

+#define __CAN_RELEASE_RESET       __HAL_RCC_CAN1_RELEASE_RESET

+#define __CAN2_CLK_DISABLE __HAL_RCC_CAN2_CLK_DISABLE

+#define __CAN2_CLK_ENABLE __HAL_RCC_CAN2_CLK_ENABLE

+#define __CAN2_FORCE_RESET __HAL_RCC_CAN2_FORCE_RESET

+#define __CAN2_RELEASE_RESET __HAL_RCC_CAN2_RELEASE_RESET

+#define __CEC_CLK_DISABLE __HAL_RCC_CEC_CLK_DISABLE

+#define __CEC_CLK_ENABLE __HAL_RCC_CEC_CLK_ENABLE

+#define __COMP_CLK_DISABLE        __HAL_RCC_COMP_CLK_DISABLE

+#define __COMP_CLK_ENABLE         __HAL_RCC_COMP_CLK_ENABLE

+#define __COMP_FORCE_RESET        __HAL_RCC_COMP_FORCE_RESET

+#define __COMP_RELEASE_RESET      __HAL_RCC_COMP_RELEASE_RESET

+#define __COMP_CLK_SLEEP_ENABLE   __HAL_RCC_COMP_CLK_SLEEP_ENABLE

+#define __COMP_CLK_SLEEP_DISABLE  __HAL_RCC_COMP_CLK_SLEEP_DISABLE

+#define __CEC_FORCE_RESET __HAL_RCC_CEC_FORCE_RESET

+#define __CEC_RELEASE_RESET __HAL_RCC_CEC_RELEASE_RESET

+#define __CRC_CLK_DISABLE __HAL_RCC_CRC_CLK_DISABLE

+#define __CRC_CLK_ENABLE __HAL_RCC_CRC_CLK_ENABLE

+#define __CRC_CLK_SLEEP_DISABLE __HAL_RCC_CRC_CLK_SLEEP_DISABLE

+#define __CRC_CLK_SLEEP_ENABLE __HAL_RCC_CRC_CLK_SLEEP_ENABLE

+#define __CRC_FORCE_RESET __HAL_RCC_CRC_FORCE_RESET

+#define __CRC_RELEASE_RESET __HAL_RCC_CRC_RELEASE_RESET

+#define __DAC_CLK_DISABLE __HAL_RCC_DAC_CLK_DISABLE

+#define __DAC_CLK_ENABLE __HAL_RCC_DAC_CLK_ENABLE

+#define __DAC_FORCE_RESET __HAL_RCC_DAC_FORCE_RESET

+#define __DAC_RELEASE_RESET __HAL_RCC_DAC_RELEASE_RESET

+#define __DAC1_CLK_DISABLE __HAL_RCC_DAC1_CLK_DISABLE

+#define __DAC1_CLK_ENABLE __HAL_RCC_DAC1_CLK_ENABLE

+#define __DAC1_CLK_SLEEP_DISABLE __HAL_RCC_DAC1_CLK_SLEEP_DISABLE

+#define __DAC1_CLK_SLEEP_ENABLE __HAL_RCC_DAC1_CLK_SLEEP_ENABLE

+#define __DAC1_FORCE_RESET __HAL_RCC_DAC1_FORCE_RESET

+#define __DAC1_RELEASE_RESET __HAL_RCC_DAC1_RELEASE_RESET

+#define __DBGMCU_CLK_ENABLE     __HAL_RCC_DBGMCU_CLK_ENABLE

+#define __DBGMCU_CLK_DISABLE     __HAL_RCC_DBGMCU_CLK_DISABLE

+#define __DBGMCU_FORCE_RESET    __HAL_RCC_DBGMCU_FORCE_RESET

+#define __DBGMCU_RELEASE_RESET  __HAL_RCC_DBGMCU_RELEASE_RESET

+#define __DFSDM_CLK_DISABLE __HAL_RCC_DFSDM_CLK_DISABLE

+#define __DFSDM_CLK_ENABLE __HAL_RCC_DFSDM_CLK_ENABLE

+#define __DFSDM_CLK_SLEEP_DISABLE __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE

+#define __DFSDM_CLK_SLEEP_ENABLE __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE

+#define __DFSDM_FORCE_RESET __HAL_RCC_DFSDM_FORCE_RESET

+#define __DFSDM_RELEASE_RESET __HAL_RCC_DFSDM_RELEASE_RESET

+#define __DMA1_CLK_DISABLE __HAL_RCC_DMA1_CLK_DISABLE

+#define __DMA1_CLK_ENABLE __HAL_RCC_DMA1_CLK_ENABLE

+#define __DMA1_CLK_SLEEP_DISABLE __HAL_RCC_DMA1_CLK_SLEEP_DISABLE

+#define __DMA1_CLK_SLEEP_ENABLE __HAL_RCC_DMA1_CLK_SLEEP_ENABLE

+#define __DMA1_FORCE_RESET __HAL_RCC_DMA1_FORCE_RESET

+#define __DMA1_RELEASE_RESET __HAL_RCC_DMA1_RELEASE_RESET

+#define __DMA2_CLK_DISABLE __HAL_RCC_DMA2_CLK_DISABLE

+#define __DMA2_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE

+#define __DMA2_CLK_SLEEP_DISABLE __HAL_RCC_DMA2_CLK_SLEEP_DISABLE

+#define __DMA2_CLK_SLEEP_ENABLE __HAL_RCC_DMA2_CLK_SLEEP_ENABLE

+#define __DMA2_FORCE_RESET __HAL_RCC_DMA2_FORCE_RESET

+#define __DMA2_RELEASE_RESET __HAL_RCC_DMA2_RELEASE_RESET

+#define __ETHMAC_CLK_DISABLE __HAL_RCC_ETHMAC_CLK_DISABLE

+#define __ETHMAC_CLK_ENABLE __HAL_RCC_ETHMAC_CLK_ENABLE

+#define __ETHMAC_FORCE_RESET __HAL_RCC_ETHMAC_FORCE_RESET

+#define __ETHMAC_RELEASE_RESET __HAL_RCC_ETHMAC_RELEASE_RESET

+#define __ETHMACRX_CLK_DISABLE __HAL_RCC_ETHMACRX_CLK_DISABLE

+#define __ETHMACRX_CLK_ENABLE __HAL_RCC_ETHMACRX_CLK_ENABLE

+#define __ETHMACTX_CLK_DISABLE __HAL_RCC_ETHMACTX_CLK_DISABLE

+#define __ETHMACTX_CLK_ENABLE __HAL_RCC_ETHMACTX_CLK_ENABLE

+#define __FIREWALL_CLK_DISABLE __HAL_RCC_FIREWALL_CLK_DISABLE

+#define __FIREWALL_CLK_ENABLE __HAL_RCC_FIREWALL_CLK_ENABLE

+#define __FLASH_CLK_DISABLE __HAL_RCC_FLASH_CLK_DISABLE

+#define __FLASH_CLK_ENABLE __HAL_RCC_FLASH_CLK_ENABLE

+#define __FLASH_CLK_SLEEP_DISABLE __HAL_RCC_FLASH_CLK_SLEEP_DISABLE

+#define __FLASH_CLK_SLEEP_ENABLE __HAL_RCC_FLASH_CLK_SLEEP_ENABLE

+#define __FLASH_FORCE_RESET __HAL_RCC_FLASH_FORCE_RESET

+#define __FLASH_RELEASE_RESET __HAL_RCC_FLASH_RELEASE_RESET

+#define __FLITF_CLK_DISABLE       __HAL_RCC_FLITF_CLK_DISABLE

+#define __FLITF_CLK_ENABLE        __HAL_RCC_FLITF_CLK_ENABLE

+#define __FLITF_FORCE_RESET       __HAL_RCC_FLITF_FORCE_RESET

+#define __FLITF_RELEASE_RESET     __HAL_RCC_FLITF_RELEASE_RESET

+#define __FLITF_CLK_SLEEP_ENABLE  __HAL_RCC_FLITF_CLK_SLEEP_ENABLE

+#define __FLITF_CLK_SLEEP_DISABLE __HAL_RCC_FLITF_CLK_SLEEP_DISABLE

+#define __FMC_CLK_DISABLE __HAL_RCC_FMC_CLK_DISABLE

+#define __FMC_CLK_ENABLE __HAL_RCC_FMC_CLK_ENABLE

+#define __FMC_CLK_SLEEP_DISABLE __HAL_RCC_FMC_CLK_SLEEP_DISABLE

+#define __FMC_CLK_SLEEP_ENABLE __HAL_RCC_FMC_CLK_SLEEP_ENABLE

+#define __FMC_FORCE_RESET __HAL_RCC_FMC_FORCE_RESET

+#define __FMC_RELEASE_RESET __HAL_RCC_FMC_RELEASE_RESET

+#define __FSMC_CLK_DISABLE __HAL_RCC_FSMC_CLK_DISABLE

+#define __FSMC_CLK_ENABLE __HAL_RCC_FSMC_CLK_ENABLE

+#define __GPIOA_CLK_DISABLE __HAL_RCC_GPIOA_CLK_DISABLE

+#define __GPIOA_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE

+#define __GPIOA_CLK_SLEEP_DISABLE __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE

+#define __GPIOA_CLK_SLEEP_ENABLE __HAL_RCC_GPIOA_CLK_SLEEP_ENABLE

+#define __GPIOA_FORCE_RESET __HAL_RCC_GPIOA_FORCE_RESET

+#define __GPIOA_RELEASE_RESET __HAL_RCC_GPIOA_RELEASE_RESET

+#define __GPIOB_CLK_DISABLE __HAL_RCC_GPIOB_CLK_DISABLE

+#define __GPIOB_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE

+#define __GPIOB_CLK_SLEEP_DISABLE __HAL_RCC_GPIOB_CLK_SLEEP_DISABLE

+#define __GPIOB_CLK_SLEEP_ENABLE __HAL_RCC_GPIOB_CLK_SLEEP_ENABLE

+#define __GPIOB_FORCE_RESET __HAL_RCC_GPIOB_FORCE_RESET

+#define __GPIOB_RELEASE_RESET __HAL_RCC_GPIOB_RELEASE_RESET

+#define __GPIOC_CLK_DISABLE __HAL_RCC_GPIOC_CLK_DISABLE

+#define __GPIOC_CLK_ENABLE __HAL_RCC_GPIOC_CLK_ENABLE

+#define __GPIOC_CLK_SLEEP_DISABLE __HAL_RCC_GPIOC_CLK_SLEEP_DISABLE

+#define __GPIOC_CLK_SLEEP_ENABLE __HAL_RCC_GPIOC_CLK_SLEEP_ENABLE

+#define __GPIOC_FORCE_RESET __HAL_RCC_GPIOC_FORCE_RESET

+#define __GPIOC_RELEASE_RESET __HAL_RCC_GPIOC_RELEASE_RESET

+#define __GPIOD_CLK_DISABLE __HAL_RCC_GPIOD_CLK_DISABLE

+#define __GPIOD_CLK_ENABLE __HAL_RCC_GPIOD_CLK_ENABLE

+#define __GPIOD_CLK_SLEEP_DISABLE __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE

+#define __GPIOD_CLK_SLEEP_ENABLE __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE

+#define __GPIOD_FORCE_RESET __HAL_RCC_GPIOD_FORCE_RESET

+#define __GPIOD_RELEASE_RESET __HAL_RCC_GPIOD_RELEASE_RESET

+#define __GPIOE_CLK_DISABLE __HAL_RCC_GPIOE_CLK_DISABLE

+#define __GPIOE_CLK_ENABLE __HAL_RCC_GPIOE_CLK_ENABLE

+#define __GPIOE_CLK_SLEEP_DISABLE __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE

+#define __GPIOE_CLK_SLEEP_ENABLE __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE

+#define __GPIOE_FORCE_RESET __HAL_RCC_GPIOE_FORCE_RESET

+#define __GPIOE_RELEASE_RESET __HAL_RCC_GPIOE_RELEASE_RESET

+#define __GPIOF_CLK_DISABLE __HAL_RCC_GPIOF_CLK_DISABLE

+#define __GPIOF_CLK_ENABLE __HAL_RCC_GPIOF_CLK_ENABLE

+#define __GPIOF_CLK_SLEEP_DISABLE __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE

+#define __GPIOF_CLK_SLEEP_ENABLE __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE

+#define __GPIOF_FORCE_RESET __HAL_RCC_GPIOF_FORCE_RESET

+#define __GPIOF_RELEASE_RESET __HAL_RCC_GPIOF_RELEASE_RESET

+#define __GPIOG_CLK_DISABLE __HAL_RCC_GPIOG_CLK_DISABLE

+#define __GPIOG_CLK_ENABLE __HAL_RCC_GPIOG_CLK_ENABLE

+#define __GPIOG_CLK_SLEEP_DISABLE __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE

+#define __GPIOG_CLK_SLEEP_ENABLE __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE

+#define __GPIOG_FORCE_RESET __HAL_RCC_GPIOG_FORCE_RESET

+#define __GPIOG_RELEASE_RESET __HAL_RCC_GPIOG_RELEASE_RESET

+#define __GPIOH_CLK_DISABLE __HAL_RCC_GPIOH_CLK_DISABLE

+#define __GPIOH_CLK_ENABLE __HAL_RCC_GPIOH_CLK_ENABLE

+#define __GPIOH_CLK_SLEEP_DISABLE __HAL_RCC_GPIOH_CLK_SLEEP_DISABLE

+#define __GPIOH_CLK_SLEEP_ENABLE __HAL_RCC_GPIOH_CLK_SLEEP_ENABLE

+#define __GPIOH_FORCE_RESET __HAL_RCC_GPIOH_FORCE_RESET

+#define __GPIOH_RELEASE_RESET __HAL_RCC_GPIOH_RELEASE_RESET

+#define __I2C1_CLK_DISABLE __HAL_RCC_I2C1_CLK_DISABLE

+#define __I2C1_CLK_ENABLE __HAL_RCC_I2C1_CLK_ENABLE

+#define __I2C1_CLK_SLEEP_DISABLE __HAL_RCC_I2C1_CLK_SLEEP_DISABLE

+#define __I2C1_CLK_SLEEP_ENABLE __HAL_RCC_I2C1_CLK_SLEEP_ENABLE

+#define __I2C1_FORCE_RESET __HAL_RCC_I2C1_FORCE_RESET

+#define __I2C1_RELEASE_RESET __HAL_RCC_I2C1_RELEASE_RESET

+#define __I2C2_CLK_DISABLE __HAL_RCC_I2C2_CLK_DISABLE

+#define __I2C2_CLK_ENABLE __HAL_RCC_I2C2_CLK_ENABLE

+#define __I2C2_CLK_SLEEP_DISABLE __HAL_RCC_I2C2_CLK_SLEEP_DISABLE

+#define __I2C2_CLK_SLEEP_ENABLE __HAL_RCC_I2C2_CLK_SLEEP_ENABLE

+#define __I2C2_FORCE_RESET __HAL_RCC_I2C2_FORCE_RESET

+#define __I2C2_RELEASE_RESET __HAL_RCC_I2C2_RELEASE_RESET

+#define __I2C3_CLK_DISABLE __HAL_RCC_I2C3_CLK_DISABLE

+#define __I2C3_CLK_ENABLE __HAL_RCC_I2C3_CLK_ENABLE

+#define __I2C3_CLK_SLEEP_DISABLE __HAL_RCC_I2C3_CLK_SLEEP_DISABLE

+#define __I2C3_CLK_SLEEP_ENABLE __HAL_RCC_I2C3_CLK_SLEEP_ENABLE

+#define __I2C3_FORCE_RESET __HAL_RCC_I2C3_FORCE_RESET

+#define __I2C3_RELEASE_RESET __HAL_RCC_I2C3_RELEASE_RESET

+#define __LCD_CLK_DISABLE __HAL_RCC_LCD_CLK_DISABLE

+#define __LCD_CLK_ENABLE __HAL_RCC_LCD_CLK_ENABLE

+#define __LCD_CLK_SLEEP_DISABLE __HAL_RCC_LCD_CLK_SLEEP_DISABLE

+#define __LCD_CLK_SLEEP_ENABLE __HAL_RCC_LCD_CLK_SLEEP_ENABLE

+#define __LCD_FORCE_RESET __HAL_RCC_LCD_FORCE_RESET

+#define __LCD_RELEASE_RESET __HAL_RCC_LCD_RELEASE_RESET

+#define __LPTIM1_CLK_DISABLE __HAL_RCC_LPTIM1_CLK_DISABLE

+#define __LPTIM1_CLK_ENABLE __HAL_RCC_LPTIM1_CLK_ENABLE

+#define __LPTIM1_CLK_SLEEP_DISABLE __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE

+#define __LPTIM1_CLK_SLEEP_ENABLE __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE

+#define __LPTIM1_FORCE_RESET __HAL_RCC_LPTIM1_FORCE_RESET

+#define __LPTIM1_RELEASE_RESET __HAL_RCC_LPTIM1_RELEASE_RESET

+#define __LPTIM2_CLK_DISABLE __HAL_RCC_LPTIM2_CLK_DISABLE

+#define __LPTIM2_CLK_ENABLE __HAL_RCC_LPTIM2_CLK_ENABLE

+#define __LPTIM2_CLK_SLEEP_DISABLE __HAL_RCC_LPTIM2_CLK_SLEEP_DISABLE

+#define __LPTIM2_CLK_SLEEP_ENABLE __HAL_RCC_LPTIM2_CLK_SLEEP_ENABLE

+#define __LPTIM2_FORCE_RESET __HAL_RCC_LPTIM2_FORCE_RESET

+#define __LPTIM2_RELEASE_RESET __HAL_RCC_LPTIM2_RELEASE_RESET

+#define __LPUART1_CLK_DISABLE __HAL_RCC_LPUART1_CLK_DISABLE

+#define __LPUART1_CLK_ENABLE __HAL_RCC_LPUART1_CLK_ENABLE

+#define __LPUART1_CLK_SLEEP_DISABLE __HAL_RCC_LPUART1_CLK_SLEEP_DISABLE

+#define __LPUART1_CLK_SLEEP_ENABLE __HAL_RCC_LPUART1_CLK_SLEEP_ENABLE

+#define __LPUART1_FORCE_RESET __HAL_RCC_LPUART1_FORCE_RESET

+#define __LPUART1_RELEASE_RESET __HAL_RCC_LPUART1_RELEASE_RESET

+#define __OPAMP_CLK_DISABLE __HAL_RCC_OPAMP_CLK_DISABLE

+#define __OPAMP_CLK_ENABLE __HAL_RCC_OPAMP_CLK_ENABLE

+#define __OPAMP_CLK_SLEEP_DISABLE __HAL_RCC_OPAMP_CLK_SLEEP_DISABLE

+#define __OPAMP_CLK_SLEEP_ENABLE __HAL_RCC_OPAMP_CLK_SLEEP_ENABLE

+#define __OPAMP_FORCE_RESET __HAL_RCC_OPAMP_FORCE_RESET

+#define __OPAMP_RELEASE_RESET __HAL_RCC_OPAMP_RELEASE_RESET

+#define __OTGFS_CLK_DISABLE __HAL_RCC_OTGFS_CLK_DISABLE

+#define __OTGFS_CLK_ENABLE __HAL_RCC_OTGFS_CLK_ENABLE

+#define __OTGFS_CLK_SLEEP_DISABLE __HAL_RCC_OTGFS_CLK_SLEEP_DISABLE

+#define __OTGFS_CLK_SLEEP_ENABLE __HAL_RCC_OTGFS_CLK_SLEEP_ENABLE

+#define __OTGFS_FORCE_RESET __HAL_RCC_OTGFS_FORCE_RESET

+#define __OTGFS_RELEASE_RESET __HAL_RCC_OTGFS_RELEASE_RESET

+#define __PWR_CLK_DISABLE __HAL_RCC_PWR_CLK_DISABLE

+#define __PWR_CLK_ENABLE __HAL_RCC_PWR_CLK_ENABLE

+#define __PWR_CLK_SLEEP_DISABLE __HAL_RCC_PWR_CLK_SLEEP_DISABLE

+#define __PWR_CLK_SLEEP_ENABLE __HAL_RCC_PWR_CLK_SLEEP_ENABLE

+#define __PWR_FORCE_RESET __HAL_RCC_PWR_FORCE_RESET

+#define __PWR_RELEASE_RESET __HAL_RCC_PWR_RELEASE_RESET

+#define __QSPI_CLK_DISABLE __HAL_RCC_QSPI_CLK_DISABLE

+#define __QSPI_CLK_ENABLE __HAL_RCC_QSPI_CLK_ENABLE

+#define __QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QSPI_CLK_SLEEP_DISABLE

+#define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE

+#define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET

+#define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET

+

+#if defined(STM32WB)

+#define __HAL_RCC_QSPI_CLK_DISABLE            __HAL_RCC_QUADSPI_CLK_DISABLE

+#define __HAL_RCC_QSPI_CLK_ENABLE             __HAL_RCC_QUADSPI_CLK_ENABLE

+#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE      __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE

+#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE       __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE

+#define __HAL_RCC_QSPI_FORCE_RESET            __HAL_RCC_QUADSPI_FORCE_RESET

+#define __HAL_RCC_QSPI_RELEASE_RESET          __HAL_RCC_QUADSPI_RELEASE_RESET

+#define __HAL_RCC_QSPI_IS_CLK_ENABLED         __HAL_RCC_QUADSPI_IS_CLK_ENABLED

+#define __HAL_RCC_QSPI_IS_CLK_DISABLED        __HAL_RCC_QUADSPI_IS_CLK_DISABLED

+#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED   __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED

+#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED  __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED

+#define QSPI_IRQHandler QUADSPI_IRQHandler

+#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */

+

+#define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE

+#define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE

+#define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE

+#define __RNG_CLK_SLEEP_ENABLE __HAL_RCC_RNG_CLK_SLEEP_ENABLE

+#define __RNG_FORCE_RESET __HAL_RCC_RNG_FORCE_RESET

+#define __RNG_RELEASE_RESET __HAL_RCC_RNG_RELEASE_RESET

+#define __SAI1_CLK_DISABLE __HAL_RCC_SAI1_CLK_DISABLE

+#define __SAI1_CLK_ENABLE __HAL_RCC_SAI1_CLK_ENABLE

+#define __SAI1_CLK_SLEEP_DISABLE __HAL_RCC_SAI1_CLK_SLEEP_DISABLE

+#define __SAI1_CLK_SLEEP_ENABLE __HAL_RCC_SAI1_CLK_SLEEP_ENABLE

+#define __SAI1_FORCE_RESET __HAL_RCC_SAI1_FORCE_RESET

+#define __SAI1_RELEASE_RESET __HAL_RCC_SAI1_RELEASE_RESET

+#define __SAI2_CLK_DISABLE __HAL_RCC_SAI2_CLK_DISABLE

+#define __SAI2_CLK_ENABLE __HAL_RCC_SAI2_CLK_ENABLE

+#define __SAI2_CLK_SLEEP_DISABLE __HAL_RCC_SAI2_CLK_SLEEP_DISABLE

+#define __SAI2_CLK_SLEEP_ENABLE __HAL_RCC_SAI2_CLK_SLEEP_ENABLE

+#define __SAI2_FORCE_RESET __HAL_RCC_SAI2_FORCE_RESET

+#define __SAI2_RELEASE_RESET __HAL_RCC_SAI2_RELEASE_RESET

+#define __SDIO_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE

+#define __SDIO_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE

+#define __SDMMC_CLK_DISABLE __HAL_RCC_SDMMC_CLK_DISABLE

+#define __SDMMC_CLK_ENABLE __HAL_RCC_SDMMC_CLK_ENABLE

+#define __SDMMC_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC_CLK_SLEEP_DISABLE

+#define __SDMMC_CLK_SLEEP_ENABLE __HAL_RCC_SDMMC_CLK_SLEEP_ENABLE

+#define __SDMMC_FORCE_RESET __HAL_RCC_SDMMC_FORCE_RESET

+#define __SDMMC_RELEASE_RESET __HAL_RCC_SDMMC_RELEASE_RESET

+#define __SPI1_CLK_DISABLE __HAL_RCC_SPI1_CLK_DISABLE

+#define __SPI1_CLK_ENABLE __HAL_RCC_SPI1_CLK_ENABLE

+#define __SPI1_CLK_SLEEP_DISABLE __HAL_RCC_SPI1_CLK_SLEEP_DISABLE

+#define __SPI1_CLK_SLEEP_ENABLE __HAL_RCC_SPI1_CLK_SLEEP_ENABLE

+#define __SPI1_FORCE_RESET __HAL_RCC_SPI1_FORCE_RESET

+#define __SPI1_RELEASE_RESET __HAL_RCC_SPI1_RELEASE_RESET

+#define __SPI2_CLK_DISABLE __HAL_RCC_SPI2_CLK_DISABLE

+#define __SPI2_CLK_ENABLE __HAL_RCC_SPI2_CLK_ENABLE

+#define __SPI2_CLK_SLEEP_DISABLE __HAL_RCC_SPI2_CLK_SLEEP_DISABLE

+#define __SPI2_CLK_SLEEP_ENABLE __HAL_RCC_SPI2_CLK_SLEEP_ENABLE

+#define __SPI2_FORCE_RESET __HAL_RCC_SPI2_FORCE_RESET

+#define __SPI2_RELEASE_RESET __HAL_RCC_SPI2_RELEASE_RESET

+#define __SPI3_CLK_DISABLE __HAL_RCC_SPI3_CLK_DISABLE

+#define __SPI3_CLK_ENABLE __HAL_RCC_SPI3_CLK_ENABLE

+#define __SPI3_CLK_SLEEP_DISABLE __HAL_RCC_SPI3_CLK_SLEEP_DISABLE

+#define __SPI3_CLK_SLEEP_ENABLE __HAL_RCC_SPI3_CLK_SLEEP_ENABLE

+#define __SPI3_FORCE_RESET __HAL_RCC_SPI3_FORCE_RESET

+#define __SPI3_RELEASE_RESET __HAL_RCC_SPI3_RELEASE_RESET

+#define __SRAM_CLK_DISABLE __HAL_RCC_SRAM_CLK_DISABLE

+#define __SRAM_CLK_ENABLE __HAL_RCC_SRAM_CLK_ENABLE

+#define __SRAM1_CLK_SLEEP_DISABLE __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE

+#define __SRAM1_CLK_SLEEP_ENABLE __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE

+#define __SRAM2_CLK_SLEEP_DISABLE __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE

+#define __SRAM2_CLK_SLEEP_ENABLE __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE

+#define __SWPMI1_CLK_DISABLE __HAL_RCC_SWPMI1_CLK_DISABLE

+#define __SWPMI1_CLK_ENABLE __HAL_RCC_SWPMI1_CLK_ENABLE

+#define __SWPMI1_CLK_SLEEP_DISABLE __HAL_RCC_SWPMI1_CLK_SLEEP_DISABLE

+#define __SWPMI1_CLK_SLEEP_ENABLE __HAL_RCC_SWPMI1_CLK_SLEEP_ENABLE

+#define __SWPMI1_FORCE_RESET __HAL_RCC_SWPMI1_FORCE_RESET

+#define __SWPMI1_RELEASE_RESET __HAL_RCC_SWPMI1_RELEASE_RESET

+#define __SYSCFG_CLK_DISABLE __HAL_RCC_SYSCFG_CLK_DISABLE

+#define __SYSCFG_CLK_ENABLE __HAL_RCC_SYSCFG_CLK_ENABLE

+#define __SYSCFG_CLK_SLEEP_DISABLE __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE

+#define __SYSCFG_CLK_SLEEP_ENABLE __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE

+#define __SYSCFG_FORCE_RESET __HAL_RCC_SYSCFG_FORCE_RESET

+#define __SYSCFG_RELEASE_RESET __HAL_RCC_SYSCFG_RELEASE_RESET

+#define __TIM1_CLK_DISABLE __HAL_RCC_TIM1_CLK_DISABLE

+#define __TIM1_CLK_ENABLE __HAL_RCC_TIM1_CLK_ENABLE

+#define __TIM1_CLK_SLEEP_DISABLE __HAL_RCC_TIM1_CLK_SLEEP_DISABLE

+#define __TIM1_CLK_SLEEP_ENABLE __HAL_RCC_TIM1_CLK_SLEEP_ENABLE

+#define __TIM1_FORCE_RESET __HAL_RCC_TIM1_FORCE_RESET

+#define __TIM1_RELEASE_RESET __HAL_RCC_TIM1_RELEASE_RESET

+#define __TIM10_CLK_DISABLE __HAL_RCC_TIM10_CLK_DISABLE

+#define __TIM10_CLK_ENABLE __HAL_RCC_TIM10_CLK_ENABLE

+#define __TIM10_FORCE_RESET __HAL_RCC_TIM10_FORCE_RESET

+#define __TIM10_RELEASE_RESET __HAL_RCC_TIM10_RELEASE_RESET

+#define __TIM11_CLK_DISABLE __HAL_RCC_TIM11_CLK_DISABLE

+#define __TIM11_CLK_ENABLE __HAL_RCC_TIM11_CLK_ENABLE

+#define __TIM11_FORCE_RESET __HAL_RCC_TIM11_FORCE_RESET

+#define __TIM11_RELEASE_RESET __HAL_RCC_TIM11_RELEASE_RESET

+#define __TIM12_CLK_DISABLE __HAL_RCC_TIM12_CLK_DISABLE

+#define __TIM12_CLK_ENABLE __HAL_RCC_TIM12_CLK_ENABLE

+#define __TIM12_FORCE_RESET __HAL_RCC_TIM12_FORCE_RESET

+#define __TIM12_RELEASE_RESET __HAL_RCC_TIM12_RELEASE_RESET

+#define __TIM13_CLK_DISABLE __HAL_RCC_TIM13_CLK_DISABLE

+#define __TIM13_CLK_ENABLE __HAL_RCC_TIM13_CLK_ENABLE

+#define __TIM13_FORCE_RESET __HAL_RCC_TIM13_FORCE_RESET

+#define __TIM13_RELEASE_RESET __HAL_RCC_TIM13_RELEASE_RESET

+#define __TIM14_CLK_DISABLE __HAL_RCC_TIM14_CLK_DISABLE

+#define __TIM14_CLK_ENABLE __HAL_RCC_TIM14_CLK_ENABLE

+#define __TIM14_FORCE_RESET __HAL_RCC_TIM14_FORCE_RESET

+#define __TIM14_RELEASE_RESET __HAL_RCC_TIM14_RELEASE_RESET

+#define __TIM15_CLK_DISABLE __HAL_RCC_TIM15_CLK_DISABLE

+#define __TIM15_CLK_ENABLE __HAL_RCC_TIM15_CLK_ENABLE

+#define __TIM15_CLK_SLEEP_DISABLE __HAL_RCC_TIM15_CLK_SLEEP_DISABLE

+#define __TIM15_CLK_SLEEP_ENABLE __HAL_RCC_TIM15_CLK_SLEEP_ENABLE

+#define __TIM15_FORCE_RESET __HAL_RCC_TIM15_FORCE_RESET

+#define __TIM15_RELEASE_RESET __HAL_RCC_TIM15_RELEASE_RESET

+#define __TIM16_CLK_DISABLE __HAL_RCC_TIM16_CLK_DISABLE

+#define __TIM16_CLK_ENABLE __HAL_RCC_TIM16_CLK_ENABLE

+#define __TIM16_CLK_SLEEP_DISABLE __HAL_RCC_TIM16_CLK_SLEEP_DISABLE

+#define __TIM16_CLK_SLEEP_ENABLE __HAL_RCC_TIM16_CLK_SLEEP_ENABLE

+#define __TIM16_FORCE_RESET __HAL_RCC_TIM16_FORCE_RESET

+#define __TIM16_RELEASE_RESET __HAL_RCC_TIM16_RELEASE_RESET

+#define __TIM17_CLK_DISABLE __HAL_RCC_TIM17_CLK_DISABLE

+#define __TIM17_CLK_ENABLE __HAL_RCC_TIM17_CLK_ENABLE

+#define __TIM17_CLK_SLEEP_DISABLE __HAL_RCC_TIM17_CLK_SLEEP_DISABLE

+#define __TIM17_CLK_SLEEP_ENABLE __HAL_RCC_TIM17_CLK_SLEEP_ENABLE

+#define __TIM17_FORCE_RESET __HAL_RCC_TIM17_FORCE_RESET

+#define __TIM17_RELEASE_RESET __HAL_RCC_TIM17_RELEASE_RESET

+#define __TIM2_CLK_DISABLE __HAL_RCC_TIM2_CLK_DISABLE

+#define __TIM2_CLK_ENABLE __HAL_RCC_TIM2_CLK_ENABLE

+#define __TIM2_CLK_SLEEP_DISABLE __HAL_RCC_TIM2_CLK_SLEEP_DISABLE

+#define __TIM2_CLK_SLEEP_ENABLE __HAL_RCC_TIM2_CLK_SLEEP_ENABLE

+#define __TIM2_FORCE_RESET __HAL_RCC_TIM2_FORCE_RESET

+#define __TIM2_RELEASE_RESET __HAL_RCC_TIM2_RELEASE_RESET

+#define __TIM3_CLK_DISABLE __HAL_RCC_TIM3_CLK_DISABLE

+#define __TIM3_CLK_ENABLE __HAL_RCC_TIM3_CLK_ENABLE

+#define __TIM3_CLK_SLEEP_DISABLE __HAL_RCC_TIM3_CLK_SLEEP_DISABLE

+#define __TIM3_CLK_SLEEP_ENABLE __HAL_RCC_TIM3_CLK_SLEEP_ENABLE

+#define __TIM3_FORCE_RESET __HAL_RCC_TIM3_FORCE_RESET

+#define __TIM3_RELEASE_RESET __HAL_RCC_TIM3_RELEASE_RESET

+#define __TIM4_CLK_DISABLE __HAL_RCC_TIM4_CLK_DISABLE

+#define __TIM4_CLK_ENABLE __HAL_RCC_TIM4_CLK_ENABLE

+#define __TIM4_CLK_SLEEP_DISABLE __HAL_RCC_TIM4_CLK_SLEEP_DISABLE

+#define __TIM4_CLK_SLEEP_ENABLE __HAL_RCC_TIM4_CLK_SLEEP_ENABLE

+#define __TIM4_FORCE_RESET __HAL_RCC_TIM4_FORCE_RESET

+#define __TIM4_RELEASE_RESET __HAL_RCC_TIM4_RELEASE_RESET

+#define __TIM5_CLK_DISABLE __HAL_RCC_TIM5_CLK_DISABLE

+#define __TIM5_CLK_ENABLE __HAL_RCC_TIM5_CLK_ENABLE

+#define __TIM5_CLK_SLEEP_DISABLE __HAL_RCC_TIM5_CLK_SLEEP_DISABLE

+#define __TIM5_CLK_SLEEP_ENABLE __HAL_RCC_TIM5_CLK_SLEEP_ENABLE

+#define __TIM5_FORCE_RESET __HAL_RCC_TIM5_FORCE_RESET

+#define __TIM5_RELEASE_RESET __HAL_RCC_TIM5_RELEASE_RESET

+#define __TIM6_CLK_DISABLE __HAL_RCC_TIM6_CLK_DISABLE

+#define __TIM6_CLK_ENABLE __HAL_RCC_TIM6_CLK_ENABLE

+#define __TIM6_CLK_SLEEP_DISABLE __HAL_RCC_TIM6_CLK_SLEEP_DISABLE

+#define __TIM6_CLK_SLEEP_ENABLE __HAL_RCC_TIM6_CLK_SLEEP_ENABLE

+#define __TIM6_FORCE_RESET __HAL_RCC_TIM6_FORCE_RESET

+#define __TIM6_RELEASE_RESET __HAL_RCC_TIM6_RELEASE_RESET

+#define __TIM7_CLK_DISABLE __HAL_RCC_TIM7_CLK_DISABLE

+#define __TIM7_CLK_ENABLE __HAL_RCC_TIM7_CLK_ENABLE

+#define __TIM7_CLK_SLEEP_DISABLE __HAL_RCC_TIM7_CLK_SLEEP_DISABLE

+#define __TIM7_CLK_SLEEP_ENABLE __HAL_RCC_TIM7_CLK_SLEEP_ENABLE

+#define __TIM7_FORCE_RESET __HAL_RCC_TIM7_FORCE_RESET

+#define __TIM7_RELEASE_RESET __HAL_RCC_TIM7_RELEASE_RESET

+#define __TIM8_CLK_DISABLE __HAL_RCC_TIM8_CLK_DISABLE

+#define __TIM8_CLK_ENABLE __HAL_RCC_TIM8_CLK_ENABLE

+#define __TIM8_CLK_SLEEP_DISABLE __HAL_RCC_TIM8_CLK_SLEEP_DISABLE

+#define __TIM8_CLK_SLEEP_ENABLE __HAL_RCC_TIM8_CLK_SLEEP_ENABLE

+#define __TIM8_FORCE_RESET __HAL_RCC_TIM8_FORCE_RESET

+#define __TIM8_RELEASE_RESET __HAL_RCC_TIM8_RELEASE_RESET

+#define __TIM9_CLK_DISABLE __HAL_RCC_TIM9_CLK_DISABLE

+#define __TIM9_CLK_ENABLE __HAL_RCC_TIM9_CLK_ENABLE

+#define __TIM9_FORCE_RESET __HAL_RCC_TIM9_FORCE_RESET

+#define __TIM9_RELEASE_RESET __HAL_RCC_TIM9_RELEASE_RESET

+#define __TSC_CLK_DISABLE __HAL_RCC_TSC_CLK_DISABLE

+#define __TSC_CLK_ENABLE __HAL_RCC_TSC_CLK_ENABLE

+#define __TSC_CLK_SLEEP_DISABLE __HAL_RCC_TSC_CLK_SLEEP_DISABLE

+#define __TSC_CLK_SLEEP_ENABLE __HAL_RCC_TSC_CLK_SLEEP_ENABLE

+#define __TSC_FORCE_RESET __HAL_RCC_TSC_FORCE_RESET

+#define __TSC_RELEASE_RESET __HAL_RCC_TSC_RELEASE_RESET

+#define __UART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE

+#define __UART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE

+#define __UART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE

+#define __UART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE

+#define __UART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET

+#define __UART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET

+#define __UART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE

+#define __UART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE

+#define __UART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE

+#define __UART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE

+#define __UART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET

+#define __UART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET

+#define __USART1_CLK_DISABLE __HAL_RCC_USART1_CLK_DISABLE

+#define __USART1_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE

+#define __USART1_CLK_SLEEP_DISABLE __HAL_RCC_USART1_CLK_SLEEP_DISABLE

+#define __USART1_CLK_SLEEP_ENABLE __HAL_RCC_USART1_CLK_SLEEP_ENABLE

+#define __USART1_FORCE_RESET __HAL_RCC_USART1_FORCE_RESET

+#define __USART1_RELEASE_RESET __HAL_RCC_USART1_RELEASE_RESET

+#define __USART2_CLK_DISABLE __HAL_RCC_USART2_CLK_DISABLE

+#define __USART2_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE

+#define __USART2_CLK_SLEEP_DISABLE __HAL_RCC_USART2_CLK_SLEEP_DISABLE

+#define __USART2_CLK_SLEEP_ENABLE __HAL_RCC_USART2_CLK_SLEEP_ENABLE

+#define __USART2_FORCE_RESET __HAL_RCC_USART2_FORCE_RESET

+#define __USART2_RELEASE_RESET __HAL_RCC_USART2_RELEASE_RESET

+#define __USART3_CLK_DISABLE __HAL_RCC_USART3_CLK_DISABLE

+#define __USART3_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE

+#define __USART3_CLK_SLEEP_DISABLE __HAL_RCC_USART3_CLK_SLEEP_DISABLE

+#define __USART3_CLK_SLEEP_ENABLE __HAL_RCC_USART3_CLK_SLEEP_ENABLE

+#define __USART3_FORCE_RESET __HAL_RCC_USART3_FORCE_RESET

+#define __USART3_RELEASE_RESET __HAL_RCC_USART3_RELEASE_RESET

+#define __USART4_CLK_DISABLE        __HAL_RCC_UART4_CLK_DISABLE

+#define __USART4_CLK_ENABLE         __HAL_RCC_UART4_CLK_ENABLE

+#define __USART4_CLK_SLEEP_ENABLE   __HAL_RCC_UART4_CLK_SLEEP_ENABLE

+#define __USART4_CLK_SLEEP_DISABLE  __HAL_RCC_UART4_CLK_SLEEP_DISABLE

+#define __USART4_FORCE_RESET        __HAL_RCC_UART4_FORCE_RESET

+#define __USART4_RELEASE_RESET      __HAL_RCC_UART4_RELEASE_RESET

+#define __USART5_CLK_DISABLE        __HAL_RCC_UART5_CLK_DISABLE

+#define __USART5_CLK_ENABLE         __HAL_RCC_UART5_CLK_ENABLE

+#define __USART5_CLK_SLEEP_ENABLE   __HAL_RCC_UART5_CLK_SLEEP_ENABLE

+#define __USART5_CLK_SLEEP_DISABLE  __HAL_RCC_UART5_CLK_SLEEP_DISABLE

+#define __USART5_FORCE_RESET        __HAL_RCC_UART5_FORCE_RESET

+#define __USART5_RELEASE_RESET      __HAL_RCC_UART5_RELEASE_RESET

+#define __USART7_CLK_DISABLE        __HAL_RCC_UART7_CLK_DISABLE

+#define __USART7_CLK_ENABLE         __HAL_RCC_UART7_CLK_ENABLE

+#define __USART7_FORCE_RESET        __HAL_RCC_UART7_FORCE_RESET

+#define __USART7_RELEASE_RESET      __HAL_RCC_UART7_RELEASE_RESET

+#define __USART8_CLK_DISABLE        __HAL_RCC_UART8_CLK_DISABLE

+#define __USART8_CLK_ENABLE         __HAL_RCC_UART8_CLK_ENABLE

+#define __USART8_FORCE_RESET        __HAL_RCC_UART8_FORCE_RESET

+#define __USART8_RELEASE_RESET      __HAL_RCC_UART8_RELEASE_RESET

+#define __USB_CLK_DISABLE         __HAL_RCC_USB_CLK_DISABLE

+#define __USB_CLK_ENABLE          __HAL_RCC_USB_CLK_ENABLE

+#define __USB_FORCE_RESET         __HAL_RCC_USB_FORCE_RESET

+#define __USB_CLK_SLEEP_ENABLE    __HAL_RCC_USB_CLK_SLEEP_ENABLE

+#define __USB_CLK_SLEEP_DISABLE   __HAL_RCC_USB_CLK_SLEEP_DISABLE

+#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE

+#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE

+#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET

+

+#if defined(STM32H7)

+#define __HAL_RCC_WWDG_CLK_DISABLE   __HAL_RCC_WWDG1_CLK_DISABLE

+#define __HAL_RCC_WWDG_CLK_ENABLE   __HAL_RCC_WWDG1_CLK_ENABLE

+#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE  __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE

+#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE  __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE

+

+#define __HAL_RCC_WWDG_FORCE_RESET    ((void)0U)  /* Not available on the STM32H7*/

+#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/

+

+

+#define  __HAL_RCC_WWDG_IS_CLK_ENABLED    __HAL_RCC_WWDG1_IS_CLK_ENABLED

+#define  __HAL_RCC_WWDG_IS_CLK_DISABLED  __HAL_RCC_WWDG1_IS_CLK_DISABLED

+#endif

+

+#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE

+#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE

+#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE

+#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE

+#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET

+#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET

+

+#define __TIM21_CLK_ENABLE   __HAL_RCC_TIM21_CLK_ENABLE

+#define __TIM21_CLK_DISABLE   __HAL_RCC_TIM21_CLK_DISABLE

+#define __TIM21_FORCE_RESET   __HAL_RCC_TIM21_FORCE_RESET

+#define __TIM21_RELEASE_RESET  __HAL_RCC_TIM21_RELEASE_RESET

+#define __TIM21_CLK_SLEEP_ENABLE   __HAL_RCC_TIM21_CLK_SLEEP_ENABLE

+#define __TIM21_CLK_SLEEP_DISABLE   __HAL_RCC_TIM21_CLK_SLEEP_DISABLE

+#define __TIM22_CLK_ENABLE   __HAL_RCC_TIM22_CLK_ENABLE

+#define __TIM22_CLK_DISABLE   __HAL_RCC_TIM22_CLK_DISABLE

+#define __TIM22_FORCE_RESET   __HAL_RCC_TIM22_FORCE_RESET

+#define __TIM22_RELEASE_RESET  __HAL_RCC_TIM22_RELEASE_RESET

+#define __TIM22_CLK_SLEEP_ENABLE   __HAL_RCC_TIM22_CLK_SLEEP_ENABLE

+#define __TIM22_CLK_SLEEP_DISABLE   __HAL_RCC_TIM22_CLK_SLEEP_DISABLE

+#define __CRS_CLK_DISABLE __HAL_RCC_CRS_CLK_DISABLE

+#define __CRS_CLK_ENABLE __HAL_RCC_CRS_CLK_ENABLE

+#define __CRS_CLK_SLEEP_DISABLE __HAL_RCC_CRS_CLK_SLEEP_DISABLE

+#define __CRS_CLK_SLEEP_ENABLE __HAL_RCC_CRS_CLK_SLEEP_ENABLE

+#define __CRS_FORCE_RESET __HAL_RCC_CRS_FORCE_RESET

+#define __CRS_RELEASE_RESET __HAL_RCC_CRS_RELEASE_RESET

+#define __RCC_BACKUPRESET_FORCE __HAL_RCC_BACKUPRESET_FORCE

+#define __RCC_BACKUPRESET_RELEASE __HAL_RCC_BACKUPRESET_RELEASE

+

+#define __USB_OTG_FS_FORCE_RESET  __HAL_RCC_USB_OTG_FS_FORCE_RESET

+#define __USB_OTG_FS_RELEASE_RESET  __HAL_RCC_USB_OTG_FS_RELEASE_RESET

+#define __USB_OTG_FS_CLK_SLEEP_ENABLE  __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE

+#define __USB_OTG_FS_CLK_SLEEP_DISABLE  __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE

+#define __USB_OTG_HS_CLK_DISABLE  __HAL_RCC_USB_OTG_HS_CLK_DISABLE

+#define __USB_OTG_HS_CLK_ENABLE          __HAL_RCC_USB_OTG_HS_CLK_ENABLE

+#define __USB_OTG_HS_ULPI_CLK_ENABLE  __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE

+#define __USB_OTG_HS_ULPI_CLK_DISABLE  __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE

+#define __TIM9_CLK_SLEEP_ENABLE          __HAL_RCC_TIM9_CLK_SLEEP_ENABLE

+#define __TIM9_CLK_SLEEP_DISABLE  __HAL_RCC_TIM9_CLK_SLEEP_DISABLE

+#define __TIM10_CLK_SLEEP_ENABLE  __HAL_RCC_TIM10_CLK_SLEEP_ENABLE

+#define __TIM10_CLK_SLEEP_DISABLE  __HAL_RCC_TIM10_CLK_SLEEP_DISABLE

+#define __TIM11_CLK_SLEEP_ENABLE  __HAL_RCC_TIM11_CLK_SLEEP_ENABLE

+#define __TIM11_CLK_SLEEP_DISABLE  __HAL_RCC_TIM11_CLK_SLEEP_DISABLE

+#define __ETHMACPTP_CLK_SLEEP_ENABLE  __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE

+#define __ETHMACPTP_CLK_SLEEP_DISABLE  __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE

+#define __ETHMACPTP_CLK_ENABLE          __HAL_RCC_ETHMACPTP_CLK_ENABLE

+#define __ETHMACPTP_CLK_DISABLE          __HAL_RCC_ETHMACPTP_CLK_DISABLE

+#define __HASH_CLK_ENABLE          __HAL_RCC_HASH_CLK_ENABLE

+#define __HASH_FORCE_RESET          __HAL_RCC_HASH_FORCE_RESET

+#define __HASH_RELEASE_RESET          __HAL_RCC_HASH_RELEASE_RESET

+#define __HASH_CLK_SLEEP_ENABLE          __HAL_RCC_HASH_CLK_SLEEP_ENABLE

+#define __HASH_CLK_SLEEP_DISABLE  __HAL_RCC_HASH_CLK_SLEEP_DISABLE

+#define __HASH_CLK_DISABLE            __HAL_RCC_HASH_CLK_DISABLE

+#define __SPI5_CLK_ENABLE          __HAL_RCC_SPI5_CLK_ENABLE

+#define __SPI5_CLK_DISABLE              __HAL_RCC_SPI5_CLK_DISABLE

+#define __SPI5_FORCE_RESET          __HAL_RCC_SPI5_FORCE_RESET

+#define __SPI5_RELEASE_RESET          __HAL_RCC_SPI5_RELEASE_RESET

+#define __SPI5_CLK_SLEEP_ENABLE          __HAL_RCC_SPI5_CLK_SLEEP_ENABLE

+#define __SPI5_CLK_SLEEP_DISABLE  __HAL_RCC_SPI5_CLK_SLEEP_DISABLE

+#define __SPI6_CLK_ENABLE          __HAL_RCC_SPI6_CLK_ENABLE

+#define __SPI6_CLK_DISABLE          __HAL_RCC_SPI6_CLK_DISABLE

+#define __SPI6_FORCE_RESET          __HAL_RCC_SPI6_FORCE_RESET

+#define __SPI6_RELEASE_RESET         __HAL_RCC_SPI6_RELEASE_RESET

+#define __SPI6_CLK_SLEEP_ENABLE          __HAL_RCC_SPI6_CLK_SLEEP_ENABLE

+#define __SPI6_CLK_SLEEP_DISABLE  __HAL_RCC_SPI6_CLK_SLEEP_DISABLE

+#define __LTDC_CLK_ENABLE          __HAL_RCC_LTDC_CLK_ENABLE

+#define __LTDC_CLK_DISABLE          __HAL_RCC_LTDC_CLK_DISABLE

+#define __LTDC_FORCE_RESET          __HAL_RCC_LTDC_FORCE_RESET

+#define __LTDC_RELEASE_RESET          __HAL_RCC_LTDC_RELEASE_RESET

+#define __LTDC_CLK_SLEEP_ENABLE          __HAL_RCC_LTDC_CLK_SLEEP_ENABLE

+#define __ETHMAC_CLK_SLEEP_ENABLE  __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE

+#define __ETHMAC_CLK_SLEEP_DISABLE  __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE

+#define __ETHMACTX_CLK_SLEEP_ENABLE  __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE

+#define __ETHMACTX_CLK_SLEEP_DISABLE  __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE

+#define __ETHMACRX_CLK_SLEEP_ENABLE  __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE

+#define __ETHMACRX_CLK_SLEEP_DISABLE  __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE

+#define __TIM12_CLK_SLEEP_ENABLE  __HAL_RCC_TIM12_CLK_SLEEP_ENABLE

+#define __TIM12_CLK_SLEEP_DISABLE  __HAL_RCC_TIM12_CLK_SLEEP_DISABLE

+#define __TIM13_CLK_SLEEP_ENABLE  __HAL_RCC_TIM13_CLK_SLEEP_ENABLE

+#define __TIM13_CLK_SLEEP_DISABLE  __HAL_RCC_TIM13_CLK_SLEEP_DISABLE

+#define __TIM14_CLK_SLEEP_ENABLE  __HAL_RCC_TIM14_CLK_SLEEP_ENABLE

+#define __TIM14_CLK_SLEEP_DISABLE  __HAL_RCC_TIM14_CLK_SLEEP_DISABLE

+#define __BKPSRAM_CLK_ENABLE          __HAL_RCC_BKPSRAM_CLK_ENABLE

+#define __BKPSRAM_CLK_DISABLE          __HAL_RCC_BKPSRAM_CLK_DISABLE

+#define __BKPSRAM_CLK_SLEEP_ENABLE  __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE

+#define __BKPSRAM_CLK_SLEEP_DISABLE  __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE

+#define __CCMDATARAMEN_CLK_ENABLE  __HAL_RCC_CCMDATARAMEN_CLK_ENABLE

+#define __CCMDATARAMEN_CLK_DISABLE  __HAL_RCC_CCMDATARAMEN_CLK_DISABLE

+#define __USART6_CLK_ENABLE          __HAL_RCC_USART6_CLK_ENABLE

+#define __USART6_CLK_DISABLE          __HAL_RCC_USART6_CLK_DISABLE

+#define __USART6_FORCE_RESET        __HAL_RCC_USART6_FORCE_RESET

+#define __USART6_RELEASE_RESET        __HAL_RCC_USART6_RELEASE_RESET

+#define __USART6_CLK_SLEEP_ENABLE  __HAL_RCC_USART6_CLK_SLEEP_ENABLE

+#define __USART6_CLK_SLEEP_DISABLE  __HAL_RCC_USART6_CLK_SLEEP_DISABLE

+#define __SPI4_CLK_ENABLE          __HAL_RCC_SPI4_CLK_ENABLE

+#define __SPI4_CLK_DISABLE          __HAL_RCC_SPI4_CLK_DISABLE

+#define __SPI4_FORCE_RESET          __HAL_RCC_SPI4_FORCE_RESET

+#define __SPI4_RELEASE_RESET        __HAL_RCC_SPI4_RELEASE_RESET

+#define __SPI4_CLK_SLEEP_ENABLE   __HAL_RCC_SPI4_CLK_SLEEP_ENABLE

+#define __SPI4_CLK_SLEEP_DISABLE  __HAL_RCC_SPI4_CLK_SLEEP_DISABLE

+#define __GPIOI_CLK_ENABLE          __HAL_RCC_GPIOI_CLK_ENABLE

+#define __GPIOI_CLK_DISABLE          __HAL_RCC_GPIOI_CLK_DISABLE

+#define __GPIOI_FORCE_RESET          __HAL_RCC_GPIOI_FORCE_RESET

+#define __GPIOI_RELEASE_RESET          __HAL_RCC_GPIOI_RELEASE_RESET

+#define __GPIOI_CLK_SLEEP_ENABLE  __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE

+#define __GPIOI_CLK_SLEEP_DISABLE  __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE

+#define __GPIOJ_CLK_ENABLE          __HAL_RCC_GPIOJ_CLK_ENABLE

+#define __GPIOJ_CLK_DISABLE          __HAL_RCC_GPIOJ_CLK_DISABLE

+#define __GPIOJ_FORCE_RESET         __HAL_RCC_GPIOJ_FORCE_RESET

+#define __GPIOJ_RELEASE_RESET          __HAL_RCC_GPIOJ_RELEASE_RESET

+#define __GPIOJ_CLK_SLEEP_ENABLE  __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE

+#define __GPIOJ_CLK_SLEEP_DISABLE  __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE

+#define __GPIOK_CLK_ENABLE          __HAL_RCC_GPIOK_CLK_ENABLE

+#define __GPIOK_CLK_DISABLE          __HAL_RCC_GPIOK_CLK_DISABLE

+#define __GPIOK_RELEASE_RESET          __HAL_RCC_GPIOK_RELEASE_RESET

+#define __GPIOK_CLK_SLEEP_ENABLE  __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE

+#define __GPIOK_CLK_SLEEP_DISABLE  __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE

+#define __ETH_CLK_ENABLE          __HAL_RCC_ETH_CLK_ENABLE

+#define __ETH_CLK_DISABLE          __HAL_RCC_ETH_CLK_DISABLE

+#define __DCMI_CLK_ENABLE          __HAL_RCC_DCMI_CLK_ENABLE

+#define __DCMI_CLK_DISABLE          __HAL_RCC_DCMI_CLK_DISABLE

+#define __DCMI_FORCE_RESET          __HAL_RCC_DCMI_FORCE_RESET

+#define __DCMI_RELEASE_RESET          __HAL_RCC_DCMI_RELEASE_RESET

+#define __DCMI_CLK_SLEEP_ENABLE   __HAL_RCC_DCMI_CLK_SLEEP_ENABLE

+#define __DCMI_CLK_SLEEP_DISABLE  __HAL_RCC_DCMI_CLK_SLEEP_DISABLE

+#define __UART7_CLK_ENABLE          __HAL_RCC_UART7_CLK_ENABLE

+#define __UART7_CLK_DISABLE          __HAL_RCC_UART7_CLK_DISABLE

+#define __UART7_RELEASE_RESET       __HAL_RCC_UART7_RELEASE_RESET

+#define __UART7_FORCE_RESET       __HAL_RCC_UART7_FORCE_RESET

+#define __UART7_CLK_SLEEP_ENABLE  __HAL_RCC_UART7_CLK_SLEEP_ENABLE

+#define __UART7_CLK_SLEEP_DISABLE  __HAL_RCC_UART7_CLK_SLEEP_DISABLE

+#define __UART8_CLK_ENABLE          __HAL_RCC_UART8_CLK_ENABLE

+#define __UART8_CLK_DISABLE          __HAL_RCC_UART8_CLK_DISABLE

+#define __UART8_FORCE_RESET          __HAL_RCC_UART8_FORCE_RESET

+#define __UART8_RELEASE_RESET          __HAL_RCC_UART8_RELEASE_RESET

+#define __UART8_CLK_SLEEP_ENABLE  __HAL_RCC_UART8_CLK_SLEEP_ENABLE

+#define __UART8_CLK_SLEEP_DISABLE  __HAL_RCC_UART8_CLK_SLEEP_DISABLE

+#define __OTGHS_CLK_SLEEP_ENABLE  __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE

+#define __OTGHS_CLK_SLEEP_DISABLE  __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE

+#define __OTGHS_FORCE_RESET          __HAL_RCC_USB_OTG_HS_FORCE_RESET

+#define __OTGHS_RELEASE_RESET          __HAL_RCC_USB_OTG_HS_RELEASE_RESET

+#define __OTGHSULPI_CLK_SLEEP_ENABLE  __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE

+#define __OTGHSULPI_CLK_SLEEP_DISABLE  __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE

+#define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE  __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE

+#define __HAL_RCC_OTGHS_CLK_SLEEP_DISABLE  __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE

+#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED

+#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED

+#define __HAL_RCC_OTGHS_FORCE_RESET          __HAL_RCC_USB_OTG_HS_FORCE_RESET

+#define __HAL_RCC_OTGHS_RELEASE_RESET          __HAL_RCC_USB_OTG_HS_RELEASE_RESET

+#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE      __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE

+#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE     __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE

+#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED  __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED

+#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED

+#define __SRAM3_CLK_SLEEP_ENABLE       __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE

+#define __CAN2_CLK_SLEEP_ENABLE        __HAL_RCC_CAN2_CLK_SLEEP_ENABLE

+#define __CAN2_CLK_SLEEP_DISABLE       __HAL_RCC_CAN2_CLK_SLEEP_DISABLE

+#define __DAC_CLK_SLEEP_ENABLE         __HAL_RCC_DAC_CLK_SLEEP_ENABLE

+#define __DAC_CLK_SLEEP_DISABLE        __HAL_RCC_DAC_CLK_SLEEP_DISABLE

+#define __ADC2_CLK_SLEEP_ENABLE        __HAL_RCC_ADC2_CLK_SLEEP_ENABLE

+#define __ADC2_CLK_SLEEP_DISABLE       __HAL_RCC_ADC2_CLK_SLEEP_DISABLE

+#define __ADC3_CLK_SLEEP_ENABLE        __HAL_RCC_ADC3_CLK_SLEEP_ENABLE

+#define __ADC3_CLK_SLEEP_DISABLE       __HAL_RCC_ADC3_CLK_SLEEP_DISABLE

+#define __FSMC_FORCE_RESET             __HAL_RCC_FSMC_FORCE_RESET

+#define __FSMC_RELEASE_RESET           __HAL_RCC_FSMC_RELEASE_RESET

+#define __FSMC_CLK_SLEEP_ENABLE        __HAL_RCC_FSMC_CLK_SLEEP_ENABLE

+#define __FSMC_CLK_SLEEP_DISABLE       __HAL_RCC_FSMC_CLK_SLEEP_DISABLE

+#define __SDIO_FORCE_RESET             __HAL_RCC_SDIO_FORCE_RESET

+#define __SDIO_RELEASE_RESET           __HAL_RCC_SDIO_RELEASE_RESET

+#define __SDIO_CLK_SLEEP_DISABLE       __HAL_RCC_SDIO_CLK_SLEEP_DISABLE

+#define __SDIO_CLK_SLEEP_ENABLE        __HAL_RCC_SDIO_CLK_SLEEP_ENABLE

+#define __DMA2D_CLK_ENABLE             __HAL_RCC_DMA2D_CLK_ENABLE

+#define __DMA2D_CLK_DISABLE            __HAL_RCC_DMA2D_CLK_DISABLE

+#define __DMA2D_FORCE_RESET            __HAL_RCC_DMA2D_FORCE_RESET

+#define __DMA2D_RELEASE_RESET          __HAL_RCC_DMA2D_RELEASE_RESET

+#define __DMA2D_CLK_SLEEP_ENABLE       __HAL_RCC_DMA2D_CLK_SLEEP_ENABLE

+#define __DMA2D_CLK_SLEEP_DISABLE      __HAL_RCC_DMA2D_CLK_SLEEP_DISABLE

+

+/* alias define maintained for legacy */

+#define __HAL_RCC_OTGFS_FORCE_RESET    __HAL_RCC_USB_OTG_FS_FORCE_RESET

+#define __HAL_RCC_OTGFS_RELEASE_RESET  __HAL_RCC_USB_OTG_FS_RELEASE_RESET

+

+#define __ADC12_CLK_ENABLE          __HAL_RCC_ADC12_CLK_ENABLE

+#define __ADC12_CLK_DISABLE         __HAL_RCC_ADC12_CLK_DISABLE

+#define __ADC34_CLK_ENABLE          __HAL_RCC_ADC34_CLK_ENABLE

+#define __ADC34_CLK_DISABLE         __HAL_RCC_ADC34_CLK_DISABLE

+#define __DAC2_CLK_ENABLE           __HAL_RCC_DAC2_CLK_ENABLE

+#define __DAC2_CLK_DISABLE          __HAL_RCC_DAC2_CLK_DISABLE

+#define __TIM18_CLK_ENABLE          __HAL_RCC_TIM18_CLK_ENABLE

+#define __TIM18_CLK_DISABLE         __HAL_RCC_TIM18_CLK_DISABLE

+#define __TIM19_CLK_ENABLE          __HAL_RCC_TIM19_CLK_ENABLE

+#define __TIM19_CLK_DISABLE         __HAL_RCC_TIM19_CLK_DISABLE

+#define __TIM20_CLK_ENABLE          __HAL_RCC_TIM20_CLK_ENABLE

+#define __TIM20_CLK_DISABLE         __HAL_RCC_TIM20_CLK_DISABLE

+#define __HRTIM1_CLK_ENABLE         __HAL_RCC_HRTIM1_CLK_ENABLE

+#define __HRTIM1_CLK_DISABLE        __HAL_RCC_HRTIM1_CLK_DISABLE

+#define __SDADC1_CLK_ENABLE         __HAL_RCC_SDADC1_CLK_ENABLE

+#define __SDADC2_CLK_ENABLE         __HAL_RCC_SDADC2_CLK_ENABLE

+#define __SDADC3_CLK_ENABLE         __HAL_RCC_SDADC3_CLK_ENABLE

+#define __SDADC1_CLK_DISABLE        __HAL_RCC_SDADC1_CLK_DISABLE

+#define __SDADC2_CLK_DISABLE        __HAL_RCC_SDADC2_CLK_DISABLE

+#define __SDADC3_CLK_DISABLE        __HAL_RCC_SDADC3_CLK_DISABLE

+

+#define __ADC12_FORCE_RESET         __HAL_RCC_ADC12_FORCE_RESET

+#define __ADC12_RELEASE_RESET       __HAL_RCC_ADC12_RELEASE_RESET

+#define __ADC34_FORCE_RESET         __HAL_RCC_ADC34_FORCE_RESET

+#define __ADC34_RELEASE_RESET       __HAL_RCC_ADC34_RELEASE_RESET

+#define __DAC2_FORCE_RESET          __HAL_RCC_DAC2_FORCE_RESET

+#define __DAC2_RELEASE_RESET        __HAL_RCC_DAC2_RELEASE_RESET

+#define __TIM18_FORCE_RESET         __HAL_RCC_TIM18_FORCE_RESET

+#define __TIM18_RELEASE_RESET       __HAL_RCC_TIM18_RELEASE_RESET

+#define __TIM19_FORCE_RESET         __HAL_RCC_TIM19_FORCE_RESET

+#define __TIM19_RELEASE_RESET       __HAL_RCC_TIM19_RELEASE_RESET

+#define __TIM20_FORCE_RESET         __HAL_RCC_TIM20_FORCE_RESET

+#define __TIM20_RELEASE_RESET       __HAL_RCC_TIM20_RELEASE_RESET

+#define __HRTIM1_FORCE_RESET        __HAL_RCC_HRTIM1_FORCE_RESET

+#define __HRTIM1_RELEASE_RESET      __HAL_RCC_HRTIM1_RELEASE_RESET

+#define __SDADC1_FORCE_RESET        __HAL_RCC_SDADC1_FORCE_RESET

+#define __SDADC2_FORCE_RESET        __HAL_RCC_SDADC2_FORCE_RESET

+#define __SDADC3_FORCE_RESET        __HAL_RCC_SDADC3_FORCE_RESET

+#define __SDADC1_RELEASE_RESET      __HAL_RCC_SDADC1_RELEASE_RESET

+#define __SDADC2_RELEASE_RESET      __HAL_RCC_SDADC2_RELEASE_RESET

+#define __SDADC3_RELEASE_RESET      __HAL_RCC_SDADC3_RELEASE_RESET

+

+#define __ADC1_IS_CLK_ENABLED       __HAL_RCC_ADC1_IS_CLK_ENABLED

+#define __ADC1_IS_CLK_DISABLED      __HAL_RCC_ADC1_IS_CLK_DISABLED

+#define __ADC12_IS_CLK_ENABLED      __HAL_RCC_ADC12_IS_CLK_ENABLED

+#define __ADC12_IS_CLK_DISABLED     __HAL_RCC_ADC12_IS_CLK_DISABLED

+#define __ADC34_IS_CLK_ENABLED      __HAL_RCC_ADC34_IS_CLK_ENABLED

+#define __ADC34_IS_CLK_DISABLED     __HAL_RCC_ADC34_IS_CLK_DISABLED

+#define __CEC_IS_CLK_ENABLED        __HAL_RCC_CEC_IS_CLK_ENABLED

+#define __CEC_IS_CLK_DISABLED       __HAL_RCC_CEC_IS_CLK_DISABLED

+#define __CRC_IS_CLK_ENABLED        __HAL_RCC_CRC_IS_CLK_ENABLED

+#define __CRC_IS_CLK_DISABLED       __HAL_RCC_CRC_IS_CLK_DISABLED

+#define __DAC1_IS_CLK_ENABLED       __HAL_RCC_DAC1_IS_CLK_ENABLED

+#define __DAC1_IS_CLK_DISABLED      __HAL_RCC_DAC1_IS_CLK_DISABLED

+#define __DAC2_IS_CLK_ENABLED       __HAL_RCC_DAC2_IS_CLK_ENABLED

+#define __DAC2_IS_CLK_DISABLED      __HAL_RCC_DAC2_IS_CLK_DISABLED

+#define __DMA1_IS_CLK_ENABLED       __HAL_RCC_DMA1_IS_CLK_ENABLED

+#define __DMA1_IS_CLK_DISABLED      __HAL_RCC_DMA1_IS_CLK_DISABLED

+#define __DMA2_IS_CLK_ENABLED       __HAL_RCC_DMA2_IS_CLK_ENABLED

+#define __DMA2_IS_CLK_DISABLED      __HAL_RCC_DMA2_IS_CLK_DISABLED

+#define __FLITF_IS_CLK_ENABLED      __HAL_RCC_FLITF_IS_CLK_ENABLED

+#define __FLITF_IS_CLK_DISABLED     __HAL_RCC_FLITF_IS_CLK_DISABLED

+#define __FMC_IS_CLK_ENABLED        __HAL_RCC_FMC_IS_CLK_ENABLED

+#define __FMC_IS_CLK_DISABLED       __HAL_RCC_FMC_IS_CLK_DISABLED

+#define __GPIOA_IS_CLK_ENABLED      __HAL_RCC_GPIOA_IS_CLK_ENABLED

+#define __GPIOA_IS_CLK_DISABLED     __HAL_RCC_GPIOA_IS_CLK_DISABLED

+#define __GPIOB_IS_CLK_ENABLED      __HAL_RCC_GPIOB_IS_CLK_ENABLED

+#define __GPIOB_IS_CLK_DISABLED     __HAL_RCC_GPIOB_IS_CLK_DISABLED

+#define __GPIOC_IS_CLK_ENABLED      __HAL_RCC_GPIOC_IS_CLK_ENABLED

+#define __GPIOC_IS_CLK_DISABLED     __HAL_RCC_GPIOC_IS_CLK_DISABLED

+#define __GPIOD_IS_CLK_ENABLED      __HAL_RCC_GPIOD_IS_CLK_ENABLED

+#define __GPIOD_IS_CLK_DISABLED     __HAL_RCC_GPIOD_IS_CLK_DISABLED

+#define __GPIOE_IS_CLK_ENABLED      __HAL_RCC_GPIOE_IS_CLK_ENABLED

+#define __GPIOE_IS_CLK_DISABLED     __HAL_RCC_GPIOE_IS_CLK_DISABLED

+#define __GPIOF_IS_CLK_ENABLED      __HAL_RCC_GPIOF_IS_CLK_ENABLED

+#define __GPIOF_IS_CLK_DISABLED     __HAL_RCC_GPIOF_IS_CLK_DISABLED

+#define __GPIOG_IS_CLK_ENABLED      __HAL_RCC_GPIOG_IS_CLK_ENABLED

+#define __GPIOG_IS_CLK_DISABLED     __HAL_RCC_GPIOG_IS_CLK_DISABLED

+#define __GPIOH_IS_CLK_ENABLED      __HAL_RCC_GPIOH_IS_CLK_ENABLED

+#define __GPIOH_IS_CLK_DISABLED     __HAL_RCC_GPIOH_IS_CLK_DISABLED

+#define __HRTIM1_IS_CLK_ENABLED     __HAL_RCC_HRTIM1_IS_CLK_ENABLED

+#define __HRTIM1_IS_CLK_DISABLED    __HAL_RCC_HRTIM1_IS_CLK_DISABLED

+#define __I2C1_IS_CLK_ENABLED       __HAL_RCC_I2C1_IS_CLK_ENABLED

+#define __I2C1_IS_CLK_DISABLED      __HAL_RCC_I2C1_IS_CLK_DISABLED

+#define __I2C2_IS_CLK_ENABLED       __HAL_RCC_I2C2_IS_CLK_ENABLED

+#define __I2C2_IS_CLK_DISABLED      __HAL_RCC_I2C2_IS_CLK_DISABLED

+#define __I2C3_IS_CLK_ENABLED       __HAL_RCC_I2C3_IS_CLK_ENABLED

+#define __I2C3_IS_CLK_DISABLED      __HAL_RCC_I2C3_IS_CLK_DISABLED

+#define __PWR_IS_CLK_ENABLED        __HAL_RCC_PWR_IS_CLK_ENABLED

+#define __PWR_IS_CLK_DISABLED       __HAL_RCC_PWR_IS_CLK_DISABLED

+#define __SYSCFG_IS_CLK_ENABLED     __HAL_RCC_SYSCFG_IS_CLK_ENABLED

+#define __SYSCFG_IS_CLK_DISABLED    __HAL_RCC_SYSCFG_IS_CLK_DISABLED

+#define __SPI1_IS_CLK_ENABLED       __HAL_RCC_SPI1_IS_CLK_ENABLED

+#define __SPI1_IS_CLK_DISABLED      __HAL_RCC_SPI1_IS_CLK_DISABLED

+#define __SPI2_IS_CLK_ENABLED       __HAL_RCC_SPI2_IS_CLK_ENABLED

+#define __SPI2_IS_CLK_DISABLED      __HAL_RCC_SPI2_IS_CLK_DISABLED

+#define __SPI3_IS_CLK_ENABLED       __HAL_RCC_SPI3_IS_CLK_ENABLED

+#define __SPI3_IS_CLK_DISABLED      __HAL_RCC_SPI3_IS_CLK_DISABLED

+#define __SPI4_IS_CLK_ENABLED       __HAL_RCC_SPI4_IS_CLK_ENABLED

+#define __SPI4_IS_CLK_DISABLED      __HAL_RCC_SPI4_IS_CLK_DISABLED

+#define __SDADC1_IS_CLK_ENABLED     __HAL_RCC_SDADC1_IS_CLK_ENABLED

+#define __SDADC1_IS_CLK_DISABLED    __HAL_RCC_SDADC1_IS_CLK_DISABLED

+#define __SDADC2_IS_CLK_ENABLED     __HAL_RCC_SDADC2_IS_CLK_ENABLED

+#define __SDADC2_IS_CLK_DISABLED    __HAL_RCC_SDADC2_IS_CLK_DISABLED

+#define __SDADC3_IS_CLK_ENABLED     __HAL_RCC_SDADC3_IS_CLK_ENABLED

+#define __SDADC3_IS_CLK_DISABLED    __HAL_RCC_SDADC3_IS_CLK_DISABLED

+#define __SRAM_IS_CLK_ENABLED       __HAL_RCC_SRAM_IS_CLK_ENABLED

+#define __SRAM_IS_CLK_DISABLED      __HAL_RCC_SRAM_IS_CLK_DISABLED

+#define __TIM1_IS_CLK_ENABLED       __HAL_RCC_TIM1_IS_CLK_ENABLED

+#define __TIM1_IS_CLK_DISABLED      __HAL_RCC_TIM1_IS_CLK_DISABLED

+#define __TIM2_IS_CLK_ENABLED       __HAL_RCC_TIM2_IS_CLK_ENABLED

+#define __TIM2_IS_CLK_DISABLED      __HAL_RCC_TIM2_IS_CLK_DISABLED

+#define __TIM3_IS_CLK_ENABLED       __HAL_RCC_TIM3_IS_CLK_ENABLED

+#define __TIM3_IS_CLK_DISABLED      __HAL_RCC_TIM3_IS_CLK_DISABLED

+#define __TIM4_IS_CLK_ENABLED       __HAL_RCC_TIM4_IS_CLK_ENABLED

+#define __TIM4_IS_CLK_DISABLED      __HAL_RCC_TIM4_IS_CLK_DISABLED

+#define __TIM5_IS_CLK_ENABLED       __HAL_RCC_TIM5_IS_CLK_ENABLED

+#define __TIM5_IS_CLK_DISABLED      __HAL_RCC_TIM5_IS_CLK_DISABLED

+#define __TIM6_IS_CLK_ENABLED       __HAL_RCC_TIM6_IS_CLK_ENABLED

+#define __TIM6_IS_CLK_DISABLED      __HAL_RCC_TIM6_IS_CLK_DISABLED

+#define __TIM7_IS_CLK_ENABLED       __HAL_RCC_TIM7_IS_CLK_ENABLED

+#define __TIM7_IS_CLK_DISABLED      __HAL_RCC_TIM7_IS_CLK_DISABLED

+#define __TIM8_IS_CLK_ENABLED       __HAL_RCC_TIM8_IS_CLK_ENABLED

+#define __TIM8_IS_CLK_DISABLED      __HAL_RCC_TIM8_IS_CLK_DISABLED

+#define __TIM12_IS_CLK_ENABLED      __HAL_RCC_TIM12_IS_CLK_ENABLED

+#define __TIM12_IS_CLK_DISABLED     __HAL_RCC_TIM12_IS_CLK_DISABLED

+#define __TIM13_IS_CLK_ENABLED      __HAL_RCC_TIM13_IS_CLK_ENABLED

+#define __TIM13_IS_CLK_DISABLED     __HAL_RCC_TIM13_IS_CLK_DISABLED

+#define __TIM14_IS_CLK_ENABLED      __HAL_RCC_TIM14_IS_CLK_ENABLED

+#define __TIM14_IS_CLK_DISABLED     __HAL_RCC_TIM14_IS_CLK_DISABLED

+#define __TIM15_IS_CLK_ENABLED      __HAL_RCC_TIM15_IS_CLK_ENABLED

+#define __TIM15_IS_CLK_DISABLED     __HAL_RCC_TIM15_IS_CLK_DISABLED

+#define __TIM16_IS_CLK_ENABLED      __HAL_RCC_TIM16_IS_CLK_ENABLED

+#define __TIM16_IS_CLK_DISABLED     __HAL_RCC_TIM16_IS_CLK_DISABLED

+#define __TIM17_IS_CLK_ENABLED      __HAL_RCC_TIM17_IS_CLK_ENABLED

+#define __TIM17_IS_CLK_DISABLED     __HAL_RCC_TIM17_IS_CLK_DISABLED

+#define __TIM18_IS_CLK_ENABLED      __HAL_RCC_TIM18_IS_CLK_ENABLED

+#define __TIM18_IS_CLK_DISABLED     __HAL_RCC_TIM18_IS_CLK_DISABLED

+#define __TIM19_IS_CLK_ENABLED      __HAL_RCC_TIM19_IS_CLK_ENABLED

+#define __TIM19_IS_CLK_DISABLED     __HAL_RCC_TIM19_IS_CLK_DISABLED

+#define __TIM20_IS_CLK_ENABLED      __HAL_RCC_TIM20_IS_CLK_ENABLED

+#define __TIM20_IS_CLK_DISABLED     __HAL_RCC_TIM20_IS_CLK_DISABLED

+#define __TSC_IS_CLK_ENABLED        __HAL_RCC_TSC_IS_CLK_ENABLED

+#define __TSC_IS_CLK_DISABLED       __HAL_RCC_TSC_IS_CLK_DISABLED

+#define __UART4_IS_CLK_ENABLED      __HAL_RCC_UART4_IS_CLK_ENABLED

+#define __UART4_IS_CLK_DISABLED     __HAL_RCC_UART4_IS_CLK_DISABLED

+#define __UART5_IS_CLK_ENABLED      __HAL_RCC_UART5_IS_CLK_ENABLED

+#define __UART5_IS_CLK_DISABLED     __HAL_RCC_UART5_IS_CLK_DISABLED

+#define __USART1_IS_CLK_ENABLED     __HAL_RCC_USART1_IS_CLK_ENABLED

+#define __USART1_IS_CLK_DISABLED    __HAL_RCC_USART1_IS_CLK_DISABLED

+#define __USART2_IS_CLK_ENABLED     __HAL_RCC_USART2_IS_CLK_ENABLED

+#define __USART2_IS_CLK_DISABLED    __HAL_RCC_USART2_IS_CLK_DISABLED

+#define __USART3_IS_CLK_ENABLED     __HAL_RCC_USART3_IS_CLK_ENABLED

+#define __USART3_IS_CLK_DISABLED    __HAL_RCC_USART3_IS_CLK_DISABLED

+#define __USB_IS_CLK_ENABLED        __HAL_RCC_USB_IS_CLK_ENABLED

+#define __USB_IS_CLK_DISABLED       __HAL_RCC_USB_IS_CLK_DISABLED

+#define __WWDG_IS_CLK_ENABLED       __HAL_RCC_WWDG_IS_CLK_ENABLED

+#define __WWDG_IS_CLK_DISABLED      __HAL_RCC_WWDG_IS_CLK_DISABLED

+

+#if defined(STM32L1)

+#define __HAL_RCC_CRYP_CLK_DISABLE         __HAL_RCC_AES_CLK_DISABLE

+#define __HAL_RCC_CRYP_CLK_ENABLE          __HAL_RCC_AES_CLK_ENABLE

+#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE   __HAL_RCC_AES_CLK_SLEEP_DISABLE

+#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE    __HAL_RCC_AES_CLK_SLEEP_ENABLE

+#define __HAL_RCC_CRYP_FORCE_RESET         __HAL_RCC_AES_FORCE_RESET

+#define __HAL_RCC_CRYP_RELEASE_RESET       __HAL_RCC_AES_RELEASE_RESET

+#endif /* STM32L1 */

+

+#if defined(STM32F4)

+#define __HAL_RCC_SDMMC1_FORCE_RESET       __HAL_RCC_SDIO_FORCE_RESET

+#define __HAL_RCC_SDMMC1_RELEASE_RESET     __HAL_RCC_SDIO_RELEASE_RESET

+#define __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE  __HAL_RCC_SDIO_CLK_SLEEP_ENABLE

+#define __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE

+#define __HAL_RCC_SDMMC1_CLK_ENABLE        __HAL_RCC_SDIO_CLK_ENABLE

+#define __HAL_RCC_SDMMC1_CLK_DISABLE       __HAL_RCC_SDIO_CLK_DISABLE

+#define __HAL_RCC_SDMMC1_IS_CLK_ENABLED    __HAL_RCC_SDIO_IS_CLK_ENABLED

+#define __HAL_RCC_SDMMC1_IS_CLK_DISABLED   __HAL_RCC_SDIO_IS_CLK_DISABLED

+#define Sdmmc1ClockSelection               SdioClockSelection

+#define RCC_PERIPHCLK_SDMMC1               RCC_PERIPHCLK_SDIO

+#define RCC_SDMMC1CLKSOURCE_CLK48          RCC_SDIOCLKSOURCE_CK48

+#define RCC_SDMMC1CLKSOURCE_SYSCLK         RCC_SDIOCLKSOURCE_SYSCLK

+#define __HAL_RCC_SDMMC1_CONFIG            __HAL_RCC_SDIO_CONFIG

+#define __HAL_RCC_GET_SDMMC1_SOURCE        __HAL_RCC_GET_SDIO_SOURCE

+#endif

+

+#if defined(STM32F7) || defined(STM32L4)

+#define __HAL_RCC_SDIO_FORCE_RESET         __HAL_RCC_SDMMC1_FORCE_RESET

+#define __HAL_RCC_SDIO_RELEASE_RESET       __HAL_RCC_SDMMC1_RELEASE_RESET

+#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE    __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE

+#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE   __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE

+#define __HAL_RCC_SDIO_CLK_ENABLE          __HAL_RCC_SDMMC1_CLK_ENABLE

+#define __HAL_RCC_SDIO_CLK_DISABLE         __HAL_RCC_SDMMC1_CLK_DISABLE

+#define __HAL_RCC_SDIO_IS_CLK_ENABLED      __HAL_RCC_SDMMC1_IS_CLK_ENABLED

+#define __HAL_RCC_SDIO_IS_CLK_DISABLED     __HAL_RCC_SDMMC1_IS_CLK_DISABLED

+#define SdioClockSelection                 Sdmmc1ClockSelection

+#define RCC_PERIPHCLK_SDIO                 RCC_PERIPHCLK_SDMMC1

+#define __HAL_RCC_SDIO_CONFIG              __HAL_RCC_SDMMC1_CONFIG

+#define __HAL_RCC_GET_SDIO_SOURCE          __HAL_RCC_GET_SDMMC1_SOURCE

+#endif

+

+#if defined(STM32F7)

+#define RCC_SDIOCLKSOURCE_CLK48             RCC_SDMMC1CLKSOURCE_CLK48

+#define RCC_SDIOCLKSOURCE_SYSCLK           RCC_SDMMC1CLKSOURCE_SYSCLK

+#endif

+

+#if defined(STM32H7)

+#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE()              __HAL_RCC_USB1_OTG_HS_CLK_ENABLE()

+#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE()         __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE()

+#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE()             __HAL_RCC_USB1_OTG_HS_CLK_DISABLE()

+#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE()        __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE()

+#define __HAL_RCC_USB_OTG_HS_FORCE_RESET()             __HAL_RCC_USB1_OTG_HS_FORCE_RESET()

+#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET()           __HAL_RCC_USB1_OTG_HS_RELEASE_RESET()

+#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE()        __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE()

+#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE()   __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE()

+#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE()       __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE()

+#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE()  __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE()

+

+#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE()             __HAL_RCC_USB2_OTG_FS_CLK_ENABLE()

+#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE()        __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE()

+#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE()            __HAL_RCC_USB2_OTG_FS_CLK_DISABLE()

+#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE()       __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE()

+#define __HAL_RCC_USB_OTG_FS_FORCE_RESET()            __HAL_RCC_USB2_OTG_FS_FORCE_RESET()

+#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET()          __HAL_RCC_USB2_OTG_FS_RELEASE_RESET()

+#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE()       __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE()

+#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE()  __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE()

+#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE()      __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE()

+#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE()

+#endif

+

+#define __HAL_RCC_I2SCLK            __HAL_RCC_I2S_CONFIG

+#define __HAL_RCC_I2SCLK_CONFIG     __HAL_RCC_I2S_CONFIG

+

+#define __RCC_PLLSRC                RCC_GET_PLL_OSCSOURCE

+

+#define IS_RCC_MSIRANGE             IS_RCC_MSI_CLOCK_RANGE

+#define IS_RCC_RTCCLK_SOURCE        IS_RCC_RTCCLKSOURCE

+#define IS_RCC_SYSCLK_DIV           IS_RCC_HCLK

+#define IS_RCC_HCLK_DIV             IS_RCC_PCLK

+#define IS_RCC_PERIPHCLK            IS_RCC_PERIPHCLOCK

+

+#define RCC_IT_HSI14                RCC_IT_HSI14RDY

+

+#define RCC_IT_CSSLSE               RCC_IT_LSECSS

+#define RCC_IT_CSSHSE               RCC_IT_CSS

+

+#define RCC_PLLMUL_3                RCC_PLL_MUL3

+#define RCC_PLLMUL_4                RCC_PLL_MUL4

+#define RCC_PLLMUL_6                RCC_PLL_MUL6

+#define RCC_PLLMUL_8                RCC_PLL_MUL8

+#define RCC_PLLMUL_12               RCC_PLL_MUL12

+#define RCC_PLLMUL_16               RCC_PLL_MUL16

+#define RCC_PLLMUL_24               RCC_PLL_MUL24

+#define RCC_PLLMUL_32               RCC_PLL_MUL32

+#define RCC_PLLMUL_48               RCC_PLL_MUL48

+

+#define RCC_PLLDIV_2                RCC_PLL_DIV2

+#define RCC_PLLDIV_3                RCC_PLL_DIV3

+#define RCC_PLLDIV_4                RCC_PLL_DIV4

+

+#define IS_RCC_MCOSOURCE            IS_RCC_MCO1SOURCE

+#define __HAL_RCC_MCO_CONFIG        __HAL_RCC_MCO1_CONFIG

+#define RCC_MCO_NODIV               RCC_MCODIV_1

+#define RCC_MCO_DIV1                RCC_MCODIV_1

+#define RCC_MCO_DIV2                RCC_MCODIV_2

+#define RCC_MCO_DIV4                RCC_MCODIV_4

+#define RCC_MCO_DIV8                RCC_MCODIV_8

+#define RCC_MCO_DIV16               RCC_MCODIV_16

+#define RCC_MCO_DIV32               RCC_MCODIV_32

+#define RCC_MCO_DIV64               RCC_MCODIV_64

+#define RCC_MCO_DIV128              RCC_MCODIV_128

+#define RCC_MCOSOURCE_NONE          RCC_MCO1SOURCE_NOCLOCK

+#define RCC_MCOSOURCE_LSI           RCC_MCO1SOURCE_LSI

+#define RCC_MCOSOURCE_LSE           RCC_MCO1SOURCE_LSE

+#define RCC_MCOSOURCE_SYSCLK        RCC_MCO1SOURCE_SYSCLK

+#define RCC_MCOSOURCE_HSI           RCC_MCO1SOURCE_HSI

+#define RCC_MCOSOURCE_HSI14         RCC_MCO1SOURCE_HSI14

+#define RCC_MCOSOURCE_HSI48         RCC_MCO1SOURCE_HSI48

+#define RCC_MCOSOURCE_HSE           RCC_MCO1SOURCE_HSE

+#define RCC_MCOSOURCE_PLLCLK_DIV1   RCC_MCO1SOURCE_PLLCLK

+#define RCC_MCOSOURCE_PLLCLK_NODIV  RCC_MCO1SOURCE_PLLCLK

+#define RCC_MCOSOURCE_PLLCLK_DIV2   RCC_MCO1SOURCE_PLLCLK_DIV2

+

+#if defined(STM32L4)

+#define RCC_RTCCLKSOURCE_NO_CLK     RCC_RTCCLKSOURCE_NONE

+#elif defined(STM32WB) || defined(STM32G0)

+#else

+#define RCC_RTCCLKSOURCE_NONE       RCC_RTCCLKSOURCE_NO_CLK

+#endif

+

+#define RCC_USBCLK_PLLSAI1          RCC_USBCLKSOURCE_PLLSAI1

+#define RCC_USBCLK_PLL              RCC_USBCLKSOURCE_PLL

+#define RCC_USBCLK_MSI              RCC_USBCLKSOURCE_MSI

+#define RCC_USBCLKSOURCE_PLLCLK     RCC_USBCLKSOURCE_PLL

+#define RCC_USBPLLCLK_DIV1          RCC_USBCLKSOURCE_PLL

+#define RCC_USBPLLCLK_DIV1_5        RCC_USBCLKSOURCE_PLL_DIV1_5

+#define RCC_USBPLLCLK_DIV2          RCC_USBCLKSOURCE_PLL_DIV2

+#define RCC_USBPLLCLK_DIV3          RCC_USBCLKSOURCE_PLL_DIV3

+

+#define HSION_BitNumber        RCC_HSION_BIT_NUMBER

+#define HSION_BITNUMBER        RCC_HSION_BIT_NUMBER

+#define HSEON_BitNumber        RCC_HSEON_BIT_NUMBER

+#define HSEON_BITNUMBER        RCC_HSEON_BIT_NUMBER

+#define MSION_BITNUMBER        RCC_MSION_BIT_NUMBER

+#define CSSON_BitNumber        RCC_CSSON_BIT_NUMBER

+#define CSSON_BITNUMBER        RCC_CSSON_BIT_NUMBER

+#define PLLON_BitNumber        RCC_PLLON_BIT_NUMBER

+#define PLLON_BITNUMBER        RCC_PLLON_BIT_NUMBER

+#define PLLI2SON_BitNumber     RCC_PLLI2SON_BIT_NUMBER

+#define I2SSRC_BitNumber       RCC_I2SSRC_BIT_NUMBER

+#define RTCEN_BitNumber        RCC_RTCEN_BIT_NUMBER

+#define RTCEN_BITNUMBER        RCC_RTCEN_BIT_NUMBER

+#define BDRST_BitNumber        RCC_BDRST_BIT_NUMBER

+#define BDRST_BITNUMBER        RCC_BDRST_BIT_NUMBER

+#define RTCRST_BITNUMBER       RCC_RTCRST_BIT_NUMBER

+#define LSION_BitNumber        RCC_LSION_BIT_NUMBER

+#define LSION_BITNUMBER        RCC_LSION_BIT_NUMBER

+#define LSEON_BitNumber        RCC_LSEON_BIT_NUMBER

+#define LSEON_BITNUMBER        RCC_LSEON_BIT_NUMBER

+#define LSEBYP_BITNUMBER       RCC_LSEBYP_BIT_NUMBER

+#define PLLSAION_BitNumber     RCC_PLLSAION_BIT_NUMBER

+#define TIMPRE_BitNumber       RCC_TIMPRE_BIT_NUMBER

+#define RMVF_BitNumber         RCC_RMVF_BIT_NUMBER

+#define RMVF_BITNUMBER         RCC_RMVF_BIT_NUMBER

+#define RCC_CR2_HSI14TRIM_BitNumber RCC_HSI14TRIM_BIT_NUMBER

+#define CR_BYTE2_ADDRESS       RCC_CR_BYTE2_ADDRESS

+#define CIR_BYTE1_ADDRESS      RCC_CIR_BYTE1_ADDRESS

+#define CIR_BYTE2_ADDRESS      RCC_CIR_BYTE2_ADDRESS

+#define BDCR_BYTE0_ADDRESS     RCC_BDCR_BYTE0_ADDRESS

+#define DBP_TIMEOUT_VALUE      RCC_DBP_TIMEOUT_VALUE

+#define LSE_TIMEOUT_VALUE      RCC_LSE_TIMEOUT_VALUE

+

+#define CR_HSION_BB            RCC_CR_HSION_BB

+#define CR_CSSON_BB            RCC_CR_CSSON_BB

+#define CR_PLLON_BB            RCC_CR_PLLON_BB

+#define CR_PLLI2SON_BB         RCC_CR_PLLI2SON_BB

+#define CR_MSION_BB            RCC_CR_MSION_BB

+#define CSR_LSION_BB           RCC_CSR_LSION_BB

+#define CSR_LSEON_BB           RCC_CSR_LSEON_BB

+#define CSR_LSEBYP_BB          RCC_CSR_LSEBYP_BB

+#define CSR_RTCEN_BB           RCC_CSR_RTCEN_BB

+#define CSR_RTCRST_BB          RCC_CSR_RTCRST_BB

+#define CFGR_I2SSRC_BB         RCC_CFGR_I2SSRC_BB

+#define BDCR_RTCEN_BB          RCC_BDCR_RTCEN_BB

+#define BDCR_BDRST_BB          RCC_BDCR_BDRST_BB

+#define CR_HSEON_BB            RCC_CR_HSEON_BB

+#define CSR_RMVF_BB            RCC_CSR_RMVF_BB

+#define CR_PLLSAION_BB         RCC_CR_PLLSAION_BB

+#define DCKCFGR_TIMPRE_BB      RCC_DCKCFGR_TIMPRE_BB

+

+#define __HAL_RCC_CRS_ENABLE_FREQ_ERROR_COUNTER     __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE

+#define __HAL_RCC_CRS_DISABLE_FREQ_ERROR_COUNTER    __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE

+#define __HAL_RCC_CRS_ENABLE_AUTOMATIC_CALIB        __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE

+#define __HAL_RCC_CRS_DISABLE_AUTOMATIC_CALIB       __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE

+#define __HAL_RCC_CRS_CALCULATE_RELOADVALUE         __HAL_RCC_CRS_RELOADVALUE_CALCULATE

+

+#define __HAL_RCC_GET_IT_SOURCE                     __HAL_RCC_GET_IT

+

+#define RCC_CRS_SYNCWARM       RCC_CRS_SYNCWARN

+#define RCC_CRS_TRIMOV         RCC_CRS_TRIMOVF

+

+#define RCC_PERIPHCLK_CK48               RCC_PERIPHCLK_CLK48

+#define RCC_CK48CLKSOURCE_PLLQ           RCC_CLK48CLKSOURCE_PLLQ

+#define RCC_CK48CLKSOURCE_PLLSAIP        RCC_CLK48CLKSOURCE_PLLSAIP

+#define RCC_CK48CLKSOURCE_PLLI2SQ        RCC_CLK48CLKSOURCE_PLLI2SQ

+#define IS_RCC_CK48CLKSOURCE             IS_RCC_CLK48CLKSOURCE

+#define RCC_SDIOCLKSOURCE_CK48           RCC_SDIOCLKSOURCE_CLK48

+

+#define __HAL_RCC_DFSDM_CLK_ENABLE             __HAL_RCC_DFSDM1_CLK_ENABLE

+#define __HAL_RCC_DFSDM_CLK_DISABLE            __HAL_RCC_DFSDM1_CLK_DISABLE

+#define __HAL_RCC_DFSDM_IS_CLK_ENABLED         __HAL_RCC_DFSDM1_IS_CLK_ENABLED

+#define __HAL_RCC_DFSDM_IS_CLK_DISABLED        __HAL_RCC_DFSDM1_IS_CLK_DISABLED

+#define __HAL_RCC_DFSDM_FORCE_RESET            __HAL_RCC_DFSDM1_FORCE_RESET

+#define __HAL_RCC_DFSDM_RELEASE_RESET          __HAL_RCC_DFSDM1_RELEASE_RESET

+#define __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE       __HAL_RCC_DFSDM1_CLK_SLEEP_ENABLE

+#define __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE      __HAL_RCC_DFSDM1_CLK_SLEEP_DISABLE

+#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_ENABLED   __HAL_RCC_DFSDM1_IS_CLK_SLEEP_ENABLED

+#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED  __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED

+#define DfsdmClockSelection         Dfsdm1ClockSelection

+#define RCC_PERIPHCLK_DFSDM         RCC_PERIPHCLK_DFSDM1

+#define RCC_DFSDMCLKSOURCE_PCLK     RCC_DFSDM1CLKSOURCE_PCLK2

+#define RCC_DFSDMCLKSOURCE_SYSCLK   RCC_DFSDM1CLKSOURCE_SYSCLK

+#define __HAL_RCC_DFSDM_CONFIG      __HAL_RCC_DFSDM1_CONFIG

+#define __HAL_RCC_GET_DFSDM_SOURCE  __HAL_RCC_GET_DFSDM1_SOURCE

+#define RCC_DFSDM1CLKSOURCE_PCLK    RCC_DFSDM1CLKSOURCE_PCLK2

+#define RCC_SWPMI1CLKSOURCE_PCLK    RCC_SWPMI1CLKSOURCE_PCLK1

+#define RCC_LPTIM1CLKSOURCE_PCLK    RCC_LPTIM1CLKSOURCE_PCLK1

+#define RCC_LPTIM2CLKSOURCE_PCLK    RCC_LPTIM2CLKSOURCE_PCLK1

+

+#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1    RCC_DFSDM1AUDIOCLKSOURCE_I2S1

+#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2    RCC_DFSDM1AUDIOCLKSOURCE_I2S2

+#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1    RCC_DFSDM2AUDIOCLKSOURCE_I2S1

+#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2    RCC_DFSDM2AUDIOCLKSOURCE_I2S2

+#define RCC_DFSDM1CLKSOURCE_APB2            RCC_DFSDM1CLKSOURCE_PCLK2

+#define RCC_DFSDM2CLKSOURCE_APB2            RCC_DFSDM2CLKSOURCE_PCLK2

+#define RCC_FMPI2C1CLKSOURCE_APB            RCC_FMPI2C1CLKSOURCE_PCLK1

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define  HAL_RNG_ReadyCallback(__HANDLE__)  HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit)

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx)

+#else

+#define __HAL_RTC_CLEAR_FLAG                      __HAL_RTC_EXTI_CLEAR_FLAG

+#endif

+#define __HAL_RTC_DISABLE_IT                      __HAL_RTC_EXTI_DISABLE_IT

+#define __HAL_RTC_ENABLE_IT                       __HAL_RTC_EXTI_ENABLE_IT

+

+#if defined (STM32F1)

+#define __HAL_RTC_EXTI_CLEAR_FLAG(RTC_EXTI_LINE_ALARM_EVENT)  __HAL_RTC_ALARM_EXTI_CLEAR_FLAG()

+

+#define __HAL_RTC_EXTI_ENABLE_IT(RTC_EXTI_LINE_ALARM_EVENT)   __HAL_RTC_ALARM_EXTI_ENABLE_IT()

+

+#define __HAL_RTC_EXTI_DISABLE_IT(RTC_EXTI_LINE_ALARM_EVENT)  __HAL_RTC_ALARM_EXTI_DISABLE_IT()

+

+#define __HAL_RTC_EXTI_GET_FLAG(RTC_EXTI_LINE_ALARM_EVENT)    __HAL_RTC_ALARM_EXTI_GET_FLAG()

+

+#define __HAL_RTC_EXTI_GENERATE_SWIT(RTC_EXTI_LINE_ALARM_EVENT)   __HAL_RTC_ALARM_EXTI_GENERATE_SWIT()

+#else

+#define __HAL_RTC_EXTI_CLEAR_FLAG(__EXTI_LINE__)  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() : \

+                                                   (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG() : \

+                                                      __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG()))

+#define __HAL_RTC_EXTI_ENABLE_IT(__EXTI_LINE__)   (((__EXTI_LINE__)  == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_ENABLE_IT() : \

+                                                  (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT() : \

+                                                      __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT()))

+#define __HAL_RTC_EXTI_DISABLE_IT(__EXTI_LINE__)  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_DISABLE_IT() : \

+                                                  (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT() : \

+                                                      __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_IT()))

+#define __HAL_RTC_EXTI_GET_FLAG(__EXTI_LINE__)    (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GET_FLAG() : \

+                                                  (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GET_FLAG() : \

+                                                      __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG()))

+#define __HAL_RTC_EXTI_GENERATE_SWIT(__EXTI_LINE__)   (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() : \

+                                                      (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GENERATE_SWIT() :  \

+                                                          __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GENERATE_SWIT()))

+#endif   /* STM32F1 */

+

+#define IS_ALARM                                  IS_RTC_ALARM

+#define IS_ALARM_MASK                             IS_RTC_ALARM_MASK

+#define IS_TAMPER                                 IS_RTC_TAMPER

+#define IS_TAMPER_ERASE_MODE                      IS_RTC_TAMPER_ERASE_MODE

+#define IS_TAMPER_FILTER                          IS_RTC_TAMPER_FILTER

+#define IS_TAMPER_INTERRUPT                       IS_RTC_TAMPER_INTERRUPT

+#define IS_TAMPER_MASKFLAG_STATE                  IS_RTC_TAMPER_MASKFLAG_STATE

+#define IS_TAMPER_PRECHARGE_DURATION              IS_RTC_TAMPER_PRECHARGE_DURATION

+#define IS_TAMPER_PULLUP_STATE                    IS_RTC_TAMPER_PULLUP_STATE

+#define IS_TAMPER_SAMPLING_FREQ                   IS_RTC_TAMPER_SAMPLING_FREQ

+#define IS_TAMPER_TIMESTAMPONTAMPER_DETECTION     IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION

+#define IS_TAMPER_TRIGGER                         IS_RTC_TAMPER_TRIGGER

+#define IS_WAKEUP_CLOCK                           IS_RTC_WAKEUP_CLOCK

+#define IS_WAKEUP_COUNTER                         IS_RTC_WAKEUP_COUNTER

+

+#define __RTC_WRITEPROTECTION_ENABLE  __HAL_RTC_WRITEPROTECTION_ENABLE

+#define __RTC_WRITEPROTECTION_DISABLE  __HAL_RTC_WRITEPROTECTION_DISABLE

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_SD_Aliased_Macros HAL SD Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define SD_OCR_CID_CSD_OVERWRIETE   SD_OCR_CID_CSD_OVERWRITE

+#define SD_CMD_SD_APP_STAUS         SD_CMD_SD_APP_STATUS

+

+#if defined(STM32F4) || defined(STM32F2)

+#define  SD_SDMMC_DISABLED          SD_SDIO_DISABLED

+#define  SD_SDMMC_FUNCTION_BUSY     SD_SDIO_FUNCTION_BUSY

+#define  SD_SDMMC_FUNCTION_FAILED   SD_SDIO_FUNCTION_FAILED

+#define  SD_SDMMC_UNKNOWN_FUNCTION  SD_SDIO_UNKNOWN_FUNCTION

+#define  SD_CMD_SDMMC_SEN_OP_COND   SD_CMD_SDIO_SEN_OP_COND

+#define  SD_CMD_SDMMC_RW_DIRECT     SD_CMD_SDIO_RW_DIRECT

+#define  SD_CMD_SDMMC_RW_EXTENDED   SD_CMD_SDIO_RW_EXTENDED

+#define  __HAL_SD_SDMMC_ENABLE      __HAL_SD_SDIO_ENABLE

+#define  __HAL_SD_SDMMC_DISABLE     __HAL_SD_SDIO_DISABLE

+#define  __HAL_SD_SDMMC_DMA_ENABLE  __HAL_SD_SDIO_DMA_ENABLE

+#define  __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL

+#define  __HAL_SD_SDMMC_ENABLE_IT   __HAL_SD_SDIO_ENABLE_IT

+#define  __HAL_SD_SDMMC_DISABLE_IT  __HAL_SD_SDIO_DISABLE_IT

+#define  __HAL_SD_SDMMC_GET_FLAG    __HAL_SD_SDIO_GET_FLAG

+#define  __HAL_SD_SDMMC_CLEAR_FLAG  __HAL_SD_SDIO_CLEAR_FLAG

+#define  __HAL_SD_SDMMC_GET_IT      __HAL_SD_SDIO_GET_IT

+#define  __HAL_SD_SDMMC_CLEAR_IT    __HAL_SD_SDIO_CLEAR_IT

+#define  SDMMC_STATIC_FLAGS         SDIO_STATIC_FLAGS

+#define  SDMMC_CMD0TIMEOUT          SDIO_CMD0TIMEOUT

+#define  SD_SDMMC_SEND_IF_COND      SD_SDIO_SEND_IF_COND

+/* alias CMSIS */

+#define  SDMMC1_IRQn                SDIO_IRQn

+#define  SDMMC1_IRQHandler          SDIO_IRQHandler

+#endif

+

+#if defined(STM32F7) || defined(STM32L4)

+#define  SD_SDIO_DISABLED           SD_SDMMC_DISABLED

+#define  SD_SDIO_FUNCTION_BUSY      SD_SDMMC_FUNCTION_BUSY

+#define  SD_SDIO_FUNCTION_FAILED    SD_SDMMC_FUNCTION_FAILED

+#define  SD_SDIO_UNKNOWN_FUNCTION   SD_SDMMC_UNKNOWN_FUNCTION

+#define  SD_CMD_SDIO_SEN_OP_COND    SD_CMD_SDMMC_SEN_OP_COND

+#define  SD_CMD_SDIO_RW_DIRECT      SD_CMD_SDMMC_RW_DIRECT

+#define  SD_CMD_SDIO_RW_EXTENDED    SD_CMD_SDMMC_RW_EXTENDED

+#define  __HAL_SD_SDIO_ENABLE       __HAL_SD_SDMMC_ENABLE

+#define  __HAL_SD_SDIO_DISABLE      __HAL_SD_SDMMC_DISABLE

+#define  __HAL_SD_SDIO_DMA_ENABLE   __HAL_SD_SDMMC_DMA_ENABLE

+#define  __HAL_SD_SDIO_DMA_DISABL   __HAL_SD_SDMMC_DMA_DISABLE

+#define  __HAL_SD_SDIO_ENABLE_IT    __HAL_SD_SDMMC_ENABLE_IT

+#define  __HAL_SD_SDIO_DISABLE_IT   __HAL_SD_SDMMC_DISABLE_IT

+#define  __HAL_SD_SDIO_GET_FLAG     __HAL_SD_SDMMC_GET_FLAG

+#define  __HAL_SD_SDIO_CLEAR_FLAG   __HAL_SD_SDMMC_CLEAR_FLAG

+#define  __HAL_SD_SDIO_GET_IT       __HAL_SD_SDMMC_GET_IT

+#define  __HAL_SD_SDIO_CLEAR_IT     __HAL_SD_SDMMC_CLEAR_IT

+#define  SDIO_STATIC_FLAGS	        SDMMC_STATIC_FLAGS

+#define  SDIO_CMD0TIMEOUT	          SDMMC_CMD0TIMEOUT

+#define  SD_SDIO_SEND_IF_COND	      SD_SDMMC_SEND_IF_COND

+/* alias CMSIS for compatibilities */

+#define  SDIO_IRQn                  SDMMC1_IRQn

+#define  SDIO_IRQHandler            SDMMC1_IRQHandler

+#endif

+

+#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4)

+#define  HAL_SD_CardCIDTypedef       HAL_SD_CardCIDTypeDef

+#define  HAL_SD_CardCSDTypedef       HAL_SD_CardCSDTypeDef

+#define  HAL_SD_CardStatusTypedef    HAL_SD_CardStatusTypeDef

+#define  HAL_SD_CardStateTypedef     HAL_SD_CardStateTypeDef

+#endif

+

+#if defined(STM32H7)

+#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback   HAL_MMCEx_Read_DMADoubleBuf0CpltCallback

+#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback   HAL_MMCEx_Read_DMADoubleBuf1CpltCallback

+#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback  HAL_MMCEx_Write_DMADoubleBuf0CpltCallback

+#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback  HAL_MMCEx_Write_DMADoubleBuf1CpltCallback

+#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback    HAL_SDEx_Read_DMADoubleBuf0CpltCallback

+#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback    HAL_SDEx_Read_DMADoubleBuf1CpltCallback

+#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback   HAL_SDEx_Write_DMADoubleBuf0CpltCallback

+#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback   HAL_SDEx_Write_DMADoubleBuf1CpltCallback

+#define HAL_SD_DriveTransciver_1_8V_Callback          HAL_SD_DriveTransceiver_1_8V_Callback

+#endif

+/**

+  * @}

+  */

+

+/** @defgroup HAL_SMARTCARD_Aliased_Macros HAL SMARTCARD Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define __SMARTCARD_ENABLE_IT           __HAL_SMARTCARD_ENABLE_IT

+#define __SMARTCARD_DISABLE_IT          __HAL_SMARTCARD_DISABLE_IT

+#define __SMARTCARD_ENABLE              __HAL_SMARTCARD_ENABLE

+#define __SMARTCARD_DISABLE             __HAL_SMARTCARD_DISABLE

+#define __SMARTCARD_DMA_REQUEST_ENABLE  __HAL_SMARTCARD_DMA_REQUEST_ENABLE

+#define __SMARTCARD_DMA_REQUEST_DISABLE __HAL_SMARTCARD_DMA_REQUEST_DISABLE

+

+#define __HAL_SMARTCARD_GETCLOCKSOURCE  SMARTCARD_GETCLOCKSOURCE

+#define __SMARTCARD_GETCLOCKSOURCE      SMARTCARD_GETCLOCKSOURCE

+

+#define IS_SMARTCARD_ONEBIT_SAMPLING    IS_SMARTCARD_ONE_BIT_SAMPLE

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_SMBUS_Aliased_Macros HAL SMBUS Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define __HAL_SMBUS_RESET_CR1           SMBUS_RESET_CR1

+#define __HAL_SMBUS_RESET_CR2           SMBUS_RESET_CR2

+#define __HAL_SMBUS_GENERATE_START      SMBUS_GENERATE_START

+#define __HAL_SMBUS_GET_ADDR_MATCH      SMBUS_GET_ADDR_MATCH

+#define __HAL_SMBUS_GET_DIR             SMBUS_GET_DIR

+#define __HAL_SMBUS_GET_STOP_MODE       SMBUS_GET_STOP_MODE

+#define __HAL_SMBUS_GET_PEC_MODE        SMBUS_GET_PEC_MODE

+#define __HAL_SMBUS_GET_ALERT_ENABLED   SMBUS_GET_ALERT_ENABLED

+/**

+  * @}

+  */

+

+/** @defgroup HAL_SPI_Aliased_Macros HAL SPI Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define __HAL_SPI_1LINE_TX              SPI_1LINE_TX

+#define __HAL_SPI_1LINE_RX              SPI_1LINE_RX

+#define __HAL_SPI_RESET_CRC             SPI_RESET_CRC

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define __HAL_UART_GETCLOCKSOURCE       UART_GETCLOCKSOURCE

+#define __HAL_UART_MASK_COMPUTATION     UART_MASK_COMPUTATION

+#define __UART_GETCLOCKSOURCE           UART_GETCLOCKSOURCE

+#define __UART_MASK_COMPUTATION         UART_MASK_COMPUTATION

+

+#define IS_UART_WAKEUPMETHODE           IS_UART_WAKEUPMETHOD

+

+#define IS_UART_ONEBIT_SAMPLE           IS_UART_ONE_BIT_SAMPLE

+#define IS_UART_ONEBIT_SAMPLING         IS_UART_ONE_BIT_SAMPLE

+

+/**

+  * @}

+  */

+

+

+/** @defgroup HAL_USART_Aliased_Macros HAL USART Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define __USART_ENABLE_IT               __HAL_USART_ENABLE_IT

+#define __USART_DISABLE_IT              __HAL_USART_DISABLE_IT

+#define __USART_ENABLE                  __HAL_USART_ENABLE

+#define __USART_DISABLE                 __HAL_USART_DISABLE

+

+#define __HAL_USART_GETCLOCKSOURCE      USART_GETCLOCKSOURCE

+#define __USART_GETCLOCKSOURCE          USART_GETCLOCKSOURCE

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_USB_Aliased_Macros HAL USB Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define USB_EXTI_LINE_WAKEUP                               USB_WAKEUP_EXTI_LINE

+

+#define USB_FS_EXTI_TRIGGER_RISING_EDGE                    USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE

+#define USB_FS_EXTI_TRIGGER_FALLING_EDGE                   USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE

+#define USB_FS_EXTI_TRIGGER_BOTH_EDGE                      USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE

+#define USB_FS_EXTI_LINE_WAKEUP                            USB_OTG_FS_WAKEUP_EXTI_LINE

+

+#define USB_HS_EXTI_TRIGGER_RISING_EDGE                    USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE

+#define USB_HS_EXTI_TRIGGER_FALLING_EDGE                   USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE

+#define USB_HS_EXTI_TRIGGER_BOTH_EDGE                      USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE

+#define USB_HS_EXTI_LINE_WAKEUP                            USB_OTG_HS_WAKEUP_EXTI_LINE

+

+#define __HAL_USB_EXTI_ENABLE_IT                           __HAL_USB_WAKEUP_EXTI_ENABLE_IT

+#define __HAL_USB_EXTI_DISABLE_IT                          __HAL_USB_WAKEUP_EXTI_DISABLE_IT

+#define __HAL_USB_EXTI_GET_FLAG                            __HAL_USB_WAKEUP_EXTI_GET_FLAG

+#define __HAL_USB_EXTI_CLEAR_FLAG                          __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG

+#define __HAL_USB_EXTI_SET_RISING_EDGE_TRIGGER             __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_EDGE

+#define __HAL_USB_EXTI_SET_FALLING_EDGE_TRIGGER            __HAL_USB_WAKEUP_EXTI_ENABLE_FALLING_EDGE

+#define __HAL_USB_EXTI_SET_FALLINGRISING_TRIGGER           __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE

+

+#define __HAL_USB_FS_EXTI_ENABLE_IT                        __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT

+#define __HAL_USB_FS_EXTI_DISABLE_IT                       __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT

+#define __HAL_USB_FS_EXTI_GET_FLAG                         __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG

+#define __HAL_USB_FS_EXTI_CLEAR_FLAG                       __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG

+#define __HAL_USB_FS_EXTI_SET_RISING_EGDE_TRIGGER          __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE

+#define __HAL_USB_FS_EXTI_SET_FALLING_EGDE_TRIGGER         __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE

+#define __HAL_USB_FS_EXTI_SET_FALLINGRISING_TRIGGER        __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE

+#define __HAL_USB_FS_EXTI_GENERATE_SWIT                    __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT

+

+#define __HAL_USB_HS_EXTI_ENABLE_IT                        __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT

+#define __HAL_USB_HS_EXTI_DISABLE_IT                       __HAL_USB_OTG_HS_WAKEUP_EXTI_DISABLE_IT

+#define __HAL_USB_HS_EXTI_GET_FLAG                         __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG

+#define __HAL_USB_HS_EXTI_CLEAR_FLAG                       __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG

+#define __HAL_USB_HS_EXTI_SET_RISING_EGDE_TRIGGER          __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE

+#define __HAL_USB_HS_EXTI_SET_FALLING_EGDE_TRIGGER         __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_FALLING_EDGE

+#define __HAL_USB_HS_EXTI_SET_FALLINGRISING_TRIGGER        __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE

+#define __HAL_USB_HS_EXTI_GENERATE_SWIT                    __HAL_USB_OTG_HS_WAKEUP_EXTI_GENERATE_SWIT

+

+#define HAL_PCD_ActiveRemoteWakeup                         HAL_PCD_ActivateRemoteWakeup

+#define HAL_PCD_DeActiveRemoteWakeup                       HAL_PCD_DeActivateRemoteWakeup

+

+#define HAL_PCD_SetTxFiFo                                  HAL_PCDEx_SetTxFiFo

+#define HAL_PCD_SetRxFiFo                                  HAL_PCDEx_SetRxFiFo

+/**

+  * @}

+  */

+

+/** @defgroup HAL_TIM_Aliased_Macros HAL TIM Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define __HAL_TIM_SetICPrescalerValue   TIM_SET_ICPRESCALERVALUE

+#define __HAL_TIM_ResetICPrescalerValue TIM_RESET_ICPRESCALERVALUE

+

+#define TIM_GET_ITSTATUS                __HAL_TIM_GET_IT_SOURCE

+#define TIM_GET_CLEAR_IT                __HAL_TIM_CLEAR_IT

+

+#define __HAL_TIM_GET_ITSTATUS          __HAL_TIM_GET_IT_SOURCE

+

+#define __HAL_TIM_DIRECTION_STATUS      __HAL_TIM_IS_TIM_COUNTING_DOWN

+#define __HAL_TIM_PRESCALER             __HAL_TIM_SET_PRESCALER

+#define __HAL_TIM_SetCounter            __HAL_TIM_SET_COUNTER

+#define __HAL_TIM_GetCounter            __HAL_TIM_GET_COUNTER

+#define __HAL_TIM_SetAutoreload         __HAL_TIM_SET_AUTORELOAD

+#define __HAL_TIM_GetAutoreload         __HAL_TIM_GET_AUTORELOAD

+#define __HAL_TIM_SetClockDivision      __HAL_TIM_SET_CLOCKDIVISION

+#define __HAL_TIM_GetClockDivision      __HAL_TIM_GET_CLOCKDIVISION

+#define __HAL_TIM_SetICPrescaler        __HAL_TIM_SET_ICPRESCALER

+#define __HAL_TIM_GetICPrescaler        __HAL_TIM_GET_ICPRESCALER

+#define __HAL_TIM_SetCompare            __HAL_TIM_SET_COMPARE

+#define __HAL_TIM_GetCompare            __HAL_TIM_GET_COMPARE

+

+#define TIM_BREAKINPUTSOURCE_DFSDM  TIM_BREAKINPUTSOURCE_DFSDM1

+/**

+  * @}

+  */

+

+/** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+#define __HAL_ETH_EXTI_ENABLE_IT                   __HAL_ETH_WAKEUP_EXTI_ENABLE_IT

+#define __HAL_ETH_EXTI_DISABLE_IT                  __HAL_ETH_WAKEUP_EXTI_DISABLE_IT

+#define __HAL_ETH_EXTI_GET_FLAG                    __HAL_ETH_WAKEUP_EXTI_GET_FLAG

+#define __HAL_ETH_EXTI_CLEAR_FLAG                  __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG

+#define __HAL_ETH_EXTI_SET_RISING_EGDE_TRIGGER     __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_EDGE_TRIGGER

+#define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER    __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER

+#define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER   __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER

+

+#define ETH_PROMISCIOUSMODE_ENABLE   ETH_PROMISCUOUS_MODE_ENABLE

+#define ETH_PROMISCIOUSMODE_DISABLE  ETH_PROMISCUOUS_MODE_DISABLE

+#define IS_ETH_PROMISCIOUS_MODE      IS_ETH_PROMISCUOUS_MODE

+/**

+  * @}

+  */

+

+/** @defgroup HAL_LTDC_Aliased_Macros HAL LTDC Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define __HAL_LTDC_LAYER LTDC_LAYER

+#define __HAL_LTDC_RELOAD_CONFIG  __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG

+/**

+  * @}

+  */

+

+/** @defgroup HAL_SAI_Aliased_Macros HAL SAI Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#define SAI_OUTPUTDRIVE_DISABLED          SAI_OUTPUTDRIVE_DISABLE

+#define SAI_OUTPUTDRIVE_ENABLED           SAI_OUTPUTDRIVE_ENABLE

+#define SAI_MASTERDIVIDER_ENABLED         SAI_MASTERDIVIDER_ENABLE

+#define SAI_MASTERDIVIDER_DISABLED        SAI_MASTERDIVIDER_DISABLE

+#define SAI_STREOMODE                     SAI_STEREOMODE

+#define SAI_FIFOStatus_Empty              SAI_FIFOSTATUS_EMPTY

+#define SAI_FIFOStatus_Less1QuarterFull   SAI_FIFOSTATUS_LESS1QUARTERFULL

+#define SAI_FIFOStatus_1QuarterFull       SAI_FIFOSTATUS_1QUARTERFULL

+#define SAI_FIFOStatus_HalfFull           SAI_FIFOSTATUS_HALFFULL

+#define SAI_FIFOStatus_3QuartersFull      SAI_FIFOSTATUS_3QUARTERFULL

+#define SAI_FIFOStatus_Full               SAI_FIFOSTATUS_FULL

+#define IS_SAI_BLOCK_MONO_STREO_MODE      IS_SAI_BLOCK_MONO_STEREO_MODE

+#define SAI_SYNCHRONOUS_EXT               SAI_SYNCHRONOUS_EXT_SAI1

+#define SAI_SYNCEXT_IN_ENABLE             SAI_SYNCEXT_OUTBLOCKA_ENABLE

+/**

+  * @}

+  */

+

+/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#if defined(STM32H7)

+#define HAL_SPDIFRX_ReceiveControlFlow      HAL_SPDIFRX_ReceiveCtrlFlow

+#define HAL_SPDIFRX_ReceiveControlFlow_IT   HAL_SPDIFRX_ReceiveCtrlFlow_IT

+#define HAL_SPDIFRX_ReceiveControlFlow_DMA  HAL_SPDIFRX_ReceiveCtrlFlow_DMA

+#endif

+/**

+  * @}

+  */

+

+/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose

+  * @{

+  */

+#if defined (STM32H7) || defined (STM32F3)

+#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT

+#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA

+#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart

+#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT

+#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA

+#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop

+#endif

+/**

+  * @}

+  */

+

+/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose

+  * @{

+  */

+#if defined (STM32L4)

+#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE

+#endif

+/**

+  * @}

+  */

+

+/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose

+  * @{

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* STM32_HAL_LEGACY */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal.h
new file mode 100644
index 0000000..896d193
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal.h
@@ -0,0 +1,996 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal.h

+  * @author  MCD Application Team

+  * @brief   This file contains all the functions prototypes for the HAL

+  *          module driver.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_H

+#define __STM32L1xx_HAL_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_conf.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup HAL

+  * @{

+  */

+

+/* Exported types ------------------------------------------------------------*/

+/* Exported constants --------------------------------------------------------*/

+

+/** @defgroup HAL_Exported_Constants HAL Exported Constants

+  * @{

+  */

+

+/** @defgroup HAL_TICK_FREQ Tick Frequency

+  * @{

+  */

+#define  HAL_TICK_FREQ_10HZ         100U

+#define  HAL_TICK_FREQ_100HZ        10U

+#define  HAL_TICK_FREQ_1KHZ         1U

+#define  HAL_TICK_FREQ_DEFAULT      HAL_TICK_FREQ_1KHZ

+

+#define IS_TICKFREQ(__FREQ__) (((__FREQ__) == HAL_TICK_FREQ_10HZ)  || \

+                               ((__FREQ__) == HAL_TICK_FREQ_100HZ) || \

+                               ((__FREQ__) == HAL_TICK_FREQ_1KHZ))

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/** @defgroup SYSCFG_Exported_Constants SYSCFG Exported Constants

+  * @{

+  */

+

+/** @defgroup SYSCFG_Constants SYSCFG: SYStem ConFiG

+  * @{

+  */

+

+/** @defgroup SYSCFG_BootMode Boot Mode

+  * @{

+  */

+

+#define SYSCFG_BOOT_MAINFLASH          (0x00000000U)

+#define SYSCFG_BOOT_SYSTEMFLASH        ((uint32_t)SYSCFG_MEMRMP_BOOT_MODE_0)

+#if defined(FSMC_R_BASE)

+#define SYSCFG_BOOT_FSMC               ((uint32_t)SYSCFG_MEMRMP_BOOT_MODE_1)

+#endif /* FSMC_R_BASE  */

+#define SYSCFG_BOOT_SRAM               ((uint32_t)SYSCFG_MEMRMP_BOOT_MODE)

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/** @defgroup RI_Constants RI: Routing Interface

+  * @{

+  */

+

+/** @defgroup RI_InputCapture Input Capture

+  * @{

+  */

+

+#define RI_INPUTCAPTURE_IC1  RI_ICR_IC1    /*!< Input Capture 1 */

+#define RI_INPUTCAPTURE_IC2  RI_ICR_IC2    /*!< Input Capture 2 */

+#define RI_INPUTCAPTURE_IC3  RI_ICR_IC3    /*!< Input Capture 3 */

+#define RI_INPUTCAPTURE_IC4  RI_ICR_IC4    /*!< Input Capture 4 */

+

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Select TIM Select

+  * @{

+  */

+

+#define TIM_SELECT_NONE  (0x00000000U)    /*!< None selected */

+#define TIM_SELECT_TIM2  ((uint32_t)RI_ICR_TIM_0)  /*!< Timer 2 selected */

+#define TIM_SELECT_TIM3  ((uint32_t)RI_ICR_TIM_1)  /*!< Timer 3 selected */

+#define TIM_SELECT_TIM4  ((uint32_t)RI_ICR_TIM)    /*!< Timer 4 selected */

+

+#define IS_RI_TIM(__TIM__) (((__TIM__) == TIM_SELECT_NONE) || \

+                        ((__TIM__) == TIM_SELECT_TIM2) || \

+                        ((__TIM__) == TIM_SELECT_TIM3) || \

+                        ((__TIM__) == TIM_SELECT_TIM4))

+

+/**

+  * @}

+  */

+

+/** @defgroup RI_InputCaptureRouting Input Capture Routing

+  * @{

+  */

+                                                          /* TIMx_IC1 TIMx_IC2  TIMx_IC3  TIMx_IC4 */

+#define RI_INPUTCAPTUREROUTING_0   (0x00000000U) /* PA0       PA1      PA2       PA3      */

+#define RI_INPUTCAPTUREROUTING_1   (0x00000001U) /* PA4       PA5      PA6       PA7      */

+#define RI_INPUTCAPTUREROUTING_2   (0x00000002U) /* PA8       PA9      PA10      PA11     */

+#define RI_INPUTCAPTUREROUTING_3   (0x00000003U) /* PA12      PA13     PA14      PA15     */

+#define RI_INPUTCAPTUREROUTING_4   (0x00000004U) /* PC0       PC1      PC2       PC3      */

+#define RI_INPUTCAPTUREROUTING_5   (0x00000005U) /* PC4       PC5      PC6       PC7      */

+#define RI_INPUTCAPTUREROUTING_6   (0x00000006U) /* PC8       PC9      PC10      PC11     */

+#define RI_INPUTCAPTUREROUTING_7   (0x00000007U) /* PC12      PC13     PC14      PC15     */

+#define RI_INPUTCAPTUREROUTING_8   (0x00000008U) /* PD0       PD1      PD2       PD3      */

+#define RI_INPUTCAPTUREROUTING_9   (0x00000009U) /* PD4       PD5      PD6       PD7      */

+#define RI_INPUTCAPTUREROUTING_10  (0x0000000AU) /* PD8       PD9      PD10      PD11     */

+#define RI_INPUTCAPTUREROUTING_11  (0x0000000BU) /* PD12      PD13     PD14      PD15     */

+#define RI_INPUTCAPTUREROUTING_12  (0x0000000CU) /* PE0       PE1      PE2       PE3      */

+#define RI_INPUTCAPTUREROUTING_13  (0x0000000DU) /* PE4       PE5      PE6       PE7      */

+#define RI_INPUTCAPTUREROUTING_14  (0x0000000EU) /* PE8       PE9      PE10      PE11     */

+#define RI_INPUTCAPTUREROUTING_15  (0x0000000FU) /* PE12      PE13     PE14      PE15     */

+

+#define IS_RI_INPUTCAPTURE_ROUTING(__ROUTING__) (((__ROUTING__) == RI_INPUTCAPTUREROUTING_0) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_1) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_2) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_3) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_4) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_5) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_6) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_7) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_8) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_9) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_10) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_11) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_12) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_13) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_14) || \

+                                             ((__ROUTING__) == RI_INPUTCAPTUREROUTING_15))

+

+/**

+  * @}

+  */

+

+/** @defgroup RI_IOSwitch IO Switch

+  * @{

+  */

+#define RI_ASCR1_REGISTER       (0x80000000U)

+/* ASCR1 I/O switch: bit 31 is set to '1' to indicate that the mask is in ASCR1 register */

+#define RI_IOSWITCH_CH0         ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_0)

+#define RI_IOSWITCH_CH1         ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_1)

+#define RI_IOSWITCH_CH2         ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_2)

+#define RI_IOSWITCH_CH3         ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_3)

+#define RI_IOSWITCH_CH4         ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_4)

+#define RI_IOSWITCH_CH5         ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_5)

+#define RI_IOSWITCH_CH6         ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_6)

+#define RI_IOSWITCH_CH7         ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_7)

+#define RI_IOSWITCH_CH8         ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_8)

+#define RI_IOSWITCH_CH9         ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_9)

+#define RI_IOSWITCH_CH10        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_10)

+#define RI_IOSWITCH_CH11        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_11)

+#define RI_IOSWITCH_CH12        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_12)

+#define RI_IOSWITCH_CH13        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_13)

+#define RI_IOSWITCH_CH14        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_14)

+#define RI_IOSWITCH_CH15        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_15)

+#define RI_IOSWITCH_CH18        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_18)

+#define RI_IOSWITCH_CH19        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_19)

+#define RI_IOSWITCH_CH20        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_20)

+#define RI_IOSWITCH_CH21        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_21)

+#define RI_IOSWITCH_CH22        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_22)

+#define RI_IOSWITCH_CH23        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_23)

+#define RI_IOSWITCH_CH24        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_24)

+#define RI_IOSWITCH_CH25        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_25)

+#define RI_IOSWITCH_VCOMP       ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_VCOMP) /* VCOMP (ADC channel 26) is an internal switch used to connect selected channel to COMP1 non inverting input */

+#if defined (RI_ASCR2_CH1b) /* STM32L1 devices category Cat.4 and Cat.5 */

+#define RI_IOSWITCH_CH27        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_27)

+#define RI_IOSWITCH_CH28        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_28)

+#define RI_IOSWITCH_CH29        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_29)

+#define RI_IOSWITCH_CH30        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_30)

+#define RI_IOSWITCH_CH31        ((uint32_t)RI_ASCR1_REGISTER | RI_ASCR1_CH_31)

+#endif /* RI_ASCR2_CH1b */

+

+/* ASCR2 IO switch: bit 31 is set to '0' to indicate that the mask is in ASCR2 register */

+#define RI_IOSWITCH_GR10_1      ((uint32_t)RI_ASCR2_GR10_1)

+#define RI_IOSWITCH_GR10_2      ((uint32_t)RI_ASCR2_GR10_2)

+#define RI_IOSWITCH_GR10_3      ((uint32_t)RI_ASCR2_GR10_3)

+#define RI_IOSWITCH_GR10_4      ((uint32_t)RI_ASCR2_GR10_4)

+#define RI_IOSWITCH_GR6_1       ((uint32_t)RI_ASCR2_GR6_1)

+#define RI_IOSWITCH_GR6_2       ((uint32_t)RI_ASCR2_GR6_2)

+#define RI_IOSWITCH_GR5_1       ((uint32_t)RI_ASCR2_GR5_1)

+#define RI_IOSWITCH_GR5_2       ((uint32_t)RI_ASCR2_GR5_2)

+#define RI_IOSWITCH_GR5_3       ((uint32_t)RI_ASCR2_GR5_3)

+#define RI_IOSWITCH_GR4_1       ((uint32_t)RI_ASCR2_GR4_1)

+#define RI_IOSWITCH_GR4_2       ((uint32_t)RI_ASCR2_GR4_2)

+#define RI_IOSWITCH_GR4_3       ((uint32_t)RI_ASCR2_GR4_3)

+#if defined (RI_ASCR2_CH0b) /* STM32L1 devices category Cat.3, Cat.4 and Cat.5 */

+#define RI_IOSWITCH_CH0b        ((uint32_t)RI_ASCR2_CH0b)

+#if defined (RI_ASCR2_CH1b) /* STM32L1 devices category Cat.4 and Cat.5 */

+#define RI_IOSWITCH_CH1b        ((uint32_t)RI_ASCR2_CH1b)

+#define RI_IOSWITCH_CH2b        ((uint32_t)RI_ASCR2_CH2b)

+#define RI_IOSWITCH_CH3b        ((uint32_t)RI_ASCR2_CH3b)

+#define RI_IOSWITCH_CH6b        ((uint32_t)RI_ASCR2_CH6b)

+#define RI_IOSWITCH_CH7b        ((uint32_t)RI_ASCR2_CH7b)

+#define RI_IOSWITCH_CH8b        ((uint32_t)RI_ASCR2_CH8b)

+#define RI_IOSWITCH_CH9b        ((uint32_t)RI_ASCR2_CH9b)

+#define RI_IOSWITCH_CH10b       ((uint32_t)RI_ASCR2_CH10b)

+#define RI_IOSWITCH_CH11b       ((uint32_t)RI_ASCR2_CH11b)

+#define RI_IOSWITCH_CH12b       ((uint32_t)RI_ASCR2_CH12b)

+#endif /* RI_ASCR2_CH1b */

+#define RI_IOSWITCH_GR6_3       ((uint32_t)RI_ASCR2_GR6_3)

+#define RI_IOSWITCH_GR6_4       ((uint32_t)RI_ASCR2_GR6_4)

+#endif /* RI_ASCR2_CH0b */

+

+

+#if defined (RI_ASCR2_CH1b) /* STM32L1 devices category Cat.4 and Cat.5 */

+

+#define IS_RI_IOSWITCH(__IOSWITCH__) (((__IOSWITCH__) == RI_IOSWITCH_CH0) || ((__IOSWITCH__) == RI_IOSWITCH_CH1)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH2)     || ((__IOSWITCH__) == RI_IOSWITCH_CH3)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH4)     || ((__IOSWITCH__) == RI_IOSWITCH_CH5)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH6)     || ((__IOSWITCH__) == RI_IOSWITCH_CH7)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH8)     || ((__IOSWITCH__) == RI_IOSWITCH_CH9)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH10)    || ((__IOSWITCH__) == RI_IOSWITCH_CH11)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH12)    || ((__IOSWITCH__) == RI_IOSWITCH_CH13)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH14)    || ((__IOSWITCH__) == RI_IOSWITCH_CH15)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH18)    || ((__IOSWITCH__) == RI_IOSWITCH_CH19)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH20)    || ((__IOSWITCH__) == RI_IOSWITCH_CH21)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH22)    || ((__IOSWITCH__) == RI_IOSWITCH_CH23)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH24)    || ((__IOSWITCH__) == RI_IOSWITCH_CH25)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_VCOMP)   || ((__IOSWITCH__) == RI_IOSWITCH_CH27)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH28)    || ((__IOSWITCH__) == RI_IOSWITCH_CH29)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH30)    || ((__IOSWITCH__) == RI_IOSWITCH_CH31)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR10_1)  || ((__IOSWITCH__) == RI_IOSWITCH_GR10_2) || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR10_3)  || ((__IOSWITCH__) == RI_IOSWITCH_GR10_4) || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR6_1)   || ((__IOSWITCH__) == RI_IOSWITCH_GR6_2)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR6_3)   || ((__IOSWITCH__) == RI_IOSWITCH_GR6_4)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR5_1)   || ((__IOSWITCH__) == RI_IOSWITCH_GR5_2)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR5_3)   || ((__IOSWITCH__) == RI_IOSWITCH_GR4_1)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR4_2)   || ((__IOSWITCH__) == RI_IOSWITCH_GR4_3)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH0b)    || ((__IOSWITCH__) == RI_IOSWITCH_CH1b)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH2b)    || ((__IOSWITCH__) == RI_IOSWITCH_CH3b)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH6b)    || ((__IOSWITCH__) == RI_IOSWITCH_CH7b)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH8b)    || ((__IOSWITCH__) == RI_IOSWITCH_CH9b)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH10b)   || ((__IOSWITCH__) == RI_IOSWITCH_CH11b)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH12b))

+

+#else /* !RI_ASCR2_CH1b */

+

+#if defined (RI_ASCR2_CH0b) /* STM32L1 devices category Cat.3 */

+

+#define IS_RI_IOSWITCH(__IOSWITCH__) (((__IOSWITCH__) == RI_IOSWITCH_CH0) || ((__IOSWITCH__) == RI_IOSWITCH_CH1)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH2)     || ((__IOSWITCH__) == RI_IOSWITCH_CH3)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH4)     || ((__IOSWITCH__) == RI_IOSWITCH_CH5)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH6)     || ((__IOSWITCH__) == RI_IOSWITCH_CH7)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH8)     || ((__IOSWITCH__) == RI_IOSWITCH_CH9)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH10)    || ((__IOSWITCH__) == RI_IOSWITCH_CH11)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH12)    || ((__IOSWITCH__) == RI_IOSWITCH_CH13)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH14)    || ((__IOSWITCH__) == RI_IOSWITCH_CH15)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH18)    || ((__IOSWITCH__) == RI_IOSWITCH_CH19)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH20)    || ((__IOSWITCH__) == RI_IOSWITCH_CH21)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH22)    || ((__IOSWITCH__) == RI_IOSWITCH_CH23)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH24)    || ((__IOSWITCH__) == RI_IOSWITCH_CH25)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_VCOMP)   || ((__IOSWITCH__) == RI_IOSWITCH_GR10_1) || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR10_2)  || ((__IOSWITCH__) == RI_IOSWITCH_GR10_3) || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR10_4)  || ((__IOSWITCH__) == RI_IOSWITCH_GR6_1)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR6_2)   || ((__IOSWITCH__) == RI_IOSWITCH_GR5_1)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR5_2)   || ((__IOSWITCH__) == RI_IOSWITCH_GR5_3)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR4_1)   || ((__IOSWITCH__) == RI_IOSWITCH_GR4_2)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR4_3)   || ((__IOSWITCH__) == RI_IOSWITCH_CH0b))

+

+#else /* !RI_ASCR2_CH0b */  /* STM32L1 devices category Cat.1 and Cat.2 */

+

+#define IS_RI_IOSWITCH(__IOSWITCH__) (((__IOSWITCH__) == RI_IOSWITCH_CH0) || ((__IOSWITCH__) == RI_IOSWITCH_CH1)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH2)     || ((__IOSWITCH__) == RI_IOSWITCH_CH3)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH4)     || ((__IOSWITCH__) == RI_IOSWITCH_CH5)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH6)     || ((__IOSWITCH__) == RI_IOSWITCH_CH7)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH8)     || ((__IOSWITCH__) == RI_IOSWITCH_CH9)    || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH10)    || ((__IOSWITCH__) == RI_IOSWITCH_CH11)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH12)    || ((__IOSWITCH__) == RI_IOSWITCH_CH13)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH14)    || ((__IOSWITCH__) == RI_IOSWITCH_CH15)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH18)    || ((__IOSWITCH__) == RI_IOSWITCH_CH19)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH20)    || ((__IOSWITCH__) == RI_IOSWITCH_CH21)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH22)    || ((__IOSWITCH__) == RI_IOSWITCH_CH23)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_CH24)    || ((__IOSWITCH__) == RI_IOSWITCH_CH25)   || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_VCOMP)   || ((__IOSWITCH__) == RI_IOSWITCH_GR10_1) || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR10_2)  || ((__IOSWITCH__) == RI_IOSWITCH_GR10_3) || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR10_4)  || ((__IOSWITCH__) == RI_IOSWITCH_GR6_1)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR6_2)   || ((__IOSWITCH__) == RI_IOSWITCH_GR5_1)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR5_2)   || ((__IOSWITCH__) == RI_IOSWITCH_GR5_3)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR4_1)   || ((__IOSWITCH__) == RI_IOSWITCH_GR4_2)  || \

+                                  ((__IOSWITCH__) == RI_IOSWITCH_GR4_3))

+

+#endif /* RI_ASCR2_CH0b */

+#endif /* RI_ASCR2_CH1b */

+

+/**

+  * @}

+  */

+

+/** @defgroup RI_Pin PIN define

+  * @{

+  */

+#define RI_PIN_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */

+#define RI_PIN_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */

+#define RI_PIN_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */

+#define RI_PIN_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */

+#define RI_PIN_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */

+#define RI_PIN_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */

+#define RI_PIN_6                 ((uint16_t)0x0040)  /*!< Pin 6 selected */

+#define RI_PIN_7                 ((uint16_t)0x0080)  /*!< Pin 7 selected */

+#define RI_PIN_8                 ((uint16_t)0x0100)  /*!< Pin 8 selected */

+#define RI_PIN_9                 ((uint16_t)0x0200)  /*!< Pin 9 selected */

+#define RI_PIN_10                ((uint16_t)0x0400)  /*!< Pin 10 selected */

+#define RI_PIN_11                ((uint16_t)0x0800)  /*!< Pin 11 selected */

+#define RI_PIN_12                ((uint16_t)0x1000)  /*!< Pin 12 selected */

+#define RI_PIN_13                ((uint16_t)0x2000)  /*!< Pin 13 selected */

+#define RI_PIN_14                ((uint16_t)0x4000)  /*!< Pin 14 selected */

+#define RI_PIN_15                ((uint16_t)0x8000)  /*!< Pin 15 selected */

+#define RI_PIN_ALL               ((uint16_t)0xFFFF)  /*!< All pins selected */

+

+#define IS_RI_PIN(__PIN__) ((__PIN__) != (uint16_t)0x00)

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Exported macros -----------------------------------------------------------*/

+

+/** @defgroup HAL_Exported_Macros HAL Exported Macros

+  * @{

+  */

+

+/** @defgroup DBGMCU_Macros DBGMCU: Debug MCU

+  * @{

+  */

+

+/** @defgroup DBGMCU_Freeze_Unfreeze Freeze Unfreeze Peripherals in Debug mode

+  * @brief   Freeze/Unfreeze Peripherals in Debug mode

+  * @{

+  */

+

+/**

+  * @brief  TIM2 Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB1_FZ_DBG_TIM2_STOP)

+#define __HAL_DBGMCU_FREEZE_TIM2()            SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM2_STOP)

+#define __HAL_DBGMCU_UNFREEZE_TIM2()          CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM2_STOP)

+#endif

+

+/**

+  * @brief  TIM3 Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB1_FZ_DBG_TIM3_STOP)

+#define __HAL_DBGMCU_FREEZE_TIM3()            SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM3_STOP)

+#define __HAL_DBGMCU_UNFREEZE_TIM3()          CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM3_STOP)

+#endif

+

+/**

+  * @brief  TIM4 Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB1_FZ_DBG_TIM4_STOP)

+#define __HAL_DBGMCU_FREEZE_TIM4()            SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM4_STOP)

+#define __HAL_DBGMCU_UNFREEZE_TIM4()          CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM4_STOP)

+#endif

+

+/**

+  * @brief  TIM5 Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB1_FZ_DBG_TIM5_STOP)

+#define __HAL_DBGMCU_FREEZE_TIM5()            SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM5_STOP)

+#define __HAL_DBGMCU_UNFREEZE_TIM5()          CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM5_STOP)

+#endif

+

+/**

+  * @brief  TIM6 Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB1_FZ_DBG_TIM6_STOP)

+#define __HAL_DBGMCU_FREEZE_TIM6()            SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM6_STOP)

+#define __HAL_DBGMCU_UNFREEZE_TIM6()          CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM6_STOP)

+#endif

+

+/**

+  * @brief  TIM7 Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB1_FZ_DBG_TIM7_STOP)

+#define __HAL_DBGMCU_FREEZE_TIM7()            SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM7_STOP)

+#define __HAL_DBGMCU_UNFREEZE_TIM7()          CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM7_STOP)

+#endif

+

+/**

+  * @brief  RTC Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB1_FZ_DBG_RTC_STOP)

+#define __HAL_DBGMCU_FREEZE_RTC()             SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_RTC_STOP)

+#define __HAL_DBGMCU_UNFREEZE_RTC()           CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_RTC_STOP)

+#endif

+

+/**

+  * @brief  WWDG Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB1_FZ_DBG_WWDG_STOP)

+#define __HAL_DBGMCU_FREEZE_WWDG()            SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_WWDG_STOP)

+#define __HAL_DBGMCU_UNFREEZE_WWDG()          CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_WWDG_STOP)

+#endif

+

+/**

+  * @brief  IWDG Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB1_FZ_DBG_IWDG_STOP)

+#define __HAL_DBGMCU_FREEZE_IWDG()            SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_IWDG_STOP)

+#define __HAL_DBGMCU_UNFREEZE_IWDG()          CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_IWDG_STOP)

+#endif

+

+/**

+  * @brief  I2C1 Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)

+#define __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT()    SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)

+#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT()  CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)

+#endif

+

+/**

+  * @brief  I2C2 Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT)

+#define __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT()    SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT)

+#define __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT()  CLEAR_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT)

+#endif

+

+/**

+  * @brief  TIM9 Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB2_FZ_DBG_TIM9_STOP)

+#define __HAL_DBGMCU_FREEZE_TIM9()            SET_BIT(DBGMCU->APB2FZ, DBGMCU_APB2_FZ_DBG_TIM9_STOP)

+#define __HAL_DBGMCU_UNFREEZE_TIM9()          CLEAR_BIT(DBGMCU->APB2FZ, DBGMCU_APB2_FZ_DBG_TIM9_STOP)

+#endif

+

+/**

+  * @brief  TIM10 Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB2_FZ_DBG_TIM10_STOP)

+#define __HAL_DBGMCU_FREEZE_TIM10()           SET_BIT(DBGMCU->APB2FZ, DBGMCU_APB2_FZ_DBG_TIM10_STOP)

+#define __HAL_DBGMCU_UNFREEZE_TIM10()         CLEAR_BIT(DBGMCU->APB2FZ, DBGMCU_APB2_FZ_DBG_TIM10_STOP)

+#endif

+

+/**

+  * @brief  TIM11 Peripherals Debug mode

+  */

+#if defined (DBGMCU_APB2_FZ_DBG_TIM11_STOP)

+#define __HAL_DBGMCU_FREEZE_TIM11()           SET_BIT(DBGMCU->APB2FZ, DBGMCU_APB2_FZ_DBG_TIM11_STOP)

+#define __HAL_DBGMCU_UNFREEZE_TIM11()         CLEAR_BIT(DBGMCU->APB2FZ, DBGMCU_APB2_FZ_DBG_TIM11_STOP)

+#endif

+

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/** @defgroup SYSCFG_Macros SYSCFG: SYStem ConFiG

+  * @{

+  */

+

+/** @defgroup SYSCFG_VrefInt VREFINT configuration

+  * @{

+  */

+

+/**

+  * @brief  Enables or disables the output of internal reference voltage

+  *         (VrefInt) on I/O pin.

+  * @note   The VrefInt output can be routed to any I/O in group 3:

+  *          - For Cat.1 and Cat.2 devices: CH8 (PB0) or CH9 (PB1).

+  *          - For Cat.3 devices: CH8 (PB0), CH9 (PB1) or CH0b (PB2).

+  *          - For Cat.4 and Cat.5 devices: CH8 (PB0), CH9 (PB1), CH0b (PB2),

+  *            CH1b (PF11) or CH2b (PF12).

+  *         Note: Comparator peripheral clock must be preliminarily enabled,

+  *               either in COMP user function "HAL_COMP_MspInit()" (should be

+  *               done if comparators are used) or by direct clock enable:

+  *               Refer to macro "__HAL_RCC_COMP_CLK_ENABLE()".

+  *         Note: In addition with this macro, VrefInt output buffer must be

+  *               connected to the selected I/O pin. Refer to macro

+  *               "__HAL_RI_IOSWITCH_CLOSE()".

+  * @note  VrefInt output enable: Internal reference voltage connected to I/O group 3

+  *        VrefInt output disable: Internal reference voltage disconnected from I/O group 3

+  * @retval None

+  */

+#define __HAL_SYSCFG_VREFINT_OUT_ENABLE()       SET_BIT(COMP->CSR, COMP_CSR_VREFOUTEN)

+#define __HAL_SYSCFG_VREFINT_OUT_DISABLE()      CLEAR_BIT(COMP->CSR, COMP_CSR_VREFOUTEN)

+

+/**

+  * @}

+  */

+

+/** @defgroup SYSCFG_BootModeConfig Boot Mode Configuration

+  * @{

+  */

+

+/**

+  * @brief  Main Flash memory mapped at 0x00000000

+  */

+#define __HAL_SYSCFG_REMAPMEMORY_FLASH()             CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE)

+

+/** @brief  System Flash memory mapped at 0x00000000

+  */

+#define __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH()       MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, SYSCFG_MEMRMP_MEM_MODE_0)

+

+/** @brief  Embedded SRAM mapped at 0x00000000

+  */

+#define __HAL_SYSCFG_REMAPMEMORY_SRAM()              MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, SYSCFG_MEMRMP_MEM_MODE_0 | SYSCFG_MEMRMP_MEM_MODE_1)

+

+#if defined(FSMC_R_BASE)

+/** @brief  FSMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000

+  */

+#define __HAL_SYSCFG_REMAPMEMORY_FSMC()              MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, SYSCFG_MEMRMP_MEM_MODE_1)

+

+#endif /* FSMC_R_BASE */

+

+/**

+  * @brief  Returns the boot mode as configured by user.

+  * @retval The boot mode as configured by user. The returned value can be one

+  *         of the following values:

+  *           @arg SYSCFG_BOOT_MAINFLASH

+  *           @arg SYSCFG_BOOT_SYSTEMFLASH

+  *           @arg SYSCFG_BOOT_FSMC (available only for STM32L151xD, STM32L152xD & STM32L162xD)

+  *           @arg SYSCFG_BOOT_SRAM

+  */

+#define __HAL_SYSCFG_GET_BOOT_MODE()          READ_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_BOOT_MODE)

+

+/**

+  * @}

+  */

+

+/** @defgroup SYSCFG_USBConfig USB DP line Configuration

+  * @{

+  */

+

+/**

+  * @brief  Control the internal pull-up on USB DP line.

+  */

+#define __HAL_SYSCFG_USBPULLUP_ENABLE()       SET_BIT(SYSCFG->PMC, SYSCFG_PMC_USB_PU)

+

+#define __HAL_SYSCFG_USBPULLUP_DISABLE()      CLEAR_BIT(SYSCFG->PMC, SYSCFG_PMC_USB_PU)

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/** @defgroup RI_Macris RI: Routing Interface

+  * @{

+  */

+

+/** @defgroup RI_InputCaputureConfig Input Capture configuration

+  * @{

+  */

+

+/**

+  * @brief  Configures the routing interface to map Input Capture 1 of TIMx to a selected I/O pin.

+  * @param  __TIMSELECT__ Timer select.

+  *   This parameter can be one of the following values:

+  *     @arg TIM_SELECT_NONE: No timer selected and default Timer mapping is enabled.

+  *     @arg TIM_SELECT_TIM2: Timer 2 Input Captures to be routed.

+  *     @arg TIM_SELECT_TIM3: Timer 3 Input Captures to be routed.

+  *     @arg TIM_SELECT_TIM4: Timer 4 Input Captures to be routed.

+  * @param  __INPUT__ selects which pin to be routed to Input Capture.

+  *   This parameter must be a value of @ref RI_InputCaptureRouting

+  *     e.g.

+  *       __HAL_RI_REMAP_INPUTCAPTURE1(TIM_SELECT_TIM2, RI_INPUTCAPTUREROUTING_1)

+  *       allows routing of Input capture IC1 of TIM2 to PA4.

+  *       For details about correspondence between RI_INPUTCAPTUREROUTING_x

+  *       and I/O pins refer to the parameters' description in the header file

+  *       or refer to the product reference manual.

+  * @note Input capture selection bits are not reset by this function.

+  *       To reset input capture selection bits, use SYSCFG_RIDeInit() function.

+  * @note The I/O should be configured in alternate function mode (AF14) using

+  *       GPIO_PinAFConfig() function.

+  * @retval None.

+  */

+#define __HAL_RI_REMAP_INPUTCAPTURE1(__TIMSELECT__, __INPUT__)  \

+          do {assert_param(IS_RI_TIM(__TIMSELECT__)); \

+              assert_param(IS_RI_INPUTCAPTURE_ROUTING(__INPUT__)); \

+              MODIFY_REG(RI->ICR, RI_ICR_TIM, (__TIMSELECT__)); \

+              SET_BIT(RI->ICR, RI_INPUTCAPTURE_IC1); \

+              MODIFY_REG(RI->ICR, RI_ICR_IC1OS, (__INPUT__) << POSITION_VAL(RI_ICR_IC1OS)); \

+          }while(0)

+

+/**

+  * @brief  Configures the routing interface to map Input Capture 2 of TIMx to a selected I/O pin.

+  * @param  __TIMSELECT__ Timer select.

+  *   This parameter can be one of the following values:

+  *     @arg TIM_SELECT_NONE: No timer selected and default Timer mapping is enabled.

+  *     @arg TIM_SELECT_TIM2: Timer 2 Input Captures to be routed.

+  *     @arg TIM_SELECT_TIM3: Timer 3 Input Captures to be routed.

+  *     @arg TIM_SELECT_TIM4: Timer 4 Input Captures to be routed.

+  * @param  __INPUT__ selects which pin to be routed to Input Capture.

+  *   This parameter must be a value of @ref RI_InputCaptureRouting

+  * @retval None.

+  */

+#define __HAL_RI_REMAP_INPUTCAPTURE2(__TIMSELECT__, __INPUT__)  \

+          do {assert_param(IS_RI_TIM(__TIMSELECT__)); \

+              assert_param(IS_RI_INPUTCAPTURE_ROUTING(__INPUT__)); \

+              MODIFY_REG(RI->ICR, RI_ICR_TIM, (__TIMSELECT__)); \

+              SET_BIT(RI->ICR, RI_INPUTCAPTURE_IC2); \

+              MODIFY_REG(RI->ICR, RI_ICR_IC2OS, (__INPUT__) << POSITION_VAL(RI_ICR_IC2OS)); \

+          }while(0)

+

+/**

+  * @brief  Configures the routing interface to map Input Capture 3 of TIMx to a selected I/O pin.

+  * @param  __TIMSELECT__ Timer select.

+  *   This parameter can be one of the following values:

+  *     @arg TIM_SELECT_NONE: No timer selected and default Timer mapping is enabled.

+  *     @arg TIM_SELECT_TIM2: Timer 2 Input Captures to be routed.

+  *     @arg TIM_SELECT_TIM3: Timer 3 Input Captures to be routed.

+  *     @arg TIM_SELECT_TIM4: Timer 4 Input Captures to be routed.

+  * @param  __INPUT__ selects which pin to be routed to Input Capture.

+  *   This parameter must be a value of @ref RI_InputCaptureRouting

+  * @retval None.

+  */

+#define __HAL_RI_REMAP_INPUTCAPTURE3(__TIMSELECT__, __INPUT__)  \

+          do {assert_param(IS_RI_TIM(__TIMSELECT__)); \

+              assert_param(IS_RI_INPUTCAPTURE_ROUTING(__INPUT__)); \

+              MODIFY_REG(RI->ICR, RI_ICR_TIM, (__TIMSELECT__)); \

+              SET_BIT(RI->ICR, RI_INPUTCAPTURE_IC3); \

+              MODIFY_REG(RI->ICR, RI_ICR_IC3OS, (__INPUT__) << POSITION_VAL(RI_ICR_IC3OS)); \

+          }while(0)

+

+/**

+  * @brief  Configures the routing interface to map Input Capture 4 of TIMx to a selected I/O pin.

+  * @param  __TIMSELECT__ Timer select.

+  *   This parameter can be one of the following values:

+  *     @arg TIM_SELECT_NONE: No timer selected and default Timer mapping is enabled.

+  *     @arg TIM_SELECT_TIM2: Timer 2 Input Captures to be routed.

+  *     @arg TIM_SELECT_TIM3: Timer 3 Input Captures to be routed.

+  *     @arg TIM_SELECT_TIM4: Timer 4 Input Captures to be routed.

+  * @param  __INPUT__ selects which pin to be routed to Input Capture.

+  *   This parameter must be a value of @ref RI_InputCaptureRouting

+  * @retval None.

+  */

+#define __HAL_RI_REMAP_INPUTCAPTURE4(__TIMSELECT__, __INPUT__)  \

+          do {assert_param(IS_RI_TIM(__TIMSELECT__)); \

+              assert_param(IS_RI_INPUTCAPTURE_ROUTING(__INPUT__)); \

+              MODIFY_REG(RI->ICR, RI_ICR_TIM, (__TIMSELECT__)); \

+              SET_BIT(RI->ICR, RI_INPUTCAPTURE_IC4); \

+              MODIFY_REG(RI->ICR, RI_ICR_IC4OS, (__INPUT__) << POSITION_VAL(RI_ICR_IC4OS)); \

+          }while(0)

+

+/**

+  * @}

+  */

+

+/** @defgroup RI_SwitchControlConfig Switch Control configuration

+  * @{

+  */

+

+/**

+  * @brief  Enable or disable the switch control mode.

+  * @note  ENABLE: ADC analog switches closed if the corresponding

+  *                    I/O switch is also closed.

+  *                    When using COMP1, switch control mode must be enabled.

+  * @note  DISABLE: ADC analog switches open or controlled by the ADC interface.

+  *                    When using the ADC for acquisition, switch control mode

+  *                    must be disabled.

+  * @note COMP1 comparator and ADC cannot be used at the same time since

+  *       they share the ADC switch matrix.

+  * @retval None

+  */

+#define __HAL_RI_SWITCHCONTROLMODE_ENABLE()       SET_BIT(RI->ASCR1, RI_ASCR1_SCM)

+

+#define __HAL_RI_SWITCHCONTROLMODE_DISABLE()      CLEAR_BIT(RI->ASCR1, RI_ASCR1_SCM)

+

+/*

+  * @brief  Close or Open the routing interface Input Output switches.

+  * @param  __IOSWITCH__ selects the I/O analog switch number.

+  *   This parameter must be a value of @ref RI_IOSwitch

+  * @retval None

+  */

+#define __HAL_RI_IOSWITCH_CLOSE(__IOSWITCH__) do { assert_param(IS_RI_IOSWITCH(__IOSWITCH__)); \

+            if ((__IOSWITCH__) >> 31 != 0 ) \

+            { \

+              SET_BIT(RI->ASCR1, (__IOSWITCH__) & 0x7FFFFFFF); \

+            } \

+            else \

+            { \

+              SET_BIT(RI->ASCR2, (__IOSWITCH__)); \

+            } \

+          }while(0)

+

+#define __HAL_RI_IOSWITCH_OPEN(__IOSWITCH__) do { assert_param(IS_RI_IOSWITCH(__IOSWITCH__)); \

+            if ((__IOSWITCH__) >> 31 != 0 ) \

+            { \

+              CLEAR_BIT(RI->ASCR1, (__IOSWITCH__) & 0x7FFFFFFF); \

+            } \

+            else \

+            { \

+              CLEAR_BIT(RI->ASCR2, (__IOSWITCH__)); \

+            } \

+          }while(0)

+

+#if defined (COMP_CSR_SW1)

+/**

+  * @brief  Close or open the internal switch COMP1_SW1.

+  *         This switch connects I/O pin PC3 (can be used as ADC channel 13)

+  *         and OPAMP3 ouput to ADC switch matrix (ADC channel VCOMP, channel

+  *         26) and COMP1 non-inverting input.

+  *         Pin PC3 connection depends on another switch setting, refer to

+  *         macro "__HAL_ADC_CHANNEL_SPEED_FAST()".

+  * @retval None.

+  */

+#define __HAL_RI_SWITCH_COMP1_SW1_CLOSE()  SET_BIT(COMP->CSR, COMP_CSR_SW1)

+

+#define __HAL_RI_SWITCH_COMP1_SW1_OPEN()   CLEAR_BIT(COMP->CSR, COMP_CSR_SW1)

+#endif /* COMP_CSR_SW1 */

+

+/**

+  * @}

+  */

+

+/** @defgroup RI_HystConfig Hysteresis Activation and Deactivation

+  * @{

+  */

+

+/**

+  * @brief  Enable or disable Hysteresis of the input schmitt triger of Ports A

+  *         When the I/Os are programmed in input mode by standard I/O port

+  *         registers, the Schmitt trigger and the hysteresis are enabled by default.

+  *         When hysteresis is disabled, it is possible to read the

+  *         corresponding port with a trigger level of VDDIO/2.

+  *  @param __IOPIN__ : Selects the pin(s) on which to enable or disable hysteresis.

+  *   This parameter must be a value of @ref RI_Pin

+  * @retval None

+  */

+#define __HAL_RI_HYSTERIS_PORTA_ON(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            CLEAR_BIT(RI->HYSCR1, (__IOPIN__)); \

+          } while(0)

+

+#define __HAL_RI_HYSTERIS_PORTA_OFF(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            SET_BIT(RI->HYSCR1, (__IOPIN__)); \

+          } while(0)

+

+/**

+  * @brief  Enable or disable Hysteresis of the input schmitt triger of Ports B

+  *         When the I/Os are programmed in input mode by standard I/O port

+  *         registers, the Schmitt trigger and the hysteresis are enabled by default.

+  *         When hysteresis is disabled, it is possible to read the

+  *         corresponding port with a trigger level of VDDIO/2.

+  *  @param __IOPIN__ : Selects the pin(s) on which to enable or disable hysteresis.

+  *   This parameter must be a value of @ref RI_Pin

+  * @retval None

+  */

+#define __HAL_RI_HYSTERIS_PORTB_ON(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            CLEAR_BIT(RI->HYSCR1, (__IOPIN__) << 16 ); \

+          } while(0)

+

+#define __HAL_RI_HYSTERIS_PORTB_OFF(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            SET_BIT(RI->HYSCR1, (__IOPIN__) << 16 ); \

+          } while(0)

+

+/**

+  * @brief  Enable or disable Hysteresis of the input schmitt triger of Ports C

+  *         When the I/Os are programmed in input mode by standard I/O port

+  *         registers, the Schmitt trigger and the hysteresis are enabled by default.

+  *         When hysteresis is disabled, it is possible to read the

+  *         corresponding port with a trigger level of VDDIO/2.

+  *  @param __IOPIN__ : Selects the pin(s) on which to enable or disable hysteresis.

+  *   This parameter must be a value of @ref RI_Pin

+  * @retval None

+  */

+#define __HAL_RI_HYSTERIS_PORTC_ON(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            CLEAR_BIT(RI->HYSCR2, (__IOPIN__)); \

+          } while(0)

+

+#define __HAL_RI_HYSTERIS_PORTC_OFF(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            SET_BIT(RI->HYSCR2, (__IOPIN__)); \

+          } while(0)

+

+/**

+  * @brief  Enable or disable Hysteresis of the input schmitt triger of Ports D

+  *         When the I/Os are programmed in input mode by standard I/O port

+  *         registers, the Schmitt trigger and the hysteresis are enabled by default.

+  *         When hysteresis is disabled, it is possible to read the

+  *         corresponding port with a trigger level of VDDIO/2.

+  *  @param __IOPIN__ : Selects the pin(s) on which to enable or disable hysteresis.

+  *   This parameter must be a value of @ref RI_Pin

+  * @retval None

+  */

+#define __HAL_RI_HYSTERIS_PORTD_ON(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            CLEAR_BIT(RI->HYSCR2, (__IOPIN__) << 16 ); \

+          } while(0)

+

+#define __HAL_RI_HYSTERIS_PORTD_OFF(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            SET_BIT(RI->HYSCR2, (__IOPIN__) << 16 ); \

+          } while(0)

+

+#if defined (GPIOE_BASE)

+

+/**

+  * @brief  Enable or disable Hysteresis of the input schmitt triger of Ports E

+  *         When the I/Os are programmed in input mode by standard I/O port

+  *         registers, the Schmitt trigger and the hysteresis are enabled by default.

+  *         When hysteresis is disabled, it is possible to read the

+  *         corresponding port with a trigger level of VDDIO/2.

+  *  @param __IOPIN__ : Selects the pin(s) on which to enable or disable hysteresis.

+  *   This parameter must be a value of @ref RI_Pin

+  * @retval None

+  */

+#define __HAL_RI_HYSTERIS_PORTE_ON(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            CLEAR_BIT(RI->HYSCR3, (__IOPIN__)); \

+          } while(0)

+

+#define __HAL_RI_HYSTERIS_PORTE_OFF(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            SET_BIT(RI->HYSCR3, (__IOPIN__)); \

+          } while(0)

+

+#endif /* GPIOE_BASE */

+

+#if defined(GPIOF_BASE) || defined(GPIOG_BASE)

+

+/**

+  * @brief  Enable or disable Hysteresis of the input schmitt triger of Ports F

+  *         When the I/Os are programmed in input mode by standard I/O port

+  *         registers, the Schmitt trigger and the hysteresis are enabled by default.

+  *         When hysteresis is disabled, it is possible to read the

+  *         corresponding port with a trigger level of VDDIO/2.

+  *  @param __IOPIN__ : Selects the pin(s) on which to enable or disable hysteresis.

+  *   This parameter must be a value of @ref RI_Pin

+  * @retval None

+  */

+#define __HAL_RI_HYSTERIS_PORTF_ON(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            CLEAR_BIT(RI->HYSCR3, (__IOPIN__) << 16 ); \

+          } while(0)

+

+#define __HAL_RI_HYSTERIS_PORTF_OFF(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            SET_BIT(RI->HYSCR3, (__IOPIN__) << 16 ); \

+          } while(0)

+

+/**

+  * @brief  Enable or disable Hysteresis of the input schmitt triger of Ports G

+  *         When the I/Os are programmed in input mode by standard I/O port

+  *         registers, the Schmitt trigger and the hysteresis are enabled by default.

+  *         When hysteresis is disabled, it is possible to read the

+  *         corresponding port with a trigger level of VDDIO/2.

+  *  @param __IOPIN__ : Selects the pin(s) on which to enable or disable hysteresis.

+  *   This parameter must be a value of @ref RI_Pin

+  * @retval None

+  */

+#define __HAL_RI_HYSTERIS_PORTG_ON(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            CLEAR_BIT(RI->HYSCR4, (__IOPIN__)); \

+          } while(0)

+

+#define __HAL_RI_HYSTERIS_PORTG_OFF(__IOPIN__) do {assert_param(IS_RI_PIN(__IOPIN__)); \

+            SET_BIT(RI->HYSCR4, (__IOPIN__)); \

+          } while(0)

+

+#endif /* GPIOF_BASE || GPIOG_BASE */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Exported variables --------------------------------------------------------*/

+/** @defgroup HAL_Exported_Variables HAL Exported Variables

+  * @{

+  */

+extern __IO uint32_t uwTick;

+extern uint32_t uwTickPrio;

+extern uint32_t uwTickFreq;

+/**

+  * @}

+  */

+

+/* Exported functions --------------------------------------------------------*/

+/** @addtogroup HAL_Exported_Functions

+  * @{

+  */

+

+/** @addtogroup HAL_Exported_Functions_Group1

+  * @{

+  */

+

+/* Initialization and de-initialization functions  ******************************/

+HAL_StatusTypeDef HAL_Init(void);

+HAL_StatusTypeDef HAL_DeInit(void);

+void              HAL_MspInit(void);

+void              HAL_MspDeInit(void);

+HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority);

+

+/**

+  * @}

+  */

+

+/** @addtogroup HAL_Exported_Functions_Group2

+  * @{

+  */

+

+/* Peripheral Control functions  ************************************************/

+void               HAL_IncTick(void);

+void               HAL_Delay(uint32_t Delay);

+uint32_t           HAL_GetTick(void);

+uint32_t           HAL_GetTickPrio(void);

+HAL_StatusTypeDef  HAL_SetTickFreq(uint32_t Freq);

+uint32_t           HAL_GetTickFreq(void);

+void               HAL_SuspendTick(void);

+void               HAL_ResumeTick(void);

+uint32_t           HAL_GetHalVersion(void);

+uint32_t           HAL_GetREVID(void);

+uint32_t           HAL_GetDEVID(void);

+uint32_t           HAL_GetUIDw0(void);

+uint32_t           HAL_GetUIDw1(void);

+uint32_t           HAL_GetUIDw2(void);

+

+/**

+  * @}

+  */

+

+/** @addtogroup HAL_Exported_Functions_Group3

+  * @{

+  */

+

+/* DBGMCU Peripheral Control functions  *****************************************/

+void              HAL_DBGMCU_EnableDBGSleepMode(void);

+void              HAL_DBGMCU_DisableDBGSleepMode(void);

+void              HAL_DBGMCU_EnableDBGStopMode(void);

+void              HAL_DBGMCU_DisableDBGStopMode(void);

+void              HAL_DBGMCU_EnableDBGStandbyMode(void);

+void              HAL_DBGMCU_DisableDBGStandbyMode(void);

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_HAL_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_cortex.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_cortex.h
new file mode 100644
index 0000000..6c75058
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_cortex.h
@@ -0,0 +1,437 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_cortex.h

+  * @author  MCD Application Team

+  * @brief   Header file of CORTEX HAL module.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */ 

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_CORTEX_H

+#define __STM32L1xx_HAL_CORTEX_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup CORTEX

+  * @{

+  */

+  

+/* Exported types ------------------------------------------------------------*/

+/** @defgroup CORTEX_Exported_Types Cortex Exported Types

+  * @{

+  */

+

+#if (__MPU_PRESENT == 1)

+/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition

+  * @brief  MPU Region initialization structure 

+  * @{

+  */

+typedef struct

+{

+  uint8_t                Enable;                /*!< Specifies the status of the region. 

+                                                     This parameter can be a value of @ref CORTEX_MPU_Region_Enable                 */

+  uint8_t                Number;                /*!< Specifies the number of the region to protect. 

+                                                     This parameter can be a value of @ref CORTEX_MPU_Region_Number                 */

+  uint32_t               BaseAddress;           /*!< Specifies the base address of the region to protect.                           */

+  uint8_t                Size;                  /*!< Specifies the size of the region to protect. 

+                                                     This parameter can be a value of @ref CORTEX_MPU_Region_Size                   */

+  uint8_t                SubRegionDisable;      /*!< Specifies the number of the subregion protection to disable. 

+                                                     This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF    */         

+  uint8_t                TypeExtField;          /*!< Specifies the TEX field level.

+                                                     This parameter can be a value of @ref CORTEX_MPU_TEX_Levels                    */                 

+  uint8_t                AccessPermission;      /*!< Specifies the region access permission type. 

+                                                     This parameter can be a value of @ref CORTEX_MPU_Region_Permission_Attributes  */

+  uint8_t                DisableExec;           /*!< Specifies the instruction access status. 

+                                                     This parameter can be a value of @ref CORTEX_MPU_Instruction_Access            */

+  uint8_t                IsShareable;           /*!< Specifies the shareability status of the protected region. 

+                                                     This parameter can be a value of @ref CORTEX_MPU_Access_Shareable              */

+  uint8_t                IsCacheable;           /*!< Specifies the cacheable status of the region protected. 

+                                                     This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable              */

+  uint8_t                IsBufferable;          /*!< Specifies the bufferable status of the protected region. 

+                                                     This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable             */

+}MPU_Region_InitTypeDef;

+/**

+  * @}

+  */

+#endif /* __MPU_PRESENT */

+

+/**

+  * @}

+  */

+

+/* Exported constants --------------------------------------------------------*/

+

+/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants

+  * @{

+  */

+

+

+/** @defgroup CORTEX_Preemption_Priority_Group  CORTEX Preemption Priority Group 

+  * @{

+  */

+

+#define NVIC_PRIORITYGROUP_0         (0x00000007U) /*!< 0 bits for pre-emption priority

+                                                        4 bits for subpriority */

+#define NVIC_PRIORITYGROUP_1         (0x00000006U) /*!< 1 bits for pre-emption priority

+                                                        3 bits for subpriority */

+#define NVIC_PRIORITYGROUP_2         (0x00000005U) /*!< 2 bits for pre-emption priority

+                                                        2 bits for subpriority */

+#define NVIC_PRIORITYGROUP_3         (0x00000004U) /*!< 3 bits for pre-emption priority

+                                                        1 bits for subpriority */

+#define NVIC_PRIORITYGROUP_4         (0x00000003U) /*!< 4 bits for pre-emption priority

+                                                        0 bits for subpriority */

+/**

+  * @}

+  */

+

+/** @defgroup CORTEX_SysTick_clock_source CORTEX SysTick clock source

+  * @{

+  */

+#define SYSTICK_CLKSOURCE_HCLK_DIV8    (0x00000000U)

+#define SYSTICK_CLKSOURCE_HCLK         (0x00000004U)

+

+/**

+  * @}

+  */

+

+#if (__MPU_PRESENT == 1)

+/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control

+  * @{

+  */

+#define  MPU_HFNMI_PRIVDEF_NONE      (0x00000000U)  

+#define  MPU_HARDFAULT_NMI           (MPU_CTRL_HFNMIENA_Msk)

+#define  MPU_PRIVILEGED_DEFAULT      (MPU_CTRL_PRIVDEFENA_Msk)

+#define  MPU_HFNMI_PRIVDEF           (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk)

+

+/**

+  * @}

+  */

+

+/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable

+  * @{

+  */

+#define  MPU_REGION_ENABLE     ((uint8_t)0x01)

+#define  MPU_REGION_DISABLE    ((uint8_t)0x00)

+/**

+  * @}

+  */

+

+/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access

+  * @{

+  */

+#define  MPU_INSTRUCTION_ACCESS_ENABLE      ((uint8_t)0x00)

+#define  MPU_INSTRUCTION_ACCESS_DISABLE     ((uint8_t)0x01)

+/**

+  * @}

+  */

+

+/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable

+  * @{

+  */

+#define  MPU_ACCESS_SHAREABLE        ((uint8_t)0x01)

+#define  MPU_ACCESS_NOT_SHAREABLE    ((uint8_t)0x00)

+/**

+  * @}

+  */

+

+/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable

+  * @{

+  */

+#define  MPU_ACCESS_CACHEABLE         ((uint8_t)0x01)

+#define  MPU_ACCESS_NOT_CACHEABLE     ((uint8_t)0x00)

+/**

+  * @}

+  */

+

+/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable

+  * @{

+  */

+#define  MPU_ACCESS_BUFFERABLE         ((uint8_t)0x01)

+#define  MPU_ACCESS_NOT_BUFFERABLE     ((uint8_t)0x00)

+/**

+  * @}

+  */

+

+/** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels

+  * @{

+  */

+#define  MPU_TEX_LEVEL0    ((uint8_t)0x00)

+#define  MPU_TEX_LEVEL1    ((uint8_t)0x01)

+#define  MPU_TEX_LEVEL2    ((uint8_t)0x02)

+/**

+  * @}

+  */

+

+/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size

+  * @{

+  */

+#define   MPU_REGION_SIZE_32B      ((uint8_t)0x04)

+#define   MPU_REGION_SIZE_64B      ((uint8_t)0x05)

+#define   MPU_REGION_SIZE_128B     ((uint8_t)0x06) 

+#define   MPU_REGION_SIZE_256B     ((uint8_t)0x07) 

+#define   MPU_REGION_SIZE_512B     ((uint8_t)0x08) 

+#define   MPU_REGION_SIZE_1KB      ((uint8_t)0x09)  

+#define   MPU_REGION_SIZE_2KB      ((uint8_t)0x0A)

+#define   MPU_REGION_SIZE_4KB      ((uint8_t)0x0B) 

+#define   MPU_REGION_SIZE_8KB      ((uint8_t)0x0C) 

+#define   MPU_REGION_SIZE_16KB     ((uint8_t)0x0D) 

+#define   MPU_REGION_SIZE_32KB     ((uint8_t)0x0E) 

+#define   MPU_REGION_SIZE_64KB     ((uint8_t)0x0F) 

+#define   MPU_REGION_SIZE_128KB    ((uint8_t)0x10)

+#define   MPU_REGION_SIZE_256KB    ((uint8_t)0x11)

+#define   MPU_REGION_SIZE_512KB    ((uint8_t)0x12)

+#define   MPU_REGION_SIZE_1MB      ((uint8_t)0x13) 

+#define   MPU_REGION_SIZE_2MB      ((uint8_t)0x14) 

+#define   MPU_REGION_SIZE_4MB      ((uint8_t)0x15) 

+#define   MPU_REGION_SIZE_8MB      ((uint8_t)0x16) 

+#define   MPU_REGION_SIZE_16MB     ((uint8_t)0x17)

+#define   MPU_REGION_SIZE_32MB     ((uint8_t)0x18)

+#define   MPU_REGION_SIZE_64MB     ((uint8_t)0x19)

+#define   MPU_REGION_SIZE_128MB    ((uint8_t)0x1A)

+#define   MPU_REGION_SIZE_256MB    ((uint8_t)0x1B)

+#define   MPU_REGION_SIZE_512MB    ((uint8_t)0x1C)

+#define   MPU_REGION_SIZE_1GB      ((uint8_t)0x1D) 

+#define   MPU_REGION_SIZE_2GB      ((uint8_t)0x1E) 

+#define   MPU_REGION_SIZE_4GB      ((uint8_t)0x1F)

+/**                                

+  * @}

+  */

+   

+/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes 

+  * @{

+  */

+#define  MPU_REGION_NO_ACCESS      ((uint8_t)0x00)  

+#define  MPU_REGION_PRIV_RW        ((uint8_t)0x01) 

+#define  MPU_REGION_PRIV_RW_URO    ((uint8_t)0x02)  

+#define  MPU_REGION_FULL_ACCESS    ((uint8_t)0x03)  

+#define  MPU_REGION_PRIV_RO        ((uint8_t)0x05) 

+#define  MPU_REGION_PRIV_RO_URO    ((uint8_t)0x06)

+/**

+  * @}

+  */

+

+/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number

+  * @{

+  */

+#define  MPU_REGION_NUMBER0    ((uint8_t)0x00)  

+#define  MPU_REGION_NUMBER1    ((uint8_t)0x01) 

+#define  MPU_REGION_NUMBER2    ((uint8_t)0x02)  

+#define  MPU_REGION_NUMBER3    ((uint8_t)0x03)  

+#define  MPU_REGION_NUMBER4    ((uint8_t)0x04) 

+#define  MPU_REGION_NUMBER5    ((uint8_t)0x05)

+#define  MPU_REGION_NUMBER6    ((uint8_t)0x06)

+#define  MPU_REGION_NUMBER7    ((uint8_t)0x07)

+/**

+  * @}

+  */

+#endif /* __MPU_PRESENT */

+/**

+  * @}

+  */

+  

+/* Exported Macros -----------------------------------------------------------*/

+/** @defgroup CORTEX_Exported_Macros CORTEX Exported Macros

+  * @{

+  */

+

+/** @defgroup CORTEX_Preemption_Priority_Group_Macro  CORTEX Preemption Priority Group 

+  * @{

+  */

+#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PRIORITYGROUP_0) || \

+                                       ((GROUP) == NVIC_PRIORITYGROUP_1) || \

+                                       ((GROUP) == NVIC_PRIORITYGROUP_2) || \

+                                       ((GROUP) == NVIC_PRIORITYGROUP_3) || \

+                                       ((GROUP) == NVIC_PRIORITYGROUP_4))

+

+#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)

+

+#define IS_NVIC_SUB_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)

+

+#define IS_NVIC_DEVICE_IRQ(IRQ)  ((IRQ) >= 0x00)

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Private macro -------------------------------------------------------------*/

+/** @defgroup CORTEX_Private_Macros CORTEX Private Macros

+  * @{

+  */  

+                                  

+/** @defgroup CORTEX_SysTick_clock_source_Macro_Private CORTEX SysTick clock source

+  * @{

+  */                       

+#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || \

+                                       ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8))

+/**

+  * @}

+  */

+

+#if (__MPU_PRESENT == 1)

+#define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || \

+                                     ((STATE) == MPU_REGION_DISABLE))

+

+#define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || \

+                                          ((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE))

+

+#define IS_MPU_ACCESS_SHAREABLE(STATE)   (((STATE) == MPU_ACCESS_SHAREABLE) || \

+                                          ((STATE) == MPU_ACCESS_NOT_SHAREABLE))

+

+#define IS_MPU_ACCESS_CACHEABLE(STATE)   (((STATE) == MPU_ACCESS_CACHEABLE) || \

+                                          ((STATE) == MPU_ACCESS_NOT_CACHEABLE))

+

+#define IS_MPU_ACCESS_BUFFERABLE(STATE)   (((STATE) == MPU_ACCESS_BUFFERABLE) || \

+                                          ((STATE) == MPU_ACCESS_NOT_BUFFERABLE))

+

+#define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0)  || \

+                                ((TYPE) == MPU_TEX_LEVEL1)  || \

+                                ((TYPE) == MPU_TEX_LEVEL2))

+

+#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE) (((TYPE) == MPU_REGION_NO_ACCESS)   || \

+                                                  ((TYPE) == MPU_REGION_PRIV_RW)     || \

+                                                  ((TYPE) == MPU_REGION_PRIV_RW_URO) || \

+                                                  ((TYPE) == MPU_REGION_FULL_ACCESS) || \

+                                                  ((TYPE) == MPU_REGION_PRIV_RO)     || \

+                                                  ((TYPE) == MPU_REGION_PRIV_RO_URO))

+

+#define IS_MPU_REGION_NUMBER(NUMBER)    (((NUMBER) == MPU_REGION_NUMBER0) || \

+                                         ((NUMBER) == MPU_REGION_NUMBER1) || \

+                                         ((NUMBER) == MPU_REGION_NUMBER2) || \

+                                         ((NUMBER) == MPU_REGION_NUMBER3) || \

+                                         ((NUMBER) == MPU_REGION_NUMBER4) || \

+                                         ((NUMBER) == MPU_REGION_NUMBER5) || \

+                                         ((NUMBER) == MPU_REGION_NUMBER6) || \

+                                         ((NUMBER) == MPU_REGION_NUMBER7))

+

+#define IS_MPU_REGION_SIZE(SIZE)    (((SIZE) == MPU_REGION_SIZE_32B)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_64B)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_128B)  || \

+                                     ((SIZE) == MPU_REGION_SIZE_256B)  || \

+                                     ((SIZE) == MPU_REGION_SIZE_512B)  || \

+                                     ((SIZE) == MPU_REGION_SIZE_1KB)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_2KB)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_4KB)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_8KB)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_16KB)  || \

+                                     ((SIZE) == MPU_REGION_SIZE_32KB)  || \

+                                     ((SIZE) == MPU_REGION_SIZE_64KB)  || \

+                                     ((SIZE) == MPU_REGION_SIZE_128KB) || \

+                                     ((SIZE) == MPU_REGION_SIZE_256KB) || \

+                                     ((SIZE) == MPU_REGION_SIZE_512KB) || \

+                                     ((SIZE) == MPU_REGION_SIZE_1MB)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_2MB)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_4MB)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_8MB)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_16MB)  || \

+                                     ((SIZE) == MPU_REGION_SIZE_32MB)  || \

+                                     ((SIZE) == MPU_REGION_SIZE_64MB)  || \

+                                     ((SIZE) == MPU_REGION_SIZE_128MB) || \

+                                     ((SIZE) == MPU_REGION_SIZE_256MB) || \

+                                     ((SIZE) == MPU_REGION_SIZE_512MB) || \

+                                     ((SIZE) == MPU_REGION_SIZE_1GB)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_2GB)   || \

+                                     ((SIZE) == MPU_REGION_SIZE_4GB))

+

+#define IS_MPU_SUB_REGION_DISABLE(SUBREGION)  ((SUBREGION) < (uint16_t)0x00FF)

+#endif /* __MPU_PRESENT */

+

+/**

+  * @}

+  */

+                                                                                   

+/* Private functions ---------------------------------------------------------*/   

+/** @defgroup CORTEX_Private_Functions CORTEX Private Functions

+  * @brief    CORTEX private  functions 

+  * @{

+  */

+

+

+/**

+  * @}

+  */ 

+  

+/* Exported functions --------------------------------------------------------*/

+/** @addtogroup CORTEX_Exported_Functions

+  * @{

+  */

+

+/** @addtogroup CORTEX_Exported_Functions_Group1

+  * @{

+  */  

+/* Initialization and de-initialization functions *****************************/

+void     HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup);

+void     HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);

+void     HAL_NVIC_EnableIRQ(IRQn_Type IRQn);

+void     HAL_NVIC_DisableIRQ(IRQn_Type IRQn);

+void     HAL_NVIC_SystemReset(void);

+uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb);

+/**

+  * @}

+  */

+

+/** @addtogroup CORTEX_Exported_Functions_Group2

+  * @{

+  */ 

+/* Peripheral Control functions ***********************************************/

+#if (__MPU_PRESENT == 1)

+void HAL_MPU_Enable(uint32_t MPU_Control);

+void HAL_MPU_Disable(void);

+void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init);

+#endif /* __MPU_PRESENT */

+uint32_t HAL_NVIC_GetPriorityGrouping(void);

+void     HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority);

+uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn);

+void     HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn);

+void     HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn);

+uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn);

+void     HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource);

+void     HAL_SYSTICK_IRQHandler(void);

+void     HAL_SYSTICK_Callback(void);

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */

+  

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_HAL_CORTEX_H */

+ 

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_def.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_def.h
new file mode 100644
index 0000000..39093bf
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_def.h
@@ -0,0 +1,198 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_def.h

+  * @author  MCD Application Team

+  * @brief   This file contains HAL common defines, enumeration, macros and

+  *          structures definitions.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_DEF

+#define __STM32L1xx_HAL_DEF

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx.h"

+#include "Legacy/stm32_hal_legacy.h"

+#include <stddef.h>

+

+/* Exported types ------------------------------------------------------------*/

+

+/**

+  * @brief  HAL Status structures definition

+  */

+typedef enum

+{

+  HAL_OK       = 0x00U,

+  HAL_ERROR    = 0x01U,

+  HAL_BUSY     = 0x02U,

+  HAL_TIMEOUT  = 0x03U

+} HAL_StatusTypeDef;

+

+/**

+  * @brief  HAL Lock structures definition

+  */

+typedef enum

+{

+  HAL_UNLOCKED = 0x00U,

+  HAL_LOCKED   = 0x01U

+} HAL_LockTypeDef;

+

+/* Exported macro ------------------------------------------------------------*/

+

+#define UNUSED(X) (void)X      /* To avoid gcc/g++ warnings */

+

+#define HAL_MAX_DELAY      0xFFFFFFFFU

+

+#define HAL_IS_BIT_SET(REG, BIT)         (((REG) & (BIT)) == (BIT))

+#define HAL_IS_BIT_CLR(REG, BIT)         (((REG) & (BIT)) == 0U)

+

+#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD_, __DMA_HANDLE_)           \

+                        do{                                                  \

+                              (__HANDLE__)->__PPP_DMA_FIELD_ = &(__DMA_HANDLE_); \

+                              (__DMA_HANDLE_).Parent = (__HANDLE__);             \

+                          } while(0)

+

+/** @brief Reset the Handle's State field.

+  * @param __HANDLE__: specifies the Peripheral Handle.

+  * @note  This macro can be used for the following purpose:

+  *          - When the Handle is declared as local variable; before passing it as parameter

+  *            to HAL_PPP_Init() for the first time, it is mandatory to use this macro

+  *            to set to 0 the Handle's "State" field.

+  *            Otherwise, "State" field may have any random value and the first time the function

+  *            HAL_PPP_Init() is called, the low level hardware initialization will be missed

+  *            (i.e. HAL_PPP_MspInit() will not be executed).

+  *          - When there is a need to reconfigure the low level hardware: instead of calling

+  *            HAL_PPP_DeInit() then HAL_PPP_Init(), user can make a call to this macro then HAL_PPP_Init().

+  *            In this later function, when the Handle's "State" field is set to 0, it will execute the function

+  *            HAL_PPP_MspInit() which will reconfigure the low level hardware.

+  * @retval None

+  */

+#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0U)

+

+#if (USE_RTOS == 1)

+

+  /* Reserved for future use */

+  #error "USE_RTOS should be 0 in the current HAL release"

+

+#else

+  #define __HAL_LOCK(__HANDLE__)                                               \

+                                do{                                            \

+                                    if((__HANDLE__)->Lock == HAL_LOCKED)       \

+                                    {                                          \

+                                       return HAL_BUSY;                        \

+                                    }                                          \

+                                    else                                       \

+                                    {                                          \

+                                       (__HANDLE__)->Lock = HAL_LOCKED;        \

+                                    }                                          \

+                                  }while (0)

+

+  #define __HAL_UNLOCK(__HANDLE__)                                             \

+                                  do{                                          \

+                                      (__HANDLE__)->Lock = HAL_UNLOCKED;       \

+                                    }while (0)

+#endif /* USE_RTOS */

+

+#if  defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */

+  #ifndef __weak

+    #define __weak   __attribute__((weak))

+  #endif /* __weak */

+  #ifndef __packed

+    #define __packed __attribute__((__packed__))

+  #endif /* __packed */

+#endif /* __GNUC__ */

+

+

+/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4" must be used instead */

+#if defined   (__GNUC__) && !defined (__CC_ARM) /* GNU Compiler */

+  #ifndef __ALIGN_END

+    #define __ALIGN_END    __attribute__ ((aligned (4)))

+  #endif /* __ALIGN_END */

+  #ifndef __ALIGN_BEGIN

+    #define __ALIGN_BEGIN

+  #endif /* __ALIGN_BEGIN */

+#else

+  #ifndef __ALIGN_END

+    #define __ALIGN_END

+  #endif /* __ALIGN_END */

+  #ifndef __ALIGN_BEGIN

+    #if defined   (__CC_ARM)      /* ARM Compiler */

+      #define __ALIGN_BEGIN    __align(4)

+    #elif defined (__ICCARM__)    /* IAR Compiler */

+      #define __ALIGN_BEGIN

+    #endif /* __CC_ARM */

+  #endif /* __ALIGN_BEGIN */

+#endif /* __GNUC__ */

+

+/**

+  * @brief  __RAM_FUNC definition

+  */

+#if defined ( __CC_ARM   )

+/* ARM Compiler

+   ------------

+   RAM functions are defined using the toolchain options.

+   Functions that are executed in RAM should reside in a separate source module.

+   Using the 'Options for File' dialog you can simply change the 'Code / Const'

+   area of a module to a memory space in physical RAM.

+   Available memory areas are declared in the 'Target' tab of the 'Options for Target'

+   dialog.

+*/

+#define __RAM_FUNC

+

+#elif defined ( __ICCARM__ )

+/* ICCARM Compiler

+   ---------------

+   RAM functions are defined using a specific toolchain keyword "__ramfunc".

+*/

+#define __RAM_FUNC __ramfunc

+

+#elif defined   (  __GNUC__  )

+/* GNU Compiler

+   ------------

+  RAM functions are defined using a specific toolchain attribute

+   "__attribute__((section(".RamFunc")))".

+*/

+#define __RAM_FUNC  __attribute__((section(".RamFunc")))

+

+#endif

+

+/**

+  * @brief  __NOINLINE definition

+  */

+#if defined ( __CC_ARM   ) || defined   (  __GNUC__  )

+/* ARM & GNUCompiler

+   ----------------

+*/

+#define __NOINLINE __attribute__ ( (noinline) )

+

+#elif defined ( __ICCARM__ )

+/* ICCARM Compiler

+   ---------------

+*/

+#define __NOINLINE _Pragma("optimize = no_inline")

+

+#endif

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* ___STM32L1xx_HAL_DEF */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_dma.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_dma.h
new file mode 100644
index 0000000..db6dae6
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_dma.h
@@ -0,0 +1,652 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_dma.h

+  * @author  MCD Application Team

+  * @brief   Header file of DMA HAL module.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef STM32L1xx_HAL_DMA_H

+#define STM32L1xx_HAL_DMA_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup DMA

+  * @{

+  */

+

+/* Exported types ------------------------------------------------------------*/

+/** @defgroup DMA_Exported_Types DMA Exported Types

+  * @{

+  */

+

+/**

+  * @brief  DMA Configuration Structure definition

+  */

+typedef struct

+{

+  uint32_t Direction;                 /*!< Specifies if the data will be transferred from memory to peripheral,

+                                           from memory to memory or from peripheral to memory.

+                                           This parameter can be a value of @ref DMA_Data_transfer_direction */

+

+  uint32_t PeriphInc;                 /*!< Specifies whether the Peripheral address register should be incremented or not.

+                                           This parameter can be a value of @ref DMA_Peripheral_incremented_mode */

+

+  uint32_t MemInc;                    /*!< Specifies whether the memory address register should be incremented or not.

+                                           This parameter can be a value of @ref DMA_Memory_incremented_mode */

+

+  uint32_t PeriphDataAlignment;       /*!< Specifies the Peripheral data width.

+                                           This parameter can be a value of @ref DMA_Peripheral_data_size */

+

+  uint32_t MemDataAlignment;          /*!< Specifies the Memory data width.

+                                           This parameter can be a value of @ref DMA_Memory_data_size */

+

+  uint32_t Mode;                      /*!< Specifies the operation mode of the DMAy Channelx.

+                                           This parameter can be a value of @ref DMA_mode

+                                           @note The circular buffer mode cannot be used if the memory-to-memory

+                                                 data transfer is configured on the selected Channel */

+

+  uint32_t Priority;                  /*!< Specifies the software priority for the DMAy Channelx.

+                                           This parameter can be a value of @ref DMA_Priority_level */

+} DMA_InitTypeDef;

+

+/**

+  * @brief  HAL DMA State structures definition

+  */

+typedef enum

+{

+  HAL_DMA_STATE_RESET             = 0x00U,  /*!< DMA not yet initialized or disabled    */

+  HAL_DMA_STATE_READY             = 0x01U,  /*!< DMA initialized and ready for use      */

+  HAL_DMA_STATE_BUSY              = 0x02U,  /*!< DMA process is ongoing                 */

+  HAL_DMA_STATE_TIMEOUT           = 0x03U,  /*!< DMA timeout state                      */

+}HAL_DMA_StateTypeDef;

+

+/**

+  * @brief  HAL DMA Error Code structure definition

+  */

+typedef enum

+{

+  HAL_DMA_FULL_TRANSFER      = 0x00U,    /*!< Full transfer     */

+  HAL_DMA_HALF_TRANSFER      = 0x01U     /*!< Half Transfer     */

+}HAL_DMA_LevelCompleteTypeDef;

+

+

+/**

+  * @brief  HAL DMA Callback ID structure definition

+  */

+typedef enum

+{

+  HAL_DMA_XFER_CPLT_CB_ID          = 0x00U,    /*!< Full transfer     */

+  HAL_DMA_XFER_HALFCPLT_CB_ID      = 0x01U,    /*!< Half transfer     */

+  HAL_DMA_XFER_ERROR_CB_ID         = 0x02U,    /*!< Error             */

+  HAL_DMA_XFER_ABORT_CB_ID         = 0x03U,    /*!< Abort             */

+  HAL_DMA_XFER_ALL_CB_ID           = 0x04U     /*!< All               */

+}HAL_DMA_CallbackIDTypeDef;

+

+/**

+  * @brief  DMA handle Structure definition

+  */

+typedef struct __DMA_HandleTypeDef

+{

+  DMA_Channel_TypeDef    *Instance;                                                     /*!< Register base address                */

+

+  DMA_InitTypeDef       Init;                                                           /*!< DMA communication parameters         */

+

+  HAL_LockTypeDef       Lock;                                                           /*!< DMA locking object                   */

+

+  __IO HAL_DMA_StateTypeDef  State;                                                     /*!< DMA transfer state                   */

+

+  void                  *Parent;                                                        /*!< Parent object state                  */

+

+  void                  (* XferCpltCallback)(struct __DMA_HandleTypeDef * hdma);        /*!< DMA transfer complete callback       */

+

+  void                  (* XferHalfCpltCallback)(struct __DMA_HandleTypeDef * hdma);    /*!< DMA Half transfer complete callback  */

+

+  void                  (* XferErrorCallback)(struct __DMA_HandleTypeDef * hdma);       /*!< DMA transfer error callback          */

+

+  void                  (* XferAbortCallback)(struct __DMA_HandleTypeDef * hdma);       /*!< DMA transfer abort callback          */

+

+  __IO uint32_t         ErrorCode;                                                      /*!< DMA Error code                       */

+

+  DMA_TypeDef           *DmaBaseAddress;                                                /*!< DMA Channel Base Address             */

+

+  uint32_t              ChannelIndex;                                                   /*!< DMA Channel Index                    */

+

+}DMA_HandleTypeDef;

+

+/**

+  * @}

+  */

+

+/* Exported constants --------------------------------------------------------*/

+

+/** @defgroup DMA_Exported_Constants DMA Exported Constants

+  * @{

+  */

+

+/** @defgroup DMA_Error_Code DMA Error Code

+  * @{

+  */

+#define HAL_DMA_ERROR_NONE                 0x00000000U    /*!< No error                                */

+#define HAL_DMA_ERROR_TE                   0x00000001U    /*!< Transfer error                          */

+#define HAL_DMA_ERROR_NO_XFER              0x00000004U    /*!< Abort requested with no Xfer ongoing    */

+#define HAL_DMA_ERROR_TIMEOUT              0x00000020U    /*!< Timeout error                           */

+#define HAL_DMA_ERROR_NOT_SUPPORTED        0x00000100U    /*!< Not supported mode                      */

+

+/**

+  * @}

+  */

+

+/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction

+  * @{

+  */

+#define DMA_PERIPH_TO_MEMORY         0x00000000U        /*!< Peripheral to memory direction */

+#define DMA_MEMORY_TO_PERIPH         DMA_CCR_DIR        /*!< Memory to peripheral direction */

+#define DMA_MEMORY_TO_MEMORY         DMA_CCR_MEM2MEM    /*!< Memory to memory direction     */

+/**

+  * @}

+  */

+

+/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode

+  * @{

+  */

+#define DMA_PINC_ENABLE              DMA_CCR_PINC  /*!< Peripheral increment mode Enable */

+#define DMA_PINC_DISABLE             0x00000000U   /*!< Peripheral increment mode Disable */

+/**

+  * @}

+  */

+

+/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode

+  * @{

+  */

+#define DMA_MINC_ENABLE              DMA_CCR_MINC   /*!< Memory increment mode Enable  */

+#define DMA_MINC_DISABLE             0x00000000U    /*!< Memory increment mode Disable */

+/**

+  * @}

+  */

+

+/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size

+  * @{

+  */

+#define DMA_PDATAALIGN_BYTE          0x00000000U       /*!< Peripheral data alignment : Byte     */

+#define DMA_PDATAALIGN_HALFWORD      DMA_CCR_PSIZE_0   /*!< Peripheral data alignment : HalfWord */

+#define DMA_PDATAALIGN_WORD          DMA_CCR_PSIZE_1   /*!< Peripheral data alignment : Word     */

+/**

+  * @}

+  */

+

+/** @defgroup DMA_Memory_data_size DMA Memory data size

+  * @{

+  */

+#define DMA_MDATAALIGN_BYTE          0x00000000U       /*!< Memory data alignment : Byte     */

+#define DMA_MDATAALIGN_HALFWORD      DMA_CCR_MSIZE_0   /*!< Memory data alignment : HalfWord */

+#define DMA_MDATAALIGN_WORD          DMA_CCR_MSIZE_1   /*!< Memory data alignment : Word     */

+/**

+  * @}

+  */

+

+/** @defgroup DMA_mode DMA mode

+  * @{

+  */

+#define DMA_NORMAL                0x00000000U                /*!< Normal mode                                    */

+#define DMA_CIRCULAR              DMA_CCR_CIRC               /*!< Circular mode                                  */

+/**

+  * @}

+  */

+

+/** @defgroup DMA_Priority_level DMA Priority level

+  * @{

+  */

+#define DMA_PRIORITY_LOW             0x00000000U     /*!< Priority level : Low       */

+#define DMA_PRIORITY_MEDIUM          DMA_CCR_PL_0    /*!< Priority level : Medium    */

+#define DMA_PRIORITY_HIGH            DMA_CCR_PL_1    /*!< Priority level : High      */

+#define DMA_PRIORITY_VERY_HIGH       DMA_CCR_PL      /*!< Priority level : Very_High */

+/**

+  * @}

+  */

+

+

+/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions

+  * @{

+  */

+#define DMA_IT_TC                         DMA_CCR_TCIE

+#define DMA_IT_HT                         DMA_CCR_HTIE

+#define DMA_IT_TE                         DMA_CCR_TEIE

+/**

+  * @}

+  */

+

+/** @defgroup DMA_flag_definitions DMA flag definitions

+  * @{

+  */

+#define DMA_FLAG_GL1                      DMA_ISR_GIF1

+#define DMA_FLAG_TC1                      DMA_ISR_TCIF1

+#define DMA_FLAG_HT1                      DMA_ISR_HTIF1

+#define DMA_FLAG_TE1                      DMA_ISR_TEIF1

+#define DMA_FLAG_GL2                      DMA_ISR_GIF2

+#define DMA_FLAG_TC2                      DMA_ISR_TCIF2

+#define DMA_FLAG_HT2                      DMA_ISR_HTIF2

+#define DMA_FLAG_TE2                      DMA_ISR_TEIF2

+#define DMA_FLAG_GL3                      DMA_ISR_GIF3

+#define DMA_FLAG_TC3                      DMA_ISR_TCIF3

+#define DMA_FLAG_HT3                      DMA_ISR_HTIF3

+#define DMA_FLAG_TE3                      DMA_ISR_TEIF3

+#define DMA_FLAG_GL4                      DMA_ISR_GIF4

+#define DMA_FLAG_TC4                      DMA_ISR_TCIF4

+#define DMA_FLAG_HT4                      DMA_ISR_HTIF4

+#define DMA_FLAG_TE4                      DMA_ISR_TEIF4

+#define DMA_FLAG_GL5                      DMA_ISR_GIF5

+#define DMA_FLAG_TC5                      DMA_ISR_TCIF5

+#define DMA_FLAG_HT5                      DMA_ISR_HTIF5

+#define DMA_FLAG_TE5                      DMA_ISR_TEIF5

+#define DMA_FLAG_GL6                      DMA_ISR_GIF6

+#define DMA_FLAG_TC6                      DMA_ISR_TCIF6

+#define DMA_FLAG_HT6                      DMA_ISR_HTIF6

+#define DMA_FLAG_TE6                      DMA_ISR_TEIF6

+#define DMA_FLAG_GL7                      DMA_ISR_GIF7

+#define DMA_FLAG_TC7                      DMA_ISR_TCIF7

+#define DMA_FLAG_HT7                      DMA_ISR_HTIF7

+#define DMA_FLAG_TE7                      DMA_ISR_TEIF7

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Exported macros -----------------------------------------------------------*/

+/** @defgroup DMA_Exported_Macros DMA Exported Macros

+  * @{

+  */

+

+/** @brief  Reset DMA handle state.

+  * @param  __HANDLE__ DMA handle

+  * @retval None

+  */

+#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET)

+

+/**

+  * @brief  Enable the specified DMA Channel.

+  * @param  __HANDLE__ DMA handle

+  * @retval None

+  */

+#define __HAL_DMA_ENABLE(__HANDLE__)        ((__HANDLE__)->Instance->CCR |=  DMA_CCR_EN)

+

+/**

+  * @brief  Disable the specified DMA Channel.

+  * @param  __HANDLE__ DMA handle

+  * @retval None

+  */

+#define __HAL_DMA_DISABLE(__HANDLE__)       ((__HANDLE__)->Instance->CCR &=  ~DMA_CCR_EN)

+

+

+/* Interrupt & Flag management */

+#if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \

+    defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \

+    defined(STM32L151xE) || defined(STM32L151xDX) || defined (STM32L152xE) || defined (STM32L152xDX) || defined (STM32L162xE) || defined (STM32L162xDX)

+

+/**

+  * @brief  Return the current DMA Channel transfer complete flag.

+  * @param  __HANDLE__ DMA handle

+  * @retval The specified transfer complete flag index.

+  */

+

+#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \

+(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TC1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TC2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TC3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TC4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_FLAG_TC5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\

+   DMA_FLAG_TC7)

+

+/**

+  * @brief  Return the current DMA Channel half transfer complete flag.

+  * @param  __HANDLE__ DMA handle

+  * @retval The specified half transfer complete flag index.

+  */

+#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\

+(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_HT1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_HT2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_HT3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_HT4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_FLAG_HT5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\

+   DMA_FLAG_HT7)

+

+/**

+  * @brief  Return the current DMA Channel transfer error flag.

+  * @param  __HANDLE__ DMA handle

+  * @retval The specified transfer error flag index.

+  */

+#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\

+(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TE1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TE2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TE3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TE4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_FLAG_TE5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\

+   DMA_FLAG_TE7)

+

+/**

+  * @brief  Return the current DMA Channel Global interrupt flag.

+  * @param  __HANDLE__ DMA handle

+  * @retval The specified transfer error flag index.

+  */

+#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\

+(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_ISR_GIF1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_ISR_GIF1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_ISR_GIF2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_ISR_GIF2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_ISR_GIF3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_ISR_GIF3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_ISR_GIF4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_ISR_GIF4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_ISR_GIF5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel5))? DMA_ISR_GIF5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_ISR_GIF6 :\

+   DMA_ISR_GIF7)

+

+/**

+  * @brief  Get the DMA Channel pending flags.

+  * @param  __HANDLE__ DMA handle

+  * @param  __FLAG__ Get the specified flag.

+  *          This parameter can be any combination of the following values:

+  *            @arg DMA_FLAG_TCx: Transfer complete flag

+  *            @arg DMA_FLAG_HTx: Half transfer complete flag

+  *            @arg DMA_FLAG_TEx: Transfer error flag

+  *            @arg DMA_FLAG_GLx: Global interrupt flag

+  *         Where x can be from 1 to 7 to select the DMA Channel x flag.

+  * @retval The state of FLAG (SET or RESET).

+  */

+#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > ((uint32_t)DMA1_Channel7))? \

+ (DMA2->ISR & (__FLAG__)) : (DMA1->ISR & (__FLAG__)))

+

+/**

+  * @brief  Clear the DMA Channel pending flags.

+  * @param  __HANDLE__ DMA handle

+  * @param  __FLAG__ specifies the flag to clear.

+  *          This parameter can be any combination of the following values:

+  *            @arg DMA_FLAG_TCx:  Transfer complete flag

+  *            @arg DMA_FLAG_HTx:  Half transfer complete flag

+  *            @arg DMA_FLAG_TEx:  Transfer error flag

+  *            @arg DMA_FLAG_GLx: Global interrupt flag

+    *         Where x can be from 1 to 7 to select the DMA Channel x flag.

+  * @retval None

+  */

+#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > ((uint32_t)DMA1_Channel7))? \

+(DMA2->IFCR = (__FLAG__)) : (DMA1->IFCR = (__FLAG__)))

+

+#else

+/**

+  * @brief  Return the current DMA Channel transfer complete flag.

+  * @param  __HANDLE__ DMA handle

+  * @retval The specified transfer complete flag index.

+  */

+

+#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \

+(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\

+   DMA_FLAG_TC7)

+

+/**

+  * @brief  Return the current DMA Channel half transfer complete flag.

+  * @param  __HANDLE__ DMA handle

+  * @retval The specified half transfer complete flag index.

+  */

+#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\

+(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\

+   DMA_FLAG_HT7)

+

+/**

+  * @brief  Return the current DMA Channel transfer error flag.

+  * @param  __HANDLE__ DMA handle

+  * @retval The specified transfer error flag index.

+  */

+#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\

+(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\

+   DMA_FLAG_TE7)

+

+/**

+  * @brief  Return the current DMA Channel Global interrupt flag.

+  * @param  __HANDLE__ DMA handle

+  * @retval The specified transfer error flag index.

+  */

+#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\

+(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_ISR_GIF1 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_ISR_GIF2 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_ISR_GIF3 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_ISR_GIF4 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_ISR_GIF5 :\

+ ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_ISR_GIF6 :\

+   DMA_ISR_GIF7)

+

+/**

+  * @brief  Get the DMA Channel pending flags.

+  * @param  __HANDLE__ DMA handle

+  * @param  __FLAG__ Get the specified flag.

+  *          This parameter can be any combination of the following values:

+  *            @arg DMA_FLAG_TCIFx:  Transfer complete flag

+  *            @arg DMA_FLAG_HTIFx:  Half transfer complete flag

+  *            @arg DMA_FLAG_TEIFx:  Transfer error flag

+  *            @arg DMA_ISR_GIFx:    Global interrupt flag

+  *         Where x can be from 1 to 7 to select the DMA Channel x flag.

+  * @retval The state of FLAG (SET or RESET).

+  */

+#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)   (DMA1->ISR & (__FLAG__))

+

+/**

+  * @brief  Clear the DMA Channel pending flags.

+  * @param  __HANDLE__ DMA handle

+  * @param  __FLAG__ specifies the flag to clear.

+  *          This parameter can be any combination of the following values:

+  *            @arg DMA_FLAG_TCx:  Transfer complete flag

+  *            @arg DMA_FLAG_HTx:  Half transfer complete flag

+  *            @arg DMA_FLAG_TEx:  Transfer error flag

+  *            @arg DMA_FLAG_GLx: Global interrupt flag

+  *         Where x can be from 1 to 7 to select the DMA Channel x flag.

+  * @retval None

+  */

+#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (DMA1->IFCR = (__FLAG__))

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+/**

+  * @brief  Enable the specified DMA Channel interrupts.

+  * @param  __HANDLE__ DMA handle

+  * @param __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled.

+  *          This parameter can be any combination of the following values:

+  *            @arg DMA_IT_TC:  Transfer complete interrupt mask

+  *            @arg DMA_IT_HT:  Half transfer complete interrupt mask

+  *            @arg DMA_IT_TE:  Transfer error interrupt mask

+  * @retval None

+  */

+#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((__HANDLE__)->Instance->CCR |= (__INTERRUPT__))

+

+/**

+  * @brief  Disable the specified DMA Channel interrupts.

+  * @param  __HANDLE__ DMA handle

+  * @param  __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled.

+  *          This parameter can be any combination of the following values:

+  *            @arg DMA_IT_TC:  Transfer complete interrupt mask

+  *            @arg DMA_IT_HT:  Half transfer complete interrupt mask

+  *            @arg DMA_IT_TE:  Transfer error interrupt mask

+  * @retval None

+  */

+#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((__HANDLE__)->Instance->CCR &= ~(__INTERRUPT__))

+

+/**

+  * @brief  Check whether the specified DMA Channel interrupt is enabled or not.

+  * @param  __HANDLE__ DMA handle

+  * @param  __INTERRUPT__ specifies the DMA interrupt source to check.

+  *          This parameter can be one of the following values:

+  *            @arg DMA_IT_TC:  Transfer complete interrupt mask

+  *            @arg DMA_IT_HT:  Half transfer complete interrupt mask

+  *            @arg DMA_IT_TE:  Transfer error interrupt mask

+  * @retval The state of DMA_IT (SET or RESET).

+  */

+#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)  (((__HANDLE__)->Instance->CCR & (__INTERRUPT__)))

+

+/**

+  * @brief  Return the number of remaining data units in the current DMA Channel transfer.

+  * @param  __HANDLE__ DMA handle

+  * @retval The number of remaining data units in the current DMA Channel transfer.

+  */

+#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNDTR)

+

+/**

+  * @}

+  */

+

+/* Exported functions --------------------------------------------------------*/

+

+/** @addtogroup DMA_Exported_Functions

+  * @{

+  */

+

+/** @addtogroup DMA_Exported_Functions_Group1

+  * @{

+  */

+/* Initialization and de-initialization functions *****************************/

+HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma);

+HAL_StatusTypeDef HAL_DMA_DeInit (DMA_HandleTypeDef *hdma);

+/**

+  * @}

+  */

+

+/** @addtogroup DMA_Exported_Functions_Group2

+  * @{

+  */

+/* IO operation functions *****************************************************/

+HAL_StatusTypeDef HAL_DMA_Start (DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);

+HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);

+HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma);

+HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma);

+HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout);

+void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma);

+HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)( DMA_HandleTypeDef * _hdma));

+HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID);

+

+/**

+  * @}

+  */

+

+/** @addtogroup DMA_Exported_Functions_Group3

+  * @{

+  */

+/* Peripheral State and Error functions ***************************************/

+HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma);

+uint32_t             HAL_DMA_GetError(DMA_HandleTypeDef *hdma);

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Private macros ------------------------------------------------------------*/

+/** @defgroup DMA_Private_Macros DMA Private Macros

+  * @{

+  */

+

+#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY ) || \

+                                     ((DIRECTION) == DMA_MEMORY_TO_PERIPH)  || \

+                                     ((DIRECTION) == DMA_MEMORY_TO_MEMORY))

+

+#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1U) && ((SIZE) < 0x10000U))

+

+#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || \

+                                            ((STATE) == DMA_PINC_DISABLE))

+

+#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE)  || \

+                                        ((STATE) == DMA_MINC_DISABLE))

+

+#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE)     || \

+                                           ((SIZE) == DMA_PDATAALIGN_HALFWORD) || \

+                                           ((SIZE) == DMA_PDATAALIGN_WORD))

+

+#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE)     || \

+                                       ((SIZE) == DMA_MDATAALIGN_HALFWORD) || \

+                                       ((SIZE) == DMA_MDATAALIGN_WORD ))

+

+#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL )  || \

+                           ((MODE) == DMA_CIRCULAR))

+

+#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW )   || \

+                                   ((PRIORITY) == DMA_PRIORITY_MEDIUM) || \

+                                   ((PRIORITY) == DMA_PRIORITY_HIGH)   || \

+                                   ((PRIORITY) == DMA_PRIORITY_VERY_HIGH))

+

+/**

+  * @}

+  */

+

+/* Private functions ---------------------------------------------------------*/

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* STM32L1xx_HAL_DMA_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash.h
new file mode 100644
index 0000000..4fe9f2a
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash.h
@@ -0,0 +1,409 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_flash.h

+  * @author  MCD Application Team

+  * @brief   Header file of Flash HAL module.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_FLASH_H

+#define __STM32L1xx_HAL_FLASH_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+   

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup FLASH

+  * @{

+  */

+  

+/** @addtogroup FLASH_Private_Constants

+  * @{

+  */

+#define FLASH_TIMEOUT_VALUE      (50000U) /* 50 s */

+/**

+  * @}

+  */

+

+/** @addtogroup FLASH_Private_Macros

+  * @{

+  */

+

+#define IS_FLASH_TYPEPROGRAM(_VALUE_)   ((_VALUE_) == FLASH_TYPEPROGRAM_WORD)

+

+#define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || \

+                                       ((__LATENCY__) == FLASH_LATENCY_1))

+

+/**

+  * @}

+  */  

+

+/* Exported types ------------------------------------------------------------*/ 

+/** @defgroup FLASH_Exported_Types FLASH Exported Types

+  * @{

+  */  

+

+/**

+  * @brief  FLASH Procedure structure definition

+  */

+typedef enum 

+{

+  FLASH_PROC_NONE              = 0U, 

+  FLASH_PROC_PAGEERASE         = 1U,

+  FLASH_PROC_PROGRAM           = 2U,

+} FLASH_ProcedureTypeDef;

+

+/** 

+  * @brief  FLASH handle Structure definition  

+  */

+typedef struct

+{

+  __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not in IT context */

+  

+  __IO uint32_t               NbPagesToErase;   /*!< Internal variable to save the remaining sectors to erase in IT context*/

+

+  __IO uint32_t               Address;          /*!< Internal variable to save address selected for program or erase */

+

+  __IO uint32_t               Page;             /*!< Internal variable to define the current page which is erasing */

+

+  HAL_LockTypeDef             Lock;             /*!< FLASH locking object                */

+

+  __IO uint32_t               ErrorCode;        /*!< FLASH error code                    

+                                                     This parameter can be a value of @ref FLASH_Error_Codes  */

+} FLASH_ProcessTypeDef;

+

+/**

+  * @}

+  */

+

+/* Exported constants --------------------------------------------------------*/

+/** @defgroup FLASH_Exported_Constants FLASH Exported Constants

+  * @{

+  */  

+

+/** @defgroup FLASH_Error_Codes FLASH Error Codes

+  * @{

+  */

+

+#define HAL_FLASH_ERROR_NONE      0x00U  /*!< No error */

+#define HAL_FLASH_ERROR_PGA       0x01U  /*!< Programming alignment error */

+#define HAL_FLASH_ERROR_WRP       0x02U  /*!< Write protection error */

+#define HAL_FLASH_ERROR_OPTV      0x04U  /*!< Option validity error */

+#define HAL_FLASH_ERROR_SIZE      0x08U  /*!<  */

+#define HAL_FLASH_ERROR_RD        0x10U  /*!< Read protected error */

+#define HAL_FLASH_ERROR_OPTVUSR   0x20U  /*!< Option UserValidity Error. */

+#define HAL_FLASH_ERROR_OPERATION 0x40U  /*!< Not used */

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASH_Page_Size FLASH size information

+  * @{

+  */ 

+

+#define FLASH_SIZE                (uint32_t)((*((uint32_t *)FLASHSIZE_BASE)&0xFFFFU) * 1024U)

+#define FLASH_PAGE_SIZE           (256U)  /*!< FLASH Page Size in bytes */

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASH_Type_Program FLASH Type Program

+  * @{

+  */ 

+#define FLASH_TYPEPROGRAM_WORD       (0x02U)  /*!<Program a word (32-bit) at a specified address.*/

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASH_Latency FLASH Latency

+  * @{

+  */ 

+#define FLASH_LATENCY_0            (0x00000000U)    /*!< FLASH Zero Latency cycle */

+#define FLASH_LATENCY_1            FLASH_ACR_LATENCY         /*!< FLASH One Latency cycle */

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASH_Interrupts FLASH Interrupts 

+  * @{

+  */

+

+#define FLASH_IT_EOP               FLASH_PECR_EOPIE  /*!< End of programming interrupt source */

+#define FLASH_IT_ERR               FLASH_PECR_ERRIE  /*!< Error interrupt source */

+/**

+  * @}

+  */ 

+

+/** @defgroup FLASH_Flags FLASH Flags 

+  * @{

+  */ 

+

+#define FLASH_FLAG_BSY             FLASH_SR_BSY        /*!< FLASH Busy flag */

+#define FLASH_FLAG_EOP             FLASH_SR_EOP        /*!< FLASH End of Programming flag */

+#define FLASH_FLAG_ENDHV           FLASH_SR_ENDHV      /*!< FLASH End of High Voltage flag */

+#define FLASH_FLAG_READY           FLASH_SR_READY      /*!< FLASH Ready flag after low power mode */

+#define FLASH_FLAG_WRPERR          FLASH_SR_WRPERR     /*!< FLASH Write protected error flag */

+#define FLASH_FLAG_PGAERR          FLASH_SR_PGAERR     /*!< FLASH Programming Alignment error flag */

+#define FLASH_FLAG_SIZERR          FLASH_SR_SIZERR     /*!< FLASH Size error flag  */

+#define FLASH_FLAG_OPTVERR         FLASH_SR_OPTVERR    /*!< FLASH Option Validity error flag  */

+/* Cat2 & Cat3*/

+#if defined(FLASH_SR_RDERR)

+#define FLASH_FLAG_RDERR           FLASH_SR_RDERR    /*!< Read protected error flag  */

+#endif /* FLASH_SR_RDERR */

+/* Cat3, Cat4 & Cat5*/

+#if defined(FLASH_SR_OPTVERRUSR)

+#define FLASH_FLAG_OPTVERRUSR      FLASH_SR_OPTVERRUSR /*!< FLASH Option User Validity error flag  */

+#endif /* FLASH_SR_OPTVERRUSR */

+

+/**

+  * @}

+  */ 

+

+/** @defgroup FLASH_Keys FLASH Keys 

+  * @{

+  */ 

+

+#define FLASH_PDKEY1               (0x04152637U) /*!< Flash power down key1 */

+#define FLASH_PDKEY2               (0xFAFBFCFDU) /*!< Flash power down key2: used with FLASH_PDKEY1 

+                                                              to unlock the RUN_PD bit in FLASH_ACR */

+

+#define FLASH_PEKEY1               (0x89ABCDEFU) /*!< Flash program erase key1 */

+#define FLASH_PEKEY2               (0x02030405U) /*!< Flash program erase key: used with FLASH_PEKEY2

+                                                               to unlock the write access to the FLASH_PECR register and

+                                                               data EEPROM */

+

+#define FLASH_PRGKEY1              (0x8C9DAEBFU) /*!< Flash program memory key1 */

+#define FLASH_PRGKEY2              (0x13141516U) /*!< Flash program memory key2: used with FLASH_PRGKEY2

+                                                               to unlock the program memory */

+

+#define FLASH_OPTKEY1              (0xFBEAD9C8U) /*!< Flash option key1 */

+#define FLASH_OPTKEY2              (0x24252627U) /*!< Flash option key2: used with FLASH_OPTKEY1 to

+                                                              unlock the write access to the option byte block */

+/**

+  * @}

+  */

+/**

+  * @}

+  */  

+  

+/* Exported macro ------------------------------------------------------------*/

+

+/** @defgroup FLASH_Exported_Macros FLASH Exported Macros

+ *  @brief macros to control FLASH features 

+ *  @{

+ */

+ 

+

+/** @defgroup FLASH_Interrupt FLASH Interrupts

+ *  @brief macros to handle FLASH interrupts

+ * @{

+ */ 

+

+/**

+  * @brief  Enable the specified FLASH interrupt.

+  * @param  __INTERRUPT__  FLASH interrupt 

+  *         This parameter can be any combination of the following values:

+  *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt

+  *     @arg @ref FLASH_IT_ERR Error Interrupt    

+  * @retval none

+  */  

+#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)  SET_BIT((FLASH->PECR), (__INTERRUPT__))

+

+/**

+  * @brief  Disable the specified FLASH interrupt.

+  * @param  __INTERRUPT__  FLASH interrupt 

+  *         This parameter can be any combination of the following values:

+  *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt

+  *     @arg @ref FLASH_IT_ERR Error Interrupt    

+  * @retval none

+  */  

+#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)  CLEAR_BIT((FLASH->PECR), (uint32_t)(__INTERRUPT__))

+

+/**

+  * @brief  Get the specified FLASH flag status. 

+  * @param  __FLAG__ specifies the FLASH flag to check.

+  *          This parameter can be one of the following values:

+  *            @arg @ref FLASH_FLAG_BSY         FLASH Busy flag

+  *            @arg @ref FLASH_FLAG_EOP         FLASH End of Operation flag 

+  *            @arg @ref FLASH_FLAG_ENDHV       FLASH End of High Voltage flag

+  *            @arg @ref FLASH_FLAG_READY       FLASH Ready flag after low power mode

+  *            @arg @ref FLASH_FLAG_PGAERR      FLASH Programming Alignment error flag

+  *            @arg @ref FLASH_FLAG_SIZERR      FLASH Size error flag

+  *            @arg @ref FLASH_FLAG_OPTVERR     FLASH Option validity error error flag

+@if STM32L100xB

+@elif STM32L100xBA

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+@elif STM32L151xB

+@elif STM32L151xBA

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+@elif STM32L152xB

+@elif STM32L152xBA

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+@elif STM32L100xC

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error

+@elif STM32L151xC

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error

+@elif STM32L152xC

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error

+@elif STM32L162xC

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error

+@else

+  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error

+@endif

+  *            @arg @ref FLASH_FLAG_WRPERR      FLASH Write protected error flag 

+  * @retval The new state of __FLAG__ (SET or RESET).

+  */

+#define __HAL_FLASH_GET_FLAG(__FLAG__)   (((FLASH->SR) & (__FLAG__)) == (__FLAG__))

+

+/**

+  * @brief  Clear the specified FLASH flag.

+  * @param  __FLAG__ specifies the FLASH flags to clear.

+  *          This parameter can be any combination of the following values:

+  *            @arg @ref FLASH_FLAG_EOP         FLASH End of Operation flag 

+  *            @arg @ref FLASH_FLAG_PGAERR      FLASH Programming Alignment error flag

+  *            @arg @ref FLASH_FLAG_SIZERR      FLASH Size error flag

+  *            @arg @ref FLASH_FLAG_OPTVERR     FLASH Option validity error error flag

+@if STM32L100xB

+@elif STM32L100xBA

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+@elif STM32L151xB

+@elif STM32L151xBA

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+@elif STM32L152xB

+@elif STM32L152xBA

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+@elif STM32L100xC

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error

+@elif STM32L151xC

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error

+@elif STM32L152xC

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error

+@elif STM32L162xC

+  *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)

+  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error

+@else

+  *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error

+@endif

+  *            @arg @ref FLASH_FLAG_WRPERR      FLASH Write protected error flag 

+  * @retval none

+  */

+#define __HAL_FLASH_CLEAR_FLAG(__FLAG__)   ((FLASH->SR) = (__FLAG__))

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */ 

+

+/* Include FLASH HAL Extended module */

+#include "stm32l1xx_hal_flash_ex.h"  

+#include "stm32l1xx_hal_flash_ramfunc.h"  

+

+/* Exported functions --------------------------------------------------------*/

+/** @addtogroup FLASH_Exported_Functions

+  * @{

+  */

+  

+/** @addtogroup FLASH_Exported_Functions_Group1

+  * @{

+  */

+/* IO operation functions *****************************************************/

+HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data);

+HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint32_t Data);

+

+/* FLASH IRQ handler function */

+void       HAL_FLASH_IRQHandler(void);

+/* Callbacks in non blocking modes */ 

+void       HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);

+void       HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);

+

+/**

+  * @}

+  */

+

+/** @addtogroup FLASH_Exported_Functions_Group2

+  * @{

+  */

+/* Peripheral Control functions ***********************************************/

+HAL_StatusTypeDef HAL_FLASH_Unlock(void);

+HAL_StatusTypeDef HAL_FLASH_Lock(void);

+HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);

+HAL_StatusTypeDef HAL_FLASH_OB_Lock(void);

+HAL_StatusTypeDef HAL_FLASH_OB_Launch(void);

+

+/**

+  * @}

+  */

+

+/** @addtogroup FLASH_Exported_Functions_Group3

+  * @{

+  */

+/* Peripheral State and Error functions ***************************************/

+uint32_t HAL_FLASH_GetError(void);

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Private function -------------------------------------------------*/

+/** @addtogroup FLASH_Private_Functions

+ * @{

+ */

+HAL_StatusTypeDef       FLASH_WaitForLastOperation(uint32_t Timeout);

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_HAL_FLASH_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ex.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ex.h
new file mode 100644
index 0000000..abb98d1
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ex.h
@@ -0,0 +1,968 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_flash_ex.h

+  * @author  MCD Application Team

+  * @brief   Header file of Flash HAL Extended module.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */ 

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_FLASH_EX_H

+#define __STM32L1xx_HAL_FLASH_EX_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup FLASHEx

+  * @{

+  */ 

+

+/** @addtogroup FLASHEx_Private_Constants

+  * @{

+  */

+#if defined(FLASH_SR_RDERR) && defined(FLASH_SR_OPTVERRUSR)

+

+#define FLASH_FLAG_MASK         ( FLASH_FLAG_EOP        | FLASH_FLAG_ENDHV  | FLASH_FLAG_WRPERR | \

+                                  FLASH_FLAG_OPTVERR    | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | \

+                                  FLASH_FLAG_OPTVERRUSR | FLASH_FLAG_RDERR)

+

+#elif defined(FLASH_SR_RDERR)

+

+#define FLASH_FLAG_MASK         ( FLASH_FLAG_EOP        | FLASH_FLAG_ENDHV  | FLASH_FLAG_WRPERR | \

+                                  FLASH_FLAG_OPTVERR    | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | \

+                                  FLASH_FLAG_RDERR)

+

+#elif defined(FLASH_SR_OPTVERRUSR)

+

+#define FLASH_FLAG_MASK         ( FLASH_FLAG_EOP        | FLASH_FLAG_ENDHV  | FLASH_FLAG_WRPERR | \

+                                  FLASH_FLAG_OPTVERR    | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | \

+                                  FLASH_FLAG_OPTVERRUSR)

+

+#else

+

+#define FLASH_FLAG_MASK         ( FLASH_FLAG_EOP        | FLASH_FLAG_ENDHV  | FLASH_FLAG_WRPERR | \

+                                  FLASH_FLAG_OPTVERR    | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR)

+

+#endif /* FLASH_SR_RDERR & FLASH_SR_OPTVERRUSR */

+

+#if defined(STM32L100xB) || defined(STM32L151xB) || defined(STM32L152xB) || defined(STM32L100xBA) \

+ || defined(STM32L151xBA) || defined(STM32L152xBA)

+     

+/******* Devices with FLASH 128K *******/

+#define FLASH_NBPAGES_MAX       512U /* 512 pages from page 0 to page 511U */

+

+#elif defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC) \

+   || defined(STM32L151xCA) || defined(STM32L152xCA) || defined(STM32L162xCA)

+

+/******* Devices with FLASH 256K *******/

+#define FLASH_NBPAGES_MAX       1025U /* 1025 pages from page 0 to page 1024U */

+

+#elif defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xD) || defined(STM32L152xDX) \

+   || defined(STM32L162xD) || defined(STM32L162xDX)

+

+/******* Devices with FLASH 384K *******/

+#define FLASH_NBPAGES_MAX       1536U /* 1536 pages from page 0 to page 1535U */

+

+#elif defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE)

+

+/******* Devices with FLASH 512K *******/

+#define FLASH_NBPAGES_MAX       2048U /* 2048 pages from page 0 to page 2047U */

+

+#endif /* STM32L100xB || STM32L151xB || STM32L152xB || STM32L100xBA || STM32L151xBA || STM32L152xBA */

+

+#define WRP_MASK_LOW                 (0x0000FFFFU)

+#define WRP_MASK_HIGH                (0xFFFF0000U)

+

+/**

+  * @}

+  */  

+

+/** @addtogroup FLASHEx_Private_Macros

+  * @{

+  */

+

+#define IS_FLASH_TYPEERASE(__VALUE__)   (((__VALUE__) == FLASH_TYPEERASE_PAGES))

+

+#define IS_OPTIONBYTE(__VALUE__)        (((__VALUE__) <= (OPTIONBYTE_WRP|OPTIONBYTE_RDP|OPTIONBYTE_USER|OPTIONBYTE_BOR)))

+

+#define IS_WRPSTATE(__VALUE__)          (((__VALUE__) == OB_WRPSTATE_DISABLE) || \

+                                         ((__VALUE__) == OB_WRPSTATE_ENABLE))

+                                         

+#define IS_OB_WRP(__PAGE__)             (((__PAGE__) != 0x0000000U))

+

+#define IS_OB_RDP(__LEVEL__)            (((__LEVEL__) == OB_RDP_LEVEL_0) ||\

+                                         ((__LEVEL__) == OB_RDP_LEVEL_1) ||\

+                                         ((__LEVEL__) == OB_RDP_LEVEL_2))

+                                         

+#define IS_OB_BOR_LEVEL(__LEVEL__)      (((__LEVEL__) == OB_BOR_OFF)     || \

+                                         ((__LEVEL__) == OB_BOR_LEVEL1)  || \

+                                         ((__LEVEL__) == OB_BOR_LEVEL2)  || \

+                                         ((__LEVEL__) == OB_BOR_LEVEL3)  || \

+                                         ((__LEVEL__) == OB_BOR_LEVEL4)  || \

+                                         ((__LEVEL__) == OB_BOR_LEVEL5))

+

+#define IS_OB_IWDG_SOURCE(__SOURCE__)   (((__SOURCE__) == OB_IWDG_SW) || ((__SOURCE__) == OB_IWDG_HW))

+

+#define IS_OB_STOP_SOURCE(__SOURCE__)   (((__SOURCE__) == OB_STOP_NORST) || ((__SOURCE__) == OB_STOP_RST))

+

+#define IS_OB_STDBY_SOURCE(__SOURCE__)  (((__SOURCE__) == OB_STDBY_NORST) || ((__SOURCE__) == OB_STDBY_RST))

+

+#if defined(FLASH_OBR_SPRMOD) && defined(FLASH_OBR_nRST_BFB2)

+    

+#define IS_OBEX(__VALUE__)              (((__VALUE__) == OPTIONBYTE_PCROP) || ((__VALUE__) == OPTIONBYTE_BOOTCONFIG))

+

+#elif defined(FLASH_OBR_SPRMOD) && !defined(FLASH_OBR_nRST_BFB2)

+

+#define IS_OBEX(__VALUE__)              ((__VALUE__) == OPTIONBYTE_PCROP)

+

+#elif !defined(FLASH_OBR_SPRMOD) && defined(FLASH_OBR_nRST_BFB2)

+

+#define IS_OBEX(__VALUE__)              ((__VALUE__) == OPTIONBYTE_BOOTCONFIG)

+

+#endif /* FLASH_OBR_SPRMOD && FLASH_OBR_nRST_BFB2 */

+

+#if defined(FLASH_OBR_SPRMOD)

+

+#define IS_PCROPSTATE(__VALUE__)        (((__VALUE__) == OB_PCROP_STATE_DISABLE) || \

+                                         ((__VALUE__) == OB_PCROP_STATE_ENABLE))  

+

+#define IS_OB_PCROP(__PAGE__)           (((__PAGE__) != 0x0000000U))

+#endif /* FLASH_OBR_SPRMOD */

+

+#if defined(FLASH_OBR_nRST_BFB2)

+    

+#define IS_OB_BOOT_BANK(__BANK__)     (((__BANK__) == OB_BOOT_BANK2) || ((__BANK__) == OB_BOOT_BANK1))

+

+#endif /* FLASH_OBR_nRST_BFB2 */

+

+#define IS_TYPEERASEDATA(__VALUE__)     (((__VALUE__) == FLASH_TYPEERASEDATA_BYTE) || \

+                                         ((__VALUE__) == FLASH_TYPEERASEDATA_HALFWORD) || \

+                                         ((__VALUE__) == FLASH_TYPEERASEDATA_WORD))

+#define IS_TYPEPROGRAMDATA(__VALUE__)   (((__VALUE__) == FLASH_TYPEPROGRAMDATA_BYTE) || \

+                                         ((__VALUE__) == FLASH_TYPEPROGRAMDATA_HALFWORD) || \

+                                         ((__VALUE__) == FLASH_TYPEPROGRAMDATA_WORD) || \

+                                         ((__VALUE__) == FLASH_TYPEPROGRAMDATA_FASTBYTE) || \

+                                         ((__VALUE__) == FLASH_TYPEPROGRAMDATA_FASTHALFWORD) || \

+                                         ((__VALUE__) == FLASH_TYPEPROGRAMDATA_FASTWORD))

+

+

+/** @defgroup FLASHEx_Address FLASHEx Address

+  * @{

+  */

+

+#define IS_FLASH_DATA_ADDRESS(__ADDRESS__)          (((__ADDRESS__) >= FLASH_EEPROM_BASE) && ((__ADDRESS__) <= FLASH_EEPROM_END))

+

+#if defined(STM32L100xB) || defined(STM32L151xB) || defined(STM32L152xB) || defined(STM32L100xBA)  \

+ || defined(STM32L151xBA) || defined(STM32L152xBA) || defined(STM32L100xC) || defined(STM32L151xC) \

+ || defined(STM32L152xC) || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L152xCA) \

+ || defined(STM32L162xCA)

+

+#define IS_FLASH_PROGRAM_ADDRESS(__ADDRESS__)       (((__ADDRESS__) >= FLASH_BASE) && ((__ADDRESS__) <= FLASH_END))  

+

+#else /*STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */

+

+#define IS_FLASH_PROGRAM_ADDRESS(__ADDRESS__)       (((__ADDRESS__) >= FLASH_BASE) && ((__ADDRESS__) <= FLASH_BANK2_END))  

+#define IS_FLASH_PROGRAM_BANK1_ADDRESS(__ADDRESS__) (((__ADDRESS__) >= FLASH_BASE) && ((__ADDRESS__) <= FLASH_BANK1_END))  

+#define IS_FLASH_PROGRAM_BANK2_ADDRESS(__ADDRESS__) (((__ADDRESS__) >= FLASH_BANK2_BASE) && ((__ADDRESS__) <= FLASH_BANK2_END))  

+

+#endif /* STM32L100xB || STM32L151xB || STM32L152xB || (...) || STM32L151xCA || STM32L152xCA || STM32L162xCA */

+

+#define IS_NBPAGES(__PAGES__) (((__PAGES__) >= 1U) && ((__PAGES__) <= FLASH_NBPAGES_MAX)) 

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */  

+/* Exported types ------------------------------------------------------------*/ 

+

+/** @defgroup FLASHEx_Exported_Types FLASHEx Exported Types

+  * @{

+  */  

+

+/**

+  * @brief  FLASH Erase structure definition

+  */

+typedef struct

+{

+  uint32_t TypeErase;   /*!< TypeErase: Page Erase only.

+                             This parameter can be a value of @ref FLASHEx_Type_Erase */

+

+  uint32_t PageAddress; /*!< PageAddress: Initial FLASH address to be erased

+                             This parameter must be a value belonging to FLASH Programm address (depending on the devices)  */

+  

+  uint32_t NbPages;     /*!< NbPages: Number of pages to be erased.

+                             This parameter must be a value between 1 and (max number of pages - value of Initial page)*/

+  

+} FLASH_EraseInitTypeDef;

+

+/**

+  * @brief  FLASH Option Bytes PROGRAM structure definition

+  */

+typedef struct

+{

+  uint32_t  OptionType;       /*!< OptionType: Option byte to be configured.

+                                   This parameter can be a value of @ref FLASHEx_Option_Type */

+

+  uint32_t  WRPState;         /*!< WRPState: Write protection activation or deactivation.

+                                   This parameter can be a value of @ref FLASHEx_WRP_State */

+

+  uint32_t  WRPSector0To31;   /*!< WRPSector0To31: specifies the sector(s) which are write protected between Sector 0 to 31

+                                   This parameter can be a combination of @ref FLASHEx_Option_Bytes_Write_Protection1 */  

+  

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)    \

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xCA) \

+ || defined(STM32L152xD) || defined(STM32L152xDX) || defined(STM32L162xCA) || defined(STM32L162xD)  \

+ || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE)

+  uint32_t  WRPSector32To63;  /*!< WRPSector32To63: specifies the sector(s) which are write protected between Sector 32 to 63

+                                   This parameter can be a combination of @ref FLASHEx_Option_Bytes_Write_Protection2 */  

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || (...) || STM32L151xE || STM32L152xE || STM32L162xE */

+

+#if defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xD) || defined(STM32L152xDX) \

+ || defined(STM32L162xD) || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE)  \

+ || defined(STM32L162xE)

+  uint32_t  WRPSector64To95;  /*!< WRPSector64to95: specifies the sector(s) which are write protected between Sector 64 to 95

+                                   This parameter can be a combination of @ref FLASHEx_Option_Bytes_Write_Protection3 */  

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */

+

+#if defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE) || defined(STM32L151xDX) \

+ || defined(STM32L152xDX) || defined(STM32L162xDX)

+  uint32_t  WRPSector96To127; /*!< WRPSector96To127: specifies the sector(s) which are write protected between Sector 96 to 127 or

+                                   Sectors 96 to 111 for STM32L1xxxDX devices.

+                                   This parameter can be a combination of @ref FLASHEx_Option_Bytes_Write_Protection4 */  

+#endif /* STM32L151xE || STM32L152xE || STM32L162xE || STM32L151xDX || ... */

+                              

+  uint8_t   RDPLevel;         /*!< RDPLevel: Set the read protection level.

+                                   This parameter can be a value of @ref FLASHEx_Option_Bytes_Read_Protection */

+

+  uint8_t   BORLevel;         /*!< BORLevel: Set the BOR Level.

+                                   This parameter can be a value of @ref FLASHEx_Option_Bytes_BOR_Level */

+                                

+  uint8_t   USERConfig;       /*!< USERConfig: Program the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY.

+                                   This parameter can be a combination of @ref FLASHEx_Option_Bytes_IWatchdog, 

+                                   @ref FLASHEx_Option_Bytes_nRST_STOP and @ref FLASHEx_Option_Bytes_nRST_STDBY*/

+} FLASH_OBProgramInitTypeDef;

+

+#if defined(FLASH_OBR_SPRMOD) || defined(FLASH_OBR_nRST_BFB2)

+/**

+  * @brief  FLASH Advanced Option Bytes Program structure definition

+  */

+typedef struct

+{

+  uint32_t OptionType;          /*!< OptionType: Option byte to be configured for extension .

+                                     This parameter can be a value of @ref FLASHEx_OptionAdv_Type */

+

+#if defined(FLASH_OBR_SPRMOD)

+  uint32_t PCROPState;          /*!< PCROPState: PCROP activation or deactivation.

+                                     This parameter can be a value of @ref FLASHEx_PCROP_State */

+

+  uint32_t  PCROPSector0To31;   /*!< PCROPSector0To31: specifies the sector(s) set for PCROP

+                                     This parameter can be a value of @ref FLASHEx_Option_Bytes_PC_ReadWrite_Protection1 */

+  

+#if defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)

+  uint32_t  PCROPSector32To63;  /*!< PCROPSector32To63: specifies the sector(s) set for PCROP

+                                     This parameter can be a value of @ref FLASHEx_Option_Bytes_PC_ReadWrite_Protection2 */

+#endif /* STM32L151xC || STM32L152xC || STM32L162xC */

+#endif /* FLASH_OBR_SPRMOD */

+ 

+#if defined(FLASH_OBR_nRST_BFB2)

+  uint16_t BootConfig;          /*!< BootConfig: specifies Option bytes for boot config

+                                     This parameter can be a value of @ref FLASHEx_Option_Bytes_BOOT */

+#endif /* FLASH_OBR_nRST_BFB2*/

+} FLASH_AdvOBProgramInitTypeDef;

+

+/**

+  * @}

+  */

+#endif /* FLASH_OBR_SPRMOD || FLASH_OBR_nRST_BFB2 */

+

+/* Exported constants --------------------------------------------------------*/

+

+

+/** @defgroup FLASHEx_Exported_Constants FLASHEx Exported Constants

+  * @{

+  */  

+

+/** @defgroup FLASHEx_Type_Erase FLASHEx_Type_Erase

+  * @{

+  */

+#define FLASH_TYPEERASE_PAGES           (0x00U)  /*!<Page erase only*/

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASHEx_Option_Type FLASHEx Option Type

+  * @{

+  */

+#define OPTIONBYTE_WRP            (0x01U)  /*!<WRP option byte configuration*/

+#define OPTIONBYTE_RDP            (0x02U)  /*!<RDP option byte configuration*/

+#define OPTIONBYTE_USER           (0x04U)  /*!<USER option byte configuration*/

+#define OPTIONBYTE_BOR            (0x08U)  /*!<BOR option byte configuration*/

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASHEx_WRP_State FLASHEx WRP State

+  * @{

+  */

+#define OB_WRPSTATE_DISABLE        (0x00U)  /*!<Disable the write protection of the desired sectors*/

+#define OB_WRPSTATE_ENABLE         (0x01U)  /*!<Enable the write protection of the desired sectors*/

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASHEx_Option_Bytes_Write_Protection1 FLASHEx Option Bytes Write Protection1

+  * @{

+  */

+  

+/* Common pages for Cat1, Cat2, Cat3, Cat4 & Cat5 devices */

+#define OB_WRP1_PAGES0TO15    (0x00000001U) /* Write protection of Sector0 */  

+#define OB_WRP1_PAGES16TO31   (0x00000002U) /* Write protection of Sector1 */  

+#define OB_WRP1_PAGES32TO47   (0x00000004U) /* Write protection of Sector2 */  

+#define OB_WRP1_PAGES48TO63   (0x00000008U) /* Write protection of Sector3 */  

+#define OB_WRP1_PAGES64TO79   (0x00000010U) /* Write protection of Sector4 */  

+#define OB_WRP1_PAGES80TO95   (0x00000020U) /* Write protection of Sector5 */  

+#define OB_WRP1_PAGES96TO111  (0x00000040U) /* Write protection of Sector6 */  

+#define OB_WRP1_PAGES112TO127 (0x00000080U) /* Write protection of Sector7 */  

+#define OB_WRP1_PAGES128TO143 (0x00000100U) /* Write protection of Sector8 */  

+#define OB_WRP1_PAGES144TO159 (0x00000200U) /* Write protection of Sector9 */  

+#define OB_WRP1_PAGES160TO175 (0x00000400U) /* Write protection of Sector10 */ 

+#define OB_WRP1_PAGES176TO191 (0x00000800U) /* Write protection of Sector11 */ 

+#define OB_WRP1_PAGES192TO207 (0x00001000U) /* Write protection of Sector12 */ 

+#define OB_WRP1_PAGES208TO223 (0x00002000U) /* Write protection of Sector13 */ 

+#define OB_WRP1_PAGES224TO239 (0x00004000U) /* Write protection of Sector14 */ 

+#define OB_WRP1_PAGES240TO255 (0x00008000U) /* Write protection of Sector15 */ 

+#define OB_WRP1_PAGES256TO271 (0x00010000U) /* Write protection of Sector16 */ 

+#define OB_WRP1_PAGES272TO287 (0x00020000U) /* Write protection of Sector17 */ 

+#define OB_WRP1_PAGES288TO303 (0x00040000U) /* Write protection of Sector18 */ 

+#define OB_WRP1_PAGES304TO319 (0x00080000U) /* Write protection of Sector19 */ 

+#define OB_WRP1_PAGES320TO335 (0x00100000U) /* Write protection of Sector20 */ 

+#define OB_WRP1_PAGES336TO351 (0x00200000U) /* Write protection of Sector21 */ 

+#define OB_WRP1_PAGES352TO367 (0x00400000U) /* Write protection of Sector22 */ 

+#define OB_WRP1_PAGES368TO383 (0x00800000U) /* Write protection of Sector23 */ 

+#define OB_WRP1_PAGES384TO399 (0x01000000U) /* Write protection of Sector24 */ 

+#define OB_WRP1_PAGES400TO415 (0x02000000U) /* Write protection of Sector25 */ 

+#define OB_WRP1_PAGES416TO431 (0x04000000U) /* Write protection of Sector26 */ 

+#define OB_WRP1_PAGES432TO447 (0x08000000U) /* Write protection of Sector27 */ 

+#define OB_WRP1_PAGES448TO463 (0x10000000U) /* Write protection of Sector28 */ 

+#define OB_WRP1_PAGES464TO479 (0x20000000U) /* Write protection of Sector29 */ 

+#define OB_WRP1_PAGES480TO495 (0x40000000U) /* Write protection of Sector30 */ 

+#define OB_WRP1_PAGES496TO511 (0x80000000U) /* Write protection of Sector31 */ 

+  

+#define OB_WRP1_ALLPAGES      ((uint32_t)FLASH_WRPR1_WRP) /*!< Write protection of all Sectors */

+  

+/**

+  * @}

+  */ 

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)    \

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xCA) \

+ || defined(STM32L152xD) || defined(STM32L152xDX) || defined(STM32L162xCA) || defined(STM32L162xD)  \

+ || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE)

+

+/** @defgroup FLASHEx_Option_Bytes_Write_Protection2 FLASHEx Option Bytes Write Protection2

+  * @{

+  */

+  

+/* Pages for Cat3, Cat4 & Cat5 devices*/

+#define OB_WRP2_PAGES512TO527   (0x00000001U) /* Write protection of Sector32 */  

+#define OB_WRP2_PAGES528TO543   (0x00000002U) /* Write protection of Sector33 */  

+#define OB_WRP2_PAGES544TO559   (0x00000004U) /* Write protection of Sector34 */  

+#define OB_WRP2_PAGES560TO575   (0x00000008U) /* Write protection of Sector35 */  

+#define OB_WRP2_PAGES576TO591   (0x00000010U) /* Write protection of Sector36 */  

+#define OB_WRP2_PAGES592TO607   (0x00000020U) /* Write protection of Sector37 */  

+#define OB_WRP2_PAGES608TO623   (0x00000040U) /* Write protection of Sector38 */  

+#define OB_WRP2_PAGES624TO639   (0x00000080U) /* Write protection of Sector39 */  

+#define OB_WRP2_PAGES640TO655   (0x00000100U) /* Write protection of Sector40 */  

+#define OB_WRP2_PAGES656TO671   (0x00000200U) /* Write protection of Sector41 */  

+#define OB_WRP2_PAGES672TO687   (0x00000400U) /* Write protection of Sector42 */  

+#define OB_WRP2_PAGES688TO703   (0x00000800U) /* Write protection of Sector43 */  

+#define OB_WRP2_PAGES704TO719   (0x00001000U) /* Write protection of Sector44 */  

+#define OB_WRP2_PAGES720TO735   (0x00002000U) /* Write protection of Sector45 */  

+#define OB_WRP2_PAGES736TO751   (0x00004000U) /* Write protection of Sector46 */  

+#define OB_WRP2_PAGES752TO767   (0x00008000U) /* Write protection of Sector47 */  

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)   \

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA) || defined(STM32L152xD) \

+ || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L152xE)  \

+ || defined(STM32L162xE)

+

+#define OB_WRP2_PAGES768TO783   (0x00010000U) /* Write protection of Sector48 */  

+#define OB_WRP2_PAGES784TO799   (0x00020000U) /* Write protection of Sector49 */  

+#define OB_WRP2_PAGES800TO815   (0x00040000U) /* Write protection of Sector50 */  

+#define OB_WRP2_PAGES816TO831   (0x00080000U) /* Write protection of Sector51 */  

+#define OB_WRP2_PAGES832TO847   (0x00100000U) /* Write protection of Sector52 */  

+#define OB_WRP2_PAGES848TO863   (0x00200000U) /* Write protection of Sector53 */  

+#define OB_WRP2_PAGES864TO879   (0x00400000U) /* Write protection of Sector54 */  

+#define OB_WRP2_PAGES880TO895   (0x00800000U) /* Write protection of Sector55 */  

+#define OB_WRP2_PAGES896TO911   (0x01000000U) /* Write protection of Sector56 */  

+#define OB_WRP2_PAGES912TO927   (0x02000000U) /* Write protection of Sector57 */  

+#define OB_WRP2_PAGES928TO943   (0x04000000U) /* Write protection of Sector58 */  

+#define OB_WRP2_PAGES944TO959   (0x08000000U) /* Write protection of Sector59 */  

+#define OB_WRP2_PAGES960TO975   (0x10000000U) /* Write protection of Sector60 */  

+#define OB_WRP2_PAGES976TO991   (0x20000000U) /* Write protection of Sector61 */  

+#define OB_WRP2_PAGES992TO1007  (0x40000000U) /* Write protection of Sector62 */

+#define OB_WRP2_PAGES1008TO1023 (0x80000000U) /* Write protection of Sector63 */

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || (...) || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */

+      

+#define OB_WRP2_ALLPAGES        ((uint32_t)FLASH_WRPR2_WRP) /*!< Write protection of all Sectors */

+

+/**

+  * @}

+  */ 

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || (...) || STM32L162xD || STM32L151xDX || STM32L152xE || STM32L162xE */

+

+#if defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xD) || defined(STM32L152xDX) \

+ || defined(STM32L162xD) || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE)  \

+ || defined(STM32L162xE)

+

+/** @defgroup FLASHEx_Option_Bytes_Write_Protection3 FLASHEx Option Bytes Write Protection3

+  * @{

+  */

+  

+/* Pages for devices with FLASH >= 256KB*/

+#define OB_WRP3_PAGES1024TO1039 (0x00000001U) /* Write protection of Sector64 */

+#define OB_WRP3_PAGES1040TO1055 (0x00000002U) /* Write protection of Sector65 */

+#define OB_WRP3_PAGES1056TO1071 (0x00000004U) /* Write protection of Sector66 */

+#define OB_WRP3_PAGES1072TO1087 (0x00000008U) /* Write protection of Sector67 */

+#define OB_WRP3_PAGES1088TO1103 (0x00000010U) /* Write protection of Sector68 */

+#define OB_WRP3_PAGES1104TO1119 (0x00000020U) /* Write protection of Sector69 */

+#define OB_WRP3_PAGES1120TO1135 (0x00000040U) /* Write protection of Sector70 */

+#define OB_WRP3_PAGES1136TO1151 (0x00000080U) /* Write protection of Sector71 */

+#define OB_WRP3_PAGES1152TO1167 (0x00000100U) /* Write protection of Sector72 */

+#define OB_WRP3_PAGES1168TO1183 (0x00000200U) /* Write protection of Sector73 */

+#define OB_WRP3_PAGES1184TO1199 (0x00000400U) /* Write protection of Sector74 */

+#define OB_WRP3_PAGES1200TO1215 (0x00000800U) /* Write protection of Sector75 */

+#define OB_WRP3_PAGES1216TO1231 (0x00001000U) /* Write protection of Sector76 */

+#define OB_WRP3_PAGES1232TO1247 (0x00002000U) /* Write protection of Sector77 */

+#define OB_WRP3_PAGES1248TO1263 (0x00004000U) /* Write protection of Sector78 */

+#define OB_WRP3_PAGES1264TO1279 (0x00008000U) /* Write protection of Sector79 */

+#define OB_WRP3_PAGES1280TO1295 (0x00010000U) /* Write protection of Sector80 */

+#define OB_WRP3_PAGES1296TO1311 (0x00020000U) /* Write protection of Sector81 */

+#define OB_WRP3_PAGES1312TO1327 (0x00040000U) /* Write protection of Sector82 */

+#define OB_WRP3_PAGES1328TO1343 (0x00080000U) /* Write protection of Sector83 */

+#define OB_WRP3_PAGES1344TO1359 (0x00100000U) /* Write protection of Sector84 */

+#define OB_WRP3_PAGES1360TO1375 (0x00200000U) /* Write protection of Sector85 */

+#define OB_WRP3_PAGES1376TO1391 (0x00400000U) /* Write protection of Sector86 */

+#define OB_WRP3_PAGES1392TO1407 (0x00800000U) /* Write protection of Sector87 */

+#define OB_WRP3_PAGES1408TO1423 (0x01000000U) /* Write protection of Sector88 */

+#define OB_WRP3_PAGES1424TO1439 (0x02000000U) /* Write protection of Sector89 */

+#define OB_WRP3_PAGES1440TO1455 (0x04000000U) /* Write protection of Sector90 */

+#define OB_WRP3_PAGES1456TO1471 (0x08000000U) /* Write protection of Sector91 */

+#define OB_WRP3_PAGES1472TO1487 (0x10000000U) /* Write protection of Sector92 */

+#define OB_WRP3_PAGES1488TO1503 (0x20000000U) /* Write protection of Sector93 */

+#define OB_WRP3_PAGES1504TO1519 (0x40000000U) /* Write protection of Sector94 */

+#define OB_WRP3_PAGES1520TO1535 (0x80000000U) /* Write protection of Sector95 */

+

+#define OB_WRP3_ALLPAGES        ((uint32_t)FLASH_WRPR3_WRP) /*!< Write protection of all Sectors */

+

+/**

+  * @}

+  */ 

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE*/

+

+#if defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE) || defined(STM32L151xDX) \

+ || defined(STM32L152xDX) || defined(STM32L162xDX)

+

+/** @defgroup FLASHEx_Option_Bytes_Write_Protection4 FLASHEx Option Bytes Write Protection4

+  * @{

+  */

+  

+/* Pages for Cat5 devices*/

+#define OB_WRP4_PAGES1536TO1551 (0x00000001U)/* Write protection of Sector96*/   

+#define OB_WRP4_PAGES1552TO1567 (0x00000002U)/* Write protection of Sector97*/   

+#define OB_WRP4_PAGES1568TO1583 (0x00000004U)/* Write protection of Sector98*/   

+#define OB_WRP4_PAGES1584TO1599 (0x00000008U)/* Write protection of Sector99*/   

+#define OB_WRP4_PAGES1600TO1615 (0x00000010U) /* Write protection of Sector100*/ 

+#define OB_WRP4_PAGES1616TO1631 (0x00000020U) /* Write protection of Sector101*/ 

+#define OB_WRP4_PAGES1632TO1647 (0x00000040U) /* Write protection of Sector102*/ 

+#define OB_WRP4_PAGES1648TO1663 (0x00000080U) /* Write protection of Sector103*/ 

+#define OB_WRP4_PAGES1664TO1679 (0x00000100U) /* Write protection of Sector104*/ 

+#define OB_WRP4_PAGES1680TO1695 (0x00000200U) /* Write protection of Sector105*/ 

+#define OB_WRP4_PAGES1696TO1711 (0x00000400U) /* Write protection of Sector106*/ 

+#define OB_WRP4_PAGES1712TO1727 (0x00000800U) /* Write protection of Sector107*/ 

+#define OB_WRP4_PAGES1728TO1743 (0x00001000U) /* Write protection of Sector108*/ 

+#define OB_WRP4_PAGES1744TO1759 (0x00002000U) /* Write protection of Sector109*/ 

+#define OB_WRP4_PAGES1760TO1775 (0x00004000U) /* Write protection of Sector110*/ 

+#define OB_WRP4_PAGES1776TO1791 (0x00008000U) /* Write protection of Sector111*/ 

+

+#if defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE)

+

+#define OB_WRP4_PAGES1792TO1807 (0x00010000U) /* Write protection of Sector112*/ 

+#define OB_WRP4_PAGES1808TO1823 (0x00020000U) /* Write protection of Sector113*/ 

+#define OB_WRP4_PAGES1824TO1839 (0x00040000U) /* Write protection of Sector114*/ 

+#define OB_WRP4_PAGES1840TO1855 (0x00080000U) /* Write protection of Sector115*/ 

+#define OB_WRP4_PAGES1856TO1871 (0x00100000U) /* Write protection of Sector116*/ 

+#define OB_WRP4_PAGES1872TO1887 (0x00200000U) /* Write protection of Sector117*/ 

+#define OB_WRP4_PAGES1888TO1903 (0x00400000U) /* Write protection of Sector118*/ 

+#define OB_WRP4_PAGES1904TO1919 (0x00800000U) /* Write protection of Sector119*/ 

+#define OB_WRP4_PAGES1920TO1935 (0x01000000U) /* Write protection of Sector120*/ 

+#define OB_WRP4_PAGES1936TO1951 (0x02000000U) /* Write protection of Sector121*/ 

+#define OB_WRP4_PAGES1952TO1967 (0x04000000U) /* Write protection of Sector122*/ 

+#define OB_WRP4_PAGES1968TO1983 (0x08000000U) /* Write protection of Sector123*/ 

+#define OB_WRP4_PAGES1984TO1999 (0x10000000U) /* Write protection of Sector124*/ 

+#define OB_WRP4_PAGES2000TO2015 (0x20000000U) /* Write protection of Sector125*/ 

+#define OB_WRP4_PAGES2016TO2031 (0x40000000U) /* Write protection of Sector126*/ 

+#define OB_WRP4_PAGES2032TO2047 (0x80000000U) /* Write protection of Sector127*/ 

+

+#endif /* STM32L151xE || STM32L152xE || STM32L162xE */

+

+#define OB_WRP4_ALLPAGES        ((uint32_t)FLASH_WRPR4_WRP) /*!< Write protection of all Sectors */

+

+/**

+  * @}

+  */ 

+

+#endif /* STM32L151xE || STM32L152xE || STM32L162xE || STM32L151xDX || ... */

+

+/** @defgroup FLASHEx_Option_Bytes_Read_Protection FLASHEx Option Bytes Read Protection

+  * @{

+  */ 

+#define OB_RDP_LEVEL_0         ((uint8_t)0xAAU)

+#define OB_RDP_LEVEL_1         ((uint8_t)0xBBU)

+#define OB_RDP_LEVEL_2         ((uint8_t)0xCCU) /* Warning: When enabling read protection level 2 

+                                                it is no more possible to go back to level 1 or 0 */

+

+/**

+  * @}

+  */ 

+

+/** @defgroup FLASHEx_Option_Bytes_BOR_Level FLASHEx Option Bytes BOR Level

+  * @{

+  */

+

+#define OB_BOR_OFF       ((uint8_t)0x00U) /*!< BOR is disabled at power down, the reset is asserted when the VDD 

+                                              power supply reaches the PDR(Power Down Reset) threshold (1.5V) */

+#define OB_BOR_LEVEL1    ((uint8_t)0x08U) /*!< BOR Reset threshold levels for 1.7V - 1.8V VDD power supply    */

+#define OB_BOR_LEVEL2    ((uint8_t)0x09U) /*!< BOR Reset threshold levels for 1.9V - 2.0V VDD power supply    */

+#define OB_BOR_LEVEL3    ((uint8_t)0x0AU) /*!< BOR Reset threshold levels for 2.3V - 2.4V VDD power supply    */

+#define OB_BOR_LEVEL4    ((uint8_t)0x0BU) /*!< BOR Reset threshold levels for 2.55V - 2.65V VDD power supply  */

+#define OB_BOR_LEVEL5    ((uint8_t)0x0CU) /*!< BOR Reset threshold levels for 2.8V - 2.9V VDD power supply    */

+

+/**

+  * @}

+  */

+  

+/** @defgroup FLASHEx_Option_Bytes_IWatchdog FLASHEx Option Bytes IWatchdog

+  * @{

+  */

+

+#define OB_IWDG_SW                     ((uint8_t)0x10U)  /*!< Software WDG selected */

+#define OB_IWDG_HW                     ((uint8_t)0x00U)  /*!< Hardware WDG selected */

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASHEx_Option_Bytes_nRST_STOP FLASHEx Option Bytes nRST_STOP

+  * @{

+  */

+

+#define OB_STOP_NORST                  ((uint8_t)0x20U) /*!< No reset generated when entering in STOP */

+#define OB_STOP_RST                    ((uint8_t)0x00U) /*!< Reset generated when entering in STOP */

+/**

+  * @}

+  */

+

+/** @defgroup FLASHEx_Option_Bytes_nRST_STDBY FLASHEx Option Bytes nRST_STDBY

+  * @{

+  */

+

+#define OB_STDBY_NORST                 ((uint8_t)0x40U) /*!< No reset generated when entering in STANDBY */

+#define OB_STDBY_RST                   ((uint8_t)0x00U) /*!< Reset generated when entering in STANDBY */

+

+/**

+  * @}

+  */

+

+#if defined(FLASH_OBR_SPRMOD)

+    

+/** @defgroup FLASHEx_OptionAdv_Type FLASHEx Option Advanced Type

+  * @{

+  */ 

+  

+#define OPTIONBYTE_PCROP        (0x01U)  /*!<PCROP option byte configuration*/

+

+/**

+  * @}

+  */

+

+#endif /* FLASH_OBR_SPRMOD */

+

+#if defined(FLASH_OBR_nRST_BFB2)

+

+/** @defgroup FLASHEx_OptionAdv_Type FLASHEx Option Advanced Type

+  * @{

+  */ 

+  

+#define OPTIONBYTE_BOOTCONFIG   (0x02U)  /*!<BOOTConfig option byte configuration*/

+

+/**

+  * @}

+  */

+

+#endif /* FLASH_OBR_nRST_BFB2 */

+

+#if defined(FLASH_OBR_SPRMOD)

+

+/** @defgroup  FLASHEx_PCROP_State FLASHEx PCROP State

+  * @{

+  */

+#define OB_PCROP_STATE_DISABLE        (0x00U)  /*!<Disable PCROP for selected sectors */

+#define OB_PCROP_STATE_ENABLE         (0x01U)  /*!<Enable PCROP for selected sectors */

+    

+/**

+  * @}

+  */

+

+/** @defgroup  FLASHEx_Selection_Protection_Mode FLASHEx Selection Protection Mode

+  * @{

+  */

+#define OB_PCROP_DESELECTED     ((uint16_t)0x0000U)            /*!< Disabled PCROP, nWPRi bits used for Write Protection on sector i */

+#define OB_PCROP_SELECTED       ((uint16_t)FLASH_OBR_SPRMOD)  /*!< Enable PCROP, nWPRi bits used for PCRoP Protection on sector i   */

+

+/**

+  * @}

+  */

+#endif /* FLASH_OBR_SPRMOD */

+

+#if defined(STM32L151xBA) || defined(STM32L152xBA) || defined(STM32L151xC) || defined(STM32L152xC) \

+ || defined(STM32L162xC)

+/** @defgroup FLASHEx_Option_Bytes_PC_ReadWrite_Protection1 FLASHEx Option Bytes PC ReadWrite Protection 1

+  * @{

+  */

+  

+/* Common pages for Cat1, Cat2, Cat3, Cat4 & Cat5 devices */

+#define OB_PCROP1_PAGES0TO15    (0x00000001U) /* PC Read/Write  protection of Sector0 */  

+#define OB_PCROP1_PAGES16TO31   (0x00000002U) /* PC Read/Write  protection of Sector1 */  

+#define OB_PCROP1_PAGES32TO47   (0x00000004U) /* PC Read/Write  protection of Sector2 */  

+#define OB_PCROP1_PAGES48TO63   (0x00000008U) /* PC Read/Write  protection of Sector3 */  

+#define OB_PCROP1_PAGES64TO79   (0x00000010U) /* PC Read/Write  protection of Sector4 */  

+#define OB_PCROP1_PAGES80TO95   (0x00000020U) /* PC Read/Write  protection of Sector5 */  

+#define OB_PCROP1_PAGES96TO111  (0x00000040U) /* PC Read/Write  protection of Sector6 */  

+#define OB_PCROP1_PAGES112TO127 (0x00000080U) /* PC Read/Write  protection of Sector7 */  

+#define OB_PCROP1_PAGES128TO143 (0x00000100U) /* PC Read/Write  protection of Sector8 */  

+#define OB_PCROP1_PAGES144TO159 (0x00000200U) /* PC Read/Write  protection of Sector9 */  

+#define OB_PCROP1_PAGES160TO175 (0x00000400U) /* PC Read/Write  protection of Sector10 */ 

+#define OB_PCROP1_PAGES176TO191 (0x00000800U) /* PC Read/Write  protection of Sector11 */ 

+#define OB_PCROP1_PAGES192TO207 (0x00001000U) /* PC Read/Write  protection of Sector12 */ 

+#define OB_PCROP1_PAGES208TO223 (0x00002000U) /* PC Read/Write  protection of Sector13 */ 

+#define OB_PCROP1_PAGES224TO239 (0x00004000U) /* PC Read/Write  protection of Sector14 */ 

+#define OB_PCROP1_PAGES240TO255 (0x00008000U) /* PC Read/Write  protection of Sector15 */ 

+#define OB_PCROP1_PAGES256TO271 (0x00010000U) /* PC Read/Write  protection of Sector16 */ 

+#define OB_PCROP1_PAGES272TO287 (0x00020000U) /* PC Read/Write  protection of Sector17 */ 

+#define OB_PCROP1_PAGES288TO303 (0x00040000U) /* PC Read/Write  protection of Sector18 */ 

+#define OB_PCROP1_PAGES304TO319 (0x00080000U) /* PC Read/Write  protection of Sector19 */ 

+#define OB_PCROP1_PAGES320TO335 (0x00100000U) /* PC Read/Write  protection of Sector20 */ 

+#define OB_PCROP1_PAGES336TO351 (0x00200000U) /* PC Read/Write  protection of Sector21 */ 

+#define OB_PCROP1_PAGES352TO367 (0x00400000U) /* PC Read/Write  protection of Sector22 */ 

+#define OB_PCROP1_PAGES368TO383 (0x00800000U) /* PC Read/Write  protection of Sector23 */ 

+#define OB_PCROP1_PAGES384TO399 (0x01000000U) /* PC Read/Write  protection of Sector24 */ 

+#define OB_PCROP1_PAGES400TO415 (0x02000000U) /* PC Read/Write  protection of Sector25 */ 

+#define OB_PCROP1_PAGES416TO431 (0x04000000U) /* PC Read/Write  protection of Sector26 */ 

+#define OB_PCROP1_PAGES432TO447 (0x08000000U) /* PC Read/Write  protection of Sector27 */ 

+#define OB_PCROP1_PAGES448TO463 (0x10000000U) /* PC Read/Write  protection of Sector28 */ 

+#define OB_PCROP1_PAGES464TO479 (0x20000000U) /* PC Read/Write  protection of Sector29 */ 

+#define OB_PCROP1_PAGES480TO495 (0x40000000U) /* PC Read/Write  protection of Sector30 */ 

+#define OB_PCROP1_PAGES496TO511 (0x80000000U) /* PC Read/Write  protection of Sector31 */ 

+  

+#define OB_PCROP1_ALLPAGES      (0xFFFFFFFFU) /*!< PC Read/Write  protection of all Sectors */

+  

+/**

+  * @}

+  */ 

+#endif /* STM32L151xBA || STM32L152xBA || STM32L151xC || STM32L152xC || STM32L162xC */

+

+#if defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)

+

+/** @defgroup FLASHEx_Option_Bytes_PC_ReadWrite_Protection2 FLASHEx Option Bytes PC ReadWrite Protection 2

+  * @{

+  */

+  

+/* Pages for Cat3, Cat4 & Cat5 devices*/

+#define OB_PCROP2_PAGES512TO527   (0x00000001U) /* PC Read/Write  protection of Sector32 */  

+#define OB_PCROP2_PAGES528TO543   (0x00000002U) /* PC Read/Write  protection of Sector33 */  

+#define OB_PCROP2_PAGES544TO559   (0x00000004U) /* PC Read/Write  protection of Sector34 */  

+#define OB_PCROP2_PAGES560TO575   (0x00000008U) /* PC Read/Write  protection of Sector35 */  

+#define OB_PCROP2_PAGES576TO591   (0x00000010U) /* PC Read/Write  protection of Sector36 */  

+#define OB_PCROP2_PAGES592TO607   (0x00000020U) /* PC Read/Write  protection of Sector37 */  

+#define OB_PCROP2_PAGES608TO623   (0x00000040U) /* PC Read/Write  protection of Sector38 */  

+#define OB_PCROP2_PAGES624TO639   (0x00000080U) /* PC Read/Write  protection of Sector39 */  

+#define OB_PCROP2_PAGES640TO655   (0x00000100U) /* PC Read/Write  protection of Sector40 */  

+#define OB_PCROP2_PAGES656TO671   (0x00000200U) /* PC Read/Write  protection of Sector41 */  

+#define OB_PCROP2_PAGES672TO687   (0x00000400U) /* PC Read/Write  protection of Sector42 */  

+#define OB_PCROP2_PAGES688TO703   (0x00000800U) /* PC Read/Write  protection of Sector43 */  

+#define OB_PCROP2_PAGES704TO719   (0x00001000U) /* PC Read/Write  protection of Sector44 */  

+#define OB_PCROP2_PAGES720TO735   (0x00002000U) /* PC Read/Write  protection of Sector45 */  

+#define OB_PCROP2_PAGES736TO751   (0x00004000U) /* PC Read/Write  protection of Sector46 */  

+#define OB_PCROP2_PAGES752TO767   (0x00008000U) /* PC Read/Write  protection of Sector47 */  

+#define OB_PCROP2_PAGES768TO783   (0x00010000U) /* PC Read/Write  protection of Sector48 */  

+#define OB_PCROP2_PAGES784TO799   (0x00020000U) /* PC Read/Write  protection of Sector49 */  

+#define OB_PCROP2_PAGES800TO815   (0x00040000U) /* PC Read/Write  protection of Sector50 */  

+#define OB_PCROP2_PAGES816TO831   (0x00080000U) /* PC Read/Write  protection of Sector51 */  

+#define OB_PCROP2_PAGES832TO847   (0x00100000U) /* PC Read/Write  protection of Sector52 */  

+#define OB_PCROP2_PAGES848TO863   (0x00200000U) /* PC Read/Write  protection of Sector53 */  

+#define OB_PCROP2_PAGES864TO879   (0x00400000U) /* PC Read/Write  protection of Sector54 */  

+#define OB_PCROP2_PAGES880TO895   (0x00800000U) /* PC Read/Write  protection of Sector55 */  

+#define OB_PCROP2_PAGES896TO911   (0x01000000U) /* PC Read/Write  protection of Sector56 */  

+#define OB_PCROP2_PAGES912TO927   (0x02000000U) /* PC Read/Write  protection of Sector57 */  

+#define OB_PCROP2_PAGES928TO943   (0x04000000U) /* PC Read/Write  protection of Sector58 */  

+#define OB_PCROP2_PAGES944TO959   (0x08000000U) /* PC Read/Write  protection of Sector59 */  

+#define OB_PCROP2_PAGES960TO975   (0x10000000U) /* PC Read/Write  protection of Sector60 */  

+#define OB_PCROP2_PAGES976TO991   (0x20000000U) /* PC Read/Write  protection of Sector61 */  

+#define OB_PCROP2_PAGES992TO1007  (0x40000000U) /* PC Read/Write  protection of Sector62 */

+#define OB_PCROP2_PAGES1008TO1023 (0x80000000U) /* PC Read/Write  protection of Sector63 */

+

+#define OB_PCROP2_ALLPAGES        (0xFFFFFFFFU) /*!< PC Read/Write  protection of all Sectors */

+

+/**

+  * @}

+  */ 

+#endif /* STM32L151xC || STM32L152xC || STM32L162xC */

+

+/** @defgroup FLASHEx_Type_Erase_Data FLASHEx Type Erase Data

+  * @{

+  */

+#define FLASH_TYPEERASEDATA_BYTE            (0x00U)  /*!<Erase byte (8-bit) at a specified address.*/

+#define FLASH_TYPEERASEDATA_HALFWORD        (0x01U)  /*!<Erase a half-word (16-bit) at a specified address.*/

+#define FLASH_TYPEERASEDATA_WORD            (0x02U)  /*!<Erase a word (32-bit) at a specified address.*/

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASHEx_Type_Program_Data FLASHEx Type Program Data

+  * @{

+  */

+#define FLASH_TYPEPROGRAMDATA_BYTE            (0x00U)  /*!<Program byte (8-bit) at a specified address.*/

+#define FLASH_TYPEPROGRAMDATA_HALFWORD        (0x01U)  /*!<Program a half-word (16-bit) at a specified address.*/

+#define FLASH_TYPEPROGRAMDATA_WORD            (0x02U)  /*!<Program a word (32-bit) at a specified address.*/

+#define FLASH_TYPEPROGRAMDATA_FASTBYTE        (0x04U)  /*!<Fast Program byte (8-bit) at a specified address.*/

+#define FLASH_TYPEPROGRAMDATA_FASTHALFWORD    (0x08U)  /*!<Fast Program a half-word (16-bit) at a specified address.*/

+#define FLASH_TYPEPROGRAMDATA_FASTWORD        (0x10U)  /*!<Fast Program a word (32-bit) at a specified address.*/

+

+/**

+  * @}

+  */

+

+#if defined(FLASH_OBR_nRST_BFB2)

+    

+/** @defgroup FLASHEx_Option_Bytes_BOOT FLASHEx Option Bytes BOOT

+  * @{

+  */

+

+#define OB_BOOT_BANK2                 ((uint8_t)0x00U) /*!< At startup, if boot pins are set in boot from user Flash position

+                                                            and this parameter is selected the device will boot from Bank 2 

+                                                            or Bank 1, depending on the activation of the bank */

+#define OB_BOOT_BANK1                 ((uint8_t)(FLASH_OBR_nRST_BFB2 >> 16U)) /*!< At startup, if boot pins are set in boot from user Flash position

+                                                            and this parameter is selected the device will boot from Bank1(Default) */

+

+/**

+  * @}

+  */

+#endif /* FLASH_OBR_nRST_BFB2 */

+

+/**

+  * @}

+  */

+

+/* Exported macro ------------------------------------------------------------*/

+

+/** @defgroup FLASHEx_Exported_Macros FLASHEx Exported Macros

+ *  @{

+ */

+ 

+/**

+  * @brief  Set the FLASH Latency.

+  * @param  __LATENCY__ FLASH Latency

+  *          This parameter can be one of the following values:

+  *            @arg @ref FLASH_LATENCY_0  FLASH Zero Latency cycle

+  *            @arg @ref FLASH_LATENCY_1  FLASH One Latency cycle

+  * @retval none

+  */ 

+#define __HAL_FLASH_SET_LATENCY(__LATENCY__)  do  { \

+                                                  if ((__LATENCY__) == FLASH_LATENCY_1) {__HAL_FLASH_ACC64_ENABLE();} \

+                                                  MODIFY_REG((FLASH->ACR), FLASH_ACR_LATENCY, (__LATENCY__)); \

+                                              } while(0U)

+

+/**

+  * @brief  Get the FLASH Latency.

+  * @retval FLASH Latency                   

+  *          This parameter can be one of the following values:

+  *            @arg @ref FLASH_LATENCY_0  FLASH Zero Latency cycle

+  *            @arg @ref FLASH_LATENCY_1  FLASH One Latency cycle

+  */ 

+#define __HAL_FLASH_GET_LATENCY()     (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))

+

+/**

+  * @brief  Enable the FLASH 64-bit access.

+  * @note    Read access 64 bit is used.

+  * @note    This bit cannot be written at the same time as the LATENCY and 

+  *          PRFTEN bits.

+  * @retval none

+  */ 

+#define __HAL_FLASH_ACC64_ENABLE()    (SET_BIT((FLASH->ACR), FLASH_ACR_ACC64))

+

+  /**

+  * @brief  Disable the FLASH 64-bit access.

+  * @note     Read access 32 bit is used

+  * @note     To reset this bit, the LATENCY should be zero wait state and the 

+  *               prefetch off.

+  * @retval none

+  */ 

+#define __HAL_FLASH_ACC64_DISABLE()   (CLEAR_BIT((FLASH->ACR), FLASH_ACR_ACC64))

+

+/**

+  * @brief  Enable the FLASH prefetch buffer.

+  * @retval none

+  */ 

+#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE()    do  { __HAL_FLASH_ACC64_ENABLE(); \

+                                                  SET_BIT((FLASH->ACR), FLASH_ACR_PRFTEN); \

+                                                } while(0U)

+

+/**

+  * @brief  Disable the FLASH prefetch buffer.

+  * @retval none

+  */ 

+#define __HAL_FLASH_PREFETCH_BUFFER_DISABLE()     CLEAR_BIT((FLASH->ACR), FLASH_ACR_PRFTEN)

+

+/**

+  * @brief  Enable the FLASH power down during Sleep mode

+  * @retval none

+  */ 

+#define __HAL_FLASH_SLEEP_POWERDOWN_ENABLE()      SET_BIT(FLASH->ACR, FLASH_ACR_SLEEP_PD)

+

+/**

+  * @brief  Disable the FLASH power down during Sleep mode

+  * @retval none

+  */ 

+#define __HAL_FLASH_SLEEP_POWERDOWN_DISABLE()     CLEAR_BIT(FLASH->ACR, FLASH_ACR_SLEEP_PD)

+

+/**

+  * @brief  Enable the Flash Run power down mode.

+  * @note   Writing this bit  to 0 this bit, automatically the keys are

+  *         loss and a new unlock sequence is necessary to re-write it to 1.

+  */

+#define __HAL_FLASH_POWER_DOWN_ENABLE() do { FLASH->PDKEYR = FLASH_PDKEY1;    \

+                                             FLASH->PDKEYR = FLASH_PDKEY2;    \

+                                             SET_BIT((FLASH->ACR), FLASH_ACR_RUN_PD);  \

+                                           } while (0U)

+

+/**

+  * @brief  Disable the Flash Run power down mode.

+  * @note   Writing this bit to 0 this bit, automatically the keys are

+  *         loss and a new unlock sequence is necessary to re-write it to 1.

+  */

+#define __HAL_FLASH_POWER_DOWN_DISABLE() do { FLASH->PDKEYR = FLASH_PDKEY1;    \

+                                              FLASH->PDKEYR = FLASH_PDKEY2;    \

+                                             CLEAR_BIT((FLASH->ACR), FLASH_ACR_RUN_PD);  \

+                                            } while (0U)

+                                            

+/**

+  * @}

+  */

+

+/* Exported functions --------------------------------------------------------*/

+

+/** @addtogroup FLASHEx_Exported_Functions

+  * @{

+  */

+

+/** @addtogroup FLASHEx_Exported_Functions_Group1

+  * @{

+  */

+

+HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError);

+HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit);

+

+/**

+  * @}

+  */

+

+/** @addtogroup FLASHEx_Exported_Functions_Group2

+  * @{

+  */

+

+HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit);

+void              HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit);

+

+#if defined(FLASH_OBR_SPRMOD) || defined(FLASH_OBR_nRST_BFB2)

+    

+HAL_StatusTypeDef HAL_FLASHEx_AdvOBProgram (FLASH_AdvOBProgramInitTypeDef *pAdvOBInit);

+void              HAL_FLASHEx_AdvOBGetConfig(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit);

+

+#endif /* FLASH_OBR_SPRMOD || FLASH_OBR_nRST_BFB2 */

+

+#if defined(FLASH_OBR_SPRMOD)

+

+HAL_StatusTypeDef HAL_FLASHEx_OB_SelectPCROP(void);

+HAL_StatusTypeDef HAL_FLASHEx_OB_DeSelectPCROP(void);

+

+#endif /* FLASH_OBR_SPRMOD */

+

+/**

+  * @}

+  */

+

+/** @addtogroup FLASHEx_Exported_Functions_Group3

+  * @{

+  */

+

+HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Unlock(void);

+HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Lock(void);

+

+HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Erase(uint32_t TypeErase, uint32_t Address);

+HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data);

+void              HAL_FLASHEx_DATAEEPROM_EnableFixedTimeProgram(void);

+void              HAL_FLASHEx_DATAEEPROM_DisableFixedTimeProgram(void);

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */ 

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_HAL_FLASH_EX_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ramfunc.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ramfunc.h
new file mode 100644
index 0000000..fb224ae
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_flash_ramfunc.h
@@ -0,0 +1,119 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_flash_ramfunc.h

+  * @author  MCD Application Team

+  * @brief   Header file of FLASH RAMFUNC driver.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */ 

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_FLASH_RAMFUNC_H

+#define __STM32L1xx_FLASH_RAMFUNC_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup FLASH_RAMFUNC

+  * @{

+  */ 

+

+/* Exported types ------------------------------------------------------------*/ 

+

+

+/* Exported functions --------------------------------------------------------*/

+

+/** @addtogroup FLASH_RAMFUNC_Exported_Functions

+  * @{

+  */

+

+/*

+  * @brief  FLASH memory functions that should be executed from internal SRAM.

+  *         These functions are defined inside the "stm32l1xx_hal_flash_ramfunc.c"

+  *         file.

+  */

+  

+/** @addtogroup FLASH_RAMFUNC_Exported_Functions_Group1

+  * @{

+  */

+

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EnableRunPowerDown(void);

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DisableRunPowerDown(void);

+

+/**

+  * @}

+  */ 

+

+/** @addtogroup FLASH_RAMFUNC_Exported_Functions_Group2

+  * @{

+  */

+

+#if defined(FLASH_PECR_PARALLBANK)

+

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EraseParallelPage(uint32_t Page_Address1, uint32_t Page_Address2);

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_ProgramParallelHalfPage(uint32_t Address1, uint32_t* pBuffer1, uint32_t Address2, uint32_t* pBuffer2);

+

+#endif /* FLASH_PECR_PARALLBANK */

+

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_HalfPageProgram(uint32_t Address, uint32_t* pBuffer);

+

+/**

+  * @}

+  */ 

+

+/** @addtogroup FLASH_RAMFUNC_Exported_Functions_Group3

+  * @{

+  */

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_GetError(uint32_t *Error);

+/**

+  * @}

+  */ 

+

+/** @addtogroup FLASH_RAMFUNC_Exported_Functions_Group4

+  * @{

+  */

+

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_EraseDoubleWord(uint32_t Address);

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_ProgramDoubleWord(uint32_t Address, uint64_t Data);

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_FLASH_RAMFUNC_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio.h
new file mode 100644
index 0000000..e57479e
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio.h
@@ -0,0 +1,320 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_gpio.h

+  * @author  MCD Application Team

+  * @brief   Header file of GPIO HAL module.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */ 

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_GPIO_H

+#define __STM32L1xx_HAL_GPIO_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @defgroup GPIO GPIO

+  * @brief GPIO HAL module driver

+  * @{

+  */ 

+

+/* Exported types ------------------------------------------------------------*/ 

+

+/** @defgroup GPIO_Exported_Types GPIO Exported Types

+  * @{

+  */

+/** 

+  * @brief   GPIO Init structure definition  

+  */

+typedef struct

+{

+  uint32_t Pin;       /*!< Specifies the GPIO pins to be configured.

+                           This parameter can be any value of @ref GPIO_pins */

+

+  uint32_t Mode;      /*!< Specifies the operating mode for the selected pins.

+                           This parameter can be a value of @ref GPIO_mode */

+

+  uint32_t Pull;      /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.

+                           This parameter can be a value of @ref GPIO_pull */

+

+  uint32_t Speed;     /*!< Specifies the speed for the selected pins.

+                           This parameter can be a value of @ref GPIO_speed */

+

+  uint32_t Alternate;  /*!< Peripheral to be connected to the selected pins 

+                            This parameter can be a value of @ref GPIOEx_Alternate_function_selection */

+}GPIO_InitTypeDef;

+

+/** 

+  * @brief  GPIO Bit SET and Bit RESET enumeration 

+  */

+typedef enum

+{

+  GPIO_PIN_RESET = 0,

+  GPIO_PIN_SET

+}GPIO_PinState;

+/**

+  * @}

+  */

+  

+/* Exported constants --------------------------------------------------------*/

+

+/** @defgroup GPIO_Exported_Constants GPIO Exported Constants

+  * @{

+  */

+

+

+/** @defgroup GPIO_pins GPIO pins

+  * @{

+  */

+#define GPIO_PIN_0                 ((uint16_t)0x0001U)  /* Pin 0 selected    */

+#define GPIO_PIN_1                 ((uint16_t)0x0002U)  /* Pin 1 selected    */

+#define GPIO_PIN_2                 ((uint16_t)0x0004U)  /* Pin 2 selected    */

+#define GPIO_PIN_3                 ((uint16_t)0x0008U)  /* Pin 3 selected    */

+#define GPIO_PIN_4                 ((uint16_t)0x0010U)  /* Pin 4 selected    */

+#define GPIO_PIN_5                 ((uint16_t)0x0020U)  /* Pin 5 selected    */

+#define GPIO_PIN_6                 ((uint16_t)0x0040U)  /* Pin 6 selected    */

+#define GPIO_PIN_7                 ((uint16_t)0x0080U)  /* Pin 7 selected    */

+#define GPIO_PIN_8                 ((uint16_t)0x0100U)  /* Pin 8 selected    */

+#define GPIO_PIN_9                 ((uint16_t)0x0200U)  /* Pin 9 selected    */

+#define GPIO_PIN_10                ((uint16_t)0x0400U)  /* Pin 10 selected   */

+#define GPIO_PIN_11                ((uint16_t)0x0800U)  /* Pin 11 selected   */

+#define GPIO_PIN_12                ((uint16_t)0x1000U)  /* Pin 12 selected   */

+#define GPIO_PIN_13                ((uint16_t)0x2000U)  /* Pin 13 selected   */

+#define GPIO_PIN_14                ((uint16_t)0x4000U)  /* Pin 14 selected   */

+#define GPIO_PIN_15                ((uint16_t)0x8000U)  /* Pin 15 selected   */

+#define GPIO_PIN_All               ((uint16_t)0xFFFFU)  /* All pins selected */

+

+#define GPIO_PIN_MASK              (0x0000FFFFU) /* PIN mask for assert test */

+/**

+  * @}

+  */

+

+/** @defgroup GPIO_mode GPIO mode

+  * @brief GPIO Configuration Mode 

+  *        Elements values convention: 0xX0yz00YZ

+  *           - X  : GPIO mode or EXTI Mode

+  *           - y  : External IT or Event trigger detection 

+  *           - z  : IO configuration on External IT or Event

+  *           - Y  : Output type (Push Pull or Open Drain)

+  *           - Z  : IO Direction mode (Input, Output, Alternate or Analog)

+  * @{

+  */ 

+#define  GPIO_MODE_INPUT                        (0x00000000U)   /*!< Input Floating Mode                   */

+#define  GPIO_MODE_OUTPUT_PP                    (0x00000001U)   /*!< Output Push Pull Mode                 */

+#define  GPIO_MODE_OUTPUT_OD                    (0x00000011U)   /*!< Output Open Drain Mode                */

+#define  GPIO_MODE_AF_PP                        (0x00000002U)   /*!< Alternate Function Push Pull Mode     */

+#define  GPIO_MODE_AF_OD                        (0x00000012U)   /*!< Alternate Function Open Drain Mode    */

+

+#define  GPIO_MODE_ANALOG                       (0x00000003U)   /*!< Analog Mode  */

+    

+#define  GPIO_MODE_IT_RISING                    (0x10110000U)   /*!< External Interrupt Mode with Rising edge trigger detection          */

+#define  GPIO_MODE_IT_FALLING                   (0x10210000U)   /*!< External Interrupt Mode with Falling edge trigger detection         */

+#define  GPIO_MODE_IT_RISING_FALLING            (0x10310000U)   /*!< External Interrupt Mode with Rising/Falling edge trigger detection  */

+

+#define  GPIO_MODE_EVT_RISING                   (0x10120000U)   /*!< External Event Mode with Rising edge trigger detection               */

+#define  GPIO_MODE_EVT_FALLING                  (0x10220000U)   /*!< External Event Mode with Falling edge trigger detection              */

+#define  GPIO_MODE_EVT_RISING_FALLING           (0x10320000U)   /*!< External Event Mode with Rising/Falling edge trigger detection       */

+

+/**

+  * @}

+  */

+                                                         

+/** @defgroup GPIO_speed GPIO speed

+  * @brief GPIO Output Maximum frequency

+  * @{

+  */  

+#define  GPIO_SPEED_FREQ_LOW       (0x00000000U) /*!< max: 400 KHz, please refer to the product datasheet */

+#define  GPIO_SPEED_FREQ_MEDIUM    (0x00000001U) /*!< max: 1 MHz to 2 MHz, please refer to the product datasheet */

+#define  GPIO_SPEED_FREQ_HIGH      (0x00000002U) /*!< max: 2 MHz to 10 MHz, please refer to the product datasheet */

+#define  GPIO_SPEED_FREQ_VERY_HIGH (0x00000003U) /*!< max: 8 MHz to 50 MHz, please refer to the product datasheet */

+

+/**

+  * @}

+  */

+

+ /** @defgroup GPIO_pull GPIO pull

+   * @brief GPIO Pull-Up or Pull-Down Activation

+   * @{

+   */  

+#define  GPIO_NOPULL        (0x00000000U)   /*!< No Pull-up or Pull-down activation  */

+#define  GPIO_PULLUP        (0x00000001U)   /*!< Pull-up activation                  */

+#define  GPIO_PULLDOWN      (0x00000002U)   /*!< Pull-down activation                */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Private constants ---------------------------------------------------------*/

+/** @defgroup GPIO_Private_Constants GPIO Private Constants

+  * @{

+  */

+

+/**

+  * @}

+  */ 

+

+/* Private macros --------------------------------------------------------*/

+/** @defgroup GPIO_Private_Macros GPIO Private Macros

+  * @{

+  */

+

+#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))

+

+#define IS_GPIO_PIN(__PIN__)        ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U) &&\

+                                     (((uint32_t)(__PIN__) & ~GPIO_PIN_MASK) == 0x00U))

+

+#define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \

+                            ((PULL) == GPIO_PULLDOWN))

+                            

+#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW)  || ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || \

+                                ((SPEED) == GPIO_SPEED_FREQ_HIGH) || ((SPEED) == GPIO_SPEED_FREQ_VERY_HIGH))

+

+#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT)              ||\

+                            ((MODE) == GPIO_MODE_OUTPUT_PP)          ||\

+                            ((MODE) == GPIO_MODE_OUTPUT_OD)          ||\

+                            ((MODE) == GPIO_MODE_AF_PP)              ||\

+                            ((MODE) == GPIO_MODE_AF_OD)              ||\

+                            ((MODE) == GPIO_MODE_IT_RISING)          ||\

+                            ((MODE) == GPIO_MODE_IT_FALLING)         ||\

+                            ((MODE) == GPIO_MODE_IT_RISING_FALLING)  ||\

+                            ((MODE) == GPIO_MODE_EVT_RISING)         ||\

+                            ((MODE) == GPIO_MODE_EVT_FALLING)        ||\

+                            ((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\

+                            ((MODE) == GPIO_MODE_ANALOG))

+

+/**

+  * @}

+  */

+

+/* Exported macro ------------------------------------------------------------*/

+

+/** @defgroup GPIO_Exported_Macros GPIO Exported Macros

+  * @{

+  */

+  

+/**

+  * @brief  Checks whether the specified EXTI line flag is set or not.

+  * @param  __EXTI_LINE__ specifies the EXTI line flag to check.

+  *         This parameter can be GPIO_PIN_x where x can be(0..15)

+  * @retval The new state of __EXTI_LINE__ (SET or RESET).

+  */

+#define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))

+

+/**

+  * @brief  Clears the EXTI's line pending flags.

+  * @param  __EXTI_LINE__ specifies the EXTI lines flags to clear.

+  *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15)

+  * @retval None

+  */

+#define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))

+

+/**

+  * @brief  Checks whether the specified EXTI line is asserted or not.

+  * @param  __EXTI_LINE__ specifies the EXTI line to check.

+  *          This parameter can be GPIO_PIN_x where x can be(0..15)

+  * @retval The new state of __EXTI_LINE__ (SET or RESET).

+  */

+#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))

+

+/**

+  * @brief  Clears the EXTI's line pending bits.

+  * @param  __EXTI_LINE__ specifies the EXTI lines to clear.

+  *          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)

+  * @retval None

+  */

+#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))

+

+/**

+  * @brief  Generates a Software interrupt on selected EXTI line.

+  * @param  __EXTI_LINE__ specifies the EXTI line to check.

+  *          This parameter can be GPIO_PIN_x where x can be(0..15)

+  * @retval None

+  */

+#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__))

+

+/**

+  * @}

+  */

+

+/* Include GPIO HAL Extension module */

+#include "stm32l1xx_hal_gpio_ex.h"

+

+/* Exported functions --------------------------------------------------------*/ 

+/** @defgroup GPIO_Exported_Functions GPIO Exported Functions

+ *  @brief    GPIO Exported Functions

+  * @{

+  */

+

+/** @defgroup GPIO_Exported_Functions_Group1 Initialization and Configuration functions

+ *  @brief    Initialization and Configuration functions

+ * @{

+ */

+     

+/* Initialization and de-initialization functions *****************************/

+void              HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init);

+void              HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);

+

+/**

+  * @}

+  */

+

+/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions 

+ *  @brief    IO operation functions

+ * @{

+ */

+   

+/* IO operation functions *****************************************************/

+GPIO_PinState     HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

+void              HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

+void              HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

+HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

+void              HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);

+void              HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */  

+  

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_HAL_GPIO_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio_ex.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio_ex.h
new file mode 100644
index 0000000..8ec8dbf
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_gpio_ex.h
@@ -0,0 +1,205 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_gpio_ex.h

+  * @author  MCD Application Team

+  * @brief   Header file of GPIO HAL Extension module.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */ 

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_GPIO_EX_H

+#define __STM32L1xx_HAL_GPIO_EX_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @defgroup GPIOEx GPIOEx

+  * @{

+  */ 

+

+/* Exported types ------------------------------------------------------------*/

+/* Exported constants --------------------------------------------------------*/

+/** @defgroup GPIOEx_Exported_Constants GPIOEx Exported Constants

+  * @{

+  */ 

+  

+/** @defgroup GPIOEx_Alternate_function_selection GPIOEx Alternate function selection

+  * @{

+  */

+  

+/* AF 0 selection */ 

+#define GPIO_AF0_MCO           ((uint8_t)0x00)  /*!< MCO Alternate Function mapping                 */

+#define GPIO_AF0_TAMPER        ((uint8_t)0x00)  /*!< TAMPER  Alternate Function mapping             */

+#define GPIO_AF0_SWJ           ((uint8_t)0x00)  /*!< SWJ (SWD and JTAG) Alternate Function mapping  */

+#define GPIO_AF0_TRACE         ((uint8_t)0x00)  /*!< TRACE Alternate Function mapping               */

+#define GPIO_AF0_RTC_50Hz      ((uint8_t)0x00)  /*!< RTC_OUT Alternate Function mapping             */

+   

+/* AF 1 selection */ 

+#define GPIO_AF1_TIM2           ((uint8_t)0x01)  /*!< TIM2 Alternate Function mapping */

+

+/* AF 2 selection */ 

+#define GPIO_AF2_TIM3           ((uint8_t)0x02)  /*!< TIM3 Alternate Function mapping */

+#define GPIO_AF2_TIM4           ((uint8_t)0x02)  /*!< TIM4 Alternate Function mapping */

+#if defined (STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || defined (STM32L151xE) || defined (STM32L151xDX) || defined (STM32L152xE) || defined (STM32L152xDX) || defined (STM32L162xE) || defined (STM32L162xDX) || defined (STM32L162xC) || defined (STM32L152xC) || defined (STM32L151xC)

+#define GPIO_AF2_TIM5           ((uint8_t)0x02)  /*!< TIM5 Alternate Function mapping */

+

+#endif /*  STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD ...STM32L151xC */ 

+

+/* AF 3 selection */ 

+#define GPIO_AF3_TIM9            ((uint8_t)0x03)  /*!< TIM9 Alternate Function mapping */

+#define GPIO_AF3_TIM10           ((uint8_t)0x03)  /*!< TIM10 Alternate Function mapping */

+#define GPIO_AF3_TIM11           ((uint8_t)0x03)  /*!< TIM11 Alternate Function mapping */

+

+

+/* AF 4 selection */ 

+#define GPIO_AF4_I2C1          ((uint8_t)0x04)  /*!< I2C1 Alternate Function mapping */

+#define GPIO_AF4_I2C2          ((uint8_t)0x04)  /*!< I2C2 Alternate Function mapping */

+

+/* AF 5 selection */ 

+#define GPIO_AF5_SPI1          ((uint8_t)0x05)  /*!< SPI1/I2S1 Alternate Function mapping      */

+#define GPIO_AF5_SPI2          ((uint8_t)0x05)  /*!< SPI2/I2S2 Alternate Function mapping */

+

+/* AF 6 selection */ 

+#if defined (STM32L100xC) || defined (STM32L151xC) || defined (STM32L151xCA) || defined (STM32L151xD) || defined (STM32L151xE) || defined (STM32L151xDX) ||\

+    defined (STM32L152xC) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L152xE) || defined (STM32L152xDX) ||\

+    defined (STM32L162xC) || defined (STM32L162xCA) || defined (STM32L162xD) || defined (STM32L162xE) || defined (STM32L162xDX)

+    

+#define GPIO_AF6_SPI3          ((uint8_t)0x06)  /*!< SPI3/I2S3 Alternate Function mapping */

+

+#endif /* STM32L100xC || STM32L151xC || (...) || STM32L162xD || STM32L162xE || STM32L162xDX */

+

+

+/* AF 7 selection */ 

+#define GPIO_AF7_USART1        ((uint8_t)0x07)  /*!< USART1 Alternate Function mapping  */

+#define GPIO_AF7_USART2        ((uint8_t)0x07)  /*!< USART2 Alternate Function mapping  */

+#define GPIO_AF7_USART3        ((uint8_t)0x07)  /*!< USART3 Alternate Function mapping  */

+

+/* AF 8 selection */ 

+#if defined (STM32L151xD) || defined (STM32L151xE) || defined (STM32L151xDX) ||\

+    defined (STM32L152xD) || defined (STM32L152xE) || defined (STM32L152xDX) ||\

+    defined (STM32L162xD) || defined (STM32L162xE) || defined (STM32L162xDX)

+   

+#define GPIO_AF8_UART4        ((uint8_t)0x08)  /*!< UART4 Alternate Function mapping  */

+#define GPIO_AF8_UART5        ((uint8_t)0x08)  /*!< UART5 Alternate Function mapping  */

+

+#endif /* STM32L151xD || STM32L151xE || STM32L151xDX || STM32L152xD || STM32L 152xE || STM32L162xD || STM32L162xE || STM32L162xDX */

+

+

+/* AF 9 selection */ 

+

+/* AF 10 selection */ 

+

+/* AF 11 selection */ 

+#if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\

+    defined (STM32L152xB) || defined (STM32L152xBA) || defined (STM32L152xC) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L152xE) || defined (STM32L152xDX) ||\

+    defined (STM32L162xC) || defined (STM32L162xCA) || defined (STM32L162xD) || defined (STM32L162xE) || defined (STM32L162xDX)

+

+#define GPIO_AF11_LCD            ((uint8_t)0x0B)  /*!< LCD Alternate Function mapping */

+

+#endif /* STM32L100xB || STM32L100xBA || STM32L100xC || (...) || STM32L162xCA || STM32L162xD || STM32L162xE || STM32L162xDX */

+

+/* AF 12 selection */ 

+#if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)

+    

+#define GPIO_AF12_FSMC            ((uint8_t)0x0C)  /*!< FSMC Alternate Function mapping */

+#define GPIO_AF12_SDIO            ((uint8_t)0x0C)  /*!< SDIO Alternate Function mapping */

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+/* AF 13 selection */ 

+

+/* AF 14 selection */ 

+#define GPIO_AF14_TIM_IC1         ((uint8_t)0x0E)  /*!< TIMER INPUT CAPTURE Alternate Function mapping */

+#define GPIO_AF14_TIM_IC2         ((uint8_t)0x0E)  /*!< TIMER INPUT CAPTURE Alternate Function mapping */

+#define GPIO_AF14_TIM_IC3         ((uint8_t)0x0E)  /*!< TIMER INPUT CAPTURE Alternate Function mapping */

+#define GPIO_AF14_TIM_IC4         ((uint8_t)0x0E)  /*!< TIMER INPUT CAPTURE Alternate Function mapping */

+

+/* AF 15 selection */ 

+#define GPIO_AF15_EVENTOUT      ((uint8_t)0x0F)  /*!< EVENTOUT Alternate Function mapping */

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */

+

+/** @defgroup GPIOEx_Private_Macros GPIOEx Private Macros

+  * @{

+  */

+

+

+#define IS_GPIO_AF(AF)   ((AF) <= (uint8_t)0x0F)

+

+

+#if defined (STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || defined (STM32L151xE) || defined (STM32L151xDX) || defined (STM32L152xE) || defined (STM32L152xDX) || defined (STM32L162xE) || defined (STM32L162xDX)

+#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\

+                                   ((__GPIOx__) == (GPIOB))? 1U :\

+                                   ((__GPIOx__) == (GPIOC))? 2U :\

+                                   ((__GPIOx__) == (GPIOD))? 3U :\

+                                   ((__GPIOx__) == (GPIOE))? 4U :\

+                                   ((__GPIOx__) == (GPIOH))? 5U :\

+                                   ((__GPIOx__) == (GPIOF))? 6U : 7U)

+#endif 

+

+#if defined (STM32L151xB) || defined (STM32L151xBA) || defined (STM32L151xC) || defined (STM32L152xB) || defined (STM32L152xBA) || defined (STM32L152xC) || defined (STM32L162xC)

+#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\

+                                   ((__GPIOx__) == (GPIOB))? 1U :\

+                                   ((__GPIOx__) == (GPIOC))? 2U :\

+                                   ((__GPIOx__) == (GPIOD))? 3U :\

+                                   ((__GPIOx__) == (GPIOE))? 4U : 5U)

+#endif 

+

+#if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC)

+#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\

+                                   ((__GPIOx__) == (GPIOB))? 1U :\

+                                   ((__GPIOx__) == (GPIOC))? 2U :\

+                                   ((__GPIOx__) == (GPIOD))? 3U : 5U)

+#endif 

+

+

+

+/**

+  * @}

+  */

+

+

+

+/* Exported macro ------------------------------------------------------------*/

+/* Exported functions --------------------------------------------------------*/ 

+

+

+/**

+  * @}

+  */ 

+

+/**

+  * @}

+  */ 

+  

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_HAL_GPIO_EX_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr.h
new file mode 100644
index 0000000..ec27205
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr.h
@@ -0,0 +1,486 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_pwr.h

+  * @author  MCD Application Team

+  * @brief   Header file of PWR HAL module.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_PWR_H

+#define __STM32L1xx_HAL_PWR_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup PWR

+  * @{

+  */

+

+/* Exported types ------------------------------------------------------------*/

+

+/** @defgroup PWR_Exported_Types PWR Exported Types

+  * @{

+  */

+

+/**

+  * @brief  PWR PVD configuration structure definition

+  */

+typedef struct

+{

+  uint32_t PVDLevel;   /*!< PVDLevel: Specifies the PVD detection level.

+                            This parameter can be a value of @ref PWR_PVD_detection_level */

+

+  uint32_t Mode;      /*!< Mode: Specifies the operating mode for the selected pins.

+                           This parameter can be a value of @ref PWR_PVD_Mode */

+}PWR_PVDTypeDef;

+

+/**

+  * @}

+  */

+

+/* Internal constants --------------------------------------------------------*/

+

+/** @addtogroup PWR_Private_Constants

+  * @{

+  */

+#define PWR_EXTI_LINE_PVD  (0x00010000U)  /*!< External interrupt line 16 Connected to the PVD EXTI Line */

+

+/**

+  * @}

+  */

+

+

+

+/* Exported constants --------------------------------------------------------*/

+

+/** @defgroup PWR_Exported_Constants PWR Exported Constants

+  * @{

+  */

+

+/** @defgroup PWR_register_alias_address PWR Register alias address

+  * @{

+  */

+/* ------------- PWR registers bit address in the alias region ---------------*/

+#define PWR_OFFSET               (PWR_BASE - PERIPH_BASE)

+#define PWR_CR_OFFSET            0x00

+#define PWR_CSR_OFFSET           0x04

+#define PWR_CR_OFFSET_BB         (PWR_OFFSET + PWR_CR_OFFSET)

+#define PWR_CSR_OFFSET_BB        (PWR_OFFSET + PWR_CSR_OFFSET)

+/**

+  * @}

+  */

+

+/** @defgroup PWR_CR_register_alias PWR CR Register alias address

+  * @{

+  */

+/* --- CR Register ---*/

+/* Alias word address of LPSDSR bit */

+#define LPSDSR_BIT_NUMBER        POSITION_VAL(PWR_CR_LPSDSR)

+#define CR_LPSDSR_BB             ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32) + (LPSDSR_BIT_NUMBER * 4)))

+

+/* Alias word address of DBP bit */

+#define DBP_BIT_NUMBER           POSITION_VAL(PWR_CR_DBP)

+#define CR_DBP_BB                ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32) + (DBP_BIT_NUMBER * 4)))

+

+/* Alias word address of LPRUN bit */

+#define LPRUN_BIT_NUMBER         POSITION_VAL(PWR_CR_LPRUN)

+#define CR_LPRUN_BB              ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32) + (LPRUN_BIT_NUMBER * 4)))

+

+/* Alias word address of PVDE bit */

+#define PVDE_BIT_NUMBER          POSITION_VAL(PWR_CR_PVDE)

+#define CR_PVDE_BB               ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32) + (PVDE_BIT_NUMBER * 4)))

+

+/* Alias word address of FWU bit */

+#define FWU_BIT_NUMBER           POSITION_VAL(PWR_CR_FWU)

+#define CR_FWU_BB                ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32) + (FWU_BIT_NUMBER * 4)))

+

+/* Alias word address of ULP bit */

+#define ULP_BIT_NUMBER           POSITION_VAL(PWR_CR_ULP)

+#define CR_ULP_BB                ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32) + (ULP_BIT_NUMBER * 4)))

+/**

+  * @}

+  */

+

+/** @defgroup PWR_CSR_register_alias PWR CSR Register alias address

+  * @{

+  */

+

+/* --- CSR Register ---*/

+/* Alias word address of EWUP1, EWUP2 and EWUP3 bits */

+#define CSR_EWUP_BB(VAL)         ((uint32_t)(PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32) + (POSITION_VAL(VAL) * 4)))

+/**

+  * @}

+  */

+

+/** @defgroup PWR_PVD_detection_level PWR PVD detection level

+  * @{

+  */

+#define PWR_PVDLEVEL_0                  PWR_CR_PLS_LEV0

+#define PWR_PVDLEVEL_1                  PWR_CR_PLS_LEV1

+#define PWR_PVDLEVEL_2                  PWR_CR_PLS_LEV2

+#define PWR_PVDLEVEL_3                  PWR_CR_PLS_LEV3

+#define PWR_PVDLEVEL_4                  PWR_CR_PLS_LEV4

+#define PWR_PVDLEVEL_5                  PWR_CR_PLS_LEV5

+#define PWR_PVDLEVEL_6                  PWR_CR_PLS_LEV6

+#define PWR_PVDLEVEL_7                  PWR_CR_PLS_LEV7  /* External input analog voltage

+                                                            (Compare internally to VREFINT) */

+

+/**

+  * @}

+  */

+

+/** @defgroup PWR_PVD_Mode PWR PVD Mode

+  * @{

+  */

+#define PWR_PVD_MODE_NORMAL                 (0x00000000U)   /*!< basic mode is used */

+#define PWR_PVD_MODE_IT_RISING              (0x00010001U)   /*!< External Interrupt Mode with Rising edge trigger detection */

+#define PWR_PVD_MODE_IT_FALLING             (0x00010002U)   /*!< External Interrupt Mode with Falling edge trigger detection */

+#define PWR_PVD_MODE_IT_RISING_FALLING      (0x00010003U)   /*!< External Interrupt Mode with Rising/Falling edge trigger detection */

+#define PWR_PVD_MODE_EVENT_RISING           (0x00020001U)   /*!< Event Mode with Rising edge trigger detection */

+#define PWR_PVD_MODE_EVENT_FALLING          (0x00020002U)   /*!< Event Mode with Falling edge trigger detection */

+#define PWR_PVD_MODE_EVENT_RISING_FALLING   (0x00020003U)   /*!< Event Mode with Rising/Falling edge trigger detection */

+

+ /**

+ * @}

+  */

+

+/** @defgroup PWR_Regulator_state_in_SLEEP_STOP_mode PWR Regulator state in SLEEP/STOP mode

+  * @{

+  */

+#define PWR_MAINREGULATOR_ON           (0x00000000U)

+#define PWR_LOWPOWERREGULATOR_ON       PWR_CR_LPSDSR

+

+/**

+  * @}

+  */

+

+/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry

+  * @{

+  */

+#define PWR_SLEEPENTRY_WFI             ((uint8_t)0x01)

+#define PWR_SLEEPENTRY_WFE             ((uint8_t)0x02)

+

+/**

+  * @}

+  */

+

+/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry

+  * @{

+  */

+#define PWR_STOPENTRY_WFI              ((uint8_t)0x01)

+#define PWR_STOPENTRY_WFE              ((uint8_t)0x02)

+

+/**

+  * @}

+  */

+

+/** @defgroup PWR_Regulator_Voltage_Scale PWR Regulator Voltage Scale

+  * @{

+  */

+

+#define PWR_REGULATOR_VOLTAGE_SCALE1       PWR_CR_VOS_0

+#define PWR_REGULATOR_VOLTAGE_SCALE2       PWR_CR_VOS_1

+#define PWR_REGULATOR_VOLTAGE_SCALE3       PWR_CR_VOS

+

+

+/**

+  * @}

+  */

+

+/** @defgroup PWR_Flag PWR Flag

+  * @{

+  */

+#define PWR_FLAG_WU                    PWR_CSR_WUF

+#define PWR_FLAG_SB                    PWR_CSR_SBF

+#define PWR_FLAG_PVDO                  PWR_CSR_PVDO

+#define PWR_FLAG_VREFINTRDY            PWR_CSR_VREFINTRDYF

+#define PWR_FLAG_VOS                   PWR_CSR_VOSF

+#define PWR_FLAG_REGLP                 PWR_CSR_REGLPF

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Exported macro ------------------------------------------------------------*/

+/** @defgroup PWR_Exported_Macros PWR Exported Macros

+  * @{

+  */

+

+/** @brief  macros configure the main internal regulator output voltage.

+  * @param  __REGULATOR__ specifies the regulator output voltage to achieve

+  *         a tradeoff between performance and power consumption when the device does

+  *         not operate at the maximum frequency (refer to the datasheets for more details).

+  *          This parameter can be one of the following values:

+  *            @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode,

+  *                                                System frequency up to 32 MHz.

+  *            @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode,

+  *                                                System frequency up to 16 MHz.

+  *            @arg PWR_REGULATOR_VOLTAGE_SCALE3: Regulator voltage output Scale 3 mode,

+  *                                                System frequency up to 4.2 MHz

+  * @retval None

+  */

+#define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) (MODIFY_REG(PWR->CR, PWR_CR_VOS, (__REGULATOR__)))

+

+/** @brief  Check PWR flag is set or not.

+  * @param  __FLAG__ specifies the flag to check.

+  *           This parameter can be one of the following values:

+  *            @arg PWR_FLAG_WU: Wake Up flag. This flag indicates that a wakeup event

+  *                  was received from the WKUP pin or from the RTC alarm (Alarm B),

+  *                  RTC Tamper event, RTC TimeStamp event or RTC Wakeup.

+  *                  An additional wakeup event is detected if the WKUP pin is enabled

+  *                  (by setting the EWUP bit) when the WKUP pin level is already high.

+  *            @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was

+  *                  resumed from StandBy mode.

+  *            @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled

+  *                  by the HAL_PWR_EnablePVD() function. The PVD is stopped by Standby mode

+  *                  For this reason, this bit is equal to 0 after Standby or reset

+  *                  until the PVDE bit is set.

+  *            @arg PWR_FLAG_VREFINTRDY: Internal voltage reference (VREFINT) ready flag.

+  *                 This bit indicates the state of the internal voltage reference, VREFINT.

+  *            @arg PWR_FLAG_VOS: Voltage Scaling select flag. A delay is required for

+  *                 the internal regulator to be ready after the voltage range is changed.

+  *                 The VOSF bit indicates that the regulator has reached the voltage level

+  *                 defined with bits VOS of PWR_CR register.

+  *            @arg PWR_FLAG_REGLP: Regulator LP flag. When the MCU exits from Low power run

+  *                 mode, this bit stays at 1 until the regulator is ready in main mode.

+  *                 A polling on this bit is recommended to wait for the regulator main mode.

+  *                 This bit is reset by hardware when the regulator is ready.

+  * @retval The new state of __FLAG__ (TRUE or FALSE).

+  */

+#define __HAL_PWR_GET_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__))

+

+/** @brief  Clear the PWR's pending flags.

+  * @param  __FLAG__ specifies the flag to clear.

+  *          This parameter can be one of the following values:

+  *            @arg PWR_FLAG_WU: Wake Up flag

+  *            @arg PWR_FLAG_SB: StandBy flag

+  */

+#define __HAL_PWR_CLEAR_FLAG(__FLAG__) SET_BIT(PWR->CR, ((__FLAG__) << 2))

+

+/**

+  * @brief Enable interrupt on PVD Exti Line 16.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_ENABLE_IT()      SET_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD)

+

+/**

+  * @brief Disable interrupt on PVD Exti Line 16.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_DISABLE_IT()     CLEAR_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD)

+

+/**

+  * @brief Enable event on PVD Exti Line 16.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_ENABLE_EVENT()   SET_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD)

+

+/**

+  * @brief Disable event on PVD Exti Line 16.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT()  CLEAR_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD)

+

+

+/**

+  * @brief  PVD EXTI line configuration: set falling edge trigger.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE()  SET_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD)

+

+

+/**

+  * @brief Disable the PVD Extended Interrupt Falling Trigger.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE()  CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD)

+

+

+/**

+  * @brief  PVD EXTI line configuration: set rising edge trigger.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE()   SET_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD)

+

+/**

+  * @brief Disable the PVD Extended Interrupt Rising Trigger.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE()  CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD)

+

+/**

+  * @brief  PVD EXTI line configuration: set rising & falling edge trigger.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE()  \

+  do {                                                   \

+    __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();             \

+    __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();            \

+  } while(0)

+

+/**

+  * @brief Disable the PVD Extended Interrupt Rising & Falling Trigger.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE()  \

+  do {                                                    \

+    __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();             \

+    __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();            \

+  } while(0)

+

+

+

+/**

+  * @brief Check whether the specified PVD EXTI interrupt flag is set or not.

+  * @retval EXTI PVD Line Status.

+  */

+#define __HAL_PWR_PVD_EXTI_GET_FLAG()       (EXTI->PR & (PWR_EXTI_LINE_PVD))

+

+/**

+  * @brief Clear the PVD EXTI flag.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG()     (EXTI->PR = (PWR_EXTI_LINE_PVD))

+

+/**

+  * @brief Generate a Software interrupt on selected EXTI line.

+  * @retval None.

+  */

+#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT()  SET_BIT(EXTI->SWIER, PWR_EXTI_LINE_PVD)

+

+/**

+  * @}

+  */

+

+/* Private macro -------------------------------------------------------------*/

+/** @defgroup PWR_Private_Macros PWR Private Macros

+  * @{

+  */

+

+#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1)|| \

+                                 ((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3)|| \

+                                 ((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5)|| \

+                                 ((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7))

+

+

+#define IS_PWR_PVD_MODE(MODE) (((MODE) == PWR_PVD_MODE_IT_RISING)|| ((MODE) == PWR_PVD_MODE_IT_FALLING) || \

+                              ((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) || \

+                              ((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || \

+                              ((MODE) == PWR_PVD_MODE_NORMAL))

+

+#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || \

+                                     ((REGULATOR) == PWR_LOWPOWERREGULATOR_ON))

+

+

+#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE))

+

+#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE) )

+

+#define IS_PWR_VOLTAGE_SCALING_RANGE(RANGE) (((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \

+                                             ((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE2) || \

+                                             ((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE3))

+

+

+/**

+  * @}

+  */

+

+

+

+/* Include PWR HAL Extension module */

+#include "stm32l1xx_hal_pwr_ex.h"

+

+/* Exported functions --------------------------------------------------------*/

+

+/** @addtogroup PWR_Exported_Functions PWR Exported Functions

+  * @{

+  */

+

+/** @addtogroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions

+  * @{

+  */

+

+/* Initialization and de-initialization functions *******************************/

+void HAL_PWR_DeInit(void);

+void HAL_PWR_EnableBkUpAccess(void);

+void HAL_PWR_DisableBkUpAccess(void);

+

+/**

+  * @}

+  */

+

+/** @addtogroup PWR_Exported_Functions_Group2 Peripheral Control functions

+  * @{

+  */

+

+/* Peripheral Control functions  ************************************************/

+void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD);

+void HAL_PWR_EnablePVD(void);

+void HAL_PWR_DisablePVD(void);

+

+/* WakeUp pins configuration functions ****************************************/

+void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx);

+void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx);

+

+/* Low Power modes configuration functions ************************************/

+void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry);

+void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry);

+void HAL_PWR_EnterSTANDBYMode(void);

+

+void HAL_PWR_EnableSleepOnExit(void);

+void HAL_PWR_DisableSleepOnExit(void);

+void HAL_PWR_EnableSEVOnPend(void);

+void HAL_PWR_DisableSEVOnPend(void);

+

+

+

+void HAL_PWR_PVD_IRQHandler(void);

+void HAL_PWR_PVDCallback(void);

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+

+#endif /* __STM32L1xx_HAL_PWR_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr_ex.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr_ex.h
new file mode 100644
index 0000000..90b2c4d
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_pwr_ex.h
@@ -0,0 +1,118 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_pwr_ex.h

+  * @author  MCD Application Team

+  * @brief   Header file of PWR HAL Extension module.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_PWR_EX_H

+#define __STM32L1xx_HAL_PWR_EX_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup PWREx

+  * @{

+  */

+

+

+/* Exported types ------------------------------------------------------------*/

+/* Exported constants --------------------------------------------------------*/

+

+/** @defgroup PWREx_Exported_Constants PWREx Exported Constants

+ *  @{

+ */

+

+

+/** @defgroup PWREx_WakeUp_Pins PWREx Wakeup Pins

+  * @{

+  */

+

+#if defined (STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || defined (STM32L151xE) || defined (STM32L151xDX) || defined (STM32L152xE) || defined (STM32L152xDX) || defined (STM32L162xE) || defined (STM32L162xDX) || defined (STM32L151xB) || defined (STM32L151xBA) || defined (STM32L151xC) || defined (STM32L152xB) || defined (STM32L152xBA) || defined (STM32L152xC) || defined (STM32L162xC)

+

+#define PWR_WAKEUP_PIN1                 PWR_CSR_EWUP1

+#define PWR_WAKEUP_PIN2                 PWR_CSR_EWUP2

+#define PWR_WAKEUP_PIN3                 PWR_CSR_EWUP3

+#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \

+                                ((PIN) == PWR_WAKEUP_PIN2) || \

+                                ((PIN) == PWR_WAKEUP_PIN3))

+#else

+#define PWR_WAKEUP_PIN1                 PWR_CSR_EWUP1

+#define PWR_WAKEUP_PIN2                 PWR_CSR_EWUP2

+#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \

+                                ((PIN) == PWR_WAKEUP_PIN2))

+#endif

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Exported macro ------------------------------------------------------------*/

+/* Exported functions --------------------------------------------------------*/

+

+/** @defgroup PWREx_Exported_Functions PWREx Exported Functions

+ *  @{

+ */

+

+/** @addtogroup PWREx_Exported_Functions_Group1

+  * @{

+  */

+

+/* Peripheral Control methods  ************************************************/

+uint32_t HAL_PWREx_GetVoltageRange(void);

+void HAL_PWREx_EnableFastWakeUp(void);

+void HAL_PWREx_DisableFastWakeUp(void);

+void HAL_PWREx_EnableUltraLowPower(void);

+void HAL_PWREx_DisableUltraLowPower(void);

+void HAL_PWREx_EnableLowPowerRunMode(void);

+HAL_StatusTypeDef HAL_PWREx_DisableLowPowerRunMode(void);

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+

+#endif /* __STM32L1xx_HAL_PWR_EX_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc.h
new file mode 100644
index 0000000..303749e
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc.h
@@ -0,0 +1,1898 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_rcc.h

+  * @author  MCD Application Team

+  * @brief   Header file of RCC HAL module.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright(c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_RCC_H

+#define __STM32L1xx_HAL_RCC_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup RCC

+  * @{

+  */

+

+/** @addtogroup RCC_Private_Constants

+  * @{

+  */

+

+/** @defgroup RCC_Timeout RCC Timeout

+  * @{

+  */

+

+/* Disable Backup domain write protection state change timeout */

+#define RCC_DBP_TIMEOUT_VALUE      (100U)       /* 100 ms */

+/* LSE state change timeout */

+#define RCC_LSE_TIMEOUT_VALUE      LSE_STARTUP_TIMEOUT

+#define CLOCKSWITCH_TIMEOUT_VALUE  (5000U)  /* 5 s    */

+#define HSE_TIMEOUT_VALUE          HSE_STARTUP_TIMEOUT

+#define MSI_TIMEOUT_VALUE          (2U)      /* 2 ms (minimum Tick + 1U) */

+#define HSI_TIMEOUT_VALUE          (2U)      /* 2 ms (minimum Tick + 1U) */

+#define LSI_TIMEOUT_VALUE          (2U)      /* 2 ms (minimum Tick + 1U) */

+#define PLL_TIMEOUT_VALUE          (2U)      /* 2 ms (minimum Tick + 1U) */

+/**

+  * @}

+  */

+

+/** @defgroup RCC_Register_Offset Register offsets

+  * @{

+  */

+#define RCC_OFFSET                (RCC_BASE - PERIPH_BASE)

+#define RCC_CR_OFFSET             0x00

+#define RCC_CFGR_OFFSET           0x08

+#define RCC_CIR_OFFSET            0x0C

+#define RCC_CSR_OFFSET            0x34

+/**

+  * @}

+  */

+

+/** @defgroup RCC_BitAddress_AliasRegion BitAddress AliasRegion

+  * @brief RCC registers bit address in the alias region

+  * @{

+  */

+#define RCC_CR_OFFSET_BB          (RCC_OFFSET + RCC_CR_OFFSET)

+#define RCC_CFGR_OFFSET_BB        (RCC_OFFSET + RCC_CFGR_OFFSET)

+#define RCC_CIR_OFFSET_BB         (RCC_OFFSET + RCC_CIR_OFFSET)

+#define RCC_CSR_OFFSET_BB         (RCC_OFFSET + RCC_CSR_OFFSET)

+

+/* --- CR Register ---*/

+/* Alias word address of HSION bit */

+#define RCC_HSION_BIT_NUMBER      RCC_CR_HSION_Pos

+#define RCC_CR_HSION_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_HSION_BIT_NUMBER * 4U)))

+/* Alias word address of MSION bit */

+#define RCC_MSION_BIT_NUMBER      RCC_CR_MSION_Pos

+#define RCC_CR_MSION_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_MSION_BIT_NUMBER * 4U)))

+/* Alias word address of HSEON bit */

+#define RCC_HSEON_BIT_NUMBER      RCC_CR_HSEON_Pos

+#define RCC_CR_HSEON_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_HSEON_BIT_NUMBER * 4U)))

+/* Alias word address of CSSON bit */

+#define RCC_CSSON_BIT_NUMBER      RCC_CR_CSSON_Pos

+#define RCC_CR_CSSON_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_CSSON_BIT_NUMBER * 4U)))

+/* Alias word address of PLLON bit */

+#define RCC_PLLON_BIT_NUMBER      RCC_CR_PLLON_Pos

+#define RCC_CR_PLLON_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_PLLON_BIT_NUMBER * 4U)))

+

+/* --- CSR Register ---*/

+/* Alias word address of LSION bit */

+#define RCC_LSION_BIT_NUMBER      RCC_CSR_LSION_Pos

+#define RCC_CSR_LSION_BB          ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_LSION_BIT_NUMBER * 4U)))

+

+/* Alias word address of RMVF bit */

+#define RCC_RMVF_BIT_NUMBER       RCC_CSR_RMVF_Pos

+#define RCC_CSR_RMVF_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_RMVF_BIT_NUMBER * 4U)))

+

+/* Alias word address of LSEON bit */

+#define RCC_LSEON_BIT_NUMBER      RCC_CSR_LSEON_Pos

+#define RCC_CSR_LSEON_BB          ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_LSEON_BIT_NUMBER * 4U)))

+

+/* Alias word address of LSEON bit */

+#define RCC_LSEBYP_BIT_NUMBER     RCC_CSR_LSEBYP_Pos

+#define RCC_CSR_LSEBYP_BB         ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_LSEBYP_BIT_NUMBER * 4U)))

+

+/* Alias word address of RTCEN bit */

+#define RCC_RTCEN_BIT_NUMBER      RCC_CSR_RTCEN_Pos

+#define RCC_CSR_RTCEN_BB          ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_RTCEN_BIT_NUMBER * 4U)))

+

+/* Alias word address of RTCRST bit */

+#define RCC_RTCRST_BIT_NUMBER     RCC_CSR_RTCRST_Pos

+#define RCC_CSR_RTCRST_BB         ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_RTCRST_BIT_NUMBER * 4U)))

+

+/**

+  * @}

+  */

+

+/* CR register byte 2 (Bits[23:16]) base address */

+#define RCC_CR_BYTE2_ADDRESS          ((uint32_t)(RCC_BASE + RCC_CR_OFFSET + 0x02U))

+

+/* CIR register byte 1 (Bits[15:8]) base address */

+#define RCC_CIR_BYTE1_ADDRESS     ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x01U))

+

+/* CIR register byte 2 (Bits[23:16]) base address */

+#define RCC_CIR_BYTE2_ADDRESS     ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x02U))

+

+/* Defines used for Flags */

+#define CR_REG_INDEX                     ((uint8_t)1U)

+#define CSR_REG_INDEX                    ((uint8_t)2U)

+

+#define RCC_FLAG_MASK                    ((uint8_t)0x1FU)

+

+/**

+  * @}

+  */

+

+/** @addtogroup RCC_Private_Macros

+  * @{

+  */

+#define IS_RCC_PLLSOURCE(__SOURCE__) (((__SOURCE__) == RCC_PLLSOURCE_HSI) || \

+                                      ((__SOURCE__) == RCC_PLLSOURCE_HSE))

+#define IS_RCC_OSCILLATORTYPE(__OSCILLATOR__) (((__OSCILLATOR__) == RCC_OSCILLATORTYPE_NONE)                           || \

+                                               (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) || \

+                                               (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) || \

+                                               (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) || \

+                                               (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) || \

+                                               (((__OSCILLATOR__) & RCC_OSCILLATORTYPE_MSI) == RCC_OSCILLATORTYPE_MSI))

+#define IS_RCC_HSE(__HSE__) (((__HSE__) == RCC_HSE_OFF) || ((__HSE__) == RCC_HSE_ON) || \

+                             ((__HSE__) == RCC_HSE_BYPASS))

+#define IS_RCC_LSE(__LSE__) (((__LSE__) == RCC_LSE_OFF) || ((__LSE__) == RCC_LSE_ON) || \

+                             ((__LSE__) == RCC_LSE_BYPASS))

+#define IS_RCC_HSI(__HSI__) (((__HSI__) == RCC_HSI_OFF) || ((__HSI__) == RCC_HSI_ON))

+#define IS_RCC_CALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= 0x1FU)

+#define IS_RCC_MSICALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= 0xFFU)

+#define IS_RCC_MSI_CLOCK_RANGE(__RANGE__)  (((__RANGE__) == RCC_MSIRANGE_0) || \

+                                            ((__RANGE__) == RCC_MSIRANGE_1) || \

+                                            ((__RANGE__) == RCC_MSIRANGE_2) || \

+                                            ((__RANGE__) == RCC_MSIRANGE_3) || \

+                                            ((__RANGE__) == RCC_MSIRANGE_4) || \

+                                            ((__RANGE__) == RCC_MSIRANGE_5) || \

+                                            ((__RANGE__) == RCC_MSIRANGE_6))

+#define IS_RCC_LSI(__LSI__) (((__LSI__) == RCC_LSI_OFF) || ((__LSI__) == RCC_LSI_ON))

+#define IS_RCC_MSI(__MSI__) (((__MSI__) == RCC_MSI_OFF) || ((__MSI__) == RCC_MSI_ON))

+

+#define IS_RCC_PLL(__PLL__) (((__PLL__) == RCC_PLL_NONE) || ((__PLL__) == RCC_PLL_OFF) || \

+                             ((__PLL__) == RCC_PLL_ON))

+#define IS_RCC_PLL_DIV(__DIV__) (((__DIV__) == RCC_PLL_DIV2) || \

+                                 ((__DIV__) == RCC_PLL_DIV3) || ((__DIV__) == RCC_PLL_DIV4))

+

+#define IS_RCC_PLL_MUL(__MUL__) (((__MUL__) == RCC_PLL_MUL3)  || ((__MUL__) == RCC_PLL_MUL4)  || \

+                                 ((__MUL__) == RCC_PLL_MUL6)  || ((__MUL__) == RCC_PLL_MUL8)  || \

+                                 ((__MUL__) == RCC_PLL_MUL12) || ((__MUL__) == RCC_PLL_MUL16) || \

+                                 ((__MUL__) == RCC_PLL_MUL24) || ((__MUL__) == RCC_PLL_MUL32) || \

+                                 ((__MUL__) == RCC_PLL_MUL48))

+#define IS_RCC_CLOCKTYPE(CLK) ((((CLK) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) || \

+                               (((CLK) & RCC_CLOCKTYPE_HCLK)   == RCC_CLOCKTYPE_HCLK)   || \

+                               (((CLK) & RCC_CLOCKTYPE_PCLK1)  == RCC_CLOCKTYPE_PCLK1)  || \

+                               (((CLK) & RCC_CLOCKTYPE_PCLK2)  == RCC_CLOCKTYPE_PCLK2))

+#define IS_RCC_SYSCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_SYSCLKSOURCE_MSI) || \

+                                         ((__SOURCE__) == RCC_SYSCLKSOURCE_HSI) || \

+                                         ((__SOURCE__) == RCC_SYSCLKSOURCE_HSE) || \

+                                         ((__SOURCE__) == RCC_SYSCLKSOURCE_PLLCLK))

+#define IS_RCC_SYSCLKSOURCE_STATUS(__SOURCE__) (((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_MSI) || \

+                                                ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSI) || \

+                                                ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSE) || \

+                                                ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_PLLCLK))

+#define IS_RCC_HCLK(__HCLK__) (((__HCLK__) == RCC_SYSCLK_DIV1) || ((__HCLK__) == RCC_SYSCLK_DIV2) || \

+                               ((__HCLK__) == RCC_SYSCLK_DIV4) || ((__HCLK__) == RCC_SYSCLK_DIV8) || \

+                               ((__HCLK__) == RCC_SYSCLK_DIV16) || ((__HCLK__) == RCC_SYSCLK_DIV64) || \

+                               ((__HCLK__) == RCC_SYSCLK_DIV128) || ((__HCLK__) == RCC_SYSCLK_DIV256) || \

+                               ((__HCLK__) == RCC_SYSCLK_DIV512))

+#define IS_RCC_PCLK(__PCLK__) (((__PCLK__) == RCC_HCLK_DIV1) || ((__PCLK__) == RCC_HCLK_DIV2) || \

+                               ((__PCLK__) == RCC_HCLK_DIV4) || ((__PCLK__) == RCC_HCLK_DIV8) || \

+                               ((__PCLK__) == RCC_HCLK_DIV16))

+#define IS_RCC_MCO(__MCO__)  ((__MCO__) == RCC_MCO)

+#define IS_RCC_MCODIV(__DIV__) (((__DIV__) == RCC_MCODIV_1) || ((__DIV__) == RCC_MCODIV_2) || \

+                                ((__DIV__) == RCC_MCODIV_4) || ((__DIV__) == RCC_MCODIV_8) || \

+                                ((__DIV__) == RCC_MCODIV_16))

+#define IS_RCC_MCO1SOURCE(__SOURCE__) (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_MSI) \

+                                    || ((__SOURCE__) == RCC_MCO1SOURCE_HSI)    || ((__SOURCE__) == RCC_MCO1SOURCE_LSE) \

+                                    || ((__SOURCE__) == RCC_MCO1SOURCE_LSI)    || ((__SOURCE__) == RCC_MCO1SOURCE_HSE) \

+                                    || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK))

+#define IS_RCC_RTCCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_RTCCLKSOURCE_NO_CLK)   || \

+                                         ((__SOURCE__) == RCC_RTCCLKSOURCE_LSE)      || \

+                                         ((__SOURCE__) == RCC_RTCCLKSOURCE_LSI)      || \

+                                         ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV2) || \

+                                         ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV4) || \

+                                         ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV8) || \

+                                         ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV16))

+

+/**

+  * @}

+  */

+

+/* Exported types ------------------------------------------------------------*/

+

+/** @defgroup RCC_Exported_Types RCC Exported Types

+  * @{

+  */

+

+/**

+  * @brief  RCC PLL configuration structure definition

+  */

+typedef struct

+{

+  uint32_t PLLState;      /*!< PLLState: The new state of the PLL.

+                              This parameter can be a value of @ref RCC_PLL_Config */

+

+  uint32_t PLLSource;     /*!< PLLSource: PLL entry clock source.

+                              This parameter must be a value of @ref RCC_PLL_Clock_Source */

+

+  uint32_t PLLMUL;        /*!< PLLMUL: Multiplication factor for PLL VCO input clock

+                              This parameter must be a value of @ref RCC_PLL_Multiplication_Factor*/

+

+  uint32_t PLLDIV;        /*!< PLLDIV: Division factor for PLL VCO input clock

+                              This parameter must be a value of @ref RCC_PLL_Division_Factor*/

+} RCC_PLLInitTypeDef;

+

+/**

+  * @brief  RCC Internal/External Oscillator (HSE, HSI, LSE and LSI) configuration structure definition

+  */

+typedef struct

+{

+  uint32_t OscillatorType;        /*!< The oscillators to be configured.

+                                       This parameter can be a value of @ref RCC_Oscillator_Type */

+

+  uint32_t HSEState;              /*!< The new state of the HSE.

+                                       This parameter can be a value of @ref RCC_HSE_Config */

+

+  uint32_t LSEState;              /*!< The new state of the LSE.

+                                       This parameter can be a value of @ref RCC_LSE_Config */

+

+  uint32_t HSIState;              /*!< The new state of the HSI.

+                                       This parameter can be a value of @ref RCC_HSI_Config */

+

+  uint32_t HSICalibrationValue;   /*!< The HSI calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT).

+                                       This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1FU */

+

+  uint32_t LSIState;              /*!< The new state of the LSI.

+                                       This parameter can be a value of @ref RCC_LSI_Config */

+

+  uint32_t MSIState;              /*!< The new state of the MSI.

+                                       This parameter can be a value of @ref RCC_MSI_Config */

+

+  uint32_t MSICalibrationValue;   /*!< The MSI calibration trimming value. (default is RCC_MSICALIBRATION_DEFAULT).

+                                       This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFU */

+

+  uint32_t MSIClockRange;         /*!< The MSI  frequency  range.

+                                        This parameter can be a value of @ref RCC_MSI_Clock_Range */

+

+  RCC_PLLInitTypeDef PLL;         /*!< PLL structure parameters */

+

+} RCC_OscInitTypeDef;

+

+/**

+  * @brief  RCC System, AHB and APB busses clock configuration structure definition

+  */

+typedef struct

+{

+  uint32_t ClockType;             /*!< The clock to be configured.

+                                       This parameter can be a value of @ref RCC_System_Clock_Type */

+

+  uint32_t SYSCLKSource;          /*!< The clock source (SYSCLKS) used as system clock.

+                                       This parameter can be a value of @ref RCC_System_Clock_Source */

+

+  uint32_t AHBCLKDivider;         /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK).

+                                       This parameter can be a value of @ref RCC_AHB_Clock_Source */

+

+  uint32_t APB1CLKDivider;        /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK).

+                                       This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */

+

+  uint32_t APB2CLKDivider;        /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK).

+                                       This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */

+} RCC_ClkInitTypeDef;

+

+/**

+  * @}

+  */

+

+/* Exported constants --------------------------------------------------------*/

+/** @defgroup RCC_Exported_Constants RCC Exported Constants

+  * @{

+  */

+

+/** @defgroup RCC_PLL_Clock_Source PLL Clock Source

+  * @{

+  */

+

+#define RCC_PLLSOURCE_HSI           RCC_CFGR_PLLSRC_HSI        /*!< HSI clock selected as PLL entry clock source */

+#define RCC_PLLSOURCE_HSE           RCC_CFGR_PLLSRC_HSE        /*!< HSE clock selected as PLL entry clock source */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_Oscillator_Type Oscillator Type

+  * @{

+  */

+#define RCC_OSCILLATORTYPE_NONE            (0x00000000U)

+#define RCC_OSCILLATORTYPE_HSE             (0x00000001U)

+#define RCC_OSCILLATORTYPE_HSI             (0x00000002U)

+#define RCC_OSCILLATORTYPE_LSE             (0x00000004U)

+#define RCC_OSCILLATORTYPE_LSI             (0x00000008U)

+#define RCC_OSCILLATORTYPE_MSI             (0x00000010U)

+/**

+  * @}

+  */

+

+/** @defgroup RCC_HSE_Config HSE Config

+  * @{

+  */

+#define RCC_HSE_OFF                      (0x00000000U)                     /*!< HSE clock deactivation */

+#define RCC_HSE_ON                       (0x00000001U)                     /*!< HSE clock activation */

+#define RCC_HSE_BYPASS                   (0x00000005U)                     /*!< External clock source for HSE clock */

+/**

+  * @}

+  */

+

+/** @defgroup RCC_LSE_Config LSE Config

+  * @{

+  */

+#define RCC_LSE_OFF                      (0x00000000U)                       /*!< LSE clock deactivation */

+#define RCC_LSE_ON                       (0x00000001U)                       /*!< LSE clock activation */

+#define RCC_LSE_BYPASS                   (0x00000005U)                       /*!< External clock source for LSE clock */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_HSI_Config HSI Config

+  * @{

+  */

+#define RCC_HSI_OFF                      (0x00000000U)           /*!< HSI clock deactivation */

+#define RCC_HSI_ON                       RCC_CR_HSION                     /*!< HSI clock activation */

+

+#define RCC_HSICALIBRATION_DEFAULT       (0x10U)         /* Default HSI calibration trimming value */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_MSI_Clock_Range MSI Clock Range

+  * @{

+  */

+

+#define RCC_MSIRANGE_0                   RCC_ICSCR_MSIRANGE_0 /*!< MSI = 65.536 KHz  */

+#define RCC_MSIRANGE_1                   RCC_ICSCR_MSIRANGE_1 /*!< MSI = 131.072 KHz */

+#define RCC_MSIRANGE_2                   RCC_ICSCR_MSIRANGE_2 /*!< MSI = 262.144 KHz */

+#define RCC_MSIRANGE_3                   RCC_ICSCR_MSIRANGE_3 /*!< MSI = 524.288 KHz */

+#define RCC_MSIRANGE_4                   RCC_ICSCR_MSIRANGE_4 /*!< MSI = 1.048 MHz   */

+#define RCC_MSIRANGE_5                   RCC_ICSCR_MSIRANGE_5 /*!< MSI = 2.097 MHz   */

+#define RCC_MSIRANGE_6                   RCC_ICSCR_MSIRANGE_6 /*!< MSI = 4.194 MHz   */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_LSI_Config LSI Config

+  * @{

+  */

+#define RCC_LSI_OFF                      (0x00000000U)   /*!< LSI clock deactivation */

+#define RCC_LSI_ON                       RCC_CSR_LSION            /*!< LSI clock activation */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_MSI_Config MSI Config

+  * @{

+  */

+#define RCC_MSI_OFF                      (0x00000000U)

+#define RCC_MSI_ON                       (0x00000001U)

+

+#define RCC_MSICALIBRATION_DEFAULT       (0x00000000U)   /* Default MSI calibration trimming value */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_PLL_Config PLL Config

+  * @{

+  */

+#define RCC_PLL_NONE                      (0x00000000U)  /*!< PLL is not configured */

+#define RCC_PLL_OFF                       (0x00000001U)  /*!< PLL deactivation */

+#define RCC_PLL_ON                        (0x00000002U)  /*!< PLL activation */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_System_Clock_Type System Clock Type

+  * @{

+  */

+#define RCC_CLOCKTYPE_SYSCLK             (0x00000001U) /*!< SYSCLK to configure */

+#define RCC_CLOCKTYPE_HCLK               (0x00000002U) /*!< HCLK to configure */

+#define RCC_CLOCKTYPE_PCLK1              (0x00000004U) /*!< PCLK1 to configure */

+#define RCC_CLOCKTYPE_PCLK2              (0x00000008U) /*!< PCLK2 to configure */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_System_Clock_Source System Clock Source

+  * @{

+  */

+#define RCC_SYSCLKSOURCE_MSI             RCC_CFGR_SW_MSI /*!< MSI selected as system clock */

+#define RCC_SYSCLKSOURCE_HSI             RCC_CFGR_SW_HSI /*!< HSI selected as system clock */

+#define RCC_SYSCLKSOURCE_HSE             RCC_CFGR_SW_HSE /*!< HSE selected as system clock */

+#define RCC_SYSCLKSOURCE_PLLCLK          RCC_CFGR_SW_PLL /*!< PLL selected as system clock */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_System_Clock_Source_Status System Clock Source Status

+  * @{

+  */

+#define RCC_SYSCLKSOURCE_STATUS_MSI      RCC_CFGR_SWS_MSI            /*!< MSI used as system clock */

+#define RCC_SYSCLKSOURCE_STATUS_HSI      RCC_CFGR_SWS_HSI            /*!< HSI used as system clock */

+#define RCC_SYSCLKSOURCE_STATUS_HSE      RCC_CFGR_SWS_HSE            /*!< HSE used as system clock */

+#define RCC_SYSCLKSOURCE_STATUS_PLLCLK   RCC_CFGR_SWS_PLL            /*!< PLL used as system clock */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_AHB_Clock_Source AHB Clock Source

+  * @{

+  */

+#define RCC_SYSCLK_DIV1                  RCC_CFGR_HPRE_DIV1   /*!< SYSCLK not divided */

+#define RCC_SYSCLK_DIV2                  RCC_CFGR_HPRE_DIV2   /*!< SYSCLK divided by 2 */

+#define RCC_SYSCLK_DIV4                  RCC_CFGR_HPRE_DIV4   /*!< SYSCLK divided by 4 */

+#define RCC_SYSCLK_DIV8                  RCC_CFGR_HPRE_DIV8   /*!< SYSCLK divided by 8 */

+#define RCC_SYSCLK_DIV16                 RCC_CFGR_HPRE_DIV16  /*!< SYSCLK divided by 16 */

+#define RCC_SYSCLK_DIV64                 RCC_CFGR_HPRE_DIV64  /*!< SYSCLK divided by 64 */

+#define RCC_SYSCLK_DIV128                RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */

+#define RCC_SYSCLK_DIV256                RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */

+#define RCC_SYSCLK_DIV512                RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_APB1_APB2_Clock_Source APB1 APB2 Clock Source

+  * @{

+  */

+#define RCC_HCLK_DIV1                    RCC_CFGR_PPRE1_DIV1  /*!< HCLK not divided */

+#define RCC_HCLK_DIV2                    RCC_CFGR_PPRE1_DIV2  /*!< HCLK divided by 2 */

+#define RCC_HCLK_DIV4                    RCC_CFGR_PPRE1_DIV4  /*!< HCLK divided by 4 */

+#define RCC_HCLK_DIV8                    RCC_CFGR_PPRE1_DIV8  /*!< HCLK divided by 8 */

+#define RCC_HCLK_DIV16                   RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_HAL_EC_RTC_HSE_DIV RTC HSE Prescaler

+  * @{

+  */

+#define RCC_RTC_HSE_DIV_2               0x00000000U /*!< HSE is divided by 2 for RTC clock  */

+#define RCC_RTC_HSE_DIV_4               RCC_CR_RTCPRE_0       /*!< HSE is divided by 4 for RTC clock  */

+#define RCC_RTC_HSE_DIV_8               RCC_CR_RTCPRE_1       /*!< HSE is divided by 8 for RTC clock  */

+#define RCC_RTC_HSE_DIV_16              RCC_CR_RTCPRE         /*!< HSE is divided by 16 for RTC clock */

+/**

+  * @}

+  */

+

+/** @defgroup RCC_RTC_LCD_Clock_Source RTC LCD Clock Source

+  * @{

+  */

+#define RCC_RTCCLKSOURCE_NO_CLK          (0x00000000U)                 /*!< No clock */

+#define RCC_RTCCLKSOURCE_LSE             RCC_CSR_RTCSEL_LSE                  /*!< LSE oscillator clock used as RTC clock */

+#define RCC_RTCCLKSOURCE_LSI             RCC_CSR_RTCSEL_LSI                  /*!< LSI oscillator clock used as RTC clock */

+#define RCC_RTCCLKSOURCE_HSE_DIVX        RCC_CSR_RTCSEL_HSE                         /*!< HSE oscillator clock divided by X used as RTC clock */

+#define RCC_RTCCLKSOURCE_HSE_DIV2        (RCC_RTC_HSE_DIV_2  | RCC_CSR_RTCSEL_HSE)  /*!< HSE oscillator clock divided by 2 used as RTC clock */

+#define RCC_RTCCLKSOURCE_HSE_DIV4        (RCC_RTC_HSE_DIV_4  | RCC_CSR_RTCSEL_HSE)  /*!< HSE oscillator clock divided by 4 used as RTC clock */

+#define RCC_RTCCLKSOURCE_HSE_DIV8        (RCC_RTC_HSE_DIV_8  | RCC_CSR_RTCSEL_HSE)  /*!< HSE oscillator clock divided by 8 used as RTC clock */

+#define RCC_RTCCLKSOURCE_HSE_DIV16       (RCC_RTC_HSE_DIV_16 | RCC_CSR_RTCSEL_HSE)  /*!< HSE oscillator clock divided by 16 used as RTC clock */

+/**

+  * @}

+  */

+

+/** @defgroup RCC_PLL_Division_Factor PLL Division Factor

+  * @{

+  */

+

+#define RCC_PLL_DIV2                    RCC_CFGR_PLLDIV2

+#define RCC_PLL_DIV3                    RCC_CFGR_PLLDIV3

+#define RCC_PLL_DIV4                    RCC_CFGR_PLLDIV4

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_PLL_Multiplication_Factor PLL Multiplication Factor

+  * @{

+  */

+

+#define RCC_PLL_MUL3                    RCC_CFGR_PLLMUL3

+#define RCC_PLL_MUL4                    RCC_CFGR_PLLMUL4

+#define RCC_PLL_MUL6                    RCC_CFGR_PLLMUL6

+#define RCC_PLL_MUL8                    RCC_CFGR_PLLMUL8

+#define RCC_PLL_MUL12                   RCC_CFGR_PLLMUL12

+#define RCC_PLL_MUL16                   RCC_CFGR_PLLMUL16

+#define RCC_PLL_MUL24                   RCC_CFGR_PLLMUL24

+#define RCC_PLL_MUL32                   RCC_CFGR_PLLMUL32

+#define RCC_PLL_MUL48                   RCC_CFGR_PLLMUL48

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_MCO_Index MCO Index

+  * @{

+  */

+#define RCC_MCO1                         (0x00000000U)

+#define RCC_MCO                          RCC_MCO1               /*!< MCO1 to be compliant with other families with 2 MCOs*/

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_MCOx_Clock_Prescaler MCO Clock Prescaler

+  * @{

+  */

+#define RCC_MCODIV_1                    ((uint32_t)RCC_CFGR_MCO_DIV1)

+#define RCC_MCODIV_2                    ((uint32_t)RCC_CFGR_MCO_DIV2)

+#define RCC_MCODIV_4                    ((uint32_t)RCC_CFGR_MCO_DIV4)

+#define RCC_MCODIV_8                    ((uint32_t)RCC_CFGR_MCO_DIV8)

+#define RCC_MCODIV_16                   ((uint32_t)RCC_CFGR_MCO_DIV16)

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_MCO1_Clock_Source MCO1 Clock Source

+  * @{

+  */

+#define RCC_MCO1SOURCE_NOCLOCK           RCC_CFGR_MCO_NOCLOCK

+#define RCC_MCO1SOURCE_SYSCLK            RCC_CFGR_MCO_SYSCLK

+#define RCC_MCO1SOURCE_MSI               RCC_CFGR_MCO_MSI

+#define RCC_MCO1SOURCE_HSI               RCC_CFGR_MCO_HSI

+#define RCC_MCO1SOURCE_LSE               RCC_CFGR_MCO_LSE

+#define RCC_MCO1SOURCE_LSI               RCC_CFGR_MCO_LSI

+#define RCC_MCO1SOURCE_HSE               RCC_CFGR_MCO_HSE

+#define RCC_MCO1SOURCE_PLLCLK            RCC_CFGR_MCO_PLL

+

+/**

+  * @}

+  */

+/** @defgroup RCC_Interrupt Interrupts

+  * @{

+  */

+#define RCC_IT_LSIRDY                    ((uint8_t)RCC_CIR_LSIRDYF)   /*!< LSI Ready Interrupt flag */

+#define RCC_IT_LSERDY                    ((uint8_t)RCC_CIR_LSERDYF)   /*!< LSE Ready Interrupt flag */

+#define RCC_IT_HSIRDY                    ((uint8_t)RCC_CIR_HSIRDYF)   /*!< HSI Ready Interrupt flag */

+#define RCC_IT_HSERDY                    ((uint8_t)RCC_CIR_HSERDYF)   /*!< HSE Ready Interrupt flag */

+#define RCC_IT_PLLRDY                    ((uint8_t)RCC_CIR_PLLRDYF)   /*!< PLL Ready Interrupt flag */

+#define RCC_IT_MSIRDY                    ((uint8_t)RCC_CIR_MSIRDYF)   /*!< MSI Ready Interrupt flag */

+#define RCC_IT_LSECSS                    ((uint8_t)RCC_CIR_LSECSSF)   /*!< LSE Clock Security System Interrupt flag */

+#define RCC_IT_CSS                       ((uint8_t)RCC_CIR_CSSF)      /*!< Clock Security System Interrupt flag */

+/**

+  * @}

+  */

+

+/** @defgroup RCC_Flag Flags

+  *        Elements values convention: XXXYYYYYb

+  *           - YYYYY  : Flag position in the register

+  *           - XXX  : Register index

+  *                 - 001: CR register

+  *                 - 010: CSR register

+  * @{

+  */

+/* Flags in the CR register */

+#define RCC_FLAG_HSIRDY                  ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_HSIRDY_Pos)) /*!< Internal High Speed clock ready flag */

+#define RCC_FLAG_MSIRDY                  ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_MSIRDY_Pos)) /*!< MSI clock ready flag */

+#define RCC_FLAG_HSERDY                  ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_HSERDY_Pos)) /*!< External High Speed clock ready flag */

+#define RCC_FLAG_PLLRDY                  ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLLRDY_Pos)) /*!< PLL clock ready flag */

+

+/* Flags in the CSR register */

+#define RCC_FLAG_LSIRDY                  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LSIRDY_Pos))   /*!< Internal Low Speed oscillator Ready */

+#define RCC_FLAG_LSECSS                  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LSECSSD_Pos))  /*!< CSS on LSE failure Detection */

+#define RCC_FLAG_OBLRST                  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_OBLRSTF_Pos))  /*!< Options bytes loading reset flag */

+#define RCC_FLAG_PINRST                  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_PINRSTF_Pos))  /*!< PIN reset flag */

+#define RCC_FLAG_PORRST                  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_PORRSTF_Pos))  /*!< POR/PDR reset flag */

+#define RCC_FLAG_SFTRST                  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_SFTRSTF_Pos))  /*!< Software Reset flag */

+#define RCC_FLAG_IWDGRST                 ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_IWDGRSTF_Pos)) /*!< Independent Watchdog reset flag */

+#define RCC_FLAG_WWDGRST                 ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_WWDGRSTF_Pos)) /*!< Window watchdog reset flag */

+#define RCC_FLAG_LPWRRST                 ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LPWRRSTF_Pos)) /*!< Low-Power reset flag */

+#define RCC_FLAG_LSERDY                  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LSERDY_Pos)) /*!< External Low Speed oscillator Ready */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Exported macro ------------------------------------------------------------*/

+

+/** @defgroup RCC_Exported_Macros RCC Exported Macros

+  * @{

+  */

+

+/** @defgroup RCC_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable

+  * @brief  Enable or disable the AHB1 peripheral clock.

+  * @note   After reset, the peripheral clock (used for registers read/write access)

+  *         is disabled and the application software has to enable this clock before

+  *         using it.

+  * @{

+  */

+#define __HAL_RCC_GPIOA_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOAEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOAEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_GPIOB_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOBEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOBEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_GPIOC_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOCEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOCEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_GPIOD_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIODEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIODEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_GPIOH_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOHEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOHEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_CRC_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_FLITF_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_DMA1_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+

+#define __HAL_RCC_GPIOA_CLK_DISABLE()     (RCC->AHBENR &= ~(RCC_AHBENR_GPIOAEN))

+#define __HAL_RCC_GPIOB_CLK_DISABLE()     (RCC->AHBENR &= ~(RCC_AHBENR_GPIOBEN))

+#define __HAL_RCC_GPIOC_CLK_DISABLE()     (RCC->AHBENR &= ~(RCC_AHBENR_GPIOCEN))

+#define __HAL_RCC_GPIOD_CLK_DISABLE()     (RCC->AHBENR &= ~(RCC_AHBENR_GPIODEN))

+#define __HAL_RCC_GPIOH_CLK_DISABLE()     (RCC->AHBENR &= ~(RCC_AHBENR_GPIOHEN))

+

+#define __HAL_RCC_CRC_CLK_DISABLE()       (RCC->AHBENR &= ~(RCC_AHBENR_CRCEN))

+#define __HAL_RCC_FLITF_CLK_DISABLE()     (RCC->AHBENR &= ~(RCC_AHBENR_FLITFEN))

+#define __HAL_RCC_DMA1_CLK_DISABLE()      (RCC->AHBENR &= ~(RCC_AHBENR_DMA1EN))

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_APB1_Clock_Enable_Disable APB1 Clock Enable Disable

+  * @brief  Enable or disable the Low Speed APB (APB1) peripheral clock.

+  * @note   After reset, the peripheral clock (used for registers read/write access)

+  *         is disabled and the application software has to enable this clock before

+  *         using it.

+  * @{

+  */

+#define __HAL_RCC_TIM2_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_TIM3_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_TIM4_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_TIM6_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_TIM7_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_WWDG_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_SPI2_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_USART2_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_USART3_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_I2C1_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_I2C2_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_USB_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_PWR_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_DAC_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_COMP_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_COMPEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_COMPEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+

+

+#define __HAL_RCC_TIM2_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN))

+#define __HAL_RCC_TIM3_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN))

+#define __HAL_RCC_TIM4_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN))

+#define __HAL_RCC_TIM6_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN))

+#define __HAL_RCC_TIM7_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN))

+#define __HAL_RCC_WWDG_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_WWDGEN))

+#define __HAL_RCC_SPI2_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN))

+#define __HAL_RCC_USART2_CLK_DISABLE()    (RCC->APB1ENR &= ~(RCC_APB1ENR_USART2EN))

+#define __HAL_RCC_USART3_CLK_DISABLE()    (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN))

+#define __HAL_RCC_I2C1_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C1EN))

+#define __HAL_RCC_I2C2_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN))

+#define __HAL_RCC_USB_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_USBEN))

+#define __HAL_RCC_PWR_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_PWREN))

+#define __HAL_RCC_DAC_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN))

+#define __HAL_RCC_COMP_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_COMPEN))

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_APB2_Clock_Enable_Disable APB2 Clock Enable Disable

+  * @brief  Enable or disable the High Speed APB (APB2) peripheral clock.

+  * @note   After reset, the peripheral clock (used for registers read/write access)

+  *         is disabled and the application software has to enable this clock before

+  *         using it.

+  * @{

+  */

+#define __HAL_RCC_SYSCFG_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_TIM9_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_TIM10_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_TIM11_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_ADC1_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_SPI1_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_USART1_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\

+                                        /* Delay after an RCC peripheral clock enabling */\

+                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+

+#define __HAL_RCC_SYSCFG_CLK_DISABLE()    (RCC->APB2ENR &= ~(RCC_APB2ENR_SYSCFGEN))

+#define __HAL_RCC_TIM9_CLK_DISABLE()      (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM9EN))

+#define __HAL_RCC_TIM10_CLK_DISABLE()     (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN))

+#define __HAL_RCC_TIM11_CLK_DISABLE()     (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM11EN))

+#define __HAL_RCC_ADC1_CLK_DISABLE()      (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN))

+#define __HAL_RCC_SPI1_CLK_DISABLE()      (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN))

+#define __HAL_RCC_USART1_CLK_DISABLE()    (RCC->APB2ENR &= ~(RCC_APB2ENR_USART1EN))

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_Peripheral_Clock_Force_Release RCC Peripheral Clock Force Release

+  * @brief  Force or release AHB peripheral reset.

+  * @{

+  */

+#define __HAL_RCC_AHB_FORCE_RESET()       (RCC->AHBRSTR = 0xFFFFFFFFU)

+#define __HAL_RCC_GPIOA_FORCE_RESET()     (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOARST))

+#define __HAL_RCC_GPIOB_FORCE_RESET()     (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOBRST))

+#define __HAL_RCC_GPIOC_FORCE_RESET()     (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOCRST))

+#define __HAL_RCC_GPIOD_FORCE_RESET()     (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIODRST))

+#define __HAL_RCC_GPIOH_FORCE_RESET()     (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOHRST))

+

+#define __HAL_RCC_CRC_FORCE_RESET()       (RCC->AHBRSTR |= (RCC_AHBRSTR_CRCRST))

+#define __HAL_RCC_FLITF_FORCE_RESET()     (RCC->AHBRSTR |= (RCC_AHBRSTR_FLITFRST))

+#define __HAL_RCC_DMA1_FORCE_RESET()      (RCC->AHBRSTR |= (RCC_AHBRSTR_DMA1RST))

+

+#define __HAL_RCC_AHB_RELEASE_RESET()     (RCC->AHBRSTR = 0x00000000U)

+#define __HAL_RCC_GPIOA_RELEASE_RESET()   (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOARST))

+#define __HAL_RCC_GPIOB_RELEASE_RESET()   (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOBRST))

+#define __HAL_RCC_GPIOC_RELEASE_RESET()   (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOCRST))

+#define __HAL_RCC_GPIOD_RELEASE_RESET()   (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIODRST))

+#define __HAL_RCC_GPIOH_RELEASE_RESET()   (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOHRST))

+

+#define __HAL_RCC_CRC_RELEASE_RESET()     (RCC->AHBRSTR &= ~(RCC_AHBRSTR_CRCRST))

+#define __HAL_RCC_FLITF_RELEASE_RESET()   (RCC->AHBRSTR &= ~(RCC_AHBRSTR_FLITFRST))

+#define __HAL_RCC_DMA1_RELEASE_RESET()    (RCC->AHBRSTR &= ~(RCC_AHBRSTR_DMA1RST))

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_APB1_Force_Release_Reset APB1 Force Release Reset

+  * @brief  Force or release APB1 peripheral reset.

+  * @{

+  */

+#define __HAL_RCC_APB1_FORCE_RESET()      (RCC->APB1RSTR = 0xFFFFFFFFU)

+#define __HAL_RCC_TIM2_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST))

+#define __HAL_RCC_TIM3_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST))

+#define __HAL_RCC_TIM4_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST))

+#define __HAL_RCC_TIM6_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST))

+#define __HAL_RCC_TIM7_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST))

+#define __HAL_RCC_WWDG_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_WWDGRST))

+#define __HAL_RCC_SPI2_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST))

+#define __HAL_RCC_USART2_FORCE_RESET()    (RCC->APB1RSTR |= (RCC_APB1RSTR_USART2RST))

+#define __HAL_RCC_USART3_FORCE_RESET()    (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST))

+#define __HAL_RCC_I2C1_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C1RST))

+#define __HAL_RCC_I2C2_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST))

+#define __HAL_RCC_USB_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_USBRST))

+#define __HAL_RCC_PWR_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_PWRRST))

+#define __HAL_RCC_DAC_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST))

+#define __HAL_RCC_COMP_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_COMPRST))

+

+#define __HAL_RCC_APB1_RELEASE_RESET()    (RCC->APB1RSTR = 0x00000000U)

+#define __HAL_RCC_TIM2_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST))

+#define __HAL_RCC_TIM3_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST))

+#define __HAL_RCC_TIM4_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST))

+#define __HAL_RCC_TIM6_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST))

+#define __HAL_RCC_TIM7_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST))

+#define __HAL_RCC_WWDG_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_WWDGRST))

+#define __HAL_RCC_SPI2_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST))

+#define __HAL_RCC_USART2_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART2RST))

+#define __HAL_RCC_USART3_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST))

+#define __HAL_RCC_I2C1_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C1RST))

+#define __HAL_RCC_I2C2_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST))

+#define __HAL_RCC_USB_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USBRST))

+#define __HAL_RCC_PWR_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_PWRRST))

+#define __HAL_RCC_DAC_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST))

+#define __HAL_RCC_COMP_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_COMPRST))

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_APB2_Force_Release_Reset APB2 Force Release Reset

+  * @brief  Force or release APB1 peripheral reset.

+  * @{

+  */

+#define __HAL_RCC_APB2_FORCE_RESET()      (RCC->APB2RSTR = 0xFFFFFFFFU)

+#define __HAL_RCC_SYSCFG_FORCE_RESET()    (RCC->APB2RSTR |= (RCC_APB2RSTR_SYSCFGRST))

+#define __HAL_RCC_TIM9_FORCE_RESET()      (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM9RST))

+#define __HAL_RCC_TIM10_FORCE_RESET()     (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST))

+#define __HAL_RCC_TIM11_FORCE_RESET()     (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM11RST))

+#define __HAL_RCC_ADC1_FORCE_RESET()      (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC1RST))

+#define __HAL_RCC_SPI1_FORCE_RESET()      (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST))

+#define __HAL_RCC_USART1_FORCE_RESET()    (RCC->APB2RSTR |= (RCC_APB2RSTR_USART1RST))

+

+#define __HAL_RCC_APB2_RELEASE_RESET()    (RCC->APB2RSTR = 0x00000000U)

+#define __HAL_RCC_SYSCFG_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SYSCFGRST))

+#define __HAL_RCC_TIM9_RELEASE_RESET()    (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM9RST))

+#define __HAL_RCC_TIM10_RELEASE_RESET()   (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST))

+#define __HAL_RCC_TIM11_RELEASE_RESET()   (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM11RST))

+#define __HAL_RCC_ADC1_RELEASE_RESET()    (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC1RST))

+#define __HAL_RCC_SPI1_RELEASE_RESET()    (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST))

+#define __HAL_RCC_USART1_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART1RST))

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_Peripheral_Clock_Sleep_Enable_Disable RCC Peripheral Clock Sleep Enable Disable

+  * @note   Peripheral clock gating in SLEEP mode can be used to further reduce

+  *         power consumption.

+  * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.

+  * @note   By default, all peripheral clocks are enabled during SLEEP mode.

+  * @{

+  */

+#define __HAL_RCC_GPIOA_CLK_SLEEP_ENABLE()    (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOALPEN))

+#define __HAL_RCC_GPIOB_CLK_SLEEP_ENABLE()    (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOBLPEN))

+#define __HAL_RCC_GPIOC_CLK_SLEEP_ENABLE()    (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOCLPEN))

+#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE()    (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIODLPEN))

+#define __HAL_RCC_GPIOH_CLK_SLEEP_ENABLE()    (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOHLPEN))

+

+#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE()      (RCC->AHBLPENR |= (RCC_AHBLPENR_CRCLPEN))

+#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE()    (RCC->AHBLPENR |= (RCC_AHBLPENR_FLITFLPEN))

+#define __HAL_RCC_DMA1_CLK_SLEEP_ENABLE()     (RCC->AHBLPENR |= (RCC_AHBLPENR_DMA1LPEN))

+

+#define __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE()   (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOALPEN))

+#define __HAL_RCC_GPIOB_CLK_SLEEP_DISABLE()   (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOBLPEN))

+#define __HAL_RCC_GPIOC_CLK_SLEEP_DISABLE()   (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOCLPEN))

+#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE()   (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIODLPEN))

+#define __HAL_RCC_GPIOH_CLK_SLEEP_DISABLE()   (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOHLPEN))

+

+#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE()     (RCC->AHBLPENR &= ~(RCC_AHBLPENR_CRCLPEN))

+#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE()   (RCC->AHBLPENR &= ~(RCC_AHBLPENR_FLITFLPEN))

+#define __HAL_RCC_DMA1_CLK_SLEEP_DISABLE()    (RCC->AHBLPENR &= ~(RCC_AHBLPENR_DMA1LPEN))

+

+/** @brief  Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode.

+  * @note   Peripheral clock gating in SLEEP mode can be used to further reduce

+  *           power consumption.

+  * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.

+  * @note   By default, all peripheral clocks are enabled during SLEEP mode.

+  */

+#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE()     (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN))

+#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE()     (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN))

+#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE()     (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN))

+#define __HAL_RCC_TIM6_CLK_SLEEP_ENABLE()     (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM6LPEN))

+#define __HAL_RCC_TIM7_CLK_SLEEP_ENABLE()     (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM7LPEN))

+#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE()     (RCC->APB1LPENR |= (RCC_APB1LPENR_WWDGLPEN))

+#define __HAL_RCC_SPI2_CLK_SLEEP_ENABLE()     (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI2LPEN))

+#define __HAL_RCC_USART2_CLK_SLEEP_ENABLE()   (RCC->APB1LPENR |= (RCC_APB1LPENR_USART2LPEN))

+#define __HAL_RCC_USART3_CLK_SLEEP_ENABLE()   (RCC->APB1LPENR |= (RCC_APB1LPENR_USART3LPEN))

+#define __HAL_RCC_I2C1_CLK_SLEEP_ENABLE()     (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C1LPEN))

+#define __HAL_RCC_I2C2_CLK_SLEEP_ENABLE()     (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C2LPEN))

+#define __HAL_RCC_USB_CLK_SLEEP_ENABLE()      (RCC->APB1LPENR |= (RCC_APB1LPENR_USBLPEN))

+#define __HAL_RCC_PWR_CLK_SLEEP_ENABLE()      (RCC->APB1LPENR |= (RCC_APB1LPENR_PWRLPEN))

+#define __HAL_RCC_DAC_CLK_SLEEP_ENABLE()      (RCC->APB1LPENR |= (RCC_APB1LPENR_DACLPEN))

+#define __HAL_RCC_COMP_CLK_SLEEP_ENABLE()     (RCC->APB1LPENR |= (RCC_APB1LPENR_COMPLPEN))

+

+#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE()    (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN))

+#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE()    (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN))

+#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE()    (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN))

+#define __HAL_RCC_TIM6_CLK_SLEEP_DISABLE()    (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM6LPEN))

+#define __HAL_RCC_TIM7_CLK_SLEEP_DISABLE()    (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM7LPEN))

+#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE()    (RCC->APB1LPENR &= ~(RCC_APB1LPENR_WWDGLPEN))

+#define __HAL_RCC_SPI2_CLK_SLEEP_DISABLE()    (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI2LPEN))

+#define __HAL_RCC_USART2_CLK_SLEEP_DISABLE()  (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART2LPEN))

+#define __HAL_RCC_USART3_CLK_SLEEP_DISABLE()  (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART3LPEN))

+#define __HAL_RCC_I2C1_CLK_SLEEP_DISABLE()    (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C1LPEN))

+#define __HAL_RCC_I2C2_CLK_SLEEP_DISABLE()    (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C2LPEN))

+#define __HAL_RCC_USB_CLK_SLEEP_DISABLE()     (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USBLPEN))

+#define __HAL_RCC_PWR_CLK_SLEEP_DISABLE()     (RCC->APB1LPENR &= ~(RCC_APB1LPENR_PWRLPEN))

+#define __HAL_RCC_DAC_CLK_SLEEP_DISABLE()     (RCC->APB1LPENR &= ~(RCC_APB1LPENR_DACLPEN))

+#define __HAL_RCC_COMP_CLK_SLEEP_DISABLE()    (RCC->APB1LPENR &= ~(RCC_APB1LPENR_COMPLPEN))

+

+/** @brief  Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode.

+  * @note   Peripheral clock gating in SLEEP mode can be used to further reduce

+  *           power consumption.

+  * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.

+  * @note   By default, all peripheral clocks are enabled during SLEEP mode.

+  */

+#define __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE()   (RCC->APB2LPENR |= (RCC_APB2LPENR_SYSCFGLPEN))

+#define __HAL_RCC_TIM9_CLK_SLEEP_ENABLE()     (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM9LPEN))

+#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE()    (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN))

+#define __HAL_RCC_TIM11_CLK_SLEEP_ENABLE()    (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM11LPEN))

+#define __HAL_RCC_ADC1_CLK_SLEEP_ENABLE()     (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC1LPEN))

+#define __HAL_RCC_SPI1_CLK_SLEEP_ENABLE()     (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI1LPEN))

+#define __HAL_RCC_USART1_CLK_SLEEP_ENABLE()   (RCC->APB2LPENR |= (RCC_APB2LPENR_USART1LPEN))

+

+#define __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE()  (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SYSCFGLPEN))

+#define __HAL_RCC_TIM9_CLK_SLEEP_DISABLE()    (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM9LPEN))

+#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE()   (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN))

+#define __HAL_RCC_TIM11_CLK_SLEEP_DISABLE()   (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM11LPEN))

+#define __HAL_RCC_ADC1_CLK_SLEEP_DISABLE()    (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC1LPEN))

+#define __HAL_RCC_SPI1_CLK_SLEEP_DISABLE()    (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI1LPEN))

+#define __HAL_RCC_USART1_CLK_SLEEP_DISABLE()  (RCC->APB2LPENR &= ~(RCC_APB2LPENR_USART1LPEN))

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_AHB_Peripheral_Clock_Enable_Disable_Status AHB Peripheral Clock Enable Disable Status

+  * @brief  Get the enable or disable status of the AHB peripheral clock.

+  * @note   After reset, the peripheral clock (used for registers read/write access)

+  *         is disabled and the application software has to enable this clock before

+  *         using it.

+  * @{

+  */

+

+#define __HAL_RCC_GPIOA_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_GPIOAEN)) != 0U)

+#define __HAL_RCC_GPIOB_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_GPIOBEN)) != 0U)

+#define __HAL_RCC_GPIOC_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_GPIOCEN)) != 0U)

+#define __HAL_RCC_GPIOD_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_GPIODEN)) != 0U)

+#define __HAL_RCC_GPIOH_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_GPIOHEN)) != 0U)

+#define __HAL_RCC_CRC_IS_CLK_ENABLED()         ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) != 0U)

+#define __HAL_RCC_FLITF_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) != 0U)

+#define __HAL_RCC_DMA1_IS_CLK_ENABLED()        ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) != 0U)

+#define __HAL_RCC_GPIOA_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_GPIOAEN)) == 0U)

+#define __HAL_RCC_GPIOB_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_GPIOBEN)) == 0U)

+#define __HAL_RCC_GPIOC_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_GPIOCEN)) == 0U)

+#define __HAL_RCC_GPIOD_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_GPIODEN)) == 0U)

+#define __HAL_RCC_GPIOH_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_GPIOHEN)) == 0U)

+#define __HAL_RCC_CRC_IS_CLK_DISABLED()        ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) == 0U)

+#define __HAL_RCC_FLITF_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) == 0U)

+#define __HAL_RCC_DMA1_IS_CLK_DISABLED()       ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) == 0U)

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status

+  * @brief  Get the enable or disable status of the APB1 peripheral clock.

+  * @note   After reset, the peripheral clock (used for registers read/write access)

+  *         is disabled and the application software has to enable this clock before

+  *         using it.

+  * @{

+  */

+

+#define __HAL_RCC_TIM2_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != 0U)

+#define __HAL_RCC_TIM3_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != 0U)

+#define __HAL_RCC_TIM4_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != 0U)

+#define __HAL_RCC_TIM6_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != 0U)

+#define __HAL_RCC_TIM7_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != 0U)

+#define __HAL_RCC_WWDG_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) != 0U)

+#define __HAL_RCC_SPI2_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != 0U)

+#define __HAL_RCC_USART2_IS_CLK_ENABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) != 0U)

+#define __HAL_RCC_USART3_IS_CLK_ENABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != 0U)

+#define __HAL_RCC_I2C1_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) != 0U)

+#define __HAL_RCC_I2C2_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != 0U)

+#define __HAL_RCC_USB_IS_CLK_ENABLED()         ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) != 0U)

+#define __HAL_RCC_PWR_IS_CLK_ENABLED()         ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) != 0U)

+#define __HAL_RCC_DAC_IS_CLK_ENABLED()         ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != 0U)

+#define __HAL_RCC_COMP_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_COMPEN)) != 0U)

+#define __HAL_RCC_TIM2_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == 0U)

+#define __HAL_RCC_TIM3_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == 0U)

+#define __HAL_RCC_TIM4_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == 0U)

+#define __HAL_RCC_TIM6_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == 0U)

+#define __HAL_RCC_TIM7_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == 0U)

+#define __HAL_RCC_WWDG_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) == 0U)

+#define __HAL_RCC_SPI2_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == 0U)

+#define __HAL_RCC_USART2_IS_CLK_DISABLED()     ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) == 0U)

+#define __HAL_RCC_USART3_IS_CLK_DISABLED()     ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == 0U)

+#define __HAL_RCC_I2C1_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) == 0U)

+#define __HAL_RCC_I2C2_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == 0U)

+#define __HAL_RCC_USB_IS_CLK_DISABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) == 0U)

+#define __HAL_RCC_PWR_IS_CLK_DISABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) == 0U)

+#define __HAL_RCC_DAC_IS_CLK_DISABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == 0U)

+#define __HAL_RCC_COMP_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_COMPEN)) == 0U)

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status

+  * @brief  Get the enable or disable status of the APB2 peripheral clock.

+  * @note   After reset, the peripheral clock (used for registers read/write access)

+  *         is disabled and the application software has to enable this clock before

+  *         using it.

+  * @{

+  */

+

+#define __HAL_RCC_SYSCFG_IS_CLK_ENABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) != 0U)

+#define __HAL_RCC_TIM9_IS_CLK_ENABLED()        ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) != 0U)

+#define __HAL_RCC_TIM10_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != 0U)

+#define __HAL_RCC_TIM11_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) != 0U)

+#define __HAL_RCC_ADC1_IS_CLK_ENABLED()        ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) != 0U)

+#define __HAL_RCC_SPI1_IS_CLK_ENABLED()        ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != 0U)

+#define __HAL_RCC_USART1_IS_CLK_ENABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) != 0U)

+#define __HAL_RCC_SYSCFG_IS_CLK_DISABLED()     ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) == 0U)

+#define __HAL_RCC_TIM9_IS_CLK_DISABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) == 0U)

+#define __HAL_RCC_TIM10_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == 0U)

+#define __HAL_RCC_TIM11_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) == 0U)

+#define __HAL_RCC_ADC1_IS_CLK_DISABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) == 0U)

+#define __HAL_RCC_SPI1_IS_CLK_DISABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == 0U)

+#define __HAL_RCC_USART1_IS_CLK_DISABLED()     ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) == 0U)

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_AHB_Clock_Sleep_Enable_Disable_Status AHB Peripheral Clock Sleep Enable Disable Status

+  * @brief  Get the enable or disable status of the AHB peripheral clock during Low Power (Sleep) mode.

+  * @note   Peripheral clock gating in SLEEP mode can be used to further reduce

+  *         power consumption.

+  * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.

+  * @note   By default, all peripheral clocks are enabled during SLEEP mode.

+  * @{

+  */

+

+#define __HAL_RCC_GPIOA_IS_CLK_SLEEP_ENABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOALPEN)) != 0U)

+#define __HAL_RCC_GPIOB_IS_CLK_SLEEP_ENABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOBLPEN)) != 0U)

+#define __HAL_RCC_GPIOC_IS_CLK_SLEEP_ENABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOCLPEN)) != 0U)

+#define __HAL_RCC_GPIOD_IS_CLK_SLEEP_ENABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIODLPEN)) != 0U)

+#define __HAL_RCC_GPIOH_IS_CLK_SLEEP_ENABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOHLPEN)) != 0U)

+#define __HAL_RCC_CRC_IS_CLK_SLEEP_ENABLED()         ((RCC->AHBLPENR & (RCC_AHBLPENR_CRCLPEN)) != 0U)

+#define __HAL_RCC_FLITF_IS_CLK_SLEEP_ENABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_FLITFLPEN)) != 0U)

+#define __HAL_RCC_DMA1_IS_CLK_SLEEP_ENABLED()        ((RCC->AHBLPENR & (RCC_AHBLPENR_DMA1LPEN)) != 0U)

+#define __HAL_RCC_GPIOA_IS_CLK_SLEEP_DISABLED()      ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOALPEN)) == 0U)

+#define __HAL_RCC_GPIOB_IS_CLK_SLEEP_DISABLED()      ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOBLPEN)) == 0U)

+#define __HAL_RCC_GPIOC_IS_CLK_SLEEP_DISABLED()      ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOCLPEN)) == 0U)

+#define __HAL_RCC_GPIOD_IS_CLK_SLEEP_DISABLED()      ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIODLPEN)) == 0U)

+#define __HAL_RCC_GPIOH_IS_CLK_SLEEP_DISABLED()      ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOHLPEN)) == 0U)

+#define __HAL_RCC_CRC_IS_CLK_SLEEP_DISABLED()        ((RCC->AHBLPENR & (RCC_AHBLPENR_CRCLPEN)) == 0U)

+#define __HAL_RCC_FLITF_IS_CLK_SLEEP_DISABLED()      ((RCC->AHBLPENR & (RCC_AHBLPENR_FLITFLPEN)) == 0U)

+#define __HAL_RCC_DMA1_IS_CLK_SLEEP_DISABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_DMA1LPEN)) == 0U)

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_APB1_Clock_Sleep_Enable_Disable_Status APB1 Peripheral Clock Sleep Enable Disable Status

+  * @brief  Get the enable or disable status of the APB1 peripheral clock during Low Power (Sleep) mode.

+  * @note   Peripheral clock gating in SLEEP mode can be used to further reduce

+  *         power consumption.

+  * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.

+  * @note   By default, all peripheral clocks are enabled during SLEEP mode.

+  * @{

+  */

+

+#define __HAL_RCC_TIM2_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM2LPEN)) != 0U)

+#define __HAL_RCC_TIM3_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM3LPEN)) != 0U)

+#define __HAL_RCC_TIM4_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM4LPEN)) != 0U)

+#define __HAL_RCC_TIM6_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM6LPEN)) != 0U)

+#define __HAL_RCC_TIM7_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM7LPEN)) != 0U)

+#define __HAL_RCC_WWDG_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_WWDGLPEN)) != 0U)

+#define __HAL_RCC_SPI2_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_SPI2LPEN)) != 0U)

+#define __HAL_RCC_USART2_IS_CLK_SLEEP_ENABLED()      ((RCC->APB1LPENR & (RCC_APB1LPENR_USART2LPEN)) != 0U)

+#define __HAL_RCC_USART3_IS_CLK_SLEEP_ENABLED()      ((RCC->APB1LPENR & (RCC_APB1LPENR_USART3LPEN)) != 0U)

+#define __HAL_RCC_I2C1_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_I2C1LPEN)) != 0U)

+#define __HAL_RCC_I2C2_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_I2C2LPEN)) != 0U)

+#define __HAL_RCC_USB_IS_CLK_SLEEP_ENABLED()         ((RCC->APB1LPENR & (RCC_APB1LPENR_USBLPEN)) != 0U)

+#define __HAL_RCC_PWR_IS_CLK_SLEEP_ENABLED()         ((RCC->APB1LPENR & (RCC_APB1LPENR_PWRLPEN)) != 0U)

+#define __HAL_RCC_DAC_IS_CLK_SLEEP_ENABLED()         ((RCC->APB1LPENR & (RCC_APB1LPENR_DACLPEN)) != 0U)

+#define __HAL_RCC_COMP_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_COMPLPEN)) != 0U)

+#define __HAL_RCC_TIM2_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM2LPEN)) == 0U)

+#define __HAL_RCC_TIM3_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM3LPEN)) == 0U)

+#define __HAL_RCC_TIM4_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM4LPEN)) == 0U)

+#define __HAL_RCC_TIM6_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM6LPEN)) == 0U)

+#define __HAL_RCC_TIM7_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM7LPEN)) == 0U)

+#define __HAL_RCC_WWDG_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_WWDGLPEN)) == 0U)

+#define __HAL_RCC_SPI2_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_SPI2LPEN)) == 0U)

+#define __HAL_RCC_USART2_IS_CLK_SLEEP_DISABLED()     ((RCC->APB1LPENR & (RCC_APB1LPENR_USART2LPEN)) == 0U)

+#define __HAL_RCC_USART3_IS_CLK_SLEEP_DISABLED()     ((RCC->APB1LPENR & (RCC_APB1LPENR_USART3LPEN)) == 0U)

+#define __HAL_RCC_I2C1_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_I2C1LPEN)) == 0U)

+#define __HAL_RCC_I2C2_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_I2C2LPEN)) == 0U)

+#define __HAL_RCC_USB_IS_CLK_SLEEP_DISABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_USBLPEN)) == 0U)

+#define __HAL_RCC_PWR_IS_CLK_SLEEP_DISABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_PWRLPEN)) == 0U)

+#define __HAL_RCC_DAC_IS_CLK_SLEEP_DISABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_DACLPEN)) == 0U)

+#define __HAL_RCC_COMP_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_COMPLPEN)) == 0U)

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_APB2_Clock_Sleep_Enable_Disable_Status APB2 Peripheral Clock Sleep Enable Disable Status

+  * @brief  Get the enable or disable status of the APB2 peripheral clock during Low Power (Sleep) mode.

+  * @note   Peripheral clock gating in SLEEP mode can be used to further reduce

+  *         power consumption.

+  * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.

+  * @note   By default, all peripheral clocks are enabled during SLEEP mode.

+  * @{

+  */

+

+#define __HAL_RCC_SYSCFG_IS_CLK_SLEEP_ENABLED()      ((RCC->APB2LPENR & (RCC_APB2LPENR_SYSCFGLPEN)) != 0U)

+#define __HAL_RCC_TIM9_IS_CLK_SLEEP_ENABLED()        ((RCC->APB2LPENR & (RCC_APB2LPENR_TIM9LPEN)) != 0U)

+#define __HAL_RCC_TIM10_IS_CLK_SLEEP_ENABLED()       ((RCC->APB2LPENR & (RCC_APB2LPENR_TIM10LPEN)) != 0U)

+#define __HAL_RCC_TIM11_IS_CLK_SLEEP_ENABLED()       ((RCC->APB2LPENR & (RCC_APB2LPENR_TIM11LPEN)) != 0U)

+#define __HAL_RCC_ADC1_IS_CLK_SLEEP_ENABLED()        ((RCC->APB2LPENR & (RCC_APB2LPENR_ADC1LPEN)) != 0U)

+#define __HAL_RCC_SPI1_IS_CLK_SLEEP_ENABLED()        ((RCC->APB2LPENR & (RCC_APB2LPENR_SPI1LPEN)) != 0U)

+#define __HAL_RCC_USART1_IS_CLK_SLEEP_ENABLED()      ((RCC->APB2LPENR & (RCC_APB2LPENR_USART1LPEN)) != 0U)

+#define __HAL_RCC_SYSCFG_IS_CLK_SLEEP_DISABLED()     ((RCC->APB2LPENR & (RCC_APB2LPENR_SYSCFGLPEN)) == 0U)

+#define __HAL_RCC_TIM9_IS_CLK_SLEEP_DISABLED()       ((RCC->APB2LPENR & (RCC_APB2LPENR_TIM9LPEN)) == 0U)

+#define __HAL_RCC_TIM10_IS_CLK_SLEEP_DISABLED()      ((RCC->APB2LPENR & (RCC_APB2LPENR_TIM10LPEN)) == 0U)

+#define __HAL_RCC_TIM11_IS_CLK_SLEEP_DISABLED()      ((RCC->APB2LPENR & (RCC_APB2LPENR_TIM11LPEN)) == 0U)

+#define __HAL_RCC_ADC1_IS_CLK_SLEEP_DISABLED()       ((RCC->APB2LPENR & (RCC_APB2LPENR_ADC1LPEN)) == 0U)

+#define __HAL_RCC_SPI1_IS_CLK_SLEEP_DISABLED()       ((RCC->APB2LPENR & (RCC_APB2LPENR_SPI1LPEN)) == 0U)

+#define __HAL_RCC_USART1_IS_CLK_SLEEP_DISABLED()     ((RCC->APB2LPENR & (RCC_APB2LPENR_USART1LPEN)) == 0U)

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_HSI_Configuration HSI Configuration

+  * @{

+  */

+

+/** @brief  Macros to enable or disable the Internal High Speed oscillator (HSI).

+  * @note   The HSI is stopped by hardware when entering STOP and STANDBY modes.

+  * @note   HSI can not be stopped if it is used as system clock source. In this case,

+  *         you have to select another source of the system clock then stop the HSI.

+  * @note   After enabling the HSI, the application software should wait on HSIRDY

+  *         flag to be set indicating that HSI clock is stable and can be used as

+  *         system clock source.

+  * @note   When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator

+  *         clock cycles.

+  */

+#define __HAL_RCC_HSI_ENABLE()  (*(__IO uint32_t *) RCC_CR_HSION_BB = ENABLE)

+#define __HAL_RCC_HSI_DISABLE() (*(__IO uint32_t *) RCC_CR_HSION_BB = DISABLE)

+

+/** @brief  Macro to adjust the Internal High Speed oscillator (HSI) calibration value.

+  * @note   The calibration is used to compensate for the variations in voltage

+  *         and temperature that influence the frequency of the internal HSI RC.

+  * @param  _HSICALIBRATIONVALUE_ specifies the calibration trimming value.

+  *         (default is RCC_HSICALIBRATION_DEFAULT).

+  *         This parameter must be a number between 0 and 0x1F.

+  */

+#define __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(_HSICALIBRATIONVALUE_) \

+          (MODIFY_REG(RCC->ICSCR, RCC_ICSCR_HSITRIM, (uint32_t)(_HSICALIBRATIONVALUE_) << RCC_ICSCR_HSITRIM_Pos))

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_LSI_Configuration  LSI Configuration

+  * @{

+  */

+

+/** @brief Macro to enable the Internal Low Speed oscillator (LSI).

+  * @note   After enabling the LSI, the application software should wait on

+  *         LSIRDY flag to be set indicating that LSI clock is stable and can

+  *         be used to clock the IWDG and/or the RTC.

+  */

+#define __HAL_RCC_LSI_ENABLE()  (*(__IO uint32_t *) RCC_CSR_LSION_BB = ENABLE)

+

+/** @brief Macro to disable the Internal Low Speed oscillator (LSI).

+  * @note   LSI can not be disabled if the IWDG is running.

+  * @note   When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator

+  *         clock cycles.

+  */

+#define __HAL_RCC_LSI_DISABLE() (*(__IO uint32_t *) RCC_CSR_LSION_BB = DISABLE)

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_HSE_Configuration HSE Configuration

+  * @{

+  */

+

+/**

+  * @brief  Macro to configure the External High Speed oscillator (HSE).

+  * @note   Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not

+  *         supported by this macro. User should request a transition to HSE Off

+  *         first and then HSE On or HSE Bypass.

+  * @note   After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application

+  *         software should wait on HSERDY flag to be set indicating that HSE clock

+  *         is stable and can be used to clock the PLL and/or system clock.

+  * @note   HSE state can not be changed if it is used directly or through the

+  *         PLL as system clock. In this case, you have to select another source

+  *         of the system clock then change the HSE state (ex. disable it).

+  * @note   The HSE is stopped by hardware when entering STOP and STANDBY modes.

+  * @note   This function reset the CSSON bit, so if the clock security system(CSS)

+  *         was previously enabled you have to enable it again after calling this

+  *         function.

+  * @param  __STATE__ specifies the new state of the HSE.

+  *          This parameter can be one of the following values:

+  *            @arg @ref RCC_HSE_OFF turn OFF the HSE oscillator, HSERDY flag goes low after

+  *                              6 HSE oscillator clock cycles.

+  *            @arg @ref RCC_HSE_ON turn ON the HSE oscillator

+  *            @arg @ref RCC_HSE_BYPASS HSE oscillator bypassed with external clock

+  */

+#define __HAL_RCC_HSE_CONFIG(__STATE__)                                     \

+                    do{                                                     \

+                      if ((__STATE__) == RCC_HSE_ON)                        \

+                      {                                                     \

+                        SET_BIT(RCC->CR, RCC_CR_HSEON);                     \

+                      }                                                     \

+                      else if ((__STATE__) == RCC_HSE_OFF)                  \

+                      {                                                     \

+                        CLEAR_BIT(RCC->CR, RCC_CR_HSEON);                   \

+                        CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);                  \

+                      }                                                     \

+                      else if ((__STATE__) == RCC_HSE_BYPASS)               \

+                      {                                                     \

+                        SET_BIT(RCC->CR, RCC_CR_HSEBYP);                    \

+                        SET_BIT(RCC->CR, RCC_CR_HSEON);                     \

+                      }                                                     \

+                      else                                                  \

+                      {                                                     \

+                        CLEAR_BIT(RCC->CR, RCC_CR_HSEON);                   \

+                        CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);                  \

+                      }                                                     \

+                    }while(0U)

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_LSE_Configuration LSE Configuration

+  * @{

+  */

+

+/**

+  * @brief  Macro to configure the External Low Speed oscillator (LSE).

+  * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not supported by this macro.

+  * @note   As the LSE is in the Backup domain and write access is denied to

+  *         this domain after reset, you have to enable write access using

+  *         @ref HAL_PWR_EnableBkUpAccess() function before to configure the LSE

+  *         (to be done once after reset).

+  * @note   After enabling the LSE (RCC_LSE_ON or RCC_LSE_BYPASS), the application

+  *         software should wait on LSERDY flag to be set indicating that LSE clock

+  *         is stable and can be used to clock the RTC.

+  * @param  __STATE__ specifies the new state of the LSE.

+  *         This parameter can be one of the following values:

+  *            @arg @ref RCC_LSE_OFF turn OFF the LSE oscillator, LSERDY flag goes low after

+  *                              6 LSE oscillator clock cycles.

+  *            @arg @ref RCC_LSE_ON turn ON the LSE oscillator.

+  *            @arg @ref RCC_LSE_BYPASS LSE oscillator bypassed with external clock.

+  */

+#define __HAL_RCC_LSE_CONFIG(__STATE__)                                     \

+                    do{                                                     \

+                      if ((__STATE__) == RCC_LSE_ON)                        \

+                      {                                                     \

+                        SET_BIT(RCC->CSR, RCC_CSR_LSEON);                   \

+                      }                                                     \

+                      else if ((__STATE__) == RCC_LSE_OFF)                  \

+                      {                                                     \

+                        CLEAR_BIT(RCC->CSR, RCC_CSR_LSEON);                 \

+                        CLEAR_BIT(RCC->CSR, RCC_CSR_LSEBYP);                \

+                      }                                                     \

+                      else if ((__STATE__) == RCC_LSE_BYPASS)               \

+                      {                                                     \

+                        SET_BIT(RCC->CSR, RCC_CSR_LSEBYP);                  \

+                        SET_BIT(RCC->CSR, RCC_CSR_LSEON);                   \

+                      }                                                     \

+                      else                                                  \

+                      {                                                     \

+                        CLEAR_BIT(RCC->CSR, RCC_CSR_LSEON);                 \

+                        CLEAR_BIT(RCC->CSR, RCC_CSR_LSEBYP);                \

+                      }                                                     \

+                    }while(0U)

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_MSI_Configuration  MSI Configuration

+  * @{

+  */

+

+/** @brief  Macro to enable Internal Multi Speed oscillator (MSI).

+  * @note   After enabling the MSI, the application software should wait on MSIRDY

+  *         flag to be set indicating that MSI clock is stable and can be used as

+  *         system clock source.

+  */

+#define __HAL_RCC_MSI_ENABLE()  (*(__IO uint32_t *) RCC_CR_MSION_BB = ENABLE)

+

+/** @brief  Macro to disable the Internal Multi Speed oscillator (MSI).

+  * @note   The MSI is stopped by hardware when entering STOP and STANDBY modes.

+  *         It is used (enabled by hardware) as system clock source after startup

+  *         from Reset, wakeup from STOP and STANDBY mode, or in case of failure

+  *         of the HSE used directly or indirectly as system clock (if the Clock

+  *         Security System CSS is enabled).

+  * @note   MSI can not be stopped if it is used as system clock source. In this case,

+  *         you have to select another source of the system clock then stop the MSI.

+  * @note   When the MSI is stopped, MSIRDY flag goes low after 6 MSI oscillator

+  *         clock cycles.

+  */

+#define __HAL_RCC_MSI_DISABLE() (*(__IO uint32_t *) RCC_CR_MSION_BB = DISABLE)

+

+/** @brief  Macro adjusts Internal Multi Speed oscillator (MSI) calibration value.

+  * @note   The calibration is used to compensate for the variations in voltage

+  *         and temperature that influence the frequency of the internal MSI RC.

+  * @param  _MSICALIBRATIONVALUE_ specifies the calibration trimming value.

+  *         (default is RCC_MSICALIBRATION_DEFAULT).

+  *         This parameter must be a number between 0 and 0xFF.

+  */

+#define __HAL_RCC_MSI_CALIBRATIONVALUE_ADJUST(_MSICALIBRATIONVALUE_) \

+          (MODIFY_REG(RCC->ICSCR, RCC_ICSCR_MSITRIM, (uint32_t)(_MSICALIBRATIONVALUE_) << RCC_ICSCR_MSITRIM_Pos))

+

+/* @brief  Macro to configures the Internal Multi Speed oscillator (MSI) clock range.

+  * @note     After restart from Reset or wakeup from STANDBY, the MSI clock is

+  *           around 2.097 MHz. The MSI clock does not change after wake-up from

+  *           STOP mode.

+  * @note    The MSI clock range can be modified on the fly.

+  * @param  _MSIRANGEVALUE_ specifies the MSI Clock range.

+  *   This parameter must be one of the following values:

+  *     @arg @ref RCC_MSIRANGE_0 MSI clock is around 65.536 KHz

+  *     @arg @ref RCC_MSIRANGE_1 MSI clock is around 131.072 KHz

+  *     @arg @ref RCC_MSIRANGE_2 MSI clock is around 262.144 KHz

+  *     @arg @ref RCC_MSIRANGE_3 MSI clock is around 524.288 KHz

+  *     @arg @ref RCC_MSIRANGE_4 MSI clock is around 1.048 MHz

+  *     @arg @ref RCC_MSIRANGE_5 MSI clock is around 2.097 MHz (default after Reset or wake-up from STANDBY)

+  *     @arg @ref RCC_MSIRANGE_6 MSI clock is around 4.194 MHz

+  */

+#define __HAL_RCC_MSI_RANGE_CONFIG(_MSIRANGEVALUE_) (MODIFY_REG(RCC->ICSCR, \

+          RCC_ICSCR_MSIRANGE, (uint32_t)(_MSIRANGEVALUE_)))

+

+/** @brief  Macro to get the Internal Multi Speed oscillator (MSI) clock range in run mode

+  * @retval MSI clock range.

+  *         This parameter must be one of the following values:

+  *     @arg @ref RCC_MSIRANGE_0 MSI clock is around 65.536 KHz

+  *     @arg @ref RCC_MSIRANGE_1 MSI clock is around 131.072 KHz

+  *     @arg @ref RCC_MSIRANGE_2 MSI clock is around 262.144 KHz

+  *     @arg @ref RCC_MSIRANGE_3 MSI clock is around 524.288 KHz

+  *     @arg @ref RCC_MSIRANGE_4 MSI clock is around 1.048 MHz

+  *     @arg @ref RCC_MSIRANGE_5 MSI clock is around 2.097 MHz (default after Reset or wake-up from STANDBY)

+  *     @arg @ref RCC_MSIRANGE_6 MSI clock is around 4.194 MHz

+  */

+#define __HAL_RCC_GET_MSI_RANGE() (uint32_t)(READ_BIT(RCC->ICSCR, RCC_ICSCR_MSIRANGE))

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_PLL_Configuration PLL Configuration

+  * @{

+  */

+

+/** @brief Macro to enable the main PLL.

+  * @note   After enabling the main PLL, the application software should wait on

+  *         PLLRDY flag to be set indicating that PLL clock is stable and can

+  *         be used as system clock source.

+  * @note   The main PLL is disabled by hardware when entering STOP and STANDBY modes.

+  */

+#define __HAL_RCC_PLL_ENABLE()          (*(__IO uint32_t *) RCC_CR_PLLON_BB = ENABLE)

+

+/** @brief Macro to disable the main PLL.

+  * @note   The main PLL can not be disabled if it is used as system clock source

+  */

+#define __HAL_RCC_PLL_DISABLE()         (*(__IO uint32_t *) RCC_CR_PLLON_BB = DISABLE)

+

+/** @brief Macro to configure the main PLL clock source, multiplication and division factors.

+  * @note   This function must be used only when the main PLL is disabled.

+  *

+  * @param  __RCC_PLLSOURCE__ specifies the PLL entry clock source.

+  *          This parameter can be one of the following values:

+  *            @arg @ref RCC_PLLSOURCE_HSI HSI oscillator clock selected as PLL clock entry

+  *            @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL clock entry

+  * @param  __PLLMUL__ specifies the multiplication factor for PLL VCO output clock

+  *          This parameter can be one of the following values:

+  *             @arg @ref RCC_PLL_MUL3   PLLVCO = PLL clock entry x 3

+  *             @arg @ref RCC_PLL_MUL4   PLLVCO = PLL clock entry x 4

+  *             @arg @ref RCC_PLL_MUL6   PLLVCO = PLL clock entry x 6

+  *             @arg @ref RCC_PLL_MUL8   PLLVCO = PLL clock entry x 8

+  *             @arg @ref RCC_PLL_MUL12  PLLVCO = PLL clock entry x 12

+  *             @arg @ref RCC_PLL_MUL16  PLLVCO = PLL clock entry x 16

+  *             @arg @ref RCC_PLL_MUL24  PLLVCO = PLL clock entry x 24

+  *             @arg @ref RCC_PLL_MUL32  PLLVCO = PLL clock entry x 32

+  *             @arg @ref RCC_PLL_MUL48  PLLVCO = PLL clock entry x 48

+  * @note The PLL VCO clock frequency must not exceed 96 MHz when the product is in

+  *          Range 1, 48 MHz when the product is in Range 2 and 24 MHz when the product is

+  *          in Range 3.

+  *

+  * @param  __PLLDIV__ specifies the division factor for PLL VCO input clock

+  *          This parameter can be one of the following values:

+  *             @arg @ref RCC_PLL_DIV2 PLL clock output = PLLVCO / 2

+  *             @arg @ref RCC_PLL_DIV3 PLL clock output = PLLVCO / 3

+  *             @arg @ref RCC_PLL_DIV4 PLL clock output = PLLVCO / 4

+  *

+  */

+#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSOURCE__, __PLLMUL__, __PLLDIV__)\

+          MODIFY_REG(RCC->CFGR, (RCC_CFGR_PLLSRC|RCC_CFGR_PLLMUL|RCC_CFGR_PLLDIV),((__RCC_PLLSOURCE__) | (__PLLMUL__) | (__PLLDIV__)))

+

+/** @brief  Get oscillator clock selected as PLL input clock

+  * @retval The clock source used for PLL entry. The returned value can be one

+  *         of the following:

+  *             @arg @ref RCC_PLLSOURCE_HSI HSI oscillator clock selected as PLL input clock

+  *             @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL input clock

+  */

+#define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC)))

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_Get_Clock_source Get Clock source

+  * @{

+  */

+

+/**

+  * @brief  Macro to configure the system clock source.

+  * @param  __SYSCLKSOURCE__ specifies the system clock source.

+  *          This parameter can be one of the following values:

+  *              @arg @ref RCC_SYSCLKSOURCE_MSI MSI oscillator is used as system clock source.

+  *              @arg @ref RCC_SYSCLKSOURCE_HSI HSI oscillator is used as system clock source.

+  *              @arg @ref RCC_SYSCLKSOURCE_HSE HSE oscillator is used as system clock source.

+  *              @arg @ref RCC_SYSCLKSOURCE_PLLCLK PLL output is used as system clock source.

+  */

+#define __HAL_RCC_SYSCLK_CONFIG(__SYSCLKSOURCE__) \

+                  MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, (__SYSCLKSOURCE__))

+

+/** @brief  Macro to get the clock source used as system clock.

+  * @retval The clock source used as system clock. The returned value can be one

+  *         of the following:

+  *             @arg @ref RCC_SYSCLKSOURCE_STATUS_MSI MSI used as system clock

+  *             @arg @ref RCC_SYSCLKSOURCE_STATUS_HSI HSI used as system clock

+  *             @arg @ref RCC_SYSCLKSOURCE_STATUS_HSE HSE used as system clock

+  *             @arg @ref RCC_SYSCLKSOURCE_STATUS_PLLCLK PLL used as system clock

+  */

+#define __HAL_RCC_GET_SYSCLK_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR,RCC_CFGR_SWS)))

+

+/**

+  * @}

+  */

+

+/** @defgroup RCCEx_MCOx_Clock_Config RCC Extended MCOx Clock Config

+  * @{

+  */

+

+/** @brief  Macro to configure the MCO clock.

+  * @param  __MCOCLKSOURCE__ specifies the MCO clock source.

+  *          This parameter can be one of the following values:

+  *            @arg @ref RCC_MCO1SOURCE_NOCLOCK      No clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_SYSCLK       System Clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_HSI          HSI oscillator clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_MSI          MSI oscillator clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_HSE HSE oscillator clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_PLLCLK       PLL clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_LSI          LSI clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_LSE          LSE clock selected as MCO clock

+  * @param  __MCODIV__ specifies the MCO clock prescaler.

+  *          This parameter can be one of the following values:

+  *            @arg @ref RCC_MCODIV_1   MCO clock source is divided by 1

+  *            @arg @ref RCC_MCODIV_2   MCO clock source is divided by 2

+  *            @arg @ref RCC_MCODIV_4   MCO clock source is divided by 4

+  *            @arg @ref RCC_MCODIV_8   MCO clock source is divided by 8

+  *            @arg @ref RCC_MCODIV_16  MCO clock source is divided by 16

+  */

+#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) \

+                 MODIFY_REG(RCC->CFGR, (RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE), ((__MCOCLKSOURCE__) | (__MCODIV__)))

+

+/**

+  * @}

+  */

+

+  /** @defgroup RCC_RTC_Clock_Configuration RCC RTC Clock Configuration

+  * @{

+  */

+

+/** @brief Macro to configure the RTC clock (RTCCLK).

+  * @note   As the RTC clock configuration bits are in the Backup domain and write

+  *         access is denied to this domain after reset, you have to enable write

+  *         access using the Power Backup Access macro before to configure

+  *         the RTC clock source (to be done once after reset).

+  * @note   Once the RTC clock is configured it cannot be changed unless the

+  *         Backup domain is reset using @ref __HAL_RCC_BACKUPRESET_FORCE() macro, or by

+  *         a Power On Reset (POR).

+  * @note   RTC prescaler cannot be modified if HSE is enabled (HSEON = 1).

+  *

+  * @param  __RTC_CLKSOURCE__ specifies the RTC clock source.

+  *          This parameter can be one of the following values:

+  *             @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock

+  *             @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock

+  *             @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock

+  *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV2 HSE divided by 2 selected as RTC clock

+  *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV4 HSE divided by 4 selected as RTC clock

+  *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV8 HSE divided by 8 selected as RTC clock

+  *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV16 HSE divided by 16 selected as RTC clock

+  * @note   If the LSE or LSI is used as RTC clock source, the RTC continues to

+  *         work in STOP and STANDBY modes, and can be used as wakeup source.

+  *         However, when the HSE clock is used as RTC clock source, the RTC

+  *         cannot be used in STOP and STANDBY modes.

+  * @note   The maximum input clock frequency for RTC is 1MHz (when using HSE as

+  *         RTC clock source).

+  */

+#define __HAL_RCC_RTC_CLKPRESCALER(__RTC_CLKSOURCE__) do { \

+            if(((__RTC_CLKSOURCE__) & RCC_CSR_RTCSEL_HSE) == RCC_CSR_RTCSEL_HSE)          \

+            {                                                                             \

+              MODIFY_REG(RCC->CR, RCC_CR_RTCPRE, ((__RTC_CLKSOURCE__) & RCC_CR_RTCPRE));  \

+            }                                                                             \

+          } while (0U)

+

+#define __HAL_RCC_RTC_CONFIG(__RTC_CLKSOURCE__) do { \

+                                      __HAL_RCC_RTC_CLKPRESCALER(__RTC_CLKSOURCE__);      \

+                                      RCC->CSR |= ((__RTC_CLKSOURCE__) & RCC_CSR_RTCSEL); \

+                                    } while (0U)

+

+/** @brief Macro to get the RTC clock source.

+  * @retval The clock source can be one of the following values:

+  *            @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock

+  *            @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock

+  *            @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock

+  *            @arg @ref RCC_RTCCLKSOURCE_HSE_DIVX HSE divided by X selected as RTC clock (X can be retrieved thanks to @ref __HAL_RCC_GET_RTC_HSE_PRESCALER()

+  */

+#define __HAL_RCC_GET_RTC_SOURCE() (READ_BIT(RCC->CSR, RCC_CSR_RTCSEL))

+

+/**

+  * @brief   Get the RTC and LCD HSE clock divider (RTCCLK / LCDCLK).

+  *

+  * @retval Returned value can be one of the following values:

+  *         @arg @ref RCC_RTC_HSE_DIV_2  HSE divided by 2 selected as RTC clock

+  *         @arg @ref RCC_RTC_HSE_DIV_4  HSE divided by 4 selected as RTC clock

+  *         @arg @ref RCC_RTC_HSE_DIV_8  HSE divided by 8 selected as RTC clock

+  *         @arg @ref RCC_RTC_HSE_DIV_16 HSE divided by 16 selected as RTC clock

+  *

+  */

+#define  __HAL_RCC_GET_RTC_HSE_PRESCALER() ((uint32_t)(READ_BIT(RCC->CR, RCC_CR_RTCPRE)))

+

+/** @brief Macro to enable the the RTC clock.

+  * @note   These macros must be used only after the RTC clock source was selected.

+  */

+#define __HAL_RCC_RTC_ENABLE()          (*(__IO uint32_t *) RCC_CSR_RTCEN_BB = ENABLE)

+

+/** @brief Macro to disable the the RTC clock.

+  * @note  These macros must be used only after the RTC clock source was selected.

+  */

+#define __HAL_RCC_RTC_DISABLE()         (*(__IO uint32_t *) RCC_CSR_RTCEN_BB = DISABLE)

+

+/** @brief  Macro to force the Backup domain reset.

+  * @note   This function resets the RTC peripheral (including the backup registers)

+  *         and the RTC clock source selection in RCC_CSR register.

+  * @note   The BKPSRAM is not affected by this reset.

+  */

+#define __HAL_RCC_BACKUPRESET_FORCE()   (*(__IO uint32_t *) RCC_CSR_RTCRST_BB = ENABLE)

+

+/** @brief  Macros to release the Backup domain reset.

+  */

+#define __HAL_RCC_BACKUPRESET_RELEASE() (*(__IO uint32_t *) RCC_CSR_RTCRST_BB = DISABLE)

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_Flags_Interrupts_Management Flags Interrupts Management

+  * @brief macros to manage the specified RCC Flags and interrupts.

+  * @{

+  */

+

+/** @brief Enable RCC interrupt.

+  * @param  __INTERRUPT__ specifies the RCC interrupt sources to be enabled.

+  *          This parameter can be any combination of the following values:

+  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt

+  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt

+  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt

+  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt

+  *            @arg @ref RCC_IT_PLLRDY main PLL ready interrupt

+  *            @arg @ref RCC_IT_MSIRDY MSI ready interrupt

+  *            @arg @ref RCC_IT_LSECSS LSE CSS interrupt (not available for STM32L100xB || STM32L151xB || STM32L152xB devices)

+  */

+#define __HAL_RCC_ENABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS |= (__INTERRUPT__))

+

+/** @brief Disable RCC interrupt.

+  * @param  __INTERRUPT__ specifies the RCC interrupt sources to be disabled.

+  *          This parameter can be any combination of the following values:

+  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt

+  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt

+  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt

+  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt

+  *            @arg @ref RCC_IT_PLLRDY main PLL ready interrupt

+  *            @arg @ref RCC_IT_MSIRDY MSI ready interrupt

+  *            @arg @ref RCC_IT_LSECSS LSE CSS interrupt (not available for STM32L100xB || STM32L151xB || STM32L152xB devices)

+  */

+#define __HAL_RCC_DISABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS &= (uint8_t)(~(__INTERRUPT__)))

+

+/** @brief Clear the RCC's interrupt pending bits.

+  * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.

+  *          This parameter can be any combination of the following values:

+  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt.

+  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt.

+  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt.

+  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt.

+  *            @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt.

+  *            @arg @ref RCC_IT_MSIRDY MSI ready interrupt

+  *            @arg @ref RCC_IT_LSECSS LSE CSS interrupt (not available for STM32L100xB || STM32L151xB || STM32L152xB devices)

+  *            @arg @ref RCC_IT_CSS Clock Security System interrupt

+  */

+#define __HAL_RCC_CLEAR_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE2_ADDRESS = (__INTERRUPT__))

+

+/** @brief Check the RCC's interrupt has occurred or not.

+  * @param  __INTERRUPT__ specifies the RCC interrupt source to check.

+  *          This parameter can be one of the following values:

+  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt.

+  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt.

+  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt.

+  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt.

+  *            @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt.

+  *            @arg @ref RCC_IT_MSIRDY MSI ready interrupt

+  *            @arg @ref RCC_IT_LSECSS LSE CSS interrupt (not available for STM32L100xB || STM32L151xB || STM32L152xB devices)

+  *            @arg @ref RCC_IT_CSS Clock Security System interrupt

+  * @retval The new state of __INTERRUPT__ (TRUE or FALSE).

+  */

+#define __HAL_RCC_GET_IT(__INTERRUPT__) ((RCC->CIR & (__INTERRUPT__)) == (__INTERRUPT__))

+

+/** @brief Set RMVF bit to clear the reset flags.

+  *         The reset flags are RCC_FLAG_PINRST, RCC_FLAG_PORRST, RCC_FLAG_SFTRST,

+  *         RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, RCC_FLAG_LPWRRST

+  */

+#define __HAL_RCC_CLEAR_RESET_FLAGS() (RCC->CSR |= RCC_CSR_RMVF)

+

+/** @brief  Check RCC flag is set or not.

+  * @param  __FLAG__ specifies the flag to check.

+  *          This parameter can be one of the following values:

+  *            @arg @ref RCC_FLAG_HSIRDY HSI oscillator clock ready.

+  *            @arg @ref RCC_FLAG_MSIRDY MSI oscillator clock ready.

+  *            @arg @ref RCC_FLAG_HSERDY HSE oscillator clock ready.

+  *            @arg @ref RCC_FLAG_PLLRDY Main PLL clock ready.

+  *            @arg @ref RCC_FLAG_LSERDY LSE oscillator clock ready.

+  *            @arg @ref RCC_FLAG_LSECSS CSS on LSE failure Detection (*)

+  *            @arg @ref RCC_FLAG_LSIRDY LSI oscillator clock ready.

+  *            @arg @ref RCC_FLAG_OBLRST Option Byte Load reset

+  *            @arg @ref RCC_FLAG_PINRST  Pin reset.

+  *            @arg @ref RCC_FLAG_PORRST  POR/PDR reset.

+  *            @arg @ref RCC_FLAG_SFTRST  Software reset.

+  *            @arg @ref RCC_FLAG_IWDGRST Independent Watchdog reset.

+  *            @arg @ref RCC_FLAG_WWDGRST Window Watchdog reset.

+  *            @arg @ref RCC_FLAG_LPWRRST Low Power reset.

+  * @note (*) This bit is available in high and medium+ density devices only.

+  * @retval The new state of __FLAG__ (TRUE or FALSE).

+  */

+#define __HAL_RCC_GET_FLAG(__FLAG__) (((((__FLAG__) >> 5U) == CR_REG_INDEX)? RCC->CR :RCC->CSR) & (1U << ((__FLAG__) & RCC_FLAG_MASK)))

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Include RCC HAL Extension module */

+#include "stm32l1xx_hal_rcc_ex.h"

+

+/* Exported functions --------------------------------------------------------*/

+/** @addtogroup RCC_Exported_Functions

+  * @{

+  */

+

+/** @addtogroup RCC_Exported_Functions_Group1

+  * @{

+  */

+

+/* Initialization and de-initialization functions  ******************************/

+HAL_StatusTypeDef HAL_RCC_DeInit(void);

+HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct);

+HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t FLatency);

+

+/**

+  * @}

+  */

+

+/** @addtogroup RCC_Exported_Functions_Group2

+  * @{

+  */

+

+/* Peripheral Control functions  ************************************************/

+void              HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv);

+void              HAL_RCC_EnableCSS(void);

+/* CSS NMI IRQ handler */

+void              HAL_RCC_NMI_IRQHandler(void);

+/* User Callbacks in non blocking mode (IT mode) */

+void              HAL_RCC_CSSCallback(void);

+void              HAL_RCC_DisableCSS(void);

+uint32_t          HAL_RCC_GetSysClockFreq(void);

+uint32_t          HAL_RCC_GetHCLKFreq(void);

+uint32_t          HAL_RCC_GetPCLK1Freq(void);

+uint32_t          HAL_RCC_GetPCLK2Freq(void);

+void              HAL_RCC_GetOscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct);

+void              HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t *pFLatency);

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_HAL_RCC_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc_ex.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc_ex.h
new file mode 100644
index 0000000..96f5ea9
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_rcc_ex.h
@@ -0,0 +1,1030 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_rcc_ex.h

+  * @author  MCD Application Team

+  * @brief   Header file of RCC HAL Extension module.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright(c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_RCC_EX_H

+#define __STM32L1xx_HAL_RCC_EX_H

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup RCCEx

+  * @{

+  */

+

+/** @addtogroup RCCEx_Private_Constants

+ * @{

+ */

+

+#if defined(STM32L100xBA) || defined(STM32L151xBA) || defined(STM32L152xBA)\

+ || defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX)\

+ || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+/* Alias word address of LSECSSON bit */

+#define LSECSSON_BITNUMBER      RCC_CSR_LSECSSON_Pos

+#define CSR_LSECSSON_BB         ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (LSECSSON_BITNUMBER * 4U)))

+

+#endif /* STM32L100xBA || STM32L151xBA || STM32L152xBA || STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX*/

+

+/**

+  * @}

+  */

+

+/** @addtogroup RCCEx_Private_Macros

+  * @{

+  */

+#if defined(LCD)

+

+#define IS_RCC_PERIPHCLOCK(__CLK__) ((RCC_PERIPHCLK_RTC <= (__CLK__)) && ((__CLK__) <= RCC_PERIPHCLK_LCD))

+

+#else /* Not LCD LINE */

+

+#define IS_RCC_PERIPHCLOCK(__CLK__) ((__CLK__) == RCC_PERIPHCLK_RTC)

+

+#endif /* LCD */

+

+/**

+  * @}

+  */

+

+/* Exported types ------------------------------------------------------------*/

+

+/** @defgroup RCCEx_Exported_Types RCCEx Exported Types

+  * @{

+  */

+

+/**

+  * @brief  RCC extended clocks structure definition

+  */

+typedef struct

+{

+  uint32_t PeriphClockSelection;                /*!< The Extended Clock to be configured.

+                                      This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */

+

+  uint32_t RTCClockSelection;         /*!< specifies the RTC clock source.

+                                       This parameter can be a value of @ref RCC_RTC_LCD_Clock_Source */

+

+#if defined(LCD)

+

+  uint32_t LCDClockSelection;         /*!< specifies the LCD clock source.

+                                       This parameter can be a value of @ref RCC_RTC_LCD_Clock_Source */

+

+#endif /* LCD */

+} RCC_PeriphCLKInitTypeDef;

+

+/**

+  * @}

+  */

+

+/* Exported constants --------------------------------------------------------*/

+

+/** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants

+  * @{

+  */

+

+/** @defgroup RCCEx_Periph_Clock_Selection RCCEx Periph Clock Selection

+  * @{

+  */

+#define RCC_PERIPHCLK_RTC           (0x00000001U)

+

+#if defined(LCD)

+

+#define RCC_PERIPHCLK_LCD           (0x00000002U)

+

+#endif /* LCD */

+

+/**

+  * @}

+  */

+

+#if defined(RCC_LSECSS_SUPPORT)

+/** @defgroup RCCEx_EXTI_LINE_LSECSS  RCC LSE CSS external interrupt line

+  * @{

+  */

+#define RCC_EXTI_LINE_LSECSS             (EXTI_IMR_IM19)         /*!< External interrupt line 19 connected to the LSE CSS EXTI Line */

+/**

+  * @}

+  */

+#endif /* RCC_LSECSS_SUPPORT */

+

+/**

+  * @}

+  */

+

+/* Exported macro ------------------------------------------------------------*/

+/** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros

+ * @{

+ */

+

+/** @defgroup RCCEx_Peripheral_Clock_Enable_Disable RCCEx_Peripheral_Clock_Enable_Disable

+  * @brief  Enables or disables the AHB1 peripheral clock.

+  * @note   After reset, the peripheral clock (used for registers read/write access)

+  *         is disabled and the application software has to enable this clock before

+  *         using it.

+  * @{

+  */

+#if defined(STM32L151xB) || defined(STM32L152xB) || defined(STM32L151xBA)\

+ || defined(STM32L152xBA) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_GPIOE_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOEEN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOEEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_GPIOE_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_GPIOEEN))

+

+#endif /* STM32L151xB || STM32L152xB || ... || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_GPIOF_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOFEN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOFEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_GPIOG_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOGEN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOGEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+

+#define __HAL_RCC_GPIOF_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_GPIOFEN))

+#define __HAL_RCC_GPIOG_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_GPIOGEN))

+

+#endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_DMA2_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+

+#define __HAL_RCC_DMA2_CLK_DISABLE()    (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN))

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_AES_CLK_ENABLE()    do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_AESEN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_AESEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_AES_CLK_DISABLE()    (RCC->AHBENR &= ~(RCC_AHBENR_AESEN))

+

+#endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)

+

+#define __HAL_RCC_FSMC_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_FSMC_CLK_DISABLE()    (RCC->AHBENR &= ~(RCC_AHBENR_FSMCEN))

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+#if defined(STM32L100xB) || defined(STM32L100xBA) || defined(STM32L100xC)\

+ || defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD)\

+ || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_LCD_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_LCDEN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_LCDEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_LCD_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_LCDEN))

+

+#endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+/** @brief  Enables or disables the Low Speed APB (APB1) peripheral clock.

+  * @note   After reset, the peripheral clock (used for registers read/write access)

+  *         is disabled and the application software has to enable this clock before

+  *         using it.

+  */

+#if defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)\

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_TIM5_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_TIM5_CLK_DISABLE()    (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))

+

+#endif /* STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_SPI3_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_SPI3_CLK_DISABLE()    (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_UART4_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_UART5_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+

+#define __HAL_RCC_UART4_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))

+#define __HAL_RCC_UART5_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD || (...) || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE)\

+ || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)\

+ || defined(STM32L162xC) || defined(STM32L152xC) || defined(STM32L151xC)

+

+#define __HAL_RCC_OPAMP_CLK_ENABLE()      __HAL_RCC_COMP_CLK_ENABLE()   /* Peripherals COMP and OPAMP share the same clock domain */

+#define __HAL_RCC_OPAMP_CLK_DISABLE()     __HAL_RCC_COMP_CLK_DISABLE()  /* Peripherals COMP and OPAMP share the same clock domain */

+

+#endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || (...) || STM32L162xC || STM32L152xC || STM32L151xC */

+

+/** @brief  Enables or disables the High Speed APB (APB2) peripheral clock.

+  * @note   After reset, the peripheral clock (used for registers read/write access)

+  *         is disabled and the application software has to enable this clock before

+  *         using it.

+  */

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)

+

+#define __HAL_RCC_SDIO_CLK_ENABLE()   do { \

+                                        __IO uint32_t tmpreg; \

+                                        SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\

+                                        /* Delay after an RCC peripheral clock enabling */ \

+                                        tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\

+                                        UNUSED(tmpreg); \

+                                      } while(0U)

+#define __HAL_RCC_SDIO_CLK_DISABLE()    (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN))

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+/**

+    * @}

+    */

+

+

+/** @defgroup RCCEx_Force_Release_Peripheral_Reset RCCEx Force Release Peripheral Reset

+  * @brief  Forces or releases AHB peripheral reset.

+  * @{

+  */

+#if defined(STM32L151xB) || defined(STM32L152xB) || defined(STM32L151xBA)\

+ || defined(STM32L152xBA) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_GPIOE_FORCE_RESET()   (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOERST))

+#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOERST))

+

+#endif /* STM32L151xB || STM32L152xB || ... || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_GPIOF_FORCE_RESET()   (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOFRST))

+#define __HAL_RCC_GPIOG_FORCE_RESET()   (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOGRST))

+

+#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOFRST))

+#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOGRST))

+

+#endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_DMA2_FORCE_RESET()    (RCC->AHBRSTR |= (RCC_AHBRSTR_DMA2RST))

+#define __HAL_RCC_DMA2_RELEASE_RESET()  (RCC->AHBRSTR &= ~(RCC_AHBRSTR_DMA2RST))

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_AES_FORCE_RESET()     (RCC->AHBRSTR |= (RCC_AHBRSTR_AESRST))

+#define __HAL_RCC_AES_RELEASE_RESET()   (RCC->AHBRSTR &= ~(RCC_AHBRSTR_AESRST))

+

+#endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)

+

+#define __HAL_RCC_FSMC_FORCE_RESET()    (RCC->AHBRSTR |= (RCC_AHBRSTR_FSMCRST))

+#define __HAL_RCC_FSMC_RELEASE_RESET()  (RCC->AHBRSTR &= ~(RCC_AHBRSTR_FSMCRST))

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+#if defined(STM32L100xB) || defined(STM32L100xBA) || defined(STM32L100xC)\

+ || defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD)\

+ || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_LCD_FORCE_RESET()     (RCC->APB1RSTR |= (RCC_APB1RSTR_LCDRST))

+#define __HAL_RCC_LCD_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_LCDRST))

+

+#endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+/** @brief  Forces or releases APB1 peripheral reset.

+  */

+#if defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)\

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_TIM5_FORCE_RESET()    (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))

+#define __HAL_RCC_TIM5_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))

+

+#endif /* STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_SPI3_FORCE_RESET()    (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))

+#define __HAL_RCC_SPI3_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_UART4_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))

+#define __HAL_RCC_UART5_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))

+

+#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))

+#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)\

+ || defined(STM32L162xC) || defined(STM32L152xC) || defined(STM32L151xC)

+

+#define __HAL_RCC_OPAMP_FORCE_RESET()     __HAL_RCC_COMP_FORCE_RESET()   /* Peripherals COMP and OPAMP share the same clock domain */

+#define __HAL_RCC_OPAMP_RELEASE_RESET()   __HAL_RCC_COMP_RELEASE_RESET() /* Peripherals COMP and OPAMP share the same clock domain */

+

+#endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xC || STM32L152xC || STM32L151xC */

+

+/** @brief  Forces or releases APB2 peripheral reset.

+  */

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)

+

+#define __HAL_RCC_SDIO_FORCE_RESET()    (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST))

+#define __HAL_RCC_SDIO_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST))

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCCEx_Peripheral_Clock_Sleep_Enable_Disable RCCEx Peripheral Clock Sleep Enable Disable

+  * @brief  Enables or disables the AHB1 peripheral clock during Low Power (Sleep) mode.

+  * @note   Peripheral clock gating in SLEEP mode can be used to further reduce

+  *         power consumption.

+  * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.

+  * @note   By default, all peripheral clocks are enabled during SLEEP mode.

+  * @{

+  */

+#if defined(STM32L151xB) || defined(STM32L152xB) || defined(STM32L151xBA)\

+ || defined(STM32L152xBA) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE()  (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOELPEN))

+#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOELPEN))

+

+#endif /* STM32L151xB || STM32L152xB || ... || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE()  (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOFLPEN))

+#define __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE()  (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOGLPEN))

+

+#define __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOFLPEN))

+#define __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOGLPEN))

+

+#endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_DMA2_CLK_SLEEP_ENABLE()   (RCC->AHBLPENR |= (RCC_AHBLPENR_DMA2LPEN))

+#define __HAL_RCC_DMA2_CLK_SLEEP_DISABLE()  (RCC->AHBLPENR &= ~(RCC_AHBLPENR_DMA2LPEN))

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_AES_CLK_SLEEP_ENABLE()    (RCC->AHBLPENR |= (RCC_AHBLPENR_AESLPEN))

+#define __HAL_RCC_AES_CLK_SLEEP_DISABLE()   (RCC->AHBLPENR &= ~(RCC_AHBLPENR_AESLPEN))

+

+#endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)

+

+#define __HAL_RCC_FSMC_CLK_SLEEP_ENABLE()   (RCC->AHBLPENR |= (RCC_AHBLPENR_FSMCLPEN))

+#define __HAL_RCC_FSMC_CLK_SLEEP_DISABLE()  (RCC->AHBLPENR &= ~(RCC_AHBLPENR_FSMCLPEN))

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+#if defined(STM32L100xB) || defined(STM32L100xBA) || defined(STM32L100xC)\

+ || defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD)\

+ || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_LCD_CLK_SLEEP_ENABLE()    (RCC->APB1LPENR |= (RCC_APB1LPENR_LCDLPEN))

+#define __HAL_RCC_LCD_CLK_SLEEP_DISABLE()   (RCC->APB1LPENR &= ~(RCC_APB1LPENR_LCDLPEN))

+

+#endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+/** @brief  Enables or disables the APB1 peripheral clock during Low Power (Sleep) mode.

+  * @note   Peripheral clock gating in SLEEP mode can be used to further reduce

+  *           power consumption.

+  * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.

+  * @note   By default, all peripheral clocks are enabled during SLEEP mode.

+  */

+#if defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)\

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_TIM5_CLK_SLEEP_ENABLE()   (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM5LPEN))

+#define __HAL_RCC_TIM5_CLK_SLEEP_DISABLE()  (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM5LPEN))

+

+#endif /* STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE()   (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN))

+#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE()  (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN))

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_UART4_CLK_SLEEP_ENABLE()  (RCC->APB1LPENR |= (RCC_APB1LPENR_UART4LPEN))

+#define __HAL_RCC_UART5_CLK_SLEEP_ENABLE()  (RCC->APB1LPENR |= (RCC_APB1LPENR_UART5LPEN))

+

+#define __HAL_RCC_UART4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART4LPEN))

+#define __HAL_RCC_UART5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART5LPEN))

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)\

+ || defined(STM32L162xC) || defined(STM32L152xC) || defined(STM32L151xC)

+

+#define __HAL_RCC_OPAMP_CLK_SLEEP_ENABLE()      __HAL_RCC_COMP_CLK_SLEEP_ENABLE()   /* Peripherals COMP and OPAMP share the same clock domain */

+#define __HAL_RCC_OPAMP_CLK_SLEEP_DISABLE()     __HAL_RCC_COMP_CLK_SLEEP_DISABLE()  /* Peripherals COMP and OPAMP share the same clock domain */

+

+#endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xC || STM32L152xC || STM32L151xC */

+

+/** @brief  Enables or disables the APB2 peripheral clock during Low Power (Sleep) mode.

+  * @note   Peripheral clock gating in SLEEP mode can be used to further reduce

+  *           power consumption.

+  * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.

+  * @note   By default, all peripheral clocks are enabled during SLEEP mode.

+  */

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)

+

+#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE()   (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN))

+#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE()  (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN))

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCCEx_Peripheral_Clock_Enable_Disable_Status Peripheral Clock Enable Disable Status

+  * @brief  Get the enable or disable status of peripheral clock.

+  * @note   After reset, the peripheral clock (used for registers read/write access)

+  *         is disabled and the application software has to enable this clock before

+  *         using it.

+  * @{

+  */

+

+#if defined(STM32L151xB) || defined(STM32L152xB) || defined(STM32L151xBA)\

+ || defined(STM32L152xBA) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_GPIOE_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_GPIOEEN)) != 0U)

+#define __HAL_RCC_GPIOE_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_GPIOEEN)) == 0U)

+

+#endif /* STM32L151xB || STM32L152xB || ... || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_GPIOF_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_GPIOFEN)) != 0U)

+#define __HAL_RCC_GPIOG_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_GPIOGEN)) != 0U)

+#define __HAL_RCC_GPIOF_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_GPIOFEN)) == 0U)

+#define __HAL_RCC_GPIOG_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_GPIOGEN)) == 0U)

+

+#endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_DMA2_IS_CLK_ENABLED()        ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) != 0U)

+#define __HAL_RCC_DMA2_IS_CLK_DISABLED()       ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) == 0U)

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_AES_IS_CLK_ENABLED()        ((RCC->AHBENR & (RCC_AHBENR_AESEN)) != 0U)

+#define __HAL_RCC_AES_IS_CLK_DISABLED()       ((RCC->AHBENR & (RCC_AHBENR_AESEN)) == 0U)

+

+#endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)

+

+#define __HAL_RCC_FSMC_IS_CLK_ENABLED()        ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) != 0U)

+#define __HAL_RCC_FSMC_IS_CLK_DISABLED()       ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) == 0U)

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+#if defined(STM32L100xB) || defined(STM32L100xBA) || defined(STM32L100xC)\

+ || defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD)\

+ || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_LCD_IS_CLK_ENABLED()         ((RCC->APB1ENR & (RCC_APB1ENR_LCDEN)) != 0U)

+#define __HAL_RCC_LCD_IS_CLK_DISABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_LCDEN)) == 0U)

+

+#endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)\

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_TIM5_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != 0U)

+#define __HAL_RCC_TIM5_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == 0U)

+

+#endif /* STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_SPI3_IS_CLK_ENABLED()        ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != 0U)

+#define __HAL_RCC_SPI3_IS_CLK_DISABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == 0U)

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_UART4_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != 0U)

+#define __HAL_RCC_UART5_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != 0U)

+#define __HAL_RCC_UART4_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == 0U)

+#define __HAL_RCC_UART5_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == 0U)

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)\

+ || defined(STM32L162xC) || defined(STM32L152xC) || defined(STM32L151xC)

+

+#define __HAL_RCC_OPAMP_IS_CLK_ENABLED()       __HAL_RCC_COMP_IS_CLK_ENABLED()

+#define __HAL_RCC_OPAMP_IS_CLK_DISABLED()      __HAL_RCC_COMP_IS_CLK_DISABLED()

+

+#endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xC || STM32L152xC || STM32L151xC */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)

+

+#define __HAL_RCC_SDIO_IS_CLK_ENABLED()        ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != 0U)

+#define __HAL_RCC_SDIO_IS_CLK_DISABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == 0U)

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+/**

+  * @}

+  */

+

+/** @defgroup RCCEx_Peripheral_Clock_Sleep_Enable_Disable_Status Peripheral Clock Sleep Enable Disable Status

+  * @brief  Get the enable or disable status of peripheral clock during Low Power (Sleep) mode.

+  * @note   Peripheral clock gating in SLEEP mode can be used to further reduce

+  *         power consumption.

+  * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.

+  * @note   By default, all peripheral clocks are enabled during SLEEP mode.

+  * @{

+  */

+

+#if defined(STM32L151xB) || defined(STM32L152xB) || defined(STM32L151xBA)\

+ || defined(STM32L152xBA) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_GPIOE_IS_CLK_SLEEP_ENABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOELPEN)) != 0U)

+#define __HAL_RCC_GPIOE_IS_CLK_SLEEP_DISABLED()      ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOELPEN)) == 0U)

+

+#endif /* STM32L151xB || STM32L152xB || ... || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_GPIOF_IS_CLK_SLEEP_ENABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOFLPEN)) != 0U)

+#define __HAL_RCC_GPIOG_IS_CLK_SLEEP_ENABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOGLPEN)) != 0U)

+#define __HAL_RCC_GPIOF_IS_CLK_SLEEP_DISABLED()      ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOFLPEN)) == 0U)

+#define __HAL_RCC_GPIOG_IS_CLK_SLEEP_DISABLED()      ((RCC->AHBLPENR & (RCC_AHBLPENR_GPIOGLPEN)) == 0U)

+

+#endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_DMA2_IS_CLK_SLEEP_ENABLED()        ((RCC->AHBLPENR & (RCC_AHBLPENR_DMA2LPEN)) != 0U)

+#define __HAL_RCC_DMA2_IS_CLK_SLEEP_DISABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_DMA2LPEN)) == 0U)

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_AES_IS_CLK_SLEEP_ENABLED()        ((RCC->AHBLPENR & (RCC_AHBLPENR_AESLPEN)) != 0U)

+#define __HAL_RCC_AES_IS_CLK_SLEEP_DISABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_AESLPEN)) == 0U)

+

+#endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)

+

+#define __HAL_RCC_FSMC_IS_CLK_SLEEP_ENABLED()        ((RCC->AHBLPENR & (RCC_AHBLPENR_FSMCLPEN)) != 0U)

+#define __HAL_RCC_FSMC_IS_CLK_SLEEP_DISABLED()       ((RCC->AHBLPENR & (RCC_AHBLPENR_FSMCLPEN)) == 0U)

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+#if defined(STM32L100xB) || defined(STM32L100xBA) || defined(STM32L100xC)\

+ || defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD)\

+ || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_LCD_IS_CLK_SLEEP_ENABLED()         ((RCC->APB1LPENR & (RCC_APB1LPENR_LCDLPEN)) != 0U)

+#define __HAL_RCC_LCD_IS_CLK_SLEEP_DISABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_LCDLPEN)) == 0U)

+

+#endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)\

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_TIM5_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM5LPEN)) != 0U)

+#define __HAL_RCC_TIM5_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_TIM5LPEN)) == 0U)

+

+#endif /* STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC)\

+ || defined(STM32L162xC) || defined(STM32L151xCA) || defined(STM32L151xD)\

+ || defined(STM32L152xCA) || defined(STM32L152xD) || defined(STM32L162xCA)\

+ || defined(STM32L162xD) || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX)\

+ || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_SPI3_IS_CLK_SLEEP_ENABLED()        ((RCC->APB1LPENR & (RCC_APB1LPENR_SPI3LPEN)) != 0U)

+#define __HAL_RCC_SPI3_IS_CLK_SLEEP_DISABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_SPI3LPEN)) == 0U)

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)

+

+#define __HAL_RCC_UART4_IS_CLK_SLEEP_ENABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_UART4LPEN)) != 0U)

+#define __HAL_RCC_UART5_IS_CLK_SLEEP_ENABLED()       ((RCC->APB1LPENR & (RCC_APB1LPENR_UART5LPEN)) != 0U)

+#define __HAL_RCC_UART4_IS_CLK_SLEEP_DISABLED()      ((RCC->APB1LPENR & (RCC_APB1LPENR_UART4LPEN)) == 0U)

+#define __HAL_RCC_UART5_IS_CLK_SLEEP_DISABLED()      ((RCC->APB1LPENR & (RCC_APB1LPENR_UART5LPEN)) == 0U)

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xDX */

+

+#if defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L152xCA)\

+ || defined(STM32L152xD) || defined(STM32L162xCA) || defined(STM32L162xD)\

+ || defined(STM32L151xE) || defined(STM32L151xDX) || defined(STM32L152xE) || defined(STM32L152xDX) || defined(STM32L162xE) || defined(STM32L162xDX)\

+ || defined(STM32L162xC) || defined(STM32L152xC) || defined(STM32L151xC)

+

+#define __HAL_RCC_OPAMP_IS_CLK_SLEEP_ENABLED()       __HAL_RCC_COMP_IS_CLK_SLEEP_ENABLED()

+#define __HAL_RCC_OPAMP_IS_CLK_SLEEP_DISABLED()      __HAL_RCC_COMP_IS_CLK_SLEEP_DISABLED()

+

+#endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L151xDX || STM32L152xE || STM32L152xDX || STM32L162xE || STM32L162xC || STM32L152xC || STM32L151xC */

+

+#if defined(STM32L151xD) || defined(STM32L152xD) || defined(STM32L162xD)

+

+#define __HAL_RCC_SDIO_IS_CLK_SLEEP_ENABLED()        ((RCC->APB2LPENR & (RCC_APB2LPENR_SDIOLPEN)) != 0U)

+#define __HAL_RCC_SDIO_IS_CLK_SLEEP_DISABLED()       ((RCC->APB2LPENR & (RCC_APB2LPENR_SDIOLPEN)) == 0U)

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD */

+

+/**

+  * @}

+  */

+

+

+#if defined(RCC_LSECSS_SUPPORT)

+

+/**

+  * @brief Enable interrupt on RCC LSE CSS EXTI Line 19.

+  * @retval None

+  */

+#define __HAL_RCC_LSECSS_EXTI_ENABLE_IT()      SET_BIT(EXTI->IMR, RCC_EXTI_LINE_LSECSS)

+

+/**

+  * @brief Disable interrupt on RCC LSE CSS EXTI Line 19.

+  * @retval None

+  */

+#define __HAL_RCC_LSECSS_EXTI_DISABLE_IT()     CLEAR_BIT(EXTI->IMR, RCC_EXTI_LINE_LSECSS)

+

+/**

+  * @brief Enable event on RCC LSE CSS EXTI Line 19.

+  * @retval None.

+  */

+#define __HAL_RCC_LSECSS_EXTI_ENABLE_EVENT()   SET_BIT(EXTI->EMR, RCC_EXTI_LINE_LSECSS)

+

+/**

+  * @brief Disable event on RCC LSE CSS EXTI Line 19.

+  * @retval None.

+  */

+#define __HAL_RCC_LSECSS_EXTI_DISABLE_EVENT()  CLEAR_BIT(EXTI->EMR, RCC_EXTI_LINE_LSECSS)

+

+

+/**

+  * @brief  RCC LSE CSS EXTI line configuration: set falling edge trigger.

+  * @retval None.

+  */

+#define __HAL_RCC_LSECSS_EXTI_ENABLE_FALLING_EDGE()  SET_BIT(EXTI->FTSR, RCC_EXTI_LINE_LSECSS)

+

+

+/**

+  * @brief Disable the RCC LSE CSS Extended Interrupt Falling Trigger.

+  * @retval None.

+  */

+#define __HAL_RCC_LSECSS_EXTI_DISABLE_FALLING_EDGE()  CLEAR_BIT(EXTI->FTSR, RCC_EXTI_LINE_LSECSS)

+

+

+/**

+  * @brief  RCC LSE CSS EXTI line configuration: set rising edge trigger.

+  * @retval None.

+  */

+#define __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE()   SET_BIT(EXTI->RTSR, RCC_EXTI_LINE_LSECSS)

+

+/**

+  * @brief Disable the RCC LSE CSS Extended Interrupt Rising Trigger.

+  * @retval None.

+  */

+#define __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_EDGE()  CLEAR_BIT(EXTI->RTSR, RCC_EXTI_LINE_LSECSS)

+

+/**

+  * @brief  RCC LSE CSS EXTI line configuration: set rising & falling edge trigger.

+  * @retval None.

+  */

+#define __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_FALLING_EDGE()  \

+  do {                                                      \

+    __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE();             \

+    __HAL_RCC_LSECSS_EXTI_ENABLE_FALLING_EDGE();            \

+  } while(0U)

+

+/**

+  * @brief Disable the RCC LSE CSS Extended Interrupt Rising & Falling Trigger.

+  * @retval None.

+  */

+#define __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_FALLING_EDGE()  \

+  do {                                                       \

+    __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_EDGE();             \

+    __HAL_RCC_LSECSS_EXTI_DISABLE_FALLING_EDGE();            \

+  } while(0U)

+

+/**

+  * @brief Check whether the specified RCC LSE CSS EXTI interrupt flag is set or not.

+  * @retval EXTI RCC LSE CSS Line Status.

+  */

+#define __HAL_RCC_LSECSS_EXTI_GET_FLAG()       (EXTI->PR & (RCC_EXTI_LINE_LSECSS))

+

+/**

+  * @brief Clear the RCC LSE CSS EXTI flag.

+  * @retval None.

+  */

+#define __HAL_RCC_LSECSS_EXTI_CLEAR_FLAG()     (EXTI->PR = (RCC_EXTI_LINE_LSECSS))

+

+/**

+  * @brief Generate a Software interrupt on selected EXTI line.

+  * @retval None.

+  */

+#define __HAL_RCC_LSECSS_EXTI_GENERATE_SWIT()  SET_BIT(EXTI->SWIER, RCC_EXTI_LINE_LSECSS)

+

+#endif /* RCC_LSECSS_SUPPORT */

+

+#if defined(LCD)

+

+/** @defgroup RCCEx_LCD_Configuration LCD Configuration

+  * @brief  Macros to configure clock source of LCD peripherals.

+  * @{

+  */

+

+/** @brief Macro to configures LCD clock (LCDCLK).

+  *  @note   LCD and RTC use the same configuration

+  *  @note   LCD can however be used in the Stop low power mode if the LSE or LSI is used as the

+  *          LCD clock source.

+  *

+  *  @param  __LCD_CLKSOURCE__ specifies the LCD clock source.

+  *          This parameter can be one of the following values:

+  *             @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as LCD clock

+  *             @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as LCD clock

+  *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV2 HSE divided by 2 selected as LCD clock

+  *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV4 HSE divided by 4 selected as LCD clock

+  *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV8 HSE divided by 8 selected as LCD clock

+  *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV16 HSE divided by 16 selected as LCD clock

+  */

+#define __HAL_RCC_LCD_CONFIG(__LCD_CLKSOURCE__) __HAL_RCC_RTC_CONFIG(__LCD_CLKSOURCE__)

+

+/** @brief Macro to get the LCD clock source.

+  */

+#define __HAL_RCC_GET_LCD_SOURCE()              __HAL_RCC_GET_RTC_SOURCE()

+

+/** @brief Macro to get the LCD clock pre-scaler.

+  */

+#define  __HAL_RCC_GET_LCD_HSE_PRESCALER()      __HAL_RCC_GET_RTC_HSE_PRESCALER()

+

+/**

+  * @}

+  */

+

+#endif /* LCD */

+

+

+/**

+  * @}

+  */

+

+/* Exported functions --------------------------------------------------------*/

+/** @addtogroup RCCEx_Exported_Functions

+  * @{

+  */

+

+/** @addtogroup RCCEx_Exported_Functions_Group1

+  * @{

+  */

+

+HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit);

+void              HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit);

+uint32_t          HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk);

+

+#if defined(RCC_LSECSS_SUPPORT)

+

+void              HAL_RCCEx_EnableLSECSS(void);

+void              HAL_RCCEx_DisableLSECSS(void);

+void              HAL_RCCEx_EnableLSECSS_IT(void);

+void              HAL_RCCEx_LSECSS_IRQHandler(void);

+void              HAL_RCCEx_LSECSS_Callback(void);

+

+#endif /* RCC_LSECSS_SUPPORT */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_HAL_RCC_EX_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_tim.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_tim.h
new file mode 100644
index 0000000..536a67d
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_tim.h
@@ -0,0 +1,1703 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_tim.h

+  * @author  MCD Application Team

+  * @brief   Header file of TIM HAL module.

+  ******************************************************************************

+    * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef STM32L1xx_HAL_TIM_H

+#define STM32L1xx_HAL_TIM_H

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup TIM

+  * @{

+  */

+

+/* Exported types ------------------------------------------------------------*/

+/** @defgroup TIM_Exported_Types TIM Exported Types

+  * @{

+  */

+

+/**

+  * @brief  TIM Time base Configuration Structure definition

+  */

+typedef struct

+{

+  uint32_t Prescaler;         /*!< Specifies the prescaler value used to divide the TIM clock.

+                                   This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */

+

+  uint32_t CounterMode;       /*!< Specifies the counter mode.

+                                   This parameter can be a value of @ref TIM_Counter_Mode */

+

+  uint32_t Period;            /*!< Specifies the period value to be loaded into the active

+                                   Auto-Reload Register at the next update event.

+                                   This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF.  */

+

+  uint32_t ClockDivision;     /*!< Specifies the clock division.

+                                   This parameter can be a value of @ref TIM_ClockDivision */

+

+  uint32_t AutoReloadPreload;  /*!< Specifies the auto-reload preload.

+                                   This parameter can be a value of @ref TIM_AutoReloadPreload */

+} TIM_Base_InitTypeDef;

+

+/**

+  * @brief  TIM Output Compare Configuration Structure definition

+  */

+typedef struct

+{

+  uint32_t OCMode;        /*!< Specifies the TIM mode.

+                               This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */

+

+  uint32_t Pulse;         /*!< Specifies the pulse value to be loaded into the Capture Compare Register.

+                               This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */

+

+  uint32_t OCPolarity;    /*!< Specifies the output polarity.

+                               This parameter can be a value of @ref TIM_Output_Compare_Polarity */

+

+  uint32_t OCFastMode;    /*!< Specifies the Fast mode state.

+                               This parameter can be a value of @ref TIM_Output_Fast_State

+                               @note This parameter is valid only in PWM1 and PWM2 mode. */

+} TIM_OC_InitTypeDef;

+

+/**

+  * @brief  TIM One Pulse Mode Configuration Structure definition

+  */

+typedef struct

+{

+  uint32_t OCMode;        /*!< Specifies the TIM mode.

+                               This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */

+

+  uint32_t Pulse;         /*!< Specifies the pulse value to be loaded into the Capture Compare Register.

+                               This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */

+

+  uint32_t OCPolarity;    /*!< Specifies the output polarity.

+                               This parameter can be a value of @ref TIM_Output_Compare_Polarity */

+

+  uint32_t ICPolarity;    /*!< Specifies the active edge of the input signal.

+                               This parameter can be a value of @ref TIM_Input_Capture_Polarity */

+

+  uint32_t ICSelection;   /*!< Specifies the input.

+                              This parameter can be a value of @ref TIM_Input_Capture_Selection */

+

+  uint32_t ICFilter;      /*!< Specifies the input capture filter.

+                              This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */

+} TIM_OnePulse_InitTypeDef;

+

+/**

+  * @brief  TIM Input Capture Configuration Structure definition

+  */

+typedef struct

+{

+  uint32_t  ICPolarity;  /*!< Specifies the active edge of the input signal.

+                              This parameter can be a value of @ref TIM_Input_Capture_Polarity */

+

+  uint32_t ICSelection;  /*!< Specifies the input.

+                              This parameter can be a value of @ref TIM_Input_Capture_Selection */

+

+  uint32_t ICPrescaler;  /*!< Specifies the Input Capture Prescaler.

+                              This parameter can be a value of @ref TIM_Input_Capture_Prescaler */

+

+  uint32_t ICFilter;     /*!< Specifies the input capture filter.

+                              This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */

+} TIM_IC_InitTypeDef;

+

+/**

+  * @brief  TIM Encoder Configuration Structure definition

+  */

+typedef struct

+{

+  uint32_t EncoderMode;   /*!< Specifies the active edge of the input signal.

+                               This parameter can be a value of @ref TIM_Encoder_Mode */

+

+  uint32_t IC1Polarity;   /*!< Specifies the active edge of the input signal.

+                               This parameter can be a value of @ref TIM_Input_Capture_Polarity */

+

+  uint32_t IC1Selection;  /*!< Specifies the input.

+                               This parameter can be a value of @ref TIM_Input_Capture_Selection */

+

+  uint32_t IC1Prescaler;  /*!< Specifies the Input Capture Prescaler.

+                               This parameter can be a value of @ref TIM_Input_Capture_Prescaler */

+

+  uint32_t IC1Filter;     /*!< Specifies the input capture filter.

+                               This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */

+

+  uint32_t IC2Polarity;   /*!< Specifies the active edge of the input signal.

+                               This parameter can be a value of @ref TIM_Input_Capture_Polarity */

+

+  uint32_t IC2Selection;  /*!< Specifies the input.

+                              This parameter can be a value of @ref TIM_Input_Capture_Selection */

+

+  uint32_t IC2Prescaler;  /*!< Specifies the Input Capture Prescaler.

+                               This parameter can be a value of @ref TIM_Input_Capture_Prescaler */

+

+  uint32_t IC2Filter;     /*!< Specifies the input capture filter.

+                               This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */

+} TIM_Encoder_InitTypeDef;

+

+/**

+  * @brief  Clock Configuration Handle Structure definition

+  */

+typedef struct

+{

+  uint32_t ClockSource;     /*!< TIM clock sources

+                                 This parameter can be a value of @ref TIM_Clock_Source */

+  uint32_t ClockPolarity;   /*!< TIM clock polarity

+                                 This parameter can be a value of @ref TIM_Clock_Polarity */

+  uint32_t ClockPrescaler;  /*!< TIM clock prescaler

+                                 This parameter can be a value of @ref TIM_Clock_Prescaler */

+  uint32_t ClockFilter;     /*!< TIM clock filter

+                                 This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */

+} TIM_ClockConfigTypeDef;

+

+/**

+  * @brief  TIM Clear Input Configuration Handle Structure definition

+  */

+typedef struct

+{

+  uint32_t ClearInputState;      /*!< TIM clear Input state

+                                      This parameter can be ENABLE or DISABLE */

+  uint32_t ClearInputSource;     /*!< TIM clear Input sources

+                                      This parameter can be a value of @ref TIM_ClearInput_Source */

+  uint32_t ClearInputPolarity;   /*!< TIM Clear Input polarity

+                                      This parameter can be a value of @ref TIM_ClearInput_Polarity */

+  uint32_t ClearInputPrescaler;  /*!< TIM Clear Input prescaler

+                                      This parameter must be 0: When OCRef clear feature is used with ETR source, ETR prescaler must be off */

+  uint32_t ClearInputFilter;     /*!< TIM Clear Input filter

+                                      This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */

+} TIM_ClearInputConfigTypeDef;

+

+/**

+  * @brief  TIM Master configuration Structure definition

+  */

+typedef struct

+{

+  uint32_t  MasterOutputTrigger;   /*!< Trigger output (TRGO) selection

+                                        This parameter can be a value of @ref TIM_Master_Mode_Selection */

+  uint32_t  MasterSlaveMode;       /*!< Master/slave mode selection

+                                        This parameter can be a value of @ref TIM_Master_Slave_Mode */

+} TIM_MasterConfigTypeDef;

+

+/**

+  * @brief  TIM Slave configuration Structure definition

+  */

+typedef struct

+{

+  uint32_t  SlaveMode;         /*!< Slave mode selection

+                                    This parameter can be a value of @ref TIM_Slave_Mode */

+  uint32_t  InputTrigger;      /*!< Input Trigger source

+                                    This parameter can be a value of @ref TIM_Trigger_Selection */

+  uint32_t  TriggerPolarity;   /*!< Input Trigger polarity

+                                    This parameter can be a value of @ref TIM_Trigger_Polarity */

+  uint32_t  TriggerPrescaler;  /*!< Input trigger prescaler

+                                    This parameter can be a value of @ref TIM_Trigger_Prescaler */

+  uint32_t  TriggerFilter;     /*!< Input trigger filter

+                                    This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF  */

+

+} TIM_SlaveConfigTypeDef;

+

+/**

+  * @brief  HAL State structures definition

+  */

+typedef enum

+{

+  HAL_TIM_STATE_RESET             = 0x00U,    /*!< Peripheral not yet initialized or disabled  */

+  HAL_TIM_STATE_READY             = 0x01U,    /*!< Peripheral Initialized and ready for use    */

+  HAL_TIM_STATE_BUSY              = 0x02U,    /*!< An internal process is ongoing              */

+  HAL_TIM_STATE_TIMEOUT           = 0x03U,    /*!< Timeout state                               */

+  HAL_TIM_STATE_ERROR             = 0x04U     /*!< Reception process is ongoing                */

+} HAL_TIM_StateTypeDef;

+

+/**

+  * @brief  HAL Active channel structures definition

+  */

+typedef enum

+{

+  HAL_TIM_ACTIVE_CHANNEL_1        = 0x01U,    /*!< The active channel is 1     */

+  HAL_TIM_ACTIVE_CHANNEL_2        = 0x02U,    /*!< The active channel is 2     */

+  HAL_TIM_ACTIVE_CHANNEL_3        = 0x04U,    /*!< The active channel is 3     */

+  HAL_TIM_ACTIVE_CHANNEL_4        = 0x08U,    /*!< The active channel is 4     */

+  HAL_TIM_ACTIVE_CHANNEL_CLEARED  = 0x00U     /*!< All active channels cleared */

+} HAL_TIM_ActiveChannel;

+

+/**

+  * @brief  TIM Time Base Handle Structure definition

+  */

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+typedef struct __TIM_HandleTypeDef

+#else

+typedef struct

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+{

+  TIM_TypeDef                 *Instance;     /*!< Register base address             */

+  TIM_Base_InitTypeDef        Init;          /*!< TIM Time Base required parameters */

+  HAL_TIM_ActiveChannel       Channel;       /*!< Active channel                    */

+  DMA_HandleTypeDef           *hdma[7];      /*!< DMA Handlers array

+                                                  This array is accessed by a @ref DMA_Handle_index */

+  HAL_LockTypeDef             Lock;          /*!< Locking object                    */

+  __IO HAL_TIM_StateTypeDef   State;         /*!< TIM operation state               */

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  void (* Base_MspInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM Base Msp Init Callback                              */

+  void (* Base_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);            /*!< TIM Base Msp DeInit Callback                            */

+  void (* IC_MspInitCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM IC Msp Init Callback                                */

+  void (* IC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM IC Msp DeInit Callback                              */

+  void (* OC_MspInitCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM OC Msp Init Callback                                */

+  void (* OC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM OC Msp DeInit Callback                              */

+  void (* PWM_MspInitCallback)(struct __TIM_HandleTypeDef *htim);               /*!< TIM PWM Msp Init Callback                               */

+  void (* PWM_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);             /*!< TIM PWM Msp DeInit Callback                             */

+  void (* OnePulse_MspInitCallback)(struct __TIM_HandleTypeDef *htim);          /*!< TIM One Pulse Msp Init Callback                         */

+  void (* OnePulse_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM One Pulse Msp DeInit Callback                       */

+  void (* Encoder_MspInitCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Encoder Msp Init Callback                           */

+  void (* Encoder_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);         /*!< TIM Encoder Msp DeInit Callback                         */

+  void (* PeriodElapsedCallback)(struct __TIM_HandleTypeDef *htim);             /*!< TIM Period Elapsed Callback                             */

+  void (* PeriodElapsedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);     /*!< TIM Period Elapsed half complete Callback               */

+  void (* TriggerCallback)(struct __TIM_HandleTypeDef *htim);                   /*!< TIM Trigger Callback                                    */

+  void (* TriggerHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Trigger half complete Callback                      */

+  void (* IC_CaptureCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM Input Capture Callback                              */

+  void (* IC_CaptureHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM Input Capture half complete Callback                */

+  void (* OC_DelayElapsedCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Output Compare Delay Elapsed Callback               */

+  void (* PWM_PulseFinishedCallback)(struct __TIM_HandleTypeDef *htim);         /*!< TIM PWM Pulse Finished Callback                         */

+  void (* PWM_PulseFinishedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished half complete Callback           */

+  void (* ErrorCallback)(struct __TIM_HandleTypeDef *htim);                     /*!< TIM Error Callback                                      */

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+} TIM_HandleTypeDef;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+/**

+  * @brief  HAL TIM Callback ID enumeration definition

+  */

+typedef enum

+{

+   HAL_TIM_BASE_MSPINIT_CB_ID            = 0x00U    /*!< TIM Base MspInit Callback ID                              */

+  ,HAL_TIM_BASE_MSPDEINIT_CB_ID          = 0x01U    /*!< TIM Base MspDeInit Callback ID                            */

+  ,HAL_TIM_IC_MSPINIT_CB_ID              = 0x02U    /*!< TIM IC MspInit Callback ID                                */

+  ,HAL_TIM_IC_MSPDEINIT_CB_ID            = 0x03U    /*!< TIM IC MspDeInit Callback ID                              */

+  ,HAL_TIM_OC_MSPINIT_CB_ID              = 0x04U    /*!< TIM OC MspInit Callback ID                                */

+  ,HAL_TIM_OC_MSPDEINIT_CB_ID            = 0x05U    /*!< TIM OC MspDeInit Callback ID                              */

+  ,HAL_TIM_PWM_MSPINIT_CB_ID             = 0x06U    /*!< TIM PWM MspInit Callback ID                               */

+  ,HAL_TIM_PWM_MSPDEINIT_CB_ID           = 0x07U    /*!< TIM PWM MspDeInit Callback ID                             */

+  ,HAL_TIM_ONE_PULSE_MSPINIT_CB_ID       = 0x08U    /*!< TIM One Pulse MspInit Callback ID                         */

+  ,HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID     = 0x09U    /*!< TIM One Pulse MspDeInit Callback ID                       */

+  ,HAL_TIM_ENCODER_MSPINIT_CB_ID         = 0x0AU    /*!< TIM Encoder MspInit Callback ID                           */

+  ,HAL_TIM_ENCODER_MSPDEINIT_CB_ID       = 0x0BU    /*!< TIM Encoder MspDeInit Callback ID                         */

+  ,HAL_TIM_PERIOD_ELAPSED_CB_ID          = 0x0EU    /*!< TIM Period Elapsed Callback ID                             */

+  ,HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID     = 0x0FU    /*!< TIM Period Elapsed half complete Callback ID               */

+  ,HAL_TIM_TRIGGER_CB_ID                 = 0x10U    /*!< TIM Trigger Callback ID                                    */

+  ,HAL_TIM_TRIGGER_HALF_CB_ID            = 0x11U    /*!< TIM Trigger half complete Callback ID                      */

+

+  ,HAL_TIM_IC_CAPTURE_CB_ID              = 0x12U    /*!< TIM Input Capture Callback ID                              */

+  ,HAL_TIM_IC_CAPTURE_HALF_CB_ID         = 0x13U    /*!< TIM Input Capture half complete Callback ID                */

+  ,HAL_TIM_OC_DELAY_ELAPSED_CB_ID        = 0x14U    /*!< TIM Output Compare Delay Elapsed Callback ID               */

+  ,HAL_TIM_PWM_PULSE_FINISHED_CB_ID      = 0x15U    /*!< TIM PWM Pulse Finished Callback ID           */

+  ,HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID = 0x16U    /*!< TIM PWM Pulse Finished half complete Callback ID           */

+  ,HAL_TIM_ERROR_CB_ID                   = 0x17U    /*!< TIM Error Callback ID                                      */

+} HAL_TIM_CallbackIDTypeDef;

+

+/**

+  * @brief  HAL TIM Callback pointer definition

+  */

+typedef  void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim);  /*!< pointer to the TIM callback function */

+

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+/**

+  * @}

+  */

+/* End of exported types -----------------------------------------------------*/

+

+/* Exported constants --------------------------------------------------------*/

+/** @defgroup TIM_Exported_Constants TIM Exported Constants

+  * @{

+  */

+

+/** @defgroup TIM_ClearInput_Source TIM Clear Input Source

+  * @{

+  */

+#define TIM_CLEARINPUTSOURCE_NONE           0x00000000U   /*!< OCREF_CLR is disabled */

+#define TIM_CLEARINPUTSOURCE_ETR            0x00000001U   /*!< OCREF_CLR is connected to ETRF input */

+#define TIM_CLEARINPUTSOURCE_OCREFCLR       0x00000002U   /*!< OCREF_CLR is connected to OCREF_CLR_INT */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_DMA_Base_address TIM DMA Base Address

+  * @{

+  */

+#define TIM_DMABASE_CR1                    0x00000000U

+#define TIM_DMABASE_CR2                    0x00000001U

+#define TIM_DMABASE_SMCR                   0x00000002U

+#define TIM_DMABASE_DIER                   0x00000003U

+#define TIM_DMABASE_SR                     0x00000004U

+#define TIM_DMABASE_EGR                    0x00000005U

+#define TIM_DMABASE_CCMR1                  0x00000006U

+#define TIM_DMABASE_CCMR2                  0x00000007U

+#define TIM_DMABASE_CCER                   0x00000008U

+#define TIM_DMABASE_CNT                    0x00000009U

+#define TIM_DMABASE_PSC                    0x0000000AU

+#define TIM_DMABASE_ARR                    0x0000000BU

+#define TIM_DMABASE_CCR1                   0x0000000DU

+#define TIM_DMABASE_CCR2                   0x0000000EU

+#define TIM_DMABASE_CCR3                   0x0000000FU

+#define TIM_DMABASE_CCR4                   0x00000010U

+#define TIM_DMABASE_DCR                    0x00000012U

+#define TIM_DMABASE_DMAR                   0x00000013U

+#define TIM_DMABASE_OR                     0x00000014U

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Event_Source TIM Event Source

+  * @{

+  */

+#define TIM_EVENTSOURCE_UPDATE              TIM_EGR_UG     /*!< Reinitialize the counter and generates an update of the registers */

+#define TIM_EVENTSOURCE_CC1                 TIM_EGR_CC1G   /*!< A capture/compare event is generated on channel 1 */

+#define TIM_EVENTSOURCE_CC2                 TIM_EGR_CC2G   /*!< A capture/compare event is generated on channel 2 */

+#define TIM_EVENTSOURCE_CC3                 TIM_EGR_CC3G   /*!< A capture/compare event is generated on channel 3 */

+#define TIM_EVENTSOURCE_CC4                 TIM_EGR_CC4G   /*!< A capture/compare event is generated on channel 4 */

+#define TIM_EVENTSOURCE_TRIGGER             TIM_EGR_TG     /*!< A trigger event is generated */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Input_Channel_Polarity TIM Input Channel polarity

+  * @{

+  */

+#define  TIM_INPUTCHANNELPOLARITY_RISING      0x00000000U                       /*!< Polarity for TIx source */

+#define  TIM_INPUTCHANNELPOLARITY_FALLING     TIM_CCER_CC1P                     /*!< Polarity for TIx source */

+#define  TIM_INPUTCHANNELPOLARITY_BOTHEDGE    (TIM_CCER_CC1P | TIM_CCER_CC1NP)  /*!< Polarity for TIx source */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_ETR_Polarity TIM ETR Polarity

+  * @{

+  */

+#define TIM_ETRPOLARITY_INVERTED              TIM_SMCR_ETP                      /*!< Polarity for ETR source */

+#define TIM_ETRPOLARITY_NONINVERTED           0x00000000U                       /*!< Polarity for ETR source */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_ETR_Prescaler TIM ETR Prescaler

+  * @{

+  */

+#define TIM_ETRPRESCALER_DIV1                 0x00000000U                       /*!< No prescaler is used */

+#define TIM_ETRPRESCALER_DIV2                 TIM_SMCR_ETPS_0                   /*!< ETR input source is divided by 2 */

+#define TIM_ETRPRESCALER_DIV4                 TIM_SMCR_ETPS_1                   /*!< ETR input source is divided by 4 */

+#define TIM_ETRPRESCALER_DIV8                 TIM_SMCR_ETPS                     /*!< ETR input source is divided by 8 */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Counter_Mode TIM Counter Mode

+  * @{

+  */

+#define TIM_COUNTERMODE_UP                 0x00000000U                          /*!< Counter used as up-counter   */

+#define TIM_COUNTERMODE_DOWN               TIM_CR1_DIR                          /*!< Counter used as down-counter */

+#define TIM_COUNTERMODE_CENTERALIGNED1     TIM_CR1_CMS_0                        /*!< Center-aligned mode 1        */

+#define TIM_COUNTERMODE_CENTERALIGNED2     TIM_CR1_CMS_1                        /*!< Center-aligned mode 2        */

+#define TIM_COUNTERMODE_CENTERALIGNED3     TIM_CR1_CMS                          /*!< Center-aligned mode 3        */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_ClockDivision TIM Clock Division

+  * @{

+  */

+#define TIM_CLOCKDIVISION_DIV1             0x00000000U                          /*!< Clock division: tDTS=tCK_INT   */

+#define TIM_CLOCKDIVISION_DIV2             TIM_CR1_CKD_0                        /*!< Clock division: tDTS=2*tCK_INT */

+#define TIM_CLOCKDIVISION_DIV4             TIM_CR1_CKD_1                        /*!< Clock division: tDTS=4*tCK_INT */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Output_Compare_State TIM Output Compare State

+  * @{

+  */

+#define TIM_OUTPUTSTATE_DISABLE            0x00000000U                          /*!< Capture/Compare 1 output disabled */

+#define TIM_OUTPUTSTATE_ENABLE             TIM_CCER_CC1E                        /*!< Capture/Compare 1 output enabled */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_AutoReloadPreload TIM Auto-Reload Preload

+  * @{

+  */

+#define TIM_AUTORELOAD_PRELOAD_DISABLE                0x00000000U               /*!< TIMx_ARR register is not buffered */

+#define TIM_AUTORELOAD_PRELOAD_ENABLE                 TIM_CR1_ARPE              /*!< TIMx_ARR register is buffered */

+

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Output_Fast_State TIM Output Fast State

+  * @{

+  */

+#define TIM_OCFAST_DISABLE                 0x00000000U                          /*!< Output Compare fast disable */

+#define TIM_OCFAST_ENABLE                  TIM_CCMR1_OC1FE                      /*!< Output Compare fast enable  */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Output_Compare_N_State TIM Complementary Output Compare State

+  * @{

+  */

+#define TIM_OUTPUTNSTATE_DISABLE           0x00000000U                          /*!< OCxN is disabled  */

+#define TIM_OUTPUTNSTATE_ENABLE            TIM_CCER_CC1NE                       /*!< OCxN is enabled   */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Output_Compare_Polarity TIM Output Compare Polarity

+  * @{

+  */

+#define TIM_OCPOLARITY_HIGH                0x00000000U                          /*!< Capture/Compare output polarity  */

+#define TIM_OCPOLARITY_LOW                 TIM_CCER_CC1P                        /*!< Capture/Compare output polarity  */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Input_Capture_Polarity TIM Input Capture Polarity

+  * @{

+  */

+#define  TIM_ICPOLARITY_RISING             TIM_INPUTCHANNELPOLARITY_RISING      /*!< Capture triggered by rising edge on timer input                  */

+#define  TIM_ICPOLARITY_FALLING            TIM_INPUTCHANNELPOLARITY_FALLING     /*!< Capture triggered by falling edge on timer input                 */

+#define  TIM_ICPOLARITY_BOTHEDGE           TIM_INPUTCHANNELPOLARITY_BOTHEDGE    /*!< Capture triggered by both rising and falling edges on timer input*/

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection

+  * @{

+  */

+#define TIM_ICSELECTION_DIRECTTI           TIM_CCMR1_CC1S_0                     /*!< TIM Input 1, 2, 3 or 4 is selected to be

+                                                                                     connected to IC1, IC2, IC3 or IC4, respectively */

+#define TIM_ICSELECTION_INDIRECTTI         TIM_CCMR1_CC1S_1                     /*!< TIM Input 1, 2, 3 or 4 is selected to be

+                                                                                     connected to IC2, IC1, IC4 or IC3, respectively */

+#define TIM_ICSELECTION_TRC                TIM_CCMR1_CC1S                       /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Input_Capture_Prescaler TIM Input Capture Prescaler

+  * @{

+  */

+#define TIM_ICPSC_DIV1                     0x00000000U                          /*!< Capture performed each time an edge is detected on the capture input */

+#define TIM_ICPSC_DIV2                     TIM_CCMR1_IC1PSC_0                   /*!< Capture performed once every 2 events                                */

+#define TIM_ICPSC_DIV4                     TIM_CCMR1_IC1PSC_1                   /*!< Capture performed once every 4 events                                */

+#define TIM_ICPSC_DIV8                     TIM_CCMR1_IC1PSC                     /*!< Capture performed once every 8 events                                */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_One_Pulse_Mode TIM One Pulse Mode

+  * @{

+  */

+#define TIM_OPMODE_SINGLE                  TIM_CR1_OPM                          /*!< Counter stops counting at the next update event */

+#define TIM_OPMODE_REPETITIVE              0x00000000U                          /*!< Counter is not stopped at update event          */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Encoder_Mode TIM Encoder Mode

+  * @{

+  */

+#define TIM_ENCODERMODE_TI1                      TIM_SMCR_SMS_0                                                      /*!< Quadrature encoder mode 1, x2 mode, counts up/down on TI1FP1 edge depending on TI2FP2 level  */

+#define TIM_ENCODERMODE_TI2                      TIM_SMCR_SMS_1                                                      /*!< Quadrature encoder mode 2, x2 mode, counts up/down on TI2FP2 edge depending on TI1FP1 level. */

+#define TIM_ENCODERMODE_TI12                     (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0)                                   /*!< Quadrature encoder mode 3, x4 mode, counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Interrupt_definition TIM interrupt Definition

+  * @{

+  */

+#define TIM_IT_UPDATE                      TIM_DIER_UIE                         /*!< Update interrupt            */

+#define TIM_IT_CC1                         TIM_DIER_CC1IE                       /*!< Capture/Compare 1 interrupt */

+#define TIM_IT_CC2                         TIM_DIER_CC2IE                       /*!< Capture/Compare 2 interrupt */

+#define TIM_IT_CC3                         TIM_DIER_CC3IE                       /*!< Capture/Compare 3 interrupt */

+#define TIM_IT_CC4                         TIM_DIER_CC4IE                       /*!< Capture/Compare 4 interrupt */

+#define TIM_IT_TRIGGER                     TIM_DIER_TIE                         /*!< Trigger interrupt           */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_DMA_sources TIM DMA Sources

+  * @{

+  */

+#define TIM_DMA_UPDATE                     TIM_DIER_UDE                         /*!< DMA request is triggered by the update event */

+#define TIM_DMA_CC1                        TIM_DIER_CC1DE                       /*!< DMA request is triggered by the capture/compare macth 1 event */

+#define TIM_DMA_CC2                        TIM_DIER_CC2DE                       /*!< DMA request is triggered by the capture/compare macth 2 event event */

+#define TIM_DMA_CC3                        TIM_DIER_CC3DE                       /*!< DMA request is triggered by the capture/compare macth 3 event event */

+#define TIM_DMA_CC4                        TIM_DIER_CC4DE                       /*!< DMA request is triggered by the capture/compare macth 4 event event */

+#define TIM_DMA_TRIGGER                    TIM_DIER_TDE                         /*!< DMA request is triggered by the trigger event */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Flag_definition TIM Flag Definition

+  * @{

+  */

+#define TIM_FLAG_UPDATE                    TIM_SR_UIF                           /*!< Update interrupt flag         */

+#define TIM_FLAG_CC1                       TIM_SR_CC1IF                         /*!< Capture/Compare 1 interrupt flag */

+#define TIM_FLAG_CC2                       TIM_SR_CC2IF                         /*!< Capture/Compare 2 interrupt flag */

+#define TIM_FLAG_CC3                       TIM_SR_CC3IF                         /*!< Capture/Compare 3 interrupt flag */

+#define TIM_FLAG_CC4                       TIM_SR_CC4IF                         /*!< Capture/Compare 4 interrupt flag */

+#define TIM_FLAG_TRIGGER                   TIM_SR_TIF                           /*!< Trigger interrupt flag        */

+#define TIM_FLAG_CC1OF                     TIM_SR_CC1OF                         /*!< Capture 1 overcapture flag    */

+#define TIM_FLAG_CC2OF                     TIM_SR_CC2OF                         /*!< Capture 2 overcapture flag    */

+#define TIM_FLAG_CC3OF                     TIM_SR_CC3OF                         /*!< Capture 3 overcapture flag    */

+#define TIM_FLAG_CC4OF                     TIM_SR_CC4OF                         /*!< Capture 4 overcapture flag    */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Channel TIM Channel

+  * @{

+  */

+#define TIM_CHANNEL_1                      0x00000000U                          /*!< Capture/compare channel 1 identifier      */

+#define TIM_CHANNEL_2                      0x00000004U                          /*!< Capture/compare channel 2 identifier      */

+#define TIM_CHANNEL_3                      0x00000008U                          /*!< Capture/compare channel 3 identifier      */

+#define TIM_CHANNEL_4                      0x0000000CU                          /*!< Capture/compare channel 4 identifier      */

+#define TIM_CHANNEL_ALL                    0x0000003CU                          /*!< Global Capture/compare channel identifier  */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Clock_Source TIM Clock Source

+  * @{

+  */

+#define TIM_CLOCKSOURCE_ETRMODE2    TIM_SMCR_ETPS_1      /*!< External clock source mode 2                          */

+#define TIM_CLOCKSOURCE_INTERNAL    TIM_SMCR_ETPS_0      /*!< Internal clock source                                 */

+#define TIM_CLOCKSOURCE_ITR0        TIM_TS_ITR0          /*!< External clock source mode 1 (ITR0)                   */

+#define TIM_CLOCKSOURCE_ITR1        TIM_TS_ITR1          /*!< External clock source mode 1 (ITR1)                   */

+#define TIM_CLOCKSOURCE_ITR2        TIM_TS_ITR2          /*!< External clock source mode 1 (ITR2)                   */

+#define TIM_CLOCKSOURCE_ITR3        TIM_TS_ITR3          /*!< External clock source mode 1 (ITR3)                   */

+#define TIM_CLOCKSOURCE_TI1ED       TIM_TS_TI1F_ED       /*!< External clock source mode 1 (TTI1FP1 + edge detect.) */

+#define TIM_CLOCKSOURCE_TI1         TIM_TS_TI1FP1        /*!< External clock source mode 1 (TTI1FP1)                */

+#define TIM_CLOCKSOURCE_TI2         TIM_TS_TI2FP2        /*!< External clock source mode 1 (TTI2FP2)                */

+#define TIM_CLOCKSOURCE_ETRMODE1    TIM_TS_ETRF          /*!< External clock source mode 1 (ETRF)                   */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Clock_Polarity TIM Clock Polarity

+  * @{

+  */

+#define TIM_CLOCKPOLARITY_INVERTED           TIM_ETRPOLARITY_INVERTED           /*!< Polarity for ETRx clock sources */

+#define TIM_CLOCKPOLARITY_NONINVERTED        TIM_ETRPOLARITY_NONINVERTED        /*!< Polarity for ETRx clock sources */

+#define TIM_CLOCKPOLARITY_RISING             TIM_INPUTCHANNELPOLARITY_RISING    /*!< Polarity for TIx clock sources */

+#define TIM_CLOCKPOLARITY_FALLING            TIM_INPUTCHANNELPOLARITY_FALLING   /*!< Polarity for TIx clock sources */

+#define TIM_CLOCKPOLARITY_BOTHEDGE           TIM_INPUTCHANNELPOLARITY_BOTHEDGE  /*!< Polarity for TIx clock sources */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Clock_Prescaler TIM Clock Prescaler

+  * @{

+  */

+#define TIM_CLOCKPRESCALER_DIV1                 TIM_ETRPRESCALER_DIV1           /*!< No prescaler is used                                                     */

+#define TIM_CLOCKPRESCALER_DIV2                 TIM_ETRPRESCALER_DIV2           /*!< Prescaler for External ETR Clock: Capture performed once every 2 events. */

+#define TIM_CLOCKPRESCALER_DIV4                 TIM_ETRPRESCALER_DIV4           /*!< Prescaler for External ETR Clock: Capture performed once every 4 events. */

+#define TIM_CLOCKPRESCALER_DIV8                 TIM_ETRPRESCALER_DIV8           /*!< Prescaler for External ETR Clock: Capture performed once every 8 events. */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_ClearInput_Polarity TIM Clear Input Polarity

+  * @{

+  */

+#define TIM_CLEARINPUTPOLARITY_INVERTED           TIM_ETRPOLARITY_INVERTED      /*!< Polarity for ETRx pin */

+#define TIM_CLEARINPUTPOLARITY_NONINVERTED        TIM_ETRPOLARITY_NONINVERTED   /*!< Polarity for ETRx pin */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_ClearInput_Prescaler TIM Clear Input Prescaler

+  * @{

+  */

+#define TIM_CLEARINPUTPRESCALER_DIV1              TIM_ETRPRESCALER_DIV1         /*!< No prescaler is used                                                   */

+#define TIM_CLEARINPUTPRESCALER_DIV2              TIM_ETRPRESCALER_DIV2         /*!< Prescaler for External ETR pin: Capture performed once every 2 events. */

+#define TIM_CLEARINPUTPRESCALER_DIV4              TIM_ETRPRESCALER_DIV4         /*!< Prescaler for External ETR pin: Capture performed once every 4 events. */

+#define TIM_CLEARINPUTPRESCALER_DIV8              TIM_ETRPRESCALER_DIV8         /*!< Prescaler for External ETR pin: Capture performed once every 8 events. */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Master_Mode_Selection TIM Master Mode Selection

+  * @{

+  */

+#define TIM_TRGO_RESET            0x00000000U                                      /*!< TIMx_EGR.UG bit is used as trigger output (TRGO)              */

+#define TIM_TRGO_ENABLE           TIM_CR2_MMS_0                                    /*!< TIMx_CR1.CEN bit is used as trigger output (TRGO)             */

+#define TIM_TRGO_UPDATE           TIM_CR2_MMS_1                                    /*!< Update event is used as trigger output (TRGO)                 */

+#define TIM_TRGO_OC1              (TIM_CR2_MMS_1 | TIM_CR2_MMS_0)                  /*!< Capture or a compare match 1 is used as trigger output (TRGO) */

+#define TIM_TRGO_OC1REF           TIM_CR2_MMS_2                                    /*!< OC1REF signal is used as trigger output (TRGO)                */

+#define TIM_TRGO_OC2REF           (TIM_CR2_MMS_2 | TIM_CR2_MMS_0)                  /*!< OC2REF signal is used as trigger output(TRGO)                 */

+#define TIM_TRGO_OC3REF           (TIM_CR2_MMS_2 | TIM_CR2_MMS_1)                  /*!< OC3REF signal is used as trigger output(TRGO)                 */

+#define TIM_TRGO_OC4REF           (TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0)  /*!< OC4REF signal is used as trigger output(TRGO)                 */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Master_Slave_Mode TIM Master/Slave Mode

+  * @{

+  */

+#define TIM_MASTERSLAVEMODE_ENABLE         TIM_SMCR_MSM                         /*!< No action */

+#define TIM_MASTERSLAVEMODE_DISABLE        0x00000000U                          /*!< Master/slave mode is selected */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Slave_Mode TIM Slave mode

+  * @{

+  */

+#define TIM_SLAVEMODE_DISABLE                0x00000000U                                        /*!< Slave mode disabled           */

+#define TIM_SLAVEMODE_RESET                  TIM_SMCR_SMS_2                                     /*!< Reset Mode                    */

+#define TIM_SLAVEMODE_GATED                  (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0)                  /*!< Gated Mode                    */

+#define TIM_SLAVEMODE_TRIGGER                (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1)                  /*!< Trigger Mode                  */

+#define TIM_SLAVEMODE_EXTERNAL1              (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< External Clock Mode 1         */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Output_Compare_and_PWM_modes TIM Output Compare and PWM Modes

+  * @{

+  */

+#define TIM_OCMODE_TIMING                   0x00000000U                                              /*!< Frozen                                 */

+#define TIM_OCMODE_ACTIVE                   TIM_CCMR1_OC1M_0                                         /*!< Set channel to active level on match   */

+#define TIM_OCMODE_INACTIVE                 TIM_CCMR1_OC1M_1                                         /*!< Set channel to inactive level on match */

+#define TIM_OCMODE_TOGGLE                   (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0)                    /*!< Toggle                                 */

+#define TIM_OCMODE_PWM1                     (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1)                    /*!< PWM mode 1                             */

+#define TIM_OCMODE_PWM2                     (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< PWM mode 2                             */

+#define TIM_OCMODE_FORCED_ACTIVE            (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0)                    /*!< Force active level                     */

+#define TIM_OCMODE_FORCED_INACTIVE          TIM_CCMR1_OC1M_2                                         /*!< Force inactive level                   */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Trigger_Selection TIM Trigger Selection

+  * @{

+  */

+#define TIM_TS_ITR0          0x00000000U                                                       /*!< Internal Trigger 0 (ITR0)              */

+#define TIM_TS_ITR1          TIM_SMCR_TS_0                                                     /*!< Internal Trigger 1 (ITR1)              */

+#define TIM_TS_ITR2          TIM_SMCR_TS_1                                                     /*!< Internal Trigger 2 (ITR2)              */

+#define TIM_TS_ITR3          (TIM_SMCR_TS_0 | TIM_SMCR_TS_1)                                   /*!< Internal Trigger 3 (ITR3)              */

+#define TIM_TS_TI1F_ED       TIM_SMCR_TS_2                                                     /*!< TI1 Edge Detector (TI1F_ED)            */

+#define TIM_TS_TI1FP1        (TIM_SMCR_TS_0 | TIM_SMCR_TS_2)                                   /*!< Filtered Timer Input 1 (TI1FP1)        */

+#define TIM_TS_TI2FP2        (TIM_SMCR_TS_1 | TIM_SMCR_TS_2)                                   /*!< Filtered Timer Input 2 (TI2FP2)        */

+#define TIM_TS_ETRF          (TIM_SMCR_TS_0 | TIM_SMCR_TS_1 | TIM_SMCR_TS_2)                   /*!< Filtered External Trigger input (ETRF) */

+#define TIM_TS_NONE          0x0000FFFFU                                                       /*!< No trigger selected                    */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Trigger_Polarity TIM Trigger Polarity

+  * @{

+  */

+#define TIM_TRIGGERPOLARITY_INVERTED           TIM_ETRPOLARITY_INVERTED               /*!< Polarity for ETRx trigger sources             */

+#define TIM_TRIGGERPOLARITY_NONINVERTED        TIM_ETRPOLARITY_NONINVERTED            /*!< Polarity for ETRx trigger sources             */

+#define TIM_TRIGGERPOLARITY_RISING             TIM_INPUTCHANNELPOLARITY_RISING        /*!< Polarity for TIxFPx or TI1_ED trigger sources */

+#define TIM_TRIGGERPOLARITY_FALLING            TIM_INPUTCHANNELPOLARITY_FALLING       /*!< Polarity for TIxFPx or TI1_ED trigger sources */

+#define TIM_TRIGGERPOLARITY_BOTHEDGE           TIM_INPUTCHANNELPOLARITY_BOTHEDGE      /*!< Polarity for TIxFPx or TI1_ED trigger sources */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Trigger_Prescaler TIM Trigger Prescaler

+  * @{

+  */

+#define TIM_TRIGGERPRESCALER_DIV1             TIM_ETRPRESCALER_DIV1             /*!< No prescaler is used                                                       */

+#define TIM_TRIGGERPRESCALER_DIV2             TIM_ETRPRESCALER_DIV2             /*!< Prescaler for External ETR Trigger: Capture performed once every 2 events. */

+#define TIM_TRIGGERPRESCALER_DIV4             TIM_ETRPRESCALER_DIV4             /*!< Prescaler for External ETR Trigger: Capture performed once every 4 events. */

+#define TIM_TRIGGERPRESCALER_DIV8             TIM_ETRPRESCALER_DIV8             /*!< Prescaler for External ETR Trigger: Capture performed once every 8 events. */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_TI1_Selection TIM TI1 Input Selection

+  * @{

+  */

+#define TIM_TI1SELECTION_CH1               0x00000000U                          /*!< The TIMx_CH1 pin is connected to TI1 input */

+#define TIM_TI1SELECTION_XORCOMBINATION    TIM_CR2_TI1S                         /*!< The TIMx_CH1, CH2 and CH3 pins are connected to the TI1 input (XOR combination) */

+/**

+  * @}

+  */

+

+/** @defgroup TIM_DMA_Burst_Length TIM DMA Burst Length

+  * @{

+  */

+#define TIM_DMABURSTLENGTH_1TRANSFER       0x00000000U                          /*!< The transfer is done to 1 register starting trom TIMx_CR1 + TIMx_DCR.DBA   */

+#define TIM_DMABURSTLENGTH_2TRANSFERS      0x00000100U                          /*!< The transfer is done to 2 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */

+#define TIM_DMABURSTLENGTH_3TRANSFERS      0x00000200U                          /*!< The transfer is done to 3 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */

+#define TIM_DMABURSTLENGTH_4TRANSFERS      0x00000300U                          /*!< The transfer is done to 4 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */

+#define TIM_DMABURSTLENGTH_5TRANSFERS      0x00000400U                          /*!< The transfer is done to 5 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */

+#define TIM_DMABURSTLENGTH_6TRANSFERS      0x00000500U                          /*!< The transfer is done to 6 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */

+#define TIM_DMABURSTLENGTH_7TRANSFERS      0x00000600U                          /*!< The transfer is done to 7 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */

+#define TIM_DMABURSTLENGTH_8TRANSFERS      0x00000700U                          /*!< The transfer is done to 8 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */

+#define TIM_DMABURSTLENGTH_9TRANSFERS      0x00000800U                          /*!< The transfer is done to 9 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */

+#define TIM_DMABURSTLENGTH_10TRANSFERS     0x00000900U                          /*!< The transfer is done to 10 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */

+#define TIM_DMABURSTLENGTH_11TRANSFERS     0x00000A00U                          /*!< The transfer is done to 11 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */

+#define TIM_DMABURSTLENGTH_12TRANSFERS     0x00000B00U                          /*!< The transfer is done to 12 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */

+#define TIM_DMABURSTLENGTH_13TRANSFERS     0x00000C00U                          /*!< The transfer is done to 13 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */

+#define TIM_DMABURSTLENGTH_14TRANSFERS     0x00000D00U                          /*!< The transfer is done to 14 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */

+#define TIM_DMABURSTLENGTH_15TRANSFERS     0x00000E00U                          /*!< The transfer is done to 15 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */

+#define TIM_DMABURSTLENGTH_16TRANSFERS     0x00000F00U                          /*!< The transfer is done to 16 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */

+#define TIM_DMABURSTLENGTH_17TRANSFERS     0x00001000U                          /*!< The transfer is done to 17 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */

+#define TIM_DMABURSTLENGTH_18TRANSFERS     0x00001100U                          /*!< The transfer is done to 18 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */

+/**

+  * @}

+  */

+

+/** @defgroup DMA_Handle_index TIM DMA Handle Index

+  * @{

+  */

+#define TIM_DMA_ID_UPDATE                ((uint16_t) 0x0000)       /*!< Index of the DMA handle used for Update DMA requests */

+#define TIM_DMA_ID_CC1                   ((uint16_t) 0x0001)       /*!< Index of the DMA handle used for Capture/Compare 1 DMA requests */

+#define TIM_DMA_ID_CC2                   ((uint16_t) 0x0002)       /*!< Index of the DMA handle used for Capture/Compare 2 DMA requests */

+#define TIM_DMA_ID_CC3                   ((uint16_t) 0x0003)       /*!< Index of the DMA handle used for Capture/Compare 3 DMA requests */

+#define TIM_DMA_ID_CC4                   ((uint16_t) 0x0004)       /*!< Index of the DMA handle used for Capture/Compare 4 DMA requests */

+#define TIM_DMA_ID_TRIGGER               ((uint16_t) 0x0006)       /*!< Index of the DMA handle used for Trigger DMA requests */

+/**

+  * @}

+  */

+

+/** @defgroup Channel_CC_State TIM Capture/Compare Channel State

+  * @{

+  */

+#define TIM_CCx_ENABLE                   0x00000001U                            /*!< Input or output channel is enabled */

+#define TIM_CCx_DISABLE                  0x00000000U                            /*!< Input or output channel is disabled */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+/* End of exported constants -------------------------------------------------*/

+

+/* Exported macros -----------------------------------------------------------*/

+/** @defgroup TIM_Exported_Macros TIM Exported Macros

+  * @{

+  */

+

+/** @brief  Reset TIM handle state.

+  * @param  __HANDLE__ TIM handle.

+  * @retval None

+  */

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) do {                                                        \

+                                                      (__HANDLE__)->State             = HAL_TIM_STATE_RESET; \

+                                                      (__HANDLE__)->Base_MspInitCallback         = NULL;     \

+                                                      (__HANDLE__)->Base_MspDeInitCallback       = NULL;     \

+                                                      (__HANDLE__)->IC_MspInitCallback           = NULL;     \

+                                                      (__HANDLE__)->IC_MspDeInitCallback         = NULL;     \

+                                                      (__HANDLE__)->OC_MspInitCallback           = NULL;     \

+                                                      (__HANDLE__)->OC_MspDeInitCallback         = NULL;     \

+                                                      (__HANDLE__)->PWM_MspInitCallback          = NULL;     \

+                                                      (__HANDLE__)->PWM_MspDeInitCallback        = NULL;     \

+                                                      (__HANDLE__)->OnePulse_MspInitCallback     = NULL;     \

+                                                      (__HANDLE__)->OnePulse_MspDeInitCallback   = NULL;     \

+                                                      (__HANDLE__)->Encoder_MspInitCallback      = NULL;     \

+                                                      (__HANDLE__)->Encoder_MspDeInitCallback    = NULL;     \

+                                                     } while(0)

+#else

+#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_TIM_STATE_RESET)

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+/**

+  * @brief  Enable the TIM peripheral.

+  * @param  __HANDLE__ TIM handle

+  * @retval None

+  */

+#define __HAL_TIM_ENABLE(__HANDLE__)                 ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN))

+

+/**

+  * @brief  Disable the TIM peripheral.

+  * @param  __HANDLE__ TIM handle

+  * @retval None

+  */

+#define __HAL_TIM_DISABLE(__HANDLE__) \

+                        do { \

+                          if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \

+                          { \

+                            (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \

+                          } \

+                        } while(0)

+

+/** @brief  Enable the specified TIM interrupt.

+  * @param  __HANDLE__ specifies the TIM Handle.

+  * @param  __INTERRUPT__ specifies the TIM interrupt source to enable.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_IT_UPDATE: Update interrupt

+  *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt

+  *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt

+  *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt

+  *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt

+  *            @arg TIM_IT_TRIGGER: Trigger interrupt

+  * @retval None

+  */

+#define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__)    ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__))

+

+/** @brief  Disable the specified TIM interrupt.

+  * @param  __HANDLE__ specifies the TIM Handle.

+  * @param  __INTERRUPT__ specifies the TIM interrupt source to disable.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_IT_UPDATE: Update interrupt

+  *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt

+  *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt

+  *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt

+  *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt

+  *            @arg TIM_IT_TRIGGER: Trigger interrupt

+  * @retval None

+  */

+#define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__)   ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__))

+

+/** @brief  Enable the specified DMA request.

+  * @param  __HANDLE__ specifies the TIM Handle.

+  * @param  __DMA__ specifies the TIM DMA request to enable.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_DMA_UPDATE: Update DMA request

+  *            @arg TIM_DMA_CC1:   Capture/Compare 1 DMA request

+  *            @arg TIM_DMA_CC2:  Capture/Compare 2 DMA request

+  *            @arg TIM_DMA_CC3:  Capture/Compare 3 DMA request

+  *            @arg TIM_DMA_CC4:  Capture/Compare 4 DMA request

+  *            @arg TIM_DMA_TRIGGER: Trigger DMA request

+  * @retval None

+  */

+#define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__)         ((__HANDLE__)->Instance->DIER |= (__DMA__))

+

+/** @brief  Disable the specified DMA request.

+  * @param  __HANDLE__ specifies the TIM Handle.

+  * @param  __DMA__ specifies the TIM DMA request to disable.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_DMA_UPDATE: Update DMA request

+  *            @arg TIM_DMA_CC1:   Capture/Compare 1 DMA request

+  *            @arg TIM_DMA_CC2:  Capture/Compare 2 DMA request

+  *            @arg TIM_DMA_CC3:  Capture/Compare 3 DMA request

+  *            @arg TIM_DMA_CC4:  Capture/Compare 4 DMA request

+  *            @arg TIM_DMA_TRIGGER: Trigger DMA request

+  * @retval None

+  */

+#define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__)        ((__HANDLE__)->Instance->DIER &= ~(__DMA__))

+

+/** @brief  Check whether the specified TIM interrupt flag is set or not.

+  * @param  __HANDLE__ specifies the TIM Handle.

+  * @param  __FLAG__ specifies the TIM interrupt flag to check.

+  *        This parameter can be one of the following values:

+  *            @arg TIM_FLAG_UPDATE: Update interrupt flag

+  *            @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag

+  *            @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag

+  *            @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag

+  *            @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag

+  *            @arg TIM_FLAG_TRIGGER: Trigger interrupt flag

+  *            @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag

+  *            @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag

+  *            @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag

+  *            @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag

+  * @retval The new state of __FLAG__ (TRUE or FALSE).

+  */

+#define __HAL_TIM_GET_FLAG(__HANDLE__, __FLAG__)          (((__HANDLE__)->Instance->SR &(__FLAG__)) == (__FLAG__))

+

+/** @brief  Clear the specified TIM interrupt flag.

+  * @param  __HANDLE__ specifies the TIM Handle.

+  * @param  __FLAG__ specifies the TIM interrupt flag to clear.

+  *        This parameter can be one of the following values:

+  *            @arg TIM_FLAG_UPDATE: Update interrupt flag

+  *            @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag

+  *            @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag

+  *            @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag

+  *            @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag

+  *            @arg TIM_FLAG_TRIGGER: Trigger interrupt flag

+  *            @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag

+  *            @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag

+  *            @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag

+  *            @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag

+  * @retval The new state of __FLAG__ (TRUE or FALSE).

+  */

+#define __HAL_TIM_CLEAR_FLAG(__HANDLE__, __FLAG__)        ((__HANDLE__)->Instance->SR = ~(__FLAG__))

+

+/**

+  * @brief  Check whether the specified TIM interrupt source is enabled or not.

+  * @param  __HANDLE__ TIM handle

+  * @param  __INTERRUPT__ specifies the TIM interrupt source to check.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_IT_UPDATE: Update interrupt

+  *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt

+  *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt

+  *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt

+  *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt

+  *            @arg TIM_IT_TRIGGER: Trigger interrupt

+  * @retval The state of TIM_IT (SET or RESET).

+  */

+#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)

+

+/** @brief Clear the TIM interrupt pending bits.

+  * @param  __HANDLE__ TIM handle

+  * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_IT_UPDATE: Update interrupt

+  *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt

+  *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt

+  *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt

+  *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt

+  *            @arg TIM_IT_TRIGGER: Trigger interrupt

+  * @retval None

+  */

+#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__)      ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))

+

+/**

+  * @brief  Indicates whether or not the TIM Counter is used as downcounter.

+  * @param  __HANDLE__ TIM handle.

+  * @retval False (Counter used as upcounter) or True (Counter used as downcounter)

+  * @note This macro is particularly useful to get the counting mode when the timer operates in Center-aligned mode or Encoder

+mode.

+  */

+#define __HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__)    (((__HANDLE__)->Instance->CR1 &(TIM_CR1_DIR)) == (TIM_CR1_DIR))

+

+/**

+  * @brief  Set the TIM Prescaler on runtime.

+  * @param  __HANDLE__ TIM handle.

+  * @param  __PRESC__ specifies the Prescaler new value.

+  * @retval None

+  */

+#define __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__)       ((__HANDLE__)->Instance->PSC = (__PRESC__))

+

+/**

+  * @brief  Set the TIM Counter Register value on runtime.

+  * @param  __HANDLE__ TIM handle.

+  * @param  __COUNTER__ specifies the Counter register new value.

+  * @retval None

+  */

+#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__)  ((__HANDLE__)->Instance->CNT = (__COUNTER__))

+

+/**

+  * @brief  Get the TIM Counter Register value on runtime.

+  * @param  __HANDLE__ TIM handle.

+  * @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)

+  */

+#define __HAL_TIM_GET_COUNTER(__HANDLE__) \

+   ((__HANDLE__)->Instance->CNT)

+

+/**

+  * @brief  Set the TIM Autoreload Register value on runtime without calling another time any Init function.

+  * @param  __HANDLE__ TIM handle.

+  * @param  __AUTORELOAD__ specifies the Counter register new value.

+  * @retval None

+  */

+#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \

+                        do{                                                    \

+                              (__HANDLE__)->Instance->ARR = (__AUTORELOAD__);  \

+                              (__HANDLE__)->Init.Period = (__AUTORELOAD__);    \

+                          } while(0)

+

+/**

+  * @brief  Get the TIM Autoreload Register value on runtime.

+  * @param  __HANDLE__ TIM handle.

+  * @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)

+  */

+#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) \

+   ((__HANDLE__)->Instance->ARR)

+

+/**

+  * @brief  Set the TIM Clock Division value on runtime without calling another time any Init function.

+  * @param  __HANDLE__ TIM handle.

+  * @param  __CKD__ specifies the clock division value.

+  *          This parameter can be one of the following value:

+  *            @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT

+  *            @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT

+  *            @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT

+  * @retval None

+  */

+#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \

+                        do{                                                   \

+                              (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD);  \

+                              (__HANDLE__)->Instance->CR1 |= (__CKD__);       \

+                              (__HANDLE__)->Init.ClockDivision = (__CKD__);   \

+                          } while(0)

+

+/**

+  * @brief  Get the TIM Clock Division value on runtime.

+  * @param  __HANDLE__ TIM handle.

+  * @retval The clock division can be one of the following values:

+  *            @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT

+  *            @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT

+  *            @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT

+  */

+#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__)  \

+   ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)

+

+/**

+  * @brief  Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.

+  * @param  __HANDLE__ TIM handle.

+  * @param  __CHANNEL__ TIM Channels to be configured.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @param  __ICPSC__ specifies the Input Capture4 prescaler new value.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ICPSC_DIV1: no prescaler

+  *            @arg TIM_ICPSC_DIV2: capture is done once every 2 events

+  *            @arg TIM_ICPSC_DIV4: capture is done once every 4 events

+  *            @arg TIM_ICPSC_DIV8: capture is done once every 8 events

+  * @retval None

+  */

+#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \

+                        do{                                                    \

+                              TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__));  \

+                              TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \

+                          } while(0)

+

+/**

+  * @brief  Get the TIM Input Capture prescaler on runtime.

+  * @param  __HANDLE__ TIM handle.

+  * @param  __CHANNEL__ TIM Channels to be configured.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: get input capture 1 prescaler value

+  *            @arg TIM_CHANNEL_2: get input capture 2 prescaler value

+  *            @arg TIM_CHANNEL_3: get input capture 3 prescaler value

+  *            @arg TIM_CHANNEL_4: get input capture 4 prescaler value

+  * @retval The input capture prescaler can be one of the following values:

+  *            @arg TIM_ICPSC_DIV1: no prescaler

+  *            @arg TIM_ICPSC_DIV2: capture is done once every 2 events

+  *            @arg TIM_ICPSC_DIV4: capture is done once every 4 events

+  *            @arg TIM_ICPSC_DIV8: capture is done once every 8 events

+  */

+#define __HAL_TIM_GET_ICPRESCALER(__HANDLE__, __CHANNEL__)  \

+  (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC1PSC) :\

+   ((__CHANNEL__) == TIM_CHANNEL_2) ? (((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC2PSC) >> 8U) :\

+   ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC3PSC) :\

+   (((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC4PSC)) >> 8U)

+

+/**

+  * @brief  Set the TIM Capture Compare Register value on runtime without calling another time ConfigChannel function.

+  * @param  __HANDLE__ TIM handle.

+  * @param  __CHANNEL__ TIM Channels to be configured.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @param  __COMPARE__ specifies the Capture Compare register new value.

+  * @retval None

+  */

+#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \

+(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\

+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\

+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\

+ ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)))

+

+/**

+  * @brief  Get the TIM Capture Compare Register value on runtime.

+  * @param  __HANDLE__ TIM handle.

+  * @param  __CHANNEL__ TIM Channel associated with the capture compare register

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: get capture/compare 1 register value

+  *            @arg TIM_CHANNEL_2: get capture/compare 2 register value

+  *            @arg TIM_CHANNEL_3: get capture/compare 3 register value

+  *            @arg TIM_CHANNEL_4: get capture/compare 4 register value

+  * @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)

+  */

+#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \

+(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\

+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\

+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\

+ ((__HANDLE__)->Instance->CCR4))

+

+/**

+  * @brief  Set the TIM Output compare preload.

+  * @param  __HANDLE__ TIM handle.

+  * @param  __CHANNEL__ TIM Channels to be configured.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval None

+  */

+#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)    \

+        (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\

+         ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\

+         ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\

+         ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE))

+

+/**

+  * @brief  Reset the TIM Output compare preload.

+  * @param  __HANDLE__ TIM handle.

+  * @param  __CHANNEL__ TIM Channels to be configured.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval None

+  */

+#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)    \

+        (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC1PE) :\

+         ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC2PE) :\

+         ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC3PE) :\

+         ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC4PE))

+

+/**

+  * @brief  Set the Update Request Source (URS) bit of the TIMx_CR1 register.

+  * @param  __HANDLE__ TIM handle.

+  * @note  When the URS bit of the TIMx_CR1 register is set, only counter

+  *        overflow/underflow generates an update interrupt or DMA request (if

+  *        enabled)

+  * @retval None

+  */

+#define __HAL_TIM_URS_ENABLE(__HANDLE__) \

+    ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)

+

+/**

+  * @brief  Reset the Update Request Source (URS) bit of the TIMx_CR1 register.

+  * @param  __HANDLE__ TIM handle.

+  * @note  When the URS bit of the TIMx_CR1 register is reset, any of the

+  *        following events generate an update interrupt or DMA request (if

+  *        enabled):

+  *           _ Counter overflow underflow

+  *           _ Setting the UG bit

+  *           _ Update generation through the slave mode controller

+  * @retval None

+  */

+#define __HAL_TIM_URS_DISABLE(__HANDLE__) \

+      ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)

+

+/**

+  * @brief  Set the TIM Capture x input polarity on runtime.

+  * @param  __HANDLE__ TIM handle.

+  * @param  __CHANNEL__ TIM Channels to be configured.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @param  __POLARITY__ Polarity for TIx source

+  *            @arg TIM_INPUTCHANNELPOLARITY_RISING: Rising Edge

+  *            @arg TIM_INPUTCHANNELPOLARITY_FALLING: Falling Edge

+  *            @arg TIM_INPUTCHANNELPOLARITY_BOTHEDGE: Rising and Falling Edge

+  * @retval None

+  */

+#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__)    \

+        do{                                                                     \

+          TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__));               \

+          TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \

+        }while(0)

+

+/**

+  * @}

+  */

+/* End of exported macros ----------------------------------------------------*/

+

+/* Private constants ---------------------------------------------------------*/

+/** @defgroup TIM_Private_Constants TIM Private Constants

+  * @{

+  */

+/* The counter of a timer instance is disabled only if all the CCx and CCxN

+   channels have been disabled */

+#define TIM_CCER_CCxE_MASK  ((uint32_t)(TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E))

+/**

+  * @}

+  */

+/* End of private constants --------------------------------------------------*/

+

+/* Private macros ------------------------------------------------------------*/

+/** @defgroup TIM_Private_Macros TIM Private Macros

+  * @{

+  */

+#define IS_TIM_CLEARINPUT_SOURCE(__MODE__)  (((__MODE__) == TIM_CLEARINPUTSOURCE_NONE)      || \

+                                             ((__MODE__) == TIM_CLEARINPUTSOURCE_ETR)       || \

+                                             ((__MODE__) == TIM_CLEARINPUTSOURCE_OCREFCLR))

+

+#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1)   || \

+                                   ((__BASE__) == TIM_DMABASE_CR2)   || \

+                                   ((__BASE__) == TIM_DMABASE_SMCR)  || \

+                                   ((__BASE__) == TIM_DMABASE_DIER)  || \

+                                   ((__BASE__) == TIM_DMABASE_SR)    || \

+                                   ((__BASE__) == TIM_DMABASE_EGR)   || \

+                                   ((__BASE__) == TIM_DMABASE_CCMR1) || \

+                                   ((__BASE__) == TIM_DMABASE_CCMR2) || \

+                                   ((__BASE__) == TIM_DMABASE_CCER)  || \

+                                   ((__BASE__) == TIM_DMABASE_CNT)   || \

+                                   ((__BASE__) == TIM_DMABASE_PSC)   || \

+                                   ((__BASE__) == TIM_DMABASE_ARR)   || \

+                                   ((__BASE__) == TIM_DMABASE_CCR1)  || \

+                                   ((__BASE__) == TIM_DMABASE_CCR2)  || \

+                                   ((__BASE__) == TIM_DMABASE_CCR3)  || \

+                                   ((__BASE__) == TIM_DMABASE_CCR4)  || \

+                                   ((__BASE__) == TIM_DMABASE_OR))

+

+#define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFFFFA0U) == 0x00000000U) && ((__SOURCE__) != 0x00000000U))

+

+#define IS_TIM_COUNTER_MODE(__MODE__)      (((__MODE__) == TIM_COUNTERMODE_UP)              || \

+                                            ((__MODE__) == TIM_COUNTERMODE_DOWN)            || \

+                                            ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED1)  || \

+                                            ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2)  || \

+                                            ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))

+

+#define IS_TIM_CLOCKDIVISION_DIV(__DIV__)  (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \

+                                            ((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \

+                                            ((__DIV__) == TIM_CLOCKDIVISION_DIV4))

+

+#define IS_TIM_AUTORELOAD_PRELOAD(PRELOAD) (((PRELOAD) == TIM_AUTORELOAD_PRELOAD_DISABLE) || \

+                                            ((PRELOAD) == TIM_AUTORELOAD_PRELOAD_ENABLE))

+

+#define IS_TIM_FAST_STATE(__STATE__)       (((__STATE__) == TIM_OCFAST_DISABLE) || \

+                                            ((__STATE__) == TIM_OCFAST_ENABLE))

+

+#define IS_TIM_OC_POLARITY(__POLARITY__)   (((__POLARITY__) == TIM_OCPOLARITY_HIGH) || \

+                                            ((__POLARITY__) == TIM_OCPOLARITY_LOW))

+

+#define IS_TIM_IC_POLARITY(__POLARITY__)   (((__POLARITY__) == TIM_ICPOLARITY_RISING)   || \

+                                            ((__POLARITY__) == TIM_ICPOLARITY_FALLING)  || \

+                                            ((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))

+

+#define IS_TIM_IC_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_ICSELECTION_DIRECTTI) || \

+                                            ((__SELECTION__) == TIM_ICSELECTION_INDIRECTTI) || \

+                                            ((__SELECTION__) == TIM_ICSELECTION_TRC))

+

+#define IS_TIM_IC_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_ICPSC_DIV1) || \

+                                            ((__PRESCALER__) == TIM_ICPSC_DIV2) || \

+                                            ((__PRESCALER__) == TIM_ICPSC_DIV4) || \

+                                            ((__PRESCALER__) == TIM_ICPSC_DIV8))

+

+#define IS_TIM_OPM_MODE(__MODE__)          (((__MODE__) == TIM_OPMODE_SINGLE) || \

+                                            ((__MODE__) == TIM_OPMODE_REPETITIVE))

+

+#define IS_TIM_ENCODER_MODE(__MODE__)      (((__MODE__) == TIM_ENCODERMODE_TI1) || \

+                                            ((__MODE__) == TIM_ENCODERMODE_TI2) || \

+                                            ((__MODE__) == TIM_ENCODERMODE_TI12))

+

+#define IS_TIM_DMA_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFFA0FFU) == 0x00000000U) && ((__SOURCE__) != 0x00000000U))

+

+#define IS_TIM_CHANNELS(__CHANNEL__)       (((__CHANNEL__) == TIM_CHANNEL_1) || \

+                                            ((__CHANNEL__) == TIM_CHANNEL_2) || \

+                                            ((__CHANNEL__) == TIM_CHANNEL_3) || \

+                                            ((__CHANNEL__) == TIM_CHANNEL_4) || \

+                                            ((__CHANNEL__) == TIM_CHANNEL_ALL))

+

+#define IS_TIM_OPM_CHANNELS(__CHANNEL__)   (((__CHANNEL__) == TIM_CHANNEL_1) || \

+                                            ((__CHANNEL__) == TIM_CHANNEL_2))

+

+#define IS_TIM_CLOCKSOURCE(__CLOCK__) (((__CLOCK__) == TIM_CLOCKSOURCE_INTERNAL) || \

+                                       ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE2) || \

+                                       ((__CLOCK__) == TIM_CLOCKSOURCE_ITR0)     || \

+                                       ((__CLOCK__) == TIM_CLOCKSOURCE_ITR1)     || \

+                                       ((__CLOCK__) == TIM_CLOCKSOURCE_ITR2)     || \

+                                       ((__CLOCK__) == TIM_CLOCKSOURCE_ITR3)     || \

+                                       ((__CLOCK__) == TIM_CLOCKSOURCE_TI1ED)    || \

+                                       ((__CLOCK__) == TIM_CLOCKSOURCE_TI1)      || \

+                                       ((__CLOCK__) == TIM_CLOCKSOURCE_TI2)      || \

+                                       ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE1))

+

+#define IS_TIM_CLOCKPOLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLOCKPOLARITY_INVERTED)    || \

+                                            ((__POLARITY__) == TIM_CLOCKPOLARITY_NONINVERTED) || \

+                                            ((__POLARITY__) == TIM_CLOCKPOLARITY_RISING)      || \

+                                            ((__POLARITY__) == TIM_CLOCKPOLARITY_FALLING)     || \

+                                            ((__POLARITY__) == TIM_CLOCKPOLARITY_BOTHEDGE))

+

+#define IS_TIM_CLOCKPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV1) || \

+                                              ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV2) || \

+                                              ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV4) || \

+                                              ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV8))

+

+#define IS_TIM_CLOCKFILTER(__ICFILTER__)      ((__ICFILTER__) <= 0xFU)

+

+#define IS_TIM_CLEARINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLEARINPUTPOLARITY_INVERTED) || \

+                                                  ((__POLARITY__) == TIM_CLEARINPUTPOLARITY_NONINVERTED))

+

+#define IS_TIM_CLEARINPUT_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV1) || \

+                                                    ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV2) || \

+                                                    ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV4) || \

+                                                    ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV8))

+

+#define IS_TIM_CLEARINPUT_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)

+

+#define IS_TIM_TRGO_SOURCE(__SOURCE__) (((__SOURCE__) == TIM_TRGO_RESET)  || \

+                                        ((__SOURCE__) == TIM_TRGO_ENABLE) || \

+                                        ((__SOURCE__) == TIM_TRGO_UPDATE) || \

+                                        ((__SOURCE__) == TIM_TRGO_OC1)    || \

+                                        ((__SOURCE__) == TIM_TRGO_OC1REF) || \

+                                        ((__SOURCE__) == TIM_TRGO_OC2REF) || \

+                                        ((__SOURCE__) == TIM_TRGO_OC3REF) || \

+                                        ((__SOURCE__) == TIM_TRGO_OC4REF))

+

+#define IS_TIM_MSM_STATE(__STATE__)      (((__STATE__) == TIM_MASTERSLAVEMODE_ENABLE) || \

+                                          ((__STATE__) == TIM_MASTERSLAVEMODE_DISABLE))

+

+#define IS_TIM_SLAVE_MODE(__MODE__) (((__MODE__) == TIM_SLAVEMODE_DISABLE)   || \

+                                     ((__MODE__) == TIM_SLAVEMODE_RESET)     || \

+                                     ((__MODE__) == TIM_SLAVEMODE_GATED)     || \

+                                     ((__MODE__) == TIM_SLAVEMODE_TRIGGER)   || \

+                                     ((__MODE__) == TIM_SLAVEMODE_EXTERNAL1))

+

+#define IS_TIM_PWM_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_PWM1)               || \

+                                   ((__MODE__) == TIM_OCMODE_PWM2))

+

+#define IS_TIM_OC_MODE(__MODE__)  (((__MODE__) == TIM_OCMODE_TIMING)             || \

+                                   ((__MODE__) == TIM_OCMODE_ACTIVE)             || \

+                                   ((__MODE__) == TIM_OCMODE_INACTIVE)           || \

+                                   ((__MODE__) == TIM_OCMODE_TOGGLE)             || \

+                                   ((__MODE__) == TIM_OCMODE_FORCED_ACTIVE)      || \

+                                   ((__MODE__) == TIM_OCMODE_FORCED_INACTIVE))

+

+#define IS_TIM_TRIGGER_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_TS_ITR0) || \

+                                                 ((__SELECTION__) == TIM_TS_ITR1) || \

+                                                 ((__SELECTION__) == TIM_TS_ITR2) || \

+                                                 ((__SELECTION__) == TIM_TS_ITR3) || \

+                                                 ((__SELECTION__) == TIM_TS_TI1F_ED) || \

+                                                 ((__SELECTION__) == TIM_TS_TI1FP1) || \

+                                                 ((__SELECTION__) == TIM_TS_TI2FP2) || \

+                                                 ((__SELECTION__) == TIM_TS_ETRF))

+

+#define IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_TS_ITR0) || \

+                                                               ((__SELECTION__) == TIM_TS_ITR1) || \

+                                                               ((__SELECTION__) == TIM_TS_ITR2) || \

+                                                               ((__SELECTION__) == TIM_TS_ITR3) || \

+                                                               ((__SELECTION__) == TIM_TS_NONE))

+

+#define IS_TIM_TRIGGERPOLARITY(__POLARITY__)   (((__POLARITY__) == TIM_TRIGGERPOLARITY_INVERTED   ) || \

+                                                ((__POLARITY__) == TIM_TRIGGERPOLARITY_NONINVERTED) || \

+                                                ((__POLARITY__) == TIM_TRIGGERPOLARITY_RISING     ) || \

+                                                ((__POLARITY__) == TIM_TRIGGERPOLARITY_FALLING    ) || \

+                                                ((__POLARITY__) == TIM_TRIGGERPOLARITY_BOTHEDGE   ))

+

+#define IS_TIM_TRIGGERPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV1) || \

+                                                ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV2) || \

+                                                ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV4) || \

+                                                ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV8))

+

+#define IS_TIM_TRIGGERFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)

+

+#define IS_TIM_TI1SELECTION(__TI1SELECTION__)  (((__TI1SELECTION__) == TIM_TI1SELECTION_CH1) || \

+                                                ((__TI1SELECTION__) == TIM_TI1SELECTION_XORCOMBINATION))

+

+#define IS_TIM_DMA_LENGTH(__LENGTH__)      (((__LENGTH__) == TIM_DMABURSTLENGTH_1TRANSFER) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_2TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_3TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_4TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_5TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_6TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_7TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_8TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_9TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_10TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_11TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_12TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_13TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_14TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_15TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_16TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_17TRANSFERS) || \

+                                            ((__LENGTH__) == TIM_DMABURSTLENGTH_18TRANSFERS))

+

+#define IS_TIM_IC_FILTER(__ICFILTER__)   ((__ICFILTER__) <= 0xFU)

+

+#define IS_TIM_SLAVEMODE_TRIGGER_ENABLED(__TRIGGER__) ((__TRIGGER__) == TIM_SLAVEMODE_TRIGGER)

+

+#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \

+(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\

+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\

+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\

+ ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))

+

+#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \

+(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC1PSC) :\

+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC2PSC) :\

+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC3PSC) :\

+ ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC4PSC))

+

+#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \

+(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\

+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\

+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\

+ ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))

+

+#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \

+(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\

+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\

+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\

+ ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))

+

+/**

+  * @}

+  */

+/* End of private macros -----------------------------------------------------*/

+

+/* Include TIM HAL Extended module */

+#include "stm32l1xx_hal_tim_ex.h"

+

+/* Exported functions --------------------------------------------------------*/

+/** @addtogroup TIM_Exported_Functions TIM Exported Functions

+  * @{

+  */

+

+/** @addtogroup TIM_Exported_Functions_Group1 TIM Time Base functions

+  *  @brief   Time Base functions

+  * @{

+  */

+/* Time Base functions ********************************************************/

+HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim);

+HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim);

+/* Blocking mode: Polling */

+HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);

+HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim);

+/* Non-Blocking mode: Interrupt */

+HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);

+HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);

+/* Non-Blocking mode: DMA */

+HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);

+HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim);

+/**

+  * @}

+  */

+

+/** @addtogroup TIM_Exported_Functions_Group2 TIM Output Compare functions

+  *  @brief   TIM Output Compare functions

+  * @{

+  */

+/* Timer Output Compare functions *********************************************/

+HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim);

+HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim);

+/* Blocking mode: Polling */

+HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);

+/* Non-Blocking mode: Interrupt */

+HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

+/* Non-Blocking mode: DMA */

+HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);

+HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);

+/**

+  * @}

+  */

+

+/** @addtogroup TIM_Exported_Functions_Group3 TIM PWM functions

+  *  @brief   TIM PWM functions

+  * @{

+  */

+/* Timer PWM functions ********************************************************/

+HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim);

+HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim);

+/* Blocking mode: Polling */

+HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);

+/* Non-Blocking mode: Interrupt */

+HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

+/* Non-Blocking mode: DMA */

+HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);

+HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);

+/**

+  * @}

+  */

+

+/** @addtogroup TIM_Exported_Functions_Group4 TIM Input Capture functions

+  *  @brief   TIM Input Capture functions

+  * @{

+  */

+/* Timer Input Capture functions **********************************************/

+HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim);

+HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim);

+/* Blocking mode: Polling */

+HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);

+/* Non-Blocking mode: Interrupt */

+HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

+/* Non-Blocking mode: DMA */

+HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);

+HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);

+/**

+  * @}

+  */

+

+/** @addtogroup TIM_Exported_Functions_Group5 TIM One Pulse functions

+  *  @brief   TIM One Pulse functions

+  * @{

+  */

+/* Timer One Pulse functions **************************************************/

+HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode);

+HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim);

+/* Blocking mode: Polling */

+HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);

+HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel);

+/* Non-Blocking mode: Interrupt */

+HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);

+HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);

+/**

+  * @}

+  */

+

+/** @addtogroup TIM_Exported_Functions_Group6 TIM Encoder functions

+  *  @brief   TIM Encoder functions

+  * @{

+  */

+/* Timer Encoder functions ****************************************************/

+HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim,  TIM_Encoder_InitTypeDef *sConfig);

+HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim);

+void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim);

+/* Blocking mode: Polling */

+HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);

+/* Non-Blocking mode: Interrupt */

+HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

+/* Non-Blocking mode: DMA */

+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);

+HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);

+/**

+  * @}

+  */

+

+/** @addtogroup TIM_Exported_Functions_Group7 TIM IRQ handler management

+  *  @brief   IRQ handler management

+  * @{

+  */

+/* Interrupt Handler functions  ***********************************************/

+void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions

+  *  @brief   Peripheral Control functions

+  * @{

+  */

+/* Control functions  *********************************************************/

+HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel,  uint32_t InputChannel);

+HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);

+HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);

+HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);

+HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);

+HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);

+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \

+                                              uint32_t  *BurstBuffer, uint32_t  BurstLength);

+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);

+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \

+                                             uint32_t  *BurstBuffer, uint32_t  BurstLength);

+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);

+HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);

+uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions

+  *  @brief   TIM Callbacks functions

+  * @{

+  */

+/* Callback in non blocking modes (Interrupt and DMA) *************************/

+void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);

+void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim);

+void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim);

+void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);

+void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim);

+void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim);

+void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim);

+void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim);

+void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim);

+void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);

+

+/* Callbacks Register/UnRegister functions  ***********************************/

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);

+HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions

+  *  @brief  Peripheral State functions

+  * @{

+  */

+/* Peripheral State functions  ************************************************/

+HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim);

+HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim);

+HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim);

+HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim);

+HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim);

+HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+/* End of exported functions -------------------------------------------------*/

+

+/* Private functions----------------------------------------------------------*/

+/** @defgroup TIM_Private_Functions TIM Private Functions

+* @{

+*/

+void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma);

+void TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma);

+void TIM_DMAError(DMA_HandleTypeDef *hdma);

+void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma);

+void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma);

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+void TIM_ResetCallback(TIM_HandleTypeDef *htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+/**

+* @}

+*/

+/* End of private functions --------------------------------------------------*/

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* STM32L1xx_HAL_TIM_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_tim_ex.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_tim_ex.h
new file mode 100644
index 0000000..a58b90a
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_tim_ex.h
@@ -0,0 +1,181 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_tim_ex.h

+  * @author  MCD Application Team

+  * @brief   Header file of TIM HAL Extended module.

+  ******************************************************************************

+    * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef STM32L1xx_HAL_TIM_EX_H

+#define STM32L1xx_HAL_TIM_EX_H

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup TIMEx

+  * @{

+  */

+

+/* Exported types ------------------------------------------------------------*/

+/** @defgroup TIMEx_Exported_Types TIM Extended Exported Types

+  * @{

+  */

+

+/**

+  * @}

+  */

+/* End of exported types -----------------------------------------------------*/

+

+/* Exported constants --------------------------------------------------------*/

+/** @defgroup TIMEx_Exported_Constants TIM Extended Exported Constants

+  * @{

+  */

+

+/** @defgroup TIMEx_Remap TIM Extended Remapping

+  * @{

+  */

+/* @note STM32L1XX devices are organized in 6 categories: Cat.1, Cat.2, Cat.3, Cat.4, Cat.5, Cat.6.

+         Remap capabilities depend on the device category. As the DMA2 controller is available only in

+         Cat.3, Cat.4,Cat.5 and Cat.6 devices it is used to discriminate Cat.1 and Cat.2 devices v.s.

+         Cat.3, Cat.4, Cat.5 and Cat.6 devices. */

+#if defined(DMA2)

+#define TIM_TIM2_ITR1_TIM10_OC        (0x00000000)       /*!< TIM2 ITR1 input is connected to TIM10 OC */

+#define TIM_TIM2_ITR1_TIM5_TGO        TIM2_OR_ITR1_RMP   /*!< TIM2 ITR1 input is connected to TIM5 TGO */

+#endif /* DMA2 */

+

+#if defined(DMA2)

+#define TIM_TIM3_ITR2_TIM11_OC        (0x00000000)       /*!< TIM3 ITR2 input is connected to TIM11 OC */

+#define TIM_TIM3_ITR2_TIM5_TGO        TIM2_OR_ITR1_RMP   /*!< TIM3 ITR2 input is connected to TIM5 TGO */

+#endif /* DMA2 */

+

+#if defined(DMA2)

+#define TIM_TIM9_ITR1_TIM3_TGO        (0x00000000)       /*!< TIM9 ITR1 input is connected to TIM3 TGO */

+#define TIM_TIM9_ITR1_TS              TIM9_OR_ITR1_RMP   /*!< TIM9 ITR1 input is connected to touch sensing I/O */

+#endif /* DMA2 */

+#define TIM_TIM9_GPIO                 (0x00000000)       /*!< TIM9 Channel1 is connected to GPIO */

+#define TIM_TIM9_LSE                  TIM_OR_TI1RMP_0    /*!< TIM9 Channel1 is connected to LSE internal clock */

+#define TIM_TIM9_GPIO1                TIM_OR_TI1RMP_1    /*!< TIM9 Channel1 is connected to GPIO */

+#define TIM_TIM9_GPIO2                TIM_OR_TI1RMP      /*!< TIM9 Channel1 is connected to GPIO */

+

+#if defined(DMA2)

+#define TIM_TIM10_TI1RMP              (0x00000000)       /*!< TIM10 Channel 1 depends on TI1_RMP */

+#define TIM_TIM10_RI                  TIM_OR_TI1_RMP_RI  /*!< TIM10 Channel 1 is connected to RI */

+#define TIM_TIM10_ETR_LSE             (0x00000000)       /*!< TIM10 ETR input is connected to LSE clock */

+#define TIM_TIM10_ETR_TIM9_TGO        TIM_OR_ETR_RMP     /*!< TIM10 ETR input is connected to TIM9 TGO */

+#endif /* DMA2 */

+#define TIM_TIM10_GPIO                (0x00000000)       /*!< TIM10 Channel1 is connected to GPIO */

+#define TIM_TIM10_LSI                 TIM_OR_TI1RMP_0    /*!< TIM10 Channel1 is connected to LSI internal clock */

+#define TIM_TIM10_LSE                 TIM_OR_TI1RMP_1    /*!< TIM10 Channel1 is connected to LSE internal clock */

+#define TIM_TIM10_RTC                 TIM_OR_TI1RMP      /*!< TIM10 Channel1 is connected to RTC wakeup interrupt */

+

+#if defined(DMA2)

+#define TIM_TIM11_TI1RMP              (0x00000000)       /*!< TIM11 Channel 1 depends on TI1_RMP */

+#define TIM_TIM11_RI                  TIM_OR_TI1_RMP_RI  /*!< TIM11 Channel 1 is connected to RI */

+#define TIM_TIM11_ETR_LSE             (0x00000000)       /*!< TIM11 ETR input is connected to LSE clock */

+#define TIM_TIM11_ETR_TIM9_TGO        TIM_OR_ETR_RMP     /*!< TIM11 ETR input is connected to TIM9 TGO */

+#endif /* DMA2 */

+#define TIM_TIM11_GPIO                (0x00000000)       /*!< TIM11 Channel1 is connected to GPIO */

+#define TIM_TIM11_MSI                 TIM_OR_TI1RMP_0    /*!< TIM11 Channel1 is connected to MSI internal clock */

+#define TIM_TIM11_HSE_RTC             TIM_OR_TI1RMP_1    /*!< TIM11 Channel1 is connected to HSE_RTC clock */

+#define TIM_TIM11_GPIO1               TIM_OR_TI1RMP      /*!< TIM11 Channel1 is connected to GPIO */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+/* End of exported constants -------------------------------------------------*/

+

+/* Exported macro ------------------------------------------------------------*/

+/** @defgroup TIMEx_Exported_Macros TIM Extended Exported Macros

+  * @{

+  */

+

+/**

+  * @}

+  */

+/* End of exported macro -----------------------------------------------------*/

+

+/* Private macro -------------------------------------------------------------*/

+/** @defgroup TIMEx_Private_Macros TIM Extended Private Macros

+  * @{

+  */

+#if defined(DMA2)

+#define IS_TIM_REMAP(INSTANCE, TIM_REMAP)               \

+        ( (((INSTANCE) == TIM2)  && (((TIM_REMAP) == TIM_TIM2_ITR1_TIM10_OC) || ((TIM_REMAP) == TIM_TIM2_ITR1_TIM5_TGO)))  || \

+          (((INSTANCE) == TIM3)  && (((TIM_REMAP) == TIM_TIM3_ITR2_TIM11_OC) || ((TIM_REMAP) == TIM_TIM3_ITR2_TIM5_TGO)))  || \

+          (((INSTANCE) == TIM9)  && ((TIM_REMAP) <= (TIM_TIM9_ITR1_TS | TIM_TIM9_GPIO2)))                                  || \

+          (((INSTANCE) == TIM10) && ((TIM_REMAP) <= (TIM_TIM10_RI | TIM_TIM10_ETR_TIM9_TGO | TIM_TIM10_RTC)))              || \

+          (((INSTANCE) == TIM11) && ((TIM_REMAP) <= (TIM_TIM11_RI | TIM_TIM11_ETR_TIM9_TGO | TIM_TIM11_GPIO1)))               \

+        )

+#else

+#define IS_TIM_REMAP(INSTANCE, TIM_REMAP)               \

+        ( (((INSTANCE) == TIM9)  && (((TIM_REMAP) == TIM_TIM9_GPIO) || ((TIM_REMAP) == TIM_TIM9_LSE) || ((TIM_REMAP) == TIM_TIM9_GPIO1) || ((TIM_REMAP) == TIM_TIM9_GPIO2)))       || \

+          (((INSTANCE) == TIM10) && (((TIM_REMAP) == TIM_TIM10_GPIO) || ((TIM_REMAP) == TIM_TIM10_LSI) || ((TIM_REMAP) == TIM_TIM10_LSE) || ((TIM_REMAP) == TIM_TIM10_RTC)))       || \

+          (((INSTANCE) == TIM11) && (((TIM_REMAP) == TIM_TIM11_GPIO) || ((TIM_REMAP) == TIM_TIM11_MSI) || ((TIM_REMAP) == TIM_TIM11_HSE_RTC) || ((TIM_REMAP) == TIM_TIM11_GPIO1)))    \

+        )

+#endif /* DMA2 */

+

+/**

+  * @}

+  */

+/* End of private macro ------------------------------------------------------*/

+

+/* Exported functions --------------------------------------------------------*/

+/** @addtogroup TIMEx_Exported_Functions TIM Extended Exported Functions

+  * @{

+  */

+

+/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions

+ *  @brief    Peripheral Control functions

+ * @{

+ */

+/* Extended Control functions  ************************************************/

+HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);

+HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+/* End of exported functions -------------------------------------------------*/

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+

+#endif /* STM32L1xx_HAL_TIM_EX_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_uart.h b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_uart.h
new file mode 100644
index 0000000..c82031e
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Inc/stm32l1xx_hal_uart.h
@@ -0,0 +1,846 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_uart.h

+  * @author  MCD Application Team

+  * @brief   Header file of UART HAL module.

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Define to prevent recursive inclusion -------------------------------------*/

+#ifndef __STM32L1xx_HAL_UART_H

+#define __STM32L1xx_HAL_UART_H

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal_def.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup UART

+  * @{

+  */

+

+/* Exported types ------------------------------------------------------------*/

+/** @defgroup UART_Exported_Types UART Exported Types

+  * @{

+  */

+

+/**

+  * @brief UART Init Structure definition

+  */

+typedef struct

+{

+  uint32_t BaudRate;                  /*!< This member configures the UART communication baud rate.

+                                           The baud rate is computed using the following formula:

+                                           - IntegerDivider = ((PCLKx) / (8 * (OVR8+1) * (huart->Init.BaudRate)))

+                                           - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 8 * (OVR8+1)) + 0.5

+                                           Where OVR8 is the "oversampling by 8 mode" configuration bit in the CR1 register. */

+

+  uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.

+                                           This parameter can be a value of @ref UART_Word_Length */

+

+  uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.

+                                           This parameter can be a value of @ref UART_Stop_Bits */

+

+  uint32_t Parity;                    /*!< Specifies the parity mode.

+                                           This parameter can be a value of @ref UART_Parity

+                                           @note When parity is enabled, the computed parity is inserted

+                                                 at the MSB position of the transmitted data (9th bit when

+                                                 the word length is set to 9 data bits; 8th bit when the

+                                                 word length is set to 8 data bits). */

+

+  uint32_t Mode;                      /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.

+                                           This parameter can be a value of @ref UART_Mode */

+

+  uint32_t HwFlowCtl;                 /*!< Specifies whether the hardware flow control mode is enabled or disabled.

+                                           This parameter can be a value of @ref UART_Hardware_Flow_Control */

+

+  uint32_t OverSampling;              /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8).

+                                           This parameter can be a value of @ref UART_Over_Sampling */

+} UART_InitTypeDef;

+

+/**

+  * @brief HAL UART State structures definition

+  * @note  HAL UART State value is a combination of 2 different substates: gState and RxState.

+  *        - gState contains UART state information related to global Handle management

+  *          and also information related to Tx operations.

+  *          gState value coding follow below described bitmap :

+  *          b7-b6  Error information

+  *             00 : No Error

+  *             01 : (Not Used)

+  *             10 : Timeout

+  *             11 : Error

+  *          b5     Peripheral initialization status

+  *             0  : Reset (Peripheral not initialized)

+  *             1  : Init done (Peripheral not initialized. HAL UART Init function already called)

+  *          b4-b3  (not used)

+  *             xx : Should be set to 00

+  *          b2     Intrinsic process state

+  *             0  : Ready

+  *             1  : Busy (Peripheral busy with some configuration or internal operations)

+  *          b1     (not used)

+  *             x  : Should be set to 0

+  *          b0     Tx state

+  *             0  : Ready (no Tx operation ongoing)

+  *             1  : Busy (Tx operation ongoing)

+  *        - RxState contains information related to Rx operations.

+  *          RxState value coding follow below described bitmap :

+  *          b7-b6  (not used)

+  *             xx : Should be set to 00

+  *          b5     Peripheral initialization status

+  *             0  : Reset (Peripheral not initialized)

+  *             1  : Init done (Peripheral not initialized)

+  *          b4-b2  (not used)

+  *            xxx : Should be set to 000

+  *          b1     Rx state

+  *             0  : Ready (no Rx operation ongoing)

+  *             1  : Busy (Rx operation ongoing)

+  *          b0     (not used)

+  *             x  : Should be set to 0.

+  */

+typedef enum

+{

+  HAL_UART_STATE_RESET             = 0x00U,    /*!< Peripheral is not yet Initialized

+                                                   Value is allowed for gState and RxState */

+  HAL_UART_STATE_READY             = 0x20U,    /*!< Peripheral Initialized and ready for use

+                                                   Value is allowed for gState and RxState */

+  HAL_UART_STATE_BUSY              = 0x24U,    /*!< an internal process is ongoing

+                                                   Value is allowed for gState only */

+  HAL_UART_STATE_BUSY_TX           = 0x21U,    /*!< Data Transmission process is ongoing

+                                                   Value is allowed for gState only */

+  HAL_UART_STATE_BUSY_RX           = 0x22U,    /*!< Data Reception process is ongoing

+                                                   Value is allowed for RxState only */

+  HAL_UART_STATE_BUSY_TX_RX        = 0x23U,    /*!< Data Transmission and Reception process is ongoing

+                                                   Not to be used for neither gState nor RxState.

+                                                   Value is result of combination (Or) between gState and RxState values */

+  HAL_UART_STATE_TIMEOUT           = 0xA0U,    /*!< Timeout state

+                                                   Value is allowed for gState only */

+  HAL_UART_STATE_ERROR             = 0xE0U     /*!< Error

+                                                   Value is allowed for gState only */

+} HAL_UART_StateTypeDef;

+

+/**

+  * @brief  UART handle Structure definition

+  */

+typedef struct __UART_HandleTypeDef

+{

+  USART_TypeDef                 *Instance;        /*!< UART registers base address        */

+

+  UART_InitTypeDef              Init;             /*!< UART communication parameters      */

+

+  uint8_t                       *pTxBuffPtr;      /*!< Pointer to UART Tx transfer Buffer */

+

+  uint16_t                      TxXferSize;       /*!< UART Tx Transfer size              */

+

+  __IO uint16_t                 TxXferCount;      /*!< UART Tx Transfer Counter           */

+

+  uint8_t                       *pRxBuffPtr;      /*!< Pointer to UART Rx transfer Buffer */

+

+  uint16_t                      RxXferSize;       /*!< UART Rx Transfer size              */

+

+  __IO uint16_t                 RxXferCount;      /*!< UART Rx Transfer Counter           */

+

+  DMA_HandleTypeDef             *hdmatx;          /*!< UART Tx DMA Handle parameters      */

+

+  DMA_HandleTypeDef             *hdmarx;          /*!< UART Rx DMA Handle parameters      */

+

+  HAL_LockTypeDef               Lock;             /*!< Locking object                     */

+

+  __IO HAL_UART_StateTypeDef    gState;           /*!< UART state information related to global Handle management

+                                                       and also related to Tx operations.

+                                                       This parameter can be a value of @ref HAL_UART_StateTypeDef */

+

+  __IO HAL_UART_StateTypeDef    RxState;          /*!< UART state information related to Rx operations.

+                                                       This parameter can be a value of @ref HAL_UART_StateTypeDef */

+

+  __IO uint32_t                 ErrorCode;        /*!< UART Error code                    */

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  void (* TxHalfCpltCallback)(struct __UART_HandleTypeDef *huart);        /*!< UART Tx Half Complete Callback        */

+  void (* TxCpltCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Tx Complete Callback             */

+  void (* RxHalfCpltCallback)(struct __UART_HandleTypeDef *huart);        /*!< UART Rx Half Complete Callback        */

+  void (* RxCpltCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Rx Complete Callback             */

+  void (* ErrorCallback)(struct __UART_HandleTypeDef *huart);             /*!< UART Error Callback                   */

+  void (* AbortCpltCallback)(struct __UART_HandleTypeDef *huart);         /*!< UART Abort Complete Callback          */

+  void (* AbortTransmitCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Transmit Complete Callback */

+  void (* AbortReceiveCpltCallback)(struct __UART_HandleTypeDef *huart);  /*!< UART Abort Receive Complete Callback  */

+  void (* WakeupCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Wakeup Callback                  */

+

+  void (* MspInitCallback)(struct __UART_HandleTypeDef *huart);           /*!< UART Msp Init callback                */

+  void (* MspDeInitCallback)(struct __UART_HandleTypeDef *huart);         /*!< UART Msp DeInit callback              */

+#endif  /* USE_HAL_UART_REGISTER_CALLBACKS */

+

+} UART_HandleTypeDef;

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+/**

+  * @brief  HAL UART Callback ID enumeration definition

+  */

+typedef enum

+{

+  HAL_UART_TX_HALFCOMPLETE_CB_ID         = 0x00U,    /*!< UART Tx Half Complete Callback ID        */

+  HAL_UART_TX_COMPLETE_CB_ID             = 0x01U,    /*!< UART Tx Complete Callback ID             */

+  HAL_UART_RX_HALFCOMPLETE_CB_ID         = 0x02U,    /*!< UART Rx Half Complete Callback ID        */

+  HAL_UART_RX_COMPLETE_CB_ID             = 0x03U,    /*!< UART Rx Complete Callback ID             */

+  HAL_UART_ERROR_CB_ID                   = 0x04U,    /*!< UART Error Callback ID                   */

+  HAL_UART_ABORT_COMPLETE_CB_ID          = 0x05U,    /*!< UART Abort Complete Callback ID          */

+  HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x06U,    /*!< UART Abort Transmit Complete Callback ID */

+  HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID  = 0x07U,    /*!< UART Abort Receive Complete Callback ID  */

+  HAL_UART_WAKEUP_CB_ID                  = 0x08U,    /*!< UART Wakeup Callback ID                  */

+

+  HAL_UART_MSPINIT_CB_ID                 = 0x0BU,    /*!< UART MspInit callback ID                 */

+  HAL_UART_MSPDEINIT_CB_ID               = 0x0CU     /*!< UART MspDeInit callback ID               */

+

+} HAL_UART_CallbackIDTypeDef;

+

+/**

+  * @brief  HAL UART Callback pointer definition

+  */

+typedef  void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart);  /*!< pointer to an UART callback function */

+

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+

+/**

+  * @}

+  */

+

+/* Exported constants --------------------------------------------------------*/

+/** @defgroup UART_Exported_Constants UART Exported Constants

+  * @{

+  */

+

+/** @defgroup UART_Error_Code UART Error Code

+  * @{

+  */

+#define HAL_UART_ERROR_NONE              0x00000000U   /*!< No error            */

+#define HAL_UART_ERROR_PE                0x00000001U   /*!< Parity error        */

+#define HAL_UART_ERROR_NE                0x00000002U   /*!< Noise error         */

+#define HAL_UART_ERROR_FE                0x00000004U   /*!< Frame error         */

+#define HAL_UART_ERROR_ORE               0x00000008U   /*!< Overrun error       */

+#define HAL_UART_ERROR_DMA               0x00000010U   /*!< DMA transfer error  */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+#define  HAL_UART_ERROR_INVALID_CALLBACK 0x00000020U   /*!< Invalid Callback error  */

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+/**

+  * @}

+  */

+

+/** @defgroup UART_Word_Length UART Word Length

+  * @{

+  */

+#define UART_WORDLENGTH_8B                  0x00000000U

+#define UART_WORDLENGTH_9B                  ((uint32_t)USART_CR1_M)

+/**

+  * @}

+  */

+

+/** @defgroup UART_Stop_Bits UART Number of Stop Bits

+  * @{

+  */

+#define UART_STOPBITS_1                     0x00000000U

+#define UART_STOPBITS_2                     ((uint32_t)USART_CR2_STOP_1)

+/**

+  * @}

+  */

+

+/** @defgroup UART_Parity UART Parity

+  * @{

+  */

+#define UART_PARITY_NONE                    0x00000000U

+#define UART_PARITY_EVEN                    ((uint32_t)USART_CR1_PCE)

+#define UART_PARITY_ODD                     ((uint32_t)(USART_CR1_PCE | USART_CR1_PS))

+/**

+  * @}

+  */

+

+/** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control

+  * @{

+  */

+#define UART_HWCONTROL_NONE                  0x00000000U

+#define UART_HWCONTROL_RTS                   ((uint32_t)USART_CR3_RTSE)

+#define UART_HWCONTROL_CTS                   ((uint32_t)USART_CR3_CTSE)

+#define UART_HWCONTROL_RTS_CTS               ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE))

+/**

+  * @}

+  */

+

+/** @defgroup UART_Mode UART Transfer Mode

+  * @{

+  */

+#define UART_MODE_RX                        ((uint32_t)USART_CR1_RE)

+#define UART_MODE_TX                        ((uint32_t)USART_CR1_TE)

+#define UART_MODE_TX_RX                     ((uint32_t)(USART_CR1_TE | USART_CR1_RE))

+/**

+  * @}

+  */

+

+/** @defgroup UART_State UART State

+  * @{

+  */

+#define UART_STATE_DISABLE                  0x00000000U

+#define UART_STATE_ENABLE                   ((uint32_t)USART_CR1_UE)

+/**

+  * @}

+  */

+

+/** @defgroup UART_Over_Sampling UART Over Sampling

+  * @{

+  */

+#define UART_OVERSAMPLING_16                    0x00000000U

+#define UART_OVERSAMPLING_8                     ((uint32_t)USART_CR1_OVER8)

+/**

+  * @}

+  */

+

+/** @defgroup UART_LIN_Break_Detection_Length  UART LIN Break Detection Length

+  * @{

+  */

+#define UART_LINBREAKDETECTLENGTH_10B      0x00000000U

+#define UART_LINBREAKDETECTLENGTH_11B      ((uint32_t)USART_CR2_LBDL)

+/**

+  * @}

+  */

+

+/** @defgroup UART_WakeUp_functions  UART Wakeup Functions

+  * @{

+  */

+#define UART_WAKEUPMETHOD_IDLELINE                0x00000000U

+#define UART_WAKEUPMETHOD_ADDRESSMARK             ((uint32_t)USART_CR1_WAKE)

+/**

+  * @}

+  */

+

+/** @defgroup UART_Flags   UART FLags

+  *        Elements values convention: 0xXXXX

+  *           - 0xXXXX  : Flag mask in the SR register

+  * @{

+  */

+#define UART_FLAG_CTS                       ((uint32_t)USART_SR_CTS)

+#define UART_FLAG_LBD                       ((uint32_t)USART_SR_LBD)

+#define UART_FLAG_TXE                       ((uint32_t)USART_SR_TXE)

+#define UART_FLAG_TC                        ((uint32_t)USART_SR_TC)

+#define UART_FLAG_RXNE                      ((uint32_t)USART_SR_RXNE)

+#define UART_FLAG_IDLE                      ((uint32_t)USART_SR_IDLE)

+#define UART_FLAG_ORE                       ((uint32_t)USART_SR_ORE)

+#define UART_FLAG_NE                        ((uint32_t)USART_SR_NE)

+#define UART_FLAG_FE                        ((uint32_t)USART_SR_FE)

+#define UART_FLAG_PE                        ((uint32_t)USART_SR_PE)

+/**

+  * @}

+  */

+

+/** @defgroup UART_Interrupt_definition  UART Interrupt Definitions

+  *        Elements values convention: 0xY000XXXX

+  *           - XXXX  : Interrupt mask (16 bits) in the Y register

+  *           - Y  : Interrupt source register (2bits)

+  *                   - 0001: CR1 register

+  *                   - 0010: CR2 register

+  *                   - 0011: CR3 register

+  * @{

+  */

+

+#define UART_IT_PE                       ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_PEIE))

+#define UART_IT_TXE                      ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TXEIE))

+#define UART_IT_TC                       ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TCIE))

+#define UART_IT_RXNE                     ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE))

+#define UART_IT_IDLE                     ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE))

+

+#define UART_IT_LBD                      ((uint32_t)(UART_CR2_REG_INDEX << 28U | USART_CR2_LBDIE))

+

+#define UART_IT_CTS                      ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_CTSIE))

+#define UART_IT_ERR                      ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_EIE))

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Exported macro ------------------------------------------------------------*/

+/** @defgroup UART_Exported_Macros UART Exported Macros

+  * @{

+  */

+

+/** @brief Reset UART handle gstate & RxState

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  * @retval None

+  */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__)  do{                                                   \

+                                                       (__HANDLE__)->gState = HAL_UART_STATE_RESET;      \

+                                                       (__HANDLE__)->RxState = HAL_UART_STATE_RESET;     \

+                                                       (__HANDLE__)->MspInitCallback = NULL;             \

+                                                       (__HANDLE__)->MspDeInitCallback = NULL;           \

+                                                     } while(0U)

+#else

+#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__)  do{                                                   \

+                                                       (__HANDLE__)->gState = HAL_UART_STATE_RESET;      \

+                                                       (__HANDLE__)->RxState = HAL_UART_STATE_RESET;     \

+                                                     } while(0U)

+#endif /*USE_HAL_UART_REGISTER_CALLBACKS */

+

+/** @brief  Flushes the UART DR register

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  */

+#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR)

+

+/** @brief  Checks whether the specified UART flag is set or not.

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  * @param  __FLAG__ specifies the flag to check.

+  *        This parameter can be one of the following values:

+  *            @arg UART_FLAG_CTS:  CTS Change flag (not available for UART4 and UART5)

+  *            @arg UART_FLAG_LBD:  LIN Break detection flag

+  *            @arg UART_FLAG_TXE:  Transmit data register empty flag

+  *            @arg UART_FLAG_TC:   Transmission Complete flag

+  *            @arg UART_FLAG_RXNE: Receive data register not empty flag

+  *            @arg UART_FLAG_IDLE: Idle Line detection flag

+  *            @arg UART_FLAG_ORE:  Overrun Error flag

+  *            @arg UART_FLAG_NE:   Noise Error flag

+  *            @arg UART_FLAG_FE:   Framing Error flag

+  *            @arg UART_FLAG_PE:   Parity Error flag

+  * @retval The new state of __FLAG__ (TRUE or FALSE).

+  */

+#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))

+

+/** @brief  Clears the specified UART pending flag.

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  * @param  __FLAG__ specifies the flag to check.

+  *          This parameter can be any combination of the following values:

+  *            @arg UART_FLAG_CTS:  CTS Change flag (not available for UART4 and UART5).

+  *            @arg UART_FLAG_LBD:  LIN Break detection flag.

+  *            @arg UART_FLAG_TC:   Transmission Complete flag.

+  *            @arg UART_FLAG_RXNE: Receive data register not empty flag.

+  *

+  * @note   PE (Parity error), FE (Framing error), NE (Noise error), ORE (Overrun

+  *          error) and IDLE (Idle line detected) flags are cleared by software

+  *          sequence: a read operation to USART_SR register followed by a read

+  *          operation to USART_DR register.

+  * @note   RXNE flag can be also cleared by a read to the USART_DR register.

+  * @note   TC flag can be also cleared by software sequence: a read operation to

+  *          USART_SR register followed by a write operation to USART_DR register.

+  * @note   TXE flag is cleared only by a write to the USART_DR register.

+  *

+  * @retval None

+  */

+#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__))

+

+/** @brief  Clears the UART PE pending flag.

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  * @retval None

+  */

+#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__)     \

+  do{                                           \

+    __IO uint32_t tmpreg = 0x00U;               \

+    tmpreg = (__HANDLE__)->Instance->SR;        \

+    tmpreg = (__HANDLE__)->Instance->DR;        \

+    UNUSED(tmpreg);                             \

+  } while(0U)

+

+/** @brief  Clears the UART FE pending flag.

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  * @retval None

+  */

+#define __HAL_UART_CLEAR_FEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)

+

+/** @brief  Clears the UART NE pending flag.

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  * @retval None

+  */

+#define __HAL_UART_CLEAR_NEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)

+

+/** @brief  Clears the UART ORE pending flag.

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  * @retval None

+  */

+#define __HAL_UART_CLEAR_OREFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)

+

+/** @brief  Clears the UART IDLE pending flag.

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  * @retval None

+  */

+#define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)

+

+/** @brief  Enable the specified UART interrupt.

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  * @param  __INTERRUPT__ specifies the UART interrupt source to enable.

+  *          This parameter can be one of the following values:

+  *            @arg UART_IT_CTS:  CTS change interrupt

+  *            @arg UART_IT_LBD:  LIN Break detection interrupt

+  *            @arg UART_IT_TXE:  Transmit Data Register empty interrupt

+  *            @arg UART_IT_TC:   Transmission complete interrupt

+  *            @arg UART_IT_RXNE: Receive Data register not empty interrupt

+  *            @arg UART_IT_IDLE: Idle line detection interrupt

+  *            @arg UART_IT_PE:   Parity Error interrupt

+  *            @arg UART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)

+  * @retval None

+  */

+#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & UART_IT_MASK)): \

+                                                           (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & UART_IT_MASK)): \

+                                                           ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & UART_IT_MASK)))

+

+/** @brief  Disable the specified UART interrupt.

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  * @param  __INTERRUPT__ specifies the UART interrupt source to disable.

+  *          This parameter can be one of the following values:

+  *            @arg UART_IT_CTS:  CTS change interrupt

+  *            @arg UART_IT_LBD:  LIN Break detection interrupt

+  *            @arg UART_IT_TXE:  Transmit Data Register empty interrupt

+  *            @arg UART_IT_TC:   Transmission complete interrupt

+  *            @arg UART_IT_RXNE: Receive Data register not empty interrupt

+  *            @arg UART_IT_IDLE: Idle line detection interrupt

+  *            @arg UART_IT_PE:   Parity Error interrupt

+  *            @arg UART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)

+  * @retval None

+  */

+#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & UART_IT_MASK)): \

+                                                           (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & UART_IT_MASK)): \

+                                                           ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & UART_IT_MASK)))

+

+/** @brief  Checks whether the specified UART interrupt has occurred or not.

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         UART Handle selects the USARTx or UARTy peripheral

+  *         (USART,UART availability and x,y values depending on device).

+  * @param  __IT__ specifies the UART interrupt source to check.

+  *          This parameter can be one of the following values:

+  *            @arg UART_IT_CTS: CTS change interrupt (not available for UART4 and UART5)

+  *            @arg UART_IT_LBD: LIN Break detection interrupt

+  *            @arg UART_IT_TXE: Transmit Data Register empty interrupt

+  *            @arg UART_IT_TC:  Transmission complete interrupt

+  *            @arg UART_IT_RXNE: Receive Data register not empty interrupt

+  *            @arg UART_IT_IDLE: Idle line detection interrupt

+  *            @arg UART_IT_ERR: Error interrupt

+  * @retval The new state of __IT__ (TRUE or FALSE).

+  */

+#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == UART_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28U) == UART_CR2_REG_INDEX)? \

+                                                      (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & UART_IT_MASK))

+

+/** @brief  Enable CTS flow control

+  * @note   This macro allows to enable CTS hardware flow control for a given UART instance,

+  *         without need to call HAL_UART_Init() function.

+  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.

+  * @note   As macro is expected to be used for modifying CTS Hw flow control feature activation, without need

+  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :

+  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )

+  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))

+  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).

+  *         It is used to select the USART peripheral (USART availability and x value depending on device).

+  * @retval None

+  */

+#define __HAL_UART_HWCONTROL_CTS_ENABLE(__HANDLE__)        \

+  do{                                                      \

+    SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE);  \

+    (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_CTSE;        \

+  } while(0U)

+

+/** @brief  Disable CTS flow control

+  * @note   This macro allows to disable CTS hardware flow control for a given UART instance,

+  *         without need to call HAL_UART_Init() function.

+  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.

+  * @note   As macro is expected to be used for modifying CTS Hw flow control feature activation, without need

+  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :

+  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )

+  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))

+  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).

+  *         It is used to select the USART peripheral (USART availability and x value depending on device).

+  * @retval None

+  */

+#define __HAL_UART_HWCONTROL_CTS_DISABLE(__HANDLE__)        \

+  do{                                                       \

+    CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \

+    (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_CTSE);      \

+  } while(0U)

+

+/** @brief  Enable RTS flow control

+  *         This macro allows to enable RTS hardware flow control for a given UART instance,

+  *         without need to call HAL_UART_Init() function.

+  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.

+  * @note   As macro is expected to be used for modifying RTS Hw flow control feature activation, without need

+  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :

+  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )

+  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))

+  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).

+  *         It is used to select the USART peripheral (USART availability and x value depending on device).

+  * @retval None

+  */

+#define __HAL_UART_HWCONTROL_RTS_ENABLE(__HANDLE__)       \

+  do{                                                     \

+    SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE); \

+    (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_RTSE;       \

+  } while(0U)

+

+/** @brief  Disable RTS flow control

+  *         This macro allows to disable RTS hardware flow control for a given UART instance,

+  *         without need to call HAL_UART_Init() function.

+  *         As involving direct access to UART registers, usage of this macro should be fully endorsed by user.

+  * @note   As macro is expected to be used for modifying RTS Hw flow control feature activation, without need

+  *         for USART instance Deinit/Init, following conditions for macro call should be fulfilled :

+  *           - UART instance should have already been initialised (through call of HAL_UART_Init() )

+  *           - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))

+  *             and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).

+  * @param  __HANDLE__ specifies the UART Handle.

+  *         The Handle Instance can be any USARTx (supporting the HW Flow control feature).

+  *         It is used to select the USART peripheral (USART availability and x value depending on device).

+  * @retval None

+  */

+#define __HAL_UART_HWCONTROL_RTS_DISABLE(__HANDLE__)       \

+  do{                                                      \

+    CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE);\

+    (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE);     \

+  } while(0U)

+

+/** @brief  Macro to enable the UART's one bit sample method

+  * @param  __HANDLE__ specifies the UART Handle.

+  * @retval None

+  */

+#define __HAL_UART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT)

+

+/** @brief  Macro to disable the UART's one bit sample method

+  * @param  __HANDLE__ specifies the UART Handle.

+  * @retval None

+  */

+#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT))

+

+/** @brief  Enable UART

+  * @param  __HANDLE__ specifies the UART Handle.

+  * @retval None

+  */

+#define __HAL_UART_ENABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR1 |=  USART_CR1_UE)

+

+/** @brief  Disable UART

+  * @param  __HANDLE__ specifies the UART Handle.

+  * @retval None

+  */

+#define __HAL_UART_DISABLE(__HANDLE__)              ((__HANDLE__)->Instance->CR1 &=  ~USART_CR1_UE)

+/**

+  * @}

+  */

+

+/* Exported functions --------------------------------------------------------*/

+/** @addtogroup UART_Exported_Functions

+  * @{

+  */

+

+/** @addtogroup UART_Exported_Functions_Group1 Initialization and de-initialization functions

+  * @{

+  */

+

+/* Initialization/de-initialization functions  **********************************/

+HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength);

+HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod);

+HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart);

+void HAL_UART_MspInit(UART_HandleTypeDef *huart);

+void HAL_UART_MspDeInit(UART_HandleTypeDef *huart);

+

+/* Callbacks Register/UnRegister functions  ***********************************/

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback);

+HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+

+/**

+  * @}

+  */

+

+/** @addtogroup UART_Exported_Functions_Group2 IO operation functions

+  * @{

+  */

+

+/* IO operation functions *******************************************************/

+HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);

+HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);

+HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

+HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

+HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

+HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

+HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart);

+/* Transfer Abort functions */

+HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart);

+

+void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);

+void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);

+void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);

+void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

+void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);

+void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);

+void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart);

+void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart);

+void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart);

+

+/**

+  * @}

+  */

+

+/** @addtogroup UART_Exported_Functions_Group3

+  * @{

+  */

+/* Peripheral Control functions  ************************************************/

+HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart);

+HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart);

+/**

+  * @}

+  */

+

+/** @addtogroup UART_Exported_Functions_Group4

+  * @{

+  */

+/* Peripheral State functions  **************************************************/

+HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart);

+uint32_t              HAL_UART_GetError(UART_HandleTypeDef *huart);

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+/* Private types -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+/* Private constants ---------------------------------------------------------*/

+/** @defgroup UART_Private_Constants UART Private Constants

+  * @{

+  */

+/** @brief UART interruptions flag mask

+  *

+  */

+#define UART_IT_MASK                     0x0000FFFFU

+

+#define UART_CR1_REG_INDEX               1U

+#define UART_CR2_REG_INDEX               2U

+#define UART_CR3_REG_INDEX               3U

+/**

+  * @}

+  */

+

+/* Private macros ------------------------------------------------------------*/

+/** @defgroup UART_Private_Macros UART Private Macros

+  * @{

+  */

+#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B) || \

+                                     ((LENGTH) == UART_WORDLENGTH_9B))

+#define IS_UART_LIN_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B))

+#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \

+                                    ((STOPBITS) == UART_STOPBITS_2))

+#define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \

+                                ((PARITY) == UART_PARITY_EVEN) || \

+                                ((PARITY) == UART_PARITY_ODD))

+#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\

+                              (((CONTROL) == UART_HWCONTROL_NONE) || \

+                               ((CONTROL) == UART_HWCONTROL_RTS) || \

+                               ((CONTROL) == UART_HWCONTROL_CTS) || \

+                               ((CONTROL) == UART_HWCONTROL_RTS_CTS))

+#define IS_UART_MODE(MODE) ((((MODE) & 0x0000FFF3U) == 0x00U) && ((MODE) != 0x00U))

+#define IS_UART_STATE(STATE) (((STATE) == UART_STATE_DISABLE) || \

+                              ((STATE) == UART_STATE_ENABLE))

+#define IS_UART_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16) || \

+                                        ((SAMPLING) == UART_OVERSAMPLING_8))

+#define IS_UART_LIN_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16))

+#define IS_UART_LIN_BREAK_DETECT_LENGTH(LENGTH) (((LENGTH) == UART_LINBREAKDETECTLENGTH_10B) || \

+                                                 ((LENGTH) == UART_LINBREAKDETECTLENGTH_11B))

+#define IS_UART_WAKEUPMETHOD(WAKEUP) (((WAKEUP) == UART_WAKEUPMETHOD_IDLELINE) || \

+                                      ((WAKEUP) == UART_WAKEUPMETHOD_ADDRESSMARK))

+#define IS_UART_BAUDRATE(BAUDRATE) ((BAUDRATE) <= 4000000U)

+#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0x0FU)

+

+#define UART_DIV_SAMPLING16(_PCLK_, _BAUD_)            (((_PCLK_)*25U)/(4U*(_BAUD_)))

+#define UART_DIVMANT_SAMPLING16(_PCLK_, _BAUD_)        (UART_DIV_SAMPLING16((_PCLK_), (_BAUD_))/100U)

+#define UART_DIVFRAQ_SAMPLING16(_PCLK_, _BAUD_)        (((UART_DIV_SAMPLING16((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) * 100U)) * 16U + 50U) / 100U)

+/* UART BRR = mantissa + overflow + fraction

+            = (UART DIVMANT << 4) + (UART DIVFRAQ & 0xF0) + (UART DIVFRAQ & 0x0FU) */

+#define UART_BRR_SAMPLING16(_PCLK_, _BAUD_)            (((UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) << 4U) + \

+                                                        (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0xF0U)) + \

+                                                        (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0x0FU))

+

+#define UART_DIV_SAMPLING8(_PCLK_, _BAUD_)             (((_PCLK_)*25U)/(2U*(_BAUD_)))

+#define UART_DIVMANT_SAMPLING8(_PCLK_, _BAUD_)         (UART_DIV_SAMPLING8((_PCLK_), (_BAUD_))/100U)

+#define UART_DIVFRAQ_SAMPLING8(_PCLK_, _BAUD_)         (((UART_DIV_SAMPLING8((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) * 100U)) * 8U + 50U) / 100U)

+/* UART BRR = mantissa + overflow + fraction

+            = (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07U) */

+#define UART_BRR_SAMPLING8(_PCLK_, _BAUD_)             (((UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) << 4U) + \

+                                                        ((UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0xF8U) << 1U)) + \

+                                                        (UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0x07U))

+

+/**

+  * @}

+  */

+

+/* Private functions ---------------------------------------------------------*/

+/** @defgroup UART_Private_Functions UART Private Functions

+  * @{

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* __STM32L1xx_HAL_UART_H */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.c
new file mode 100644
index 0000000..1e4b51b
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal.c
@@ -0,0 +1,559 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal.c

+  * @author  MCD Application Team

+  * @brief   HAL module driver.

+  *          This is the common part of the HAL initialization

+  *

+  @verbatim

+  ==============================================================================

+                     ##### How to use this driver #####

+  ==============================================================================

+    [..]

+    The common HAL driver contains a set of generic and common APIs that can be

+    used by the PPP peripheral drivers and the user to start using the HAL.

+    [..]

+    The HAL contains two APIs categories:

+         (+) Common HAL APIs

+         (+) Services HAL APIs

+

+  @endverbatim

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @defgroup HAL HAL

+  * @brief HAL module driver.

+  * @{

+  */

+

+#ifdef HAL_MODULE_ENABLED

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+

+/** @defgroup HAL_Private_Defines HAL Private Defines

+  * @{

+  */

+

+/**

+ * @brief STM32L1xx HAL Driver version number

+   */

+#define __STM32L1xx_HAL_VERSION_MAIN   (0x01) /*!< [31:24] main version */

+#define __STM32L1xx_HAL_VERSION_SUB1   (0x04) /*!< [23:16] sub1 version */

+#define __STM32L1xx_HAL_VERSION_SUB2   (0x00) /*!< [15:8]  sub2 version */

+#define __STM32L1xx_HAL_VERSION_RC     (0x00) /*!< [7:0]  release candidate */

+#define __STM32L1xx_HAL_VERSION         ((__STM32L1xx_HAL_VERSION_MAIN << 24)\

+                                        |(__STM32L1xx_HAL_VERSION_SUB1 << 16)\

+                                        |(__STM32L1xx_HAL_VERSION_SUB2 << 8 )\

+                                        |(__STM32L1xx_HAL_VERSION_RC))

+

+#define IDCODE_DEVID_MASK    (0x00000FFFU)

+

+/**

+  * @}

+  */

+

+/* Private macro -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+/* Private functions ---------------------------------------------------------*/

+

+/* Exported variables --------------------------------------------------------*/

+/** @addtogroup HAL_Exported_Variables

+  * @{

+  */

+__IO uint32_t uwTick;

+uint32_t uwTickPrio = (1UL << __NVIC_PRIO_BITS); /* Invalid priority */

+uint32_t uwTickFreq = HAL_TICK_FREQ_DEFAULT;  /* 1KHz */

+/**

+  * @}

+  */

+

+/* Exported functions --------------------------------------------------------*/

+/** @defgroup HAL_Exported_Functions HAL Exported Functions

+  * @{

+  */

+

+/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions

+ *  @brief    Initialization and de-initialization functions

+ *

+@verbatim

+ ===============================================================================

+              ##### Initialization and de-initialization functions #####

+ ===============================================================================

+   [..]  This section provides functions allowing to:

+      (+) Initialize the Flash interface, the NVIC allocation and initial clock

+          configuration. It initializes the source of time base also when timeout

+          is needed and the backup domain when enabled.

+      (+) De-initialize common part of the HAL.

+      (+) Configure the time base source to have 1ms time base with a dedicated

+          Tick interrupt priority.

+        (++) SysTick timer is used by default as source of time base, but user

+             can eventually implement his proper time base source (a general purpose

+             timer for example or other time source), keeping in mind that Time base

+             duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and

+             handled in milliseconds basis.

+        (++) Time base configuration function (HAL_InitTick ()) is called automatically

+             at the beginning of the program after reset by HAL_Init() or at any time

+             when clock is configured, by HAL_RCC_ClockConfig().

+        (++) Source of time base is configured  to generate interrupts at regular

+             time intervals. Care must be taken if HAL_Delay() is called from a

+             peripheral ISR process, the Tick interrupt line must have higher priority

+            (numerically lower) than the peripheral interrupt. Otherwise the caller

+            ISR process will be blocked.

+       (++) functions affecting time base configurations are declared as __weak

+             to make  override possible  in case of other  implementations in user file.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief This function configures the Flash prefetch,

+  *        configures time base source, NVIC and Low level hardware

+  * @note This function is called at the beginning of program after reset and before

+  *       the clock configuration

+  * @note The time base configuration is based on MSI clock when exiting from Reset.

+  *       Once done, time base tick start incrementing.

+  *        In the default implementation,Systick is used as source of time base.

+  *        the tick variable is incremented each 1ms in its ISR.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_Init(void)

+{

+  HAL_StatusTypeDef  status = HAL_OK;

+

+  /* Configure Flash prefetch */

+#if (PREFETCH_ENABLE != 0)

+  __HAL_FLASH_PREFETCH_BUFFER_ENABLE();

+#endif /* PREFETCH_ENABLE */

+

+  /* Set Interrupt Group Priority */

+  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);

+

+  /* Use systick as time base source and configure 1ms tick (default clock after Reset is MSI) */

+  if (HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)

+  {

+    status = HAL_ERROR;

+  }

+  else

+  {

+    /* Init the low level hardware */

+    HAL_MspInit();

+  }

+

+  /* Return function status */

+  return status;

+}

+

+/**

+  * @brief This function de-initializes common part of the HAL and stops the source

+  *        of time base.

+  * @note This function is optional.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_DeInit(void)

+{

+  /* Reset of all peripherals */

+  __HAL_RCC_APB1_FORCE_RESET();

+  __HAL_RCC_APB1_RELEASE_RESET();

+

+  __HAL_RCC_APB2_FORCE_RESET();

+  __HAL_RCC_APB2_RELEASE_RESET();

+

+  __HAL_RCC_AHB_FORCE_RESET();

+  __HAL_RCC_AHB_RELEASE_RESET();

+

+  /* De-Init the low level hardware */

+  HAL_MspDeInit();

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initialize the MSP.

+  * @retval None

+  */

+__weak void HAL_MspInit(void)

+{

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_MspInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  DeInitialize the MSP.

+  * @retval None

+  */

+__weak void HAL_MspDeInit(void)

+{

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_MspDeInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief This function configures the source of the time base:

+  *        The time source is configured to have 1ms time base with a dedicated

+  *        Tick interrupt priority.

+  * @note This function is called  automatically at the beginning of program after

+  *       reset by HAL_Init() or at any time when clock is reconfigured  by HAL_RCC_ClockConfig().

+  * @note In the default implementation, SysTick timer is the source of time base.

+  *       It is used to generate interrupts at regular time intervals.

+  *       Care must be taken if HAL_Delay() is called from a peripheral ISR process,

+  *       The SysTick interrupt must have higher priority (numerically lower)

+  *       than the peripheral interrupt. Otherwise the caller ISR process will be blocked.

+  *       The function is declared as __weak  to be overwritten  in case of other

+  *       implementation  in user file.

+  * @param TickPriority Tick interrupt priority.

+  * @retval HAL status

+  */

+__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)

+{

+  HAL_StatusTypeDef  status = HAL_OK;

+

+  if (uwTickFreq != 0U)

+  {

+    /*Configure the SysTick to have interrupt in 1ms time basis*/

+    if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) == 0U)

+    {

+      /* Configure the SysTick IRQ priority */

+      if (TickPriority < (1UL << __NVIC_PRIO_BITS))

+      {

+        HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);

+        uwTickPrio = TickPriority;

+      }

+      else

+      {

+        status = HAL_ERROR;

+      }

+    }

+    else

+    {

+      status = HAL_ERROR;

+    }

+  }

+  else

+  {

+    status = HAL_ERROR;

+  }

+

+  /* Return function status */

+  return status;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions

+ *  @brief    HAL Control functions

+ *

+@verbatim

+ ===============================================================================

+                      ##### HAL Control functions #####

+ ===============================================================================

+    [..]  This section provides functions allowing to:

+      (+) Provide a tick value in millisecond

+      (+) Provide a blocking delay in millisecond

+      (+) Suspend the time base source interrupt

+      (+) Resume the time base source interrupt

+      (+) Get the HAL API driver version

+      (+) Get the device identifier

+      (+) Get the device revision identifier

+      (+) Get the unique device identifier

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief This function is called to increment a global variable "uwTick"

+  *        used as application time base.

+  * @note In the default implementation, this variable is incremented each 1ms

+  *       in SysTick ISR.

+ * @note This function is declared as __weak to be overwritten in case of other

+  *      implementations in user file.

+  * @retval None

+  */

+__weak void HAL_IncTick(void)

+{

+  uwTick += uwTickFreq;

+}

+

+/**

+  * @brief Provide a tick value in millisecond.

+  * @note This function is declared as __weak to be overwritten in case of other

+  *       implementations in user file.

+  * @retval tick value

+  */

+__weak uint32_t HAL_GetTick(void)

+{

+  return uwTick;

+}

+

+/**

+  * @brief This function returns a tick priority.

+  * @retval tick priority

+  */

+uint32_t HAL_GetTickPrio(void)

+{

+  return uwTickPrio;

+}

+

+/**

+  * @brief Set new tick Freq.

+  * @param Freq tick frequency

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_SetTickFreq(uint32_t Freq)

+{

+  HAL_StatusTypeDef status  = HAL_OK;

+  assert_param(IS_TICKFREQ(Freq));

+

+  if (uwTickFreq != Freq)

+  {

+    /* Apply the new tick Freq  */

+    status = HAL_InitTick(uwTickPrio);

+    if (status == HAL_OK)

+    {

+      uwTickFreq = Freq;

+    }

+  }

+

+  return status;

+}

+

+/**

+  * @brief Return tick frequency.

+  * @retval tick period in Hz

+  */

+uint32_t HAL_GetTickFreq(void)

+{

+  return uwTickFreq;

+}

+

+/**

+  * @brief This function provides minimum delay (in milliseconds) based

+  *        on variable incremented.

+  * @note In the default implementation , SysTick timer is the source of time base.

+  *       It is used to generate interrupts at regular time intervals where uwTick

+  *       is incremented.

+  * @note This function is declared as __weak to be overwritten in case of other

+  *       implementations in user file.

+  * @param Delay specifies the delay time length, in milliseconds.

+  * @retval None

+  */

+__weak void HAL_Delay(uint32_t Delay)

+{

+  uint32_t tickstart = HAL_GetTick();

+  uint32_t wait = Delay;

+

+  /* Add a period to guaranty minimum wait */

+  if (wait < HAL_MAX_DELAY)

+  {

+    wait += (uint32_t)(uwTickFreq);

+  }

+

+  while((HAL_GetTick() - tickstart) < wait)

+  {

+  }

+}

+

+/**

+  * @brief Suspend the Tick increment.

+  * @note In the default implementation , SysTick timer is the source of time base. It is

+  *       used to generate interrupts at regular time intervals. Once HAL_SuspendTick()

+  *       is called, the SysTick interrupt will be disabled and so Tick increment

+  *       is suspended.

+  * @note This function is declared as __weak to be overwritten in case of other

+  *       implementations in user file.

+  * @retval None

+  */

+__weak void HAL_SuspendTick(void)

+{

+  /* Disable SysTick Interrupt */

+  CLEAR_BIT(SysTick->CTRL,SysTick_CTRL_TICKINT_Msk);

+}

+

+/**

+  * @brief Resume the Tick increment.

+  * @note In the default implementation , SysTick timer is the source of time base. It is

+  *       used to generate interrupts at regular time intervals. Once HAL_ResumeTick()

+  *       is called, the SysTick interrupt will be enabled and so Tick increment

+  *       is resumed.

+  * @note This function is declared as __weak to be overwritten in case of other

+  *       implementations in user file.

+  * @retval None

+  */

+__weak void HAL_ResumeTick(void)

+{

+  /* Enable SysTick Interrupt */

+  SET_BIT(SysTick->CTRL,SysTick_CTRL_TICKINT_Msk);

+}

+

+/**

+  * @brief Return the HAL revision

+  * @retval version: 0xXYZR (8bits for each decimal, R for RC)

+  */

+uint32_t HAL_GetHalVersion(void)

+{

+  return __STM32L1xx_HAL_VERSION;

+}

+

+/**

+  * @brief Return the device revision identifier.

+  * @retval Device revision identifier

+  */

+uint32_t HAL_GetREVID(void)

+{

+  return((DBGMCU->IDCODE) >> 16U);

+}

+

+/**

+  * @brief  Return the device identifier.

+  * @retval Device identifier

+  */

+uint32_t HAL_GetDEVID(void)

+{

+   return((DBGMCU->IDCODE) & IDCODE_DEVID_MASK);

+}

+

+/**

+  * @brief  Return the first word of the unique device identifier (UID based on 96 bits)

+  * @retval Device identifier 31:0 bits

+  */

+uint32_t HAL_GetUIDw0(void)

+{

+  return(READ_REG(*((uint32_t *)UID_BASE)));

+}

+

+/**

+  * @brief  Return the second word of the unique device identifier (UID based on 96 bits)

+  * @retval Device identifier 63:32 bits

+  */

+uint32_t HAL_GetUIDw1(void)

+{

+  return(READ_REG(*((uint32_t *)(UID_BASE + 0x4U))));

+}

+

+/**

+  * @brief  Return the third word of the unique device identifier (UID based on 96 bits)

+  * @retval Device identifier 95:64 bits

+  */

+uint32_t HAL_GetUIDw2(void)

+{

+  return(READ_REG(*((uint32_t *)(UID_BASE + 0x14U))));

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup HAL_Exported_Functions_Group3 DBGMCU Peripheral Control functions

+ *  @brief    DBGMCU Peripheral Control functions

+ *

+@verbatim

+ ===============================================================================

+                      ##### DBGMCU Peripheral Control functions #####

+ ===============================================================================

+    [..]  This section provides functions allowing to:

+      (+) Enable/Disable Debug module during SLEEP mode

+      (+) Enable/Disable Debug module during STOP mode

+      (+) Enable/Disable Debug module during STANDBY mode

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Enable the Debug Module during SLEEP mode

+  * @retval None

+  */

+void HAL_DBGMCU_EnableDBGSleepMode(void)

+{

+  SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP);

+}

+

+/**

+  * @brief  Disable the Debug Module during SLEEP mode

+  * @retval None

+  */

+void HAL_DBGMCU_DisableDBGSleepMode(void)

+{

+  CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP);

+}

+

+/**

+  * @brief  Enable the Debug Module during STOP mode

+  * @retval None

+  */

+void HAL_DBGMCU_EnableDBGStopMode(void)

+{

+  SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP);

+}

+

+/**

+  * @brief  Disable the Debug Module during STOP mode

+  * @retval None

+  */

+void HAL_DBGMCU_DisableDBGStopMode(void)

+{

+  CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP);

+}

+

+/**

+  * @brief  Enable the Debug Module during STANDBY mode

+  * @retval None

+  */

+void HAL_DBGMCU_EnableDBGStandbyMode(void)

+{

+  SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY);

+}

+

+/**

+  * @brief  Disable the Debug Module during STANDBY mode

+  * @retval None

+  */

+void HAL_DBGMCU_DisableDBGStandbyMode(void)

+{

+  CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY);

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#endif /* HAL_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_cortex.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_cortex.c
new file mode 100644
index 0000000..954fc61
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_cortex.c
@@ -0,0 +1,513 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_cortex.c

+  * @author  MCD Application Team

+  * @brief   CORTEX HAL module driver.

+  *

+  *          This file provides firmware functions to manage the following

+  *          functionalities of the CORTEX:

+  *           + Initialization and de-initialization functions

+  *           + Peripheral Control functions

+  *          

+  *  @verbatim    

+  ==============================================================================

+                        ##### How to use this driver #####

+  ==============================================================================

+

+    [..]  

+    *** How to configure Interrupts using Cortex HAL driver ***

+    ===========================================================

+    [..]     

+    This section provide functions allowing to configure the NVIC interrupts (IRQ).

+    The Cortex-M3 exceptions are managed by CMSIS functions.

+   

+    (#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping() function

+

+     (#)  Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority() 

+

+     (#)  Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ() 

+      

+

+     -@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ pre-emption is no more possible. 

+         The pending IRQ priority will be managed only by the sub priority.

+   

+     -@- IRQ priority order (sorted by highest to lowest priority):

+        (+@) Lowest pre-emption priority

+        (+@) Lowest sub priority

+        (+@) Lowest hardware priority (IRQ number)

+ 

+    [..]  

+    *** How to configure Systick using Cortex HAL driver ***

+    ========================================================

+    [..]

+    Setup SysTick Timer for 1 msec interrupts.

+           

+   (+) The HAL_SYSTICK_Config()function calls the SysTick_Config() function which

+       is a CMSIS function that:

+        (++) Configures the SysTick Reload register with value passed as function parameter.

+        (++) Configures the SysTick IRQ priority to the lowest value (0x0F).

+        (++) Resets the SysTick Counter register.

+        (++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK).

+        (++) Enables the SysTick Interrupt.

+        (++) Starts the SysTick Counter.

+    

+   (+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro

+       __HAL_CORTEX_SYSTICKCLK_CONFIG(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the

+       HAL_SYSTICK_Config() function call. The __HAL_CORTEX_SYSTICKCLK_CONFIG() macro is defined

+       inside the stm32l1xx_hal_cortex.h file.

+

+   (+) You can change the SysTick IRQ priority by calling the

+       HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function 

+       call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function.

+

+   (+) To adjust the SysTick time base, use the following formula:

+                            

+       Reload Value = SysTick Counter Clock (Hz) x  Desired Time base (s)

+       (++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function

+       (++) Reload Value should not exceed 0xFFFFFF

+   

+  @endverbatim

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/*

+  Additional Tables: CORTEX_NVIC_Priority_Table

+     The table below gives the allowed values of the pre-emption priority and subpriority according

+     to the Priority Grouping configuration performed by HAL_NVIC_SetPriorityGrouping() function.

+       ==========================================================================================================================

+         NVIC_PriorityGroup   | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority  |       Description

+       ==========================================================================================================================

+        NVIC_PRIORITYGROUP_0  |                0                  |            0-15             | 0 bits for pre-emption priority

+                              |                                   |                             | 4 bits for subpriority

+       --------------------------------------------------------------------------------------------------------------------------

+        NVIC_PRIORITYGROUP_1  |                0-1                |            0-7              | 1 bits for pre-emption priority

+                              |                                   |                             | 3 bits for subpriority

+       --------------------------------------------------------------------------------------------------------------------------    

+        NVIC_PRIORITYGROUP_2  |                0-3                |            0-3              | 2 bits for pre-emption priority

+                              |                                   |                             | 2 bits for subpriority

+       --------------------------------------------------------------------------------------------------------------------------    

+        NVIC_PRIORITYGROUP_3  |                0-7                |            0-1              | 3 bits for pre-emption priority

+                              |                                   |                             | 1 bits for subpriority

+       --------------------------------------------------------------------------------------------------------------------------    

+        NVIC_PRIORITYGROUP_4  |                0-15               |            0                | 4 bits for pre-emption priority

+                              |                                   |                             | 0 bits for subpriority                       

+       ==========================================================================================================================

+*/

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @defgroup CORTEX CORTEX

+  * @brief CORTEX HAL module driver

+  * @{

+  */

+

+#ifdef HAL_CORTEX_MODULE_ENABLED

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/* Private macro -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+/* Private functions ---------------------------------------------------------*/

+

+/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions

+  * @{

+  */

+

+

+/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions

+ *  @brief    Initialization and Configuration functions 

+ *

+@verbatim    

+  ==============================================================================

+              ##### Initialization and de-initialization functions #####

+  ==============================================================================

+    [..]

+      This section provide the Cortex HAL driver functions allowing to configure Interrupts

+      Systick functionalities 

+

+@endverbatim

+  * @{

+  */

+

+

+/**

+  * @brief  Sets the priority grouping field (pre-emption priority and subpriority)

+  *         using the required unlock sequence.

+  * @param  PriorityGroup The priority grouping bits length. 

+  *         This parameter can be one of the following values:

+  *         @arg NVIC_PRIORITYGROUP_0: 0 bits for pre-emption priority

+  *                                    4 bits for subpriority

+  *         @arg NVIC_PRIORITYGROUP_1: 1 bits for pre-emption priority

+  *                                    3 bits for subpriority

+  *         @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority

+  *                                    2 bits for subpriority

+  *         @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority

+  *                                    1 bits for subpriority

+  *         @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority

+  *                                    0 bits for subpriority

+  * @note   When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. 

+  *         The pending IRQ priority will be managed only by the subpriority. 

+  * @retval None

+  */

+void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)

+{

+  /* Check the parameters */

+  assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));

+  

+  /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */

+  NVIC_SetPriorityGrouping(PriorityGroup);

+}

+

+/**

+  * @brief  Sets the priority of an interrupt.

+  * @param  IRQn External interrupt number

+  *         This parameter can be an enumerator of IRQn_Type enumeration

+  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32l1xx.h))

+  * @param  PreemptPriority The pre-emption priority for the IRQn channel.

+  *         This parameter can be a value between 0 and 15

+  *         A lower priority value indicates a higher priority 

+  * @param  SubPriority the subpriority level for the IRQ channel.

+  *         This parameter can be a value between 0 and 15

+  *         A lower priority value indicates a higher priority.          

+  * @retval None

+  */

+void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)

+{

+  uint32_t prioritygroup = 0x00;

+  

+  /* Check the parameters */

+  assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));

+  assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));

+  

+  prioritygroup = NVIC_GetPriorityGrouping();

+  

+  NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));

+}

+

+/**

+  * @brief  Enables a device specific interrupt in the NVIC interrupt controller.

+  * @note   To configure interrupts priority correctly, the NVIC_PriorityGroupConfig()

+  *         function should be called before. 

+  * @param  IRQn External interrupt number

+  *         This parameter can be an enumerator of IRQn_Type enumeration

+  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32l1xx.h))

+  * @retval None

+  */

+void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  /* Check the parameters */

+  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));

+  

+  /* Enable interrupt */

+  NVIC_EnableIRQ(IRQn);

+}

+

+/**

+  * @brief  Disables a device specific interrupt in the NVIC interrupt controller.

+  * @param  IRQn External interrupt number

+  *         This parameter can be an enumerator of IRQn_Type enumeration

+  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32l1xxxx.h))  

+  * @retval None

+  */

+void HAL_NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  /* Check the parameters */

+  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));

+  

+  /* Disable interrupt */

+  NVIC_DisableIRQ(IRQn);

+}

+

+/**

+  * @brief  Initiates a system reset request to reset the MCU.

+  * @retval None

+  */

+void HAL_NVIC_SystemReset(void)

+{

+  /* System Reset */

+  NVIC_SystemReset();

+}

+

+/**

+  * @brief  Initializes the System Timer and its interrupt, and starts the System Tick Timer.

+  *         Counter is in free running mode to generate periodic interrupts.

+  * @param  TicksNumb Specifies the ticks Number of ticks between two interrupts.

+  * @retval status:  - 0  Function succeeded.

+  *                  - 1  Function failed.

+  */

+uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)

+{

+   return SysTick_Config(TicksNumb);

+}

+/**

+  * @}

+  */

+

+/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions

+ *  @brief    Cortex control functions 

+ *

+@verbatim   

+  ==============================================================================

+                      ##### Peripheral Control functions #####

+  ==============================================================================

+    [..]

+      This subsection provides a set of functions allowing to control the CORTEX

+      (NVIC, SYSTICK, MPU) functionalities. 

+ 

+      

+@endverbatim

+  * @{

+  */

+

+#if (__MPU_PRESENT == 1)

+/**

+  * @brief  Enable the MPU.

+  * @param  MPU_Control Specifies the control mode of the MPU during hard fault, 

+  *          NMI, FAULTMASK and privileged accessto the default memory 

+  *          This parameter can be one of the following values:

+  *            @arg MPU_HFNMI_PRIVDEF_NONE

+  *            @arg MPU_HARDFAULT_NMI

+  *            @arg MPU_PRIVILEGED_DEFAULT

+  *            @arg MPU_HFNMI_PRIVDEF

+  * @retval None

+  */

+void HAL_MPU_Enable(uint32_t MPU_Control)

+{

+  /* Enable the MPU */

+  MPU->CTRL = (MPU_Control | MPU_CTRL_ENABLE_Msk);

+

+  /* Ensure MPU setting take effects */

+  __DSB();

+  __ISB();

+}

+

+/**

+  * @brief  Disable the MPU.

+  * @retval None

+  */

+void HAL_MPU_Disable(void)

+{

+  /* Make sure outstanding transfers are done */

+  __DMB();

+

+  /* Disable the MPU and clear the control register*/

+  MPU->CTRL  = 0;

+}

+

+/**

+  * @brief  Initializes and configures the Region and the memory to be protected.

+  * @param  MPU_Init Pointer to a MPU_Region_InitTypeDef structure that contains

+  *                the initialization and configuration information.

+  * @retval None

+  */

+void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init)

+{

+  /* Check the parameters */

+  assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number));

+  assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable));

+

+  /* Set the Region number */

+  MPU->RNR = MPU_Init->Number;

+

+  if ((MPU_Init->Enable) != RESET)

+  {

+    /* Check the parameters */

+    assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec));

+    assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission));

+    assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField));

+    assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable));

+    assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable));

+    assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));

+    assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));

+    assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));

+    

+    MPU->RBAR = MPU_Init->BaseAddress;

+    MPU->RASR = ((uint32_t)MPU_Init->DisableExec             << MPU_RASR_XN_Pos)   |

+                ((uint32_t)MPU_Init->AccessPermission        << MPU_RASR_AP_Pos)   |

+                ((uint32_t)MPU_Init->TypeExtField            << MPU_RASR_TEX_Pos)  |

+                ((uint32_t)MPU_Init->IsShareable             << MPU_RASR_S_Pos)    |

+                ((uint32_t)MPU_Init->IsCacheable             << MPU_RASR_C_Pos)    |

+                ((uint32_t)MPU_Init->IsBufferable            << MPU_RASR_B_Pos)    |

+                ((uint32_t)MPU_Init->SubRegionDisable        << MPU_RASR_SRD_Pos)  |

+                ((uint32_t)MPU_Init->Size                    << MPU_RASR_SIZE_Pos) |

+                ((uint32_t)MPU_Init->Enable                  << MPU_RASR_ENABLE_Pos);

+  }

+  else

+  {

+    MPU->RBAR = 0x00;

+    MPU->RASR = 0x00;

+  }

+}

+#endif /* __MPU_PRESENT */

+

+/**

+  * @brief  Gets the priority grouping field from the NVIC Interrupt Controller.

+  * @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field)

+  */

+uint32_t HAL_NVIC_GetPriorityGrouping(void)

+{

+  /* Get the PRIGROUP[10:8] field value */

+  return NVIC_GetPriorityGrouping();

+}

+

+/**

+  * @brief  Gets the priority of an interrupt.

+  * @param  IRQn External interrupt number

+  *         This parameter can be an enumerator of IRQn_Type enumeration

+  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32l1xxxx.h))

+  * @param  PriorityGroup the priority grouping bits length.

+  *         This parameter can be one of the following values:

+  *           @arg NVIC_PRIORITYGROUP_0: 0 bits for pre-emption priority

+  *                                      4 bits for subpriority

+  *           @arg NVIC_PRIORITYGROUP_1: 1 bits for pre-emption priority

+  *                                      3 bits for subpriority

+  *           @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority

+  *                                      2 bits for subpriority

+  *           @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority

+  *                                      1 bits for subpriority

+  *           @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority

+  *                                      0 bits for subpriority

+  * @param  pPreemptPriority Pointer on the Preemptive priority value (starting from 0).

+  * @param  pSubPriority Pointer on the Subpriority value (starting from 0).

+  * @retval None

+  */

+void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority)

+{

+  /* Check the parameters */

+  assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));

+ /* Get priority for Cortex-M system or device specific interrupts */

+  NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority);

+}

+

+/**

+  * @brief  Sets Pending bit of an external interrupt.

+  * @param  IRQn External interrupt number

+  *         This parameter can be an enumerator of IRQn_Type enumeration

+  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32l1xxxx.h))  

+  * @retval None

+  */

+void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{ 

+  /* Set interrupt pending */

+  NVIC_SetPendingIRQ(IRQn);

+}

+

+/**

+  * @brief Gets Pending Interrupt (reads the pending register in the NVIC 

+  *         and returns the pending bit for the specified interrupt).

+  * @param IRQn External interrupt number

+  *         This parameter can be an enumerator of IRQn_Type enumeration

+  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32l1xxxx.h))  

+  * @retval status: - 0  Interrupt status is not pending.

+  *                 - 1  Interrupt status is pending.

+  */

+uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{ 

+  /* Return 1 if pending else 0 */

+  return NVIC_GetPendingIRQ(IRQn);

+}

+

+/**

+  * @brief Clears the pending bit of an external interrupt.

+  * @param IRQn External interrupt number

+  *         This parameter can be an enumerator of IRQn_Type enumeration

+  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32l1xxxx.h))  

+  * @retval None

+  */

+void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{ 

+  /* Clear pending interrupt */

+  NVIC_ClearPendingIRQ(IRQn);

+}

+

+/**

+  * @brief Gets active interrupt ( reads the active register in NVIC and returns the active bit).

+  * @param IRQn External interrupt number

+  *         This parameter can be an enumerator of IRQn_Type enumeration

+  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32l1xxxx.h))  

+  * @retval status: - 0  Interrupt status is not pending.

+  *                 - 1  Interrupt status is pending.

+  */

+uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn)

+{ 

+  /* Return 1 if active else 0 */

+  return NVIC_GetActive(IRQn);

+}

+

+/**

+  * @brief  Configures the SysTick clock source.

+  * @param  CLKSource specifies the SysTick clock source.

+  *         This parameter can be one of the following values:

+  *             @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source.

+  *             @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source.

+  * @retval None

+  */

+void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource)

+{

+  /* Check the parameters */

+  assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));

+  if (CLKSource == SYSTICK_CLKSOURCE_HCLK)

+  {

+    SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;

+  }

+  else

+  {

+    SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK;

+  }

+}

+

+/**

+  * @brief  This function handles SYSTICK interrupt request.

+  * @retval None

+  */

+void HAL_SYSTICK_IRQHandler(void)

+{

+  HAL_SYSTICK_Callback();

+}

+

+/**

+  * @brief  SYSTICK callback.

+  * @retval None

+  */

+__weak void HAL_SYSTICK_Callback(void)

+{

+  /* NOTE : This function Should not be modified, when the callback is needed,

+            the HAL_SYSTICK_Callback could be implemented in the user file

+   */

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#endif /* HAL_CORTEX_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_dma.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_dma.c
new file mode 100644
index 0000000..2a7ffa4
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_dma.c
@@ -0,0 +1,908 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_dma.c

+  * @author  MCD Application Team

+  * @brief   DMA HAL module driver.

+  *          This file provides firmware functions to manage the following

+  *          functionalities of the Direct Memory Access (DMA) peripheral:

+  *           + Initialization and de-initialization functions

+  *           + IO operation functions

+  *           + Peripheral State and errors functions

+  @verbatim

+  ==============================================================================

+                        ##### How to use this driver #####

+  ==============================================================================

+  [..]

+   (#) Enable and configure the peripheral to be connected to the DMA Channel

+       (except for internal SRAM / FLASH memories: no initialization is

+       necessary). Please refer to the Reference manual for connection between peripherals

+       and DMA requests.

+

+   (#) For a given Channel, program the required configuration through the following parameters:

+       Channel request, Transfer Direction, Source and Destination data formats,

+       Circular or Normal mode, Channel Priority level, Source and Destination Increment mode

+       using HAL_DMA_Init() function.

+

+   (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error

+       detection.

+

+   (#) Use HAL_DMA_Abort() function to abort the current transfer

+

+     -@-   In Memory-to-Memory transfer mode, Circular mode is not allowed.

+     *** Polling mode IO operation ***

+     =================================

+     [..]

+       (+) Use HAL_DMA_Start() to start DMA transfer after the configuration of Source

+           address and destination address and the Length of data to be transferred

+       (+) Use HAL_DMA_PollForTransfer() to poll for the end of current transfer, in this

+           case a fixed Timeout can be configured by User depending from his application.

+

+     *** Interrupt mode IO operation ***

+     ===================================

+     [..]

+       (+) Configure the DMA interrupt priority using HAL_NVIC_SetPriority()

+       (+) Enable the DMA IRQ handler using HAL_NVIC_EnableIRQ()

+       (+) Use HAL_DMA_Start_IT() to start DMA transfer after the configuration of

+           Source address and destination address and the Length of data to be transferred.

+           In this case the DMA interrupt is configured

+       (+) Use HAL_DMA_IRQHandler() called under DMA_IRQHandler() Interrupt subroutine

+       (+) At the end of data transfer HAL_DMA_IRQHandler() function is executed and user can

+              add his own function to register callbacks with HAL_DMA_RegisterCallback().

+

+     *** DMA HAL driver macros list ***

+     =============================================

+     [..]

+       Below the list of macros in DMA HAL driver.

+

+       (+) __HAL_DMA_ENABLE: Enable the specified DMA Channel.

+       (+) __HAL_DMA_DISABLE: Disable the specified DMA Channel.

+       (+) __HAL_DMA_GET_FLAG: Get the DMA Channel pending flags.

+       (+) __HAL_DMA_CLEAR_FLAG: Clear the DMA Channel pending flags.

+       (+) __HAL_DMA_ENABLE_IT: Enable the specified DMA Channel interrupts.

+       (+) __HAL_DMA_DISABLE_IT: Disable the specified DMA Channel interrupts.

+       (+) __HAL_DMA_GET_IT_SOURCE: Check whether the specified DMA Channel interrupt is enabled or not.

+

+     [..]

+      (@) You can refer to the DMA HAL driver header file for more useful macros

+

+  @endverbatim

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @defgroup DMA DMA

+  * @brief DMA HAL module driver

+  * @{

+  */

+

+#ifdef HAL_DMA_MODULE_ENABLED

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/* Private macro -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+/** @defgroup DMA_Private_Functions DMA Private Functions

+  * @{

+  */

+

+static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);

+/**

+  * @}

+  */

+

+/* Exported functions ---------------------------------------------------------*/

+

+/** @defgroup DMA_Exported_Functions DMA Exported Functions

+  * @{

+  */

+

+/** @defgroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions

+ *  @brief   Initialization and de-initialization functions

+ *

+@verbatim

+ ===============================================================================

+             ##### Initialization and de-initialization functions  #####

+ ===============================================================================

+    [..]

+    This section provides functions allowing to initialize the DMA Channel source

+    and destination addresses, incrementation and data sizes, transfer direction,

+    circular/normal mode selection, memory-to-memory mode selection and Channel priority value.

+    [..]

+    The HAL_DMA_Init() function follows the DMA configuration procedures as described in

+    reference manual.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Initialize the DMA according to the specified

+  *         parameters in the DMA_InitTypeDef and initialize the associated handle.

+  * @param  hdma Pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA Channel.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma)

+{

+  uint32_t tmp;

+

+  /* Check the DMA handle allocation */

+  if(hdma == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));

+  assert_param(IS_DMA_DIRECTION(hdma->Init.Direction));

+  assert_param(IS_DMA_PERIPHERAL_INC_STATE(hdma->Init.PeriphInc));

+  assert_param(IS_DMA_MEMORY_INC_STATE(hdma->Init.MemInc));

+  assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment));

+  assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment));

+  assert_param(IS_DMA_MODE(hdma->Init.Mode));

+  assert_param(IS_DMA_PRIORITY(hdma->Init.Priority));

+

+#if defined (DMA2)

+  /* Compute the channel index */

+  if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1))

+  {

+    /* DMA1 */

+    hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2U;

+    hdma->DmaBaseAddress = DMA1;

+  }

+  else

+  {

+    /* DMA2 */

+    hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2U;

+    hdma->DmaBaseAddress = DMA2;

+  }

+#else

+  /* calculation of the channel index */

+  /* DMA1 */

+  hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2U;

+  hdma->DmaBaseAddress = DMA1;

+#endif

+

+  /* Change DMA peripheral state */

+  hdma->State = HAL_DMA_STATE_BUSY;

+

+  /* Get the CR register value */

+  tmp = hdma->Instance->CCR;

+

+  /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR and MEM2MEM bits */

+  tmp &= ((uint32_t)~(DMA_CCR_PL    | DMA_CCR_MSIZE   | DMA_CCR_PSIZE  |

+                      DMA_CCR_MINC  | DMA_CCR_PINC    | DMA_CCR_CIRC   |

+                      DMA_CCR_DIR   | DMA_CCR_MEM2MEM));

+

+  /* Prepare the DMA Channel configuration */

+  tmp |=  hdma->Init.Direction        |

+          hdma->Init.PeriphInc           | hdma->Init.MemInc           |

+          hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |

+          hdma->Init.Mode                | hdma->Init.Priority;

+

+  /* Write to DMA Channel CR register */

+  hdma->Instance->CCR = tmp;

+

+  /* Initialise the error code */

+  hdma->ErrorCode = HAL_DMA_ERROR_NONE;

+

+  /* Initialize the DMA state*/

+  hdma->State = HAL_DMA_STATE_READY;

+

+  /* Allocate lock resource and initialize it */

+  hdma->Lock = HAL_UNLOCKED;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  DeInitialize the DMA peripheral.

+  * @param  hdma pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA Channel.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma)

+{

+

+  /* Check the DMA handle allocation */

+  if (NULL == hdma )

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));

+

+  /* Disable the selected DMA Channelx */

+  __HAL_DMA_DISABLE(hdma);

+

+#if defined (DMA2)

+  /* Compute the channel index */

+  if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1))

+  {

+    /* DMA1 */

+    hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2U;

+    hdma->DmaBaseAddress = DMA1;

+  }

+  else

+  {

+    /* DMA2 */

+    hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2U;

+    hdma->DmaBaseAddress = DMA2;

+  }

+#else

+  /* calculation of the channel index */

+  /* DMA1 */

+  hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2U;

+  hdma->DmaBaseAddress = DMA1;

+#endif

+

+  /* Reset DMA Channel CR register */

+  hdma->Instance->CCR = 0U;

+

+  /* Clear all flags */

+  hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << (hdma->ChannelIndex & 0x1CU));

+

+  /* Clean callbacks */

+  hdma->XferCpltCallback = NULL;

+  hdma->XferHalfCpltCallback = NULL;

+  hdma->XferErrorCallback = NULL;

+  hdma->XferAbortCallback = NULL;

+

+  /* Initialise the error code */

+  hdma->ErrorCode = HAL_DMA_ERROR_NONE;

+

+  /* Initialize the DMA state */

+  hdma->State = HAL_DMA_STATE_RESET;

+

+  /* Release Lock */

+  __HAL_UNLOCK(hdma);

+

+  return HAL_OK;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup DMA_Exported_Functions_Group2 Input and Output operation functions

+ *  @brief   Input and Output operation functions

+ *

+@verbatim

+ ===============================================================================

+                      #####  IO operation functions  #####

+ ===============================================================================

+    [..]  This section provides functions allowing to:

+      (+) Configure the source, destination address and data length and Start DMA transfer

+      (+) Configure the source, destination address and data length and

+          Start DMA transfer with interrupt

+      (+) Abort DMA transfer

+      (+) Poll for transfer complete

+      (+) Handle DMA interrupt request

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Start the DMA Transfer.

+  * @param  hdma pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA Channel.

+  * @param  SrcAddress The source memory Buffer address

+  * @param  DstAddress The destination memory Buffer address

+  * @param  DataLength The length of data to be transferred from source to destination

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+  /* Check the parameters */

+  assert_param(IS_DMA_BUFFER_SIZE(DataLength));

+

+  /* Process locked */

+  __HAL_LOCK(hdma);

+

+  if(HAL_DMA_STATE_READY == hdma->State)

+  {

+    /* Change DMA peripheral state */

+    hdma->State = HAL_DMA_STATE_BUSY;

+    hdma->ErrorCode = HAL_DMA_ERROR_NONE;

+

+    /* Disable the peripheral */

+    __HAL_DMA_DISABLE(hdma);

+

+    /* Configure the source, destination address and the data length & clear flags*/

+    DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);

+

+    /* Enable the Peripheral */

+    __HAL_DMA_ENABLE(hdma);

+  }

+  else

+  {

+    /* Process Unlocked */

+    __HAL_UNLOCK(hdma);

+    status = HAL_BUSY;

+  }

+  return status;

+}

+

+/**

+  * @brief  Start the DMA Transfer with interrupt enabled.

+  * @param  hdma pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA Channel.

+  * @param  SrcAddress The source memory Buffer address

+  * @param  DstAddress The destination memory Buffer address

+  * @param  DataLength The length of data to be transferred from source to destination

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+  /* Check the parameters */

+  assert_param(IS_DMA_BUFFER_SIZE(DataLength));

+

+  /* Process locked */

+  __HAL_LOCK(hdma);

+

+  if(HAL_DMA_STATE_READY == hdma->State)

+  {

+    /* Change DMA peripheral state */

+    hdma->State = HAL_DMA_STATE_BUSY;

+    hdma->ErrorCode = HAL_DMA_ERROR_NONE;

+

+    /* Disable the peripheral */

+    __HAL_DMA_DISABLE(hdma);

+

+    /* Configure the source, destination address and the data length & clear flags*/

+    DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);

+

+    /* Enable the transfer complete interrupt */

+    /* Enable the transfer Error interrupt */

+    if(NULL != hdma->XferHalfCpltCallback )

+    {

+      /* Enable the Half transfer complete interrupt as well */

+      __HAL_DMA_ENABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));

+    }

+    else

+    {

+      __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);

+      __HAL_DMA_ENABLE_IT(hdma, (DMA_IT_TC | DMA_IT_TE));

+    }

+

+    /* Enable the Peripheral */

+    __HAL_DMA_ENABLE(hdma);

+  }

+  else

+  {

+    /* Process Unlocked */

+    __HAL_UNLOCK(hdma);

+

+    /* Remain BUSY */

+    status = HAL_BUSY;

+  }

+  return status;

+}

+

+/**

+  * @brief  Abort the DMA Transfer.

+  * @param  hdma pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA Channel.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+  /* Check the DMA peripheral state */

+  if(hdma->State != HAL_DMA_STATE_BUSY)

+  {

+    hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(hdma);

+

+    return HAL_ERROR;

+  }

+  else

+  {

+    /* Disable DMA IT */

+    __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));

+

+    /* Disable the channel */

+    __HAL_DMA_DISABLE(hdma);

+

+    /* Clear all flags */

+    hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << (hdma->ChannelIndex & 0x1CU));

+

+    /* Change the DMA state */

+    hdma->State = HAL_DMA_STATE_READY;

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(hdma);

+

+    return status;

+  }

+}

+

+/**

+  * @brief  Aborts the DMA Transfer in Interrupt mode.

+  * @param  hdma pointer to a DMA_HandleTypeDef structure that contains

+  *                 the configuration information for the specified DMA Channel.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+  if(HAL_DMA_STATE_BUSY != hdma->State)

+  {

+    /* no transfer ongoing */

+    hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;

+

+    status = HAL_ERROR;

+  }

+  else

+  {

+    /* Disable DMA IT */

+    __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));

+

+    /* Disable the channel */

+    __HAL_DMA_DISABLE(hdma);

+

+    /* Clear all flags */

+    hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << (hdma->ChannelIndex & 0x1CU));

+

+    /* Change the DMA state */

+    hdma->State = HAL_DMA_STATE_READY;

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(hdma);

+

+    /* Call User Abort callback */

+    if(hdma->XferAbortCallback != NULL)

+    {

+      hdma->XferAbortCallback(hdma);

+    }

+  }

+  return status;

+}

+

+/**

+  * @brief  Polling for transfer complete.

+  * @param  hdma pointer to a DMA_HandleTypeDef structure that contains

+  *                  the configuration information for the specified DMA Channel.

+  * @param  CompleteLevel Specifies the DMA level complete.

+  * @param  Timeout       Timeout duration.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout)

+{

+  uint32_t temp;

+  uint32_t tickstart;

+

+  if(HAL_DMA_STATE_BUSY != hdma->State)

+  {

+    /* no transfer ongoing */

+    hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;

+    __HAL_UNLOCK(hdma);

+    return HAL_ERROR;

+  }

+

+  /* Polling mode not supported in circular mode */

+  if ((hdma->Instance->CCR & DMA_CCR_CIRC) != 0U)

+  {

+    hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED;

+    return HAL_ERROR;

+  }

+

+  /* Get the level transfer complete flag */

+  if (HAL_DMA_FULL_TRANSFER == CompleteLevel)

+  {

+    /* Transfer Complete flag */

+    temp = DMA_FLAG_TC1 << (hdma->ChannelIndex & 0x1CU);

+  }

+  else

+  {

+    /* Half Transfer Complete flag */

+    temp = DMA_FLAG_HT1 << (hdma->ChannelIndex & 0x1CU);

+  }

+

+  /* Get tick */

+  tickstart = HAL_GetTick();

+

+  while((hdma->DmaBaseAddress->ISR & temp) == 0U)

+  {

+    if((hdma->DmaBaseAddress->ISR & (DMA_FLAG_TE1 << (hdma->ChannelIndex& 0x1CU))) != 0U)

+    {

+      /* When a DMA transfer error occurs */

+      /* A hardware clear of its EN bits is performed */

+      /* Clear all flags */

+      hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << (hdma->ChannelIndex & 0x1CU));

+

+      /* Update error code */

+      hdma->ErrorCode = HAL_DMA_ERROR_TE;

+

+      /* Change the DMA state */

+      hdma->State= HAL_DMA_STATE_READY;

+

+      /* Process Unlocked */

+      __HAL_UNLOCK(hdma);

+

+      return HAL_ERROR;

+    }

+    /* Check for the Timeout */

+    if(Timeout != HAL_MAX_DELAY)

+    {

+      if(((HAL_GetTick() - tickstart) > Timeout) ||  (Timeout == 0U))

+      {

+        /* Update error code */

+        hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT;

+

+        /* Change the DMA state */

+        hdma->State = HAL_DMA_STATE_READY;

+

+        /* Process Unlocked */

+        __HAL_UNLOCK(hdma);

+

+        return HAL_ERROR;

+      }

+    }

+  }

+

+  if(HAL_DMA_FULL_TRANSFER == CompleteLevel)

+  {

+    /* Clear the transfer complete flag */

+    hdma->DmaBaseAddress->IFCR = (DMA_FLAG_TC1 << (hdma->ChannelIndex& 0x1CU));

+

+    /* The selected Channelx EN bit is cleared (DMA is disabled and

+    all transfers are complete) */

+    hdma->State = HAL_DMA_STATE_READY;

+  }

+  else

+  {

+    /* Clear the half transfer complete flag */

+    hdma->DmaBaseAddress->IFCR = (DMA_FLAG_HT1 << (hdma->ChannelIndex & 0x1CU));

+  }

+

+  /* Process unlocked */

+  __HAL_UNLOCK(hdma);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Handle DMA interrupt request.

+  * @param  hdma pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA Channel.

+  * @retval None

+  */

+void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)

+{

+  uint32_t flag_it = hdma->DmaBaseAddress->ISR;

+  uint32_t source_it = hdma->Instance->CCR;

+

+  /* Half Transfer Complete Interrupt management ******************************/

+  if (((flag_it & (DMA_FLAG_HT1 << (hdma->ChannelIndex & 0x1CU))) != 0U) && ((source_it & DMA_IT_HT) != 0U))

+  {

+    /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */

+    if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U)

+    {

+      /* Disable the half transfer interrupt */

+      __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);

+    }

+    /* Clear the half transfer complete flag */

+    hdma->DmaBaseAddress->IFCR = DMA_ISR_HTIF1 << (hdma->ChannelIndex & 0x1CU);

+

+    /* DMA peripheral state is not updated in Half Transfer */

+    /* but in Transfer Complete case */

+

+    if(hdma->XferHalfCpltCallback != NULL)

+    {

+      /* Half transfer callback */

+      hdma->XferHalfCpltCallback(hdma);

+    }

+  }

+

+  /* Transfer Complete Interrupt management ***********************************/

+  else if (((flag_it & (DMA_FLAG_TC1 << (hdma->ChannelIndex & 0x1CU))) != 0U) && ((source_it & DMA_IT_TC) != 0U))

+  {

+    

+    if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U)

+    {

+      /* Disable the transfer complete interrupt if the DMA mode is not CIRCULAR */

+      /* Disable the transfer complete and error interrupt */

+      /* if the DMA mode is not CIRCULAR  */

+      __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE | DMA_IT_TC);

+

+      /* Change the DMA state */

+      hdma->State = HAL_DMA_STATE_READY;

+    }

+    /* Clear the transfer complete flag */

+    hdma->DmaBaseAddress->IFCR = (DMA_ISR_TCIF1 << (hdma->ChannelIndex & 0x1CU));

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(hdma);

+

+    if(hdma->XferCpltCallback != NULL)

+    {

+      /* Transfer complete callback */

+      hdma->XferCpltCallback(hdma);

+    }

+  }

+

+  /* Transfer Error Interrupt management **************************************/

+  else if (((flag_it & (DMA_FLAG_TE1 << (hdma->ChannelIndex & 0x1CU))) != 0U) && ((source_it & DMA_IT_TE) !=  0U))

+  {

+    /* When a DMA transfer error occurs */

+    /* A hardware clear of its EN bits is performed */

+    /* Disable ALL DMA IT */

+    __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));

+

+    /* Clear all flags */

+    hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << (hdma->ChannelIndex & 0x1CU));

+

+    /* Update error code */

+    hdma->ErrorCode = HAL_DMA_ERROR_TE;

+

+    /* Change the DMA state */

+    hdma->State = HAL_DMA_STATE_READY;

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(hdma);

+

+    if (hdma->XferErrorCallback != NULL)

+    {

+      /* Transfer error callback */

+      hdma->XferErrorCallback(hdma);

+    }

+  }

+  else

+  {

+    /* Nothing To Do */

+  }

+  return;

+}

+

+/**

+  * @brief  Register callbacks

+  * @param  hdma                 pointer to a DMA_HandleTypeDef structure that contains

+  *                               the configuration information for the specified DMA Channel.

+  * @param  CallbackID           User Callback identifer

+  *                               a HAL_DMA_CallbackIDTypeDef ENUM as parameter.

+  * @param  pCallback            pointer to private callbacsk function which has pointer to

+  *                               a DMA_HandleTypeDef structure as parameter.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)( DMA_HandleTypeDef * _hdma))

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+  /* Process locked */

+  __HAL_LOCK(hdma);

+

+  if(HAL_DMA_STATE_READY == hdma->State)

+  {

+    switch (CallbackID)

+    {

+     case  HAL_DMA_XFER_CPLT_CB_ID:

+           hdma->XferCpltCallback = pCallback;

+           break;

+

+     case  HAL_DMA_XFER_HALFCPLT_CB_ID:

+           hdma->XferHalfCpltCallback = pCallback;

+           break;

+

+     case  HAL_DMA_XFER_ERROR_CB_ID:

+           hdma->XferErrorCallback = pCallback;

+           break;

+

+     case  HAL_DMA_XFER_ABORT_CB_ID:

+           hdma->XferAbortCallback = pCallback;

+           break;

+

+     default:

+           status = HAL_ERROR;

+           break;

+    }

+  }

+  else

+  {

+    status = HAL_ERROR;

+  }

+

+  /* Release Lock */

+  __HAL_UNLOCK(hdma);

+

+  return status;

+}

+

+/**

+  * @brief  UnRegister callbacks

+  * @param  hdma                 pointer to a DMA_HandleTypeDef structure that contains

+  *                               the configuration information for the specified DMA Channel.

+  * @param  CallbackID           User Callback identifer

+  *                               a HAL_DMA_CallbackIDTypeDef ENUM as parameter.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+    /* Process locked */

+  __HAL_LOCK(hdma);

+

+  if(HAL_DMA_STATE_READY == hdma->State)

+  {

+    switch (CallbackID)

+    {

+     case  HAL_DMA_XFER_CPLT_CB_ID:

+           hdma->XferCpltCallback = NULL;

+           break;

+

+     case  HAL_DMA_XFER_HALFCPLT_CB_ID:

+           hdma->XferHalfCpltCallback = NULL;

+           break;

+

+     case  HAL_DMA_XFER_ERROR_CB_ID:

+           hdma->XferErrorCallback = NULL;

+           break;

+

+     case  HAL_DMA_XFER_ABORT_CB_ID:

+           hdma->XferAbortCallback = NULL;

+           break;

+

+    case   HAL_DMA_XFER_ALL_CB_ID:

+           hdma->XferCpltCallback = NULL;

+           hdma->XferHalfCpltCallback = NULL;

+           hdma->XferErrorCallback = NULL;

+           hdma->XferAbortCallback = NULL;

+           break;

+

+    default:

+           status = HAL_ERROR;

+           break;

+    }

+  }

+  else

+  {

+    status = HAL_ERROR;

+  }

+

+  /* Release Lock */

+  __HAL_UNLOCK(hdma);

+

+  return status;

+}

+

+/**

+  * @}

+  */

+

+

+

+/** @defgroup DMA_Exported_Functions_Group3 Peripheral State and Errors functions

+ *  @brief    Peripheral State and Errors functions

+ *

+@verbatim

+ ===============================================================================

+            ##### Peripheral State and Errors functions #####

+ ===============================================================================

+    [..]

+    This subsection provides functions allowing to

+      (+) Check the DMA state

+      (+) Get error code

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Return the DMA handle state.

+  * @param  hdma pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA Channel.

+  * @retval HAL state

+  */

+HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma)

+{

+  /* Return DMA handle state */

+  return hdma->State;

+}

+

+/**

+  * @brief  Return the DMA error code.

+  * @param  hdma pointer to a DMA_HandleTypeDef structure that contains

+  *              the configuration information for the specified DMA Channel.

+  * @retval DMA Error Code

+  */

+uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma)

+{

+  return hdma->ErrorCode;

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/** @addtogroup DMA_Private_Functions

+  * @{

+  */

+

+/**

+  * @brief  Sets the DMA Transfer parameter.

+  * @param  hdma       pointer to a DMA_HandleTypeDef structure that contains

+  *                     the configuration information for the specified DMA Channel.

+  * @param  SrcAddress The source memory Buffer address

+  * @param  DstAddress The destination memory Buffer address

+  * @param  DataLength The length of data to be transferred from source to destination

+  * @retval HAL status

+  */

+static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)

+{

+  /* Clear all flags */

+  hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << (hdma->ChannelIndex & 0x1CU));

+

+  /* Configure DMA Channel data length */

+  hdma->Instance->CNDTR = DataLength;

+

+  /* Memory to Peripheral */

+  if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH)

+  {

+    /* Configure DMA Channel destination address */

+    hdma->Instance->CPAR = DstAddress;

+

+    /* Configure DMA Channel source address */

+    hdma->Instance->CMAR = SrcAddress;

+  }

+  /* Peripheral to Memory */

+  else

+  {

+    /* Configure DMA Channel source address */

+    hdma->Instance->CPAR = SrcAddress;

+

+    /* Configure DMA Channel destination address */

+    hdma->Instance->CMAR = DstAddress;

+  }

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#endif /* HAL_DMA_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash.c
new file mode 100644
index 0000000..aab5749
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash.c
@@ -0,0 +1,721 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_flash.c

+  * @author  MCD Application Team

+  * @brief   FLASH HAL module driver.

+  *          This file provides firmware functions to manage the following 

+  *          functionalities of the internal FLASH memory:

+  *           + Program operations functions

+  *           + Memory Control functions 

+  *           + Peripheral State functions

+  *         

+  @verbatim

+  ==============================================================================

+                        ##### FLASH peripheral features #####

+  ==============================================================================

+  [..] The Flash memory interface manages CPU AHB I-Code and D-Code accesses 

+       to the Flash memory. It implements the erase and program Flash memory operations 

+       and the read and write protection mechanisms.

+

+  [..] The Flash memory interface accelerates code execution with a system of instruction

+      prefetch. 

+

+  [..] The FLASH main features are:

+      (+) Flash memory read operations

+      (+) Flash memory program/erase operations

+      (+) Read / write protections

+      (+) Prefetch on I-Code

+      (+) Option Bytes programming

+

+

+                     ##### How to use this driver #####

+  ==============================================================================

+  [..]                             

+      This driver provides functions and macros to configure and program the FLASH 

+      memory of all STM32L1xx devices.

+    

+      (#) FLASH Memory I/O Programming functions: this group includes all needed

+          functions to erase and program the main memory:

+        (++) Lock and Unlock the FLASH interface

+        (++) Erase function: Erase page

+        (++) Program functions: Fast Word and Half Page(should be 

+        executed from internal SRAM).

+  

+      (#) DATA EEPROM Programming functions: this group includes all 

+          needed functions to erase and program the DATA EEPROM memory:

+        (++) Lock and Unlock the DATA EEPROM interface.

+        (++) Erase function: Erase Byte, erase HalfWord, erase Word, erase 

+             Double Word (should be executed from internal SRAM).

+        (++) Program functions: Fast Program Byte, Fast Program Half-Word, 

+             FastProgramWord, Program Byte, Program Half-Word, 

+             Program Word and Program Double-Word (should be executed 

+             from internal SRAM).

+

+      (#) FLASH Option Bytes Programming functions: this group includes all needed

+          functions to manage the Option Bytes:

+        (++) Lock and Unlock the Option Bytes

+        (++) Set/Reset the write protection

+        (++) Set the Read protection Level

+        (++) Program the user Option Bytes

+        (++) Launch the Option Bytes loader

+        (++) Set/Get the Read protection Level.

+        (++) Set/Get the BOR level.

+        (++) Get the Write protection.

+        (++) Get the user option bytes.

+    

+      (#) Interrupts and flags management functions : this group 

+          includes all needed functions to:

+        (++) Handle FLASH interrupts

+        (++) Wait for last FLASH operation according to its status

+        (++) Get error flag status

+

+    (#) FLASH Interface configuration functions: this group includes 

+      the management of following features:

+      (++) Enable/Disable the RUN PowerDown mode.

+      (++) Enable/Disable the SLEEP PowerDown mode.  

+  

+    (#) FLASH Peripheral State methods: this group includes 

+      the management of following features:

+      (++) Wait for the FLASH operation

+      (++)  Get the specific FLASH error flag

+    

+  [..] In addition to these function, this driver includes a set of macros allowing

+       to handle the following operations:

+      

+      (+) Set/Get the latency

+      (+) Enable/Disable the prefetch buffer

+      (+) Enable/Disable the 64 bit Read Access.

+      (+) Enable/Disable the Flash power-down

+      (+) Enable/Disable the FLASH interrupts

+      (+) Monitor the FLASH flags status

+          

+                 ##### Programming operation functions #####

+  ===============================================================================  

+     [..]

+     This subsection provides a set of functions allowing to manage the FLASH 

+     program operations.

+  

+    [..] The FLASH Memory Programming functions, includes the following functions:

+     (+) HAL_FLASH_Unlock(void);

+     (+) HAL_FLASH_Lock(void);

+     (+) HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data)

+     (+) HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint32_t Data)

+    

+     [..] Any operation of erase or program should follow these steps:

+     (#) Call the HAL_FLASH_Unlock() function to enable the flash control register and 

+         program memory access.

+     (#) Call the desired function to erase page or program data.

+     (#) Call the HAL_FLASH_Lock() to disable the flash program memory access 

+        (recommended to protect the FLASH memory against possible unwanted operation).

+  

+               ##### Option Bytes Programming functions ##### 

+   ==============================================================================  

+  

+     [..] The FLASH_Option Bytes Programming_functions, includes the following functions:

+     (+) HAL_FLASH_OB_Unlock(void);

+     (+) HAL_FLASH_OB_Lock(void);

+     (+) HAL_FLASH_OB_Launch(void);

+     (+) HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit);

+     (+) HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit);

+    

+     [..] Any operation of erase or program should follow these steps:

+     (#) Call the HAL_FLASH_OB_Unlock() function to enable the Flash option control 

+         register access.

+     (#) Call the following functions to program the desired option bytes.

+         (++) HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit);      

+     (#) Once all needed option bytes to be programmed are correctly written, call the

+         HAL_FLASH_OB_Launch(void) function to launch the Option Bytes programming process.

+     (#) Call the HAL_FLASH_OB_Lock() to disable the Flash option control register access (recommended

+         to protect the option Bytes against possible unwanted operations).

+  

+    [..] Proprietary code Read Out Protection (PcROP):    

+    (#) The PcROP sector is selected by using the same option bytes as the Write

+        protection. As a result, these 2 options are exclusive each other.

+    (#) To activate PCROP mode for Flash sectors(s), you need to follow the sequence below:

+        (++) Use this function HAL_FLASHEx_AdvOBProgram with PCROPState = OB_PCROP_STATE_ENABLE.

+

+  @endverbatim

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+#ifdef HAL_FLASH_MODULE_ENABLED

+

+/** @defgroup FLASH FLASH

+  * @brief FLASH HAL module driver

+  * @{

+  */

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/** @defgroup FLASH_Private_Constants FLASH Private Constants

+  * @{

+  */

+/**

+  * @}

+  */

+

+/* Private macro ---------------------------- ---------------------------------*/

+/** @defgroup FLASH_Private_Macros FLASH Private Macros

+  * @{

+  */

+ 

+/**

+  * @}

+  */

+

+/* Private variables ---------------------------------------------------------*/

+/** @defgroup FLASH_Private_Variables FLASH Private Variables

+  * @{

+  */

+/* Variables used for Erase pages under interruption*/

+FLASH_ProcessTypeDef pFlash;

+/**

+  * @}

+  */

+

+/* Private function prototypes -----------------------------------------------*/

+/** @defgroup FLASH_Private_Functions FLASH Private Functions

+  * @{

+  */

+static  void   FLASH_SetErrorCode(void);

+extern void    FLASH_PageErase(uint32_t PageAddress);

+/**

+  * @}

+  */

+

+/* Exported functions ---------------------------------------------------------*/

+/** @defgroup FLASH_Exported_Functions FLASH Exported Functions

+  * @{

+  */

+  

+/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions 

+  *  @brief   Programming operation functions 

+  *

+@verbatim   

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Program word at a specified address

+  * @note   To correctly run this function, the HAL_FLASH_Unlock() function

+  *         must be called before.

+  *         Call the HAL_FLASH_Lock() to disable the flash memory access

+  *         (recommended to protect the FLASH memory against possible unwanted operation).

+  *

+  * @param  TypeProgram   Indicate the way to program at a specified address.

+  *                       This parameter can be a value of @ref FLASH_Type_Program

+  * @param  Address       Specifie the address to be programmed.

+  * @param  Data          Specifie the data to be programmed

+  * 

+  * @retval HAL_StatusTypeDef HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data)

+{

+  HAL_StatusTypeDef status = HAL_ERROR;

+  

+  /* Process Locked */

+  __HAL_LOCK(&pFlash);

+

+  /* Check the parameters */

+  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));

+  assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));

+

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+    /* Clean the error context */

+    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+    /*Program word (32-bit) at a specified address.*/

+    *(__IO uint32_t *)Address = Data;

+

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  }

+

+  /* Process Unlocked */

+  __HAL_UNLOCK(&pFlash);

+

+  return status;

+}

+

+/**

+  * @brief   Program word at a specified address  with interrupt enabled.

+  *

+  * @param  TypeProgram  Indicate the way to program at a specified address.

+  *                      This parameter can be a value of @ref FLASH_Type_Program

+  * @param  Address      Specifie the address to be programmed.

+  * @param  Data         Specifie the data to be programmed

+  * 

+  * @retval HAL_StatusTypeDef HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint32_t Data)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+  

+  /* Process Locked */

+  __HAL_LOCK(&pFlash);

+

+  /* Check the parameters */

+  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));

+  assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));

+

+  /* Enable End of FLASH Operation and Error source interrupts */

+  __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);

+  

+  pFlash.Address = Address;

+  pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAM;

+  /* Clean the error context */

+  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+  if(TypeProgram == FLASH_TYPEPROGRAM_WORD)

+  {

+    /* Program word (32-bit) at a specified address. */

+    *(__IO uint32_t *)Address = Data;

+  }

+  return status;

+}

+

+/**

+  * @brief This function handles FLASH interrupt request.

+  * @retval None

+  */

+void HAL_FLASH_IRQHandler(void)

+{

+  uint32_t addresstmp = 0U;

+  

+  /* Check FLASH operation error flags */

+  if( __HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR)     || 

+      __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR)     || 

+      __HAL_FLASH_GET_FLAG(FLASH_FLAG_SIZERR)     || 

+#if defined(FLASH_SR_RDERR)

+      __HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR)      || 

+#endif /* FLASH_SR_RDERR */

+#if defined(FLASH_SR_OPTVERRUSR)

+      __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERRUSR) || 

+#endif /* FLASH_SR_OPTVERRUSR */

+      __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR) )

+  {

+    if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE)

+    {

+      /* Return the faulty sector */

+      addresstmp = pFlash.Page;

+      pFlash.Page = 0xFFFFFFFFU;

+    }

+    else

+    {

+      /* Return the faulty address */

+      addresstmp = pFlash.Address;

+    }

+    /* Save the Error code */

+    FLASH_SetErrorCode();

+    

+    /* FLASH error interrupt user callback */

+    HAL_FLASH_OperationErrorCallback(addresstmp);

+

+    /* Stop the procedure ongoing */

+    pFlash.ProcedureOnGoing = FLASH_PROC_NONE;

+  }

+

+  /* Check FLASH End of Operation flag  */

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP))

+  {

+    /* Clear FLASH End of Operation pending bit */

+    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);

+    

+    /* Process can continue only if no error detected */

+    if(pFlash.ProcedureOnGoing != FLASH_PROC_NONE)

+    {

+      if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE)

+      {

+        /* Nb of pages to erased can be decreased */

+        pFlash.NbPagesToErase--;

+

+        /* Check if there are still pages to erase */

+        if(pFlash.NbPagesToErase != 0U)

+        {

+          addresstmp = pFlash.Page;

+          /*Indicate user which sector has been erased */

+          HAL_FLASH_EndOfOperationCallback(addresstmp);

+

+          /*Increment sector number*/

+          addresstmp = pFlash.Page + FLASH_PAGE_SIZE;

+          pFlash.Page = addresstmp;

+

+          /* If the erase operation is completed, disable the ERASE Bit */

+          CLEAR_BIT(FLASH->PECR, FLASH_PECR_ERASE);

+

+          FLASH_PageErase(addresstmp);

+        }

+        else

+        {

+          /* No more pages to Erase, user callback can be called. */

+          /* Reset Sector and stop Erase pages procedure */

+          pFlash.Page = addresstmp = 0xFFFFFFFFU;

+          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;

+          /* FLASH EOP interrupt user callback */

+          HAL_FLASH_EndOfOperationCallback(addresstmp);

+        }

+      }

+      else

+      {

+          /* If the program operation is completed, disable the PROG Bit */

+          CLEAR_BIT(FLASH->PECR, FLASH_PECR_PROG);

+

+          /* Program ended. Return the selected address */

+          /* FLASH EOP interrupt user callback */

+          HAL_FLASH_EndOfOperationCallback(pFlash.Address);

+        

+          /* Reset Address and stop Program procedure */

+          pFlash.Address = 0xFFFFFFFFU;

+          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;

+      }

+    }

+  }

+  

+

+  if(pFlash.ProcedureOnGoing == FLASH_PROC_NONE)

+  {

+    /* Operation is completed, disable the PROG and ERASE */

+    CLEAR_BIT(FLASH->PECR, (FLASH_PECR_ERASE | FLASH_PECR_PROG));

+

+    /* Disable End of FLASH Operation and Error source interrupts */

+    __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(&pFlash);

+  }

+}

+

+/**

+  * @brief  FLASH end of operation interrupt callback

+  * @param  ReturnValue The value saved in this parameter depends on the ongoing procedure

+  *                 - Pages Erase: Address of the page which has been erased 

+  *                    (if 0xFFFFFFFF, it means that all the selected pages have been erased)

+  *                 - Program: Address which was selected for data program

+  * @retval none

+  */

+__weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(ReturnValue);

+

+  /* NOTE : This function Should not be modified, when the callback is needed,

+            the HAL_FLASH_EndOfOperationCallback could be implemented in the user file

+   */ 

+}

+

+/**

+  * @brief  FLASH operation error interrupt callback

+  * @param  ReturnValue The value saved in this parameter depends on the ongoing procedure

+  *                 - Pages Erase: Address of the page which returned an error

+  *                 - Program: Address which was selected for data program

+  * @retval none

+  */

+__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(ReturnValue);

+

+  /* NOTE : This function Should not be modified, when the callback is needed,

+            the HAL_FLASH_OperationErrorCallback could be implemented in the user file

+   */ 

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASH_Exported_Functions_Group2 Peripheral Control functions 

+ *  @brief   management functions 

+ *

+@verbatim   

+ ===============================================================================

+                      ##### Peripheral Control functions #####

+ ===============================================================================  

+    [..]

+    This subsection provides a set of functions allowing to control the FLASH 

+    memory operations.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Unlock the FLASH control register access

+  * @retval HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASH_Unlock(void)

+{

+  if (HAL_IS_BIT_SET(FLASH->PECR, FLASH_PECR_PRGLOCK))

+  {

+    /* Unlocking FLASH_PECR register access*/

+    if(HAL_IS_BIT_SET(FLASH->PECR, FLASH_PECR_PELOCK))

+    {  

+      WRITE_REG(FLASH->PEKEYR, FLASH_PEKEY1);

+      WRITE_REG(FLASH->PEKEYR, FLASH_PEKEY2);

+      

+      /* Verify that PELOCK is unlocked */

+      if(HAL_IS_BIT_SET(FLASH->PECR, FLASH_PECR_PELOCK))

+      {

+        return HAL_ERROR;

+      }

+    }

+    

+    /* Unlocking the program memory access */

+    WRITE_REG(FLASH->PRGKEYR, FLASH_PRGKEY1);

+    WRITE_REG(FLASH->PRGKEYR, FLASH_PRGKEY2);  

+    

+    /* Verify that PRGLOCK is unlocked */

+    if (HAL_IS_BIT_SET(FLASH->PECR, FLASH_PECR_PRGLOCK))

+    {

+      return HAL_ERROR;

+    }

+  }

+  

+  return HAL_OK; 

+}

+

+/**

+  * @brief  Locks the FLASH control register access

+  * @retval HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASH_Lock(void)

+{

+  /* Set the PRGLOCK Bit to lock the FLASH Registers access */

+  SET_BIT(FLASH->PECR, FLASH_PECR_PRGLOCK);

+  

+  return HAL_OK;  

+}

+

+/**

+  * @brief  Unlock the FLASH Option Control Registers access.

+  * @retval HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void)

+{

+  if(HAL_IS_BIT_SET(FLASH->PECR, FLASH_PECR_OPTLOCK))

+  {

+    /* Unlocking FLASH_PECR register access*/

+    if(HAL_IS_BIT_SET(FLASH->PECR, FLASH_PECR_PELOCK))

+    {  

+      /* Unlocking FLASH_PECR register access*/

+      WRITE_REG(FLASH->PEKEYR, FLASH_PEKEY1);

+      WRITE_REG(FLASH->PEKEYR, FLASH_PEKEY2);

+

+      /* Verify that PELOCK is unlocked */

+      if(HAL_IS_BIT_SET(FLASH->PECR, FLASH_PECR_PELOCK))

+      {

+        return HAL_ERROR;

+      }

+    }

+

+    /* Unlocking the option bytes block access */

+    WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY1);

+    WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY2);

+

+    /* Verify that OPTLOCK is unlocked */

+    if (HAL_IS_BIT_SET(FLASH->PECR, FLASH_PECR_OPTLOCK))

+    {

+      return HAL_ERROR;

+    }

+  }

+  

+  return HAL_OK;  

+}

+

+/**

+  * @brief  Lock the FLASH Option Control Registers access.

+  * @retval HAL Status 

+  */

+HAL_StatusTypeDef HAL_FLASH_OB_Lock(void)

+{

+  /* Set the OPTLOCK Bit to lock the option bytes block access */

+  SET_BIT(FLASH->PECR, FLASH_PECR_OPTLOCK);

+  

+  return HAL_OK;  

+}

+  

+/**

+  * @brief  Launch the option byte loading.

+  * @note   This function will reset automatically the MCU.

+  * @retval HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASH_OB_Launch(void)

+{

+  /* Set the OBL_Launch bit to launch the option byte loading */

+  SET_BIT(FLASH->PECR, FLASH_PECR_OBL_LAUNCH);

+  

+  /* Wait for last operation to be completed */

+  return(FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE));

+}

+

+/**

+  * @}

+  */  

+

+/** @defgroup FLASH_Exported_Functions_Group3 Peripheral errors functions 

+ *  @brief    Peripheral errors functions 

+ *

+@verbatim   

+ ===============================================================================

+                      ##### Peripheral Errors functions #####

+ ===============================================================================  

+    [..]

+    This subsection permit to get in run-time errors of  the FLASH peripheral.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Get the specific FLASH error flag.

+  * @retval FLASH_ErrorCode The returned value can be:

+  *            @ref FLASH_Error_Codes

+  */

+uint32_t HAL_FLASH_GetError(void)

+{

+   return pFlash.ErrorCode;

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/** @addtogroup FLASH_Private_Functions

+ * @{

+ */

+

+/**

+  * @brief  Wait for a FLASH operation to complete.

+  * @param  Timeout  maximum flash operation timeout

+  * @retval HAL Status

+  */

+HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout)

+{

+  /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.

+     Even if the FLASH operation fails, the BUSY flag will be reset and an error

+     flag will be set */

+     

+  uint32_t tickstart = HAL_GetTick();

+     

+  while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) 

+  { 

+    if (Timeout != HAL_MAX_DELAY)

+    {

+      if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout))

+      {

+        return HAL_TIMEOUT;

+      }

+    }

+  }

+  

+  /* Check FLASH End of Operation flag  */

+  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP))

+  {

+    /* Clear FLASH End of Operation pending bit */

+    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);

+  }

+  

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR)  || 

+     __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR) || 

+#if defined(FLASH_SR_RDERR)

+      __HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR) || 

+#endif /* FLASH_SR_RDERR */

+#if defined(FLASH_SR_OPTVERRUSR)

+      __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERRUSR) || 

+#endif /* FLASH_SR_OPTVERRUSR */

+     __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR))

+  {

+    /*Save the error code*/

+    FLASH_SetErrorCode();

+    return HAL_ERROR;

+  }

+

+  /* There is no error flag set */

+  return HAL_OK;

+}

+

+

+/**

+  * @brief  Set the specific FLASH error flag.

+  * @retval None

+  */

+static void FLASH_SetErrorCode(void)

+{

+  uint32_t flags = 0U;

+  

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR))

+  {

+    pFlash.ErrorCode |= HAL_FLASH_ERROR_WRP;

+    flags |= FLASH_FLAG_WRPERR;

+  }

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR))

+  {

+    pFlash.ErrorCode |= HAL_FLASH_ERROR_PGA;

+    flags |= FLASH_FLAG_PGAERR;

+  }

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR))

+  {

+    pFlash.ErrorCode |= HAL_FLASH_ERROR_OPTV;

+    flags |= FLASH_FLAG_OPTVERR;

+  }

+

+#if defined(FLASH_SR_RDERR)

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR))

+  {

+    pFlash.ErrorCode |= HAL_FLASH_ERROR_RD;

+    flags |= FLASH_FLAG_RDERR;

+  }

+#endif /* FLASH_SR_RDERR */

+#if defined(FLASH_SR_OPTVERRUSR)

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERRUSR))

+  {

+    pFlash.ErrorCode |= HAL_FLASH_ERROR_OPTVUSR;

+    flags |= FLASH_FLAG_OPTVERRUSR;

+  }

+#endif /* FLASH_SR_OPTVERRUSR */

+

+  /* Clear FLASH error pending bits */

+  __HAL_FLASH_CLEAR_FLAG(flags);

+}  

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#endif /* HAL_FLASH_MODULE_ENABLED */

+

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ex.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ex.c
new file mode 100644
index 0000000..03c00a6
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ex.c
@@ -0,0 +1,1873 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_flash_ex.c

+  * @author  MCD Application Team

+  * @brief   Extended FLASH HAL module driver.

+  *    

+  *          This file provides firmware functions to manage the following 

+  *          functionalities of the internal FLASH memory:

+  *            + FLASH Interface configuration

+  *            + FLASH Memory Erasing

+  *            + DATA EEPROM Programming/Erasing

+  *            + Option Bytes Programming

+  *            + Interrupts management

+  *    

+  @verbatim

+  ==============================================================================

+               ##### Flash peripheral Extended features  #####

+  ==============================================================================

+           

+  [..] Comparing to other products, the FLASH interface for STM32L1xx

+       devices contains the following additional features        

+       (+) Erase functions

+       (+) DATA_EEPROM memory management

+       (+) BOOT option bit configuration       

+       (+) PCROP protection for all sectors

+   

+                      ##### How to use this driver #####

+  ==============================================================================

+  [..] This driver provides functions to configure and program the FLASH memory 

+       of all STM32L1xx. It includes:

+       (+) Full DATA_EEPROM erase and program management

+       (+) Boot activation

+       (+) PCROP protection configuration and control for all pages

+  

+  @endverbatim

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */ 

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+#ifdef HAL_FLASH_MODULE_ENABLED

+

+/** @addtogroup FLASH

+  * @{

+  */

+/** @addtogroup FLASH_Private_Variables

+ * @{

+ */

+/* Variables used for Erase pages under interruption*/

+extern FLASH_ProcessTypeDef pFlash;

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+  

+/** @defgroup FLASHEx FLASHEx

+  * @brief FLASH HAL Extension module driver

+  * @{

+  */

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/** @defgroup FLASHEx_Private_Constants FLASHEx Private Constants

+ * @{

+ */

+/**

+  * @}

+  */

+

+/* Private macro -------------------------------------------------------------*/

+/** @defgroup FLASHEx_Private_Macros FLASHEx Private Macros

+  * @{

+  */

+/**

+  * @}

+  */ 

+

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+/** @defgroup FLASHEx_Private_Functions FLASHEx Private Functions

+ * @{

+ */

+void                      FLASH_PageErase(uint32_t PageAddress);

+static HAL_StatusTypeDef  FLASH_OB_WRPConfig(FLASH_OBProgramInitTypeDef *pOBInit, FunctionalState NewState);

+static void               FLASH_OB_WRPConfigWRP1OrPCROP1(uint32_t WRP1OrPCROP1, FunctionalState NewState);

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)    \

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xCA) \

+ || defined(STM32L152xD) || defined(STM32L152xDX) || defined(STM32L162xCA) || defined(STM32L162xD)  \

+ || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE)

+static void               FLASH_OB_WRPConfigWRP2OrPCROP2(uint32_t WRP2OrPCROP2, FunctionalState NewState);

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || (...) || STM32L151xE || STM32L152xE || STM32L162xE */

+#if defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xD) || defined(STM32L152xDX) \

+ || defined(STM32L162xD) || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE)   \

+ || defined(STM32L162xE)

+static void               FLASH_OB_WRPConfigWRP3(uint32_t WRP3, FunctionalState NewState);

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */

+#if defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE) || defined(STM32L151xDX) \

+ || defined(STM32L152xDX) || defined(STM32L162xDX)

+static void               FLASH_OB_WRPConfigWRP4(uint32_t WRP4, FunctionalState NewState);

+#endif /* STM32L151xE || STM32L152xE || STM32L151xDX || ... */

+#if defined(FLASH_OBR_SPRMOD)

+static HAL_StatusTypeDef  FLASH_OB_PCROPConfig(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit, FunctionalState NewState);

+#endif /* FLASH_OBR_SPRMOD */

+#if defined(FLASH_OBR_nRST_BFB2)

+static HAL_StatusTypeDef  FLASH_OB_BootConfig(uint8_t OB_BOOT);

+#endif /* FLASH_OBR_nRST_BFB2 */

+static HAL_StatusTypeDef  FLASH_OB_RDPConfig(uint8_t OB_RDP);

+static HAL_StatusTypeDef  FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY);

+static HAL_StatusTypeDef  FLASH_OB_BORConfig(uint8_t OB_BOR);

+static uint8_t            FLASH_OB_GetRDP(void);

+static uint8_t            FLASH_OB_GetUser(void);

+static uint8_t            FLASH_OB_GetBOR(void);

+static HAL_StatusTypeDef  FLASH_DATAEEPROM_FastProgramByte(uint32_t Address, uint8_t Data);

+static HAL_StatusTypeDef  FLASH_DATAEEPROM_FastProgramHalfWord(uint32_t Address, uint16_t Data);

+static HAL_StatusTypeDef  FLASH_DATAEEPROM_FastProgramWord(uint32_t Address, uint32_t Data);

+static HAL_StatusTypeDef  FLASH_DATAEEPROM_ProgramWord(uint32_t Address, uint32_t Data);

+static HAL_StatusTypeDef  FLASH_DATAEEPROM_ProgramHalfWord(uint32_t Address, uint16_t Data);

+static HAL_StatusTypeDef  FLASH_DATAEEPROM_ProgramByte(uint32_t Address, uint8_t Data);

+/**

+  * @}

+  */

+

+/* Exported functions ---------------------------------------------------------*/

+/** @defgroup FLASHEx_Exported_Functions FLASHEx Exported Functions

+  * @{

+  */

+

+/** @defgroup FLASHEx_Exported_Functions_Group1 FLASHEx Memory Erasing functions

+ *  @brief   FLASH Memory Erasing functions

+ *

+@verbatim   

+  ==============================================================================

+                ##### FLASH Erasing Programming functions ##### 

+  ==============================================================================

+

+    [..] The FLASH Memory Erasing functions, includes the following functions:

+    (+) @ref HAL_FLASHEx_Erase: return only when erase has been done

+    (+) @ref HAL_FLASHEx_Erase_IT: end of erase is done when @ref HAL_FLASH_EndOfOperationCallback 

+        is called with parameter 0xFFFFFFFF

+

+    [..] Any operation of erase should follow these steps:

+    (#) Call the @ref HAL_FLASH_Unlock() function to enable the flash control register and 

+        program memory access.

+    (#) Call the desired function to erase page.

+    (#) Call the @ref HAL_FLASH_Lock() to disable the flash program memory access 

+       (recommended to protect the FLASH memory against possible unwanted operation).

+

+@endverbatim

+  * @{

+  */

+  

+/**

+  * @brief  Erase the specified FLASH memory Pages 

+  * @note   To correctly run this function, the @ref HAL_FLASH_Unlock() function

+  *         must be called before.

+  *         Call the @ref HAL_FLASH_Lock() to disable the flash memory access 

+  *         (recommended to protect the FLASH memory against possible unwanted operation)

+  * @note   For STM32L151xDX/STM32L152xDX/STM32L162xDX, as memory is not continuous between

+  *         2 banks, user should perform pages erase by bank only.

+  * @param[in]  pEraseInit pointer to an FLASH_EraseInitTypeDef structure that

+  *         contains the configuration information for the erasing.

+  * 

+  * @param[out]  PageError pointer to variable  that

+  *         contains the configuration information on faulty page in case of error

+  *         (0xFFFFFFFF means that all the pages have been correctly erased)

+  * 

+  * @retval HAL_StatusTypeDef HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError)

+{

+  HAL_StatusTypeDef status = HAL_ERROR;

+  uint32_t address = 0U;

+  

+  /* Process Locked */

+  __HAL_LOCK(&pFlash);

+

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+

+  if (status == HAL_OK)

+  {

+    /*Initialization of PageError variable*/

+    *PageError = 0xFFFFFFFFU;

+

+    /* Check the parameters */

+    assert_param(IS_NBPAGES(pEraseInit->NbPages));

+    assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase));

+    assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress));

+    assert_param(IS_FLASH_PROGRAM_ADDRESS((pEraseInit->PageAddress & ~(FLASH_PAGE_SIZE - 1U)) + pEraseInit->NbPages * FLASH_PAGE_SIZE - 1U));

+

+#if defined(STM32L151xDX) || defined(STM32L152xDX) || defined(STM32L162xDX)

+    /* Check on which bank belongs the 1st address to erase */

+    if (pEraseInit->PageAddress < FLASH_BANK2_BASE)

+    {

+      /* BANK1 */

+      /* Check that last page to erase still belongs to BANK1 */

+      if (((pEraseInit->PageAddress & ~(FLASH_PAGE_SIZE - 1U)) + pEraseInit->NbPages * FLASH_PAGE_SIZE - 1U) > FLASH_BANK1_END)

+      {

+        /*  Last page does not belong to BANK1, erase procedure cannot be performed because memory is not

+            continuous */

+        /* Process Unlocked */

+        __HAL_UNLOCK(&pFlash);

+        return HAL_ERROR;

+      }

+    }

+    else

+    {

+      /* BANK2 */

+      /* Check that last page to erase still belongs to BANK2 */

+      if (((pEraseInit->PageAddress & ~(FLASH_PAGE_SIZE - 1U)) + pEraseInit->NbPages * FLASH_PAGE_SIZE - 1U) > FLASH_BANK2_END)

+      {

+        /*  Last page does not belong to BANK2, erase procedure cannot be performed because memory is not

+            continuous */

+        /* Process Unlocked */

+        __HAL_UNLOCK(&pFlash);

+        return HAL_ERROR;

+      }

+    }

+#endif /* STM32L151xDX || STM32L152xDX || STM32L162xDX */

+

+    /* Erase page by page to be done*/

+    for(address = pEraseInit->PageAddress; 

+        address < ((pEraseInit->NbPages * FLASH_PAGE_SIZE) + pEraseInit->PageAddress);

+        address += FLASH_PAGE_SIZE)

+    {

+      FLASH_PageErase(address);

+

+      /* Wait for last operation to be completed */

+      status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+

+      /* If the erase operation is completed, disable the ERASE Bit */

+      CLEAR_BIT(FLASH->PECR, FLASH_PECR_PROG);

+      CLEAR_BIT(FLASH->PECR, FLASH_PECR_ERASE);

+

+      if (status != HAL_OK) 

+      {

+        /* In case of error, stop erase procedure and return the faulty address */

+        *PageError = address;

+        break;

+      }

+    }

+  }

+

+  /* Process Unlocked */

+  __HAL_UNLOCK(&pFlash);

+

+  return status;

+}

+

+/**

+  * @brief  Perform a page erase of the specified FLASH memory pages  with interrupt enabled

+  * @note   To correctly run this function, the @ref HAL_FLASH_Unlock() function

+  *         must be called before.

+  *         Call the @ref HAL_FLASH_Lock() to disable the flash memory access 

+  *         (recommended to protect the FLASH memory against possible unwanted operation)

+  *          End of erase is done when @ref HAL_FLASH_EndOfOperationCallback is called with parameter

+  *          0xFFFFFFFF

+  * @note   For STM32L151xDX/STM32L152xDX/STM32L162xDX, as memory is not continuous between

+  *         2 banks, user should perform pages erase by bank only.

+  * @param  pEraseInit pointer to an FLASH_EraseInitTypeDef structure that

+  *         contains the configuration information for the erasing.

+  * 

+  * @retval HAL_StatusTypeDef HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit)

+{

+  HAL_StatusTypeDef status = HAL_ERROR;

+

+  /* If procedure already ongoing, reject the next one */

+  if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_NBPAGES(pEraseInit->NbPages));

+  assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase));

+  assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress));

+  assert_param(IS_FLASH_PROGRAM_ADDRESS((pEraseInit->PageAddress & ~(FLASH_PAGE_SIZE - 1U)) + pEraseInit->NbPages * FLASH_PAGE_SIZE - 1U));

+

+  /* Process Locked */

+  __HAL_LOCK(&pFlash);

+

+#if defined(STM32L151xDX) || defined(STM32L152xDX) || defined(STM32L162xDX)

+    /* Check on which bank belongs the 1st address to erase */

+    if (pEraseInit->PageAddress < FLASH_BANK2_BASE)

+    {

+      /* BANK1 */

+      /* Check that last page to erase still belongs to BANK1 */

+      if (((pEraseInit->PageAddress & ~(FLASH_PAGE_SIZE - 1U)) + pEraseInit->NbPages * FLASH_PAGE_SIZE - 1U) > FLASH_BANK1_END)

+      {

+        /*  Last page does not belong to BANK1, erase procedure cannot be performed because memory is not

+            continuous */

+        /* Process Unlocked */

+        __HAL_UNLOCK(&pFlash);

+        return HAL_ERROR;

+      }

+    }

+    else

+    {

+      /* BANK2 */

+      /* Check that last page to erase still belongs to BANK2 */

+      if (((pEraseInit->PageAddress & ~(FLASH_PAGE_SIZE - 1U)) + pEraseInit->NbPages * FLASH_PAGE_SIZE - 1U) > FLASH_BANK2_END)

+      {

+        /*  Last page does not belong to BANK2, erase procedure cannot be performed because memory is not

+            continuous */

+        /* Process Unlocked */

+        __HAL_UNLOCK(&pFlash);

+        return HAL_ERROR;

+      }

+    }

+#endif /* STM32L151xDX || STM32L152xDX || STM32L162xDX */

+

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if (status == HAL_OK)

+  {

+    /* Enable End of FLASH Operation and Error source interrupts */

+    __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);

+    

+    pFlash.ProcedureOnGoing = FLASH_PROC_PAGEERASE;

+    pFlash.NbPagesToErase = pEraseInit->NbPages;

+    pFlash.Page = pEraseInit->PageAddress;

+

+    /*Erase 1st page and wait for IT*/

+    FLASH_PageErase(pEraseInit->PageAddress);

+  }

+  else

+  {

+    /* Process Unlocked */

+    __HAL_UNLOCK(&pFlash);

+  }

+

+  return status;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASHEx_Exported_Functions_Group2 Option Bytes Programming functions

+ *  @brief   Option Bytes Programming functions

+ *

+@verbatim   

+  ==============================================================================

+                ##### Option Bytes Programming functions ##### 

+  ==============================================================================  

+

+    [..] Any operation of erase or program should follow these steps:

+    (#) Call the @ref HAL_FLASH_OB_Unlock() function to enable the Flash option control 

+        register access.

+    (#) Call following function to program the desired option bytes.

+        (++) @ref HAL_FLASHEx_OBProgram:

+         - To Enable/Disable the desired sector write protection.

+         - To set the desired read Protection Level.

+         - To configure the user option Bytes: IWDG, STOP and the Standby.

+         - To Set the BOR level.

+    (#) Once all needed option bytes to be programmed are correctly written, call the

+        @ref HAL_FLASH_OB_Launch(void) function to launch the Option Bytes programming process.

+    (#) Call the @ref HAL_FLASH_OB_Lock() to disable the Flash option control register access (recommended

+        to protect the option Bytes against possible unwanted operations).

+

+    [..] Proprietary code Read Out Protection (PcROP):

+    (#) The PcROP sector is selected by using the same option bytes as the Write

+        protection (nWRPi bits). As a result, these 2 options are exclusive each other.

+    (#) In order to activate the PcROP (change the function of the nWRPi option bits), 

+        the SPRMOD option bit must be activated.

+    (#) The active value of nWRPi bits is inverted when PCROP mode is active, this

+        means: if SPRMOD = 1 and nWRPi = 1 (default value), then the user sector "i"

+        is read/write protected.

+    (#) To activate PCROP mode for Flash sector(s), you need to call the following function:

+        (++) @ref HAL_FLASHEx_AdvOBProgram in selecting sectors to be read/write protected

+        (++) @ref HAL_FLASHEx_OB_SelectPCROP to enable the read/write protection

+    (#) PcROP is available only in STM32L151xBA, STM32L152xBA, STM32L151xC, STM32L152xC & STM32L162xC devices.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Program option bytes

+  * @param  pOBInit pointer to an FLASH_OBInitStruct structure that

+  *         contains the configuration information for the programming.

+  * 

+  * @retval HAL_StatusTypeDef HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit)

+{

+  HAL_StatusTypeDef status = HAL_ERROR;

+  

+  /* Process Locked */

+  __HAL_LOCK(&pFlash);

+

+  /* Check the parameters */

+  assert_param(IS_OPTIONBYTE(pOBInit->OptionType));

+

+  /*Write protection configuration*/

+  if((pOBInit->OptionType & OPTIONBYTE_WRP) == OPTIONBYTE_WRP)

+  {

+    assert_param(IS_WRPSTATE(pOBInit->WRPState));

+    if (pOBInit->WRPState == OB_WRPSTATE_ENABLE)

+    {

+      /* Enable of Write protection on the selected Sector*/

+      status = FLASH_OB_WRPConfig(pOBInit, ENABLE);

+    }

+    else

+    {

+      /* Disable of Write protection on the selected Sector*/

+      status = FLASH_OB_WRPConfig(pOBInit, DISABLE);

+    }

+    if (status != HAL_OK)

+    {

+      /* Process Unlocked */

+      __HAL_UNLOCK(&pFlash);

+      return status;

+    }

+  }

+  

+  /* Read protection configuration*/

+  if((pOBInit->OptionType & OPTIONBYTE_RDP) == OPTIONBYTE_RDP)

+  {

+    status = FLASH_OB_RDPConfig(pOBInit->RDPLevel);

+    if (status != HAL_OK)

+    {

+      /* Process Unlocked */

+      __HAL_UNLOCK(&pFlash);

+      return status;

+    }

+  }

+  

+  /* USER  configuration*/

+  if((pOBInit->OptionType & OPTIONBYTE_USER) == OPTIONBYTE_USER)

+  {

+    status = FLASH_OB_UserConfig(pOBInit->USERConfig & OB_IWDG_SW, 

+                                 pOBInit->USERConfig & OB_STOP_NORST,

+                                 pOBInit->USERConfig & OB_STDBY_NORST);

+    if (status != HAL_OK)

+    {

+      /* Process Unlocked */

+      __HAL_UNLOCK(&pFlash);

+      return status;

+    }

+  }

+

+  /* BOR Level  configuration*/

+  if((pOBInit->OptionType & OPTIONBYTE_BOR) == OPTIONBYTE_BOR)

+  {

+    status = FLASH_OB_BORConfig(pOBInit->BORLevel);

+    if (status != HAL_OK)

+    {

+      /* Process Unlocked */

+      __HAL_UNLOCK(&pFlash);

+      return status;

+    }

+  }

+  /* Process Unlocked */

+  __HAL_UNLOCK(&pFlash);

+

+  return status;

+}

+

+/**

+  * @brief   Get the Option byte configuration

+  * @param  pOBInit pointer to an FLASH_OBInitStruct structure that

+  *         contains the configuration information for the programming.

+  * 

+  * @retval None

+  */

+void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit)

+{

+  pOBInit->OptionType = OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER | OPTIONBYTE_BOR;

+

+  /*Get WRP1*/

+  pOBInit->WRPSector0To31 = (uint32_t)(FLASH->WRPR1);

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)    \

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xCA) \

+ || defined(STM32L152xD) || defined(STM32L152xDX) || defined(STM32L162xCA) || defined(STM32L162xD)  \

+ || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE)

+    

+  /*Get WRP2*/

+  pOBInit->WRPSector32To63 = (uint32_t)(FLASH->WRPR2);

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || (...) || STM32L151xE || STM32L152xE || STM32L162xE */

+  

+#if defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xD) || defined(STM32L152xDX) \

+ || defined(STM32L162xD) || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE)  \

+ || defined(STM32L162xE)

+    

+  /*Get WRP3*/

+  pOBInit->WRPSector64To95 = (uint32_t)(FLASH->WRPR3);

+

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */

+  

+#if defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE) || defined(STM32L151xDX) \

+ || defined(STM32L152xDX) || defined(STM32L162xDX)

+

+  /*Get WRP4*/

+  pOBInit->WRPSector96To127 = (uint32_t)(FLASH->WRPR4);

+

+#endif /* STM32L151xE || STM32L152xE || STM32L162xE || STM32L151xDX || ... */

+

+  /*Get RDP Level*/

+  pOBInit->RDPLevel   = FLASH_OB_GetRDP();

+

+  /*Get USER*/

+  pOBInit->USERConfig = FLASH_OB_GetUser();

+

+  /*Get BOR Level*/

+  pOBInit->BORLevel   = FLASH_OB_GetBOR();

+}

+

+#if defined(FLASH_OBR_SPRMOD) || defined(FLASH_OBR_nRST_BFB2)

+    

+/**

+  * @brief  Program option bytes

+  * @note   This function can be used only for Cat2 & Cat3 devices for PCROP and Cat4 & Cat5 for BFB2.

+  * @param  pAdvOBInit pointer to an FLASH_AdvOBProgramInitTypeDef structure that

+  *         contains the configuration information for the programming.

+  * 

+  * @retval HAL_StatusTypeDef HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASHEx_AdvOBProgram (FLASH_AdvOBProgramInitTypeDef *pAdvOBInit)

+{

+  HAL_StatusTypeDef status = HAL_ERROR;

+  

+  /* Check the parameters */

+  assert_param(IS_OBEX(pAdvOBInit->OptionType));

+

+#if defined(FLASH_OBR_SPRMOD)

+    

+  /* Program PCROP option byte*/

+  if ((pAdvOBInit->OptionType & OPTIONBYTE_PCROP) == OPTIONBYTE_PCROP)

+  {

+    /* Check the parameters */

+    assert_param(IS_PCROPSTATE(pAdvOBInit->PCROPState));

+    if (pAdvOBInit->PCROPState == OB_PCROP_STATE_ENABLE)

+    {

+      /*Enable of Write protection on the selected Sector*/

+      status = FLASH_OB_PCROPConfig(pAdvOBInit, ENABLE);

+      if (status != HAL_OK)

+      {

+        return status;

+      }

+    }

+    else

+    {

+      /* Disable of Write protection on the selected Sector*/ 

+      status = FLASH_OB_PCROPConfig(pAdvOBInit, DISABLE);

+      if (status != HAL_OK)

+      {

+        return status;

+      }

+    }

+  }

+  

+#endif /* FLASH_OBR_SPRMOD */

+

+#if defined(FLASH_OBR_nRST_BFB2)

+    

+  /* Program BOOT config option byte */

+  if ((pAdvOBInit->OptionType & OPTIONBYTE_BOOTCONFIG) == OPTIONBYTE_BOOTCONFIG)

+  {

+    status = FLASH_OB_BootConfig(pAdvOBInit->BootConfig);

+  }

+  

+#endif /* FLASH_OBR_nRST_BFB2 */

+

+  return status;

+}

+

+/**

+  * @brief  Get the OBEX byte configuration

+  * @note   This function can be used only for Cat2  & Cat3 devices for PCROP and Cat4 & Cat5 for BFB2.

+  * @param  pAdvOBInit pointer to an FLASH_AdvOBProgramInitTypeDef structure that

+  *         contains the configuration information for the programming.

+  * 

+  * @retval None

+  */

+void HAL_FLASHEx_AdvOBGetConfig(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit)

+{

+  pAdvOBInit->OptionType = 0U;

+  

+#if defined(FLASH_OBR_SPRMOD)

+      

+  pAdvOBInit->OptionType |= OPTIONBYTE_PCROP;

+

+  /*Get PCROP state */

+  pAdvOBInit->PCROPState = (FLASH->OBR & FLASH_OBR_SPRMOD) >> POSITION_VAL(FLASH_OBR_SPRMOD);

+  

+  /*Get PCROP protected sector from 0 to 31 */

+  pAdvOBInit->PCROPSector0To31 = FLASH->WRPR1;

+  

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)

+

+  /*Get PCROP protected sector from 32 to 63 */

+  pAdvOBInit->PCROPSector32To63 = FLASH->WRPR2;

+

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC */

+#endif /* FLASH_OBR_SPRMOD */

+

+#if defined(FLASH_OBR_nRST_BFB2)

+      

+  pAdvOBInit->OptionType |= OPTIONBYTE_BOOTCONFIG;

+

+  /* Get Boot config OB */

+  pAdvOBInit->BootConfig = (FLASH->OBR & FLASH_OBR_nRST_BFB2) >> 16U;

+

+#endif /* FLASH_OBR_nRST_BFB2 */

+}

+

+#endif /* FLASH_OBR_SPRMOD || FLASH_OBR_nRST_BFB2 */

+

+#if defined(FLASH_OBR_SPRMOD)

+

+/**

+  * @brief  Select the Protection Mode (SPRMOD).

+  * @note   This function can be used only for STM32L151xBA, STM32L152xBA, STM32L151xC, STM32L152xC & STM32L162xC devices

+  * @note   Once SPRMOD bit is active, unprotection of a protected sector is not possible 

+  * @note   Read a protected sector will set RDERR Flag and write a protected sector will set WRPERR Flag

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_FLASHEx_OB_SelectPCROP(void)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+  uint16_t tmp1 = 0U;

+  uint32_t tmp2 = 0U;

+  uint8_t optiontmp = 0U;

+  uint16_t optiontmp2 = 0U;

+  

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  /* Mask RDP Byte */

+  optiontmp =  (uint8_t)(*(__IO uint8_t *)(OB_BASE)); 

+  

+  /* Update Option Byte */

+  optiontmp2 = (uint16_t)(OB_PCROP_SELECTED | optiontmp); 

+  

+  /* calculate the option byte to write */

+  tmp1 = (uint16_t)(~(optiontmp2 ));

+  tmp2 = (uint32_t)(((uint32_t)((uint32_t)(tmp1) << 16U)) | ((uint32_t)optiontmp2));

+  

+  if(status == HAL_OK)

+  {         

+    /* Clean the error context */

+    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+    /* program PCRop */

+    OB->RDP = tmp2;

+    

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  }

+  

+  /* Return the Read protection operation Status */

+  return status;            

+}

+

+/**

+  * @brief  Deselect the Protection Mode (SPRMOD).

+  * @note   This function can be used only for STM32L151xBA, STM32L152xBA, STM32L151xC, STM32L152xC & STM32L162xC devices

+  * @note   Once SPRMOD bit is active, unprotection of a protected sector is not possible 

+  * @note   Read a protected sector will set RDERR Flag and write a protected sector will set WRPERR Flag

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_FLASHEx_OB_DeSelectPCROP(void)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+  uint16_t tmp1 = 0U;

+  uint32_t tmp2 = 0U;

+  uint8_t optiontmp = 0U;

+  uint16_t optiontmp2 = 0U;

+  

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  /* Mask RDP Byte */

+  optiontmp =  (uint8_t)(*(__IO uint8_t *)(OB_BASE)); 

+  

+  /* Update Option Byte */

+  optiontmp2 = (uint16_t)(OB_PCROP_DESELECTED | optiontmp); 

+  

+  /* calculate the option byte to write */

+  tmp1 = (uint16_t)(~(optiontmp2 ));

+  tmp2 = (uint32_t)(((uint32_t)((uint32_t)(tmp1) << 16U)) | ((uint32_t)optiontmp2));

+  

+  if(status == HAL_OK)

+  {         

+    /* Clean the error context */

+    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+    /* program PCRop */

+    OB->RDP = tmp2;

+    

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  }

+  

+  /* Return the Read protection operation Status */

+  return status;            

+}

+

+#endif /* FLASH_OBR_SPRMOD */

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASHEx_Exported_Functions_Group3 DATA EEPROM Programming functions

+ *  @brief   DATA EEPROM Programming functions

+ *

+@verbatim   

+ ===============================================================================

+                     ##### DATA EEPROM Programming functions ##### 

+ ===============================================================================  

+ 

+    [..] Any operation of erase or program should follow these steps:

+    (#) Call the @ref HAL_FLASHEx_DATAEEPROM_Unlock() function to enable the data EEPROM access

+        and Flash program erase control register access.

+    (#) Call the desired function to erase or program data.

+    (#) Call the @ref HAL_FLASHEx_DATAEEPROM_Lock() to disable the data EEPROM access

+        and Flash program erase control register access(recommended

+        to protect the DATA_EEPROM against possible unwanted operation).

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Unlocks the data memory and FLASH_PECR register access.

+  * @retval HAL_StatusTypeDef HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Unlock(void)

+{

+  if((FLASH->PECR & FLASH_PECR_PELOCK) != RESET)

+  {  

+    /* Unlocking the Data memory and FLASH_PECR register access*/

+    FLASH->PEKEYR = FLASH_PEKEY1;

+    FLASH->PEKEYR = FLASH_PEKEY2;

+  }

+  else

+  {

+    return HAL_ERROR;

+  }

+  return HAL_OK;  

+}

+

+/**

+  * @brief  Locks the Data memory and FLASH_PECR register access.

+  * @retval HAL_StatusTypeDef HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Lock(void)

+{

+  /* Set the PELOCK Bit to lock the data memory and FLASH_PECR register access */

+  SET_BIT(FLASH->PECR, FLASH_PECR_PELOCK);

+  

+  return HAL_OK;

+}

+

+/**

+  * @brief  Erase a word in data memory.

+  * @param  Address specifies the address to be erased.

+  * @param  TypeErase  Indicate the way to erase at a specified address.

+  *         This parameter can be a value of @ref FLASH_Type_Program

+  * @note   To correctly run this function, the @ref HAL_FLASHEx_DATAEEPROM_Unlock() function

+  *         must be called before.

+  *         Call the @ref HAL_FLASHEx_DATAEEPROM_Lock() to the data EEPROM access

+  *         and Flash program erase control register access(recommended to protect 

+  *         the DATA_EEPROM against possible unwanted operation).

+  * @retval HAL_StatusTypeDef HAL Status

+  */

+HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Erase(uint32_t TypeErase, uint32_t Address)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+  

+  /* Check the parameters */

+  assert_param(IS_TYPEPROGRAMDATA(TypeErase));

+  assert_param(IS_FLASH_DATA_ADDRESS(Address));

+  

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+    /* Clean the error context */

+    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+    if(TypeErase == FLASH_TYPEERASEDATA_WORD)

+    {

+      /* Write 00000000h to valid address in the data memory */

+      *(__IO uint32_t *) Address = 0x00000000U;

+    }

+

+    if(TypeErase == FLASH_TYPEERASEDATA_HALFWORD)

+    {

+      /* Write 0000h to valid address in the data memory */

+      *(__IO uint16_t *) Address = (uint16_t)0x0000;

+    }

+

+    if(TypeErase == FLASH_TYPEERASEDATA_BYTE)

+    {

+      /* Write 00h to valid address in the data memory */

+      *(__IO uint8_t *) Address = (uint8_t)0x00;

+    }

+

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  }

+   

+  /* Return the erase status */

+  return status;

+}  

+

+/**

+  * @brief  Program word at a specified address

+  * @note   To correctly run this function, the @ref HAL_FLASHEx_DATAEEPROM_Unlock() function

+  *         must be called before.

+  *         Call the @ref HAL_FLASHEx_DATAEEPROM_Unlock() to he data EEPROM access

+  *         and Flash program erase control register access(recommended to protect 

+  *         the DATA_EEPROM against possible unwanted operation).

+  * @note   The function @ref HAL_FLASHEx_DATAEEPROM_EnableFixedTimeProgram() can be called before 

+  *         this function to configure the Fixed Time Programming.

+  * @param  TypeProgram  Indicate the way to program at a specified address.

+  *         This parameter can be a value of @ref FLASHEx_Type_Program_Data

+  * @param  Address  specifie the address to be programmed.

+  * @param  Data     specifie the data to be programmed

+  * 

+  * @retval HAL_StatusTypeDef HAL Status

+  */

+

+HAL_StatusTypeDef   HAL_FLASHEx_DATAEEPROM_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data)

+{

+  HAL_StatusTypeDef status = HAL_ERROR;

+  

+  /* Process Locked */

+  __HAL_LOCK(&pFlash);

+

+  /* Check the parameters */

+  assert_param(IS_TYPEPROGRAMDATA(TypeProgram));

+

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+    /* Clean the error context */

+    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+    if(TypeProgram == FLASH_TYPEPROGRAMDATA_WORD)

+    {

+      /* Program word (32-bit) at a specified address.*/

+      status = FLASH_DATAEEPROM_ProgramWord(Address, (uint32_t) Data);

+    }

+    else if(TypeProgram == FLASH_TYPEPROGRAMDATA_HALFWORD)

+    {

+      /* Program halfword (16-bit) at a specified address.*/

+      status = FLASH_DATAEEPROM_ProgramHalfWord(Address, (uint16_t) Data);

+    }

+    else if(TypeProgram == FLASH_TYPEPROGRAMDATA_BYTE)

+    {

+      /* Program byte (8-bit) at a specified address.*/

+      status = FLASH_DATAEEPROM_ProgramByte(Address, (uint8_t) Data);

+    }

+    else if(TypeProgram == FLASH_TYPEPROGRAMDATA_FASTBYTE)

+    {

+      /*Program word (8-bit) at a specified address.*/

+      status = FLASH_DATAEEPROM_FastProgramByte(Address, (uint8_t) Data);

+    }

+    else if(TypeProgram == FLASH_TYPEPROGRAMDATA_FASTHALFWORD)

+    {

+      /* Program halfword (16-bit) at a specified address.*/

+      status = FLASH_DATAEEPROM_FastProgramHalfWord(Address, (uint16_t) Data);

+    }    

+    else if(TypeProgram == FLASH_TYPEPROGRAMDATA_FASTWORD)

+    {

+      /* Program word (32-bit) at a specified address.*/

+      status = FLASH_DATAEEPROM_FastProgramWord(Address, (uint32_t) Data);

+    }

+    else

+    {

+      status = HAL_ERROR;

+    }

+

+  }

+

+  /* Process Unlocked */

+  __HAL_UNLOCK(&pFlash);

+

+  return status;

+}

+

+/**

+  * @brief  Enable DATA EEPROM fixed Time programming (2*Tprog).

+  * @retval None

+  */

+void HAL_FLASHEx_DATAEEPROM_EnableFixedTimeProgram(void)

+{

+  SET_BIT(FLASH->PECR, FLASH_PECR_FTDW);

+}

+

+/**

+  * @brief  Disables DATA EEPROM fixed Time programming (2*Tprog).

+  * @retval None

+  */

+void HAL_FLASHEx_DATAEEPROM_DisableFixedTimeProgram(void)

+{

+  CLEAR_BIT(FLASH->PECR, FLASH_PECR_FTDW);

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/** @addtogroup FLASHEx_Private_Functions

+ * @{

+ */

+

+/*

+==============================================================================

+              OPTIONS BYTES

+==============================================================================

+*/

+/**

+  * @brief  Enables or disables the read out protection.

+  * @note   To correctly run this function, the @ref HAL_FLASH_OB_Unlock() function

+  *         must be called before.

+  * @param  OB_RDP specifies the read protection level. 

+  *   This parameter can be:

+  *     @arg @ref OB_RDP_LEVEL_0 No protection

+  *     @arg @ref OB_RDP_LEVEL_1 Read protection of the memory

+  *     @arg @ref OB_RDP_LEVEL_2 Chip protection

+  * 

+  *  !!!Warning!!! When enabling OB_RDP_LEVEL_2 it's no more possible to go back to level 1 or 0

+  *   

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef FLASH_OB_RDPConfig(uint8_t OB_RDP)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+  uint32_t tmp1 = 0U, tmp2 = 0U, tmp3 = 0U;

+  

+  /* Check the parameters */

+  assert_param(IS_OB_RDP(OB_RDP));

+  

+  tmp1 = (uint32_t)(OB->RDP & FLASH_OBR_RDPRT);

+  

+  /* According to errata sheet, DocID022054 Rev 5, par2.1.5

+  Before setting Level0 in the RDP register, check that the current level is not equal to Level0.

+  If the current level is not equal to Level0, Level0 can be activated.

+  If the current level is Level0 then the RDP register must not be written again with Level0. */

+  

+  if ((tmp1 == OB_RDP_LEVEL_0) && (OB_RDP == OB_RDP_LEVEL_0))

+  {

+    /*current level is Level0 then the RDP register must not be written again with Level0. */

+    status = HAL_ERROR;

+  }

+  else 

+  {

+#if defined(FLASH_OBR_SPRMOD)

+    /* Mask SPRMOD bit */

+    tmp3 = (uint32_t)(OB->RDP & FLASH_OBR_SPRMOD);

+#endif

+

+    /* calculate the option byte to write */

+    tmp1 = (~((uint32_t)(OB_RDP | tmp3)));

+    tmp2 = (uint32_t)(((uint32_t)((uint32_t)(tmp1) << 16U)) | ((uint32_t)(OB_RDP | tmp3)));

+

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+

+    if(status == HAL_OK)

+    {

+      /* Clean the error context */

+      pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+      /* program read protection level */

+      OB->RDP = tmp2;

+

+      /* Wait for last operation to be completed */

+      status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+    }

+  }

+

+  /* Return the Read protection operation Status */

+  return status;

+}

+

+/**

+  * @brief  Programs the FLASH brownout reset threshold level Option Byte.

+  * @param  OB_BOR Selects the brownout reset threshold level.

+  *   This parameter can be one of the following values:

+  *     @arg @ref OB_BOR_OFF BOR is disabled at power down, the reset is asserted when the VDD 

+  *                      power supply reaches the PDR(Power Down Reset) threshold (1.5V)

+  *     @arg @ref OB_BOR_LEVEL1 BOR Reset threshold levels for 1.7V - 1.8V VDD power supply

+  *     @arg @ref OB_BOR_LEVEL2 BOR Reset threshold levels for 1.9V - 2.0V VDD power supply

+  *     @arg @ref OB_BOR_LEVEL3 BOR Reset threshold levels for 2.3V - 2.4V VDD power supply

+  *     @arg @ref OB_BOR_LEVEL4 BOR Reset threshold levels for 2.55V - 2.65V VDD power supply

+  *     @arg @ref OB_BOR_LEVEL5 BOR Reset threshold levels for 2.8V - 2.9V VDD power supply

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef FLASH_OB_BORConfig(uint8_t OB_BOR)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+  uint32_t tmp = 0U, tmp1 = 0U;

+

+  /* Check the parameters */

+  assert_param(IS_OB_BOR_LEVEL(OB_BOR));

+

+  /* Get the User Option byte register */

+  tmp1 = OB->USER & ((~FLASH_OBR_BOR_LEV) >> 16U);

+

+  /* Calculate the option byte to write - [0xFFU | nUSER | 0x00U | USER]*/

+  tmp = (uint32_t)~((OB_BOR | tmp1)) << 16U;

+  tmp |= (OB_BOR | tmp1);

+    

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {  

+    /* Clean the error context */

+    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+    /* Write the BOR Option Byte */            

+    OB->USER = tmp;

+

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  }

+  

+  /* Return the Option Byte BOR Programming Status */

+  return status;

+}

+

+/**

+  * @brief  Returns the FLASH User Option Bytes values.

+  * @retval The FLASH User Option Bytes.

+  */

+static uint8_t FLASH_OB_GetUser(void)

+{

+  /* Return the User Option Byte */

+  return (uint8_t)((FLASH->OBR & (FLASH_OBR_IWDG_SW | FLASH_OBR_nRST_STOP | FLASH_OBR_nRST_STDBY)) >> 16U);

+}

+

+/**

+  * @brief  Returns the FLASH Read Protection level.

+  * @retval FLASH RDP level

+  *         This parameter can be one of the following values:

+  *            @arg @ref OB_RDP_LEVEL_0 No protection

+  *            @arg @ref OB_RDP_LEVEL_1 Read protection of the memory

+  *            @arg @ref OB_RDP_LEVEL_2 Full chip protection

+  */

+static uint8_t FLASH_OB_GetRDP(void)

+{

+  uint8_t rdp_level = (uint8_t)(FLASH->OBR & FLASH_OBR_RDPRT);

+

+  if ((rdp_level != OB_RDP_LEVEL_0) && (rdp_level != OB_RDP_LEVEL_2))

+  {

+    return (OB_RDP_LEVEL_1);

+  }

+  else

+  {

+    return (rdp_level);

+  }

+}

+

+/**

+  * @brief  Returns the FLASH BOR level.

+  * @retval The BOR level Option Bytes.

+  */

+static uint8_t FLASH_OB_GetBOR(void)

+{

+  /* Return the BOR level */

+  return (uint8_t)((FLASH->OBR & (uint32_t)FLASH_OBR_BOR_LEV) >> 16U);

+}

+

+/**

+  * @brief  Write protects the desired pages of the first 64KB of the Flash.

+  * @param  pOBInit pointer to an FLASH_OBInitStruct structure that

+  *         contains WRP parameters.

+  * @param  NewState new state of the specified FLASH Pages Wtite protection.

+  *   This parameter can be: ENABLE or DISABLE.

+  * @retval HAL_StatusTypeDef

+  */

+static HAL_StatusTypeDef FLASH_OB_WRPConfig(FLASH_OBProgramInitTypeDef *pOBInit, FunctionalState NewState)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+  

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+ 

+  if(status == HAL_OK)

+  {

+    /* Clean the error context */

+    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+    /* WRP for sector between 0 to 31 */

+    if (pOBInit->WRPSector0To31 != 0U)

+    {

+      FLASH_OB_WRPConfigWRP1OrPCROP1(pOBInit->WRPSector0To31, NewState);

+    }

+    

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)    \

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xCA) \

+ || defined(STM32L152xD) || defined(STM32L152xDX) || defined(STM32L162xCA) || defined(STM32L162xD)  \

+ || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE)

+      

+    /* Pages for Cat3, Cat4 & Cat5 devices*/

+    /* WRP for sector between 32 to 63 */

+    if (pOBInit->WRPSector32To63 != 0U)

+    {

+      FLASH_OB_WRPConfigWRP2OrPCROP2(pOBInit->WRPSector32To63, NewState);

+    }

+    

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || (...) || STM32L151xE || STM32L152xE || STM32L162xE */

+

+#if defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xD) || defined(STM32L152xDX) \

+ || defined(STM32L162xD) || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE)  \

+ || defined(STM32L162xE)

+      

+    /* Pages for devices with FLASH >= 256KB*/

+    /* WRP for sector between 64 to 95 */

+    if (pOBInit->WRPSector64To95 != 0U)

+    {

+      FLASH_OB_WRPConfigWRP3(pOBInit->WRPSector64To95, NewState);

+    }

+    

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */

+

+#if defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE) || defined(STM32L151xDX) \

+ || defined(STM32L152xDX) || defined(STM32L162xDX)

+

+    /* Pages for Cat5 devices*/

+    /* WRP for sector between 96 to 127 */

+    if (pOBInit->WRPSector96To127 != 0U)

+    {

+      FLASH_OB_WRPConfigWRP4(pOBInit->WRPSector96To127, NewState);

+    }

+    

+#endif /* STM32L151xE || STM32L152xE || STM32L162xE || STM32L151xDX || ... */

+

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  }

+

+  /* Return the write protection operation Status */

+  return status;      

+}

+

+#if defined(STM32L151xBA) || defined(STM32L152xBA) || defined(STM32L151xC) || defined(STM32L152xC) \

+ || defined(STM32L162xC)

+/**

+  * @brief  Enables the read/write protection (PCROP) of the desired 

+  *         sectors.

+  * @note   This function can be used only for Cat2 & Cat3 devices

+  * @param  pAdvOBInit pointer to an FLASH_AdvOBProgramInitTypeDef structure that

+  *         contains PCROP parameters.

+  * @param  NewState new state of the specified FLASH Pages read/Write protection.

+  *   This parameter can be: ENABLE or DISABLE.

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef FLASH_OB_PCROPConfig(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit, FunctionalState NewState)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+  FunctionalState pcropstate = DISABLE;

+  

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  /* Invert state to use same function of WRP */

+  if (NewState == DISABLE)

+  {

+    pcropstate = ENABLE;

+  }

+        

+  if(status == HAL_OK)

+  {

+    /* Clean the error context */

+    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+    /* Pages for Cat2 devices*/

+    /* PCROP for sector between 0 to 31 */

+    if (pAdvOBInit->PCROPSector0To31 != 0U)

+    {

+      FLASH_OB_WRPConfigWRP1OrPCROP1(pAdvOBInit->PCROPSector0To31, pcropstate);

+    }

+    

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)

+

+    /* Pages for Cat3 devices*/

+    /* WRP for sector between 32 to 63 */

+    if (pAdvOBInit->PCROPSector32To63 != 0U)

+    {

+      FLASH_OB_WRPConfigWRP2OrPCROP2(pAdvOBInit->PCROPSector32To63, pcropstate);

+    }

+    

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC  */

+    

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  }

+

+  /* Return the write protection operation Status */

+  return status;      

+}

+#endif /* STM32L151xBA || STM32L152xBA || STM32L151xC || STM32L152xC || STM32L162xC */

+

+/**

+  * @brief  Write protects the desired pages of the first 128KB of the Flash.

+  * @param  WRP1OrPCROP1 specifies the address of the pages to be write protected.

+  *   This parameter can be a combination of @ref FLASHEx_Option_Bytes_Write_Protection1

+  * @param  NewState new state of the specified FLASH Pages Write protection.

+  *   This parameter can be: ENABLE or DISABLE.

+  * @retval None

+  */

+static void FLASH_OB_WRPConfigWRP1OrPCROP1(uint32_t WRP1OrPCROP1, FunctionalState NewState)

+{

+  uint32_t wrp01data = 0U, wrp23data = 0U;

+  

+  uint32_t tmp1 = 0U, tmp2 = 0U;

+  

+  /* Check the parameters */

+  assert_param(IS_OB_WRP(WRP1OrPCROP1));

+  assert_param(IS_FUNCTIONAL_STATE(NewState));

+

+  if (NewState != DISABLE)

+  {

+    wrp01data = (uint16_t)(((WRP1OrPCROP1 & WRP_MASK_LOW) | OB->WRP01));

+    wrp23data = (uint16_t)((((WRP1OrPCROP1 & WRP_MASK_HIGH)>>16U | OB->WRP23))); 

+    tmp1 = (uint32_t)(~(wrp01data) << 16U)|(wrp01data);

+    OB->WRP01 = tmp1;

+

+    tmp2 = (uint32_t)(~(wrp23data) << 16U)|(wrp23data);

+    OB->WRP23 = tmp2;      

+  }

+  else

+  {

+    wrp01data = (uint16_t)(~WRP1OrPCROP1 & (WRP_MASK_LOW & OB->WRP01));

+    wrp23data = (uint16_t)((((~WRP1OrPCROP1 & WRP_MASK_HIGH)>>16U & OB->WRP23))); 

+

+    tmp1 = (uint32_t)((~wrp01data) << 16U)|(wrp01data);

+    OB->WRP01 = tmp1;

+    

+    tmp2 = (uint32_t)((~wrp23data) << 16U)|(wrp23data);

+    OB->WRP23 = tmp2;

+  }

+}

+

+#if defined(STM32L100xC) || defined(STM32L151xC) || defined(STM32L152xC) || defined(STM32L162xC)    \

+ || defined(STM32L151xCA) || defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xCA) \

+ || defined(STM32L152xD) || defined(STM32L152xDX) || defined(STM32L162xCA) || defined(STM32L162xD)  \

+ || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE)

+/**

+  * @brief  Enable Write protects the desired pages of the second 128KB of the Flash.

+  * @note   This function can be used only for Cat3, Cat4  & Cat5 devices.

+  * @param  WRP2OrPCROP2 specifies the address of the pages to be write protected.

+  *   This parameter can be a combination of @ref FLASHEx_Option_Bytes_Write_Protection2

+  * @param  NewState new state of the specified FLASH Pages Wtite protection.

+  *   This parameter can be: ENABLE or DISABLE.

+  * @retval None

+  */

+static void FLASH_OB_WRPConfigWRP2OrPCROP2(uint32_t WRP2OrPCROP2, FunctionalState NewState)

+{

+  uint32_t wrp45data = 0U, wrp67data = 0U;

+  

+  uint32_t tmp1 = 0U, tmp2 = 0U;

+  

+  /* Check the parameters */

+  assert_param(IS_OB_WRP(WRP2OrPCROP2));

+  assert_param(IS_FUNCTIONAL_STATE(NewState));

+

+  if (NewState != DISABLE)

+  {

+    wrp45data = (uint16_t)(((WRP2OrPCROP2 & WRP_MASK_LOW) | OB->WRP45));

+    wrp67data = (uint16_t)((((WRP2OrPCROP2 & WRP_MASK_HIGH)>>16U | OB->WRP67))); 

+    tmp1 = (uint32_t)(~(wrp45data) << 16U)|(wrp45data);

+    OB->WRP45 = tmp1;

+    

+    tmp2 = (uint32_t)(~(wrp67data) << 16U)|(wrp67data);

+    OB->WRP67 = tmp2;

+  }

+  else

+  {

+    wrp45data = (uint16_t)(~WRP2OrPCROP2 & (WRP_MASK_LOW & OB->WRP45));

+    wrp67data = (uint16_t)((((~WRP2OrPCROP2 & WRP_MASK_HIGH)>>16U & OB->WRP67))); 

+    

+    tmp1 = (uint32_t)((~wrp45data) << 16U)|(wrp45data);

+    OB->WRP45 = tmp1;

+    

+    tmp2 = (uint32_t)((~wrp67data) << 16U)|(wrp67data);

+    OB->WRP67 = tmp2;

+  }

+}

+#endif /* STM32L100xC || STM32L151xC || STM32L152xC || (...) || STM32L151xE || STM32L152xE || STM32L162xE */

+

+#if defined(STM32L151xD) || defined(STM32L151xDX) || defined(STM32L152xD) || defined(STM32L152xDX) \

+ || defined(STM32L162xD) || defined(STM32L162xDX) || defined(STM32L151xE) || defined(STM32L152xE)  \

+ || defined(STM32L162xE)

+/**

+  * @brief  Enable Write protects the desired pages of the third 128KB of the Flash.

+  * @note   This function can be used only for STM32L151xD, STM32L152xD, STM32L162xD  & Cat5 devices.

+  * @param  WRP3 specifies the address of the pages to be write protected.

+  *   This parameter can be a combination of @ref FLASHEx_Option_Bytes_Write_Protection3

+  * @param  NewState new state of the specified FLASH Pages Wtite protection.

+  *   This parameter can be: ENABLE or DISABLE.

+  * @retval None

+  */

+static void FLASH_OB_WRPConfigWRP3(uint32_t WRP3, FunctionalState NewState)

+{

+  uint32_t wrp89data = 0U, wrp1011data = 0U;

+  

+  uint32_t tmp1 = 0U, tmp2 = 0U;

+  

+  /* Check the parameters */

+  assert_param(IS_OB_WRP(WRP3));

+  assert_param(IS_FUNCTIONAL_STATE(NewState));

+

+  if (NewState != DISABLE)

+  {

+    wrp89data = (uint16_t)(((WRP3 & WRP_MASK_LOW) | OB->WRP89));

+    wrp1011data = (uint16_t)((((WRP3 & WRP_MASK_HIGH)>>16U | OB->WRP1011))); 

+    tmp1 = (uint32_t)(~(wrp89data) << 16U)|(wrp89data);

+    OB->WRP89 = tmp1;

+

+    tmp2 = (uint32_t)(~(wrp1011data) << 16U)|(wrp1011data);

+    OB->WRP1011 = tmp2;      

+  }

+  else

+  {

+    wrp89data = (uint16_t)(~WRP3 & (WRP_MASK_LOW & OB->WRP89));

+    wrp1011data = (uint16_t)((((~WRP3 & WRP_MASK_HIGH)>>16U & OB->WRP1011))); 

+

+    tmp1 = (uint32_t)((~wrp89data) << 16U)|(wrp89data);

+    OB->WRP89 = tmp1;

+

+    tmp2 = (uint32_t)((~wrp1011data) << 16U)|(wrp1011data);

+    OB->WRP1011 = tmp2;

+  }

+}

+#endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */

+

+#if defined(STM32L151xE) || defined(STM32L152xE) || defined(STM32L162xE) || defined(STM32L151xDX) \

+ || defined(STM32L152xDX) || defined(STM32L162xDX)

+/**

+  * @brief  Enable Write protects the desired pages of the Fourth 128KB of the Flash.

+  * @note   This function can be used only for Cat5 & STM32L1xxDX devices.

+  * @param  WRP4 specifies the address of the pages to be write protected.

+  *   This parameter can be a combination of @ref FLASHEx_Option_Bytes_Write_Protection4

+  * @param  NewState new state of the specified FLASH Pages Wtite protection.

+  *   This parameter can be: ENABLE or DISABLE.

+  * @retval None

+  */

+static void FLASH_OB_WRPConfigWRP4(uint32_t WRP4, FunctionalState NewState)

+{

+  uint32_t wrp1213data = 0U, wrp1415data = 0U;

+  

+  uint32_t tmp1 = 0U, tmp2 = 0U;

+  

+  /* Check the parameters */

+  assert_param(IS_OB_WRP(WRP4));

+  assert_param(IS_FUNCTIONAL_STATE(NewState));

+

+  if (NewState != DISABLE)

+  {

+    wrp1213data = (uint16_t)(((WRP4 & WRP_MASK_LOW) | OB->WRP1213));

+    wrp1415data = (uint16_t)((((WRP4 & WRP_MASK_HIGH)>>16U | OB->WRP1415))); 

+    tmp1 = (uint32_t)(~(wrp1213data) << 16U)|(wrp1213data);

+    OB->WRP1213 = tmp1;

+

+    tmp2 = (uint32_t)(~(wrp1415data) << 16U)|(wrp1415data);

+    OB->WRP1415 = tmp2;      

+  }

+  else

+  {

+    wrp1213data = (uint16_t)(~WRP4 & (WRP_MASK_LOW & OB->WRP1213));

+    wrp1415data = (uint16_t)((((~WRP4 & WRP_MASK_HIGH)>>16U & OB->WRP1415))); 

+

+    tmp1 = (uint32_t)((~wrp1213data) << 16U)|(wrp1213data);

+    OB->WRP1213 = tmp1;

+

+    tmp2 = (uint32_t)((~wrp1415data) << 16U)|(wrp1415data);

+    OB->WRP1415 = tmp2;

+  }

+}

+#endif /* STM32L151xE || STM32L152xE || STM32L162xE || STM32L151xDX || ... */

+

+/**

+  * @brief  Programs the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY.

+  * @param  OB_IWDG Selects the WDG mode.

+  *   This parameter can be one of the following values:

+  *     @arg @ref OB_IWDG_SW Software WDG selected

+  *     @arg @ref OB_IWDG_HW Hardware WDG selected

+  * @param  OB_STOP Reset event when entering STOP mode.

+  *   This parameter can be one of the following values:

+  *     @arg @ref OB_STOP_NORST No reset generated when entering in STOP

+  *     @arg @ref OB_STOP_RST Reset generated when entering in STOP

+  * @param  OB_STDBY Reset event when entering Standby mode.

+  *   This parameter can be one of the following values:

+  *     @arg @ref OB_STDBY_NORST No reset generated when entering in STANDBY

+  *     @arg @ref OB_STDBY_RST Reset generated when entering in STANDBY

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY)

+{

+  HAL_StatusTypeDef status = HAL_OK; 

+  uint32_t tmp = 0U, tmp1 = 0U;

+

+  /* Check the parameters */

+  assert_param(IS_OB_IWDG_SOURCE(OB_IWDG));

+  assert_param(IS_OB_STOP_SOURCE(OB_STOP));

+  assert_param(IS_OB_STDBY_SOURCE(OB_STDBY));

+

+  /* Get the User Option byte register */

+  tmp1 = OB->USER & ((~(FLASH_OBR_IWDG_SW | FLASH_OBR_nRST_STOP | FLASH_OBR_nRST_STDBY)) >> 16U);

+

+  /* Calculate the user option byte to write */ 

+  tmp = (uint32_t)(((uint32_t)~((uint32_t)((uint32_t)(OB_IWDG) | (uint32_t)(OB_STOP) | (uint32_t)(OB_STDBY) | tmp1))) << 16U);

+  tmp |= ((uint32_t)(OB_IWDG) | ((uint32_t)OB_STOP) | (uint32_t)(OB_STDBY) | tmp1);

+  

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {  

+    /* Clean the error context */

+    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+    /* Write the User Option Byte */

+    OB->USER = tmp;

+    

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  }

+

+  /* Return the Option Byte program Status */

+  return status;

+}

+

+#if defined(FLASH_OBR_nRST_BFB2)

+/**

+  * @brief  Configures to boot from Bank1 or Bank2.

+  * @param  OB_BOOT select the FLASH Bank to boot from.

+  *   This parameter can be one of the following values:

+  *     @arg @ref OB_BOOT_BANK2 At startup, if boot pins are set in boot from user Flash

+  *        position and this parameter is selected the device will boot from Bank2 or Bank1,

+  *        depending on the activation of the bank. The active banks are checked in

+  *        the following order: Bank2, followed by Bank1.

+  *        The active bank is recognized by the value programmed at the base address

+  *        of the respective bank (corresponding to the initial stack pointer value

+  *        in the interrupt vector table).

+  *     @arg @ref OB_BOOT_BANK1 At startup, if boot pins are set in boot from user Flash

+  *        position and this parameter is selected the device will boot from Bank1(Default).

+  *        For more information, please refer to AN2606 from www.st.com. 

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef FLASH_OB_BootConfig(uint8_t OB_BOOT)

+{

+  HAL_StatusTypeDef status = HAL_OK; 

+  uint32_t tmp = 0U, tmp1 = 0U;

+

+  /* Check the parameters */

+  assert_param(IS_OB_BOOT_BANK(OB_BOOT));

+

+  /* Get the User Option byte register  and BOR Level*/

+  tmp1 = OB->USER & ((~FLASH_OBR_nRST_BFB2) >> 16U);

+

+  /* Calculate the option byte to write */

+  tmp = (uint32_t)~(OB_BOOT | tmp1) << 16U;

+  tmp |= (OB_BOOT | tmp1);

+

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+

+  if(status == HAL_OK)

+  {  

+    /* Clean the error context */

+    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+    /* Write the BOOT Option Byte */

+    OB->USER = tmp;

+    

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  }

+

+  /* Return the Option Byte program Status */

+  return status;

+}

+

+#endif /* FLASH_OBR_nRST_BFB2 */

+

+/*

+==============================================================================

+              DATA

+==============================================================================

+*/

+

+/**

+  * @brief  Write a Byte at a specified address in data memory.

+  * @param  Address specifies the address to be written.

+  * @param  Data specifies the data to be written.

+  * @note   This function assumes that the is data word is already erased.

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef FLASH_DATAEEPROM_FastProgramByte(uint32_t Address, uint8_t Data)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+#if defined(STM32L100xB) || defined(STM32L151xB) || defined(STM32L152xB)

+  uint32_t tmp = 0U, tmpaddr = 0U;

+#endif /* STM32L100xB || STM32L151xB || STM32L152xB  */

+  

+  /* Check the parameters */

+  assert_param(IS_FLASH_DATA_ADDRESS(Address)); 

+

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+    

+  if(status == HAL_OK)

+  {

+    /* Clear the FTDW bit */

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_FTDW);

+

+#if defined(STM32L100xB) || defined(STM32L151xB) || defined(STM32L152xB)

+    /* Possible only on Cat1 devices */

+    if(Data != (uint8_t)0x00U) 

+    {

+      /* If the previous operation is completed, proceed to write the new Data */

+      *(__IO uint8_t *)Address = Data;

+            

+      /* Wait for last operation to be completed */

+      status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+    }

+    else

+    {

+      tmpaddr = Address & 0xFFFFFFFCU;

+      tmp = * (__IO uint32_t *) tmpaddr;

+      tmpaddr = 0xFFU << ((uint32_t) (0x8U * (Address & 0x3U)));

+      tmp &= ~tmpaddr;

+      status = HAL_FLASHEx_DATAEEPROM_Erase(FLASH_TYPEERASEDATA_WORD, Address & 0xFFFFFFFCU);

+      /* Process Unlocked */

+      __HAL_UNLOCK(&pFlash);

+      status = HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_FASTWORD, (Address & 0xFFFFFFFCU), tmp);

+      /* Process Locked */

+      __HAL_LOCK(&pFlash);

+    }

+#else /*!Cat1*/ 

+    /* If the previous operation is completed, proceed to write the new Data */

+    *(__IO uint8_t *)Address = Data;

+            

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+#endif /* STM32L100xB || STM32L151xB || STM32L152xB  */

+  }

+  /* Return the Write Status */

+  return status;

+}

+

+/**

+  * @brief  Writes a half word at a specified address in data memory.

+  * @param  Address specifies the address to be written.

+  * @param  Data specifies the data to be written.

+  * @note   This function assumes that the is data word is already erased.

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef FLASH_DATAEEPROM_FastProgramHalfWord(uint32_t Address, uint16_t Data)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+#if defined(STM32L100xB) || defined(STM32L151xB) || defined(STM32L152xB)

+  uint32_t tmp = 0U, tmpaddr = 0U;

+#endif /* STM32L100xB || STM32L151xB || STM32L152xB  */

+  

+  /* Check the parameters */

+  assert_param(IS_FLASH_DATA_ADDRESS(Address));

+

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+    

+  if(status == HAL_OK)

+  {

+    /* Clear the FTDW bit */

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_FTDW);

+

+#if defined(STM32L100xB) || defined(STM32L151xB) || defined(STM32L152xB)

+    /* Possible only on Cat1 devices */

+    if(Data != (uint16_t)0x0000U) 

+    {

+      /* If the previous operation is completed, proceed to write the new data */

+      *(__IO uint16_t *)Address = Data;

+  

+      /* Wait for last operation to be completed */

+      status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+    }

+    else

+    {

+      /* Process Unlocked */

+      __HAL_UNLOCK(&pFlash);

+      if((Address & 0x3U) != 0x3U)

+      {

+        tmpaddr = Address & 0xFFFFFFFCU;

+        tmp = * (__IO uint32_t *) tmpaddr;

+        tmpaddr = 0xFFFFU << ((uint32_t) (0x8U * (Address & 0x3U)));

+        tmp &= ~tmpaddr;        

+        status = HAL_FLASHEx_DATAEEPROM_Erase(FLASH_TYPEERASEDATA_WORD, Address & 0xFFFFFFFCU);

+        status = HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_FASTWORD, (Address & 0xFFFFFFFCU), tmp);

+      }

+      else

+      {

+        HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_FASTBYTE, Address, 0x00U);

+        HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_FASTBYTE, Address + 1U, 0x00U);

+      }

+      /* Process Locked */

+      __HAL_LOCK(&pFlash);

+    }

+#else /* !Cat1 */

+    /* If the previous operation is completed, proceed to write the new data */

+    *(__IO uint16_t *)Address = Data;

+  

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+#endif /* STM32L100xB || STM32L151xB || STM32L152xB  */

+  }

+  /* Return the Write Status */

+  return status;

+}

+

+/**

+  * @brief  Programs a word at a specified address in data memory.

+  * @param  Address specifies the address to be written.

+  * @param  Data specifies the data to be written.

+  * @note   This function assumes that the is data word is already erased.

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef FLASH_DATAEEPROM_FastProgramWord(uint32_t Address, uint32_t Data)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+  /* Check the parameters */

+  assert_param(IS_FLASH_DATA_ADDRESS(Address));

+  

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+    /* Clear the FTDW bit */

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_FTDW);

+  

+    /* If the previous operation is completed, proceed to program the new data */    

+    *(__IO uint32_t *)Address = Data;

+    

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);       

+  }

+  /* Return the Write Status */

+  return status;

+}

+

+/**

+  * @brief  Write a Byte at a specified address in data memory without erase.

+  * @param  Address specifies the address to be written.

+  * @param  Data specifies the data to be written.

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef FLASH_DATAEEPROM_ProgramByte(uint32_t Address, uint8_t Data)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+#if defined(STM32L100xB) || defined(STM32L151xB) || defined(STM32L152xB)

+  uint32_t tmp = 0U, tmpaddr = 0U;

+#endif /* STM32L100xB || STM32L151xB || STM32L152xB  */

+  

+  /* Check the parameters */

+  assert_param(IS_FLASH_DATA_ADDRESS(Address)); 

+

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+#if defined(STM32L100xB) || defined(STM32L151xB) || defined(STM32L152xB)

+    if(Data != (uint8_t) 0x00U)

+    {  

+      *(__IO uint8_t *)Address = Data;

+    

+      /* Wait for last operation to be completed */

+      status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+

+    }

+    else

+    {

+      tmpaddr = Address & 0xFFFFFFFCU;

+      tmp = * (__IO uint32_t *) tmpaddr;

+      tmpaddr = 0xFFU << ((uint32_t) (0x8U * (Address & 0x3U)));

+      tmp &= ~tmpaddr;        

+      status = HAL_FLASHEx_DATAEEPROM_Erase(FLASH_TYPEERASEDATA_WORD, Address & 0xFFFFFFFCU);

+      /* Process Unlocked */

+      __HAL_UNLOCK(&pFlash);

+      status = HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_FASTWORD, (Address & 0xFFFFFFFCU), tmp);

+      /* Process Locked */

+      __HAL_LOCK(&pFlash);

+    }

+#else /* Not Cat1*/

+    *(__IO uint8_t *)Address = Data;

+    

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+#endif /* STM32L100xB || STM32L151xB || STM32L152xB  */

+  }

+  /* Return the Write Status */

+  return status;

+}

+

+/**

+  * @brief  Writes a half word at a specified address in data memory without erase.

+  * @param  Address specifies the address to be written.

+  * @param  Data specifies the data to be written.

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef FLASH_DATAEEPROM_ProgramHalfWord(uint32_t Address, uint16_t Data)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+#if defined(STM32L100xB) || defined(STM32L151xB) || defined(STM32L152xB)

+  uint32_t tmp = 0U, tmpaddr = 0U;

+#endif /* STM32L100xB || STM32L151xB || STM32L152xB  */

+  

+  /* Check the parameters */

+  assert_param(IS_FLASH_DATA_ADDRESS(Address));

+

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+#if defined(STM32L100xB) || defined(STM32L151xB) || defined(STM32L152xB)

+    if(Data != (uint16_t)0x0000U)

+    {

+      *(__IO uint16_t *)Address = Data;

+   

+      /* Wait for last operation to be completed */

+      status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+    }

+    else

+    {

+      /* Process Unlocked */

+      __HAL_UNLOCK(&pFlash);

+      if((Address & 0x3U) != 0x3U)

+      {

+        tmpaddr = Address & 0xFFFFFFFCU;

+        tmp = * (__IO uint32_t *) tmpaddr;

+        tmpaddr = 0xFFFFU << ((uint32_t) (0x8U * (Address & 0x3U)));

+        tmp &= ~tmpaddr;          

+        status = HAL_FLASHEx_DATAEEPROM_Erase(FLASH_TYPEERASEDATA_WORD, Address & 0xFFFFFFFCU);

+        status = HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_FASTWORD, (Address & 0xFFFFFFFCU), tmp);

+      }

+      else

+      {

+        HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_FASTBYTE, Address, 0x00U);

+        HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_FASTBYTE, Address + 1U, 0x00U);

+      }

+      /* Process Locked */

+      __HAL_LOCK(&pFlash);

+    }

+#else /* Not Cat1*/

+    *(__IO uint16_t *)Address = Data;

+   

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+#endif /* STM32L100xB || STM32L151xB || STM32L152xB  */

+  }

+  /* Return the Write Status */

+  return status;

+}

+

+/**

+  * @brief  Programs a word at a specified address in data memory without erase.

+  * @param  Address specifies the address to be written.

+  * @param  Data specifies the data to be written.

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef FLASH_DATAEEPROM_ProgramWord(uint32_t Address, uint32_t Data)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+  

+  /* Check the parameters */

+  assert_param(IS_FLASH_DATA_ADDRESS(Address));

+  

+  /* Wait for last operation to be completed */

+  status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+    *(__IO uint32_t *)Address = Data;

+

+    /* Wait for last operation to be completed */

+    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  }

+  /* Return the Write Status */

+  return status;

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/** @addtogroup FLASH

+  * @{

+  */

+

+

+/** @addtogroup FLASH_Private_Functions

+ * @{

+ */

+

+/**

+  * @brief  Erases a specified page in program memory.

+  * @param  PageAddress The page address in program memory to be erased.

+  * @note   A Page is erased in the Program memory only if the address to load 

+  *         is the start address of a page (multiple of @ref FLASH_PAGE_SIZE bytes).

+  * @retval None

+  */

+void FLASH_PageErase(uint32_t PageAddress)

+{

+  /* Clean the error context */

+  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

+

+  /* Set the ERASE bit */

+  SET_BIT(FLASH->PECR, FLASH_PECR_ERASE);

+

+  /* Set PROG bit */

+  SET_BIT(FLASH->PECR, FLASH_PECR_PROG);

+

+  /* Write 00000000h to the first word of the program page to erase */

+  *(__IO uint32_t *)(uint32_t)(PageAddress & ~(FLASH_PAGE_SIZE - 1)) = 0x00000000;

+}

+  

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#endif /* HAL_FLASH_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ramfunc.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ramfunc.c
new file mode 100644
index 0000000..8566460
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_flash_ramfunc.c
@@ -0,0 +1,644 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_flash_ramfunc.c

+  * @author  MCD Application Team

+  * @brief   FLASH RAMFUNC driver.

+  *          This file provides a Flash firmware functions which should be 

+  *          executed from internal SRAM

+  *

+  *  @verbatim

+

+    *** ARM Compiler ***

+    --------------------

+    [..] RAM functions are defined using the toolchain options. 

+         Functions that are be executed in RAM should reside in a separate

+         source module. Using the 'Options for File' dialog you can simply change

+         the 'Code / Const' area of a module to a memory space in physical RAM.

+         Available memory areas are declared in the 'Target' tab of the 

+         Options for Target' dialog.

+

+    *** ICCARM Compiler ***

+    -----------------------

+    [..] RAM functions are defined using a specific toolchain keyword "__ramfunc".

+

+    *** GNU Compiler ***

+    --------------------

+    [..] RAM functions are defined using a specific toolchain attribute

+         "__attribute__((section(".RamFunc")))".

+

+@endverbatim

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+#ifdef HAL_FLASH_MODULE_ENABLED

+

+/** @addtogroup FLASH

+  * @{

+  */

+/** @addtogroup FLASH_Private_Variables

+ * @{

+ */

+extern FLASH_ProcessTypeDef pFlash;

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+  

+/** @defgroup FLASH_RAMFUNC FLASH_RAMFUNC

+  * @brief FLASH functions executed from RAM

+  * @{

+  */ 

+

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/* Private macro -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+/** @defgroup FLASH_RAMFUNC_Private_Functions FLASH RAM Private Functions

+ * @{

+ */

+

+static __RAM_FUNC HAL_StatusTypeDef FLASHRAM_WaitForLastOperation(uint32_t Timeout);

+static __RAM_FUNC HAL_StatusTypeDef FLASHRAM_SetErrorCode(void);

+

+/**

+  * @}

+  */

+

+/* Private functions ---------------------------------------------------------*/

+ 

+/** @defgroup FLASH_RAMFUNC_Exported_Functions FLASH RAM Exported Functions

+ *

+@verbatim  

+ ===============================================================================

+                      ##### ramfunc functions #####

+ ===============================================================================  

+    [..]

+    This subsection provides a set of functions that should be executed from RAM 

+    transfers.

+

+@endverbatim

+  * @{

+  */ 

+

+/** @defgroup FLASH_RAMFUNC_Exported_Functions_Group1 Peripheral features functions 

+  * @{

+  */  

+

+/**

+  * @brief  Enable  the power down mode during RUN mode.

+  * @note  This function can be used only when the user code is running from Internal SRAM.

+  * @retval HAL status

+  */

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EnableRunPowerDown(void)

+{

+  /* Enable the Power Down in Run mode*/

+  __HAL_FLASH_POWER_DOWN_ENABLE();

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Disable the power down mode during RUN mode.

+  * @note  This function can be used only when the user code is running from Internal SRAM.

+  * @retval HAL status

+  */

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DisableRunPowerDown(void)

+{

+  /* Disable the Power Down in Run mode*/

+  __HAL_FLASH_POWER_DOWN_DISABLE();

+

+  return HAL_OK;  

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASH_RAMFUNC_Exported_Functions_Group2 Programming and erasing operation functions 

+ *

+@verbatim  

+@endverbatim

+  * @{

+  */

+

+#if defined(FLASH_PECR_PARALLBANK)

+/**

+  * @brief  Erases a specified 2 pages in program memory in parallel.

+  * @note   This function can be used only for STM32L151xD, STM32L152xD), STM32L162xD and Cat5  devices.

+  *         To correctly run this function, the @ref HAL_FLASH_Unlock() function

+  *         must be called before.

+  *         Call the @ref HAL_FLASH_Lock() to disable the flash memory access 

+  *        (recommended to protect the FLASH memory against possible unwanted operation).

+  * @param  Page_Address1: The page address in program memory to be erased in 

+  *         the first Bank (BANK1). This parameter should be between FLASH_BASE

+  *         and FLASH_BANK1_END.

+  * @param  Page_Address2: The page address in program memory to be erased in 

+  *         the second Bank (BANK2). This parameter should be between FLASH_BANK2_BASE

+  *         and FLASH_BANK2_END.

+  * @note   A Page is erased in the Program memory only if the address to load 

+  *         is the start address of a page (multiple of @ref FLASH_PAGE_SIZE bytes).

+  * @retval HAL status

+  */

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EraseParallelPage(uint32_t Page_Address1, uint32_t Page_Address2)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+  /* Wait for last operation to be completed */

+  status = FLASHRAM_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+    /* Proceed to erase the page */

+    SET_BIT(FLASH->PECR, FLASH_PECR_PARALLBANK);

+    SET_BIT(FLASH->PECR, FLASH_PECR_ERASE);

+    SET_BIT(FLASH->PECR, FLASH_PECR_PROG);

+  

+    /* Write 00000000h to the first word of the first program page to erase */

+    *(__IO uint32_t *)Page_Address1 = 0x00000000U;

+    /* Write 00000000h to the first word of the second program page to erase */    

+    *(__IO uint32_t *)Page_Address2 = 0x00000000U;

+ 

+    /* Wait for last operation to be completed */

+    status = FLASHRAM_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+

+    /* If the erase operation is completed, disable the ERASE, PROG and PARALLBANK bits */

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_PROG);

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_ERASE);

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_PARALLBANK);

+  }     

+  /* Return the Erase Status */

+  return status;

+}

+

+/**

+  * @brief  Program 2 half pages in program memory in parallel (half page size is 32 Words).

+  * @note   This function can be used only for STM32L151xD, STM32L152xD), STM32L162xD and Cat5  devices.

+  * @param  Address1: specifies the first address to be written in the first bank 

+  *        (BANK1). This parameter should be between FLASH_BASE and (FLASH_BANK1_END - FLASH_PAGE_SIZE).

+  * @param  pBuffer1: pointer to the buffer  containing the data to be  written 

+  *         to the first half page in the first bank.

+  * @param  Address2: specifies the second address to be written in the second bank

+  *        (BANK2). This parameter should be between FLASH_BANK2_BASE and (FLASH_BANK2_END - FLASH_PAGE_SIZE).

+  * @param  pBuffer2: pointer to the buffer containing the data to be  written 

+  *         to the second half page in the second bank.

+  * @note   To correctly run this function, the @ref HAL_FLASH_Unlock() function

+  *         must be called before.

+  *         Call the @ref HAL_FLASH_Lock() to disable the flash memory access  

+  *         (recommended to protect the FLASH memory against possible unwanted operation).

+  * @note   Half page write is possible only from SRAM.

+  * @note   If there are more than 32 words to write, after 32 words another 

+  *         Half Page programming operation starts and has to be finished.

+  * @note   A half page is written to the program memory only if the first 

+  *         address to load is the start address of a half page (multiple of 128 

+  *         bytes) and the 31 remaining words to load are in the same half page.

+  * @note   During the Program memory half page write all read operations are 

+  *         forbidden (this includes DMA read operations and debugger read 

+  *         operations such as breakpoints, periodic updates, etc.).

+  * @note   If a PGAERR is set during a Program memory half page write, the 

+  *         complete write operation is aborted. Software should then reset the 

+  *         FPRG and PROG/DATA bits and restart the write operation from the 

+  *         beginning.

+  * @retval HAL status

+  */

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_ProgramParallelHalfPage(uint32_t Address1, uint32_t* pBuffer1, uint32_t Address2, uint32_t* pBuffer2)

+{

+  uint32_t primask_bit;

+  uint32_t count = 0U; 

+  HAL_StatusTypeDef status = HAL_OK;

+

+  /* Wait for last operation to be completed */

+  status = FLASHRAM_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+    /* Disable all IRQs */

+    primask_bit = __get_PRIMASK();

+    __disable_irq();

+    

+    /* Proceed to program the new half page */

+    SET_BIT(FLASH->PECR, FLASH_PECR_PARALLBANK);

+    SET_BIT(FLASH->PECR, FLASH_PECR_FPRG);

+    SET_BIT(FLASH->PECR, FLASH_PECR_PROG);

+

+    /* Write the first half page directly with 32 different words */

+    while(count < 32U)

+    {

+      *(__IO uint32_t*) ((uint32_t)(Address1 + (4 * count))) = *pBuffer1;

+      pBuffer1++;

+      count ++;  

+    }

+    

+    /* Write the second half page directly with 32 different words */

+    count = 0U;

+    while(count < 32U)

+    {

+      *(__IO uint32_t*) ((uint32_t)(Address2 + (4 * count))) = *pBuffer2;

+      pBuffer2++;

+      count ++;  

+    }

+    

+    /* Wait for last operation to be completed */

+    status = FLASHRAM_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+    

+    /* if the write operation is completed, disable the PROG, FPRG and PARALLBANK bits */

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_PROG);

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_FPRG);

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_PARALLBANK);

+

+    /* Enable IRQs */

+    __set_PRIMASK(primask_bit);    

+  }

+

+  /* Return the Write Status */

+  return status;

+}

+#endif /* FLASH_PECR_PARALLBANK */

+

+/**

+  * @brief  Program a half page in program memory.

+  * @param  Address specifies the address to be written.

+  * @param  pBuffer pointer to the buffer  containing the data to be  written to 

+  *         the half page.

+  * @note   To correctly run this function, the @ref HAL_FLASH_Unlock() function

+  *         must be called before.

+  *         Call the @ref HAL_FLASH_Lock() to disable the flash memory access  

+  *         (recommended to protect the FLASH memory against possible unwanted operation)

+  * @note   Half page write is possible only from SRAM.

+  * @note   If there are more than 32 words to write, after 32 words another 

+  *         Half Page programming operation starts and has to be finished.

+  * @note   A half page is written to the program memory only if the first 

+  *         address to load is the start address of a half page (multiple of 128 

+  *         bytes) and the 31 remaining words to load are in the same half page.

+  * @note   During the Program memory half page write all read operations are 

+  *         forbidden (this includes DMA read operations and debugger read 

+  *         operations such as breakpoints, periodic updates, etc.).

+  * @note   If a PGAERR is set during a Program memory half page write, the 

+  *         complete write operation is aborted. Software should then reset the 

+  *         FPRG and PROG/DATA bits and restart the write operation from the 

+  *         beginning.

+  * @retval HAL status

+  */

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_HalfPageProgram(uint32_t Address, uint32_t* pBuffer)

+{

+  uint32_t primask_bit;

+  uint32_t count = 0U; 

+  HAL_StatusTypeDef status = HAL_OK;

+

+  /* Wait for last operation to be completed */

+  status = FLASHRAM_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+    /* Disable all IRQs */

+    primask_bit = __get_PRIMASK();

+    __disable_irq();

+

+    /* Proceed to program the new half page */

+    SET_BIT(FLASH->PECR, FLASH_PECR_FPRG);

+    SET_BIT(FLASH->PECR, FLASH_PECR_PROG);

+    

+    /* Write one half page directly with 32 different words */

+    while(count < 32U)

+    {

+      *(__IO uint32_t*) ((uint32_t)(Address + (4 * count))) = *pBuffer;

+      pBuffer++;

+      count ++;  

+    }

+

+    /* Wait for last operation to be completed */

+    status = FLASHRAM_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+ 

+    /* If the write operation is completed, disable the PROG and FPRG bits */

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_PROG);

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_FPRG);

+

+    /* Enable IRQs */

+    __set_PRIMASK(primask_bit);

+  }

+   

+  /* Return the Write Status */

+  return status;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASH_RAMFUNC_Exported_Functions_Group3 Peripheral errors functions 

+ *  @brief    Peripheral errors functions 

+ *

+@verbatim   

+ ===============================================================================

+                      ##### Peripheral errors functions #####

+ ===============================================================================  

+    [..]

+    This subsection permit to get in run-time errors of  the FLASH peripheral.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Get the specific FLASH errors flag.

+  * @param  Error pointer is the error value. It can be a mixed of:

+@if STM32L100xB

+@elif STM32L100xBA

+  *            @arg @ref HAL_FLASH_ERROR_RD      FLASH Read Protection error flag (PCROP)

+@elif STM32L151xB

+@elif STM32L151xBA

+  *            @arg @ref HAL_FLASH_ERROR_RD      FLASH Read Protection error flag (PCROP)

+@elif STM32L152xB

+@elif STM32L152xBA

+  *            @arg @ref HAL_FLASH_ERROR_RD      FLASH Read Protection error flag (PCROP)

+@elif STM32L100xC

+  *            @arg @ref HAL_FLASH_ERROR_RD      FLASH Read Protection error flag (PCROP)

+  *            @arg @ref HAL_FLASH_ERROR_OPTVUSR FLASH Option User validity error

+@elif STM32L151xC

+  *            @arg @ref HAL_FLASH_ERROR_RD      FLASH Read Protection error flag (PCROP)

+  *            @arg @ref HAL_FLASH_ERROR_OPTVUSR FLASH Option User validity error

+@elif STM32L152xC

+  *            @arg @ref HAL_FLASH_ERROR_RD      FLASH Read Protection error flag (PCROP)

+  *            @arg @ref HAL_FLASH_ERROR_OPTVUSR FLASH Option User validity error

+@elif STM32L162xC

+  *            @arg @ref HAL_FLASH_ERROR_RD      FLASH Read Protection error flag (PCROP)

+  *            @arg @ref HAL_FLASH_ERROR_OPTVUSR FLASH Option User validity error

+@else

+  *            @arg @ref HAL_FLASH_ERROR_OPTVUSR FLASH Option User validity error

+@endif

+  *            @arg @ref HAL_FLASH_ERROR_PGA     FLASH Programming Alignment error flag

+  *            @arg @ref HAL_FLASH_ERROR_WRP     FLASH Write protected error flag

+  *            @arg @ref HAL_FLASH_ERROR_OPTV    FLASH Option valid error flag 

+  * @retval HAL Status

+  */

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_GetError(uint32_t * Error)

+{ 

+  *Error = pFlash.ErrorCode;

+  return HAL_OK;  

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup FLASH_RAMFUNC_Exported_Functions_Group4 DATA EEPROM functions

+  *

+  * @{

+  */

+

+/**

+  * @brief  Erase a double word in data memory.

+  * @param  Address specifies the address to be erased.

+  * @note   To correctly run this function, the HAL_FLASH_EEPROM_Unlock() function

+  *         must be called before.

+  *         Call the HAL_FLASH_EEPROM_Lock() to he data EEPROM access

+  *         and Flash program erase control register access(recommended to protect 

+  *         the DATA_EEPROM against possible unwanted operation).

+  * @note   Data memory double word erase is possible only from SRAM.

+  * @note   A double word is erased to the data memory only if the first address 

+  *         to load is the start address of a double word (multiple of 8 bytes).

+  * @note   During the Data memory double word erase, all read operations are 

+  *         forbidden (this includes DMA read operations and debugger read 

+  *         operations such as breakpoints, periodic updates, etc.).

+  * @retval HAL status

+  */

+

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_EraseDoubleWord(uint32_t Address)

+{

+  uint32_t primask_bit;

+  HAL_StatusTypeDef status = HAL_OK;

+  

+  /* Wait for last operation to be completed */

+  status = FLASHRAM_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+    /* Disable all IRQs */

+    primask_bit = __get_PRIMASK();

+    __disable_irq();

+

+    /* If the previous operation is completed, proceed to erase the next double word */

+    /* Set the ERASE bit */

+    SET_BIT(FLASH->PECR, FLASH_PECR_ERASE);

+

+    /* Set DATA bit */

+    SET_BIT(FLASH->PECR, FLASH_PECR_DATA);

+   

+    /* Write 00000000h to the 2 words to erase */

+    *(__IO uint32_t *)Address = 0x00000000U;

+    Address += 4U;

+    *(__IO uint32_t *)Address = 0x00000000U;

+   

+    /* Wait for last operation to be completed */

+    status = FLASHRAM_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+    

+    /* If the erase operation is completed, disable the ERASE and DATA bits */

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_ERASE);

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_DATA);

+

+    /* Enable IRQs */

+    __set_PRIMASK(primask_bit);

+ 

+  }  

+      

+  /* Return the erase status */

+  return status;

+}

+

+/**

+  * @brief  Write a double word in data memory without erase.

+  * @param  Address specifies the address to be written.

+  * @param  Data specifies the data to be written.

+  * @note   To correctly run this function, the HAL_FLASH_EEPROM_Unlock() function

+  *         must be called before.

+  *         Call the HAL_FLASH_EEPROM_Lock() to he data EEPROM access

+  *         and Flash program erase control register access(recommended to protect 

+  *         the DATA_EEPROM against possible unwanted operation).

+  * @note   Data memory double word write is possible only from SRAM.

+  * @note   A data memory double word is written to the data memory only if the 

+  *         first address to load is the start address of a double word (multiple 

+  *         of double word).

+  * @note   During the Data memory double word write, all read operations are 

+  *         forbidden (this includes DMA read operations and debugger read 

+  *         operations such as breakpoints, periodic updates, etc.).

+  * @retval HAL status

+  */ 

+__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_ProgramDoubleWord(uint32_t Address, uint64_t Data)

+{

+  uint32_t primask_bit;

+  HAL_StatusTypeDef status = HAL_OK;

+

+  /* Wait for last operation to be completed */

+  status = FLASHRAM_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+  

+  if(status == HAL_OK)

+  {

+    /* Disable all IRQs */

+    primask_bit = __get_PRIMASK();

+    __disable_irq();

+

+    /* If the previous operation is completed, proceed to program the new data*/

+    SET_BIT(FLASH->PECR, FLASH_PECR_FPRG);

+    SET_BIT(FLASH->PECR, FLASH_PECR_DATA);

+    

+    /* Write the 2 words */  

+     *(__IO uint32_t *)Address = (uint32_t) Data;

+     Address += 4U;

+     *(__IO uint32_t *)Address = (uint32_t) (Data >> 32);

+     

+    /* Wait for last operation to be completed */

+    status = FLASHRAM_WaitForLastOperation(FLASH_TIMEOUT_VALUE);

+    

+    /* If the write operation is completed, disable the FPRG and DATA bits */

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_FPRG);

+    CLEAR_BIT(FLASH->PECR, FLASH_PECR_DATA);     

+

+    /* Enable IRQs */

+    __set_PRIMASK(primask_bit);

+  }

+      

+  /* Return the Write Status */

+  return status;

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/** @addtogroup FLASH_RAMFUNC_Private_Functions

+  * @{

+  */ 

+

+/**

+  * @brief  Set the specific FLASH error flag.

+  * @retval HAL Status

+  */

+static __RAM_FUNC HAL_StatusTypeDef FLASHRAM_SetErrorCode(void)

+{

+  uint32_t flags = 0U;

+  

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR))

+  {

+    pFlash.ErrorCode |= HAL_FLASH_ERROR_WRP;

+    flags |= FLASH_FLAG_WRPERR;

+  }

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR))

+  {

+    pFlash.ErrorCode |= HAL_FLASH_ERROR_PGA;

+    flags |= FLASH_FLAG_PGAERR;

+  }

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR))

+  {

+    pFlash.ErrorCode |= HAL_FLASH_ERROR_OPTV;

+    flags |= FLASH_FLAG_OPTVERR;

+  }

+

+#if defined(FLASH_SR_RDERR)

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR))

+  {

+    pFlash.ErrorCode |= HAL_FLASH_ERROR_RD;

+    flags |= FLASH_FLAG_RDERR;

+  }

+#endif /* FLASH_SR_RDERR */

+#if defined(FLASH_SR_OPTVERRUSR)

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERRUSR))

+  {

+    pFlash.ErrorCode |= HAL_FLASH_ERROR_OPTVUSR;

+    flags |= FLASH_FLAG_OPTVERRUSR;

+  }

+#endif /* FLASH_SR_OPTVERRUSR */

+

+  /* Clear FLASH error pending bits */

+  __HAL_FLASH_CLEAR_FLAG(flags);

+

+  return HAL_OK;

+}  

+

+/**

+  * @brief  Wait for a FLASH operation to complete.

+  * @param  Timeout maximum flash operationtimeout

+  * @retval HAL status

+  */

+static __RAM_FUNC HAL_StatusTypeDef FLASHRAM_WaitForLastOperation(uint32_t Timeout)

+{ 

+    /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.

+       Even if the FLASH operation fails, the BUSY flag will be reset and an error

+       flag will be set */

+       

+    while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY) && (Timeout != 0x00U)) 

+    { 

+      Timeout--;

+    }

+    

+    if(Timeout == 0x00U)

+    {

+      return HAL_TIMEOUT;

+    }

+    

+  /* Check FLASH End of Operation flag  */

+  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP))

+  {

+    /* Clear FLASH End of Operation pending bit */

+    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);

+  }

+  

+  if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR)  || 

+     __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR) || 

+#if defined(FLASH_SR_RDERR)

+      __HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR) || 

+#endif /* FLASH_SR_RDERR */

+#if defined(FLASH_SR_OPTVERRUSR)

+      __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERRUSR) || 

+#endif /* FLASH_SR_OPTVERRUSR */

+     __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR))

+  {

+    /*Save the error code*/

+    FLASHRAM_SetErrorCode();

+    return HAL_ERROR;

+  }

+

+  /* There is no error flag set */

+  return HAL_OK;

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#endif /* HAL_FLASH_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+     

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_gpio.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_gpio.c
new file mode 100644
index 0000000..8a72e80
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_gpio.c
@@ -0,0 +1,552 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_gpio.c

+  * @author  MCD Application Team

+  * @brief   GPIO HAL module driver.

+  *          This file provides firmware functions to manage the following 

+  *          functionalities of the General Purpose Input/Output (GPIO) peripheral:

+  *           + Initialization and de-initialization functions

+  *           + IO operation functions

+  *         

+  @verbatim

+  ==============================================================================

+                    ##### GPIO Peripheral features #####

+  ==============================================================================         

+  [..] 

+  Each port bit of the general-purpose I/O (GPIO) ports can be individually 

+  configured by software in several modes:

+  (+) Input mode 

+  (+) Analog mode

+  (+) Output mode

+  (+) Alternate function mode

+  (+) External interrupt/event lines

+ 

+  [..]  

+  During and just after reset, the alternate functions and external interrupt  

+  lines are not active and the I/O ports are configured in input floating mode.

+  

+  [..]   

+  All GPIO pins have weak internal pull-up and pull-down resistors, which can be 

+  activated or not.

+

+  [..]

+  In Output or Alternate mode, each IO can be configured on open-drain or push-pull

+  type and the IO speed can be selected depending on the VDD value.

+  

+  [..]

+  The microcontroller IO pins are connected to onboard peripherals/modules through a 

+  multiplexer that allows only one peripheral s alternate function (AF) connected 

+  to an IO pin at a time. In this way, there can be no conflict between peripherals 

+  sharing the same IO pin. 

+  

+  [..]  

+  All ports have external interrupt/event capability. To use external interrupt 

+  lines, the port must be configured in input mode. All available GPIO pins are 

+  connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.

+  

+  [..]  

+  The external interrupt/event controller consists of up to 28 edge detectors 

+  (depending on products 16 lines are connected to GPIO) for generating event/interrupt

+  requests (each input line can be independently configured to select the type 

+  (interrupt or event) and the corresponding trigger event (rising or falling or both). 

+  Each line can also be masked independently. 

+   

+            ##### How to use this driver #####

+  ==============================================================================  

+  [..]

+   (#) Enable the GPIO AHB clock using the following function : __GPIOx_CLK_ENABLE(). 

+                                    

+   (#) Configure the GPIO pin(s) using HAL_GPIO_Init().

+       (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure

+       (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef 

+            structure.

+       (++) In case of Output or alternate function mode selection: the speed is 

+            configured through "Speed" member from GPIO_InitTypeDef structure, 

+            the speed is configurable: Low, Medium and High.

+       (++) If alternate mode is selected, the alternate function connected to the IO

+            is configured through "Alternate" member from GPIO_InitTypeDef structure

+       (++) Analog mode is required when a pin is to be used as ADC channel 

+            or DAC output.

+       (++) In case of external interrupt/event selection the "Mode" member from 

+            GPIO_InitTypeDef structure select the type (interrupt or event) and 

+            the corresponding trigger event (rising or falling or both).

+  

+   (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority 

+       mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using

+       HAL_NVIC_EnableIRQ().

+  

+   (#) HAL_GPIO_DeInit allows to set register values to their reset value. It's also 

+       recommended to use it to unconfigure pin which was used as an external interrupt 

+       or in event mode. That's the only way to reset corresponding bit in EXTI & SYSCFG 

+       registers.

+  

+   (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().

+  

+   (#) To set/reset the level of a pin configured in output mode use 

+       HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().

+  

+   (#) To lock pin configuration until next reset use HAL_GPIO_LockPin().

+  

+   (#) During and just after reset, the alternate functions are not 

+       active and the GPIO pins are configured in input floating mode (except JTAG

+       pins).

+  

+   (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose 

+       (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has 

+       priority over the GPIO function.

+  

+   (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as 

+       general purpose PH0 and PH1, respectively, when the HSE oscillator is off. 

+       The HSE has priority over the GPIO function.

+  

+  @endverbatim

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************  

+  */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @addtogroup GPIO

+  * @brief GPIO HAL module driver

+  * @{

+  */

+

+#ifdef HAL_GPIO_MODULE_ENABLED

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/** @addtogroup GPIO_Private_Constants

+  * @{

+  */

+#define GPIO_MODE             (0x00000003U)

+#define EXTI_MODE             (0x10000000U)

+#define GPIO_MODE_IT          (0x00010000U)

+#define GPIO_MODE_EVT         (0x00020000U)

+#define RISING_EDGE           (0x00100000U)

+#define FALLING_EDGE          (0x00200000U)

+#define GPIO_OUTPUT_TYPE      (0x00000010U)

+

+#define GPIO_NUMBER           (16U)

+ 

+/**

+  * @}

+  */

+  

+/* Private macro -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+/* Exported functions ---------------------------------------------------------*/

+

+/** @addtogroup GPIO_Exported_Functions

+  * @{

+  */

+

+/** @addtogroup GPIO_Exported_Functions_Group1

+ *  @brief    Initialization and Configuration functions 

+ *

+@verbatim    

+ ===============================================================================

+              ##### Initialization and Configuration functions #####

+ ===============================================================================

+ 

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Initializes the GPIOx peripheral according to the specified parameters in the GPIO_Init.

+  * @param  GPIOx where x can be (A..G depending on device used) to select the GPIO peripheral for STM32L1XX family devices

+  * @param  GPIO_Init pointer to a GPIO_InitTypeDef structure that contains

+  *         the configuration information for the specified GPIO peripheral.

+  * @retval None

+  */

+void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init)

+{ 

+  uint32_t position = 0x00;

+  uint32_t iocurrent = 0x00;

+  uint32_t temp = 0x00;

+

+  /* Check the parameters */

+  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));

+  assert_param(IS_GPIO_PIN(GPIO_Init->Pin));

+  assert_param(IS_GPIO_MODE(GPIO_Init->Mode));

+  assert_param(IS_GPIO_PULL(GPIO_Init->Pull)); 

+

+  /* Configure the port pins */

+  while (((GPIO_Init->Pin) >> position) != 0)

+  {

+    /* Get current io position */

+    iocurrent = (GPIO_Init->Pin) & (1U << position);

+    

+    if(iocurrent)

+    {

+      /*--------------------- GPIO Mode Configuration ------------------------*/

+      /* In case of Alternate function mode selection */

+      if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD)) 

+      {

+        /* Check the Alternate function parameters */

+        assert_param(IS_GPIO_AF_INSTANCE(GPIOx));

+        assert_param(IS_GPIO_AF(GPIO_Init->Alternate));

+        

+        /* Configure Alternate function mapped with the current IO */ 

+        /* Identify AFRL or AFRH register based on IO position*/

+        temp = GPIOx->AFR[position >> 3];

+        CLEAR_BIT(temp, 0xFU << ((uint32_t)(position & 0x07U) * 4)) ;      

+        SET_BIT(temp, (uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & 0x07U) * 4));       

+        GPIOx->AFR[position >> 3] = temp;

+      }

+

+      /* Configure IO Direction mode (Input, Output, Alternate or Analog) */

+      temp = GPIOx->MODER;

+      CLEAR_BIT(temp, GPIO_MODER_MODER0 << (position * 2));   

+      SET_BIT(temp, (GPIO_Init->Mode & GPIO_MODE) << (position * 2));

+      GPIOx->MODER = temp;

+

+      /* In case of Output or Alternate function mode selection */

+      if ((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) ||

+          (GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))

+      {

+        /* Check the Speed parameter */

+        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));

+        /* Configure the IO Speed */

+        temp = GPIOx->OSPEEDR; 

+        CLEAR_BIT(temp, GPIO_OSPEEDER_OSPEEDR0 << (position * 2));

+        SET_BIT(temp, GPIO_Init->Speed << (position * 2));

+        GPIOx->OSPEEDR = temp;

+

+        /* Configure the IO Output Type */

+        temp = GPIOx->OTYPER;

+        CLEAR_BIT(temp, GPIO_OTYPER_OT_0 << position) ;

+        SET_BIT(temp, ((GPIO_Init->Mode & GPIO_OUTPUT_TYPE) >> 4) << position);

+        GPIOx->OTYPER = temp;

+      }

+

+      /* Activate the Pull-up or Pull down resistor for the current IO */

+      temp = GPIOx->PUPDR;

+      CLEAR_BIT(temp, GPIO_PUPDR_PUPDR0 << (position * 2));

+      SET_BIT(temp, (GPIO_Init->Pull) << (position * 2));

+      GPIOx->PUPDR = temp;

+

+      /*--------------------- EXTI Mode Configuration ------------------------*/

+      /* Configure the External Interrupt or event for the current IO */

+      if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) 

+      {

+        /* Enable SYSCFG Clock */

+        __HAL_RCC_SYSCFG_CLK_ENABLE();

+        

+        temp = SYSCFG->EXTICR[position >> 2];

+        CLEAR_BIT(temp, (0x0FU) << (4 * (position & 0x03)));

+        SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03)));

+        SYSCFG->EXTICR[position >> 2] = temp;

+                  

+        /* Clear EXTI line configuration */

+        temp = EXTI->IMR;

+        CLEAR_BIT(temp, (uint32_t)iocurrent);

+        if((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT)

+        {

+          SET_BIT(temp, iocurrent); 

+        }

+        EXTI->IMR = temp;

+

+        temp = EXTI->EMR;

+        CLEAR_BIT(temp, (uint32_t)iocurrent);      

+        if((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT)

+        {

+          SET_BIT(temp, iocurrent); 

+        }

+        EXTI->EMR = temp;

+  

+        /* Clear Rising Falling edge configuration */

+        temp = EXTI->RTSR;

+        CLEAR_BIT(temp, (uint32_t)iocurrent); 

+        if((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE)

+        {

+          SET_BIT(temp, iocurrent); 

+        }

+        EXTI->RTSR = temp;

+

+        temp = EXTI->FTSR;

+        CLEAR_BIT(temp, (uint32_t)iocurrent); 

+        if((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE)

+        {

+          SET_BIT(temp, iocurrent); 

+        }

+        EXTI->FTSR = temp;

+      }

+    }

+    

+    position++;

+  } 

+}

+

+/**

+  * @brief  De-initializes the GPIOx peripheral registers to their default reset values.

+  * @param  GPIOx where x can be (A..G depending on device used) to select the GPIO peripheral for STM32L1XX family devices

+  * @param  GPIO_Pin specifies the port bit to be written.

+  *         This parameter can be one of GPIO_PIN_x where x can be (0..15).

+  * @retval None

+  */

+void HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin)

+{

+  uint32_t position = 0x00;

+  uint32_t iocurrent = 0x00;

+  uint32_t tmp = 0x00;

+

+  /* Check the parameters */

+  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));

+  assert_param(IS_GPIO_PIN(GPIO_Pin));

+

+  /* Configure the port pins */

+  while ((GPIO_Pin >> position) != 0)

+  {

+    /* Get current io position */

+    iocurrent = (GPIO_Pin) & (1U << position);

+

+    if (iocurrent)

+    {

+      /*------------------------- EXTI Mode Configuration --------------------*/

+      /* Clear the External Interrupt or Event for the current IO */

+      

+      tmp = SYSCFG->EXTICR[position >> 2];

+      tmp &= ((0x0FU) << (4 * (position & 0x03)));

+      if(tmp == (GPIO_GET_INDEX(GPIOx) << (4 * (position & 0x03))))

+      {

+        tmp = (0x0FU) << (4 * (position & 0x03));

+        CLEAR_BIT(SYSCFG->EXTICR[position >> 2], tmp);

+        

+        /* Clear EXTI line configuration */

+        CLEAR_BIT(EXTI->IMR, (uint32_t)iocurrent);

+        CLEAR_BIT(EXTI->EMR, (uint32_t)iocurrent);

+        

+        /* Clear Rising Falling edge configuration */

+        CLEAR_BIT(EXTI->RTSR, (uint32_t)iocurrent);

+        CLEAR_BIT(EXTI->FTSR, (uint32_t)iocurrent);

+      }

+

+      /*------------------------- GPIO Mode Configuration --------------------*/

+      /* Configure IO Direction in Input Floting Mode */

+      CLEAR_BIT(GPIOx->MODER, GPIO_MODER_MODER0 << (position * 2)); 

+  

+      /* Configure the default Alternate Function in current IO */ 

+      CLEAR_BIT(GPIOx->AFR[position >> 3], 0xFU << ((uint32_t)(position & 0x07U) * 4)) ;

+  

+      /* Configure the default value for IO Speed */

+      CLEAR_BIT(GPIOx->OSPEEDR, GPIO_OSPEEDER_OSPEEDR0 << (position * 2));

+                  

+      /* Configure the default value IO Output Type */

+      CLEAR_BIT(GPIOx->OTYPER, GPIO_OTYPER_OT_0 << position) ;

+  

+      /* Deactivate the Pull-up oand Pull-down resistor for the current IO */

+      CLEAR_BIT(GPIOx->PUPDR, GPIO_PUPDR_PUPDR0 << (position * 2));

+    }

+

+    position++;

+  }

+}

+

+/**

+  * @}

+  */

+

+/** @addtogroup GPIO_Exported_Functions_Group2

+ *  @brief GPIO Read, Write, Toggle, Lock and EXTI management functions.

+ *

+@verbatim   

+ ===============================================================================

+                       ##### IO operation functions #####

+ ===============================================================================  

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Reads the specified input port pin.

+  * @param  GPIOx where x can be (A..G depending on device used) to select the GPIO peripheral for STM32L1XX family devices 

+  * @param  GPIO_Pin specifies the port bit to read.

+  *         This parameter can be GPIO_PIN_x where x can be (0..15).

+  * @retval The input port pin value.

+  */

+GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

+{

+  GPIO_PinState bitstatus;

+

+  /* Check the parameters */

+  assert_param(IS_GPIO_PIN(GPIO_Pin));

+

+  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET)

+  {

+    bitstatus = GPIO_PIN_SET;

+  }

+  else

+  {

+    bitstatus = GPIO_PIN_RESET;

+  }

+  return bitstatus;

+}

+

+/**

+  * @brief  Sets or clears the selected data port bit.

+  * @note   This function uses GPIOx_BSRR register to allow atomic read/modify 

+  *         accesses. In this way, there is no risk of an IRQ occurring between

+  *         the read and the modify access.

+  * @param  GPIOx where x can be (A..G depending on device used) to select the GPIO peripheral for STM32L1XX family devices

+  * @param  GPIO_Pin specifies the port bit to be written.

+  *          This parameter can be one of GPIO_PIN_x where x can be (0..15).

+  * @param  PinState specifies the value to be written to the selected bit.

+  *          This parameter can be one of the GPIO_PinState enum values:

+  *            @arg GPIO_PIN_RESET: to clear the port pin

+  *            @arg GPIO_PIN_SET: to set the port pin

+  * @retval None

+  */

+void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

+{

+  /* Check the parameters */

+  assert_param(IS_GPIO_PIN(GPIO_Pin));

+  assert_param(IS_GPIO_PIN_ACTION(PinState));

+

+  if (PinState != GPIO_PIN_RESET)

+  {

+    GPIOx->BSRR = (uint32_t)GPIO_Pin;

+  }

+  else

+  {

+    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16 ;

+  }

+}

+  

+/**

+  * @brief  Toggles the specified GPIO pin

+  * @param  GPIOx where x can be (A..G depending on device used) to select the GPIO peripheral for STM32L1XX family devices 

+  * @param  GPIO_Pin specifies the pins to be toggled.

+  * @retval None

+  */

+void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

+{

+  /* Check the parameters */

+  assert_param(IS_GPIO_PIN(GPIO_Pin));

+

+  if ((GPIOx->ODR & GPIO_Pin) != 0x00u)

+  {

+    GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;

+  }

+  else

+  {

+    GPIOx->BSRR = (uint32_t)GPIO_Pin;

+  }

+}

+

+/**

+* @brief  Locks GPIO Pins configuration registers.

+* @note   The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR,

+*         GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH.

+* @note   The configuration of the locked GPIO pins can no longer be modified

+*         until the next reset.

+* @note   Limitation concerning GPIOx_OTYPER: Locking of GPIOx_OTYPER[i] with i = 15..8

+*         depends from setting of GPIOx_LCKR[i-8] and not from GPIOx_LCKR[i].

+*         GPIOx_LCKR[i-8] is locking GPIOx_OTYPER[i] together with GPIOx_OTYPER[i-8].

+*         It is not possible to lock GPIOx_OTYPER[i] with i = 15..8, without locking also

+*         GPIOx_OTYPER[i-8].

+*         Workaround: When calling HAL_GPIO_LockPin with GPIO_Pin from GPIO_PIN_8 to GPIO_PIN_15,

+*         you must call also HAL_GPIO_LockPin with GPIO_Pin - 8. 

+*         (When locking a pin from GPIO_PIN_8 to GPIO_PIN_15, you must lock also the corresponding 

+*         GPIO_PIN_0 to GPIO_PIN_7).

+* @param  GPIOx where x can be (A..G depending on device used) to select the GPIO peripheral for STM32L1XX family devices 

+* @param  GPIO_Pin Specifies the port bit to be locked.

+*         This parameter can be any combination of GPIO_Pin_x where x can be (0..15).

+* @retval None

+*/

+HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

+{

+  __IO uint32_t tmp = GPIO_LCKR_LCKK;

+

+  /* Check the parameters */

+  assert_param(IS_GPIO_LOCK_INSTANCE(GPIOx));

+  assert_param(IS_GPIO_PIN(GPIO_Pin));

+

+  /* Apply lock key write sequence */

+  SET_BIT(tmp, GPIO_Pin);

+  /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */

+  GPIOx->LCKR = tmp;

+  /* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */

+  GPIOx->LCKR = GPIO_Pin;

+  /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */

+  GPIOx->LCKR = tmp;

+  /* Read LCKK register. This read is mandatory to complete key lock sequence */

+  tmp = GPIOx->LCKR;

+

+  /* Read again in order to confirm lock is active */

+  if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)

+  {

+    return HAL_OK;

+  }

+  else

+  {

+    return HAL_ERROR;

+  }

+}

+

+/**

+  * @brief  This function handles EXTI interrupt request.

+  * @param  GPIO_Pin Specifies the port pin connected to corresponding EXTI line.

+  * @retval None

+  */

+void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)

+{

+  /* EXTI line interrupt detected */

+  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) 

+  { 

+    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);

+    HAL_GPIO_EXTI_Callback(GPIO_Pin);

+  }

+}

+

+/**

+  * @brief  EXTI line detection callbacks.

+  * @param  GPIO_Pin Specifies the port pin connected to corresponding EXTI line.

+  * @retval None

+  */

+__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(GPIO_Pin);

+

+  /* NOTE : This function Should not be modified, when the callback is needed,

+            the HAL_GPIO_EXTI_Callback could be implemented in the user file

+   */ 

+}

+

+/**

+  * @}

+  */

+

+

+/**

+  * @}

+  */

+

+#endif /* HAL_GPIO_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr.c
new file mode 100644
index 0000000..dd0d058
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr.c
@@ -0,0 +1,650 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_pwr.c

+  * @author  MCD Application Team

+  * @brief   PWR HAL module driver.

+  *

+  *          This file provides firmware functions to manage the following

+  *          functionalities of the Power Controller (PWR) peripheral:

+  *           + Initialization/de-initialization functions

+  *           + Peripheral Control functions

+  *

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @defgroup PWR PWR

+  * @brief    PWR HAL module driver

+  * @{

+  */

+

+#ifdef HAL_PWR_MODULE_ENABLED

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+#define PVD_MODE_IT               (0x00010000U)

+#define PVD_MODE_EVT              (0x00020000U)

+#define PVD_RISING_EDGE           (0x00000001U)

+#define PVD_FALLING_EDGE          (0x00000002U)

+

+/* Private macro -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+/* Private functions ---------------------------------------------------------*/

+

+/** @defgroup PWR_Exported_Functions PWR Exported Functions

+  * @{

+  */

+

+/** @defgroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions

+  *  @brief   Initialization and de-initialization functions

+  *

+@verbatim

+ ===============================================================================

+              ##### Initialization and de-initialization functions #####

+ ===============================================================================

+    [..]

+      After reset, the backup domain (RTC registers, RTC backup data

+      registers) is protected against possible unwanted

+      write accesses.

+      To enable access to the RTC Domain and RTC registers, proceed as follows:

+        (+) Enable the Power Controller (PWR) APB1 interface clock using the

+            __HAL_RCC_PWR_CLK_ENABLE() macro.

+        (+) Enable access to RTC domain using the HAL_PWR_EnableBkUpAccess() function.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Deinitializes the PWR peripheral registers to their default reset values.

+  * @note   Before calling this function, the VOS[1:0] bits should be configured

+  *         to "10" and the system frequency has to be configured accordingly.

+  *         To configure the VOS[1:0] bits, use the PWR_VoltageScalingConfig()

+  *         function.

+  * @note   ULP and FWU bits are not reset by this function.

+  * @retval None

+  */

+void HAL_PWR_DeInit(void)

+{

+  __HAL_RCC_PWR_FORCE_RESET();

+  __HAL_RCC_PWR_RELEASE_RESET();

+}

+

+/**

+  * @brief  Enables access to the backup domain (RTC registers, RTC

+  *         backup data registers ).

+  * @note   If the HSE divided by 2, 4, 8 or 16 is used as the RTC clock, the

+  *         Backup Domain Access should be kept enabled.

+  * @retval None

+  */

+void HAL_PWR_EnableBkUpAccess(void)

+{

+  /* Enable access to RTC and backup registers */

+  *(__IO uint32_t *) CR_DBP_BB = (uint32_t)ENABLE;

+}

+

+/**

+  * @brief  Disables access to the backup domain (RTC registers, RTC

+  *         backup data registers).

+  * @note   If the HSE divided by 2, 4, 8 or 16 is used as the RTC clock, the

+  *         Backup Domain Access should be kept enabled.

+  * @retval None

+  */

+void HAL_PWR_DisableBkUpAccess(void)

+{

+  /* Disable access to RTC and backup registers */

+  *(__IO uint32_t *) CR_DBP_BB = (uint32_t)DISABLE;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control functions

+  * @brief    Low Power modes configuration functions

+  *

+@verbatim

+

+ ===============================================================================

+                 ##### Peripheral Control functions #####

+ ===============================================================================

+

+    *** PVD configuration ***

+    =========================

+    [..]

+      (+) The PVD is used to monitor the VDD power supply by comparing it to a

+          threshold selected by the PVD Level (PLS[2:0] bits in the PWR_CR).

+      (+) The PVD can use an external input analog voltage (PVD_IN) which is compared

+      internally to VREFINT. The PVD_IN (PB7) has to be configured in Analog mode

+      when PWR_PVDLevel_7 is selected (PLS[2:0] = 111).

+

+      (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower

+          than the PVD threshold. This event is internally connected to the EXTI

+          line16 and can generate an interrupt if enabled. This is done through

+          __HAL_PWR_PVD_EXTI_ENABLE_IT() macro.

+      (+) The PVD is stopped in Standby mode.

+

+    *** WakeUp pin configuration ***

+    ================================

+    [..]

+      (+) WakeUp pin is used to wake up the system from Standby mode. This pin is

+          forced in input pull-down configuration and is active on rising edges.

+      (+) There are two or three WakeUp pins:

+          WakeUp Pin 1 on PA.00.

+          WakeUp Pin 2 on PC.13.

+          WakeUp Pin 3 on PE.06. : Only on product with GPIOE available

+

+    [..]

+    *** Main and Backup Regulators configuration ***

+    ================================================

+

+      (+) The main internal regulator can be configured to have a tradeoff between

+          performance and power consumption when the device does not operate at

+          the maximum frequency. This is done through __HAL_PWR_VOLTAGESCALING_CONFIG()

+          macro which configure VOS bit in PWR_CR register:

+        (++) When this bit is set (Regulator voltage output Scale 1 mode selected)

+             the System frequency can go up to 32 MHz.

+        (++) When this bit is reset (Regulator voltage output Scale 2 mode selected)

+             the System frequency can go up to 16 MHz.

+        (++) When this bit is reset (Regulator voltage output Scale 3 mode selected)

+             the System frequency can go up to 4.2 MHz.

+

+        Refer to the datasheets for more details.

+

+    *** Low Power modes configuration ***

+    =====================================

+     [..]

+      The device features 5 low-power modes:

+      (+) Low power run mode: regulator in low power mode, limited clock frequency,

+        limited number of peripherals running.

+      (+) Sleep mode: Cortex-M3 core stopped, peripherals kept running.

+      (+) Low power sleep mode: Cortex-M3 core stopped, limited clock frequency,

+         limited number of peripherals running, regulator in low power mode.

+      (+) Stop mode: All clocks are stopped, regulator running, regulator in low power mode.

+      (+) Standby mode: VCORE domain powered off

+

+   *** Low power run mode ***

+   =========================

+    [..]

+       To further reduce the consumption when the system is in Run mode, the regulator can be

+        configured in low power mode. In this mode, the system frequency should not exceed

+        MSI frequency range1.

+        In Low power run mode, all I/O pins keep the same state as in Run mode.

+

+      (+) Entry:

+        (++) VCORE in range2

+        (++) Decrease the system frequency tonot exceed the frequency of MSI frequency range1.

+        (++) The regulator is forced in low power mode using the HAL_PWREx_EnableLowPowerRunMode()

+             function.

+      (+) Exit:

+        (++) The regulator is forced in Main regulator mode using the HAL_PWREx_DisableLowPowerRunMode()

+              function.

+        (++) Increase the system frequency if needed.

+

+   *** Sleep mode ***

+   ==================

+    [..]

+      (+) Entry:

+          The Sleep mode is entered by using the HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFx)

+              functions with

+          (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction

+          (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction

+

+      (+) Exit:

+        (++) Any peripheral interrupt acknowledged by the nested vectored interrupt

+              controller (NVIC) can wake up the device from Sleep mode.

+

+   *** Low power sleep mode ***

+   ============================

+    [..]

+      (+) Entry:

+          The Low power sleep mode is entered by using the HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFx)

+              functions with

+          (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction

+          (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction

+       (+) The Flash memory can be switched off by using the control bits (SLEEP_PD in the FLASH_ACR register.

+             This reduces power consumption but increases the wake-up time.

+

+      (+) Exit:

+        (++) If the WFI instruction was used to enter Low power sleep mode, any peripheral interrupt

+              acknowledged by the nested vectored interrupt controller (NVIC) can wake up the device

+              from Low power sleep mode. If the WFE instruction was used to enter Low power sleep mode,

+              the MCU exits Sleep mode as soon as an event occurs.

+

+   *** Stop mode ***

+   =================

+    [..]

+      The Stop mode is based on the Cortex-M3 deepsleep mode combined with peripheral

+      clock gating. The voltage regulator can be configured either in normal or low-power mode.

+      In Stop mode, all clocks in the VCORE domain are stopped, the PLL, the MSI, the HSI and

+      the HSE RC oscillators are disabled. Internal SRAM and register contents are preserved.

+      To get the lowest consumption in Stop mode, the internal Flash memory also enters low

+      power mode. When the Flash memory is in power-down mode, an additional startup delay is

+      incurred when waking up from Stop mode.

+      To minimize the consumption In Stop mode, VREFINT, the BOR, PVD, and temperature

+      sensor can be switched off before entering Stop mode. They can be switched on again by

+      software after exiting Stop mode using the ULP bit in the PWR_CR register.

+      In Stop mode, all I/O pins keep the same state as in Run mode.

+

+      (+) Entry:

+           The Stop mode is entered using the HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI )

+             function with:

+          (++) Main regulator ON.

+          (++) Low Power regulator ON.

+          (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction

+          (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction

+      (+) Exit:

+        (++) By issuing an interrupt or a wakeup event, the MSI RC oscillator is selected as system clock.

+

+   *** Standby mode ***

+   ====================

+     [..]

+      The Standby mode allows to achieve the lowest power consumption. It is based on the

+      Cortex-M3 deepsleep mode, with the voltage regulator disabled. The VCORE domain is

+      consequently powered off. The PLL, the MSI, the HSI oscillator and the HSE oscillator are

+      also switched off. SRAM and register contents are lost except for the RTC registers, RTC

+      backup registers and Standby circuitry.

+

+      To minimize the consumption In Standby mode, VREFINT, the BOR, PVD, and temperature

+       sensor can be switched off before entering the Standby mode. They can be switched

+       on again by software after exiting the Standby mode.

+       function.

+

+      (+) Entry:

+        (++) The Standby mode is entered using the HAL_PWR_EnterSTANDBYMode() function.

+      (+) Exit:

+        (++) WKUP pin rising edge, RTC alarm (Alarm A and Alarm B), RTC wakeup,

+             tamper event, time-stamp event, external reset in NRST pin, IWDG reset.

+

+   *** Auto-wakeup (AWU) from low-power mode ***

+   =============================================

+    [..]

+      The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC

+      Wakeup event, a tamper event, a time-stamp event, or a comparator event,

+      without depending on an external interrupt (Auto-wakeup mode).

+

+    (+) RTC auto-wakeup (AWU) from the Stop mode

+        (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to:

+             (+++) Configure the EXTI Line 17 to be sensitive to rising edges (Interrupt

+                   or Event modes) and Enable the RTC Alarm Interrupt using the HAL_RTC_SetAlarm_IT()

+                   function

+             (+++) Configure the RTC to generate the RTC alarm using the HAL_RTC_Init()

+                   and HAL_RTC_SetTime() functions.

+        (++) To wake up from the Stop mode with an RTC Tamper or time stamp event, it

+             is necessary to:

+             (+++) Configure the EXTI Line 19 to be sensitive to rising edges (Interrupt or Event modes) and

+                   Enable the RTC Tamper or time stamp Interrupt using the HAL_RTCEx_SetTamper_IT()

+                   or HAL_RTCEx_SetTimeStamp_IT() functions.

+        (++) To wake up from the Stop mode with an RTC WakeUp event, it is necessary to:

+             (+++) Configure the EXTI Line 20 to be sensitive to rising edges (Interrupt or Event modes) and

+                   Enable the RTC WakeUp Interrupt using the HAL_RTCEx_SetWakeUpTimer_IT() function.

+             (+++) Configure the RTC to generate the RTC WakeUp event using the HAL_RTCEx_SetWakeUpTimer()

+                   function.

+

+    (+) RTC auto-wakeup (AWU) from the Standby mode

+        (++) To wake up from the Standby mode with an RTC alarm event, it is necessary to:

+             (+++) Enable the RTC Alarm Interrupt using the HAL_RTC_SetAlarm_IT() function.

+             (+++) Configure the RTC to generate the RTC alarm using the HAL_RTC_Init()

+                   and HAL_RTC_SetTime() functions.

+        (++) To wake up from the Standby mode with an RTC Tamper or time stamp event, it

+             is necessary to:

+             (+++) Enable the RTC Tamper or time stamp Interrupt and Configure the RTC to

+                   detect the tamper or time stamp event using the HAL_RTCEx_SetTimeStamp_IT()

+                   or HAL_RTCEx_SetTamper_IT()functions.

+        (++) To wake up from the Standby mode with an RTC WakeUp event, it is necessary to:

+             (+++) Enable the RTC WakeUp Interrupt and Configure the RTC to generate the RTC WakeUp event

+                   using the HAL_RTCEx_SetWakeUpTimer_IT() and HAL_RTCEx_SetWakeUpTimer() functions.

+

+    (+) Comparator auto-wakeup (AWU) from the Stop mode

+        (++) To wake up from the Stop mode with an comparator 1 or comparator 2 wakeup

+             event, it is necessary to:

+             (+++) Configure the EXTI Line 21 or EXTI Line 22 for comparator to be sensitive to to the

+                   selected edges (falling, rising or falling and rising) (Interrupt or Event modes) using

+                   the COMP functions.

+             (+++) Configure the comparator to generate the event.

+

+

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Configures the voltage threshold detected by the Power Voltage Detector(PVD).

+  * @param  sConfigPVD pointer to an PWR_PVDTypeDef structure that contains the configuration

+  *         information for the PVD.

+  * @note   Refer to the electrical characteristics of your device datasheet for

+  *         more details about the voltage threshold corresponding to each

+  *         detection level.

+  * @retval None

+  */

+void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD)

+{

+  /* Check the parameters */

+  assert_param(IS_PWR_PVD_LEVEL(sConfigPVD->PVDLevel));

+  assert_param(IS_PWR_PVD_MODE(sConfigPVD->Mode));

+

+  /* Set PLS[7:5] bits according to PVDLevel value */

+  MODIFY_REG(PWR->CR, PWR_CR_PLS, sConfigPVD->PVDLevel);

+

+  /* Clear any previous config. Keep it clear if no event or IT mode is selected */

+  __HAL_PWR_PVD_EXTI_DISABLE_EVENT();

+  __HAL_PWR_PVD_EXTI_DISABLE_IT();

+  __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE();

+

+  /* Configure interrupt mode */

+  if((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT)

+  {

+    __HAL_PWR_PVD_EXTI_ENABLE_IT();

+  }

+

+  /* Configure event mode */

+  if((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT)

+  {

+    __HAL_PWR_PVD_EXTI_ENABLE_EVENT();

+  }

+

+  /* Configure the edge */

+  if((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE)

+  {

+    __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();

+  }

+

+  if((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE)

+  {

+    __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();

+  }

+}

+

+/**

+  * @brief  Enables the Power Voltage Detector(PVD).

+  * @retval None

+  */

+void HAL_PWR_EnablePVD(void)

+{

+  /* Enable the power voltage detector */

+  *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)ENABLE;

+}

+

+/**

+  * @brief  Disables the Power Voltage Detector(PVD).

+  * @retval None

+  */

+void HAL_PWR_DisablePVD(void)

+{

+  /* Disable the power voltage detector */

+  *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)DISABLE;

+}

+

+/**

+  * @brief Enables the WakeUp PINx functionality.

+  * @param WakeUpPinx: Specifies the Power Wake-Up pin to enable.

+  *        This parameter can be one of the following values:

+  *           @arg PWR_WAKEUP_PIN1

+  *           @arg PWR_WAKEUP_PIN2

+  *           @arg PWR_WAKEUP_PIN3: Only on product with GPIOE available

+  * @retval None

+  */

+void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx)

+{

+  /* Check the parameter */

+  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));

+  /* Enable the EWUPx pin */

+  *(__IO uint32_t *) CSR_EWUP_BB(WakeUpPinx) = (uint32_t)ENABLE;

+}

+

+/**

+  * @brief Disables the WakeUp PINx functionality.

+  * @param WakeUpPinx: Specifies the Power Wake-Up pin to disable.

+  *        This parameter can be one of the following values:

+  *           @arg PWR_WAKEUP_PIN1

+  *           @arg PWR_WAKEUP_PIN2

+  *           @arg PWR_WAKEUP_PIN3: Only on product with GPIOE available

+  * @retval None

+  */

+void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx)

+{

+  /* Check the parameter */

+  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));

+  /* Disable the EWUPx pin */

+  *(__IO uint32_t *) CSR_EWUP_BB(WakeUpPinx) = (uint32_t)DISABLE;

+}

+

+/**

+  * @brief Enters Sleep mode.

+  * @note  In Sleep mode, all I/O pins keep the same state as in Run mode.

+  * @param Regulator: Specifies the regulator state in SLEEP mode.

+  *         This parameter can be one of the following values:

+  *            @arg PWR_MAINREGULATOR_ON: SLEEP mode with regulator ON

+  *            @arg PWR_LOWPOWERREGULATOR_ON: SLEEP mode with low power regulator ON

+  * @param SLEEPEntry: Specifies if SLEEP mode is entered with WFI or WFE instruction.

+  *           When WFI entry is used, tick interrupt have to be disabled if not desired as

+  *           the interrupt wake up source.

+  *           This parameter can be one of the following values:

+  *            @arg PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction

+  *            @arg PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction

+  * @retval None

+  */

+void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry)

+{

+  /* Check the parameters */

+  assert_param(IS_PWR_REGULATOR(Regulator));

+  assert_param(IS_PWR_SLEEP_ENTRY(SLEEPEntry));

+

+  /* Select the regulator state in Sleep mode: Set PDDS and LPSDSR bit according to PWR_Regulator value */

+  MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPSDSR), Regulator);

+

+  /* Clear SLEEPDEEP bit of Cortex System Control Register */

+  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));

+

+  /* Select SLEEP mode entry -------------------------------------------------*/

+  if(SLEEPEntry == PWR_SLEEPENTRY_WFI)

+  {

+    /* Request Wait For Interrupt */

+    __WFI();

+  }

+  else

+  {

+    /* Request Wait For Event */

+    __SEV();

+    __WFE();

+    __WFE();

+  }

+}

+

+/**

+  * @brief Enters Stop mode.

+  * @note  In Stop mode, all I/O pins keep the same state as in Run mode.

+  * @note  When exiting Stop mode by using an interrupt or a wakeup event,

+  *        MSI RC oscillator is selected as system clock.

+  * @note  When the voltage regulator operates in low power mode, an additional

+  *         startup delay is incurred when waking up from Stop mode.

+  *         By keeping the internal regulator ON during Stop mode, the consumption

+  *         is higher although the startup time is reduced.

+  * @param Regulator: Specifies the regulator state in Stop mode.

+  *          This parameter can be one of the following values:

+  *            @arg PWR_MAINREGULATOR_ON: Stop mode with regulator ON

+  *            @arg PWR_LOWPOWERREGULATOR_ON: Stop mode with low power regulator ON

+  * @param STOPEntry: Specifies if Stop mode in entered with WFI or WFE instruction.

+  *          This parameter can be one of the following values:

+  *            @arg PWR_STOPENTRY_WFI: Enter Stop mode with WFI instruction

+  *            @arg PWR_STOPENTRY_WFE: Enter Stop mode with WFE instruction

+  * @retval None

+  */

+void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry)

+{

+  /* Check the parameters */

+  assert_param(IS_PWR_REGULATOR(Regulator));

+  assert_param(IS_PWR_STOP_ENTRY(STOPEntry));

+

+  /* Select the regulator state in Stop mode: Set PDDS and LPSDSR bit according to PWR_Regulator value */

+  MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPSDSR), Regulator);

+

+  /* Set SLEEPDEEP bit of Cortex System Control Register */

+  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));

+

+  /* Select Stop mode entry --------------------------------------------------*/

+  if(STOPEntry == PWR_STOPENTRY_WFI)

+  {

+    /* Request Wait For Interrupt */

+    __WFI();

+  }

+  else

+  {

+    /* Request Wait For Event */

+    __SEV();

+    __WFE();

+    __WFE();

+  }

+  /* Reset SLEEPDEEP bit of Cortex System Control Register */

+  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));

+}

+

+/**

+  * @brief Enters Standby mode.

+  * @note  In Standby mode, all I/O pins are high impedance except for:

+  *          - Reset pad (still available)

+  *          - RTC_AF1 pin (PC13) if configured for tamper, time-stamp, RTC

+  *            Alarm out, or RTC clock calibration out.

+  *          - WKUP pin 1 (PA0) if enabled.

+  *          - WKUP pin 2 (PC13) if enabled.

+  *          - WKUP pin 3 (PE6) if enabled.

+  * @retval None

+  */

+void HAL_PWR_EnterSTANDBYMode(void)

+{

+  /* Select Standby mode */

+  SET_BIT(PWR->CR, PWR_CR_PDDS);

+

+  /* Set SLEEPDEEP bit of Cortex System Control Register */

+  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));

+

+  /* This option is used to ensure that store operations are completed */

+#if defined ( __CC_ARM)

+  __force_stores();

+#endif

+  /* Request Wait For Interrupt */

+  __WFI();

+}

+

+

+/**

+  * @brief Indicates Sleep-On-Exit when returning from Handler mode to Thread mode.

+  * @note Set SLEEPONEXIT bit of SCR register. When this bit is set, the processor

+  *       re-enters SLEEP mode when an interruption handling is over.

+  *       Setting this bit is useful when the processor is expected to run only on

+  *       interruptions handling.

+  * @retval None

+  */

+void HAL_PWR_EnableSleepOnExit(void)

+{

+  /* Set SLEEPONEXIT bit of Cortex System Control Register */

+  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));

+}

+

+

+/**

+  * @brief Disables Sleep-On-Exit feature when returning from Handler mode to Thread mode.

+  * @note Clears SLEEPONEXIT bit of SCR register. When this bit is set, the processor

+  *       re-enters SLEEP mode when an interruption handling is over.

+  * @retval None

+  */

+void HAL_PWR_DisableSleepOnExit(void)

+{

+  /* Clear SLEEPONEXIT bit of Cortex System Control Register */

+  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));

+}

+

+

+/**

+  * @brief Enables CORTEX M3 SEVONPEND bit.

+  * @note Sets SEVONPEND bit of SCR register. When this bit is set, this causes

+  *       WFE to wake up when an interrupt moves from inactive to pended.

+  * @retval None

+  */

+void HAL_PWR_EnableSEVOnPend(void)

+{

+  /* Set SEVONPEND bit of Cortex System Control Register */

+  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));

+}

+

+

+/**

+  * @brief Disables CORTEX M3 SEVONPEND bit.

+  * @note Clears SEVONPEND bit of SCR register. When this bit is set, this causes

+  *       WFE to wake up when an interrupt moves from inactive to pended.

+  * @retval None

+  */

+void HAL_PWR_DisableSEVOnPend(void)

+{

+  /* Clear SEVONPEND bit of Cortex System Control Register */

+  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));

+}

+

+

+

+/**

+  * @brief  This function handles the PWR PVD interrupt request.

+  * @note   This API should be called under the PVD_IRQHandler().

+  * @retval None

+  */

+void HAL_PWR_PVD_IRQHandler(void)

+{

+  /* Check PWR exti flag */

+  if(__HAL_PWR_PVD_EXTI_GET_FLAG() != RESET)

+  {

+    /* PWR PVD interrupt user callback */

+    HAL_PWR_PVDCallback();

+

+    /* Clear PWR Exti pending bit */

+    __HAL_PWR_PVD_EXTI_CLEAR_FLAG();

+  }

+}

+

+/**

+  * @brief  PWR PVD interrupt callback

+  * @retval None

+  */

+__weak void HAL_PWR_PVDCallback(void)

+{

+  /* NOTE : This function Should not be modified, when the callback is needed,

+            the HAL_PWR_PVDCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#endif /* HAL_PWR_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr_ex.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr_ex.c
new file mode 100644
index 0000000..5e5c188
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_pwr_ex.c
@@ -0,0 +1,161 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_pwr_ex.c

+  * @author  MCD Application Team

+  * @brief   Extended PWR HAL module driver.

+  *          This file provides firmware functions to manage the following

+  *          functionalities of the Power Controller (PWR) peripheral:

+  *           + Extended Initialization and de-initialization functions

+  *           + Extended Peripheral Control functions

+  *

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @defgroup PWREx PWREx

+  * @brief    PWR HAL module driver

+  * @{

+  */

+

+#ifdef HAL_PWR_MODULE_ENABLED

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/* Private macro -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+/* Private functions ---------------------------------------------------------*/

+

+/** @defgroup PWREx_Exported_Functions PWREx Exported Functions

+  * @{

+  */

+

+/** @defgroup PWREx_Exported_Functions_Group1 Peripheral Extended Features Functions

+  * @brief    Low Power modes configuration functions

+  *

+@verbatim

+

+ ===============================================================================

+                 ##### Peripheral extended features functions #####

+ ===============================================================================

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief Return Voltage Scaling Range.

+  * @retval VOS bit field (PWR_REGULATOR_VOLTAGE_SCALE1, PWR_REGULATOR_VOLTAGE_SCALE2 or PWR_REGULATOR_VOLTAGE_SCALE3)

+  */

+uint32_t HAL_PWREx_GetVoltageRange(void)

+{

+  return  (PWR->CR & PWR_CR_VOS);

+}

+

+

+/**

+  * @brief  Enables the Fast WakeUp from Ultra Low Power mode.

+  * @note   This bit works in conjunction with ULP bit.

+  *         Means, when ULP = 1 and FWU = 1 :VREFINT startup time is ignored when

+  *         exiting from low power mode.

+  * @retval None

+  */

+void HAL_PWREx_EnableFastWakeUp(void)

+{

+  /* Enable the fast wake up */

+  *(__IO uint32_t *) CR_FWU_BB = (uint32_t)ENABLE;

+}

+

+/**

+  * @brief  Disables the Fast WakeUp from Ultra Low Power mode.

+  * @retval None

+  */

+void HAL_PWREx_DisableFastWakeUp(void)

+{

+  /* Disable the fast wake up */

+  *(__IO uint32_t *) CR_FWU_BB = (uint32_t)DISABLE;

+}

+

+/**

+  * @brief  Enables the Ultra Low Power mode

+  * @retval None

+  */

+void HAL_PWREx_EnableUltraLowPower(void)

+{

+  /* Enable the Ultra Low Power mode */

+  *(__IO uint32_t *) CR_ULP_BB = (uint32_t)ENABLE;

+}

+

+/**

+  * @brief  Disables the Ultra Low Power mode

+  * @retval None

+  */

+void HAL_PWREx_DisableUltraLowPower(void)

+{

+  /* Disable the Ultra Low Power mode */

+  *(__IO uint32_t *) CR_ULP_BB = (uint32_t)DISABLE;

+}

+

+/**

+  * @brief  Enters the Low Power Run mode.

+  * @note   Low power run mode can only be entered when VCORE is in range 2.

+  *         In addition, the dynamic voltage scaling must not be used when Low

+  *         power run mode is selected. Only Stop and Sleep modes with regulator

+  *         configured in Low power mode is allowed when Low power run mode is

+  *         selected.

+  * @note   In Low power run mode, all I/O pins keep the same state as in Run mode.

+  * @retval None

+  */

+void HAL_PWREx_EnableLowPowerRunMode(void)

+{

+  /* Enters the Low Power Run mode */

+  *(__IO uint32_t *) CR_LPSDSR_BB = (uint32_t)ENABLE;

+  *(__IO uint32_t *) CR_LPRUN_BB  = (uint32_t)ENABLE;

+}

+

+/**

+  * @brief  Exits the Low Power Run mode.

+  * @retval None

+  */

+HAL_StatusTypeDef HAL_PWREx_DisableLowPowerRunMode(void)

+{

+  /* Exits the Low Power Run mode */

+  *(__IO uint32_t *) CR_LPRUN_BB  = (uint32_t)DISABLE;

+  *(__IO uint32_t *) CR_LPSDSR_BB = (uint32_t)DISABLE;

+  return HAL_OK;

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#endif /* HAL_PWR_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc.c
new file mode 100644
index 0000000..e2623a7
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc.c
@@ -0,0 +1,1394 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_rcc.c

+  * @author  MCD Application Team

+  * @brief   RCC HAL module driver.

+  *          This file provides firmware functions to manage the following

+  *          functionalities of the Reset and Clock Control (RCC) peripheral:

+  *           + Initialization and de-initialization functions

+  *           + Peripheral Control functions

+  *

+  @verbatim

+  ==============================================================================

+                      ##### RCC specific features #####

+  ==============================================================================

+    [..]

+      After reset the device is running from multispeed internal oscillator clock

+      (MSI 2.097MHz) with Flash 0 wait state and Flash prefetch buffer is disabled,

+      and all peripherals are off except internal SRAM, Flash and JTAG.

+      (+) There is no prescaler on High speed (AHB) and Low speed (APB) buses;

+          all peripherals mapped on these buses are running at MSI speed.

+      (+) The clock for all peripherals is switched off, except the SRAM and FLASH.

+      (+) All GPIOs are in input floating state, except the JTAG pins which

+          are assigned to be used for debug purpose.

+    [..] Once the device started from reset, the user application has to:

+      (+) Configure the clock source to be used to drive the System clock

+          (if the application needs higher frequency/performance)

+      (+) Configure the System clock frequency and Flash settings

+      (+) Configure the AHB and APB buses prescalers

+      (+) Enable the clock for the peripheral(s) to be used

+      (+) Configure the clock source(s) for peripherals whose clocks are not

+          derived from the System clock (I2S, RTC, ADC, USB OTG FS/SDIO/RNG)

+          (*) SDIO only for STM32L1xxxD devices

+

+                      ##### RCC Limitations #####

+  ==============================================================================

+    [..]

+      A delay between an RCC peripheral clock enable and the effective peripheral

+      enabling should be taken into account in order to manage the peripheral read/write

+      from/to registers.

+      (+) This delay depends on the peripheral mapping.

+        (++) AHB & APB peripherals, 1 dummy read is necessary

+

+    [..]

+      Workarounds:

+      (#) For AHB & APB peripherals, a dummy read to the peripheral register has been

+          inserted in each __HAL_RCC_PPP_CLK_ENABLE() macro.

+

+  @endverbatim

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright(c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @defgroup RCC RCC

+* @brief RCC HAL module driver

+  * @{

+  */

+

+#ifdef HAL_RCC_MODULE_ENABLED

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/* Private macro -------------------------------------------------------------*/

+/** @defgroup RCC_Private_Macros RCC Private Macros

+  * @{

+  */

+

+#define MCO1_CLK_ENABLE()     __HAL_RCC_GPIOA_CLK_ENABLE()

+#define MCO1_GPIO_PORT        GPIOA

+#define MCO1_PIN              GPIO_PIN_8

+

+/**

+  * @}

+  */

+

+/* Private variables ---------------------------------------------------------*/

+/** @defgroup RCC_Private_Variables RCC Private Variables

+  * @{

+  */

+extern const uint8_t PLLMulTable[];          /* Defined in CMSIS (system_stm32l0xx.c)*/

+/**

+  * @}

+  */

+

+/* Private function prototypes -----------------------------------------------*/

+/** @defgroup RCC_Private_Functions RCC Private Functions

+  * @{

+  */

+static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t MSIrange);

+/**

+  * @}

+  */

+

+/* Exported functions ---------------------------------------------------------*/

+

+/** @defgroup RCC_Exported_Functions RCC Exported Functions

+  * @{

+  */

+

+/** @defgroup RCC_Exported_Functions_Group1 Initialization and de-initialization functions

+  *  @brief    Initialization and Configuration functions

+  *

+  @verbatim

+  ===============================================================================

+           ##### Initialization and de-initialization functions #####

+  ===============================================================================

+    [..]

+      This section provides functions allowing to configure the internal/external oscillators

+      (MSI, HSE, HSI, LSE, LSI, PLL, CSS and MCO) and the System buses clocks (SYSCLK, AHB, APB1

+      and APB2).

+

+    [..] Internal/external clock and PLL configuration

+      (#) MSI (Multispeed internal), Seven frequency ranges are available: 65.536 kHz,

+          131.072 kHz, 262.144 kHz, 524.288 kHz, 1.048 MHz, 2.097 MHz (default value) and 4.194 MHz.

+

+      (#) HSI (high-speed internal), 16 MHz factory-trimmed RC used directly or through

+          the PLL as System clock source.

+      (#) LSI (low-speed internal), ~37 KHz low consumption RC used as IWDG and/or RTC

+          clock source.

+

+      (#) HSE (high-speed external), 1 to 24 MHz crystal oscillator used directly or

+          through the PLL as System clock source. Can be used also as RTC clock source.

+

+      (#) LSE (low-speed external), 32 KHz oscillator used as RTC clock source.

+

+      (#) PLL (clocked by HSI or HSE), featuring different output clocks:

+        (++) The first output is used to generate the high speed system clock (up to 32 MHz)

+        (++) The second output is used to generate the clock for the USB OTG FS (48 MHz)

+

+      (#) CSS (Clock security system), once enable using the macro __HAL_RCC_CSS_ENABLE()

+          and if a HSE clock failure occurs(HSE used directly or through PLL as System

+          clock source), the System clocks automatically switched to MSI and an interrupt

+          is generated if enabled. The interrupt is linked to the Cortex-M3 NMI

+          (Non-Maskable Interrupt) exception vector.

+

+      (#) MCO1 (microcontroller clock output), used to output SYSCLK, HSI, LSI, MSI, LSE,

+          HSE or PLL clock (through a configurable prescaler) on PA8 pin.

+

+    [..] System, AHB and APB buses clocks configuration

+      (#) Several clock sources can be used to drive the System clock (SYSCLK): MSI, HSI,

+          HSE and PLL.

+          The AHB clock (HCLK) is derived from System clock through configurable

+          prescaler and used to clock the CPU, memory and peripherals mapped

+          on AHB bus (DMA, GPIO...). APB1 (PCLK1) and APB2 (PCLK2) clocks are derived

+          from AHB clock through configurable prescalers and used to clock

+          the peripherals mapped on these buses. You can use

+          "@ref HAL_RCC_GetSysClockFreq()" function to retrieve the frequencies of these clocks.

+

+      -@- All the peripheral clocks are derived from the System clock (SYSCLK) except:

+          (+@) RTC: RTC clock can be derived either from the LSI, LSE or HSE clock

+              divided by 2 to 16. You have to use @ref __HAL_RCC_RTC_CONFIG() and @ref __HAL_RCC_RTC_ENABLE()

+              macros to configure this clock.

+          (+@) LCD: LCD clock can be derived either from the LSI, LSE or HSE clock

+              divided by 2 to 16. You have to use @ref __HAL_RCC_LCD_CONFIG()

+              macros to configure this clock.

+          (+@) USB OTG FS: USB OTG FS require a frequency equal to 48 MHz

+              to work correctly. This clock is derived of the main PLL through PLL Multiplier.

+

+          (+@) IWDG clock which is always the LSI clock.

+

+      (#) The maximum frequency of the SYSCLK and HCLK is 32 MHz, PCLK2 32 MHz

+          and PCLK1 32 MHz. Depending on the device voltage range, the maximum

+          frequency should be adapted accordingly.

+  @endverbatim

+  * @{

+  */

+

+/*

+  Additional consideration on the HCLK based on Latency settings:

+  +----------------------------------------------------------------------+

+  | Latency       |                HCLK clock frequency (MHz)            |

+  |               |------------------------------------------------------|

+  |               | voltage range 1  | voltage range 2 | voltage range 3 |

+  |               |      1.8 V       |     1.5 V       |      1.2 V      |

+  |---------------|------------------|-----------------|-----------------|

+  |0WS(1CPU cycle)| 0 < HCLK <= 16   | 0 < HCLK <= 8   | 0 < HCLK <= 2   |

+  |---------------|------------------|-----------------|-----------------|

+  |1WS(2CPU cycle)| 16 < HCLK <= 32  | 8 < HCLK <= 16  | 2 < HCLK <= 4   |

+  +----------------------------------------------------------------------+

+

+  The following table gives the different clock source frequencies depending on the product

+  voltage range:

+  +------------------------------------------------------------------------------------------+

+  | Product voltage |                    Clock frequency                                     |

+  |                 |------------------|-----------------------------|-----------------------|

+  |      range      |   MSI   |   HSI  |              HSE            |          PLL          |

+  |-----------------|---------|--------|-----------------------------|-----------------------|

+  | Range 1 (1.8 V) | 4.2 MHz | 16 MHz | HSE 32 MHz (external clock) |         32 MHz        |

+  |                 |         |        |      or 24 MHz (crystal)    | (PLLVCO max = 96 MHz) |

+  |-----------------|---------|--------|-----------------------------|-----------------------|

+  | Range 2 (1.5 V) | 4.2 MHz | 16 MHz |         16 MHz              |         16 MHz        |

+  |                 |         |        |                             | (PLLVCO max = 48 MHz) |

+  |-----------------|---------|--------|-----------------------------|-----------------------|

+  | Range 3 (1.2 V) | 4.2 MHz |   NA   |         8 MHz               |           4 MHz       |

+  |                 |         |        |                             | (PLLVCO max = 24 MHz) |

+  +------------------------------------------------------------------------------------------+

+  */

+

+/**

+  * @brief  Resets the RCC clock configuration to the default reset state.

+  * @note   The default reset state of the clock configuration is given below:

+  *            - MSI ON and used as system clock source

+  *            - HSI, HSE and PLL  OFF

+  *            - AHB, APB1 and APB2 prescaler set to 1.

+  *            - CSS and MCO1 OFF

+  *            - All interrupts disabled

+  * @note   This function does not modify the configuration of the

+  *            - Peripheral clocks

+  *            - LSI, LSE and RTC clocks

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_RCC_DeInit(void)

+{

+  uint32_t tickstart;

+  HAL_StatusTypeDef status;

+

+  /* Set MSIClockRange, HSITRIM and MSITRIM bits to the reset values */

+  MODIFY_REG(RCC->ICSCR, (RCC_ICSCR_MSITRIM | RCC_ICSCR_HSITRIM | RCC_ICSCR_MSIRANGE), \

+            ((RCC_MSICALIBRATION_DEFAULT << RCC_ICSCR_MSITRIM_Pos) | (RCC_HSICALIBRATION_DEFAULT << RCC_ICSCR_HSITRIM_Pos) | RCC_ICSCR_MSIRANGE_5));

+

+  /* Set MSION bit */

+  SET_BIT(RCC->CR, RCC_CR_MSION);

+

+  /* Get Start Tick*/

+  tickstart = HAL_GetTick();

+

+  /* Wait till MSI is ready */

+  while (READ_BIT(RCC->CR, RCC_CR_MSIRDY) == 0U)

+  {

+    if ((HAL_GetTick() - tickstart) > MSI_TIMEOUT_VALUE)

+    {

+      return HAL_TIMEOUT;

+    }

+  }

+

+  /* Switch SYSCLK to MSI*/

+  CLEAR_BIT(RCC->CFGR, RCC_CFGR_SW);

+

+  /* Wait till MSI as SYSCLK status is ready */

+  while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != 0U)

+  {

+    if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE)

+    {

+      return HAL_TIMEOUT;

+    }

+  }

+

+  /* Update the SystemCoreClock global variable */

+  SystemCoreClock = MSI_VALUE;

+

+  /* Configure the source of time base considering new system clock settings  */

+  status = HAL_InitTick(uwTickPrio);

+  if(status != HAL_OK)

+  {

+    return status;

+  }

+

+  /* Reset HSION, HSEON, CSSON & PLLON bits */

+  CLEAR_BIT(RCC->CR, RCC_CR_HSION | RCC_CR_HSEON | RCC_CR_CSSON | RCC_CR_PLLON);

+  /* Reset HSEBYP bit */

+  CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);

+

+  /* Get Start Tick*/

+  tickstart = HAL_GetTick();

+

+  /* Wait till PLL is not ready */

+  while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != 0U)

+  {

+    if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)

+    {

+      return HAL_TIMEOUT;

+    }

+  }

+

+  /* Reset CFGR register */

+  CLEAR_REG(RCC->CFGR);

+

+  /* Disable all interrupts */

+  CLEAR_REG(RCC->CIR);

+

+  /* Clear all flags */

+#if defined(RCC_LSECSS_SUPPORT)

+  WRITE_REG(RCC->CIR, RCC_CIR_LSIRDYC | RCC_CIR_LSERDYC | RCC_CIR_HSIRDYC | RCC_CIR_HSERDYC | RCC_CIR_PLLRDYC | RCC_CIR_MSIRDYC |  RCC_CIR_LSECSSC | RCC_CIR_CSSC);

+#else

+  WRITE_REG(RCC->CIR, RCC_CIR_LSIRDYC | RCC_CIR_LSERDYC | RCC_CIR_HSIRDYC | RCC_CIR_HSERDYC | RCC_CIR_PLLRDYC | RCC_CIR_MSIRDYC |  RCC_CIR_CSSC);

+#endif

+

+  /* Clear all reset flags */

+  SET_BIT(RCC->CSR, RCC_CSR_RMVF);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the RCC Oscillators according to the specified parameters in the

+  *         RCC_OscInitTypeDef.

+  * @param  RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that

+  *         contains the configuration information for the RCC Oscillators.

+  * @note   The PLL is not disabled when used as system clock.

+  * @note   Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not

+  *         supported by this macro. User should request a transition to LSE Off

+  *         first and then LSE On or LSE Bypass.

+  * @note   Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not

+  *         supported by this macro. User should request a transition to HSE Off

+  *         first and then HSE On or HSE Bypass.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)

+{

+  uint32_t tickstart;

+  HAL_StatusTypeDef status;

+  uint32_t sysclk_source, pll_config;

+

+  /* Check the parameters */

+  if(RCC_OscInitStruct == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));

+

+  sysclk_source = __HAL_RCC_GET_SYSCLK_SOURCE();

+  pll_config = __HAL_RCC_GET_PLL_OSCSOURCE();

+

+  /*------------------------------- HSE Configuration ------------------------*/

+  if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)

+  {

+    /* Check the parameters */

+    assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));

+

+    /* When the HSE is used as system clock or clock source for PLL in these cases it is not allowed to be disabled */

+    if((sysclk_source == RCC_SYSCLKSOURCE_STATUS_HSE)

+       || ((sysclk_source == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (pll_config == RCC_PLLSOURCE_HSE)))

+    {

+      if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))

+      {

+        return HAL_ERROR;

+      }

+    }

+    else

+    {

+      /* Set the new HSE configuration ---------------------------------------*/

+      __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);

+

+      /* Check the HSE State */

+      if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF)

+      {

+        /* Get Start Tick */

+        tickstart = HAL_GetTick();

+

+        /* Wait till HSE is ready */

+        while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)

+        {

+          if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)

+          {

+            return HAL_TIMEOUT;

+          }

+        }

+      }

+      else

+      {

+        /* Get Start Tick */

+        tickstart = HAL_GetTick();

+

+        /* Wait till HSE is disabled */

+        while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)

+        {

+           if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)

+          {

+            return HAL_TIMEOUT;

+          }

+        }

+      }

+    }

+  }

+  /*----------------------------- HSI Configuration --------------------------*/

+  if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)

+  {

+    /* Check the parameters */

+    assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));

+    assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));

+

+    /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */

+    if((sysclk_source == RCC_SYSCLKSOURCE_STATUS_HSI)

+       || ((sysclk_source == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (pll_config == RCC_PLLSOURCE_HSI)))

+    {

+      /* When HSI is used as system clock it will not disabled */

+      if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))

+      {

+        return HAL_ERROR;

+      }

+      /* Otherwise, just the calibration is allowed */

+      else

+      {

+        /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/

+        __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);

+      }

+    }

+    else

+    {

+      /* Check the HSI State */

+      if(RCC_OscInitStruct->HSIState != RCC_HSI_OFF)

+      {

+        /* Enable the Internal High Speed oscillator (HSI). */

+        __HAL_RCC_HSI_ENABLE();

+

+        /* Get Start Tick */

+        tickstart = HAL_GetTick();

+

+        /* Wait till HSI is ready */

+        while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)

+        {

+          if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)

+          {

+            return HAL_TIMEOUT;

+          }

+        }

+

+        /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/

+        __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);

+      }

+      else

+      {

+        /* Disable the Internal High Speed oscillator (HSI). */

+        __HAL_RCC_HSI_DISABLE();

+

+        /* Get Start Tick */

+        tickstart = HAL_GetTick();

+

+        /* Wait till HSI is disabled */

+        while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)

+        {

+          if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)

+          {

+            return HAL_TIMEOUT;

+          }

+        }

+      }

+    }

+  }

+  /*----------------------------- MSI Configuration --------------------------*/

+  if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_MSI) == RCC_OSCILLATORTYPE_MSI)

+  {

+    /* When the MSI is used as system clock it will not be disabled */

+    if((sysclk_source == RCC_CFGR_SWS_MSI) )

+    {

+      if((__HAL_RCC_GET_FLAG(RCC_FLAG_MSIRDY) != 0U) && (RCC_OscInitStruct->MSIState == RCC_MSI_OFF))

+      {

+        return HAL_ERROR;

+      }

+      /* Otherwise, just the calibration and MSI range change are allowed */

+      else

+      {

+       /* Check MSICalibrationValue and MSIClockRange input parameters */

+        assert_param(IS_RCC_MSICALIBRATION_VALUE(RCC_OscInitStruct->MSICalibrationValue));

+        assert_param(IS_RCC_MSI_CLOCK_RANGE(RCC_OscInitStruct->MSIClockRange));

+

+        /* To correctly read data from FLASH memory, the number of wait states (LATENCY)

+           must be correctly programmed according to the frequency of the CPU clock

+           (HCLK) and the supply voltage of the device. */

+        if(RCC_OscInitStruct->MSIClockRange > __HAL_RCC_GET_MSI_RANGE())

+        {

+          /* First increase number of wait states update if necessary */

+          if(RCC_SetFlashLatencyFromMSIRange(RCC_OscInitStruct->MSIClockRange) != HAL_OK)

+          {

+            return HAL_ERROR;

+          }

+

+          /* Selects the Multiple Speed oscillator (MSI) clock range .*/

+          __HAL_RCC_MSI_RANGE_CONFIG(RCC_OscInitStruct->MSIClockRange);

+          /* Adjusts the Multiple Speed oscillator (MSI) calibration value.*/

+          __HAL_RCC_MSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->MSICalibrationValue);

+        }

+        else

+        {

+          /* Else, keep current flash latency while decreasing applies */

+          /* Selects the Multiple Speed oscillator (MSI) clock range .*/

+          __HAL_RCC_MSI_RANGE_CONFIG(RCC_OscInitStruct->MSIClockRange);

+          /* Adjusts the Multiple Speed oscillator (MSI) calibration value.*/

+          __HAL_RCC_MSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->MSICalibrationValue);

+

+          /* Decrease number of wait states update if necessary */

+          if(RCC_SetFlashLatencyFromMSIRange(RCC_OscInitStruct->MSIClockRange) != HAL_OK)

+          {

+            return HAL_ERROR;

+          }

+        }

+

+        /* Update the SystemCoreClock global variable */

+        SystemCoreClock =  (32768U * (1UL << ((RCC_OscInitStruct->MSIClockRange >> RCC_ICSCR_MSIRANGE_Pos) + 1U)))

+                           >> AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];

+

+        /* Configure the source of time base considering new system clocks settings*/

+        status = HAL_InitTick(uwTickPrio);

+        if(status != HAL_OK)

+        {

+          return status;

+        }

+      }

+    }

+    else

+    {

+      /* Check MSI State */

+      assert_param(IS_RCC_MSI(RCC_OscInitStruct->MSIState));

+

+      /* Check the MSI State */

+      if(RCC_OscInitStruct->MSIState != RCC_MSI_OFF)

+      {

+        /* Enable the Multi Speed oscillator (MSI). */

+        __HAL_RCC_MSI_ENABLE();

+

+        /* Get Start Tick */

+        tickstart = HAL_GetTick();

+

+        /* Wait till MSI is ready */

+        while(__HAL_RCC_GET_FLAG(RCC_FLAG_MSIRDY) == 0U)

+        {

+          if((HAL_GetTick() - tickstart) > MSI_TIMEOUT_VALUE)

+          {

+            return HAL_TIMEOUT;

+          }

+        }

+        /* Check MSICalibrationValue and MSIClockRange input parameters */

+        assert_param(IS_RCC_MSICALIBRATION_VALUE(RCC_OscInitStruct->MSICalibrationValue));

+        assert_param(IS_RCC_MSI_CLOCK_RANGE(RCC_OscInitStruct->MSIClockRange));

+

+        /* Selects the Multiple Speed oscillator (MSI) clock range .*/

+        __HAL_RCC_MSI_RANGE_CONFIG(RCC_OscInitStruct->MSIClockRange);

+         /* Adjusts the Multiple Speed oscillator (MSI) calibration value.*/

+        __HAL_RCC_MSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->MSICalibrationValue);

+

+      }

+      else

+      {

+        /* Disable the Multi Speed oscillator (MSI). */

+        __HAL_RCC_MSI_DISABLE();

+

+        /* Get Start Tick */

+        tickstart = HAL_GetTick();

+

+        /* Wait till MSI is ready */

+        while(__HAL_RCC_GET_FLAG(RCC_FLAG_MSIRDY) != 0U)

+        {

+          if((HAL_GetTick() - tickstart) > MSI_TIMEOUT_VALUE)

+          {

+            return HAL_TIMEOUT;

+          }

+        }

+      }

+    }

+  }

+  /*------------------------------ LSI Configuration -------------------------*/

+  if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)

+  {

+    /* Check the parameters */

+    assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));

+

+    /* Check the LSI State */

+    if(RCC_OscInitStruct->LSIState != RCC_LSI_OFF)

+    {

+      /* Enable the Internal Low Speed oscillator (LSI). */

+      __HAL_RCC_LSI_ENABLE();

+

+      /* Get Start Tick */

+      tickstart = HAL_GetTick();

+

+      /* Wait till LSI is ready */

+      while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)

+      {

+        if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)

+        {

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+    else

+    {

+      /* Disable the Internal Low Speed oscillator (LSI). */

+      __HAL_RCC_LSI_DISABLE();

+

+      /* Get Start Tick */

+      tickstart = HAL_GetTick();

+

+      /* Wait till LSI is disabled */

+      while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)

+      {

+        if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)

+        {

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+  }

+  /*------------------------------ LSE Configuration -------------------------*/

+  if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)

+  {

+    FlagStatus       pwrclkchanged = RESET;

+

+    /* Check the parameters */

+    assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));

+

+    /* Update LSE configuration in Backup Domain control register    */

+    /* Requires to enable write access to Backup Domain of necessary */

+    if(__HAL_RCC_PWR_IS_CLK_DISABLED())

+    {

+      __HAL_RCC_PWR_CLK_ENABLE();

+      pwrclkchanged = SET;

+    }

+

+    if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP))

+    {

+      /* Enable write access to Backup domain */

+      SET_BIT(PWR->CR, PWR_CR_DBP);

+

+      /* Wait for Backup domain Write protection disable */

+      tickstart = HAL_GetTick();

+

+      while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP))

+      {

+        if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)

+        {

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+

+    /* Set the new LSE configuration -----------------------------------------*/

+    __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);

+    /* Check the LSE State */

+    if(RCC_OscInitStruct->LSEState != RCC_LSE_OFF)

+    {

+      /* Get Start Tick */

+      tickstart = HAL_GetTick();

+

+      /* Wait till LSE is ready */

+      while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)

+      {

+        if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)

+        {

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+    else

+    {

+      /* Get Start Tick */

+      tickstart = HAL_GetTick();

+

+      /* Wait till LSE is disabled */

+      while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)

+      {

+        if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)

+        {

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+

+    /* Require to disable power clock if necessary */

+    if(pwrclkchanged == SET)

+    {

+      __HAL_RCC_PWR_CLK_DISABLE();

+    }

+  }

+

+  /*-------------------------------- PLL Configuration -----------------------*/

+  /* Check the parameters */

+  assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));

+  if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)

+  {

+    /* Check if the PLL is used as system clock or not */

+    if(sysclk_source != RCC_SYSCLKSOURCE_STATUS_PLLCLK)

+    {

+      if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)

+      {

+        /* Check the parameters */

+        assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));

+        assert_param(IS_RCC_PLL_MUL(RCC_OscInitStruct->PLL.PLLMUL));

+        assert_param(IS_RCC_PLL_DIV(RCC_OscInitStruct->PLL.PLLDIV));

+

+        /* Disable the main PLL. */

+        __HAL_RCC_PLL_DISABLE();

+

+        /* Get Start Tick */

+        tickstart = HAL_GetTick();

+

+        /* Wait till PLL is disabled */

+        while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)

+        {

+          if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)

+          {

+            return HAL_TIMEOUT;

+          }

+        }

+

+        /* Configure the main PLL clock source, multiplication and division factors. */

+        __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource,

+                             RCC_OscInitStruct->PLL.PLLMUL,

+                             RCC_OscInitStruct->PLL.PLLDIV);

+        /* Enable the main PLL. */

+        __HAL_RCC_PLL_ENABLE();

+

+        /* Get Start Tick */

+        tickstart = HAL_GetTick();

+

+        /* Wait till PLL is ready */

+        while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)

+        {

+          if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)

+          {

+            return HAL_TIMEOUT;

+          }

+        }

+      }

+      else

+      {

+        /* Disable the main PLL. */

+        __HAL_RCC_PLL_DISABLE();

+

+        /* Get Start Tick */

+        tickstart = HAL_GetTick();

+

+        /* Wait till PLL is disabled */

+        while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)

+        {

+          if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)

+          {

+            return HAL_TIMEOUT;

+          }

+        }

+      }

+    }

+    else

+    {

+      /* Check if there is a request to disable the PLL used as System clock source */

+      if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF)

+      {

+        return HAL_ERROR;

+      }

+      else

+      {

+        /* Do not return HAL_ERROR if request repeats the current configuration */

+        pll_config = RCC->CFGR;

+        if((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||

+           (READ_BIT(pll_config, RCC_CFGR_PLLMUL) != RCC_OscInitStruct->PLL.PLLMUL) ||

+           (READ_BIT(pll_config, RCC_CFGR_PLLDIV) != RCC_OscInitStruct->PLL.PLLDIV))

+        {

+          return HAL_ERROR;

+        }

+      }

+    }

+  }

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the CPU, AHB and APB buses clocks according to the specified

+  *         parameters in the RCC_ClkInitStruct.

+  * @param  RCC_ClkInitStruct pointer to an RCC_OscInitTypeDef structure that

+  *         contains the configuration information for the RCC peripheral.

+  * @param  FLatency FLASH Latency

+  *          The value of this parameter depend on device used within the same series

+  * @note   The SystemCoreClock CMSIS variable is used to store System Clock Frequency

+  *         and updated by @ref HAL_RCC_GetHCLKFreq() function called within this function

+  *

+  * @note   The MSI is used (enabled by hardware) as system clock source after

+  *         start-up from Reset, wake-up from STOP and STANDBY mode, or in case

+  *         of failure of the HSE used directly or indirectly as system clock

+  *         (if the Clock Security System CSS is enabled).

+  *

+  * @note   A switch from one clock source to another occurs only if the target

+  *         clock source is ready (clock stable after start-up delay or PLL locked).

+  *         If a clock source which is not yet ready is selected, the switch will

+  *         occur when the clock source will be ready.

+  *         You can use @ref HAL_RCC_GetClockConfig() function to know which clock is

+  *         currently used as system clock source.

+  * @note   Depending on the device voltage range, the software has to set correctly

+  *         HPRE[3:0] bits to ensure that HCLK not exceed the maximum allowed frequency

+  *         (for more details refer to section above "Initialization/de-initialization functions")

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t FLatency)

+{

+  uint32_t tickstart;

+  HAL_StatusTypeDef status;

+

+  /* Check the parameters */

+  if(RCC_ClkInitStruct == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  assert_param(IS_FLASH_LATENCY(FLatency));

+

+  /* To correctly read data from FLASH memory, the number of wait states (LATENCY)

+  must be correctly programmed according to the frequency of the CPU clock

+  (HCLK) and the supply voltage of the device. */

+

+  /* Increasing the number of wait states because of higher CPU frequency */

+  if(FLatency > __HAL_FLASH_GET_LATENCY())

+  {

+    /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */

+    __HAL_FLASH_SET_LATENCY(FLatency);

+

+    /* Check that the new number of wait states is taken into account to access the Flash

+    memory by reading the FLASH_ACR register */

+    if(__HAL_FLASH_GET_LATENCY() != FLatency)

+    {

+      return HAL_ERROR;

+    }

+  }

+

+  /*-------------------------- HCLK Configuration --------------------------*/

+  if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)

+  {

+    assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));

+    MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);

+  }

+

+  /*------------------------- SYSCLK Configuration ---------------------------*/

+  if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)

+  {

+    assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));

+

+    /* HSE is selected as System Clock Source */

+    if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)

+    {

+      /* Check the HSE ready flag */

+      if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)

+      {

+        return HAL_ERROR;

+      }

+    }

+    /* PLL is selected as System Clock Source */

+    else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)

+    {

+      /* Check the PLL ready flag */

+      if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)

+      {

+        return HAL_ERROR;

+      }

+    }

+    /* HSI is selected as System Clock Source */

+    else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSI)

+    {

+      /* Check the HSI ready flag */

+      if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)

+      {

+        return HAL_ERROR;

+      }

+    }

+    /* MSI is selected as System Clock Source */

+    else

+    {

+      /* Check the MSI ready flag */

+      if(__HAL_RCC_GET_FLAG(RCC_FLAG_MSIRDY) == 0U)

+      {

+        return HAL_ERROR;

+      }

+    }

+    __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource);

+

+    /* Get Start Tick */

+    tickstart = HAL_GetTick();

+

+    if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)

+    {

+      while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_HSE)

+      {

+        if((HAL_GetTick() - tickstart ) > CLOCKSWITCH_TIMEOUT_VALUE)

+        {

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+    else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)

+    {

+      while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)

+      {

+        if((HAL_GetTick() - tickstart ) > CLOCKSWITCH_TIMEOUT_VALUE)

+        {

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+    else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSI)

+    {

+      while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_HSI)

+      {

+        if((HAL_GetTick() - tickstart ) > CLOCKSWITCH_TIMEOUT_VALUE)

+        {

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+    else

+    {

+      while(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_MSI)

+      {

+        if((HAL_GetTick() - tickstart ) > CLOCKSWITCH_TIMEOUT_VALUE)

+        {

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+  }

+  /* Decreasing the number of wait states because of lower CPU frequency */

+  if(FLatency < __HAL_FLASH_GET_LATENCY())

+  {

+    /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */

+    __HAL_FLASH_SET_LATENCY(FLatency);

+

+    /* Check that the new number of wait states is taken into account to access the Flash

+    memory by reading the FLASH_ACR register */

+    if(__HAL_FLASH_GET_LATENCY() != FLatency)

+    {

+      return HAL_ERROR;

+    }

+  }

+

+  /*-------------------------- PCLK1 Configuration ---------------------------*/

+  if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)

+  {

+    assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));

+    MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);

+  }

+

+  /*-------------------------- PCLK2 Configuration ---------------------------*/

+  if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)

+  {

+    assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));

+    MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3U));

+  }

+

+  /* Update the SystemCoreClock global variable */

+  SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos];

+

+  /* Configure the source of time base considering new system clocks settings*/

+  status = HAL_InitTick(uwTickPrio);

+

+  return status;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup RCC_Exported_Functions_Group2 Peripheral Control functions

+  *  @brief   RCC clocks control functions

+  *

+  @verbatim

+  ===============================================================================

+                  ##### Peripheral Control functions #####

+  ===============================================================================

+    [..]

+    This subsection provides a set of functions allowing to control the RCC Clocks

+    frequencies.

+

+  @endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Selects the clock source to output on MCO pin.

+  * @note   MCO pin should be configured in alternate function mode.

+  * @param  RCC_MCOx specifies the output direction for the clock source.

+  *          This parameter can be one of the following values:

+  *            @arg @ref RCC_MCO1 Clock source to output on MCO1 pin(PA8).

+  * @param  RCC_MCOSource specifies the clock source to output.

+  *          This parameter can be one of the following values:

+  *            @arg @ref RCC_MCO1SOURCE_NOCLOCK     No clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_SYSCLK      System clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_HSI         HSI selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_HSE         HSE selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_MSI         MSI oscillator clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_PLLCLK      PLL clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_LSI         LSI clock selected as MCO clock

+  *            @arg @ref RCC_MCO1SOURCE_LSE         LSE clock selected as MCO clock

+  * @param  RCC_MCODiv specifies the MCO DIV.

+  *          This parameter can be one of the following values:

+  *            @arg @ref RCC_MCODIV_1 no division applied to MCO clock

+  *            @arg @ref RCC_MCODIV_2  division by 2 applied to MCO clock

+  *            @arg @ref RCC_MCODIV_4  division by 4 applied to MCO clock

+  *            @arg @ref RCC_MCODIV_8  division by 8 applied to MCO clock

+  *            @arg @ref RCC_MCODIV_16 division by 16 applied to MCO clock

+  * @retval None

+  */

+void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv)

+{

+  GPIO_InitTypeDef gpio;

+

+  /* Check the parameters */

+  assert_param(IS_RCC_MCO(RCC_MCOx));

+  assert_param(IS_RCC_MCODIV(RCC_MCODiv));

+  assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));

+

+  /* Configure the MCO1 pin in alternate function mode */

+  gpio.Mode      = GPIO_MODE_AF_PP;

+  gpio.Speed     = GPIO_SPEED_FREQ_HIGH;

+  gpio.Pull      = GPIO_NOPULL;

+  gpio.Pin       = MCO1_PIN;

+  gpio.Alternate = GPIO_AF0_MCO;

+

+  /* MCO1 Clock Enable */

+  MCO1_CLK_ENABLE();

+

+  HAL_GPIO_Init(MCO1_GPIO_PORT, &gpio);

+

+  /* Configure the MCO clock source */

+  __HAL_RCC_MCO1_CONFIG(RCC_MCOSource, RCC_MCODiv);

+}

+

+/**

+  * @brief  Enables the Clock Security System.

+  * @note   If a failure is detected on the HSE oscillator clock, this oscillator

+  *         is automatically disabled and an interrupt is generated to inform the

+  *         software about the failure (Clock Security System Interrupt, CSSI),

+  *         allowing the MCU to perform rescue operations. The CSSI is linked to

+  *         the Cortex-M3 NMI (Non-Maskable Interrupt) exception vector.

+  * @retval None

+  */

+void HAL_RCC_EnableCSS(void)

+{

+  *(__IO uint32_t *) RCC_CR_CSSON_BB = (uint32_t)ENABLE;

+}

+

+/**

+  * @brief  Disables the Clock Security System.

+  * @retval None

+  */

+void HAL_RCC_DisableCSS(void)

+{

+  *(__IO uint32_t *) RCC_CR_CSSON_BB = (uint32_t)DISABLE;

+}

+

+/**

+  * @brief  Returns the SYSCLK frequency

+  * @note   The system frequency computed by this function is not the real

+  *         frequency in the chip. It is calculated based on the predefined

+  *         constant and the selected clock source:

+  * @note     If SYSCLK source is MSI, function returns a value based on MSI

+  *             Value as defined by the MSI range.

+  * @note     If SYSCLK source is HSI, function returns values based on HSI_VALUE(*)

+  * @note     If SYSCLK source is HSE, function returns a value based on HSE_VALUE(**)

+  * @note     If SYSCLK source is PLL, function returns a value based on HSE_VALUE(**)

+  *           or HSI_VALUE(*) multiplied/divided by the PLL factors.

+  * @note     (*) HSI_VALUE is a constant defined in stm32l1xx_hal_conf.h file (default value

+  *               16 MHz) but the real value may vary depending on the variations

+  *               in voltage and temperature.

+  * @note     (**) HSE_VALUE is a constant defined in stm32l1xx_hal_conf.h file (default value

+  *                8 MHz), user has to ensure that HSE_VALUE is same as the real

+  *                frequency of the crystal used. Otherwise, this function may

+  *                have wrong result.

+  *

+  * @note   The result of this function could be not correct when using fractional

+  *         value for HSE crystal.

+  *

+  * @note   This function can be used by the user application to compute the

+  *         baud-rate for the communication peripherals or configure other parameters.

+  *

+  * @note   Each time SYSCLK changes, this function must be called to update the

+  *         right SYSCLK value. Otherwise, any configuration based on this function will be incorrect.

+  *

+  * @retval SYSCLK frequency

+  */

+uint32_t HAL_RCC_GetSysClockFreq(void)

+{

+  uint32_t tmpreg, pllm, plld, pllvco, msiclkrange, sysclockfreq;

+

+  tmpreg = RCC->CFGR;

+

+  /* Get SYSCLK source -------------------------------------------------------*/

+  switch (tmpreg & RCC_CFGR_SWS)

+  {

+    case RCC_SYSCLKSOURCE_STATUS_HSI:  /* HSI used as system clock source */

+    {

+      sysclockfreq = HSI_VALUE;

+      break;

+    }

+    case RCC_SYSCLKSOURCE_STATUS_HSE:  /* HSE used as system clock */

+    {

+      sysclockfreq = HSE_VALUE;

+      break;

+    }

+    case RCC_SYSCLKSOURCE_STATUS_PLLCLK:  /* PLL used as system clock */

+    {

+      pllm = PLLMulTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMUL) >> RCC_CFGR_PLLMUL_Pos];

+      plld = ((uint32_t)(tmpreg & RCC_CFGR_PLLDIV) >> RCC_CFGR_PLLDIV_Pos) + 1U;

+      if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_HSI)

+      {

+        /* HSE used as PLL clock source */

+        pllvco = (HSE_VALUE * pllm) / plld;

+      }

+      else

+      {

+        /* HSI used as PLL clock source */

+        pllvco = (HSI_VALUE * pllm) / plld;

+      }

+      sysclockfreq = pllvco;

+      break;

+    }

+    case RCC_SYSCLKSOURCE_STATUS_MSI:  /* MSI used as system clock source */

+    default: /* MSI used as system clock */

+    {

+      msiclkrange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE ) >> RCC_ICSCR_MSIRANGE_Pos;

+      sysclockfreq = (32768U * (1UL << (msiclkrange + 1U)));

+      break;

+    }

+  }

+  return sysclockfreq;

+}

+

+/**

+  * @brief  Returns the HCLK frequency

+  * @note   Each time HCLK changes, this function must be called to update the

+  *         right HCLK value. Otherwise, any configuration based on this function will be incorrect.

+  *

+  * @note   The SystemCoreClock CMSIS variable is used to store System Clock Frequency

+  *         and updated within this function

+  * @retval HCLK frequency

+  */

+uint32_t HAL_RCC_GetHCLKFreq(void)

+{

+  return SystemCoreClock;

+}

+

+/**

+  * @brief  Returns the PCLK1 frequency

+  * @note   Each time PCLK1 changes, this function must be called to update the

+  *         right PCLK1 value. Otherwise, any configuration based on this function will be incorrect.

+  * @retval PCLK1 frequency

+  */

+uint32_t HAL_RCC_GetPCLK1Freq(void)

+{

+  /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/

+  return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);

+}

+

+/**

+  * @brief  Returns the PCLK2 frequency

+  * @note   Each time PCLK2 changes, this function must be called to update the

+  *         right PCLK2 value. Otherwise, any configuration based on this function will be incorrect.

+  * @retval PCLK2 frequency

+  */

+uint32_t HAL_RCC_GetPCLK2Freq(void)

+{

+  /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/

+  return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);

+}

+

+/**

+  * @brief  Configures the RCC_OscInitStruct according to the internal

+  * RCC configuration registers.

+  * @param  RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that

+  * will be configured.

+  * @retval None

+  */

+void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)

+{

+  /* Check the parameters */

+  assert_param(RCC_OscInitStruct != (void *)NULL);

+

+  /* Set all possible values for the Oscillator type parameter ---------------*/

+  RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI  \

+                  | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_MSI;

+

+

+  /* Get the HSE configuration -----------------------------------------------*/

+  if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP)

+  {

+    RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;

+  }

+  else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON)

+  {

+    RCC_OscInitStruct->HSEState = RCC_HSE_ON;

+  }

+  else

+  {

+    RCC_OscInitStruct->HSEState = RCC_HSE_OFF;

+  }

+

+  /* Get the HSI configuration -----------------------------------------------*/

+  if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION)

+  {

+    RCC_OscInitStruct->HSIState = RCC_HSI_ON;

+  }

+  else

+  {

+    RCC_OscInitStruct->HSIState = RCC_HSI_OFF;

+  }

+

+  RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->ICSCR & RCC_ICSCR_HSITRIM) >> RCC_ICSCR_HSITRIM_Pos);

+

+  /* Get the MSI configuration -----------------------------------------------*/

+  if((RCC->CR &RCC_CR_MSION) == RCC_CR_MSION)

+  {

+    RCC_OscInitStruct->MSIState = RCC_MSI_ON;

+  }

+  else

+  {

+    RCC_OscInitStruct->MSIState = RCC_MSI_OFF;

+  }

+

+  RCC_OscInitStruct->MSICalibrationValue = (uint32_t)((RCC->ICSCR & RCC_ICSCR_MSITRIM) >> RCC_ICSCR_MSITRIM_Pos);

+  RCC_OscInitStruct->MSIClockRange = (uint32_t)((RCC->ICSCR & RCC_ICSCR_MSIRANGE));

+

+  /* Get the LSE configuration -----------------------------------------------*/

+  if((RCC->CSR &RCC_CSR_LSEBYP) == RCC_CSR_LSEBYP)

+  {

+    RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;

+  }

+  else if((RCC->CSR &RCC_CSR_LSEON) == RCC_CSR_LSEON)

+  {

+    RCC_OscInitStruct->LSEState = RCC_LSE_ON;

+  }

+  else

+  {

+    RCC_OscInitStruct->LSEState = RCC_LSE_OFF;

+  }

+

+  /* Get the LSI configuration -----------------------------------------------*/

+  if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION)

+  {

+    RCC_OscInitStruct->LSIState = RCC_LSI_ON;

+  }

+  else

+  {

+    RCC_OscInitStruct->LSIState = RCC_LSI_OFF;

+  }

+

+

+  /* Get the PLL configuration -----------------------------------------------*/

+  if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON)

+  {

+    RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;

+  }

+  else

+  {

+    RCC_OscInitStruct->PLL.PLLState = RCC_PLL_OFF;

+  }

+  RCC_OscInitStruct->PLL.PLLSource = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLSRC);

+  RCC_OscInitStruct->PLL.PLLMUL = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLMUL);

+  RCC_OscInitStruct->PLL.PLLDIV = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLDIV);

+}

+

+/**

+  * @brief  Get the RCC_ClkInitStruct according to the internal

+  * RCC configuration registers.

+  * @param  RCC_ClkInitStruct pointer to an RCC_ClkInitTypeDef structure that

+  * contains the current clock configuration.

+  * @param  pFLatency Pointer on the Flash Latency.

+  * @retval None

+  */

+void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t *pFLatency)

+{

+  /* Check the parameters */

+  assert_param(RCC_ClkInitStruct != (void *)NULL);

+  assert_param(pFLatency != (void *)NULL);

+

+  /* Set all possible values for the Clock type parameter --------------------*/

+  RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;

+

+  /* Get the SYSCLK configuration --------------------------------------------*/

+  RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW);

+

+  /* Get the HCLK configuration ----------------------------------------------*/

+  RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_HPRE);

+

+  /* Get the APB1 configuration ----------------------------------------------*/

+  RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_PPRE1);

+

+  /* Get the APB2 configuration ----------------------------------------------*/

+  RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)((RCC->CFGR & RCC_CFGR_PPRE2) >> 3U);

+

+  /* Get the Flash Wait State (Latency) configuration ------------------------*/

+  *pFLatency = __HAL_FLASH_GET_LATENCY();

+}

+

+/**

+  * @brief This function handles the RCC CSS interrupt request.

+  * @note This API should be called under the NMI_Handler().

+  * @retval None

+  */

+void HAL_RCC_NMI_IRQHandler(void)

+{

+  /* Check RCC CSSF flag  */

+  if(__HAL_RCC_GET_IT(RCC_IT_CSS))

+  {

+    /* RCC Clock Security System interrupt user callback */

+    HAL_RCC_CSSCallback();

+

+    /* Clear RCC CSS pending bit */

+    __HAL_RCC_CLEAR_IT(RCC_IT_CSS);

+  }

+}

+

+/**

+  * @brief  RCC Clock Security System interrupt callback

+  * @retval none

+  */

+__weak void HAL_RCC_CSSCallback(void)

+{

+  /* NOTE : This function Should not be modified, when the callback is needed,

+    the HAL_RCC_CSSCallback could be implemented in the user file

+    */

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/* Private function prototypes -----------------------------------------------*/

+/** @addtogroup RCC_Private_Functions

+  * @{

+  */

+/**

+  * @brief  Update number of Flash wait states in line with MSI range and current

+            voltage range

+  * @param  MSIrange  MSI range value from RCC_MSIRANGE_0 to RCC_MSIRANGE_6

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t MSIrange)

+{

+  uint32_t vos;

+  uint32_t latency = FLASH_LATENCY_0;  /* default value 0WS */

+

+  /* HCLK can reach 4 MHz only if AHB prescaler = 1 */

+  if (READ_BIT(RCC->CFGR, RCC_CFGR_HPRE) == RCC_SYSCLK_DIV1)

+  {

+    if(__HAL_RCC_PWR_IS_CLK_ENABLED())

+    {

+      vos = READ_BIT(PWR->CR, PWR_CR_VOS);

+    }

+    else

+    {

+      __HAL_RCC_PWR_CLK_ENABLE();

+      vos = READ_BIT(PWR->CR, PWR_CR_VOS);

+      __HAL_RCC_PWR_CLK_DISABLE();

+    }

+

+    /* Check if need to set latency 1 only for Range 3 & HCLK = 4MHz */

+    if((vos == PWR_REGULATOR_VOLTAGE_SCALE3) && (MSIrange == RCC_MSIRANGE_6))

+    {

+      latency = FLASH_LATENCY_1; /* 1WS */

+    }

+  }

+

+  __HAL_FLASH_SET_LATENCY(latency);

+

+  /* Check that the new number of wait states is taken into account to access the Flash

+     memory by reading the FLASH_ACR register */

+  if(__HAL_FLASH_GET_LATENCY() != latency)

+  {

+    return HAL_ERROR;

+  }

+

+  return HAL_OK;

+}

+

+/**

+  * @}

+  */

+

+#endif /* HAL_RCC_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc_ex.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc_ex.c
new file mode 100644
index 0000000..6dac309
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_rcc_ex.c
@@ -0,0 +1,440 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_rcc_ex.c

+  * @author  MCD Application Team

+  * @brief   Extended RCC HAL module driver.

+  *          This file provides firmware functions to manage the following

+  *          functionalities RCC extension peripheral:

+  *           + Extended Peripheral Control functions

+  *

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright(c) 2017 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+#ifdef HAL_RCC_MODULE_ENABLED

+

+/** @defgroup RCCEx RCCEx

+  * @brief RCC Extension HAL module driver

+  * @{

+  */

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/** @defgroup RCCEx_Private_Constants RCCEx Private Constants

+  * @{

+  */

+/**

+  * @}

+  */

+

+/* Private macro -------------------------------------------------------------*/

+/** @defgroup RCCEx_Private_Macros RCCEx Private Macros

+  * @{

+  */

+/**

+  * @}

+  */

+

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+/* Private functions ---------------------------------------------------------*/

+

+/** @defgroup RCCEx_Exported_Functions RCCEx Exported Functions

+  * @{

+  */

+

+/** @defgroup RCCEx_Exported_Functions_Group1 Extended Peripheral Control functions

+ *  @brief  Extended Peripheral Control functions

+ *

+@verbatim

+ ===============================================================================

+                ##### Extended Peripheral Control functions  #####

+ ===============================================================================

+    [..]

+    This subsection provides a set of functions allowing to control the RCC Clocks

+    frequencies.

+    [..]

+    (@) Important note: Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to

+        select the RTC clock source; in this case the Backup domain will be reset in

+        order to modify the RTC Clock source, as consequence RTC registers (including

+        the backup registers) are set to their reset values.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Initializes the RCC extended peripherals clocks according to the specified

+  *         parameters in the RCC_PeriphCLKInitTypeDef.

+  * @param  PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that

+  *         contains the configuration information for the Extended Peripherals clocks(RTC/LCD clock).

+  * @retval HAL status

+  * @note   If HAL_ERROR returned, first switch-OFF HSE clock oscillator with @ref HAL_RCC_OscConfig()

+  *         to possibly update HSE divider.

+  */

+HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit)

+{

+  uint32_t tickstart;

+  uint32_t temp_reg;

+

+  /* Check the parameters */

+  assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection));

+

+  /*------------------------------- RTC/LCD Configuration ------------------------*/

+  if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)

+#if defined(LCD)

+   || (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LCD) == RCC_PERIPHCLK_LCD)

+#endif /* LCD */

+     )

+  {

+    /* check for RTC Parameters used to output RTCCLK */

+    if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)

+    {

+      assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));

+    }

+

+#if defined(LCD)

+    if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LCD) == RCC_PERIPHCLK_LCD)

+    {

+      assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->LCDClockSelection));

+    }

+#endif /* LCD */

+

+    FlagStatus       pwrclkchanged = RESET;

+

+    /* As soon as function is called to change RTC clock source, activation of the

+       power domain is done. */

+    /* Requires to enable write access to Backup Domain of necessary */

+    if(__HAL_RCC_PWR_IS_CLK_DISABLED())

+    {

+      __HAL_RCC_PWR_CLK_ENABLE();

+      pwrclkchanged = SET;

+    }

+

+    if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP))

+    {

+      /* Enable write access to Backup domain */

+      SET_BIT(PWR->CR, PWR_CR_DBP);

+

+      /* Wait for Backup domain Write protection disable */

+      tickstart = HAL_GetTick();

+

+      while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP))

+      {

+        if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)

+        {

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+

+    /* Check if user wants to change HSE RTC prescaler whereas HSE is enabled */

+    temp_reg = (RCC->CR & RCC_CR_RTCPRE);

+    if ((temp_reg != (PeriphClkInit->RTCClockSelection & RCC_CR_RTCPRE))

+#if defined (LCD)

+     || (temp_reg != (PeriphClkInit->LCDClockSelection & RCC_CR_RTCPRE))

+#endif /* LCD */

+       )

+    { /* Check HSE State */

+      if ((PeriphClkInit->RTCClockSelection & RCC_CSR_RTCSEL) == RCC_CSR_RTCSEL_HSE)

+      {

+        if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))

+        {

+          /* To update HSE divider, first switch-OFF HSE clock oscillator*/

+          return HAL_ERROR;

+        }

+      }

+    }

+

+    /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */

+    temp_reg = (RCC->CSR & RCC_CSR_RTCSEL);

+

+    if((temp_reg != 0x00000000U) && (((temp_reg != (PeriphClkInit->RTCClockSelection & RCC_CSR_RTCSEL)) \

+      && (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC))

+#if defined(LCD)

+      || ((temp_reg != (PeriphClkInit->LCDClockSelection & RCC_CSR_RTCSEL)) \

+       && (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LCD) == RCC_PERIPHCLK_LCD))

+#endif /* LCD */

+     ))

+    {

+      /* Store the content of CSR register before the reset of Backup Domain */

+      temp_reg = (RCC->CSR & ~(RCC_CSR_RTCSEL));

+

+      /* RTC Clock selection can be changed only if the Backup Domain is reset */

+      __HAL_RCC_BACKUPRESET_FORCE();

+      __HAL_RCC_BACKUPRESET_RELEASE();

+

+      /* Restore the Content of CSR register */

+      RCC->CSR = temp_reg;

+

+       /* Wait for LSERDY if LSE was enabled */

+      if (HAL_IS_BIT_SET(temp_reg, RCC_CSR_LSEON))

+      {

+        /* Get Start Tick */

+        tickstart = HAL_GetTick();

+

+        /* Wait till LSE is ready */

+        while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)

+        {

+          if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)

+          {

+            return HAL_TIMEOUT;

+          }

+        }

+      }

+    }

+    __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);

+

+    /* Require to disable power clock if necessary */

+    if(pwrclkchanged == SET)

+    {

+      __HAL_RCC_PWR_CLK_DISABLE();

+    }

+  }

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Get the PeriphClkInit according to the internal RCC configuration registers.

+  * @param  PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that

+  *         returns the configuration information for the Extended Peripherals clocks(RTC/LCD clocks).

+  * @retval None

+  */

+void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit)

+{

+  uint32_t srcclk;

+

+  /* Set all possible values for the extended clock type parameter------------*/

+  PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_RTC;

+#if defined(LCD)

+  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_LCD;

+#endif /* LCD */

+

+  /* Get the RTC/LCD configuration -----------------------------------------------*/

+  srcclk = __HAL_RCC_GET_RTC_SOURCE();

+  if (srcclk != RCC_RTCCLKSOURCE_HSE_DIV2)

+  {

+    /* Source clock is LSE or LSI*/

+    PeriphClkInit->RTCClockSelection = srcclk;

+  }

+  else

+  {

+    /* Source clock is HSE. Need to get the prescaler value*/

+    PeriphClkInit->RTCClockSelection = srcclk | (READ_BIT(RCC->CR, RCC_CR_RTCPRE));

+  }

+#if defined(LCD)

+  PeriphClkInit->LCDClockSelection = PeriphClkInit->RTCClockSelection;

+#endif /* LCD */

+}

+

+/**

+  * @brief  Return the peripheral clock frequency

+  * @note   Return 0 if peripheral clock is unknown

+  * @param  PeriphClk Peripheral clock identifier

+  *         This parameter can be one of the following values:

+  *            @arg @ref RCC_PERIPHCLK_RTC      RTC peripheral clock

+  *            @arg @ref RCC_PERIPHCLK_LCD      LCD peripheral clock (*)

+  * @note   (*) means that this peripheral is not present on all the devices

+  * @retval Frequency in Hz (0: means that no available frequency for the peripheral)

+  */

+uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk)

+{

+  uint32_t frequency = 0;

+  uint32_t srcclk;

+

+  /* Check the parameters */

+  assert_param(IS_RCC_PERIPHCLOCK(PeriphClk));

+

+  switch (PeriphClk)

+  {

+  case RCC_PERIPHCLK_RTC:

+#if defined(LCD)

+  case RCC_PERIPHCLK_LCD:

+#endif /* LCD */

+    {

+      /* Get the current RTC source */

+      srcclk = __HAL_RCC_GET_RTC_SOURCE();

+

+      /* Check if LSE is ready if RTC clock selection is LSE */

+      if (srcclk == RCC_RTCCLKSOURCE_LSE)

+      {

+        if (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSERDY))

+        {

+          frequency = LSE_VALUE;

+        }

+      }

+      /* Check if LSI is ready if RTC clock selection is LSI */

+      else if (srcclk == RCC_RTCCLKSOURCE_LSI)

+      {

+        if (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSIRDY))

+        {

+          frequency = LSI_VALUE;

+        }

+      }

+      /* Check if HSE is ready and if RTC clock selection is HSE */

+      else if (srcclk == RCC_RTCCLKSOURCE_HSE_DIVX)

+      {

+        if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))

+        {

+          /* Get the current HSE clock divider */

+          switch (__HAL_RCC_GET_RTC_HSE_PRESCALER())

+          {

+            case RCC_RTC_HSE_DIV_16:  /* HSE DIV16 has been selected */

+            {

+              frequency = HSE_VALUE / 16U;

+              break;

+            }

+            case RCC_RTC_HSE_DIV_8:   /* HSE DIV8 has been selected  */

+            {

+              frequency = HSE_VALUE / 8U;

+              break;

+            }

+            case RCC_RTC_HSE_DIV_4:   /* HSE DIV4 has been selected  */

+            {

+              frequency = HSE_VALUE / 4U;

+              break;

+            }

+            default:                  /* HSE DIV2 has been selected  */

+            {

+              frequency = HSE_VALUE / 2U;

+              break;

+            }

+          }

+        }

+      }

+      else

+      {

+        /* No clock source, frequency default init at 0 */

+      }

+      break;

+    }

+

+  default:

+    break;

+  }

+

+  return(frequency);

+}

+

+#if defined(RCC_LSECSS_SUPPORT)

+/**

+  * @brief  Enables the LSE Clock Security System.

+  * @note   If a failure is detected on the external 32 kHz oscillator, the LSE clock is no longer supplied

+  *         to the RTC but no hardware action is made to the registers.

+  *         In Standby mode a wakeup is generated. In other modes an interrupt can be sent to wakeup

+  *         the software (see Section 5.3.4: Clock interrupt register (RCC_CIR) on page 104).

+  *         The software MUST then disable the LSECSSON bit, stop the defective 32 kHz oscillator

+  *         (disabling LSEON), and can change the RTC clock source (no clock or LSI or HSE, with

+  *         RTCSEL), or take any required action to secure the application.

+  * @note   LSE CSS available only for high density and medium+ devices

+  * @retval None

+  */

+void HAL_RCCEx_EnableLSECSS(void)

+{

+  *(__IO uint32_t *) CSR_LSECSSON_BB = (uint32_t)ENABLE;

+}

+

+/**

+  * @brief  Disables the LSE Clock Security System.

+  * @note   Once enabled this bit cannot be disabled, except after an LSE failure detection

+  *         (LSECSSD=1). In that case the software MUST disable the LSECSSON bit.

+  *         Reset by power on reset and RTC software reset (RTCRST bit).

+  * @note   LSE CSS available only for high density and medium+ devices

+  * @retval None

+  */

+void HAL_RCCEx_DisableLSECSS(void)

+{

+  /* Disable LSE CSS */

+  *(__IO uint32_t *) CSR_LSECSSON_BB = (uint32_t)DISABLE;

+

+  /* Disable LSE CSS IT */

+  __HAL_RCC_DISABLE_IT(RCC_IT_LSECSS);

+}

+

+/**

+  * @brief  Enable the LSE Clock Security System IT & corresponding EXTI line.

+  * @note   LSE Clock Security System IT is mapped on RTC EXTI line 19

+  * @retval None

+  */

+void HAL_RCCEx_EnableLSECSS_IT(void)

+{

+  /* Enable LSE CSS */

+  *(__IO uint32_t *) CSR_LSECSSON_BB = (uint32_t)ENABLE;

+

+  /* Enable LSE CSS IT */

+  __HAL_RCC_ENABLE_IT(RCC_IT_LSECSS);

+

+  /* Enable IT on EXTI Line 19 */

+  __HAL_RCC_LSECSS_EXTI_ENABLE_IT();

+  __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE();

+}

+

+/**

+  * @brief Handle the RCC LSE Clock Security System interrupt request.

+  * @retval None

+  */

+void HAL_RCCEx_LSECSS_IRQHandler(void)

+{

+  /* Check RCC LSE CSSF flag  */

+  if(__HAL_RCC_GET_IT(RCC_IT_LSECSS))

+  {

+    /* RCC LSE Clock Security System interrupt user callback */

+    HAL_RCCEx_LSECSS_Callback();

+

+    /* Clear RCC LSE CSS pending bit */

+    __HAL_RCC_CLEAR_IT(RCC_IT_LSECSS);

+  }

+}

+

+/**

+  * @brief  RCCEx LSE Clock Security System interrupt callback.

+  * @retval none

+  */

+__weak void HAL_RCCEx_LSECSS_Callback(void)

+{

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the @ref HAL_RCCEx_LSECSS_Callback should be implemented in the user file

+   */

+}

+#endif /* RCC_LSECSS_SUPPORT */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+#endif /* HAL_RCC_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_tim.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_tim.c
new file mode 100644
index 0000000..8fb3b39
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_tim.c
@@ -0,0 +1,6296 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_tim.c

+  * @author  MCD Application Team

+  * @brief   TIM HAL module driver.

+  *          This file provides firmware functions to manage the following

+  *          functionalities of the Timer (TIM) peripheral:

+  *           + TIM Time Base Initialization

+  *           + TIM Time Base Start

+  *           + TIM Time Base Start Interruption

+  *           + TIM Time Base Start DMA

+  *           + TIM Output Compare/PWM Initialization

+  *           + TIM Output Compare/PWM Channel Configuration

+  *           + TIM Output Compare/PWM  Start

+  *           + TIM Output Compare/PWM  Start Interruption

+  *           + TIM Output Compare/PWM Start DMA

+  *           + TIM Input Capture Initialization

+  *           + TIM Input Capture Channel Configuration

+  *           + TIM Input Capture Start

+  *           + TIM Input Capture Start Interruption

+  *           + TIM Input Capture Start DMA

+  *           + TIM One Pulse Initialization

+  *           + TIM One Pulse Channel Configuration

+  *           + TIM One Pulse Start

+  *           + TIM Encoder Interface Initialization

+  *           + TIM Encoder Interface Start

+  *           + TIM Encoder Interface Start Interruption

+  *           + TIM Encoder Interface Start DMA

+  *           + Commutation Event configuration with Interruption and DMA

+  *           + TIM OCRef clear configuration

+  *           + TIM External Clock configuration

+  @verbatim

+  ==============================================================================

+                      ##### TIMER Generic features #####

+  ==============================================================================

+  [..] The Timer features include:

+       (#) 16-bit up, down, up/down auto-reload counter.

+       (#) 16-bit programmable prescaler allowing dividing (also on the fly) the

+           counter clock frequency either by any factor between 1 and 65536.

+       (#) Up to 4 independent channels for:

+           (++) Input Capture

+           (++) Output Compare

+           (++) PWM generation (Edge and Center-aligned Mode)

+           (++) One-pulse mode output

+       (#) Synchronization circuit to control the timer with external signals and to interconnect

+            several timers together.

+       (#) Supports incremental encoder for positioning purposes

+

+            ##### How to use this driver #####

+  ==============================================================================

+    [..]

+     (#) Initialize the TIM low level resources by implementing the following functions

+         depending on the selected feature:

+           (++) Time Base : HAL_TIM_Base_MspInit()

+           (++) Input Capture : HAL_TIM_IC_MspInit()

+           (++) Output Compare : HAL_TIM_OC_MspInit()

+           (++) PWM generation : HAL_TIM_PWM_MspInit()

+           (++) One-pulse mode output : HAL_TIM_OnePulse_MspInit()

+           (++) Encoder mode output : HAL_TIM_Encoder_MspInit()

+

+     (#) Initialize the TIM low level resources :

+        (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE();

+        (##) TIM pins configuration

+            (+++) Enable the clock for the TIM GPIOs using the following function:

+             __HAL_RCC_GPIOx_CLK_ENABLE();

+            (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init();

+

+     (#) The external Clock can be configured, if needed (the default clock is the

+         internal clock from the APBx), using the following function:

+         HAL_TIM_ConfigClockSource, the clock configuration should be done before

+         any start function.

+

+     (#) Configure the TIM in the desired functioning mode using one of the

+       Initialization function of this driver:

+       (++) HAL_TIM_Base_Init: to use the Timer to generate a simple time base

+       (++) HAL_TIM_OC_Init and HAL_TIM_OC_ConfigChannel: to use the Timer to generate an

+            Output Compare signal.

+       (++) HAL_TIM_PWM_Init and HAL_TIM_PWM_ConfigChannel: to use the Timer to generate a

+            PWM signal.

+       (++) HAL_TIM_IC_Init and HAL_TIM_IC_ConfigChannel: to use the Timer to measure an

+            external signal.

+       (++) HAL_TIM_OnePulse_Init and HAL_TIM_OnePulse_ConfigChannel: to use the Timer

+            in One Pulse Mode.

+       (++) HAL_TIM_Encoder_Init: to use the Timer Encoder Interface.

+

+     (#) Activate the TIM peripheral using one of the start functions depending from the feature used:

+           (++) Time Base : HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(), HAL_TIM_Base_Start_IT()

+           (++) Input Capture :  HAL_TIM_IC_Start(), HAL_TIM_IC_Start_DMA(), HAL_TIM_IC_Start_IT()

+           (++) Output Compare : HAL_TIM_OC_Start(), HAL_TIM_OC_Start_DMA(), HAL_TIM_OC_Start_IT()

+           (++) PWM generation : HAL_TIM_PWM_Start(), HAL_TIM_PWM_Start_DMA(), HAL_TIM_PWM_Start_IT()

+           (++) One-pulse mode output : HAL_TIM_OnePulse_Start(), HAL_TIM_OnePulse_Start_IT()

+           (++) Encoder mode output : HAL_TIM_Encoder_Start(), HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT().

+

+     (#) The DMA Burst is managed with the two following functions:

+         HAL_TIM_DMABurst_WriteStart()

+         HAL_TIM_DMABurst_ReadStart()

+

+    *** Callback registration ***

+  =============================================

+

+  The compilation define  USE_HAL_TIM_REGISTER_CALLBACKS when set to 1

+  allows the user to configure dynamically the driver callbacks.

+

+  Use Function @ref HAL_TIM_RegisterCallback() to register a callback.

+  @ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,

+  the Callback ID and a pointer to the user callback function.

+

+  Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default

+  weak function.

+  @ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,

+  and the Callback ID.

+

+  These functions allow to register/unregister following callbacks:

+    (+) Base_MspInitCallback              : TIM Base Msp Init Callback.

+    (+) Base_MspDeInitCallback            : TIM Base Msp DeInit Callback.

+    (+) IC_MspInitCallback                : TIM IC Msp Init Callback.

+    (+) IC_MspDeInitCallback              : TIM IC Msp DeInit Callback.

+    (+) OC_MspInitCallback                : TIM OC Msp Init Callback.

+    (+) OC_MspDeInitCallback              : TIM OC Msp DeInit Callback.

+    (+) PWM_MspInitCallback               : TIM PWM Msp Init Callback.

+    (+) PWM_MspDeInitCallback             : TIM PWM Msp DeInit Callback.

+    (+) OnePulse_MspInitCallback          : TIM One Pulse Msp Init Callback.

+    (+) OnePulse_MspDeInitCallback        : TIM One Pulse Msp DeInit Callback.

+    (+) Encoder_MspInitCallback           : TIM Encoder Msp Init Callback.

+    (+) Encoder_MspDeInitCallback         : TIM Encoder Msp DeInit Callback.

+    (+) PeriodElapsedCallback             : TIM Period Elapsed Callback.

+    (+) PeriodElapsedHalfCpltCallback     : TIM Period Elapsed half complete Callback.

+    (+) TriggerCallback                   : TIM Trigger Callback.

+    (+) TriggerHalfCpltCallback           : TIM Trigger half complete Callback.

+    (+) IC_CaptureCallback                : TIM Input Capture Callback.

+    (+) IC_CaptureHalfCpltCallback        : TIM Input Capture half complete Callback.

+    (+) OC_DelayElapsedCallback           : TIM Output Compare Delay Elapsed Callback.

+    (+) PWM_PulseFinishedCallback         : TIM PWM Pulse Finished Callback.

+    (+) PWM_PulseFinishedHalfCpltCallback : TIM PWM Pulse Finished half complete Callback.

+    (+) ErrorCallback                     : TIM Error Callback.

+

+By default, after the Init and when the state is HAL_TIM_STATE_RESET

+all interrupt callbacks are set to the corresponding weak functions:

+  examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().

+

+  Exception done for MspInit and MspDeInit functions that are reset to the legacy weak

+  functionalities in the Init / DeInit only when these callbacks are null

+  (not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit

+    keep and use the user MspInit / MspDeInit callbacks(registered beforehand)

+

+    Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.

+    Exception done MspInit / MspDeInit that can be registered / unregistered

+    in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,

+    thus registered(user) MspInit / DeInit callbacks can be used during the Init / DeInit.

+  In that case first register the MspInit/MspDeInit user callbacks

+      using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.

+

+      When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or

+      not defined, the callback registration feature is not available and all callbacks

+      are set to the corresponding weak functions.

+

+  @endverbatim

+  ******************************************************************************

+    * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @defgroup TIM TIM

+  * @brief TIM HAL module driver

+  * @{

+  */

+

+#ifdef HAL_TIM_MODULE_ENABLED

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/* Private macro -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+/** @addtogroup TIM_Private_Functions

+  * @{

+  */

+static void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);

+static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);

+static void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);

+static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);

+static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);

+static void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);

+static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);

+static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,

+                              uint32_t TIM_ICFilter);

+static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);

+static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,

+                              uint32_t TIM_ICFilter);

+static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,

+                              uint32_t TIM_ICFilter);

+static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource);

+static void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler,

+                              uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter);

+static void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState);

+static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma);

+static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);

+static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);

+static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);

+static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,

+                                     TIM_SlaveConfigTypeDef *sSlaveConfig);

+/**

+  * @}

+  */

+/* Exported functions --------------------------------------------------------*/

+

+/** @defgroup TIM_Exported_Functions TIM Exported Functions

+  * @{

+  */

+

+/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions

+ *  @brief    Time Base functions

+ *

+@verbatim

+  ==============================================================================

+              ##### Time Base functions #####

+  ==============================================================================

+  [..]

+    This section provides functions allowing to:

+    (+) Initialize and configure the TIM base.

+    (+) De-initialize the TIM base.

+    (+) Start the Time Base.

+    (+) Stop the Time Base.

+    (+) Start the Time Base and enable interrupt.

+    (+) Stop the Time Base and disable interrupt.

+    (+) Start the Time Base and enable DMA transfer.

+    (+) Stop the Time Base and disable DMA transfer.

+

+@endverbatim

+  * @{

+  */

+/**

+  * @brief  Initializes the TIM Time base Unit according to the specified

+  *         parameters in the TIM_HandleTypeDef and initialize the associated handle.

+  * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)

+  *         requires a timer reset to avoid unexpected direction

+  *         due to DIR bit readonly in center aligned mode.

+  *         Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init()

+  * @param  htim TIM Base handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim)

+{

+  /* Check the TIM handle allocation */

+  if (htim == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));

+  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));

+  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));

+

+  if (htim->State == HAL_TIM_STATE_RESET)

+  {

+    /* Allocate lock resource and initialize it */

+    htim->Lock = HAL_UNLOCKED;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+    /* Reset interrupt callbacks to legacy weak callbacks */

+    TIM_ResetCallback(htim);

+

+    if (htim->Base_MspInitCallback == NULL)

+    {

+      htim->Base_MspInitCallback = HAL_TIM_Base_MspInit;

+    }

+    /* Init the low level hardware : GPIO, CLOCK, NVIC */

+    htim->Base_MspInitCallback(htim);

+#else

+    /* Init the low level hardware : GPIO, CLOCK, NVIC */

+    HAL_TIM_Base_MspInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+  }

+

+  /* Set the TIM state */

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Set the Time Base configuration */

+  TIM_Base_SetConfig(htim->Instance, &htim->Init);

+

+  /* Initialize the TIM state*/

+  htim->State = HAL_TIM_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  DeInitializes the TIM Base peripheral

+  * @param  htim TIM Base handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Disable the TIM Peripheral Clock */

+  __HAL_TIM_DISABLE(htim);

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  if (htim->Base_MspDeInitCallback == NULL)

+  {

+    htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit;

+  }

+  /* DeInit the low level hardware */

+  htim->Base_MspDeInitCallback(htim);

+#else

+  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */

+  HAL_TIM_Base_MspDeInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+  /* Change TIM state */

+  htim->State = HAL_TIM_STATE_RESET;

+

+  /* Release Lock */

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the TIM Base MSP.

+  * @param  htim TIM Base handle

+  * @retval None

+  */

+__weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_Base_MspInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  DeInitializes TIM Base MSP.

+  * @param  htim TIM Base handle

+  * @retval None

+  */

+__weak void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_Base_MspDeInit could be implemented in the user file

+   */

+}

+

+

+/**

+  * @brief  Starts the TIM Base generation.

+  * @param  htim TIM Base handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)

+{

+  uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+

+  /* Set the TIM state */

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Change the TIM state*/

+  htim->State = HAL_TIM_STATE_READY;

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Base generation.

+  * @param  htim TIM Base handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+

+  /* Set the TIM state */

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Change the TIM state*/

+  htim->State = HAL_TIM_STATE_READY;

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Starts the TIM Base generation in interrupt mode.

+  * @param  htim TIM Base handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)

+{

+  uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+

+  /* Enable the TIM Update interrupt */

+  __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Base generation in interrupt mode.

+  * @param  htim TIM Base handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+  /* Disable the TIM Update interrupt */

+  __HAL_TIM_DISABLE_IT(htim, TIM_IT_UPDATE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Starts the TIM Base generation in DMA mode.

+  * @param  htim TIM Base handle

+  * @param  pData The source Buffer address.

+  * @param  Length The length of data to be transferred from memory to peripheral.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length)

+{

+  uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));

+

+  if ((htim->State == HAL_TIM_STATE_BUSY))

+  {

+    return HAL_BUSY;

+  }

+  else if ((htim->State == HAL_TIM_STATE_READY))

+  {

+    if ((pData == NULL) && (Length > 0U))

+    {

+      return HAL_ERROR;

+    }

+    else

+    {

+      htim->State = HAL_TIM_STATE_BUSY;

+    }

+  }

+  else

+  {

+    /* nothing to do */

+  }

+

+  /* Set the DMA Period elapsed callbacks */

+  htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt;

+  htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;

+

+  /* Set the DMA error callback */

+  htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ;

+

+  /* Enable the DMA channel */

+  if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)pData, (uint32_t)&htim->Instance->ARR, Length) != HAL_OK)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Enable the TIM Update DMA request */

+  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_UPDATE);

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Base generation in DMA mode.

+  * @param  htim TIM Base handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));

+

+  /* Disable the TIM Update DMA request */

+  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_UPDATE);

+

+  (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Change the htim state */

+  htim->State = HAL_TIM_STATE_READY;

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions

+ *  @brief    TIM Output Compare functions

+ *

+@verbatim

+  ==============================================================================

+                  ##### TIM Output Compare functions #####

+  ==============================================================================

+  [..]

+    This section provides functions allowing to:

+    (+) Initialize and configure the TIM Output Compare.

+    (+) De-initialize the TIM Output Compare.

+    (+) Start the TIM Output Compare.

+    (+) Stop the TIM Output Compare.

+    (+) Start the TIM Output Compare and enable interrupt.

+    (+) Stop the TIM Output Compare and disable interrupt.

+    (+) Start the TIM Output Compare and enable DMA transfer.

+    (+) Stop the TIM Output Compare and disable DMA transfer.

+

+@endverbatim

+  * @{

+  */

+/**

+  * @brief  Initializes the TIM Output Compare according to the specified

+  *         parameters in the TIM_HandleTypeDef and initializes the associated handle.

+  * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)

+  *         requires a timer reset to avoid unexpected direction

+  *         due to DIR bit readonly in center aligned mode.

+  *         Ex: call @ref HAL_TIM_OC_DeInit() before HAL_TIM_OC_Init()

+  * @param  htim TIM Output Compare handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim)

+{

+  /* Check the TIM handle allocation */

+  if (htim == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));

+  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));

+  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));

+

+  if (htim->State == HAL_TIM_STATE_RESET)

+  {

+    /* Allocate lock resource and initialize it */

+    htim->Lock = HAL_UNLOCKED;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+    /* Reset interrupt callbacks to legacy weak callbacks */

+    TIM_ResetCallback(htim);

+

+    if (htim->OC_MspInitCallback == NULL)

+    {

+      htim->OC_MspInitCallback = HAL_TIM_OC_MspInit;

+    }

+    /* Init the low level hardware : GPIO, CLOCK, NVIC */

+    htim->OC_MspInitCallback(htim);

+#else

+    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */

+    HAL_TIM_OC_MspInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+  }

+

+  /* Set the TIM state */

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Init the base time for the Output Compare */

+  TIM_Base_SetConfig(htim->Instance,  &htim->Init);

+

+  /* Initialize the TIM state*/

+  htim->State = HAL_TIM_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  DeInitializes the TIM peripheral

+  * @param  htim TIM Output Compare handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Disable the TIM Peripheral Clock */

+  __HAL_TIM_DISABLE(htim);

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  if (htim->OC_MspDeInitCallback == NULL)

+  {

+    htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit;

+  }

+  /* DeInit the low level hardware */

+  htim->OC_MspDeInitCallback(htim);

+#else

+  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */

+  HAL_TIM_OC_MspDeInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+  /* Change TIM state */

+  htim->State = HAL_TIM_STATE_RESET;

+

+  /* Release Lock */

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the TIM Output Compare MSP.

+  * @param  htim TIM Output Compare handle

+  * @retval None

+  */

+__weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_OC_MspInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  DeInitializes TIM Output Compare MSP.

+  * @param  htim TIM Output Compare handle

+  * @retval None

+  */

+__weak void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_OC_MspDeInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Starts the TIM Output Compare signal generation.

+  * @param  htim TIM Output Compare handle

+  * @param  Channel TIM Channel to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  /* Enable the Output compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Output Compare signal generation.

+  * @param  htim TIM Output Compare handle

+  * @param  Channel TIM Channel to be disabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  /* Disable the Output compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Starts the TIM Output Compare signal generation in interrupt mode.

+  * @param  htim TIM Output Compare handle

+  * @param  Channel TIM Channel to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Enable the TIM Capture/Compare 1 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Enable the TIM Capture/Compare 2 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Enable the TIM Capture/Compare 3 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Enable the TIM Capture/Compare 4 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  /* Enable the Output compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Output Compare signal generation in interrupt mode.

+  * @param  htim TIM Output Compare handle

+  * @param  Channel TIM Channel to be disabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Disable the TIM Capture/Compare 1 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Disable the TIM Capture/Compare 2 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Disable the TIM Capture/Compare 3 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Disable the TIM Capture/Compare 4 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  /* Disable the Output compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Starts the TIM Output Compare signal generation in DMA mode.

+  * @param  htim TIM Output Compare handle

+  * @param  Channel TIM Channel to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @param  pData The source Buffer address.

+  * @param  Length The length of data to be transferred from memory to TIM peripheral

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)

+{

+   uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  if ((htim->State == HAL_TIM_STATE_BUSY))

+  {

+    return HAL_BUSY;

+  }

+  else if ((htim->State == HAL_TIM_STATE_READY))

+  {

+    if ((pData == NULL) && (Length > 0U))

+    {

+      return HAL_ERROR;

+    }

+    else

+    {

+      htim->State = HAL_TIM_STATE_BUSY;

+    }

+  }

+  else

+  {

+    /* nothing to do */

+  }

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+

+      /* Enable the TIM Capture/Compare 1 DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+

+      /* Enable the TIM Capture/Compare 2 DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the TIM Capture/Compare 3 DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the TIM Capture/Compare 4 DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  /* Enable the Output compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Output Compare signal generation in DMA mode.

+  * @param  htim TIM Output Compare handle

+  * @param  Channel TIM Channel to be disabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Disable the TIM Capture/Compare 1 DMA request */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Disable the TIM Capture/Compare 2 DMA request */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Disable the TIM Capture/Compare 3 DMA request */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Disable the TIM Capture/Compare 4 interrupt */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  /* Disable the Output compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Change the htim state */

+  htim->State = HAL_TIM_STATE_READY;

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions

+ *  @brief    TIM PWM functions

+ *

+@verbatim

+  ==============================================================================

+                          ##### TIM PWM functions #####

+  ==============================================================================

+  [..]

+    This section provides functions allowing to:

+    (+) Initialize and configure the TIM PWM.

+    (+) De-initialize the TIM PWM.

+    (+) Start the TIM PWM.

+    (+) Stop the TIM PWM.

+    (+) Start the TIM PWM and enable interrupt.

+    (+) Stop the TIM PWM and disable interrupt.

+    (+) Start the TIM PWM and enable DMA transfer.

+    (+) Stop the TIM PWM and disable DMA transfer.

+

+@endverbatim

+  * @{

+  */

+/**

+  * @brief  Initializes the TIM PWM Time Base according to the specified

+  *         parameters in the TIM_HandleTypeDef and initializes the associated handle.

+  * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)

+  *         requires a timer reset to avoid unexpected direction

+  *         due to DIR bit readonly in center aligned mode.

+  *         Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init()

+  * @param  htim TIM PWM handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim)

+{

+  /* Check the TIM handle allocation */

+  if (htim == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));

+  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));

+  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));

+

+  if (htim->State == HAL_TIM_STATE_RESET)

+  {

+    /* Allocate lock resource and initialize it */

+    htim->Lock = HAL_UNLOCKED;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+    /* Reset interrupt callbacks to legacy weak callbacks */

+    TIM_ResetCallback(htim);

+

+    if (htim->PWM_MspInitCallback == NULL)

+    {

+      htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit;

+    }

+    /* Init the low level hardware : GPIO, CLOCK, NVIC */

+    htim->PWM_MspInitCallback(htim);

+#else

+    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */

+    HAL_TIM_PWM_MspInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+  }

+

+  /* Set the TIM state */

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Init the base time for the PWM */

+  TIM_Base_SetConfig(htim->Instance, &htim->Init);

+

+  /* Initialize the TIM state*/

+  htim->State = HAL_TIM_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  DeInitializes the TIM peripheral

+  * @param  htim TIM PWM handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Disable the TIM Peripheral Clock */

+  __HAL_TIM_DISABLE(htim);

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  if (htim->PWM_MspDeInitCallback == NULL)

+  {

+    htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit;

+  }

+  /* DeInit the low level hardware */

+  htim->PWM_MspDeInitCallback(htim);

+#else

+  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */

+  HAL_TIM_PWM_MspDeInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+  /* Change TIM state */

+  htim->State = HAL_TIM_STATE_RESET;

+

+  /* Release Lock */

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the TIM PWM MSP.

+  * @param  htim TIM PWM handle

+  * @retval None

+  */

+__weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_PWM_MspInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  DeInitializes TIM PWM MSP.

+  * @param  htim TIM PWM handle

+  * @retval None

+  */

+__weak void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_PWM_MspDeInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Starts the PWM signal generation.

+  * @param  htim TIM handle

+  * @param  Channel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  /* Enable the Capture compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the PWM signal generation.

+  * @param  htim TIM PWM handle

+  * @param  Channel TIM Channels to be disabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  /* Disable the Capture compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Change the htim state */

+  htim->State = HAL_TIM_STATE_READY;

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Starts the PWM signal generation in interrupt mode.

+  * @param  htim TIM PWM handle

+  * @param  Channel TIM Channel to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  uint32_t tmpsmcr;

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Enable the TIM Capture/Compare 1 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Enable the TIM Capture/Compare 2 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Enable the TIM Capture/Compare 3 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Enable the TIM Capture/Compare 4 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  /* Enable the Capture compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the PWM signal generation in interrupt mode.

+  * @param  htim TIM PWM handle

+  * @param  Channel TIM Channels to be disabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Disable the TIM Capture/Compare 1 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Disable the TIM Capture/Compare 2 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Disable the TIM Capture/Compare 3 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Disable the TIM Capture/Compare 4 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  /* Disable the Capture compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Starts the TIM PWM signal generation in DMA mode.

+  * @param  htim TIM PWM handle

+  * @param  Channel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @param  pData The source Buffer address.

+  * @param  Length The length of data to be transferred from memory to TIM peripheral

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)

+{

+  uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  if ((htim->State == HAL_TIM_STATE_BUSY))

+  {

+    return HAL_BUSY;

+  }

+  else if ((htim->State == HAL_TIM_STATE_READY))

+  {

+    if ((pData == NULL) && (Length > 0U))

+    {

+      return HAL_ERROR;

+    }

+    else

+    {

+      htim->State = HAL_TIM_STATE_BUSY;

+    }

+  }

+  else

+  {

+    /* nothing to do */

+  }

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+

+      /* Enable the TIM Capture/Compare 1 DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the TIM Capture/Compare 2 DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the TIM Output Capture/Compare 3 request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the TIM Capture/Compare 4 DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  /* Enable the Capture compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM PWM signal generation in DMA mode.

+  * @param  htim TIM PWM handle

+  * @param  Channel TIM Channels to be disabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Disable the TIM Capture/Compare 1 DMA request */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Disable the TIM Capture/Compare 2 DMA request */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Disable the TIM Capture/Compare 3 DMA request */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Disable the TIM Capture/Compare 4 interrupt */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  /* Disable the Capture compare channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Change the htim state */

+  htim->State = HAL_TIM_STATE_READY;

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions

+ *  @brief    TIM Input Capture functions

+ *

+@verbatim

+  ==============================================================================

+              ##### TIM Input Capture functions #####

+  ==============================================================================

+ [..]

+   This section provides functions allowing to:

+   (+) Initialize and configure the TIM Input Capture.

+   (+) De-initialize the TIM Input Capture.

+   (+) Start the TIM Input Capture.

+   (+) Stop the TIM Input Capture.

+   (+) Start the TIM Input Capture and enable interrupt.

+   (+) Stop the TIM Input Capture and disable interrupt.

+   (+) Start the TIM Input Capture and enable DMA transfer.

+   (+) Stop the TIM Input Capture and disable DMA transfer.

+

+@endverbatim

+  * @{

+  */

+/**

+  * @brief  Initializes the TIM Input Capture Time base according to the specified

+  *         parameters in the TIM_HandleTypeDef and initializes the associated handle.

+  * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)

+  *         requires a timer reset to avoid unexpected direction

+  *         due to DIR bit readonly in center aligned mode.

+  *         Ex: call @ref HAL_TIM_IC_DeInit() before HAL_TIM_IC_Init()

+  * @param  htim TIM Input Capture handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim)

+{

+  /* Check the TIM handle allocation */

+  if (htim == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));

+  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));

+  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));

+

+  if (htim->State == HAL_TIM_STATE_RESET)

+  {

+    /* Allocate lock resource and initialize it */

+    htim->Lock = HAL_UNLOCKED;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+    /* Reset interrupt callbacks to legacy weak callbacks */

+    TIM_ResetCallback(htim);

+

+    if (htim->IC_MspInitCallback == NULL)

+    {

+      htim->IC_MspInitCallback = HAL_TIM_IC_MspInit;

+    }

+    /* Init the low level hardware : GPIO, CLOCK, NVIC */

+    htim->IC_MspInitCallback(htim);

+#else

+    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */

+    HAL_TIM_IC_MspInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+  }

+

+  /* Set the TIM state */

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Init the base time for the input capture */

+  TIM_Base_SetConfig(htim->Instance, &htim->Init);

+

+  /* Initialize the TIM state*/

+  htim->State = HAL_TIM_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  DeInitializes the TIM peripheral

+  * @param  htim TIM Input Capture handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Disable the TIM Peripheral Clock */

+  __HAL_TIM_DISABLE(htim);

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  if (htim->IC_MspDeInitCallback == NULL)

+  {

+    htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit;

+  }

+  /* DeInit the low level hardware */

+  htim->IC_MspDeInitCallback(htim);

+#else

+  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */

+  HAL_TIM_IC_MspDeInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+  /* Change TIM state */

+  htim->State = HAL_TIM_STATE_RESET;

+

+  /* Release Lock */

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the TIM Input Capture MSP.

+  * @param  htim TIM Input Capture handle

+  * @retval None

+  */

+__weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_IC_MspInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  DeInitializes TIM Input Capture MSP.

+  * @param  htim TIM handle

+  * @retval None

+  */

+__weak void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_IC_MspDeInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Starts the TIM Input Capture measurement.

+  * @param  htim TIM Input Capture handle

+  * @param  Channel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  /* Enable the Input Capture channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Input Capture measurement.

+  * @param  htim TIM Input Capture handle

+  * @param  Channel TIM Channels to be disabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  /* Disable the Input Capture channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Starts the TIM Input Capture measurement in interrupt mode.

+  * @param  htim TIM Input Capture handle

+  * @param  Channel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Enable the TIM Capture/Compare 1 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Enable the TIM Capture/Compare 2 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Enable the TIM Capture/Compare 3 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Enable the TIM Capture/Compare 4 interrupt */

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);

+      break;

+    }

+

+    default:

+      break;

+  }

+  /* Enable the Input Capture channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Input Capture measurement in interrupt mode.

+  * @param  htim TIM Input Capture handle

+  * @param  Channel TIM Channels to be disabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Disable the TIM Capture/Compare 1 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Disable the TIM Capture/Compare 2 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Disable the TIM Capture/Compare 3 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Disable the TIM Capture/Compare 4 interrupt */

+      __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  /* Disable the Input Capture channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Starts the TIM Input Capture measurement in DMA mode.

+  * @param  htim TIM Input Capture handle

+  * @param  Channel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @param  pData The destination Buffer address.

+  * @param  Length The length of data to be transferred from TIM peripheral to memory.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)

+{

+  uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+  assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));

+

+  if ((htim->State == HAL_TIM_STATE_BUSY))

+  {

+    return HAL_BUSY;

+  }

+  else if ((htim->State == HAL_TIM_STATE_READY))

+  {

+    if ((pData == NULL) && (Length > 0U))

+    {

+      return HAL_ERROR;

+    }

+    else

+    {

+      htim->State = HAL_TIM_STATE_BUSY;

+    }

+  }

+  else

+  {

+    /* nothing to do */

+  }

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Set the DMA capture callbacks */

+      htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the TIM Capture/Compare 1 DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Set the DMA capture callbacks */

+      htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the TIM Capture/Compare 2  DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Set the DMA capture callbacks */

+      htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->CCR3, (uint32_t)pData, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the TIM Capture/Compare 3  DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Set the DMA capture callbacks */

+      htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->CCR4, (uint32_t)pData, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the TIM Capture/Compare 4  DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  /* Enable the Input Capture channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);

+

+  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */

+  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;

+  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))

+  {

+    __HAL_TIM_ENABLE(htim);

+  }

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Input Capture measurement in DMA mode.

+  * @param  htim TIM Input Capture handle

+  * @param  Channel TIM Channels to be disabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

+  assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Disable the TIM Capture/Compare 1 DMA request */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Disable the TIM Capture/Compare 2 DMA request */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Disable the TIM Capture/Compare 3  DMA request */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Disable the TIM Capture/Compare 4  DMA request */

+      __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);

+      (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  /* Disable the Input Capture channel */

+  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Change the htim state */

+  htim->State = HAL_TIM_STATE_READY;

+

+  /* Return function status */

+  return HAL_OK;

+}

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions

+ *  @brief    TIM One Pulse functions

+ *

+@verbatim

+  ==============================================================================

+                        ##### TIM One Pulse functions #####

+  ==============================================================================

+  [..]

+    This section provides functions allowing to:

+    (+) Initialize and configure the TIM One Pulse.

+    (+) De-initialize the TIM One Pulse.

+    (+) Start the TIM One Pulse.

+    (+) Stop the TIM One Pulse.

+    (+) Start the TIM One Pulse and enable interrupt.

+    (+) Stop the TIM One Pulse and disable interrupt.

+    (+) Start the TIM One Pulse and enable DMA transfer.

+    (+) Stop the TIM One Pulse and disable DMA transfer.

+

+@endverbatim

+  * @{

+  */

+/**

+  * @brief  Initializes the TIM One Pulse Time Base according to the specified

+  *         parameters in the TIM_HandleTypeDef and initializes the associated handle.

+  * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)

+  *         requires a timer reset to avoid unexpected direction

+  *         due to DIR bit readonly in center aligned mode.

+  *         Ex: call @ref HAL_TIM_OnePulse_DeInit() before HAL_TIM_OnePulse_Init()

+  * @param  htim TIM One Pulse handle

+  * @param  OnePulseMode Select the One pulse mode.

+  *         This parameter can be one of the following values:

+  *            @arg TIM_OPMODE_SINGLE: Only one pulse will be generated.

+  *            @arg TIM_OPMODE_REPETITIVE: Repetitive pulses will be generated.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode)

+{

+  /* Check the TIM handle allocation */

+  if (htim == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));

+  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));

+  assert_param(IS_TIM_OPM_MODE(OnePulseMode));

+  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));

+

+  if (htim->State == HAL_TIM_STATE_RESET)

+  {

+    /* Allocate lock resource and initialize it */

+    htim->Lock = HAL_UNLOCKED;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+    /* Reset interrupt callbacks to legacy weak callbacks */

+    TIM_ResetCallback(htim);

+

+    if (htim->OnePulse_MspInitCallback == NULL)

+    {

+      htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit;

+    }

+    /* Init the low level hardware : GPIO, CLOCK, NVIC */

+    htim->OnePulse_MspInitCallback(htim);

+#else

+    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */

+    HAL_TIM_OnePulse_MspInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+  }

+

+  /* Set the TIM state */

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Configure the Time base in the One Pulse Mode */

+  TIM_Base_SetConfig(htim->Instance, &htim->Init);

+

+  /* Reset the OPM Bit */

+  htim->Instance->CR1 &= ~TIM_CR1_OPM;

+

+  /* Configure the OPM Mode */

+  htim->Instance->CR1 |= OnePulseMode;

+

+  /* Initialize the TIM state*/

+  htim->State = HAL_TIM_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  DeInitializes the TIM One Pulse

+  * @param  htim TIM One Pulse handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Disable the TIM Peripheral Clock */

+  __HAL_TIM_DISABLE(htim);

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  if (htim->OnePulse_MspDeInitCallback == NULL)

+  {

+    htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit;

+  }

+  /* DeInit the low level hardware */

+  htim->OnePulse_MspDeInitCallback(htim);

+#else

+  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */

+  HAL_TIM_OnePulse_MspDeInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+  /* Change TIM state */

+  htim->State = HAL_TIM_STATE_RESET;

+

+  /* Release Lock */

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the TIM One Pulse MSP.

+  * @param  htim TIM One Pulse handle

+  * @retval None

+  */

+__weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_OnePulse_MspInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  DeInitializes TIM One Pulse MSP.

+  * @param  htim TIM One Pulse handle

+  * @retval None

+  */

+__weak void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_OnePulse_MspDeInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Starts the TIM One Pulse signal generation.

+  * @param  htim TIM One Pulse handle

+  * @param  OutputChannel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(OutputChannel);

+

+  /* Enable the Capture compare and the Input Capture channels

+    (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)

+    if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and

+    if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output

+    in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together

+

+    No need to enable the counter, it's enabled automatically by hardware

+    (the counter starts in response to a stimulus and generate a pulse */

+

+  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);

+  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM One Pulse signal generation.

+  * @param  htim TIM One Pulse handle

+  * @param  OutputChannel TIM Channels to be disable

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(OutputChannel);

+

+  /* Disable the Capture compare and the Input Capture channels

+  (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)

+  if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and

+  if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output

+  in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */

+

+  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);

+  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Starts the TIM One Pulse signal generation in interrupt mode.

+  * @param  htim TIM One Pulse handle

+  * @param  OutputChannel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(OutputChannel);

+

+  /* Enable the Capture compare and the Input Capture channels

+    (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)

+    if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and

+    if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output

+    in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together

+

+    No need to enable the counter, it's enabled automatically by hardware

+    (the counter starts in response to a stimulus and generate a pulse */

+

+  /* Enable the TIM Capture/Compare 1 interrupt */

+  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);

+

+  /* Enable the TIM Capture/Compare 2 interrupt */

+  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);

+

+  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);

+  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM One Pulse signal generation in interrupt mode.

+  * @param  htim TIM One Pulse handle

+  * @param  OutputChannel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(OutputChannel);

+

+  /* Disable the TIM Capture/Compare 1 interrupt */

+  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);

+

+  /* Disable the TIM Capture/Compare 2 interrupt */

+  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);

+

+  /* Disable the Capture compare and the Input Capture channels

+  (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)

+  if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and

+  if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output

+  in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */

+  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);

+  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions

+ *  @brief    TIM Encoder functions

+ *

+@verbatim

+  ==============================================================================

+                          ##### TIM Encoder functions #####

+  ==============================================================================

+  [..]

+    This section provides functions allowing to:

+    (+) Initialize and configure the TIM Encoder.

+    (+) De-initialize the TIM Encoder.

+    (+) Start the TIM Encoder.

+    (+) Stop the TIM Encoder.

+    (+) Start the TIM Encoder and enable interrupt.

+    (+) Stop the TIM Encoder and disable interrupt.

+    (+) Start the TIM Encoder and enable DMA transfer.

+    (+) Stop the TIM Encoder and disable DMA transfer.

+

+@endverbatim

+  * @{

+  */

+/**

+  * @brief  Initializes the TIM Encoder Interface and initialize the associated handle.

+  * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)

+  *         requires a timer reset to avoid unexpected direction

+  *         due to DIR bit readonly in center aligned mode.

+  *         Ex: call @ref HAL_TIM_Encoder_DeInit() before HAL_TIM_Encoder_Init()

+  * @note   Encoder mode and External clock mode 2 are not compatible and must not be selected together

+  *         Ex: A call for @ref HAL_TIM_Encoder_Init will erase the settings of @ref HAL_TIM_ConfigClockSource

+  *         using TIM_CLOCKSOURCE_ETRMODE2 and vice versa

+  * @param  htim TIM Encoder Interface handle

+  * @param  sConfig TIM Encoder Interface configuration structure

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim,  TIM_Encoder_InitTypeDef *sConfig)

+{

+  uint32_t tmpsmcr;

+  uint32_t tmpccmr1;

+  uint32_t tmpccer;

+

+  /* Check the TIM handle allocation */

+  if (htim == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));

+  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));

+  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));

+  assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));

+  assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));

+  assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));

+  assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));

+  assert_param(IS_TIM_IC_POLARITY(sConfig->IC2Polarity));

+  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));

+  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));

+  assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));

+  assert_param(IS_TIM_IC_FILTER(sConfig->IC2Filter));

+

+  if (htim->State == HAL_TIM_STATE_RESET)

+  {

+    /* Allocate lock resource and initialize it */

+    htim->Lock = HAL_UNLOCKED;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+    /* Reset interrupt callbacks to legacy weak callbacks */

+    TIM_ResetCallback(htim);

+

+    if (htim->Encoder_MspInitCallback == NULL)

+    {

+      htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit;

+    }

+    /* Init the low level hardware : GPIO, CLOCK, NVIC */

+    htim->Encoder_MspInitCallback(htim);

+#else

+    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */

+    HAL_TIM_Encoder_MspInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+  }

+

+  /* Set the TIM state */

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Reset the SMS and ECE bits */

+  htim->Instance->SMCR &= ~(TIM_SMCR_SMS | TIM_SMCR_ECE);

+

+  /* Configure the Time base in the Encoder Mode */

+  TIM_Base_SetConfig(htim->Instance, &htim->Init);

+

+  /* Get the TIMx SMCR register value */

+  tmpsmcr = htim->Instance->SMCR;

+

+  /* Get the TIMx CCMR1 register value */

+  tmpccmr1 = htim->Instance->CCMR1;

+

+  /* Get the TIMx CCER register value */

+  tmpccer = htim->Instance->CCER;

+

+  /* Set the encoder Mode */

+  tmpsmcr |= sConfig->EncoderMode;

+

+  /* Select the Capture Compare 1 and the Capture Compare 2 as input */

+  tmpccmr1 &= ~(TIM_CCMR1_CC1S | TIM_CCMR1_CC2S);

+  tmpccmr1 |= (sConfig->IC1Selection | (sConfig->IC2Selection << 8U));

+

+  /* Set the Capture Compare 1 and the Capture Compare 2 prescalers and filters */

+  tmpccmr1 &= ~(TIM_CCMR1_IC1PSC | TIM_CCMR1_IC2PSC);

+  tmpccmr1 &= ~(TIM_CCMR1_IC1F | TIM_CCMR1_IC2F);

+  tmpccmr1 |= sConfig->IC1Prescaler | (sConfig->IC2Prescaler << 8U);

+  tmpccmr1 |= (sConfig->IC1Filter << 4U) | (sConfig->IC2Filter << 12U);

+

+  /* Set the TI1 and the TI2 Polarities */

+  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P);

+  tmpccer &= ~(TIM_CCER_CC1NP | TIM_CCER_CC2NP);

+  tmpccer |= sConfig->IC1Polarity | (sConfig->IC2Polarity << 4U);

+

+  /* Write to TIMx SMCR */

+  htim->Instance->SMCR = tmpsmcr;

+

+  /* Write to TIMx CCMR1 */

+  htim->Instance->CCMR1 = tmpccmr1;

+

+  /* Write to TIMx CCER */

+  htim->Instance->CCER = tmpccer;

+

+  /* Initialize the TIM state*/

+  htim->State = HAL_TIM_STATE_READY;

+

+  return HAL_OK;

+}

+

+

+/**

+  * @brief  DeInitializes the TIM Encoder interface

+  * @param  htim TIM Encoder Interface handle

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Disable the TIM Peripheral Clock */

+  __HAL_TIM_DISABLE(htim);

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  if (htim->Encoder_MspDeInitCallback == NULL)

+  {

+    htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit;

+  }

+  /* DeInit the low level hardware */

+  htim->Encoder_MspDeInitCallback(htim);

+#else

+  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */

+  HAL_TIM_Encoder_MspDeInit(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+  /* Change TIM state */

+  htim->State = HAL_TIM_STATE_RESET;

+

+  /* Release Lock */

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the TIM Encoder Interface MSP.

+  * @param  htim TIM Encoder Interface handle

+  * @retval None

+  */

+__weak void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_Encoder_MspInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  DeInitializes TIM Encoder Interface MSP.

+  * @param  htim TIM Encoder Interface handle

+  * @retval None

+  */

+__weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_Encoder_MspDeInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Starts the TIM Encoder Interface.

+  * @param  htim TIM Encoder Interface handle

+  * @param  Channel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+

+  /* Enable the encoder interface channels */

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);

+      break;

+    }

+

+    default :

+    {

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);

+      break;

+    }

+  }

+  /* Enable the Peripheral */

+  __HAL_TIM_ENABLE(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Encoder Interface.

+  * @param  htim TIM Encoder Interface handle

+  * @param  Channel TIM Channels to be disabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+

+  /* Disable the Input Capture channels 1 and 2

+    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);

+      break;

+    }

+

+    default :

+    {

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);

+      break;

+    }

+  }

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Starts the TIM Encoder Interface in interrupt mode.

+  * @param  htim TIM Encoder Interface handle

+  * @param  Channel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+

+  /* Enable the encoder interface channels */

+  /* Enable the capture compare Interrupts 1 and/or 2 */

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);

+      break;

+    }

+

+    default :

+    {

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);

+      __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);

+      break;

+    }

+  }

+

+  /* Enable the Peripheral */

+  __HAL_TIM_ENABLE(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Encoder Interface in interrupt mode.

+  * @param  htim TIM Encoder Interface handle

+  * @param  Channel TIM Channels to be disabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+

+  /* Disable the Input Capture channels 1 and 2

+    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */

+  if (Channel == TIM_CHANNEL_1)

+  {

+    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);

+

+    /* Disable the capture compare Interrupts 1 */

+    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);

+  }

+  else if (Channel == TIM_CHANNEL_2)

+  {

+    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);

+

+    /* Disable the capture compare Interrupts 2 */

+    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);

+  }

+  else

+  {

+    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);

+    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);

+

+    /* Disable the capture compare Interrupts 1 and 2 */

+    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);

+    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);

+  }

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Change the htim state */

+  htim->State = HAL_TIM_STATE_READY;

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Starts the TIM Encoder Interface in DMA mode.

+  * @param  htim TIM Encoder Interface handle

+  * @param  Channel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected

+  * @param  pData1 The destination Buffer address for IC1.

+  * @param  pData2 The destination Buffer address for IC2.

+  * @param  Length The length of data to be transferred from TIM peripheral to memory.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));

+

+  if ((htim->State == HAL_TIM_STATE_BUSY))

+  {

+    return HAL_BUSY;

+  }

+  else if ((htim->State == HAL_TIM_STATE_READY))

+  {

+    if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U))

+    {

+      return HAL_ERROR;

+    }

+    else

+    {

+      htim->State = HAL_TIM_STATE_BUSY;

+    }

+  }

+  else

+  {

+    /* nothing to do */

+  }

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Set the DMA capture callbacks */

+      htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the TIM Input Capture DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);

+

+      /* Enable the Peripheral */

+      __HAL_TIM_ENABLE(htim);

+

+      /* Enable the Capture compare channel */

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Set the DMA capture callbacks */

+      htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the TIM Input Capture  DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);

+

+      /* Enable the Peripheral */

+      __HAL_TIM_ENABLE(htim);

+

+      /* Enable the Capture compare channel */

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);

+      break;

+    }

+

+    case TIM_CHANNEL_ALL:

+    {

+      /* Set the DMA capture callbacks */

+      htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+

+      /* Set the DMA capture callbacks */

+      htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, Length) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      /* Enable the Peripheral */

+      __HAL_TIM_ENABLE(htim);

+

+      /* Enable the Capture compare channel */

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);

+      TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);

+

+      /* Enable the TIM Input Capture  DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);

+      /* Enable the TIM Input Capture  DMA request */

+      __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);

+      break;

+    }

+

+    default:

+      break;

+  }

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM Encoder Interface in DMA mode.

+  * @param  htim TIM Encoder Interface handle

+  * @param  Channel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));

+

+  /* Disable the Input Capture channels 1 and 2

+    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */

+  if (Channel == TIM_CHANNEL_1)

+  {

+    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);

+

+    /* Disable the capture compare DMA Request 1 */

+    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);

+    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);

+  }

+  else if (Channel == TIM_CHANNEL_2)

+  {

+    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);

+

+    /* Disable the capture compare DMA Request 2 */

+    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);

+    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);

+  }

+  else

+  {

+    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);

+    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);

+

+    /* Disable the capture compare DMA Request 1 and 2 */

+    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);

+    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);

+    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);

+    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);

+  }

+

+  /* Disable the Peripheral */

+  __HAL_TIM_DISABLE(htim);

+

+  /* Change the htim state */

+  htim->State = HAL_TIM_STATE_READY;

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @}

+  */

+/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management

+ *  @brief    TIM IRQ handler management

+ *

+@verbatim

+  ==============================================================================

+                        ##### IRQ handler management #####

+  ==============================================================================

+  [..]

+    This section provides Timer IRQ handler function.

+

+@endverbatim

+  * @{

+  */

+/**

+  * @brief  This function handles TIM interrupts requests.

+  * @param  htim TIM  handle

+  * @retval None

+  */

+void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)

+{

+  /* Capture compare 1 event */

+  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET)

+  {

+    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) != RESET)

+    {

+      {

+        __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1);

+        htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;

+

+        /* Input capture event */

+        if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U)

+        {

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+          htim->IC_CaptureCallback(htim);

+#else

+          HAL_TIM_IC_CaptureCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+        }

+        /* Output compare event */

+        else

+        {

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+          htim->OC_DelayElapsedCallback(htim);

+          htim->PWM_PulseFinishedCallback(htim);

+#else

+          HAL_TIM_OC_DelayElapsedCallback(htim);

+          HAL_TIM_PWM_PulseFinishedCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+        }

+        htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;

+      }

+    }

+  }

+  /* Capture compare 2 event */

+  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET)

+  {

+    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) != RESET)

+    {

+      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2);

+      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;

+      /* Input capture event */

+      if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U)

+      {

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+        htim->IC_CaptureCallback(htim);

+#else

+        HAL_TIM_IC_CaptureCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+      }

+      /* Output compare event */

+      else

+      {

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+        htim->OC_DelayElapsedCallback(htim);

+        htim->PWM_PulseFinishedCallback(htim);

+#else

+        HAL_TIM_OC_DelayElapsedCallback(htim);

+        HAL_TIM_PWM_PulseFinishedCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+      }

+      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;

+    }

+  }

+  /* Capture compare 3 event */

+  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET)

+  {

+    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) != RESET)

+    {

+      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3);

+      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;

+      /* Input capture event */

+      if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U)

+      {

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+        htim->IC_CaptureCallback(htim);

+#else

+        HAL_TIM_IC_CaptureCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+      }

+      /* Output compare event */

+      else

+      {

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+        htim->OC_DelayElapsedCallback(htim);

+        htim->PWM_PulseFinishedCallback(htim);

+#else

+        HAL_TIM_OC_DelayElapsedCallback(htim);

+        HAL_TIM_PWM_PulseFinishedCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+      }

+      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;

+    }

+  }

+  /* Capture compare 4 event */

+  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET)

+  {

+    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) != RESET)

+    {

+      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4);

+      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;

+      /* Input capture event */

+      if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U)

+      {

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+        htim->IC_CaptureCallback(htim);

+#else

+        HAL_TIM_IC_CaptureCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+      }

+      /* Output compare event */

+      else

+      {

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+        htim->OC_DelayElapsedCallback(htim);

+        htim->PWM_PulseFinishedCallback(htim);

+#else

+        HAL_TIM_OC_DelayElapsedCallback(htim);

+        HAL_TIM_PWM_PulseFinishedCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+      }

+      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;

+    }

+  }

+  /* TIM Update event */

+  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET)

+  {

+    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET)

+    {

+      __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+      htim->PeriodElapsedCallback(htim);

+#else

+      HAL_TIM_PeriodElapsedCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+    }

+  }

+  /* TIM Trigger detection event */

+  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_TRIGGER) != RESET)

+  {

+    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_TRIGGER) != RESET)

+    {

+      __HAL_TIM_CLEAR_IT(htim, TIM_IT_TRIGGER);

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+      htim->TriggerCallback(htim);

+#else

+      HAL_TIM_TriggerCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+    }

+  }

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions

+ *  @brief    TIM Peripheral Control functions

+ *

+@verbatim

+  ==============================================================================

+                   ##### Peripheral Control functions #####

+  ==============================================================================

+ [..]

+   This section provides functions allowing to:

+      (+) Configure The Input Output channels for OC, PWM, IC or One Pulse mode.

+      (+) Configure External Clock source.

+      (+) Configure Master and the Slave synchronization.

+      (+) Configure the DMA Burst Mode.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Initializes the TIM Output Compare Channels according to the specified

+  *         parameters in the TIM_OC_InitTypeDef.

+  * @param  htim TIM Output Compare handle

+  * @param  sConfig TIM Output Compare configuration structure

+  * @param  Channel TIM Channels to configure

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim,

+                                           TIM_OC_InitTypeDef *sConfig,

+                                           uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CHANNELS(Channel));

+  assert_param(IS_TIM_OC_MODE(sConfig->OCMode));

+  assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity));

+

+  /* Process Locked */

+  __HAL_LOCK(htim);

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));

+

+      /* Configure the TIM Channel 1 in Output Compare */

+      TIM_OC1_SetConfig(htim->Instance, sConfig);

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+

+      /* Configure the TIM Channel 2 in Output Compare */

+      TIM_OC2_SetConfig(htim->Instance, sConfig);

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));

+

+      /* Configure the TIM Channel 3 in Output Compare */

+      TIM_OC3_SetConfig(htim->Instance, sConfig);

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));

+

+      /* Configure the TIM Channel 4 in Output Compare */

+      TIM_OC4_SetConfig(htim->Instance, sConfig);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the TIM Input Capture Channels according to the specified

+  *         parameters in the TIM_IC_InitTypeDef.

+  * @param  htim TIM IC handle

+  * @param  sConfig TIM Input Capture configuration structure

+  * @param  Channel TIM Channel to configure

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_IC_POLARITY(sConfig->ICPolarity));

+  assert_param(IS_TIM_IC_SELECTION(sConfig->ICSelection));

+  assert_param(IS_TIM_IC_PRESCALER(sConfig->ICPrescaler));

+  assert_param(IS_TIM_IC_FILTER(sConfig->ICFilter));

+

+  /* Process Locked */

+  __HAL_LOCK(htim);

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  if (Channel == TIM_CHANNEL_1)

+  {

+    /* TI1 Configuration */

+    TIM_TI1_SetConfig(htim->Instance,

+                      sConfig->ICPolarity,

+                      sConfig->ICSelection,

+                      sConfig->ICFilter);

+

+    /* Reset the IC1PSC Bits */

+    htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;

+

+    /* Set the IC1PSC value */

+    htim->Instance->CCMR1 |= sConfig->ICPrescaler;

+  }

+  else if (Channel == TIM_CHANNEL_2)

+  {

+    /* TI2 Configuration */

+    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+

+    TIM_TI2_SetConfig(htim->Instance,

+                      sConfig->ICPolarity,

+                      sConfig->ICSelection,

+                      sConfig->ICFilter);

+

+    /* Reset the IC2PSC Bits */

+    htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC;

+

+    /* Set the IC2PSC value */

+    htim->Instance->CCMR1 |= (sConfig->ICPrescaler << 8U);

+  }

+  else if (Channel == TIM_CHANNEL_3)

+  {

+    /* TI3 Configuration */

+    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));

+

+    TIM_TI3_SetConfig(htim->Instance,

+                      sConfig->ICPolarity,

+                      sConfig->ICSelection,

+                      sConfig->ICFilter);

+

+    /* Reset the IC3PSC Bits */

+    htim->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC;

+

+    /* Set the IC3PSC value */

+    htim->Instance->CCMR2 |= sConfig->ICPrescaler;

+  }

+  else

+  {

+    /* TI4 Configuration */

+    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));

+

+    TIM_TI4_SetConfig(htim->Instance,

+                      sConfig->ICPolarity,

+                      sConfig->ICSelection,

+                      sConfig->ICFilter);

+

+    /* Reset the IC4PSC Bits */

+    htim->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC;

+

+    /* Set the IC4PSC value */

+    htim->Instance->CCMR2 |= (sConfig->ICPrescaler << 8U);

+  }

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the TIM PWM  channels according to the specified

+  *         parameters in the TIM_OC_InitTypeDef.

+  * @param  htim TIM PWM handle

+  * @param  sConfig TIM PWM configuration structure

+  * @param  Channel TIM Channels to be configured

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,

+                                            TIM_OC_InitTypeDef *sConfig,

+                                            uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_CHANNELS(Channel));

+  assert_param(IS_TIM_PWM_MODE(sConfig->OCMode));

+  assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity));

+  assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode));

+

+  /* Process Locked */

+  __HAL_LOCK(htim);

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));

+

+      /* Configure the Channel 1 in PWM mode */

+      TIM_OC1_SetConfig(htim->Instance, sConfig);

+

+      /* Set the Preload enable bit for channel1 */

+      htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE;

+

+      /* Configure the Output Fast mode */

+      htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE;

+      htim->Instance->CCMR1 |= sConfig->OCFastMode;

+      break;

+    }

+

+    case TIM_CHANNEL_2:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+

+      /* Configure the Channel 2 in PWM mode */

+      TIM_OC2_SetConfig(htim->Instance, sConfig);

+

+      /* Set the Preload enable bit for channel2 */

+      htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE;

+

+      /* Configure the Output Fast mode */

+      htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE;

+      htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U;

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));

+

+      /* Configure the Channel 3 in PWM mode */

+      TIM_OC3_SetConfig(htim->Instance, sConfig);

+

+      /* Set the Preload enable bit for channel3 */

+      htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE;

+

+      /* Configure the Output Fast mode */

+      htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE;

+      htim->Instance->CCMR2 |= sConfig->OCFastMode;

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));

+

+      /* Configure the Channel 4 in PWM mode */

+      TIM_OC4_SetConfig(htim->Instance, sConfig);

+

+      /* Set the Preload enable bit for channel4 */

+      htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE;

+

+      /* Configure the Output Fast mode */

+      htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE;

+      htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U;

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the TIM One Pulse Channels according to the specified

+  *         parameters in the TIM_OnePulse_InitTypeDef.

+  * @param  htim TIM One Pulse handle

+  * @param  sConfig TIM One Pulse configuration structure

+  * @param  OutputChannel TIM output channel to configure

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  * @param  InputChannel TIM input Channel to configure

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim,  TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel,  uint32_t InputChannel)

+{

+  TIM_OC_InitTypeDef temp1;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_OPM_CHANNELS(OutputChannel));

+  assert_param(IS_TIM_OPM_CHANNELS(InputChannel));

+

+  if (OutputChannel != InputChannel)

+  {

+    /* Process Locked */

+    __HAL_LOCK(htim);

+

+    htim->State = HAL_TIM_STATE_BUSY;

+

+    /* Extract the Output compare configuration from sConfig structure */

+    temp1.OCMode = sConfig->OCMode;

+    temp1.Pulse = sConfig->Pulse;

+    temp1.OCPolarity = sConfig->OCPolarity;

+

+    switch (OutputChannel)

+    {

+      case TIM_CHANNEL_1:

+      {

+        assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));

+

+        TIM_OC1_SetConfig(htim->Instance, &temp1);

+        break;

+      }

+      case TIM_CHANNEL_2:

+      {

+        assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+

+        TIM_OC2_SetConfig(htim->Instance, &temp1);

+        break;

+      }

+      default:

+        break;

+    }

+

+    switch (InputChannel)

+    {

+      case TIM_CHANNEL_1:

+      {

+        assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));

+

+        TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity,

+                          sConfig->ICSelection, sConfig->ICFilter);

+

+        /* Reset the IC1PSC Bits */

+        htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;

+

+        /* Select the Trigger source */

+        htim->Instance->SMCR &= ~TIM_SMCR_TS;

+        htim->Instance->SMCR |= TIM_TS_TI1FP1;

+

+        /* Select the Slave Mode */

+        htim->Instance->SMCR &= ~TIM_SMCR_SMS;

+        htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER;

+        break;

+      }

+      case TIM_CHANNEL_2:

+      {

+        assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+

+        TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity,

+                          sConfig->ICSelection, sConfig->ICFilter);

+

+        /* Reset the IC2PSC Bits */

+        htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC;

+

+        /* Select the Trigger source */

+        htim->Instance->SMCR &= ~TIM_SMCR_TS;

+        htim->Instance->SMCR |= TIM_TS_TI2FP2;

+

+        /* Select the Slave Mode */

+        htim->Instance->SMCR &= ~TIM_SMCR_SMS;

+        htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER;

+        break;

+      }

+

+      default:

+        break;

+    }

+

+    htim->State = HAL_TIM_STATE_READY;

+

+    __HAL_UNLOCK(htim);

+

+    return HAL_OK;

+  }

+  else

+  {

+    return HAL_ERROR;

+  }

+}

+

+/**

+  * @brief  Configure the DMA Burst to transfer Data from the memory to the TIM peripheral

+  * @param  htim TIM handle

+  * @param  BurstBaseAddress TIM Base address from where the DMA  will start the Data write

+  *         This parameter can be one of the following values:

+  *            @arg TIM_DMABASE_CR1

+  *            @arg TIM_DMABASE_CR2

+  *            @arg TIM_DMABASE_SMCR

+  *            @arg TIM_DMABASE_DIER

+  *            @arg TIM_DMABASE_SR

+  *            @arg TIM_DMABASE_EGR

+  *            @arg TIM_DMABASE_CCMR1

+  *            @arg TIM_DMABASE_CCMR2

+  *            @arg TIM_DMABASE_CCER

+  *            @arg TIM_DMABASE_CNT

+  *            @arg TIM_DMABASE_PSC

+  *            @arg TIM_DMABASE_ARR

+  *            @arg TIM_DMABASE_CCR1

+  *            @arg TIM_DMABASE_CCR2

+  *            @arg TIM_DMABASE_CCR3

+  *            @arg TIM_DMABASE_CCR4

+  *            @arg TIM_DMABASE_OR

+  * @param  BurstRequestSrc TIM DMA Request sources

+  *         This parameter can be one of the following values:

+  *            @arg TIM_DMA_UPDATE: TIM update Interrupt source

+  *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source

+  *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source

+  *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source

+  *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source

+  *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source

+  * @param  BurstBuffer The Buffer address.

+  * @param  BurstLength DMA Burst length. This parameter can be one value

+  *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.

+  * @note   This function should be used only when BurstLength is equal to DMA data transfer length.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc,

+                                              uint32_t *BurstBuffer, uint32_t  BurstLength)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_DMA_BASE(BurstBaseAddress));

+  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));

+  assert_param(IS_TIM_DMA_LENGTH(BurstLength));

+

+  if ((htim->State == HAL_TIM_STATE_BUSY))

+  {

+    return HAL_BUSY;

+  }

+  else if ((htim->State == HAL_TIM_STATE_READY))

+  {

+    if ((BurstBuffer == NULL) && (BurstLength > 0U))

+    {

+      return HAL_ERROR;

+    }

+    else

+    {

+      htim->State = HAL_TIM_STATE_BUSY;

+    }

+  }

+  else

+  {

+    /* nothing to do */

+  }

+  switch (BurstRequestSrc)

+  {

+    case TIM_DMA_UPDATE:

+    {

+      /* Set the DMA Period elapsed callbacks */

+      htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt;

+      htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    case TIM_DMA_CC1:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    case TIM_DMA_CC2:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    case TIM_DMA_CC3:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    case TIM_DMA_CC4:

+    {

+      /* Set the DMA compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt;

+      htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    case TIM_DMA_TRIGGER:

+    {

+      /* Set the DMA trigger callbacks */

+      htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt;

+      htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    default:

+      break;

+  }

+  /* configure the DMA Burst Mode */

+  htim->Instance->DCR = (BurstBaseAddress | BurstLength);

+

+  /* Enable the TIM DMA Request */

+  __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc);

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stops the TIM DMA Burst mode

+  * @param  htim TIM handle

+  * @param  BurstRequestSrc TIM DMA Request sources to disable

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+  /* Check the parameters */

+  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));

+

+  /* Abort the DMA transfer (at least disable the DMA channel) */

+  switch (BurstRequestSrc)

+  {

+    case TIM_DMA_UPDATE:

+    {

+      status = HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);

+      break;

+    }

+    case TIM_DMA_CC1:

+    {

+      status = HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);

+      break;

+    }

+    case TIM_DMA_CC2:

+    {

+      status = HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);

+      break;

+    }

+    case TIM_DMA_CC3:

+    {

+      status =  HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);

+      break;

+    }

+    case TIM_DMA_CC4:

+    {

+      status = HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);

+      break;

+    }

+    case TIM_DMA_TRIGGER:

+    {

+      status = HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]);

+      break;

+    }

+    default:

+      break;

+  }

+

+  if (HAL_OK == status)

+  {

+    /* Disable the TIM Update DMA request */

+    __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc);

+  }

+

+  /* Return function status */

+  return status;

+}

+

+/**

+  * @brief  Configure the DMA Burst to transfer Data from the TIM peripheral to the memory

+  * @param  htim TIM handle

+  * @param  BurstBaseAddress TIM Base address from where the DMA  will start the Data read

+  *         This parameter can be one of the following values:

+  *            @arg TIM_DMABASE_CR1

+  *            @arg TIM_DMABASE_CR2

+  *            @arg TIM_DMABASE_SMCR

+  *            @arg TIM_DMABASE_DIER

+  *            @arg TIM_DMABASE_SR

+  *            @arg TIM_DMABASE_EGR

+  *            @arg TIM_DMABASE_CCMR1

+  *            @arg TIM_DMABASE_CCMR2

+  *            @arg TIM_DMABASE_CCER

+  *            @arg TIM_DMABASE_CNT

+  *            @arg TIM_DMABASE_PSC

+  *            @arg TIM_DMABASE_ARR

+  *            @arg TIM_DMABASE_CCR1

+  *            @arg TIM_DMABASE_CCR2

+  *            @arg TIM_DMABASE_CCR3

+  *            @arg TIM_DMABASE_CCR4

+  *            @arg TIM_DMABASE_OR

+  * @param  BurstRequestSrc TIM DMA Request sources

+  *         This parameter can be one of the following values:

+  *            @arg TIM_DMA_UPDATE: TIM update Interrupt source

+  *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source

+  *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source

+  *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source

+  *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source

+  *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source

+  * @param  BurstBuffer The Buffer address.

+  * @param  BurstLength DMA Burst length. This parameter can be one value

+  *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.

+  * @note   This function should be used only when BurstLength is equal to DMA data transfer length.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc,

+                                             uint32_t  *BurstBuffer, uint32_t  BurstLength)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_DMA_BASE(BurstBaseAddress));

+  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));

+  assert_param(IS_TIM_DMA_LENGTH(BurstLength));

+

+  if ((htim->State == HAL_TIM_STATE_BUSY))

+  {

+    return HAL_BUSY;

+  }

+  else if ((htim->State == HAL_TIM_STATE_READY))

+  {

+    if ((BurstBuffer == NULL) && (BurstLength > 0U))

+    {

+      return HAL_ERROR;

+    }

+    else

+    {

+      htim->State = HAL_TIM_STATE_BUSY;

+    }

+  }

+  else

+  {

+    /* nothing to do */

+  }

+  switch (BurstRequestSrc)

+  {

+    case TIM_DMA_UPDATE:

+    {

+      /* Set the DMA Period elapsed callbacks */

+      htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt;

+      htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    case TIM_DMA_CC1:

+    {

+      /* Set the DMA capture callbacks */

+      htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    case TIM_DMA_CC2:

+    {

+      /* Set the DMA capture/compare callbacks */

+      htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    case TIM_DMA_CC3:

+    {

+      /* Set the DMA capture callbacks */

+      htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    case TIM_DMA_CC4:

+    {

+      /* Set the DMA capture callbacks */

+      htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt;

+      htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    case TIM_DMA_TRIGGER:

+    {

+      /* Set the DMA trigger callbacks */

+      htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt;

+      htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt;

+

+      /* Set the DMA error callback */

+      htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ;

+

+      /* Enable the DMA channel */

+      if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, ((BurstLength) >> 8U) + 1U) != HAL_OK)

+      {

+        return HAL_ERROR;

+      }

+      break;

+    }

+    default:

+      break;

+  }

+

+  /* configure the DMA Burst Mode */

+  htim->Instance->DCR = (BurstBaseAddress | BurstLength);

+

+  /* Enable the TIM DMA Request */

+  __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc);

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Stop the DMA burst reading

+  * @param  htim TIM handle

+  * @param  BurstRequestSrc TIM DMA Request sources to disable.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+  /* Check the parameters */

+  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));

+

+  /* Abort the DMA transfer (at least disable the DMA channel) */

+  switch (BurstRequestSrc)

+  {

+    case TIM_DMA_UPDATE:

+    {

+      status = HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);

+      break;

+    }

+    case TIM_DMA_CC1:

+    {

+      status = HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);

+      break;

+    }

+    case TIM_DMA_CC2:

+    {

+      status = HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);

+      break;

+    }

+    case TIM_DMA_CC3:

+    {

+      status = HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);

+      break;

+    }

+    case TIM_DMA_CC4:

+    {

+      status = HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);

+      break;

+    }

+    case TIM_DMA_TRIGGER:

+    {

+      status = HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]);

+      break;

+    }

+    default:

+      break;

+  }

+

+  if (HAL_OK == status)

+  {

+    /* Disable the TIM Update DMA request */

+    __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc);

+  }

+

+  /* Return function status */

+  return status;

+}

+

+/**

+  * @brief  Generate a software event

+  * @param  htim TIM handle

+  * @param  EventSource specifies the event source.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_EVENTSOURCE_UPDATE: Timer update Event source

+  *            @arg TIM_EVENTSOURCE_CC1: Timer Capture Compare 1 Event source

+  *            @arg TIM_EVENTSOURCE_CC2: Timer Capture Compare 2 Event source

+  *            @arg TIM_EVENTSOURCE_CC3: Timer Capture Compare 3 Event source

+  *            @arg TIM_EVENTSOURCE_CC4: Timer Capture Compare 4 Event source

+  *            @arg TIM_EVENTSOURCE_TRIGGER: Timer Trigger Event source

+  * @note   Basic timers can only generate an update event.

+  * @retval HAL status

+  */

+

+HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_EVENT_SOURCE(EventSource));

+

+  /* Process Locked */

+  __HAL_LOCK(htim);

+

+  /* Change the TIM state */

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Set the event sources */

+  htim->Instance->EGR = EventSource;

+

+  /* Change the TIM state */

+  htim->State = HAL_TIM_STATE_READY;

+

+  __HAL_UNLOCK(htim);

+

+  /* Return function status */

+  return HAL_OK;

+}

+

+/**

+  * @brief  Configures the OCRef clear feature

+  * @param  htim TIM handle

+  * @param  sClearInputConfig pointer to a TIM_ClearInputConfigTypeDef structure that

+  *         contains the OCREF clear feature and parameters for the TIM peripheral.

+  * @param  Channel specifies the TIM Channel

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1

+  *            @arg TIM_CHANNEL_2: TIM Channel 2

+  *            @arg TIM_CHANNEL_3: TIM Channel 3

+  *            @arg TIM_CHANNEL_4: TIM Channel 4

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim,

+                                           TIM_ClearInputConfigTypeDef *sClearInputConfig,

+                                           uint32_t Channel)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_OCXREF_CLEAR_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_CLEARINPUT_SOURCE(sClearInputConfig->ClearInputSource));

+

+  /* Process Locked */

+  __HAL_LOCK(htim);

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  switch (sClearInputConfig->ClearInputSource)

+  {

+    case TIM_CLEARINPUTSOURCE_NONE:

+    {

+      /* Clear the OCREF clear selection bit and the the ETR Bits */

+      CLEAR_BIT(htim->Instance->SMCR, (TIM_SMCR_OCCS | TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP));

+      break;

+    }

+    case TIM_CLEARINPUTSOURCE_OCREFCLR:

+    {

+      /* Clear the OCREF clear selection bit */

+      CLEAR_BIT(htim->Instance->SMCR, TIM_SMCR_OCCS);

+    }

+    break;

+

+    case TIM_CLEARINPUTSOURCE_ETR:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CLEARINPUT_POLARITY(sClearInputConfig->ClearInputPolarity));

+      assert_param(IS_TIM_CLEARINPUT_PRESCALER(sClearInputConfig->ClearInputPrescaler));

+      assert_param(IS_TIM_CLEARINPUT_FILTER(sClearInputConfig->ClearInputFilter));

+

+      /* When OCRef clear feature is used with ETR source, ETR prescaler must be off */

+      if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1)

+      {

+          htim->State = HAL_TIM_STATE_READY;

+        __HAL_UNLOCK(htim);

+        return HAL_ERROR;

+      }

+

+      TIM_ETR_SetConfig(htim->Instance,

+                        sClearInputConfig->ClearInputPrescaler,

+                        sClearInputConfig->ClearInputPolarity,

+                        sClearInputConfig->ClearInputFilter);

+

+      /* Set the OCREF clear selection bit */

+      SET_BIT(htim->Instance->SMCR, TIM_SMCR_OCCS);

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE)

+      {

+        /* Enable the OCREF clear feature for Channel 1 */

+        SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE);

+      }

+      else

+      {

+        /* Disable the OCREF clear feature for Channel 1 */

+        CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE);

+      }

+      break;

+    }

+    case TIM_CHANNEL_2:

+    {

+      if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE)

+      {

+        /* Enable the OCREF clear feature for Channel 2 */

+        SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE);

+      }

+      else

+      {

+        /* Disable the OCREF clear feature for Channel 2 */

+        CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE);

+      }

+      break;

+    }

+    case TIM_CHANNEL_3:

+    {

+      if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE)

+      {

+        /* Enable the OCREF clear feature for Channel 3 */

+        SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE);

+      }

+      else

+      {

+        /* Disable the OCREF clear feature for Channel 3 */

+        CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE);

+      }

+      break;

+    }

+    case TIM_CHANNEL_4:

+    {

+      if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE)

+      {

+        /* Enable the OCREF clear feature for Channel 4 */

+        SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE);

+      }

+      else

+      {

+        /* Disable the OCREF clear feature for Channel 4 */

+        CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE);

+      }

+      break;

+    }

+    default:

+      break;

+  }

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief   Configures the clock source to be used

+  * @param  htim TIM handle

+  * @param  sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that

+  *         contains the clock source information for the TIM peripheral.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig)

+{

+  uint32_t tmpsmcr;

+

+  /* Process Locked */

+  __HAL_LOCK(htim);

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource));

+

+  /* Reset the SMS, TS, ECE, ETPS and ETRF bits */

+  tmpsmcr = htim->Instance->SMCR;

+  tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS);

+  tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);

+  htim->Instance->SMCR = tmpsmcr;

+

+  switch (sClockSourceConfig->ClockSource)

+  {

+    case TIM_CLOCKSOURCE_INTERNAL:

+    {

+      assert_param(IS_TIM_INSTANCE(htim->Instance));

+      break;

+    }

+

+    case TIM_CLOCKSOURCE_ETRMODE1:

+    {

+      /* Check whether or not the timer instance supports external trigger input mode 1 (ETRF)*/

+      assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance));

+

+      /* Check ETR input conditioning related parameters */

+      assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));

+      assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));

+      assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));

+

+      /* Configure the ETR Clock source */

+      TIM_ETR_SetConfig(htim->Instance,

+                        sClockSourceConfig->ClockPrescaler,

+                        sClockSourceConfig->ClockPolarity,

+                        sClockSourceConfig->ClockFilter);

+

+      /* Select the External clock mode1 and the ETRF trigger */

+      tmpsmcr = htim->Instance->SMCR;

+      tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1);

+      /* Write to TIMx SMCR */

+      htim->Instance->SMCR = tmpsmcr;

+      break;

+    }

+

+    case TIM_CLOCKSOURCE_ETRMODE2:

+    {

+      /* Check whether or not the timer instance supports external trigger input mode 2 (ETRF)*/

+      assert_param(IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(htim->Instance));

+

+      /* Check ETR input conditioning related parameters */

+      assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));

+      assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));

+      assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));

+

+      /* Configure the ETR Clock source */

+      TIM_ETR_SetConfig(htim->Instance,

+                        sClockSourceConfig->ClockPrescaler,

+                        sClockSourceConfig->ClockPolarity,

+                        sClockSourceConfig->ClockFilter);

+      /* Enable the External clock mode2 */

+      htim->Instance->SMCR |= TIM_SMCR_ECE;

+      break;

+    }

+

+    case TIM_CLOCKSOURCE_TI1:

+    {

+      /* Check whether or not the timer instance supports external clock mode 1 */

+      assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));

+

+      /* Check TI1 input conditioning related parameters */

+      assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));

+      assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));

+

+      TIM_TI1_ConfigInputStage(htim->Instance,

+                               sClockSourceConfig->ClockPolarity,

+                               sClockSourceConfig->ClockFilter);

+      TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1);

+      break;

+    }

+

+    case TIM_CLOCKSOURCE_TI2:

+    {

+      /* Check whether or not the timer instance supports external clock mode 1 (ETRF)*/

+      assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));

+

+      /* Check TI2 input conditioning related parameters */

+      assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));

+      assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));

+

+      TIM_TI2_ConfigInputStage(htim->Instance,

+                               sClockSourceConfig->ClockPolarity,

+                               sClockSourceConfig->ClockFilter);

+      TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2);

+      break;

+    }

+

+    case TIM_CLOCKSOURCE_TI1ED:

+    {

+      /* Check whether or not the timer instance supports external clock mode 1 */

+      assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));

+

+      /* Check TI1 input conditioning related parameters */

+      assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));

+      assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));

+

+      TIM_TI1_ConfigInputStage(htim->Instance,

+                               sClockSourceConfig->ClockPolarity,

+                               sClockSourceConfig->ClockFilter);

+      TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED);

+      break;

+    }

+

+    case TIM_CLOCKSOURCE_ITR0:

+    case TIM_CLOCKSOURCE_ITR1:

+    case TIM_CLOCKSOURCE_ITR2:

+    case TIM_CLOCKSOURCE_ITR3:

+    {

+      /* Check whether or not the timer instance supports internal trigger input */

+      assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance));

+

+      TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource);

+      break;

+    }

+

+    default:

+      break;

+  }

+  htim->State = HAL_TIM_STATE_READY;

+

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Selects the signal connected to the TI1 input: direct from CH1_input

+  *         or a XOR combination between CH1_input, CH2_input & CH3_input

+  * @param  htim TIM handle.

+  * @param  TI1_Selection Indicate whether or not channel 1 is connected to the

+  *         output of a XOR gate.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_TI1SELECTION_CH1: The TIMx_CH1 pin is connected to TI1 input

+  *            @arg TIM_TI1SELECTION_XORCOMBINATION: The TIMx_CH1, CH2 and CH3

+  *            pins are connected to the TI1 input (XOR combination)

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection)

+{

+  uint32_t tmpcr2;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_TI1SELECTION(TI1_Selection));

+

+  /* Get the TIMx CR2 register value */

+  tmpcr2 = htim->Instance->CR2;

+

+  /* Reset the TI1 selection */

+  tmpcr2 &= ~TIM_CR2_TI1S;

+

+  /* Set the TI1 selection */

+  tmpcr2 |= TI1_Selection;

+

+  /* Write to TIMxCR2 */

+  htim->Instance->CR2 = tmpcr2;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Configures the TIM in Slave mode

+  * @param  htim TIM handle.

+  * @param  sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that

+  *         contains the selected trigger (internal trigger input, filtered

+  *         timer input or external trigger input) and the Slave mode

+  *         (Disable, Reset, Gated, Trigger, External clock mode 1).

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode));

+  assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger));

+

+  __HAL_LOCK(htim);

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)

+  {

+      htim->State = HAL_TIM_STATE_READY;

+    __HAL_UNLOCK(htim);

+    return HAL_ERROR;

+  }

+

+  /* Disable Trigger Interrupt */

+  __HAL_TIM_DISABLE_IT(htim, TIM_IT_TRIGGER);

+

+  /* Disable Trigger DMA request */

+  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER);

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Configures the TIM in Slave mode in interrupt mode

+  * @param  htim TIM handle.

+  * @param  sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that

+  *         contains the selected trigger (internal trigger input, filtered

+  *         timer input or external trigger input) and the Slave mode

+  *         (Disable, Reset, Gated, Trigger, External clock mode 1).

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,

+                                                        TIM_SlaveConfigTypeDef *sSlaveConfig)

+{

+  /* Check the parameters */

+  assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode));

+  assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger));

+

+  __HAL_LOCK(htim);

+

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)

+  {

+      htim->State = HAL_TIM_STATE_READY;

+    __HAL_UNLOCK(htim);

+    return HAL_ERROR;

+  }

+

+  /* Enable Trigger Interrupt */

+  __HAL_TIM_ENABLE_IT(htim, TIM_IT_TRIGGER);

+

+  /* Disable Trigger DMA request */

+  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER);

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Read the captured value from Capture Compare unit

+  * @param  htim TIM handle.

+  * @param  Channel TIM Channels to be enabled

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1 selected

+  *            @arg TIM_CHANNEL_2: TIM Channel 2 selected

+  *            @arg TIM_CHANNEL_3: TIM Channel 3 selected

+  *            @arg TIM_CHANNEL_4: TIM Channel 4 selected

+  * @retval Captured value

+  */

+uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)

+{

+  uint32_t tmpreg = 0U;

+

+  switch (Channel)

+  {

+    case TIM_CHANNEL_1:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));

+

+      /* Return the capture 1 value */

+      tmpreg =  htim->Instance->CCR1;

+

+      break;

+    }

+    case TIM_CHANNEL_2:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+

+      /* Return the capture 2 value */

+      tmpreg =   htim->Instance->CCR2;

+

+      break;

+    }

+

+    case TIM_CHANNEL_3:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));

+

+      /* Return the capture 3 value */

+      tmpreg =   htim->Instance->CCR3;

+

+      break;

+    }

+

+    case TIM_CHANNEL_4:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));

+

+      /* Return the capture 4 value */

+      tmpreg =   htim->Instance->CCR4;

+

+      break;

+    }

+

+    default:

+      break;

+  }

+

+  return tmpreg;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions

+ *  @brief    TIM Callbacks functions

+ *

+@verbatim

+  ==============================================================================

+                        ##### TIM Callbacks functions #####

+  ==============================================================================

+ [..]

+   This section provides TIM callback functions:

+   (+) TIM Period elapsed callback

+   (+) TIM Output Compare callback

+   (+) TIM Input capture callback

+   (+) TIM Trigger callback

+   (+) TIM Error callback

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Period elapsed callback in non-blocking mode

+  * @param  htim TIM handle

+  * @retval None

+  */

+__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_PeriodElapsedCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Period elapsed half complete callback in non-blocking mode

+  * @param  htim TIM handle

+  * @retval None

+  */

+__weak void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_PeriodElapsedHalfCpltCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Output Compare callback in non-blocking mode

+  * @param  htim TIM OC handle

+  * @retval None

+  */

+__weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Input Capture callback in non-blocking mode

+  * @param  htim TIM IC handle

+  * @retval None

+  */

+__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_IC_CaptureCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Input Capture half complete callback in non-blocking mode

+  * @param  htim TIM IC handle

+  * @retval None

+  */

+__weak void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_IC_CaptureHalfCpltCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  PWM Pulse finished callback in non-blocking mode

+  * @param  htim TIM handle

+  * @retval None

+  */

+__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  PWM Pulse finished half complete callback in non-blocking mode

+  * @param  htim TIM handle

+  * @retval None

+  */

+__weak void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_PWM_PulseFinishedHalfCpltCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Hall Trigger detection callback in non-blocking mode

+  * @param  htim TIM handle

+  * @retval None

+  */

+__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_TriggerCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Hall Trigger detection half complete callback in non-blocking mode

+  * @param  htim TIM handle

+  * @retval None

+  */

+__weak void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_TriggerHalfCpltCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Timer error callback in non-blocking mode

+  * @param  htim TIM handle

+  * @retval None

+  */

+__weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(htim);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_TIM_ErrorCallback could be implemented in the user file

+   */

+}

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+/**

+  * @brief  Register a User TIM callback to be used instead of the weak predefined callback

+  * @param htim tim handle

+  * @param CallbackID ID of the callback to be registered

+  *        This parameter can be one of the following values:

+  *          @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID

+  *          @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID

+  *          @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID

+  *          @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID

+  *          @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID

+  *          @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID

+  *          @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID

+  *          @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID

+  *          @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID

+  *          @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID

+  *          @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID

+  *          @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID

+  *          @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID

+  *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID

+  *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID

+  *          @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID

+  *          @param pCallback pointer to the callback function

+  *          @retval status

+  */

+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+  if (pCallback == NULL)

+  {

+    return HAL_ERROR;

+  }

+  /* Process locked */

+  __HAL_LOCK(htim);

+

+  if (htim->State == HAL_TIM_STATE_READY)

+  {

+    switch (CallbackID)

+    {

+      case HAL_TIM_BASE_MSPINIT_CB_ID :

+        htim->Base_MspInitCallback                 = pCallback;

+        break;

+

+      case HAL_TIM_BASE_MSPDEINIT_CB_ID :

+        htim->Base_MspDeInitCallback               = pCallback;

+        break;

+

+      case HAL_TIM_IC_MSPINIT_CB_ID :

+        htim->IC_MspInitCallback                   = pCallback;

+        break;

+

+      case HAL_TIM_IC_MSPDEINIT_CB_ID :

+        htim->IC_MspDeInitCallback                 = pCallback;

+        break;

+

+      case HAL_TIM_OC_MSPINIT_CB_ID :

+        htim->OC_MspInitCallback                   = pCallback;

+        break;

+

+      case HAL_TIM_OC_MSPDEINIT_CB_ID :

+        htim->OC_MspDeInitCallback                 = pCallback;

+        break;

+

+      case HAL_TIM_PWM_MSPINIT_CB_ID :

+        htim->PWM_MspInitCallback                  = pCallback;

+        break;

+

+      case HAL_TIM_PWM_MSPDEINIT_CB_ID :

+        htim->PWM_MspDeInitCallback                = pCallback;

+        break;

+

+      case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID :

+        htim->OnePulse_MspInitCallback             = pCallback;

+        break;

+

+      case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID :

+        htim->OnePulse_MspDeInitCallback           = pCallback;

+        break;

+

+      case HAL_TIM_ENCODER_MSPINIT_CB_ID :

+        htim->Encoder_MspInitCallback              = pCallback;

+        break;

+

+      case HAL_TIM_ENCODER_MSPDEINIT_CB_ID :

+        htim->Encoder_MspDeInitCallback            = pCallback;

+        break;

+

+      case HAL_TIM_PERIOD_ELAPSED_CB_ID :

+        htim->PeriodElapsedCallback                = pCallback;

+        break;

+

+      case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID :

+        htim->PeriodElapsedHalfCpltCallback        = pCallback;

+        break;

+

+      case HAL_TIM_TRIGGER_CB_ID :

+        htim->TriggerCallback                      = pCallback;

+        break;

+

+      case HAL_TIM_TRIGGER_HALF_CB_ID :

+        htim->TriggerHalfCpltCallback              = pCallback;

+        break;

+

+      case HAL_TIM_IC_CAPTURE_CB_ID :

+        htim->IC_CaptureCallback                   = pCallback;

+        break;

+

+      case HAL_TIM_IC_CAPTURE_HALF_CB_ID :

+        htim->IC_CaptureHalfCpltCallback           = pCallback;

+        break;

+

+      case HAL_TIM_OC_DELAY_ELAPSED_CB_ID :

+        htim->OC_DelayElapsedCallback              = pCallback;

+        break;

+

+      case HAL_TIM_PWM_PULSE_FINISHED_CB_ID :

+        htim->PWM_PulseFinishedCallback            = pCallback;

+        break;

+

+      case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID :

+        htim->PWM_PulseFinishedHalfCpltCallback    = pCallback;

+        break;

+

+      case HAL_TIM_ERROR_CB_ID :

+        htim->ErrorCallback                        = pCallback;

+        break;

+

+      default :

+        /* Return error status */

+        status =  HAL_ERROR;

+        break;

+    }

+  }

+  else if (htim->State == HAL_TIM_STATE_RESET)

+  {

+    switch (CallbackID)

+    {

+      case HAL_TIM_BASE_MSPINIT_CB_ID :

+        htim->Base_MspInitCallback         = pCallback;

+        break;

+

+      case HAL_TIM_BASE_MSPDEINIT_CB_ID :

+        htim->Base_MspDeInitCallback       = pCallback;

+        break;

+

+      case HAL_TIM_IC_MSPINIT_CB_ID :

+        htim->IC_MspInitCallback           = pCallback;

+        break;

+

+      case HAL_TIM_IC_MSPDEINIT_CB_ID :

+        htim->IC_MspDeInitCallback         = pCallback;

+        break;

+

+      case HAL_TIM_OC_MSPINIT_CB_ID :

+        htim->OC_MspInitCallback           = pCallback;

+        break;

+

+      case HAL_TIM_OC_MSPDEINIT_CB_ID :

+        htim->OC_MspDeInitCallback         = pCallback;

+        break;

+

+      case HAL_TIM_PWM_MSPINIT_CB_ID :

+        htim->PWM_MspInitCallback          = pCallback;

+        break;

+

+      case HAL_TIM_PWM_MSPDEINIT_CB_ID :

+        htim->PWM_MspDeInitCallback        = pCallback;

+        break;

+

+      case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID :

+        htim->OnePulse_MspInitCallback     = pCallback;

+        break;

+

+      case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID :

+        htim->OnePulse_MspDeInitCallback   = pCallback;

+        break;

+

+      case HAL_TIM_ENCODER_MSPINIT_CB_ID :

+        htim->Encoder_MspInitCallback      = pCallback;

+        break;

+

+      case HAL_TIM_ENCODER_MSPDEINIT_CB_ID :

+        htim->Encoder_MspDeInitCallback    = pCallback;

+        break;

+

+      default :

+        /* Return error status */

+        status =  HAL_ERROR;

+        break;

+    }

+  }

+  else

+  {

+    /* Return error status */

+    status =  HAL_ERROR;

+  }

+

+  /* Release Lock */

+  __HAL_UNLOCK(htim);

+

+  return status;

+}

+

+/**

+  * @brief  Unregister a TIM callback

+  *         TIM callback is redirected to the weak predefined callback

+  * @param htim tim handle

+  * @param CallbackID ID of the callback to be unregistered

+  *        This parameter can be one of the following values:

+  *          @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID

+  *          @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID

+  *          @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID

+  *          @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID

+  *          @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID

+  *          @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID

+  *          @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID

+  *          @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID

+  *          @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID

+  *          @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID

+  *          @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID

+  *          @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID

+  *          @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID

+  *          @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID

+  *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID

+  *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID

+  *          @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID

+  *          @retval status

+  */

+HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+  /* Process locked */

+  __HAL_LOCK(htim);

+

+  if (htim->State == HAL_TIM_STATE_READY)

+  {

+    switch (CallbackID)

+    {

+      case HAL_TIM_BASE_MSPINIT_CB_ID :

+        htim->Base_MspInitCallback              = HAL_TIM_Base_MspInit;                      /* Legacy weak Base MspInit Callback */

+        break;

+

+      case HAL_TIM_BASE_MSPDEINIT_CB_ID :

+        htim->Base_MspDeInitCallback            = HAL_TIM_Base_MspDeInit;                    /* Legacy weak Base Msp DeInit Callback */

+        break;

+

+      case HAL_TIM_IC_MSPINIT_CB_ID :

+        htim->IC_MspInitCallback                = HAL_TIM_IC_MspInit;                        /* Legacy weak IC Msp Init Callback */

+        break;

+

+      case HAL_TIM_IC_MSPDEINIT_CB_ID :

+        htim->IC_MspDeInitCallback              = HAL_TIM_IC_MspDeInit;                      /* Legacy weak IC Msp DeInit Callback */

+        break;

+

+      case HAL_TIM_OC_MSPINIT_CB_ID :

+        htim->OC_MspInitCallback                = HAL_TIM_OC_MspInit;                        /* Legacy weak OC Msp Init Callback */

+        break;

+

+      case HAL_TIM_OC_MSPDEINIT_CB_ID :

+        htim->OC_MspDeInitCallback              = HAL_TIM_OC_MspDeInit;                      /* Legacy weak OC Msp DeInit Callback */

+        break;

+

+      case HAL_TIM_PWM_MSPINIT_CB_ID :

+        htim->PWM_MspInitCallback               = HAL_TIM_PWM_MspInit;                       /* Legacy weak PWM Msp Init Callback */

+        break;

+

+      case HAL_TIM_PWM_MSPDEINIT_CB_ID :

+        htim->PWM_MspDeInitCallback             = HAL_TIM_PWM_MspDeInit;                     /* Legacy weak PWM Msp DeInit Callback */

+        break;

+

+      case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID :

+        htim->OnePulse_MspInitCallback          = HAL_TIM_OnePulse_MspInit;                  /* Legacy weak One Pulse Msp Init Callback */

+        break;

+

+      case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID :

+        htim->OnePulse_MspDeInitCallback        = HAL_TIM_OnePulse_MspDeInit;                /* Legacy weak One Pulse Msp DeInit Callback */

+        break;

+

+      case HAL_TIM_ENCODER_MSPINIT_CB_ID :

+        htim->Encoder_MspInitCallback           = HAL_TIM_Encoder_MspInit;                   /* Legacy weak Encoder Msp Init Callback */

+        break;

+

+      case HAL_TIM_ENCODER_MSPDEINIT_CB_ID :

+        htim->Encoder_MspDeInitCallback         = HAL_TIM_Encoder_MspDeInit;                 /* Legacy weak Encoder Msp DeInit Callback */

+        break;

+

+      case HAL_TIM_PERIOD_ELAPSED_CB_ID :

+        htim->PeriodElapsedCallback             = HAL_TIM_PeriodElapsedCallback;             /* Legacy weak Period Elapsed Callback */

+        break;

+

+      case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID :

+        htim->PeriodElapsedHalfCpltCallback     = HAL_TIM_PeriodElapsedHalfCpltCallback;     /* Legacy weak Period Elapsed half complete Callback */

+        break;

+

+      case HAL_TIM_TRIGGER_CB_ID :

+        htim->TriggerCallback                   = HAL_TIM_TriggerCallback;                   /* Legacy weak Trigger Callback */

+        break;

+

+      case HAL_TIM_TRIGGER_HALF_CB_ID :

+        htim->TriggerHalfCpltCallback           = HAL_TIM_TriggerHalfCpltCallback;           /* Legacy weak Trigger half complete Callback */

+        break;

+

+      case HAL_TIM_IC_CAPTURE_CB_ID :

+        htim->IC_CaptureCallback                = HAL_TIM_IC_CaptureCallback;                /* Legacy weak IC Capture Callback */

+        break;

+

+      case HAL_TIM_IC_CAPTURE_HALF_CB_ID :

+        htim->IC_CaptureHalfCpltCallback        = HAL_TIM_IC_CaptureHalfCpltCallback;        /* Legacy weak IC Capture half complete Callback */

+        break;

+

+      case HAL_TIM_OC_DELAY_ELAPSED_CB_ID :

+        htim->OC_DelayElapsedCallback           = HAL_TIM_OC_DelayElapsedCallback;           /* Legacy weak OC Delay Elapsed Callback */

+        break;

+

+      case HAL_TIM_PWM_PULSE_FINISHED_CB_ID :

+        htim->PWM_PulseFinishedCallback         = HAL_TIM_PWM_PulseFinishedCallback;         /* Legacy weak PWM Pulse Finished Callback */

+        break;

+

+      case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID :

+        htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; /* Legacy weak PWM Pulse Finished half complete Callback */

+        break;

+

+      case HAL_TIM_ERROR_CB_ID :

+        htim->ErrorCallback                     = HAL_TIM_ErrorCallback;                     /* Legacy weak Error Callback */

+        break;

+

+      default :

+        /* Return error status */

+        status =  HAL_ERROR;

+        break;

+    }

+  }

+  else if (htim->State == HAL_TIM_STATE_RESET)

+  {

+    switch (CallbackID)

+    {

+      case HAL_TIM_BASE_MSPINIT_CB_ID :

+        htim->Base_MspInitCallback         = HAL_TIM_Base_MspInit;              /* Legacy weak Base MspInit Callback */

+        break;

+

+      case HAL_TIM_BASE_MSPDEINIT_CB_ID :

+        htim->Base_MspDeInitCallback       = HAL_TIM_Base_MspDeInit;            /* Legacy weak Base Msp DeInit Callback */

+        break;

+

+      case HAL_TIM_IC_MSPINIT_CB_ID :

+        htim->IC_MspInitCallback           = HAL_TIM_IC_MspInit;                /* Legacy weak IC Msp Init Callback */

+        break;

+

+      case HAL_TIM_IC_MSPDEINIT_CB_ID :

+        htim->IC_MspDeInitCallback         = HAL_TIM_IC_MspDeInit;              /* Legacy weak IC Msp DeInit Callback */

+        break;

+

+      case HAL_TIM_OC_MSPINIT_CB_ID :

+        htim->OC_MspInitCallback           = HAL_TIM_OC_MspInit;                /* Legacy weak OC Msp Init Callback */

+        break;

+

+      case HAL_TIM_OC_MSPDEINIT_CB_ID :

+        htim->OC_MspDeInitCallback         = HAL_TIM_OC_MspDeInit;              /* Legacy weak OC Msp DeInit Callback */

+        break;

+

+      case HAL_TIM_PWM_MSPINIT_CB_ID :

+        htim->PWM_MspInitCallback          = HAL_TIM_PWM_MspInit;               /* Legacy weak PWM Msp Init Callback */

+        break;

+

+      case HAL_TIM_PWM_MSPDEINIT_CB_ID :

+        htim->PWM_MspDeInitCallback        = HAL_TIM_PWM_MspDeInit;             /* Legacy weak PWM Msp DeInit Callback */

+        break;

+

+      case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID :

+        htim->OnePulse_MspInitCallback     = HAL_TIM_OnePulse_MspInit;          /* Legacy weak One Pulse Msp Init Callback */

+        break;

+

+      case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID :

+        htim->OnePulse_MspDeInitCallback   = HAL_TIM_OnePulse_MspDeInit;        /* Legacy weak One Pulse Msp DeInit Callback */

+        break;

+

+      case HAL_TIM_ENCODER_MSPINIT_CB_ID :

+        htim->Encoder_MspInitCallback      = HAL_TIM_Encoder_MspInit;           /* Legacy weak Encoder Msp Init Callback */

+        break;

+

+      case HAL_TIM_ENCODER_MSPDEINIT_CB_ID :

+        htim->Encoder_MspDeInitCallback    = HAL_TIM_Encoder_MspDeInit;         /* Legacy weak Encoder Msp DeInit Callback */

+        break;

+

+      default :

+        /* Return error status */

+        status =  HAL_ERROR;

+        break;

+    }

+  }

+  else

+  {

+    /* Return error status */

+    status =  HAL_ERROR;

+  }

+

+  /* Release Lock */

+  __HAL_UNLOCK(htim);

+

+  return status;

+}

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions

+ *  @brief   TIM Peripheral State functions

+ *

+@verbatim

+  ==============================================================================

+                        ##### Peripheral State functions #####

+  ==============================================================================

+    [..]

+    This subsection permits to get in run-time the status of the peripheral

+    and the data flow.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Return the TIM Base handle state.

+  * @param  htim TIM Base handle

+  * @retval HAL state

+  */

+HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim)

+{

+  return htim->State;

+}

+

+/**

+  * @brief  Return the TIM OC handle state.

+  * @param  htim TIM Output Compare handle

+  * @retval HAL state

+  */

+HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim)

+{

+  return htim->State;

+}

+

+/**

+  * @brief  Return the TIM PWM handle state.

+  * @param  htim TIM handle

+  * @retval HAL state

+  */

+HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim)

+{

+  return htim->State;

+}

+

+/**

+  * @brief  Return the TIM Input Capture handle state.

+  * @param  htim TIM IC handle

+  * @retval HAL state

+  */

+HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim)

+{

+  return htim->State;

+}

+

+/**

+  * @brief  Return the TIM One Pulse Mode handle state.

+  * @param  htim TIM OPM handle

+  * @retval HAL state

+  */

+HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim)

+{

+  return htim->State;

+}

+

+/**

+  * @brief  Return the TIM Encoder Mode handle state.

+  * @param  htim TIM Encoder Interface handle

+  * @retval HAL state

+  */

+HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim)

+{

+  return htim->State;

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/** @defgroup TIM_Private_Functions TIM Private Functions

+  * @{

+  */

+

+/**

+  * @brief  TIM DMA error callback

+  * @param  hdma pointer to DMA handle.

+  * @retval None

+  */

+void TIM_DMAError(DMA_HandleTypeDef *hdma)

+{

+  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  htim->State = HAL_TIM_STATE_READY;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  htim->ErrorCallback(htim);

+#else

+  HAL_TIM_ErrorCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  TIM DMA Delay Pulse complete callback.

+  * @param  hdma pointer to DMA handle.

+  * @retval None

+  */

+void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma)

+{

+  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  if (hdma == htim->hdma[TIM_DMA_ID_CC1])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC2])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC3])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC4])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;

+  }

+  else

+  {

+    /* nothing to do */

+  }

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  htim->PWM_PulseFinishedCallback(htim);

+#else

+  HAL_TIM_PWM_PulseFinishedCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;

+}

+

+/**

+  * @brief  TIM DMA Delay Pulse half complete callback.

+  * @param  hdma pointer to DMA handle.

+  * @retval None

+  */

+void TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma)

+{

+  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  if (hdma == htim->hdma[TIM_DMA_ID_CC1])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC2])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC3])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC4])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;

+  }

+  else

+  {

+    /* nothing to do */

+  }

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  htim->PWM_PulseFinishedHalfCpltCallback(htim);

+#else

+  HAL_TIM_PWM_PulseFinishedHalfCpltCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;

+}

+

+/**

+  * @brief  TIM DMA Capture complete callback.

+  * @param  hdma pointer to DMA handle.

+  * @retval None

+  */

+void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma)

+{

+  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  if (hdma == htim->hdma[TIM_DMA_ID_CC1])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC2])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC3])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC4])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;

+  }

+  else

+  {

+    /* nothing to do */

+  }

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  htim->IC_CaptureCallback(htim);

+#else

+  HAL_TIM_IC_CaptureCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;

+}

+

+/**

+  * @brief  TIM DMA Capture half complete callback.

+  * @param  hdma pointer to DMA handle.

+  * @retval None

+  */

+void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma)

+{

+  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  htim->State = HAL_TIM_STATE_READY;

+

+  if (hdma == htim->hdma[TIM_DMA_ID_CC1])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC2])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC3])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;

+  }

+  else if (hdma == htim->hdma[TIM_DMA_ID_CC4])

+  {

+    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;

+  }

+  else

+  {

+    /* nothing to do */

+  }

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  htim->IC_CaptureHalfCpltCallback(htim);

+#else

+  HAL_TIM_IC_CaptureHalfCpltCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;

+}

+

+/**

+  * @brief  TIM DMA Period Elapse complete callback.

+  * @param  hdma pointer to DMA handle.

+  * @retval None

+  */

+static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma)

+{

+  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  htim->State = HAL_TIM_STATE_READY;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  htim->PeriodElapsedCallback(htim);

+#else

+  HAL_TIM_PeriodElapsedCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  TIM DMA Period Elapse half complete callback.

+  * @param  hdma pointer to DMA handle.

+  * @retval None

+  */

+static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma)

+{

+  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  htim->State = HAL_TIM_STATE_READY;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  htim->PeriodElapsedHalfCpltCallback(htim);

+#else

+  HAL_TIM_PeriodElapsedHalfCpltCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  TIM DMA Trigger callback.

+  * @param  hdma pointer to DMA handle.

+  * @retval None

+  */

+static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma)

+{

+  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  htim->State = HAL_TIM_STATE_READY;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  htim->TriggerCallback(htim);

+#else

+  HAL_TIM_TriggerCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  TIM DMA Trigger half complete callback.

+  * @param  hdma pointer to DMA handle.

+  * @retval None

+  */

+static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma)

+{

+  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  htim->State = HAL_TIM_STATE_READY;

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+  htim->TriggerHalfCpltCallback(htim);

+#else

+  HAL_TIM_TriggerHalfCpltCallback(htim);

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  Time Base configuration

+  * @param  TIMx TIM peripheral

+  * @param  Structure TIM Base configuration structure

+  * @retval None

+  */

+void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure)

+{

+  uint32_t tmpcr1;

+  tmpcr1 = TIMx->CR1;

+

+  /* Set TIM Time Base Unit parameters ---------------------------------------*/

+  if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx))

+  {

+    /* Select the Counter Mode */

+    tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);

+    tmpcr1 |= Structure->CounterMode;

+  }

+

+  if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx))

+  {

+    /* Set the clock division */

+    tmpcr1 &= ~TIM_CR1_CKD;

+    tmpcr1 |= (uint32_t)Structure->ClockDivision;

+  }

+

+  /* Set the auto-reload preload */

+  MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);

+

+  TIMx->CR1 = tmpcr1;

+

+  /* Set the Autoreload value */

+  TIMx->ARR = (uint32_t)Structure->Period ;

+

+  /* Set the Prescaler value */

+  TIMx->PSC = Structure->Prescaler;

+

+  /* Generate an update event to reload the Prescaler

+     and the repetition counter (only for advanced timer) value immediately */

+  TIMx->EGR = TIM_EGR_UG;

+}

+

+/**

+  * @brief  Timer Output Compare 1 configuration

+  * @param  TIMx to select the TIM peripheral

+  * @param  OC_Config The ouput configuration structure

+  * @retval None

+  */

+static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config)

+{

+  uint32_t tmpccmrx;

+  uint32_t tmpccer;

+  uint32_t tmpcr2;

+

+  /* Disable the Channel 1: Reset the CC1E Bit */

+  TIMx->CCER &= ~TIM_CCER_CC1E;

+

+  /* Get the TIMx CCER register value */

+  tmpccer = TIMx->CCER;

+  /* Get the TIMx CR2 register value */

+  tmpcr2 =  TIMx->CR2;

+

+  /* Get the TIMx CCMR1 register value */

+  tmpccmrx = TIMx->CCMR1;

+

+  /* Reset the Output Compare Mode Bits */

+  tmpccmrx &= ~TIM_CCMR1_OC1M;

+  tmpccmrx &= ~TIM_CCMR1_CC1S;

+  /* Select the Output Compare Mode */

+  tmpccmrx |= OC_Config->OCMode;

+

+  /* Reset the Output Polarity level */

+  tmpccer &= ~TIM_CCER_CC1P;

+  /* Set the Output Compare Polarity */

+  tmpccer |= OC_Config->OCPolarity;

+

+  /* Write to TIMx CR2 */

+  TIMx->CR2 = tmpcr2;

+

+  /* Write to TIMx CCMR1 */

+  TIMx->CCMR1 = tmpccmrx;

+

+  /* Set the Capture Compare Register value */

+  TIMx->CCR1 = OC_Config->Pulse;

+

+  /* Write to TIMx CCER */

+  TIMx->CCER = tmpccer;

+}

+

+/**

+  * @brief  Timer Output Compare 2 configuration

+  * @param  TIMx to select the TIM peripheral

+  * @param  OC_Config The ouput configuration structure

+  * @retval None

+  */

+static void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config)

+{

+  uint32_t tmpccmrx;

+  uint32_t tmpccer;

+  uint32_t tmpcr2;

+

+  /* Disable the Channel 2: Reset the CC2E Bit */

+  TIMx->CCER &= ~TIM_CCER_CC2E;

+

+  /* Get the TIMx CCER register value */

+  tmpccer = TIMx->CCER;

+  /* Get the TIMx CR2 register value */

+  tmpcr2 =  TIMx->CR2;

+

+  /* Get the TIMx CCMR1 register value */

+  tmpccmrx = TIMx->CCMR1;

+

+  /* Reset the Output Compare mode and Capture/Compare selection Bits */

+  tmpccmrx &= ~TIM_CCMR1_OC2M;

+  tmpccmrx &= ~TIM_CCMR1_CC2S;

+

+  /* Select the Output Compare Mode */

+  tmpccmrx |= (OC_Config->OCMode << 8U);

+

+  /* Reset the Output Polarity level */

+  tmpccer &= ~TIM_CCER_CC2P;

+  /* Set the Output Compare Polarity */

+  tmpccer |= (OC_Config->OCPolarity << 4U);

+

+  /* Write to TIMx CR2 */

+  TIMx->CR2 = tmpcr2;

+

+  /* Write to TIMx CCMR1 */

+  TIMx->CCMR1 = tmpccmrx;

+

+  /* Set the Capture Compare Register value */

+  TIMx->CCR2 = OC_Config->Pulse;

+

+  /* Write to TIMx CCER */

+  TIMx->CCER = tmpccer;

+}

+

+/**

+  * @brief  Timer Output Compare 3 configuration

+  * @param  TIMx to select the TIM peripheral

+  * @param  OC_Config The ouput configuration structure

+  * @retval None

+  */

+static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config)

+{

+  uint32_t tmpccmrx;

+  uint32_t tmpccer;

+  uint32_t tmpcr2;

+

+  /* Disable the Channel 3: Reset the CC2E Bit */

+  TIMx->CCER &= ~TIM_CCER_CC3E;

+

+  /* Get the TIMx CCER register value */

+  tmpccer = TIMx->CCER;

+  /* Get the TIMx CR2 register value */

+  tmpcr2 =  TIMx->CR2;

+

+  /* Get the TIMx CCMR2 register value */

+  tmpccmrx = TIMx->CCMR2;

+

+  /* Reset the Output Compare mode and Capture/Compare selection Bits */

+  tmpccmrx &= ~TIM_CCMR2_OC3M;

+  tmpccmrx &= ~TIM_CCMR2_CC3S;

+  /* Select the Output Compare Mode */

+  tmpccmrx |= OC_Config->OCMode;

+

+  /* Reset the Output Polarity level */

+  tmpccer &= ~TIM_CCER_CC3P;

+  /* Set the Output Compare Polarity */

+  tmpccer |= (OC_Config->OCPolarity << 8U);

+

+  /* Write to TIMx CR2 */

+  TIMx->CR2 = tmpcr2;

+

+  /* Write to TIMx CCMR2 */

+  TIMx->CCMR2 = tmpccmrx;

+

+  /* Set the Capture Compare Register value */

+  TIMx->CCR3 = OC_Config->Pulse;

+

+  /* Write to TIMx CCER */

+  TIMx->CCER = tmpccer;

+}

+

+/**

+  * @brief  Timer Output Compare 4 configuration

+  * @param  TIMx to select the TIM peripheral

+  * @param  OC_Config The ouput configuration structure

+  * @retval None

+  */

+static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config)

+{

+  uint32_t tmpccmrx;

+  uint32_t tmpccer;

+  uint32_t tmpcr2;

+

+  /* Disable the Channel 4: Reset the CC4E Bit */

+  TIMx->CCER &= ~TIM_CCER_CC4E;

+

+  /* Get the TIMx CCER register value */

+  tmpccer = TIMx->CCER;

+  /* Get the TIMx CR2 register value */

+  tmpcr2 =  TIMx->CR2;

+

+  /* Get the TIMx CCMR2 register value */

+  tmpccmrx = TIMx->CCMR2;

+

+  /* Reset the Output Compare mode and Capture/Compare selection Bits */

+  tmpccmrx &= ~TIM_CCMR2_OC4M;

+  tmpccmrx &= ~TIM_CCMR2_CC4S;

+

+  /* Select the Output Compare Mode */

+  tmpccmrx |= (OC_Config->OCMode << 8U);

+

+  /* Reset the Output Polarity level */

+  tmpccer &= ~TIM_CCER_CC4P;

+  /* Set the Output Compare Polarity */

+  tmpccer |= (OC_Config->OCPolarity << 12U);

+

+  /* Write to TIMx CR2 */

+  TIMx->CR2 = tmpcr2;

+

+  /* Write to TIMx CCMR2 */

+  TIMx->CCMR2 = tmpccmrx;

+

+  /* Set the Capture Compare Register value */

+  TIMx->CCR4 = OC_Config->Pulse;

+

+  /* Write to TIMx CCER */

+  TIMx->CCER = tmpccer;

+}

+

+/**

+  * @brief  Slave Timer configuration function

+  * @param  htim TIM handle

+  * @param  sSlaveConfig Slave timer configuration

+  * @retval None

+  */

+static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,

+                                     TIM_SlaveConfigTypeDef *sSlaveConfig)

+{

+  uint32_t tmpsmcr;

+  uint32_t tmpccmr1;

+  uint32_t tmpccer;

+

+  /* Get the TIMx SMCR register value */

+  tmpsmcr = htim->Instance->SMCR;

+

+  /* Reset the Trigger Selection Bits */

+  tmpsmcr &= ~TIM_SMCR_TS;

+  /* Set the Input Trigger source */

+  tmpsmcr |= sSlaveConfig->InputTrigger;

+

+  /* Reset the slave mode Bits */

+  tmpsmcr &= ~TIM_SMCR_SMS;

+  /* Set the slave mode */

+  tmpsmcr |= sSlaveConfig->SlaveMode;

+

+  /* Write to TIMx SMCR */

+  htim->Instance->SMCR = tmpsmcr;

+

+  /* Configure the trigger prescaler, filter, and polarity */

+  switch (sSlaveConfig->InputTrigger)

+  {

+    case TIM_TS_ETRF:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance));

+      assert_param(IS_TIM_TRIGGERPRESCALER(sSlaveConfig->TriggerPrescaler));

+      assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));

+      assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));

+      /* Configure the ETR Trigger source */

+      TIM_ETR_SetConfig(htim->Instance,

+                        sSlaveConfig->TriggerPrescaler,

+                        sSlaveConfig->TriggerPolarity,

+                        sSlaveConfig->TriggerFilter);

+      break;

+    }

+

+    case TIM_TS_TI1F_ED:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));

+      assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));

+

+      if(sSlaveConfig->SlaveMode == TIM_SLAVEMODE_GATED)

+      {

+        return HAL_ERROR;

+      }

+

+      /* Disable the Channel 1: Reset the CC1E Bit */

+      tmpccer = htim->Instance->CCER;

+      htim->Instance->CCER &= ~TIM_CCER_CC1E;

+      tmpccmr1 = htim->Instance->CCMR1;

+

+      /* Set the filter */

+      tmpccmr1 &= ~TIM_CCMR1_IC1F;

+      tmpccmr1 |= ((sSlaveConfig->TriggerFilter) << 4U);

+

+      /* Write to TIMx CCMR1 and CCER registers */

+      htim->Instance->CCMR1 = tmpccmr1;

+      htim->Instance->CCER = tmpccer;

+      break;

+    }

+

+    case TIM_TS_TI1FP1:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));

+      assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));

+      assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));

+

+      /* Configure TI1 Filter and Polarity */

+      TIM_TI1_ConfigInputStage(htim->Instance,

+                               sSlaveConfig->TriggerPolarity,

+                               sSlaveConfig->TriggerFilter);

+      break;

+    }

+

+    case TIM_TS_TI2FP2:

+    {

+      /* Check the parameters */

+      assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+      assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));

+      assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));

+

+      /* Configure TI2 Filter and Polarity */

+      TIM_TI2_ConfigInputStage(htim->Instance,

+                               sSlaveConfig->TriggerPolarity,

+                               sSlaveConfig->TriggerFilter);

+      break;

+    }

+

+    case TIM_TS_ITR0:

+    case TIM_TS_ITR1:

+    case TIM_TS_ITR2:

+    case TIM_TS_ITR3:

+    {

+      /* Check the parameter */

+      assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));

+      break;

+    }

+

+    default:

+      break;

+  }

+  return HAL_OK;

+}

+

+/**

+  * @brief  Configure the TI1 as Input.

+  * @param  TIMx to select the TIM peripheral.

+  * @param  TIM_ICPolarity The Input Polarity.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ICPOLARITY_RISING

+  *            @arg TIM_ICPOLARITY_FALLING

+  *            @arg TIM_ICPOLARITY_BOTHEDGE

+  * @param  TIM_ICSelection specifies the input to be used.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 1 is selected to be connected to IC1.

+  *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 1 is selected to be connected to IC2.

+  *            @arg TIM_ICSELECTION_TRC: TIM Input 1 is selected to be connected to TRC.

+  * @param  TIM_ICFilter Specifies the Input Capture Filter.

+  *          This parameter must be a value between 0x00 and 0x0F.

+  * @retval None

+  * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI2FP1

+  *       (on channel2 path) is used as the input signal. Therefore CCMR1 must be

+  *        protected against un-initialized filter and polarity values.

+  */

+static void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,

+                              uint32_t TIM_ICFilter)

+{

+  uint32_t tmpccmr1;

+  uint32_t tmpccer;

+

+  /* Disable the Channel 1: Reset the CC1E Bit */

+  TIMx->CCER &= ~TIM_CCER_CC1E;

+  tmpccmr1 = TIMx->CCMR1;

+  tmpccer = TIMx->CCER;

+

+  /* Select the Input */

+  if (IS_TIM_CC2_INSTANCE(TIMx) != RESET)

+  {

+    tmpccmr1 &= ~TIM_CCMR1_CC1S;

+    tmpccmr1 |= TIM_ICSelection;

+  }

+  else

+  {

+    tmpccmr1 |= TIM_CCMR1_CC1S_0;

+  }

+

+  /* Set the filter */

+  tmpccmr1 &= ~TIM_CCMR1_IC1F;

+  tmpccmr1 |= ((TIM_ICFilter << 4U) & TIM_CCMR1_IC1F);

+

+  /* Select the Polarity and set the CC1E Bit */

+  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);

+  tmpccer |= (TIM_ICPolarity & (TIM_CCER_CC1P | TIM_CCER_CC1NP));

+

+  /* Write to TIMx CCMR1 and CCER registers */

+  TIMx->CCMR1 = tmpccmr1;

+  TIMx->CCER = tmpccer;

+}

+

+/**

+  * @brief  Configure the Polarity and Filter for TI1.

+  * @param  TIMx to select the TIM peripheral.

+  * @param  TIM_ICPolarity The Input Polarity.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ICPOLARITY_RISING

+  *            @arg TIM_ICPOLARITY_FALLING

+  *            @arg TIM_ICPOLARITY_BOTHEDGE

+  * @param  TIM_ICFilter Specifies the Input Capture Filter.

+  *          This parameter must be a value between 0x00 and 0x0F.

+  * @retval None

+  */

+static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)

+{

+  uint32_t tmpccmr1;

+  uint32_t tmpccer;

+

+  /* Disable the Channel 1: Reset the CC1E Bit */

+  tmpccer = TIMx->CCER;

+  TIMx->CCER &= ~TIM_CCER_CC1E;

+  tmpccmr1 = TIMx->CCMR1;

+

+  /* Set the filter */

+  tmpccmr1 &= ~TIM_CCMR1_IC1F;

+  tmpccmr1 |= (TIM_ICFilter << 4U);

+

+  /* Select the Polarity and set the CC1E Bit */

+  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);

+  tmpccer |= TIM_ICPolarity;

+

+  /* Write to TIMx CCMR1 and CCER registers */

+  TIMx->CCMR1 = tmpccmr1;

+  TIMx->CCER = tmpccer;

+}

+

+/**

+  * @brief  Configure the TI2 as Input.

+  * @param  TIMx to select the TIM peripheral

+  * @param  TIM_ICPolarity The Input Polarity.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ICPOLARITY_RISING

+  *            @arg TIM_ICPOLARITY_FALLING

+  *            @arg TIM_ICPOLARITY_BOTHEDGE

+  * @param  TIM_ICSelection specifies the input to be used.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 2 is selected to be connected to IC2.

+  *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 2 is selected to be connected to IC1.

+  *            @arg TIM_ICSELECTION_TRC: TIM Input 2 is selected to be connected to TRC.

+  * @param  TIM_ICFilter Specifies the Input Capture Filter.

+  *          This parameter must be a value between 0x00 and 0x0F.

+  * @retval None

+  * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI1FP2

+  *       (on channel1 path) is used as the input signal. Therefore CCMR1 must be

+  *        protected against un-initialized filter and polarity values.

+  */

+static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,

+                              uint32_t TIM_ICFilter)

+{

+  uint32_t tmpccmr1;

+  uint32_t tmpccer;

+

+  /* Disable the Channel 2: Reset the CC2E Bit */

+  TIMx->CCER &= ~TIM_CCER_CC2E;

+  tmpccmr1 = TIMx->CCMR1;

+  tmpccer = TIMx->CCER;

+

+  /* Select the Input */

+  tmpccmr1 &= ~TIM_CCMR1_CC2S;

+  tmpccmr1 |= (TIM_ICSelection << 8U);

+

+  /* Set the filter */

+  tmpccmr1 &= ~TIM_CCMR1_IC2F;

+  tmpccmr1 |= ((TIM_ICFilter << 12U) & TIM_CCMR1_IC2F);

+

+  /* Select the Polarity and set the CC2E Bit */

+  tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);

+  tmpccer |= ((TIM_ICPolarity << 4U) & (TIM_CCER_CC2P | TIM_CCER_CC2NP));

+

+  /* Write to TIMx CCMR1 and CCER registers */

+  TIMx->CCMR1 = tmpccmr1 ;

+  TIMx->CCER = tmpccer;

+}

+

+/**

+  * @brief  Configure the Polarity and Filter for TI2.

+  * @param  TIMx to select the TIM peripheral.

+  * @param  TIM_ICPolarity The Input Polarity.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ICPOLARITY_RISING

+  *            @arg TIM_ICPOLARITY_FALLING

+  *            @arg TIM_ICPOLARITY_BOTHEDGE

+  * @param  TIM_ICFilter Specifies the Input Capture Filter.

+  *          This parameter must be a value between 0x00 and 0x0F.

+  * @retval None

+  */

+static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)

+{

+  uint32_t tmpccmr1;

+  uint32_t tmpccer;

+

+  /* Disable the Channel 2: Reset the CC2E Bit */

+  TIMx->CCER &= ~TIM_CCER_CC2E;

+  tmpccmr1 = TIMx->CCMR1;

+  tmpccer = TIMx->CCER;

+

+  /* Set the filter */

+  tmpccmr1 &= ~TIM_CCMR1_IC2F;

+  tmpccmr1 |= (TIM_ICFilter << 12U);

+

+  /* Select the Polarity and set the CC2E Bit */

+  tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);

+  tmpccer |= (TIM_ICPolarity << 4U);

+

+  /* Write to TIMx CCMR1 and CCER registers */

+  TIMx->CCMR1 = tmpccmr1 ;

+  TIMx->CCER = tmpccer;

+}

+

+/**

+  * @brief  Configure the TI3 as Input.

+  * @param  TIMx to select the TIM peripheral

+  * @param  TIM_ICPolarity The Input Polarity.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ICPOLARITY_RISING

+  *            @arg TIM_ICPOLARITY_FALLING

+  *            @arg TIM_ICPOLARITY_BOTHEDGE

+  * @param  TIM_ICSelection specifies the input to be used.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 3 is selected to be connected to IC3.

+  *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 3 is selected to be connected to IC4.

+  *            @arg TIM_ICSELECTION_TRC: TIM Input 3 is selected to be connected to TRC.

+  * @param  TIM_ICFilter Specifies the Input Capture Filter.

+  *          This parameter must be a value between 0x00 and 0x0F.

+  * @retval None

+  * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI3FP4

+  *       (on channel1 path) is used as the input signal. Therefore CCMR2 must be

+  *        protected against un-initialized filter and polarity values.

+  */

+static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,

+                              uint32_t TIM_ICFilter)

+{

+  uint32_t tmpccmr2;

+  uint32_t tmpccer;

+

+  /* Disable the Channel 3: Reset the CC3E Bit */

+  TIMx->CCER &= ~TIM_CCER_CC3E;

+  tmpccmr2 = TIMx->CCMR2;

+  tmpccer = TIMx->CCER;

+

+  /* Select the Input */

+  tmpccmr2 &= ~TIM_CCMR2_CC3S;

+  tmpccmr2 |= TIM_ICSelection;

+

+  /* Set the filter */

+  tmpccmr2 &= ~TIM_CCMR2_IC3F;

+  tmpccmr2 |= ((TIM_ICFilter << 4U) & TIM_CCMR2_IC3F);

+

+  /* Select the Polarity and set the CC3E Bit */

+  tmpccer &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP);

+  tmpccer |= ((TIM_ICPolarity << 8U) & (TIM_CCER_CC3P | TIM_CCER_CC3NP));

+

+  /* Write to TIMx CCMR2 and CCER registers */

+  TIMx->CCMR2 = tmpccmr2;

+  TIMx->CCER = tmpccer;

+}

+

+/**

+  * @brief  Configure the TI4 as Input.

+  * @param  TIMx to select the TIM peripheral

+  * @param  TIM_ICPolarity The Input Polarity.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ICPOLARITY_RISING

+  *            @arg TIM_ICPOLARITY_FALLING

+  *            @arg TIM_ICPOLARITY_BOTHEDGE

+  * @param  TIM_ICSelection specifies the input to be used.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 4 is selected to be connected to IC4.

+  *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 4 is selected to be connected to IC3.

+  *            @arg TIM_ICSELECTION_TRC: TIM Input 4 is selected to be connected to TRC.

+  * @param  TIM_ICFilter Specifies the Input Capture Filter.

+  *          This parameter must be a value between 0x00 and 0x0F.

+  * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI4FP3

+  *       (on channel1 path) is used as the input signal. Therefore CCMR2 must be

+  *        protected against un-initialized filter and polarity values.

+  * @retval None

+  */

+static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,

+                              uint32_t TIM_ICFilter)

+{

+  uint32_t tmpccmr2;

+  uint32_t tmpccer;

+

+  /* Disable the Channel 4: Reset the CC4E Bit */

+  TIMx->CCER &= ~TIM_CCER_CC4E;

+  tmpccmr2 = TIMx->CCMR2;

+  tmpccer = TIMx->CCER;

+

+  /* Select the Input */

+  tmpccmr2 &= ~TIM_CCMR2_CC4S;

+  tmpccmr2 |= (TIM_ICSelection << 8U);

+

+  /* Set the filter */

+  tmpccmr2 &= ~TIM_CCMR2_IC4F;

+  tmpccmr2 |= ((TIM_ICFilter << 12U) & TIM_CCMR2_IC4F);

+

+  /* Select the Polarity and set the CC4E Bit */

+  tmpccer &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP);

+  tmpccer |= ((TIM_ICPolarity << 12U) & (TIM_CCER_CC4P | TIM_CCER_CC4NP));

+

+  /* Write to TIMx CCMR2 and CCER registers */

+  TIMx->CCMR2 = tmpccmr2;

+  TIMx->CCER = tmpccer ;

+}

+

+/**

+  * @brief  Selects the Input Trigger source

+  * @param  TIMx to select the TIM peripheral

+  * @param  InputTriggerSource The Input Trigger source.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_TS_ITR0: Internal Trigger 0

+  *            @arg TIM_TS_ITR1: Internal Trigger 1

+  *            @arg TIM_TS_ITR2: Internal Trigger 2

+  *            @arg TIM_TS_ITR3: Internal Trigger 3

+  *            @arg TIM_TS_TI1F_ED: TI1 Edge Detector

+  *            @arg TIM_TS_TI1FP1: Filtered Timer Input 1

+  *            @arg TIM_TS_TI2FP2: Filtered Timer Input 2

+  *            @arg TIM_TS_ETRF: External Trigger input

+  * @retval None

+  */

+static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource)

+{

+  uint32_t tmpsmcr;

+

+  /* Get the TIMx SMCR register value */

+  tmpsmcr = TIMx->SMCR;

+  /* Reset the TS Bits */

+  tmpsmcr &= ~TIM_SMCR_TS;

+  /* Set the Input Trigger source and the slave mode*/

+  tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1);

+  /* Write to TIMx SMCR */

+  TIMx->SMCR = tmpsmcr;

+}

+/**

+  * @brief  Configures the TIMx External Trigger (ETR).

+  * @param  TIMx to select the TIM peripheral

+  * @param  TIM_ExtTRGPrescaler The external Trigger Prescaler.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ETRPRESCALER_DIV1: ETRP Prescaler OFF.

+  *            @arg TIM_ETRPRESCALER_DIV2: ETRP frequency divided by 2.

+  *            @arg TIM_ETRPRESCALER_DIV4: ETRP frequency divided by 4.

+  *            @arg TIM_ETRPRESCALER_DIV8: ETRP frequency divided by 8.

+  * @param  TIM_ExtTRGPolarity The external Trigger Polarity.

+  *          This parameter can be one of the following values:

+  *            @arg TIM_ETRPOLARITY_INVERTED: active low or falling edge active.

+  *            @arg TIM_ETRPOLARITY_NONINVERTED: active high or rising edge active.

+  * @param  ExtTRGFilter External Trigger Filter.

+  *          This parameter must be a value between 0x00 and 0x0F

+  * @retval None

+  */

+static void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler,

+                              uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter)

+{

+  uint32_t tmpsmcr;

+

+  tmpsmcr = TIMx->SMCR;

+

+  /* Reset the ETR Bits */

+  tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);

+

+  /* Set the Prescaler, the Filter value and the Polarity */

+  tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U)));

+

+  /* Write to TIMx SMCR */

+  TIMx->SMCR = tmpsmcr;

+}

+

+/**

+  * @brief  Enables or disables the TIM Capture Compare Channel x.

+  * @param  TIMx to select the TIM peripheral

+  * @param  Channel specifies the TIM Channel

+  *          This parameter can be one of the following values:

+  *            @arg TIM_CHANNEL_1: TIM Channel 1

+  *            @arg TIM_CHANNEL_2: TIM Channel 2

+  *            @arg TIM_CHANNEL_3: TIM Channel 3

+  *            @arg TIM_CHANNEL_4: TIM Channel 4

+  * @param  ChannelState specifies the TIM Channel CCxE bit new state.

+  *          This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE.

+  * @retval None

+  */

+static void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState)

+{

+  uint32_t tmp;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_CC1_INSTANCE(TIMx));

+  assert_param(IS_TIM_CHANNELS(Channel));

+

+  tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */

+

+  /* Reset the CCxE Bit */

+  TIMx->CCER &= ~tmp;

+

+  /* Set or reset the CCxE Bit */

+  TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */

+}

+

+#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)

+/**

+  * @brief  Reset interrupt callbacks to the legacy weak callbacks.

+  * @param  htim pointer to a TIM_HandleTypeDef structure that contains

+  *                the configuration information for TIM module.

+  * @retval None

+  */

+void TIM_ResetCallback(TIM_HandleTypeDef *htim)

+{

+  /* Reset the TIM callback to the legacy weak callbacks */

+  htim->PeriodElapsedCallback             = HAL_TIM_PeriodElapsedCallback;             /* Legacy weak PeriodElapsedCallback             */

+  htim->PeriodElapsedHalfCpltCallback     = HAL_TIM_PeriodElapsedHalfCpltCallback;     /* Legacy weak PeriodElapsedHalfCpltCallback     */

+  htim->TriggerCallback                   = HAL_TIM_TriggerCallback;                   /* Legacy weak TriggerCallback                   */

+  htim->TriggerHalfCpltCallback           = HAL_TIM_TriggerHalfCpltCallback;           /* Legacy weak TriggerHalfCpltCallback           */

+  htim->IC_CaptureCallback                = HAL_TIM_IC_CaptureCallback;                /* Legacy weak IC_CaptureCallback                */

+  htim->IC_CaptureHalfCpltCallback        = HAL_TIM_IC_CaptureHalfCpltCallback;        /* Legacy weak IC_CaptureHalfCpltCallback        */

+  htim->OC_DelayElapsedCallback           = HAL_TIM_OC_DelayElapsedCallback;           /* Legacy weak OC_DelayElapsedCallback           */

+  htim->PWM_PulseFinishedCallback         = HAL_TIM_PWM_PulseFinishedCallback;         /* Legacy weak PWM_PulseFinishedCallback         */

+  htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; /* Legacy weak PWM_PulseFinishedHalfCpltCallback */

+  htim->ErrorCallback                     = HAL_TIM_ErrorCallback;                     /* Legacy weak ErrorCallback                     */

+}

+#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */

+

+/**

+  * @}

+  */

+

+#endif /* HAL_TIM_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_tim_ex.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_tim_ex.c
new file mode 100644
index 0000000..470894b
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_tim_ex.c
@@ -0,0 +1,224 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_tim_ex.c

+  * @author  MCD Application Team

+  * @brief   TIM HAL module driver.

+  *          This file provides firmware functions to manage the following

+  *          functionalities of the Timer Extended peripheral:

+  *           + Time Master and Slave synchronization configuration

+  *           + Time OCRef clear configuration

+  *           + Timer remapping capabilities configuration

+  @verbatim

+  ==============================================================================

+                      ##### TIMER Extended features #####

+  ==============================================================================

+  [..]

+    The Timer Extended features include:

+    (#) Synchronization circuit to control the timer with external signals and to

+        interconnect several timers together.

+

+  @endverbatim

+  ******************************************************************************

+    * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+*/

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @defgroup TIMEx TIMEx

+  * @brief TIM Extended HAL module driver

+  * @{

+  */

+

+#ifdef HAL_TIM_MODULE_ENABLED

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/* Private macro -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+

+/* Exported functions --------------------------------------------------------*/

+/** @defgroup TIMEx_Exported_Functions TIM Extended Exported Functions

+  * @{

+  */

+/** @defgroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions

+  * @brief    Peripheral Control functions

+  *

+@verbatim

+  ==============================================================================

+                    ##### Peripheral Control functions #####

+  ==============================================================================

+  [..]

+    This section provides functions allowing to:

+      (+) Configure Master synchronization.

+      (+) Configure timer remapping capabilities.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Configures the TIM in master mode.

+  * @param  htim TIM handle.

+  * @param  sMasterConfig pointer to a TIM_MasterConfigTypeDef structure that

+  *         contains the selected trigger output (TRGO) and the Master/Slave

+  *         mode.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,

+                                                        TIM_MasterConfigTypeDef *sMasterConfig)

+{

+  uint32_t tmpcr2;

+  uint32_t tmpsmcr;

+

+  /* Check the parameters */

+  assert_param(IS_TIM_SYNCHRO_INSTANCE(htim->Instance));

+  assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));

+  assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));

+

+  /* Check input state */

+  __HAL_LOCK(htim);

+

+  /* Change the handler state */

+  htim->State = HAL_TIM_STATE_BUSY;

+

+  /* Get the TIMx CR2 register value */

+  tmpcr2 = htim->Instance->CR2;

+

+  /* Get the TIMx SMCR register value */

+  tmpsmcr = htim->Instance->SMCR;

+

+  /* Reset the MMS Bits */

+  tmpcr2 &= ~TIM_CR2_MMS;

+  /* Select the TRGO source */

+  tmpcr2 |=  sMasterConfig->MasterOutputTrigger;

+

+  /* Reset the MSM Bit */

+  tmpsmcr &= ~TIM_SMCR_MSM;

+  /* Set master mode */

+  tmpsmcr |= sMasterConfig->MasterSlaveMode;

+

+  /* Update TIMx CR2 */

+  htim->Instance->CR2 = tmpcr2;

+

+  /* Update TIMx SMCR */

+  htim->Instance->SMCR = tmpsmcr;

+

+  /* Change the htim state */

+  htim->State = HAL_TIM_STATE_READY;

+

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Configures the TIMx Remapping input capabilities.

+  * @param  htim TIM handle.

+  * @param  Remap specifies the TIM remapping source.

+  *

+  *         For TIM2, the parameter can have the following values:(see note)

+  *            @arg TIM_TIM2_ITR1_TIM10_OC:      TIM2 ITR1 input is connected to TIM10 OC

+  *            @arg TIM_TIM2_ITR1_TIM5_TGO:      TIM2 ITR1 input is connected to TIM5 TGO

+  *

+  *         For TIM3, the parameter can have the following values:(see note)

+  *            @arg TIM_TIM3_ITR2_TIM11_OC:      TIM3 ITR2 input is connected to TIM11 OC

+  *            @arg TIM_TIM3_ITR2_TIM5_TGO:      TIM3 ITR2 input is connected to TIM5 TGO

+  *

+  *         For TIM9, the parameter is a combination of 2 fields (field1 | field2):

+  *

+  *                   field1 can have the following values:(see note)

+  *            @arg TIM_TIM9_ITR1_TIM3_TGO:      TIM9 ITR1 input is connected to TIM3 TGO

+  *            @arg TIM_TIM9_ITR1_TS:            TIM9 ITR1 input is connected to touch sensing I/O

+  *

+  *                   field2 can have the following values:

+  *            @arg TIM_TIM9_GPIO:               TIM9 Channel1 is connected to GPIO

+  *            @arg TIM_TIM9_LSE:                TIM9 Channel1 is connected to LSE internal clock

+  *            @arg TIM_TIM9_GPIO1:              TIM9 Channel1 is connected to GPIO

+  *            @arg TIM_TIM9_GPIO2:              TIM9 Channel1 is connected to GPIO

+  *

+  *         For TIM10, the parameter is a combination of 3 fields (field1 | field2 | field3):

+  *

+  *                   field1 can have the following values:(see note)

+  *            @arg TIM_TIM10_TI1RMP:            TIM10 Channel 1 depends on TI1_RMP

+  *            @arg TIM_TIM10_RI:                TIM10 Channel 1 is connected to RI

+  *

+  *                   field2 can have the following values:(see note)

+  *            @arg TIM_TIM10_ETR_LSE:           TIM10 ETR input is connected to LSE clock

+  *            @arg TIM_TIM10_ETR_TIM9_TGO:      TIM10 ETR input is connected to TIM9 TGO

+  *

+  *                   field3 can have the following values:

+  *            @arg TIM_TIM10_GPIO:              TIM10 Channel1 is connected to GPIO

+  *            @arg TIM_TIM10_LSI:               TIM10 Channel1 is connected to LSI internal clock

+  *            @arg TIM_TIM10_LSE:               TIM10 Channel1 is connected to LSE internal clock

+  *            @arg TIM_TIM10_RTC:               TIM10 Channel1 is connected to RTC wakeup interrupt

+  *

+  *         For TIM11, the parameter is a combination of 3 fields (field1 | field2 | field3):

+  *

+  *                   field1 can have the following values:(see note)

+  *            @arg TIM_TIM11_TI1RMP:            TIM11 Channel 1 depends on TI1_RMP

+  *            @arg TIM_TIM11_RI:                TIM11 Channel 1 is connected to RI

+  *

+  *                   field2 can have the following values:(see note)

+  *            @arg TIM_TIM11_ETR_LSE:           TIM11 ETR input is connected to LSE clock

+  *            @arg TIM_TIM11_ETR_TIM9_TGO:      TIM11 ETR input is connected to TIM9 TGO

+  *

+  *                   field3 can have the following values:

+  *            @arg TIM_TIM11_GPIO:     TIM11 Channel1 is connected to GPIO

+  *            @arg TIM_TIM11_MSI:      TIM11 Channel1 is connected to MSI internal clock

+  *            @arg TIM_TIM11_HSE_RTC:  TIM11 Channel1 is connected to HSE_RTC clock

+  *            @arg TIM_TIM11_GPIO1:    TIM11 Channel1 is connected to GPIO

+  *

+  * @note   Available only in Cat.3, Cat.4,Cat.5 and Cat.6 devices.

+  *

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap)

+{

+  __HAL_LOCK(htim);

+

+  /* Check parameters */

+  assert_param(IS_TIM_REMAP(htim->Instance, Remap));

+

+  /* Set the Timer remapping configuration */

+  WRITE_REG(htim->Instance->OR, Remap);

+

+  __HAL_UNLOCK(htim);

+

+  return HAL_OK;

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+

+#endif /* HAL_TIM_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

diff --git a/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_uart.c b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_uart.c
new file mode 100644
index 0000000..2d6b980
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_MPU_M3_NUCLEO_L152RE_GCC/ST_Code/Drivers/STM32L1xx_HAL_Driver/Src/stm32l1xx_hal_uart.c
@@ -0,0 +1,3112 @@
+/**

+  ******************************************************************************

+  * @file    stm32l1xx_hal_uart.c

+  * @author  MCD Application Team

+  * @brief   UART HAL module driver.

+  *          This file provides firmware functions to manage the following

+  *          functionalities of the Universal Asynchronous Receiver Transmitter Peripheral (UART).

+  *           + Initialization and de-initialization functions

+  *           + IO operation functions

+  *           + Peripheral Control functions

+  *           + Peripheral State and Errors functions

+  @verbatim

+  ==============================================================================

+                        ##### How to use this driver #####

+  ==============================================================================

+  [..]

+    The UART HAL driver can be used as follows:

+

+    (#) Declare a UART_HandleTypeDef handle structure (eg. UART_HandleTypeDef huart).

+    (#) Initialize the UART low level resources by implementing the HAL_UART_MspInit() API:

+        (##) Enable the USARTx interface clock.

+        (##) UART pins configuration:

+            (+++) Enable the clock for the UART GPIOs.

+            (+++) Configure these UART pins (TX as alternate function pull-up, RX as alternate function Input).

+        (##) NVIC configuration if you need to use interrupt process (HAL_UART_Transmit_IT()

+             and HAL_UART_Receive_IT() APIs):

+            (+++) Configure the USARTx interrupt priority.

+            (+++) Enable the NVIC USART IRQ handle.

+        (##) DMA Configuration if you need to use DMA process (HAL_UART_Transmit_DMA()

+             and HAL_UART_Receive_DMA() APIs):

+            (+++) Declare a DMA handle structure for the Tx/Rx channel.

+            (+++) Enable the DMAx interface clock.

+            (+++) Configure the declared DMA handle structure with the required

+                  Tx/Rx parameters.

+            (+++) Configure the DMA Tx/Rx channel.

+            (+++) Associate the initialized DMA handle to the UART DMA Tx/Rx handle.

+            (+++) Configure the priority and enable the NVIC for the transfer complete

+                  interrupt on the DMA Tx/Rx channel.

+            (+++) Configure the USARTx interrupt priority and enable the NVIC USART IRQ handle

+                  (used for last byte sending completion detection in DMA non circular mode)

+

+    (#) Program the Baud Rate, Word Length, Stop Bit, Parity, Hardware

+        flow control and Mode(Receiver/Transmitter) in the huart Init structure.

+

+    (#) For the UART asynchronous mode, initialize the UART registers by calling

+        the HAL_UART_Init() API.

+

+    (#) For the UART Half duplex mode, initialize the UART registers by calling

+        the HAL_HalfDuplex_Init() API.

+

+    (#) For the LIN mode, initialize the UART registers by calling the HAL_LIN_Init() API.

+

+    (#) For the Multi-Processor mode, initialize the UART registers by calling

+        the HAL_MultiProcessor_Init() API.

+

+     [..]

+       (@) The specific UART interrupts (Transmission complete interrupt,

+            RXNE interrupt and Error Interrupts) will be managed using the macros

+            __HAL_UART_ENABLE_IT() and __HAL_UART_DISABLE_IT() inside the transmit

+            and receive process.

+

+     [..]

+       (@) These APIs (HAL_UART_Init() and HAL_HalfDuplex_Init()) configure also the

+            low level Hardware GPIO, CLOCK, CORTEX...etc) by calling the customized

+            HAL_UART_MspInit() API.

+

+    ##### Callback registration #####

+    ==================================

+

+    [..]

+    The compilation define USE_HAL_UART_REGISTER_CALLBACKS when set to 1

+    allows the user to configure dynamically the driver callbacks.

+

+    [..]

+    Use Function @ref HAL_UART_RegisterCallback() to register a user callback.

+    Function @ref HAL_UART_RegisterCallback() allows to register following callbacks:

+    (+) TxHalfCpltCallback        : Tx Half Complete Callback.

+    (+) TxCpltCallback            : Tx Complete Callback.

+    (+) RxHalfCpltCallback        : Rx Half Complete Callback.

+    (+) RxCpltCallback            : Rx Complete Callback.

+    (+) ErrorCallback             : Error Callback.

+    (+) AbortCpltCallback         : Abort Complete Callback.

+    (+) AbortTransmitCpltCallback : Abort Transmit Complete Callback.

+    (+) AbortReceiveCpltCallback  : Abort Receive Complete Callback.

+    (+) MspInitCallback           : UART MspInit.

+    (+) MspDeInitCallback         : UART MspDeInit.

+    This function takes as parameters the HAL peripheral handle, the Callback ID

+    and a pointer to the user callback function.

+

+    [..]

+    Use function @ref HAL_UART_UnRegisterCallback() to reset a callback to the default

+    weak (surcharged) function.

+    @ref HAL_UART_UnRegisterCallback() takes as parameters the HAL peripheral handle,

+    and the Callback ID.

+    This function allows to reset following callbacks:

+    (+) TxHalfCpltCallback        : Tx Half Complete Callback.

+    (+) TxCpltCallback            : Tx Complete Callback.

+    (+) RxHalfCpltCallback        : Rx Half Complete Callback.

+    (+) RxCpltCallback            : Rx Complete Callback.

+    (+) ErrorCallback             : Error Callback.

+    (+) AbortCpltCallback         : Abort Complete Callback.

+    (+) AbortTransmitCpltCallback : Abort Transmit Complete Callback.

+    (+) AbortReceiveCpltCallback  : Abort Receive Complete Callback.

+    (+) MspInitCallback           : UART MspInit.

+    (+) MspDeInitCallback         : UART MspDeInit.

+

+    [..]

+    By default, after the @ref HAL_UART_Init() and when the state is HAL_UART_STATE_RESET

+    all callbacks are set to the corresponding weak (surcharged) functions:

+    examples @ref HAL_UART_TxCpltCallback(), @ref HAL_UART_RxHalfCpltCallback().

+    Exception done for MspInit and MspDeInit functions that are respectively

+    reset to the legacy weak (surcharged) functions in the @ref HAL_UART_Init()

+    and @ref HAL_UART_DeInit() only when these callbacks are null (not registered beforehand).

+    If not, MspInit or MspDeInit are not null, the @ref HAL_UART_Init() and @ref HAL_UART_DeInit()

+    keep and use the user MspInit/MspDeInit callbacks (registered beforehand).

+

+    [..]

+    Callbacks can be registered/unregistered in HAL_UART_STATE_READY state only.

+    Exception done MspInit/MspDeInit that can be registered/unregistered

+    in HAL_UART_STATE_READY or HAL_UART_STATE_RESET state, thus registered (user)

+    MspInit/DeInit callbacks can be used during the Init/DeInit.

+    In that case first register the MspInit/MspDeInit user callbacks

+    using @ref HAL_UART_RegisterCallback() before calling @ref HAL_UART_DeInit()

+    or @ref HAL_UART_Init() function.

+

+    [..]

+    When The compilation define USE_HAL_UART_REGISTER_CALLBACKS is set to 0 or

+    not defined, the callback registration feature is not available

+    and weak (surcharged) callbacks are used.

+

+     [..]

+        Three operation modes are available within this driver :

+

+     *** Polling mode IO operation ***

+     =================================

+     [..]

+       (+) Send an amount of data in blocking mode using HAL_UART_Transmit()

+       (+) Receive an amount of data in blocking mode using HAL_UART_Receive()

+

+     *** Interrupt mode IO operation ***

+     ===================================

+     [..]

+       (+) Send an amount of data in non blocking mode using HAL_UART_Transmit_IT()

+       (+) At transmission end of transfer HAL_UART_TxCpltCallback is executed and user can

+            add his own code by customization of function pointer HAL_UART_TxCpltCallback

+       (+) Receive an amount of data in non blocking mode using HAL_UART_Receive_IT()

+       (+) At reception end of transfer HAL_UART_RxCpltCallback is executed and user can

+            add his own code by customization of function pointer HAL_UART_RxCpltCallback

+       (+) In case of transfer Error, HAL_UART_ErrorCallback() function is executed and user can

+            add his own code by customization of function pointer HAL_UART_ErrorCallback

+

+     *** DMA mode IO operation ***

+     ==============================

+     [..]

+       (+) Send an amount of data in non blocking mode (DMA) using HAL_UART_Transmit_DMA()

+       (+) At transmission end of half transfer HAL_UART_TxHalfCpltCallback is executed and user can

+            add his own code by customization of function pointer HAL_UART_TxHalfCpltCallback

+       (+) At transmission end of transfer HAL_UART_TxCpltCallback is executed and user can

+            add his own code by customization of function pointer HAL_UART_TxCpltCallback

+       (+) Receive an amount of data in non blocking mode (DMA) using HAL_UART_Receive_DMA()

+       (+) At reception end of half transfer HAL_UART_RxHalfCpltCallback is executed and user can

+            add his own code by customization of function pointer HAL_UART_RxHalfCpltCallback

+       (+) At reception end of transfer HAL_UART_RxCpltCallback is executed and user can

+            add his own code by customization of function pointer HAL_UART_RxCpltCallback

+       (+) In case of transfer Error, HAL_UART_ErrorCallback() function is executed and user can

+            add his own code by customization of function pointer HAL_UART_ErrorCallback

+       (+) Pause the DMA Transfer using HAL_UART_DMAPause()

+       (+) Resume the DMA Transfer using HAL_UART_DMAResume()

+       (+) Stop the DMA Transfer using HAL_UART_DMAStop()

+

+     *** UART HAL driver macros list ***

+     =============================================

+     [..]

+       Below the list of most used macros in UART HAL driver.

+

+      (+) __HAL_UART_ENABLE: Enable the UART peripheral

+      (+) __HAL_UART_DISABLE: Disable the UART peripheral

+      (+) __HAL_UART_GET_FLAG : Check whether the specified UART flag is set or not

+      (+) __HAL_UART_CLEAR_FLAG : Clear the specified UART pending flag

+      (+) __HAL_UART_ENABLE_IT: Enable the specified UART interrupt

+      (+) __HAL_UART_DISABLE_IT: Disable the specified UART interrupt

+      (+) __HAL_UART_GET_IT_SOURCE: Check whether the specified UART interrupt has occurred or not

+

+     [..]

+       (@) You can refer to the UART HAL driver header file for more useful macros

+

+  @endverbatim

+     [..]

+       (@) Additionnal remark: If the parity is enabled, then the MSB bit of the data written

+           in the data register is transmitted but is changed by the parity bit.

+           Depending on the frame length defined by the M bit (8-bits or 9-bits),

+           the possible UART frame formats are as listed in the following table:

+    +-------------------------------------------------------------+

+    |   M bit |  PCE bit  |            UART frame                 |

+    |---------------------|---------------------------------------|

+    |    0    |    0      |    | SB | 8 bit data | STB |          |

+    |---------|-----------|---------------------------------------|

+    |    0    |    1      |    | SB | 7 bit data | PB | STB |     |

+    |---------|-----------|---------------------------------------|

+    |    1    |    0      |    | SB | 9 bit data | STB |          |

+    |---------|-----------|---------------------------------------|

+    |    1    |    1      |    | SB | 8 bit data | PB | STB |     |

+    +-------------------------------------------------------------+

+  ******************************************************************************

+  * @attention

+  *

+  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.

+  * All rights reserved.</center></h2>

+  *

+  * This software component is licensed by ST under BSD 3-Clause license,

+  * the "License"; You may not use this file except in compliance with the

+  * License. You may obtain a copy of the License at:

+  *                        opensource.org/licenses/BSD-3-Clause

+  *

+  ******************************************************************************

+  */

+

+/* Includes ------------------------------------------------------------------*/

+#include "stm32l1xx_hal.h"

+

+/** @addtogroup STM32L1xx_HAL_Driver

+  * @{

+  */

+

+/** @defgroup UART UART

+  * @brief HAL UART module driver

+  * @{

+  */

+#ifdef HAL_UART_MODULE_ENABLED

+

+/* Private typedef -----------------------------------------------------------*/

+/* Private define ------------------------------------------------------------*/

+/** @addtogroup UART_Private_Constants

+  * @{

+  */

+/**

+  * @}

+  */

+/* Private macro -------------------------------------------------------------*/

+/* Private variables ---------------------------------------------------------*/

+/* Private function prototypes -----------------------------------------------*/

+/** @addtogroup UART_Private_Functions  UART Private Functions

+  * @{

+  */

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+static void UART_EndTxTransfer(UART_HandleTypeDef *huart);

+static void UART_EndRxTransfer(UART_HandleTypeDef *huart);

+static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma);

+static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma);

+static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma);

+static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma);

+static void UART_DMAError(DMA_HandleTypeDef *hdma);

+static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma);

+static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma);

+static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma);

+static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma);

+static void UART_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma);

+static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart);

+static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart);

+static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart);

+static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout);

+static void UART_SetConfig(UART_HandleTypeDef *huart);

+

+/**

+  * @}

+  */

+

+/* Exported functions ---------------------------------------------------------*/

+/** @defgroup UART_Exported_Functions UART Exported Functions

+  * @{

+  */

+

+/** @defgroup UART_Exported_Functions_Group1 Initialization and de-initialization functions

+  *  @brief    Initialization and Configuration functions

+  *

+@verbatim

+ ===============================================================================

+            ##### Initialization and Configuration functions #####

+ ===============================================================================

+    [..]

+    This subsection provides a set of functions allowing to initialize the USARTx or the UARTy

+    in asynchronous mode.

+      (+) For the asynchronous mode only these parameters can be configured:

+        (++) Baud Rate

+        (++) Word Length

+        (++) Stop Bit

+        (++) Parity: If the parity is enabled, then the MSB bit of the data written

+             in the data register is transmitted but is changed by the parity bit.

+             Depending on the frame length defined by the M bit (8-bits or 9-bits),

+             please refer to Reference manual for possible UART frame formats.

+        (++) Hardware flow control

+        (++) Receiver/transmitter modes

+        (++) Over Sampling Method

+    [..]

+    The HAL_UART_Init(), HAL_HalfDuplex_Init(), HAL_LIN_Init() and HAL_MultiProcessor_Init() APIs

+    follow respectively the UART asynchronous, UART Half duplex, LIN and Multi-Processor configuration

+    procedures (details for the procedures are available in reference manual (RM0038)).

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Initializes the UART mode according to the specified parameters in

+  *         the UART_InitTypeDef and create the associated handle.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)

+{

+  /* Check the UART handle allocation */

+  if (huart == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  if (huart->Init.HwFlowCtl != UART_HWCONTROL_NONE)

+  {

+    /* The hardware flow control is available only for USART1, USART2 and USART3 */

+    assert_param(IS_UART_HWFLOW_INSTANCE(huart->Instance));

+    assert_param(IS_UART_HARDWARE_FLOW_CONTROL(huart->Init.HwFlowCtl));

+  }

+  else

+  {

+    assert_param(IS_UART_INSTANCE(huart->Instance));

+  }

+  assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength));

+  assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling));

+

+  if (huart->gState == HAL_UART_STATE_RESET)

+  {

+    /* Allocate lock resource and initialize it */

+    huart->Lock = HAL_UNLOCKED;

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+    UART_InitCallbacksToDefault(huart);

+

+    if (huart->MspInitCallback == NULL)

+    {

+      huart->MspInitCallback = HAL_UART_MspInit;

+    }

+

+    /* Init the low level hardware */

+    huart->MspInitCallback(huart);

+#else

+    /* Init the low level hardware : GPIO, CLOCK */

+    HAL_UART_MspInit(huart);

+#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */

+  }

+

+  huart->gState = HAL_UART_STATE_BUSY;

+

+  /* Disable the peripheral */

+  __HAL_UART_DISABLE(huart);

+

+  /* Set the UART Communication parameters */

+  UART_SetConfig(huart);

+

+  /* In asynchronous mode, the following bits must be kept cleared:

+     - LINEN and CLKEN bits in the USART_CR2 register,

+     - SCEN, HDSEL and IREN  bits in the USART_CR3 register.*/

+  CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));

+  CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));

+

+  /* Enable the peripheral */

+  __HAL_UART_ENABLE(huart);

+

+  /* Initialize the UART state */

+  huart->ErrorCode = HAL_UART_ERROR_NONE;

+  huart->gState = HAL_UART_STATE_READY;

+  huart->RxState = HAL_UART_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the half-duplex mode according to the specified

+  *         parameters in the UART_InitTypeDef and create the associated handle.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart)

+{

+  /* Check the UART handle allocation */

+  if (huart == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_UART_HALFDUPLEX_INSTANCE(huart->Instance));

+  assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength));

+  assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling));

+

+  if (huart->gState == HAL_UART_STATE_RESET)

+  {

+    /* Allocate lock resource and initialize it */

+    huart->Lock = HAL_UNLOCKED;

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+    UART_InitCallbacksToDefault(huart);

+

+    if (huart->MspInitCallback == NULL)

+    {

+      huart->MspInitCallback = HAL_UART_MspInit;

+    }

+

+    /* Init the low level hardware */

+    huart->MspInitCallback(huart);

+#else

+    /* Init the low level hardware : GPIO, CLOCK */

+    HAL_UART_MspInit(huart);

+#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */

+  }

+

+  huart->gState = HAL_UART_STATE_BUSY;

+

+  /* Disable the peripheral */

+  __HAL_UART_DISABLE(huart);

+

+  /* Set the UART Communication parameters */

+  UART_SetConfig(huart);

+

+  /* In half-duplex mode, the following bits must be kept cleared:

+     - LINEN and CLKEN bits in the USART_CR2 register,

+     - SCEN and IREN bits in the USART_CR3 register.*/

+  CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));

+  CLEAR_BIT(huart->Instance->CR3, (USART_CR3_IREN | USART_CR3_SCEN));

+

+  /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */

+  SET_BIT(huart->Instance->CR3, USART_CR3_HDSEL);

+

+  /* Enable the peripheral */

+  __HAL_UART_ENABLE(huart);

+

+  /* Initialize the UART state*/

+  huart->ErrorCode = HAL_UART_ERROR_NONE;

+  huart->gState = HAL_UART_STATE_READY;

+  huart->RxState = HAL_UART_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the LIN mode according to the specified

+  *         parameters in the UART_InitTypeDef and create the associated handle.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @param  BreakDetectLength Specifies the LIN break detection length.

+  *         This parameter can be one of the following values:

+  *            @arg UART_LINBREAKDETECTLENGTH_10B: 10-bit break detection

+  *            @arg UART_LINBREAKDETECTLENGTH_11B: 11-bit break detection

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength)

+{

+  /* Check the UART handle allocation */

+  if (huart == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the LIN UART instance */

+  assert_param(IS_UART_LIN_INSTANCE(huart->Instance));

+

+  /* Check the Break detection length parameter */

+  assert_param(IS_UART_LIN_BREAK_DETECT_LENGTH(BreakDetectLength));

+  assert_param(IS_UART_LIN_WORD_LENGTH(huart->Init.WordLength));

+  assert_param(IS_UART_LIN_OVERSAMPLING(huart->Init.OverSampling));

+

+  if (huart->gState == HAL_UART_STATE_RESET)

+  {

+    /* Allocate lock resource and initialize it */

+    huart->Lock = HAL_UNLOCKED;

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+    UART_InitCallbacksToDefault(huart);

+

+    if (huart->MspInitCallback == NULL)

+    {

+      huart->MspInitCallback = HAL_UART_MspInit;

+    }

+

+    /* Init the low level hardware */

+    huart->MspInitCallback(huart);

+#else

+    /* Init the low level hardware : GPIO, CLOCK */

+    HAL_UART_MspInit(huart);

+#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */

+  }

+

+  huart->gState = HAL_UART_STATE_BUSY;

+

+  /* Disable the peripheral */

+  __HAL_UART_DISABLE(huart);

+

+  /* Set the UART Communication parameters */

+  UART_SetConfig(huart);

+

+  /* In LIN mode, the following bits must be kept cleared:

+     - CLKEN bits in the USART_CR2 register,

+     - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/

+  CLEAR_BIT(huart->Instance->CR2, (USART_CR2_CLKEN));

+  CLEAR_BIT(huart->Instance->CR3, (USART_CR3_HDSEL | USART_CR3_IREN | USART_CR3_SCEN));

+

+  /* Enable the LIN mode by setting the LINEN bit in the CR2 register */

+  SET_BIT(huart->Instance->CR2, USART_CR2_LINEN);

+

+  /* Set the USART LIN Break detection length. */

+  CLEAR_BIT(huart->Instance->CR2, USART_CR2_LBDL);

+  SET_BIT(huart->Instance->CR2, BreakDetectLength);

+

+  /* Enable the peripheral */

+  __HAL_UART_ENABLE(huart);

+

+  /* Initialize the UART state*/

+  huart->ErrorCode = HAL_UART_ERROR_NONE;

+  huart->gState = HAL_UART_STATE_READY;

+  huart->RxState = HAL_UART_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Initializes the Multi-Processor mode according to the specified

+  *         parameters in the UART_InitTypeDef and create the associated handle.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @param  Address USART address

+  * @param  WakeUpMethod specifies the USART wake-up method.

+  *         This parameter can be one of the following values:

+  *            @arg UART_WAKEUPMETHOD_IDLELINE: Wake-up by an idle line detection

+  *            @arg UART_WAKEUPMETHOD_ADDRESSMARK: Wake-up by an address mark

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod)

+{

+  /* Check the UART handle allocation */

+  if (huart == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_UART_MULTIPROCESSOR_INSTANCE(huart->Instance));

+

+  /* Check the Address & wake up method parameters */

+  assert_param(IS_UART_WAKEUPMETHOD(WakeUpMethod));

+  assert_param(IS_UART_ADDRESS(Address));

+  assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength));

+  assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling));

+

+  if (huart->gState == HAL_UART_STATE_RESET)

+  {

+    /* Allocate lock resource and initialize it */

+    huart->Lock = HAL_UNLOCKED;

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+    UART_InitCallbacksToDefault(huart);

+

+    if (huart->MspInitCallback == NULL)

+    {

+      huart->MspInitCallback = HAL_UART_MspInit;

+    }

+

+    /* Init the low level hardware */

+    huart->MspInitCallback(huart);

+#else

+    /* Init the low level hardware : GPIO, CLOCK */

+    HAL_UART_MspInit(huart);

+#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */

+  }

+

+  huart->gState = HAL_UART_STATE_BUSY;

+

+  /* Disable the peripheral */

+  __HAL_UART_DISABLE(huart);

+

+  /* Set the UART Communication parameters */

+  UART_SetConfig(huart);

+

+  /* In Multi-Processor mode, the following bits must be kept cleared:

+     - LINEN and CLKEN bits in the USART_CR2 register,

+     - SCEN, HDSEL and IREN  bits in the USART_CR3 register */

+  CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));

+  CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));

+

+  /* Set the USART address node */

+  CLEAR_BIT(huart->Instance->CR2, USART_CR2_ADD);

+  SET_BIT(huart->Instance->CR2, Address);

+

+  /* Set the wake up method by setting the WAKE bit in the CR1 register */

+  CLEAR_BIT(huart->Instance->CR1, USART_CR1_WAKE);

+  SET_BIT(huart->Instance->CR1, WakeUpMethod);

+

+  /* Enable the peripheral */

+  __HAL_UART_ENABLE(huart);

+

+  /* Initialize the UART state */

+  huart->ErrorCode = HAL_UART_ERROR_NONE;

+  huart->gState = HAL_UART_STATE_READY;

+  huart->RxState = HAL_UART_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  DeInitializes the UART peripheral.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart)

+{

+  /* Check the UART handle allocation */

+  if (huart == NULL)

+  {

+    return HAL_ERROR;

+  }

+

+  /* Check the parameters */

+  assert_param(IS_UART_INSTANCE(huart->Instance));

+

+  huart->gState = HAL_UART_STATE_BUSY;

+

+  /* Disable the Peripheral */

+  __HAL_UART_DISABLE(huart);

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  if (huart->MspDeInitCallback == NULL)

+  {

+    huart->MspDeInitCallback = HAL_UART_MspDeInit;

+  }

+  /* DeInit the low level hardware */

+  huart->MspDeInitCallback(huart);

+#else

+  /* DeInit the low level hardware */

+  HAL_UART_MspDeInit(huart);

+#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */

+

+  huart->ErrorCode = HAL_UART_ERROR_NONE;

+  huart->gState = HAL_UART_STATE_RESET;

+  huart->RxState = HAL_UART_STATE_RESET;

+

+  /* Process Unlock */

+  __HAL_UNLOCK(huart);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  UART MSP Init.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval None

+  */

+__weak void HAL_UART_MspInit(UART_HandleTypeDef *huart)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(huart);

+  /* NOTE: This function should not be modified, when the callback is needed,

+           the HAL_UART_MspInit could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  UART MSP DeInit.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval None

+  */

+__weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(huart);

+  /* NOTE: This function should not be modified, when the callback is needed,

+           the HAL_UART_MspDeInit could be implemented in the user file

+   */

+}

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+/**

+  * @brief  Register a User UART Callback

+  *         To be used instead of the weak predefined callback

+  * @param  huart uart handle

+  * @param  CallbackID ID of the callback to be registered

+  *         This parameter can be one of the following values:

+  *           @arg @ref HAL_UART_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID

+  *           @arg @ref HAL_UART_TX_COMPLETE_CB_ID Tx Complete Callback ID

+  *           @arg @ref HAL_UART_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID

+  *           @arg @ref HAL_UART_RX_COMPLETE_CB_ID Rx Complete Callback ID

+  *           @arg @ref HAL_UART_ERROR_CB_ID Error Callback ID

+  *           @arg @ref HAL_UART_ABORT_COMPLETE_CB_ID Abort Complete Callback ID

+  *           @arg @ref HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID Abort Transmit Complete Callback ID

+  *           @arg @ref HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID Abort Receive Complete Callback ID

+  *           @arg @ref HAL_UART_MSPINIT_CB_ID MspInit Callback ID

+  *           @arg @ref HAL_UART_MSPDEINIT_CB_ID MspDeInit Callback ID

+  * @param  pCallback pointer to the Callback function

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+  if (pCallback == NULL)

+  {

+    /* Update the error code */

+    huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;

+

+    return HAL_ERROR;

+  }

+  /* Process locked */

+  __HAL_LOCK(huart);

+

+  if (huart->gState == HAL_UART_STATE_READY)

+  {

+    switch (CallbackID)

+    {

+      case HAL_UART_TX_HALFCOMPLETE_CB_ID :

+        huart->TxHalfCpltCallback = pCallback;

+        break;

+

+      case HAL_UART_TX_COMPLETE_CB_ID :

+        huart->TxCpltCallback = pCallback;

+        break;

+

+      case HAL_UART_RX_HALFCOMPLETE_CB_ID :

+        huart->RxHalfCpltCallback = pCallback;

+        break;

+

+      case HAL_UART_RX_COMPLETE_CB_ID :

+        huart->RxCpltCallback = pCallback;

+        break;

+

+      case HAL_UART_ERROR_CB_ID :

+        huart->ErrorCallback = pCallback;

+        break;

+

+      case HAL_UART_ABORT_COMPLETE_CB_ID :

+        huart->AbortCpltCallback = pCallback;

+        break;

+

+      case HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID :

+        huart->AbortTransmitCpltCallback = pCallback;

+        break;

+

+      case HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID :

+        huart->AbortReceiveCpltCallback = pCallback;

+        break;

+

+      case HAL_UART_MSPINIT_CB_ID :

+        huart->MspInitCallback = pCallback;

+        break;

+

+      case HAL_UART_MSPDEINIT_CB_ID :

+        huart->MspDeInitCallback = pCallback;

+        break;

+

+      default :

+        /* Update the error code */

+        huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;

+

+        /* Return error status */

+        status =  HAL_ERROR;

+        break;

+    }

+  }

+  else if (huart->gState == HAL_UART_STATE_RESET)

+  {

+    switch (CallbackID)

+    {

+      case HAL_UART_MSPINIT_CB_ID :

+        huart->MspInitCallback = pCallback;

+        break;

+

+      case HAL_UART_MSPDEINIT_CB_ID :

+        huart->MspDeInitCallback = pCallback;

+        break;

+

+      default :

+        /* Update the error code */

+        huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;

+

+        /* Return error status */

+        status =  HAL_ERROR;

+        break;

+    }

+  }

+  else

+  {

+    /* Update the error code */

+    huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;

+

+    /* Return error status */

+    status =  HAL_ERROR;

+  }

+

+  /* Release Lock */

+  __HAL_UNLOCK(huart);

+

+  return status;

+}

+

+/**

+  * @brief  Unregister an UART Callback

+  *         UART callaback is redirected to the weak predefined callback

+  * @param  huart uart handle

+  * @param  CallbackID ID of the callback to be unregistered

+  *         This parameter can be one of the following values:

+  *           @arg @ref HAL_UART_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID

+  *           @arg @ref HAL_UART_TX_COMPLETE_CB_ID Tx Complete Callback ID

+  *           @arg @ref HAL_UART_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID

+  *           @arg @ref HAL_UART_RX_COMPLETE_CB_ID Rx Complete Callback ID

+  *           @arg @ref HAL_UART_ERROR_CB_ID Error Callback ID

+  *           @arg @ref HAL_UART_ABORT_COMPLETE_CB_ID Abort Complete Callback ID

+  *           @arg @ref HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID Abort Transmit Complete Callback ID

+  *           @arg @ref HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID Abort Receive Complete Callback ID

+  *           @arg @ref HAL_UART_MSPINIT_CB_ID MspInit Callback ID

+  *           @arg @ref HAL_UART_MSPDEINIT_CB_ID MspDeInit Callback ID

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID)

+{

+  HAL_StatusTypeDef status = HAL_OK;

+

+  /* Process locked */

+  __HAL_LOCK(huart);

+

+  if (HAL_UART_STATE_READY == huart->gState)

+  {

+    switch (CallbackID)

+    {

+      case HAL_UART_TX_HALFCOMPLETE_CB_ID :

+        huart->TxHalfCpltCallback = HAL_UART_TxHalfCpltCallback;               /* Legacy weak  TxHalfCpltCallback       */

+        break;

+

+      case HAL_UART_TX_COMPLETE_CB_ID :

+        huart->TxCpltCallback = HAL_UART_TxCpltCallback;                       /* Legacy weak TxCpltCallback            */

+        break;

+

+      case HAL_UART_RX_HALFCOMPLETE_CB_ID :

+        huart->RxHalfCpltCallback = HAL_UART_RxHalfCpltCallback;               /* Legacy weak RxHalfCpltCallback        */

+        break;

+

+      case HAL_UART_RX_COMPLETE_CB_ID :

+        huart->RxCpltCallback = HAL_UART_RxCpltCallback;                       /* Legacy weak RxCpltCallback            */

+        break;

+

+      case HAL_UART_ERROR_CB_ID :

+        huart->ErrorCallback = HAL_UART_ErrorCallback;                         /* Legacy weak ErrorCallback             */

+        break;

+

+      case HAL_UART_ABORT_COMPLETE_CB_ID :

+        huart->AbortCpltCallback = HAL_UART_AbortCpltCallback;                 /* Legacy weak AbortCpltCallback         */

+        break;

+

+      case HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID :

+        huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */

+        break;

+

+      case HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID :

+        huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback;   /* Legacy weak AbortReceiveCpltCallback  */

+        break;

+

+      case HAL_UART_MSPINIT_CB_ID :

+        huart->MspInitCallback = HAL_UART_MspInit;                             /* Legacy weak MspInitCallback           */

+        break;

+

+      case HAL_UART_MSPDEINIT_CB_ID :

+        huart->MspDeInitCallback = HAL_UART_MspDeInit;                         /* Legacy weak MspDeInitCallback         */

+        break;

+

+      default :

+        /* Update the error code */

+        huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;

+

+        /* Return error status */

+        status =  HAL_ERROR;

+        break;

+    }

+  }

+  else if (HAL_UART_STATE_RESET == huart->gState)

+  {

+    switch (CallbackID)

+    {

+      case HAL_UART_MSPINIT_CB_ID :

+        huart->MspInitCallback = HAL_UART_MspInit;

+        break;

+

+      case HAL_UART_MSPDEINIT_CB_ID :

+        huart->MspDeInitCallback = HAL_UART_MspDeInit;

+        break;

+

+      default :

+        /* Update the error code */

+        huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;

+

+        /* Return error status */

+        status =  HAL_ERROR;

+        break;

+    }

+  }

+  else

+  {

+    /* Update the error code */

+    huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;

+

+    /* Return error status */

+    status =  HAL_ERROR;

+  }

+

+  /* Release Lock */

+  __HAL_UNLOCK(huart);

+

+  return status;

+}

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+

+/**

+  * @}

+  */

+

+/** @defgroup UART_Exported_Functions_Group2 IO operation functions

+  *  @brief UART Transmit and Receive functions

+  *

+@verbatim

+ ===============================================================================

+                      ##### IO operation functions #####

+ ===============================================================================

+    This subsection provides a set of functions allowing to manage the UART asynchronous

+    and Half duplex data transfers.

+

+    (#) There are two modes of transfer:

+       (+) Blocking mode: The communication is performed in polling mode.

+           The HAL status of all data processing is returned by the same function

+           after finishing transfer.

+       (+) Non-Blocking mode: The communication is performed using Interrupts

+           or DMA, these API's return the HAL status.

+           The end of the data processing will be indicated through the

+           dedicated UART IRQ when using Interrupt mode or the DMA IRQ when

+           using DMA mode.

+           The HAL_UART_TxCpltCallback(), HAL_UART_RxCpltCallback() user callbacks

+           will be executed respectively at the end of the transmit or receive process

+           The HAL_UART_ErrorCallback()user callback will be executed when a communication error is detected.

+

+    (#) Blocking mode API's are :

+        (+) HAL_UART_Transmit()

+        (+) HAL_UART_Receive()

+

+    (#) Non-Blocking mode API's with Interrupt are :

+        (+) HAL_UART_Transmit_IT()

+        (+) HAL_UART_Receive_IT()

+        (+) HAL_UART_IRQHandler()

+

+    (#) Non-Blocking mode API's with DMA are :

+        (+) HAL_UART_Transmit_DMA()

+        (+) HAL_UART_Receive_DMA()

+        (+) HAL_UART_DMAPause()

+        (+) HAL_UART_DMAResume()

+        (+) HAL_UART_DMAStop()

+

+    (#) A set of Transfer Complete Callbacks are provided in Non_Blocking mode:

+        (+) HAL_UART_TxHalfCpltCallback()

+        (+) HAL_UART_TxCpltCallback()

+        (+) HAL_UART_RxHalfCpltCallback()

+        (+) HAL_UART_RxCpltCallback()

+        (+) HAL_UART_ErrorCallback()

+

+    (#) Non-Blocking mode transfers could be aborted using Abort API's :

+        (+) HAL_UART_Abort()

+        (+) HAL_UART_AbortTransmit()

+        (+) HAL_UART_AbortReceive()

+        (+) HAL_UART_Abort_IT()

+        (+) HAL_UART_AbortTransmit_IT()

+        (+) HAL_UART_AbortReceive_IT()

+

+    (#) For Abort services based on interrupts (HAL_UART_Abortxxx_IT), a set of Abort Complete Callbacks are provided:

+        (+) HAL_UART_AbortCpltCallback()

+        (+) HAL_UART_AbortTransmitCpltCallback()

+        (+) HAL_UART_AbortReceiveCpltCallback()

+

+    (#) In Non-Blocking mode transfers, possible errors are split into 2 categories.

+        Errors are handled as follows :

+       (+) Error is considered as Recoverable and non blocking : Transfer could go till end, but error severity is

+           to be evaluated by user : this concerns Frame Error, Parity Error or Noise Error in Interrupt mode reception .

+           Received character is then retrieved and stored in Rx buffer, Error code is set to allow user to identify error type,

+           and HAL_UART_ErrorCallback() user callback is executed. Transfer is kept ongoing on UART side.

+           If user wants to abort it, Abort services should be called by user.

+       (+) Error is considered as Blocking : Transfer could not be completed properly and is aborted.

+           This concerns Overrun Error In Interrupt mode reception and all errors in DMA mode.

+           Error code is set to allow user to identify error type, and HAL_UART_ErrorCallback() user callback is executed.

+

+    -@- In the Half duplex communication, it is forbidden to run the transmit

+        and receive process in parallel, the UART state HAL_UART_STATE_BUSY_TX_RX can't be useful.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Sends an amount of data in blocking mode.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @param  pData Pointer to data buffer

+  * @param  Size Amount of data to be sent

+  * @param  Timeout Timeout duration

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

+{

+  uint16_t *tmp;

+  uint32_t tickstart = 0U;

+

+  /* Check that a Tx process is not already ongoing */

+  if (huart->gState == HAL_UART_STATE_READY)

+  {

+    if ((pData == NULL) || (Size == 0U))

+    {

+      return  HAL_ERROR;

+    }

+

+    /* Process Locked */

+    __HAL_LOCK(huart);

+

+    huart->ErrorCode = HAL_UART_ERROR_NONE;

+    huart->gState = HAL_UART_STATE_BUSY_TX;

+

+    /* Init tickstart for timeout managment */

+    tickstart = HAL_GetTick();

+

+    huart->TxXferSize = Size;

+    huart->TxXferCount = Size;

+    while (huart->TxXferCount > 0U)

+    {

+      huart->TxXferCount--;

+      if (huart->Init.WordLength == UART_WORDLENGTH_9B)

+      {

+        if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK)

+        {

+          return HAL_TIMEOUT;

+        }

+        tmp = (uint16_t *) pData;

+        huart->Instance->DR = (*tmp & (uint16_t)0x01FF);

+        if (huart->Init.Parity == UART_PARITY_NONE)

+        {

+          pData += 2U;

+        }

+        else

+        {

+          pData += 1U;

+        }

+      }

+      else

+      {

+        if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK)

+        {

+          return HAL_TIMEOUT;

+        }

+        huart->Instance->DR = (*pData++ & (uint8_t)0xFF);

+      }

+    }

+

+    if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK)

+    {

+      return HAL_TIMEOUT;

+    }

+

+    /* At end of Tx process, restore huart->gState to Ready */

+    huart->gState = HAL_UART_STATE_READY;

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(huart);

+

+    return HAL_OK;

+  }

+  else

+  {

+    return HAL_BUSY;

+  }

+}

+

+/**

+  * @brief  Receives an amount of data in blocking mode.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @param  pData Pointer to data buffer

+  * @param  Size Amount of data to be received

+  * @param  Timeout Timeout duration

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

+{

+  uint16_t *tmp;

+  uint32_t tickstart = 0U;

+

+  /* Check that a Rx process is not already ongoing */

+  if (huart->RxState == HAL_UART_STATE_READY)

+  {

+    if ((pData == NULL) || (Size == 0U))

+    {

+      return  HAL_ERROR;

+    }

+

+    /* Process Locked */

+    __HAL_LOCK(huart);

+

+    huart->ErrorCode = HAL_UART_ERROR_NONE;

+    huart->RxState = HAL_UART_STATE_BUSY_RX;

+

+    /* Init tickstart for timeout managment */

+    tickstart = HAL_GetTick();

+

+    huart->RxXferSize = Size;

+    huart->RxXferCount = Size;

+

+    /* Check the remain data to be received */

+    while (huart->RxXferCount > 0U)

+    {

+      huart->RxXferCount--;

+      if (huart->Init.WordLength == UART_WORDLENGTH_9B)

+      {

+        if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK)

+        {

+          return HAL_TIMEOUT;

+        }

+        tmp = (uint16_t *) pData;

+        if (huart->Init.Parity == UART_PARITY_NONE)

+        {

+          *tmp = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF);

+          pData += 2U;

+        }

+        else

+        {

+          *tmp = (uint16_t)(huart->Instance->DR & (uint16_t)0x00FF);

+          pData += 1U;

+        }

+

+      }

+      else

+      {

+        if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK)

+        {

+          return HAL_TIMEOUT;

+        }

+        if (huart->Init.Parity == UART_PARITY_NONE)

+        {

+          *pData++ = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF);

+        }

+        else

+        {

+          *pData++ = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F);

+        }

+

+      }

+    }

+

+    /* At end of Rx process, restore huart->RxState to Ready */

+    huart->RxState = HAL_UART_STATE_READY;

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(huart);

+

+    return HAL_OK;

+  }

+  else

+  {

+    return HAL_BUSY;

+  }

+}

+

+/**

+  * @brief  Sends an amount of data in non blocking mode.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @param  pData Pointer to data buffer

+  * @param  Size Amount of data to be sent

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

+{

+  /* Check that a Tx process is not already ongoing */

+  if (huart->gState == HAL_UART_STATE_READY)

+  {

+    if ((pData == NULL) || (Size == 0U))

+    {

+      return HAL_ERROR;

+    }

+

+    /* Process Locked */

+    __HAL_LOCK(huart);

+

+    huart->pTxBuffPtr = pData;

+    huart->TxXferSize = Size;

+    huart->TxXferCount = Size;

+

+    huart->ErrorCode = HAL_UART_ERROR_NONE;

+    huart->gState = HAL_UART_STATE_BUSY_TX;

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(huart);

+

+    /* Enable the UART Transmit data register empty Interrupt */

+    __HAL_UART_ENABLE_IT(huart, UART_IT_TXE);

+

+    return HAL_OK;

+  }

+  else

+  {

+    return HAL_BUSY;

+  }

+}

+

+/**

+  * @brief  Receives an amount of data in non blocking mode.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @param  pData Pointer to data buffer

+  * @param  Size Amount of data to be received

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

+{

+  /* Check that a Rx process is not already ongoing */

+  if (huart->RxState == HAL_UART_STATE_READY)

+  {

+    if ((pData == NULL) || (Size == 0U))

+    {

+      return HAL_ERROR;

+    }

+

+    /* Process Locked */

+    __HAL_LOCK(huart);

+

+    huart->pRxBuffPtr = pData;

+    huart->RxXferSize = Size;

+    huart->RxXferCount = Size;

+

+    huart->ErrorCode = HAL_UART_ERROR_NONE;

+    huart->RxState = HAL_UART_STATE_BUSY_RX;

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(huart);

+

+    /* Enable the UART Parity Error Interrupt */

+    __HAL_UART_ENABLE_IT(huart, UART_IT_PE);

+

+    /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */

+    __HAL_UART_ENABLE_IT(huart, UART_IT_ERR);

+

+    /* Enable the UART Data Register not empty Interrupt */

+    __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);

+

+    return HAL_OK;

+  }

+  else

+  {

+    return HAL_BUSY;

+  }

+}

+

+/**

+  * @brief  Sends an amount of data in non blocking mode.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @param  pData Pointer to data buffer

+  * @param  Size Amount of data to be sent

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

+{

+  uint32_t *tmp;

+

+  /* Check that a Tx process is not already ongoing */

+  if (huart->gState == HAL_UART_STATE_READY)

+  {

+    if ((pData == NULL) || (Size == 0U))

+    {

+      return HAL_ERROR;

+    }

+

+    /* Process Locked */

+    __HAL_LOCK(huart);

+

+    huart->pTxBuffPtr = pData;

+    huart->TxXferSize = Size;

+    huart->TxXferCount = Size;

+

+    huart->ErrorCode = HAL_UART_ERROR_NONE;

+    huart->gState = HAL_UART_STATE_BUSY_TX;

+

+    /* Set the UART DMA transfer complete callback */

+    huart->hdmatx->XferCpltCallback = UART_DMATransmitCplt;

+

+    /* Set the UART DMA Half transfer complete callback */

+    huart->hdmatx->XferHalfCpltCallback = UART_DMATxHalfCplt;

+

+    /* Set the DMA error callback */

+    huart->hdmatx->XferErrorCallback = UART_DMAError;

+

+    /* Set the DMA abort callback */

+    huart->hdmatx->XferAbortCallback = NULL;

+

+    /* Enable the UART transmit DMA channel */

+    tmp = (uint32_t *)&pData;

+    HAL_DMA_Start_IT(huart->hdmatx, *(uint32_t *)tmp, (uint32_t)&huart->Instance->DR, Size);

+

+    /* Clear the TC flag in the SR register by writing 0 to it */

+    __HAL_UART_CLEAR_FLAG(huart, UART_FLAG_TC);

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(huart);

+

+    /* Enable the DMA transfer for transmit request by setting the DMAT bit

+       in the UART CR3 register */

+    SET_BIT(huart->Instance->CR3, USART_CR3_DMAT);

+

+    return HAL_OK;

+  }

+  else

+  {

+    return HAL_BUSY;

+  }

+}

+

+/**

+  * @brief  Receives an amount of data in non blocking mode.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @param  pData Pointer to data buffer

+  * @param  Size Amount of data to be received

+  * @note   When the UART parity is enabled (PCE = 1) the received data contains the parity bit.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

+{

+  uint32_t *tmp;

+

+  /* Check that a Rx process is not already ongoing */

+  if (huart->RxState == HAL_UART_STATE_READY)

+  {

+    if ((pData == NULL) || (Size == 0U))

+    {

+      return HAL_ERROR;

+    }

+

+    /* Process Locked */

+    __HAL_LOCK(huart);

+

+    huart->pRxBuffPtr = pData;

+    huart->RxXferSize = Size;

+

+    huart->ErrorCode = HAL_UART_ERROR_NONE;

+    huart->RxState = HAL_UART_STATE_BUSY_RX;

+

+    /* Set the UART DMA transfer complete callback */

+    huart->hdmarx->XferCpltCallback = UART_DMAReceiveCplt;

+

+    /* Set the UART DMA Half transfer complete callback */

+    huart->hdmarx->XferHalfCpltCallback = UART_DMARxHalfCplt;

+

+    /* Set the DMA error callback */

+    huart->hdmarx->XferErrorCallback = UART_DMAError;

+

+    /* Set the DMA abort callback */

+    huart->hdmarx->XferAbortCallback = NULL;

+

+    /* Enable the DMA channel */

+    tmp = (uint32_t *)&pData;

+    HAL_DMA_Start_IT(huart->hdmarx, (uint32_t)&huart->Instance->DR, *(uint32_t *)tmp, Size);

+

+    /* Clear the Overrun flag just before enabling the DMA Rx request: can be mandatory for the second transfer */

+    __HAL_UART_CLEAR_OREFLAG(huart);

+

+    /* Process Unlocked */

+    __HAL_UNLOCK(huart);

+

+    /* Enable the UART Parity Error Interrupt */

+    SET_BIT(huart->Instance->CR1, USART_CR1_PEIE);

+

+    /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */

+    SET_BIT(huart->Instance->CR3, USART_CR3_EIE);

+

+    /* Enable the DMA transfer for the receiver request by setting the DMAR bit

+    in the UART CR3 register */

+    SET_BIT(huart->Instance->CR3, USART_CR3_DMAR);

+

+    return HAL_OK;

+  }

+  else

+  {

+    return HAL_BUSY;

+  }

+}

+

+/**

+  * @brief Pauses the DMA Transfer.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)

+{

+  uint32_t dmarequest = 0x00U;

+

+  /* Process Locked */

+  __HAL_LOCK(huart);

+

+  dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT);

+  if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest)

+  {

+    /* Disable the UART DMA Tx request */

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT);

+  }

+

+  dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR);

+  if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest)

+  {

+    /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */

+    CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);

+

+    /* Disable the UART DMA Rx request */

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);

+  }

+

+  /* Process Unlocked */

+  __HAL_UNLOCK(huart);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief Resumes the DMA Transfer.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)

+{

+  /* Process Locked */

+  __HAL_LOCK(huart);

+

+  if (huart->gState == HAL_UART_STATE_BUSY_TX)

+  {

+    /* Enable the UART DMA Tx request */

+    SET_BIT(huart->Instance->CR3, USART_CR3_DMAT);

+  }

+

+  if (huart->RxState == HAL_UART_STATE_BUSY_RX)

+  {

+    /* Clear the Overrun flag before resuming the Rx transfer*/

+    __HAL_UART_CLEAR_OREFLAG(huart);

+

+    /* Reenable PE and ERR (Frame error, noise error, overrun error) interrupts */

+    SET_BIT(huart->Instance->CR1, USART_CR1_PEIE);

+    SET_BIT(huart->Instance->CR3, USART_CR3_EIE);

+

+    /* Enable the UART DMA Rx request */

+    SET_BIT(huart->Instance->CR3, USART_CR3_DMAR);

+  }

+

+  /* Process Unlocked */

+  __HAL_UNLOCK(huart);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief Stops the DMA Transfer.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart)

+{

+  uint32_t dmarequest = 0x00U;

+  /* The Lock is not implemented on this API to allow the user application

+     to call the HAL UART API under callbacks HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback():

+     when calling HAL_DMA_Abort() API the DMA TX/RX Transfer complete interrupt is generated

+     and the correspond call back is executed HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback()

+     */

+

+  /* Stop UART DMA Tx request if ongoing */

+  dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT);

+  if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest)

+  {

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT);

+

+    /* Abort the UART DMA Tx channel */

+    if (huart->hdmatx != NULL)

+    {

+      HAL_DMA_Abort(huart->hdmatx);

+    }

+    UART_EndTxTransfer(huart);

+  }

+

+  /* Stop UART DMA Rx request if ongoing */

+  dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR);

+  if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest)

+  {

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);

+

+    /* Abort the UART DMA Rx channel */

+    if (huart->hdmarx != NULL)

+    {

+      HAL_DMA_Abort(huart->hdmarx);

+    }

+    UART_EndRxTransfer(huart);

+  }

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Abort ongoing transfers (blocking mode).

+  * @param  huart UART handle.

+  * @note   This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode.

+  *         This procedure performs following operations :

+  *           - Disable UART Interrupts (Tx and Rx)

+  *           - Disable the DMA transfer in the peripheral register (if enabled)

+  *           - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode)

+  *           - Set handle State to READY

+  * @note   This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.

+  * @retval HAL status

+*/

+HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)

+{

+  /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */

+  CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE));

+  CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);

+

+  /* Disable the UART DMA Tx request if enabled */

+  if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT))

+  {

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT);

+

+    /* Abort the UART DMA Tx channel: use blocking DMA Abort API (no callback) */

+    if (huart->hdmatx != NULL)

+    {

+      /* Set the UART DMA Abort callback to Null.

+         No call back execution at end of DMA abort procedure */

+      huart->hdmatx->XferAbortCallback = NULL;

+

+      if (HAL_DMA_Abort(huart->hdmatx) != HAL_OK)

+      {

+        if (HAL_DMA_GetError(huart->hdmatx) == HAL_DMA_ERROR_TIMEOUT)

+        {

+          /* Set error code to DMA */

+          huart->ErrorCode = HAL_UART_ERROR_DMA;

+

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+  }

+

+  /* Disable the UART DMA Rx request if enabled */

+  if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))

+  {

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);

+

+    /* Abort the UART DMA Rx channel: use blocking DMA Abort API (no callback) */

+    if (huart->hdmarx != NULL)

+    {

+      /* Set the UART DMA Abort callback to Null.

+         No call back execution at end of DMA abort procedure */

+      huart->hdmarx->XferAbortCallback = NULL;

+

+      if (HAL_DMA_Abort(huart->hdmarx) != HAL_OK)

+      {

+        if (HAL_DMA_GetError(huart->hdmarx) == HAL_DMA_ERROR_TIMEOUT)

+        {

+          /* Set error code to DMA */

+          huart->ErrorCode = HAL_UART_ERROR_DMA;

+

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+  }

+

+  /* Reset Tx and Rx transfer counters */

+  huart->TxXferCount = 0x00U;

+  huart->RxXferCount = 0x00U;

+

+  /* Reset ErrorCode */

+  huart->ErrorCode = HAL_UART_ERROR_NONE;

+

+  /* Restore huart->RxState and huart->gState to Ready */

+  huart->RxState = HAL_UART_STATE_READY;

+  huart->gState = HAL_UART_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Abort ongoing Transmit transfer (blocking mode).

+  * @param  huart UART handle.

+  * @note   This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode.

+  *         This procedure performs following operations :

+  *           - Disable UART Interrupts (Tx)

+  *           - Disable the DMA transfer in the peripheral register (if enabled)

+  *           - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode)

+  *           - Set handle State to READY

+  * @note   This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.

+  * @retval HAL status

+*/

+HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart)

+{

+  /* Disable TXEIE and TCIE interrupts */

+  CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE));

+

+  /* Disable the UART DMA Tx request if enabled */

+  if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT))

+  {

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT);

+

+    /* Abort the UART DMA Tx channel : use blocking DMA Abort API (no callback) */

+    if (huart->hdmatx != NULL)

+    {

+      /* Set the UART DMA Abort callback to Null.

+         No call back execution at end of DMA abort procedure */

+      huart->hdmatx->XferAbortCallback = NULL;

+

+      if (HAL_DMA_Abort(huart->hdmatx) != HAL_OK)

+      {

+        if (HAL_DMA_GetError(huart->hdmatx) == HAL_DMA_ERROR_TIMEOUT)

+        {

+          /* Set error code to DMA */

+          huart->ErrorCode = HAL_UART_ERROR_DMA;

+

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+  }

+

+  /* Reset Tx transfer counter */

+  huart->TxXferCount = 0x00U;

+

+  /* Restore huart->gState to Ready */

+  huart->gState = HAL_UART_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Abort ongoing Receive transfer (blocking mode).

+  * @param  huart UART handle.

+  * @note   This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode.

+  *         This procedure performs following operations :

+  *           - Disable UART Interrupts (Rx)

+  *           - Disable the DMA transfer in the peripheral register (if enabled)

+  *           - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode)

+  *           - Set handle State to READY

+  * @note   This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.

+  * @retval HAL status

+*/

+HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart)

+{

+  /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */

+  CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE));

+  CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);

+

+  /* Disable the UART DMA Rx request if enabled */

+  if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))

+  {

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);

+

+    /* Abort the UART DMA Rx channel : use blocking DMA Abort API (no callback) */

+    if (huart->hdmarx != NULL)

+    {

+      /* Set the UART DMA Abort callback to Null.

+         No call back execution at end of DMA abort procedure */

+      huart->hdmarx->XferAbortCallback = NULL;

+

+      if (HAL_DMA_Abort(huart->hdmarx) != HAL_OK)

+      {

+        if (HAL_DMA_GetError(huart->hdmarx) == HAL_DMA_ERROR_TIMEOUT)

+        {

+          /* Set error code to DMA */

+          huart->ErrorCode = HAL_UART_ERROR_DMA;

+

+          return HAL_TIMEOUT;

+        }

+      }

+    }

+  }

+

+  /* Reset Rx transfer counter */

+  huart->RxXferCount = 0x00U;

+

+  /* Restore huart->RxState to Ready */

+  huart->RxState = HAL_UART_STATE_READY;

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Abort ongoing transfers (Interrupt mode).

+  * @param  huart UART handle.

+  * @note   This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode.

+  *         This procedure performs following operations :

+  *           - Disable UART Interrupts (Tx and Rx)

+  *           - Disable the DMA transfer in the peripheral register (if enabled)

+  *           - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode)

+  *           - Set handle State to READY

+  *           - At abort completion, call user abort complete callback

+  * @note   This procedure is executed in Interrupt mode, meaning that abort procedure could be

+  *         considered as completed only when user abort complete callback is executed (not when exiting function).

+  * @retval HAL status

+*/

+HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart)

+{

+  uint32_t AbortCplt = 0x01U;

+

+  /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */

+  CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE));

+  CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);

+

+  /* If DMA Tx and/or DMA Rx Handles are associated to UART Handle, DMA Abort complete callbacks should be initialised

+     before any call to DMA Abort functions */

+  /* DMA Tx Handle is valid */

+  if (huart->hdmatx != NULL)

+  {

+    /* Set DMA Abort Complete callback if UART DMA Tx request if enabled.

+       Otherwise, set it to NULL */

+    if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT))

+    {

+      huart->hdmatx->XferAbortCallback = UART_DMATxAbortCallback;

+    }

+    else

+    {

+      huart->hdmatx->XferAbortCallback = NULL;

+    }

+  }

+  /* DMA Rx Handle is valid */

+  if (huart->hdmarx != NULL)

+  {

+    /* Set DMA Abort Complete callback if UART DMA Rx request if enabled.

+       Otherwise, set it to NULL */

+    if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))

+    {

+      huart->hdmarx->XferAbortCallback = UART_DMARxAbortCallback;

+    }

+    else

+    {

+      huart->hdmarx->XferAbortCallback = NULL;

+    }

+  }

+

+  /* Disable the UART DMA Tx request if enabled */

+  if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT))

+  {

+    /* Disable DMA Tx at UART level */

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT);

+

+    /* Abort the UART DMA Tx channel : use non blocking DMA Abort API (callback) */

+    if (huart->hdmatx != NULL)

+    {

+      /* UART Tx DMA Abort callback has already been initialised :

+         will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */

+

+      /* Abort DMA TX */

+      if (HAL_DMA_Abort_IT(huart->hdmatx) != HAL_OK)

+      {

+        huart->hdmatx->XferAbortCallback = NULL;

+      }

+      else

+      {

+        AbortCplt = 0x00U;

+      }

+    }

+  }

+

+  /* Disable the UART DMA Rx request if enabled */

+  if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))

+  {

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);

+

+    /* Abort the UART DMA Rx channel : use non blocking DMA Abort API (callback) */

+    if (huart->hdmarx != NULL)

+    {

+      /* UART Rx DMA Abort callback has already been initialised :

+         will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */

+

+      /* Abort DMA RX */

+      if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK)

+      {

+        huart->hdmarx->XferAbortCallback = NULL;

+        AbortCplt = 0x01U;

+      }

+      else

+      {

+        AbortCplt = 0x00U;

+      }

+    }

+  }

+

+  /* if no DMA abort complete callback execution is required => call user Abort Complete callback */

+  if (AbortCplt == 0x01U)

+  {

+    /* Reset Tx and Rx transfer counters */

+    huart->TxXferCount = 0x00U;

+    huart->RxXferCount = 0x00U;

+

+    /* Reset ErrorCode */

+    huart->ErrorCode = HAL_UART_ERROR_NONE;

+

+    /* Restore huart->gState and huart->RxState to Ready */

+    huart->gState  = HAL_UART_STATE_READY;

+    huart->RxState = HAL_UART_STATE_READY;

+

+    /* As no DMA to be aborted, call directly user Abort complete callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+    /* Call registered Abort complete callback */

+    huart->AbortCpltCallback(huart);

+#else

+    /* Call legacy weak Abort complete callback */

+    HAL_UART_AbortCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+  }

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Abort ongoing Transmit transfer (Interrupt mode).

+  * @param  huart UART handle.

+  * @note   This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode.

+  *         This procedure performs following operations :

+  *           - Disable UART Interrupts (Tx)

+  *           - Disable the DMA transfer in the peripheral register (if enabled)

+  *           - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode)

+  *           - Set handle State to READY

+  *           - At abort completion, call user abort complete callback

+  * @note   This procedure is executed in Interrupt mode, meaning that abort procedure could be

+  *         considered as completed only when user abort complete callback is executed (not when exiting function).

+  * @retval HAL status

+*/

+HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart)

+{

+  /* Disable TXEIE and TCIE interrupts */

+  CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE));

+

+  /* Disable the UART DMA Tx request if enabled */

+  if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT))

+  {

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT);

+

+    /* Abort the UART DMA Tx channel : use blocking DMA Abort API (no callback) */

+    if (huart->hdmatx != NULL)

+    {

+      /* Set the UART DMA Abort callback :

+         will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */

+      huart->hdmatx->XferAbortCallback = UART_DMATxOnlyAbortCallback;

+

+      /* Abort DMA TX */

+      if (HAL_DMA_Abort_IT(huart->hdmatx) != HAL_OK)

+      {

+        /* Call Directly huart->hdmatx->XferAbortCallback function in case of error */

+        huart->hdmatx->XferAbortCallback(huart->hdmatx);

+      }

+    }

+    else

+    {

+      /* Reset Tx transfer counter */

+      huart->TxXferCount = 0x00U;

+

+      /* Restore huart->gState to Ready */

+      huart->gState = HAL_UART_STATE_READY;

+

+      /* As no DMA to be aborted, call directly user Abort complete callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+      /* Call registered Abort Transmit Complete Callback */

+      huart->AbortTransmitCpltCallback(huart);

+#else

+      /* Call legacy weak Abort Transmit Complete Callback */

+      HAL_UART_AbortTransmitCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+    }

+  }

+  else

+  {

+    /* Reset Tx transfer counter */

+    huart->TxXferCount = 0x00U;

+

+    /* Restore huart->gState to Ready */

+    huart->gState = HAL_UART_STATE_READY;

+

+    /* As no DMA to be aborted, call directly user Abort complete callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+    /* Call registered Abort Transmit Complete Callback */

+    huart->AbortTransmitCpltCallback(huart);

+#else

+    /* Call legacy weak Abort Transmit Complete Callback */

+    HAL_UART_AbortTransmitCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+  }

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Abort ongoing Receive transfer (Interrupt mode).

+  * @param  huart UART handle.

+  * @note   This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode.

+  *         This procedure performs following operations :

+  *           - Disable UART Interrupts (Rx)

+  *           - Disable the DMA transfer in the peripheral register (if enabled)

+  *           - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode)

+  *           - Set handle State to READY

+  *           - At abort completion, call user abort complete callback

+  * @note   This procedure is executed in Interrupt mode, meaning that abort procedure could be

+  *         considered as completed only when user abort complete callback is executed (not when exiting function).

+  * @retval HAL status

+*/

+HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart)

+{

+  /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */

+  CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE));

+  CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);

+

+  /* Disable the UART DMA Rx request if enabled */

+  if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))

+  {

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);

+

+    /* Abort the UART DMA Rx channel : use blocking DMA Abort API (no callback) */

+    if (huart->hdmarx != NULL)

+    {

+      /* Set the UART DMA Abort callback :

+         will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */

+      huart->hdmarx->XferAbortCallback = UART_DMARxOnlyAbortCallback;

+

+      /* Abort DMA RX */

+      if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK)

+      {

+        /* Call Directly huart->hdmarx->XferAbortCallback function in case of error */

+        huart->hdmarx->XferAbortCallback(huart->hdmarx);

+      }

+    }

+    else

+    {

+      /* Reset Rx transfer counter */

+      huart->RxXferCount = 0x00U;

+

+      /* Restore huart->RxState to Ready */

+      huart->RxState = HAL_UART_STATE_READY;

+

+      /* As no DMA to be aborted, call directly user Abort complete callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+      /* Call registered Abort Receive Complete Callback */

+      huart->AbortReceiveCpltCallback(huart);

+#else

+      /* Call legacy weak Abort Receive Complete Callback */

+      HAL_UART_AbortReceiveCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+    }

+  }

+  else

+  {

+    /* Reset Rx transfer counter */

+    huart->RxXferCount = 0x00U;

+

+    /* Restore huart->RxState to Ready */

+    huart->RxState = HAL_UART_STATE_READY;

+

+    /* As no DMA to be aborted, call directly user Abort complete callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+    /* Call registered Abort Receive Complete Callback */

+    huart->AbortReceiveCpltCallback(huart);

+#else

+    /* Call legacy weak Abort Receive Complete Callback */

+    HAL_UART_AbortReceiveCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+  }

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  This function handles UART interrupt request.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval None

+  */

+void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)

+{

+  uint32_t isrflags   = READ_REG(huart->Instance->SR);

+  uint32_t cr1its     = READ_REG(huart->Instance->CR1);

+  uint32_t cr3its     = READ_REG(huart->Instance->CR3);

+  uint32_t errorflags = 0x00U;

+  uint32_t dmarequest = 0x00U;

+

+  /* If no error occurs */

+  errorflags = (isrflags & (uint32_t)(USART_SR_PE | USART_SR_FE | USART_SR_ORE | USART_SR_NE));

+  if (errorflags == RESET)

+  {

+    /* UART in mode Receiver -------------------------------------------------*/

+    if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET))

+    {

+      UART_Receive_IT(huart);

+      return;

+    }

+  }

+

+  /* If some errors occur */

+  if ((errorflags != RESET) && (((cr3its & USART_CR3_EIE) != RESET) || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET)))

+  {

+    /* UART parity error interrupt occurred ----------------------------------*/

+    if (((isrflags & USART_SR_PE) != RESET) && ((cr1its & USART_CR1_PEIE) != RESET))

+    {

+      huart->ErrorCode |= HAL_UART_ERROR_PE;

+    }

+

+    /* UART noise error interrupt occurred -----------------------------------*/

+    if (((isrflags & USART_SR_NE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET))

+    {

+      huart->ErrorCode |= HAL_UART_ERROR_NE;

+    }

+

+    /* UART frame error interrupt occurred -----------------------------------*/

+    if (((isrflags & USART_SR_FE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET))

+    {

+      huart->ErrorCode |= HAL_UART_ERROR_FE;

+    }

+

+    /* UART Over-Run interrupt occurred --------------------------------------*/

+    if (((isrflags & USART_SR_ORE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET))

+    {

+      huart->ErrorCode |= HAL_UART_ERROR_ORE;

+    }

+

+    /* Call UART Error Call back function if need be --------------------------*/

+    if (huart->ErrorCode != HAL_UART_ERROR_NONE)

+    {

+      /* UART in mode Receiver -----------------------------------------------*/

+      if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET))

+      {

+        UART_Receive_IT(huart);

+      }

+

+      /* If Overrun error occurs, or if any error occurs in DMA mode reception,

+         consider error as blocking */

+      dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR);

+      if (((huart->ErrorCode & HAL_UART_ERROR_ORE) != RESET) || dmarequest)

+      {

+        /* Blocking error : transfer is aborted

+           Set the UART state ready to be able to start again the process,

+           Disable Rx Interrupts, and disable Rx DMA request, if ongoing */

+        UART_EndRxTransfer(huart);

+

+        /* Disable the UART DMA Rx request if enabled */

+        if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))

+        {

+          CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);

+

+          /* Abort the UART DMA Rx channel */

+          if (huart->hdmarx != NULL)

+          {

+            /* Set the UART DMA Abort callback :

+               will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */

+            huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError;

+            if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK)

+            {

+              /* Call Directly XferAbortCallback function in case of error */

+              huart->hdmarx->XferAbortCallback(huart->hdmarx);

+            }

+          }

+          else

+          {

+            /* Call user error callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+            /*Call registered error callback*/

+            huart->ErrorCallback(huart);

+#else

+            /*Call legacy weak error callback*/

+            HAL_UART_ErrorCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+          }

+        }

+        else

+        {

+          /* Call user error callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+          /*Call registered error callback*/

+          huart->ErrorCallback(huart);

+#else

+          /*Call legacy weak error callback*/

+          HAL_UART_ErrorCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+        }

+      }

+      else

+      {

+        /* Non Blocking error : transfer could go on.

+           Error is notified to user through user error callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+        /*Call registered error callback*/

+        huart->ErrorCallback(huart);

+#else

+        /*Call legacy weak error callback*/

+        HAL_UART_ErrorCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+

+        huart->ErrorCode = HAL_UART_ERROR_NONE;

+      }

+    }

+    return;

+  } /* End if some error occurs */

+

+  /* UART in mode Transmitter ------------------------------------------------*/

+  if (((isrflags & USART_SR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET))

+  {

+    UART_Transmit_IT(huart);

+    return;

+  }

+

+  /* UART in mode Transmitter end --------------------------------------------*/

+  if (((isrflags & USART_SR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET))

+  {

+    UART_EndTransmit_IT(huart);

+    return;

+  }

+}

+

+/**

+  * @brief  Tx Transfer completed callbacks.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval None

+  */

+__weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(huart);

+  /* NOTE: This function should not be modified, when the callback is needed,

+           the HAL_UART_TxCpltCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Tx Half Transfer completed callbacks.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval None

+  */

+__weak void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(huart);

+  /* NOTE: This function should not be modified, when the callback is needed,

+           the HAL_UART_TxHalfCpltCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Rx Transfer completed callbacks.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval None

+  */

+__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(huart);

+  /* NOTE: This function should not be modified, when the callback is needed,

+           the HAL_UART_RxCpltCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  Rx Half Transfer completed callbacks.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval None

+  */

+__weak void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(huart);

+  /* NOTE: This function should not be modified, when the callback is needed,

+           the HAL_UART_RxHalfCpltCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  UART error callbacks.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval None

+  */

+__weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(huart);

+  /* NOTE: This function should not be modified, when the callback is needed,

+           the HAL_UART_ErrorCallback could be implemented in the user file

+   */

+}

+

+/**

+  * @brief  UART Abort Complete callback.

+  * @param  huart UART handle.

+  * @retval None

+  */

+__weak void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(huart);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_UART_AbortCpltCallback can be implemented in the user file.

+   */

+}

+

+/**

+  * @brief  UART Abort Complete callback.

+  * @param  huart UART handle.

+  * @retval None

+  */

+__weak void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(huart);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_UART_AbortTransmitCpltCallback can be implemented in the user file.

+   */

+}

+

+/**

+  * @brief  UART Abort Receive Complete callback.

+  * @param  huart UART handle.

+  * @retval None

+  */

+__weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)

+{

+  /* Prevent unused argument(s) compilation warning */

+  UNUSED(huart);

+

+  /* NOTE : This function should not be modified, when the callback is needed,

+            the HAL_UART_AbortReceiveCpltCallback can be implemented in the user file.

+   */

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup UART_Exported_Functions_Group3 Peripheral Control functions

+  *  @brief   UART control functions

+  *

+@verbatim

+  ==============================================================================

+                      ##### Peripheral Control functions #####

+  ==============================================================================

+  [..]

+    This subsection provides a set of functions allowing to control the UART:

+    (+) HAL_LIN_SendBreak() API can be helpful to transmit the break character.

+    (+) HAL_MultiProcessor_EnterMuteMode() API can be helpful to enter the UART in mute mode.

+    (+) HAL_MultiProcessor_ExitMuteMode() API can be helpful to exit the UART mute mode by software.

+    (+) HAL_HalfDuplex_EnableTransmitter() API to enable the UART transmitter and disables the UART receiver in Half Duplex mode

+    (+) HAL_HalfDuplex_EnableReceiver() API to enable the UART receiver and disables the UART transmitter in Half Duplex mode

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Transmits break characters.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)

+{

+  /* Check the parameters */

+  assert_param(IS_UART_INSTANCE(huart->Instance));

+

+  /* Process Locked */

+  __HAL_LOCK(huart);

+

+  huart->gState = HAL_UART_STATE_BUSY;

+

+  /* Send break characters */

+  SET_BIT(huart->Instance->CR1, USART_CR1_SBK);

+

+  huart->gState = HAL_UART_STATE_READY;

+

+  /* Process Unlocked */

+  __HAL_UNLOCK(huart);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Enters the UART in mute mode.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart)

+{

+  /* Check the parameters */

+  assert_param(IS_UART_INSTANCE(huart->Instance));

+

+  /* Process Locked */

+  __HAL_LOCK(huart);

+

+  huart->gState = HAL_UART_STATE_BUSY;

+

+  /* Enable the USART mute mode  by setting the RWU bit in the CR1 register */

+  SET_BIT(huart->Instance->CR1, USART_CR1_RWU);

+

+  huart->gState = HAL_UART_STATE_READY;

+

+  /* Process Unlocked */

+  __HAL_UNLOCK(huart);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Exits the UART mute mode: wake up software.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart)

+{

+  /* Check the parameters */

+  assert_param(IS_UART_INSTANCE(huart->Instance));

+

+  /* Process Locked */

+  __HAL_LOCK(huart);

+

+  huart->gState = HAL_UART_STATE_BUSY;

+

+  /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */

+  CLEAR_BIT(huart->Instance->CR1, USART_CR1_RWU);

+

+  huart->gState = HAL_UART_STATE_READY;

+

+  /* Process Unlocked */

+  __HAL_UNLOCK(huart);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Enables the UART transmitter and disables the UART receiver.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)

+{

+  uint32_t tmpreg = 0x00U;

+

+  /* Process Locked */

+  __HAL_LOCK(huart);

+

+  huart->gState = HAL_UART_STATE_BUSY;

+

+  /*-------------------------- USART CR1 Configuration -----------------------*/

+  tmpreg = huart->Instance->CR1;

+

+  /* Clear TE and RE bits */

+  tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_TE | USART_CR1_RE));

+

+  /* Enable the USART's transmit interface by setting the TE bit in the USART CR1 register */

+  tmpreg |= (uint32_t)USART_CR1_TE;

+

+  /* Write to USART CR1 */

+  WRITE_REG(huart->Instance->CR1, (uint32_t)tmpreg);

+

+  huart->gState = HAL_UART_STATE_READY;

+

+  /* Process Unlocked */

+  __HAL_UNLOCK(huart);

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Enables the UART receiver and disables the UART transmitter.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart)

+{

+  uint32_t tmpreg = 0x00U;

+

+  /* Process Locked */

+  __HAL_LOCK(huart);

+

+  huart->gState = HAL_UART_STATE_BUSY;

+

+  /*-------------------------- USART CR1 Configuration -----------------------*/

+  tmpreg = huart->Instance->CR1;

+

+  /* Clear TE and RE bits */

+  tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_TE | USART_CR1_RE));

+

+  /* Enable the USART's receive interface by setting the RE bit in the USART CR1 register */

+  tmpreg |= (uint32_t)USART_CR1_RE;

+

+  /* Write to USART CR1 */

+  WRITE_REG(huart->Instance->CR1, (uint32_t)tmpreg);

+

+  huart->gState = HAL_UART_STATE_READY;

+

+  /* Process Unlocked */

+  __HAL_UNLOCK(huart);

+

+  return HAL_OK;

+}

+

+/**

+  * @}

+  */

+

+/** @defgroup UART_Exported_Functions_Group4 Peripheral State and Errors functions

+  *  @brief   UART State and Errors functions

+  *

+@verbatim

+  ==============================================================================

+                 ##### Peripheral State and Errors functions #####

+  ==============================================================================

+ [..]

+   This subsection provides a set of functions allowing to return the State of

+   UART communication process, return Peripheral Errors occurred during communication

+   process

+   (+) HAL_UART_GetState() API can be helpful to check in run-time the state of the UART peripheral.

+   (+) HAL_UART_GetError() check in run-time errors that could be occurred during communication.

+

+@endverbatim

+  * @{

+  */

+

+/**

+  * @brief  Returns the UART state.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL state

+  */

+HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart)

+{

+  uint32_t temp1 = 0x00U, temp2 = 0x00U;

+  temp1 = huart->gState;

+  temp2 = huart->RxState;

+

+  return (HAL_UART_StateTypeDef)(temp1 | temp2);

+}

+

+/**

+  * @brief  Return the UART error code

+  * @param  huart Pointer to a UART_HandleTypeDef structure that contains

+  *               the configuration information for the specified UART.

+  * @retval UART Error Code

+  */

+uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart)

+{

+  return huart->ErrorCode;

+}

+

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/** @defgroup UART_Private_Functions UART Private Functions

+  * @{

+  */

+

+/**

+  * @brief  Initialize the callbacks to their default values.

+  * @param  huart UART handle.

+  * @retval none

+  */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart)

+{

+  /* Init the UART Callback settings */

+  huart->TxHalfCpltCallback        = HAL_UART_TxHalfCpltCallback;        /* Legacy weak TxHalfCpltCallback        */

+  huart->TxCpltCallback            = HAL_UART_TxCpltCallback;            /* Legacy weak TxCpltCallback            */

+  huart->RxHalfCpltCallback        = HAL_UART_RxHalfCpltCallback;        /* Legacy weak RxHalfCpltCallback        */

+  huart->RxCpltCallback            = HAL_UART_RxCpltCallback;            /* Legacy weak RxCpltCallback            */

+  huart->ErrorCallback             = HAL_UART_ErrorCallback;             /* Legacy weak ErrorCallback             */

+  huart->AbortCpltCallback         = HAL_UART_AbortCpltCallback;         /* Legacy weak AbortCpltCallback         */

+  huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */

+  huart->AbortReceiveCpltCallback  = HAL_UART_AbortReceiveCpltCallback;  /* Legacy weak AbortReceiveCpltCallback  */

+

+}

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+

+/**

+  * @brief  DMA UART transmit process complete callback.

+  * @param  hdma  Pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA module.

+  * @retval None

+  */

+static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma)

+{

+  UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+  /* DMA Normal mode*/

+  if ((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U)

+  {

+    huart->TxXferCount = 0x00U;

+

+    /* Disable the DMA transfer for transmit request by setting the DMAT bit

+       in the UART CR3 register */

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT);

+

+    /* Enable the UART Transmit Complete Interrupt */

+    SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);

+

+  }

+  /* DMA Circular mode */

+  else

+  {

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+    /*Call registered Tx complete callback*/

+    huart->TxCpltCallback(huart);

+#else

+    /*Call legacy weak Tx complete callback*/

+    HAL_UART_TxCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+  }

+}

+

+/**

+  * @brief DMA UART transmit process half complete callback

+  * @param  hdma  Pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA module.

+  * @retval None

+  */

+static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma)

+{

+  UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  /*Call registered Tx complete callback*/

+  huart->TxHalfCpltCallback(huart);

+#else

+  /*Call legacy weak Tx complete callback*/

+  HAL_UART_TxHalfCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  DMA UART receive process complete callback.

+  * @param  hdma  Pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA module.

+  * @retval None

+  */

+static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma)

+{

+  UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+  /* DMA Normal mode*/

+  if ((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U)

+  {

+    huart->RxXferCount = 0U;

+

+    /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */

+    CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);

+

+    /* Disable the DMA transfer for the receiver request by setting the DMAR bit

+       in the UART CR3 register */

+    CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);

+

+    /* At end of Rx process, restore huart->RxState to Ready */

+    huart->RxState = HAL_UART_STATE_READY;

+  }

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  /*Call registered Rx complete callback*/

+  huart->RxCpltCallback(huart);

+#else

+  /*Call legacy weak Rx complete callback*/

+  HAL_UART_RxCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief DMA UART receive process half complete callback

+  * @param  hdma  Pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA module.

+  * @retval None

+  */

+static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma)

+{

+  UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  /*Call registered Rx Half complete callback*/

+  huart->RxHalfCpltCallback(huart);

+#else

+  /*Call legacy weak Rx Half complete callback*/

+  HAL_UART_RxHalfCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  DMA UART communication error callback.

+  * @param  hdma  Pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA module.

+  * @retval None

+  */

+static void UART_DMAError(DMA_HandleTypeDef *hdma)

+{

+  uint32_t dmarequest = 0x00U;

+  UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  /* Stop UART DMA Tx request if ongoing */

+  dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT);

+  if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest)

+  {

+    huart->TxXferCount = 0x00U;

+    UART_EndTxTransfer(huart);

+  }

+

+  /* Stop UART DMA Rx request if ongoing */

+  dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR);

+  if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest)

+  {

+    huart->RxXferCount = 0x00U;

+    UART_EndRxTransfer(huart);

+  }

+

+  huart->ErrorCode |= HAL_UART_ERROR_DMA;

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  /*Call registered error callback*/

+  huart->ErrorCallback(huart);

+#else

+  /*Call legacy weak error callback*/

+  HAL_UART_ErrorCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  This function handles UART Communication Timeout.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @param  Flag specifies the UART flag to check.

+  * @param  Status The new Flag status (SET or RESET).

+  * @param  Tickstart Tick start value

+  * @param  Timeout Timeout duration

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout)

+{

+  /* Wait until flag is set */

+  while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)

+  {

+    /* Check for the Timeout */

+    if (Timeout != HAL_MAX_DELAY)

+    {

+      if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout))

+      {

+        /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */

+        CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE));

+        CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);

+

+        huart->gState  = HAL_UART_STATE_READY;

+        huart->RxState = HAL_UART_STATE_READY;

+

+        /* Process Unlocked */

+        __HAL_UNLOCK(huart);

+

+        return HAL_TIMEOUT;

+      }

+    }

+  }

+  return HAL_OK;

+}

+

+/**

+  * @brief  End ongoing Tx transfer on UART peripheral (following error detection or Transmit completion).

+  * @param  huart UART handle.

+  * @retval None

+  */

+static void UART_EndTxTransfer(UART_HandleTypeDef *huart)

+{

+  /* Disable TXEIE and TCIE interrupts */

+  CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE));

+

+  /* At end of Tx process, restore huart->gState to Ready */

+  huart->gState = HAL_UART_STATE_READY;

+}

+

+/**

+  * @brief  End ongoing Rx transfer on UART peripheral (following error detection or Reception completion).

+  * @param  huart UART handle.

+  * @retval None

+  */

+static void UART_EndRxTransfer(UART_HandleTypeDef *huart)

+{

+  /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */

+  CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE));

+  CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);

+

+  /* At end of Rx process, restore huart->RxState to Ready */

+  huart->RxState = HAL_UART_STATE_READY;

+}

+

+/**

+  * @brief  DMA UART communication abort callback, when initiated by HAL services on Error

+  *         (To be called at end of DMA Abort procedure following error occurrence).

+  * @param  hdma  Pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA module.

+  * @retval None

+  */

+static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma)

+{

+  UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+  huart->RxXferCount = 0x00U;

+  huart->TxXferCount = 0x00U;

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  /*Call registered error callback*/

+  huart->ErrorCallback(huart);

+#else

+  /*Call legacy weak error callback*/

+  HAL_UART_ErrorCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  DMA UART Tx communication abort callback, when initiated by user

+  *         (To be called at end of DMA Tx Abort procedure following user abort request).

+  * @note   When this callback is executed, User Abort complete call back is called only if no

+  *         Abort still ongoing for Rx DMA Handle.

+  * @param  hdma  Pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA module.

+  * @retval None

+  */

+static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma)

+{

+  UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  huart->hdmatx->XferAbortCallback = NULL;

+

+  /* Check if an Abort process is still ongoing */

+  if (huart->hdmarx != NULL)

+  {

+    if (huart->hdmarx->XferAbortCallback != NULL)

+    {

+      return;

+    }

+  }

+

+  /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */

+  huart->TxXferCount = 0x00U;

+  huart->RxXferCount = 0x00U;

+

+  /* Reset ErrorCode */

+  huart->ErrorCode = HAL_UART_ERROR_NONE;

+

+  /* Restore huart->gState and huart->RxState to Ready */

+  huart->gState  = HAL_UART_STATE_READY;

+  huart->RxState = HAL_UART_STATE_READY;

+

+  /* Call user Abort complete callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  /* Call registered Abort complete callback */

+  huart->AbortCpltCallback(huart);

+#else

+  /* Call legacy weak Abort complete callback */

+  HAL_UART_AbortCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  DMA UART Rx communication abort callback, when initiated by user

+  *         (To be called at end of DMA Rx Abort procedure following user abort request).

+  * @note   When this callback is executed, User Abort complete call back is called only if no

+  *         Abort still ongoing for Tx DMA Handle.

+  * @param  hdma  Pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA module.

+  * @retval None

+  */

+static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma)

+{

+  UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  huart->hdmarx->XferAbortCallback = NULL;

+

+  /* Check if an Abort process is still ongoing */

+  if (huart->hdmatx != NULL)

+  {

+    if (huart->hdmatx->XferAbortCallback != NULL)

+    {

+      return;

+    }

+  }

+

+  /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */

+  huart->TxXferCount = 0x00U;

+  huart->RxXferCount = 0x00U;

+

+  /* Reset ErrorCode */

+  huart->ErrorCode = HAL_UART_ERROR_NONE;

+

+  /* Restore huart->gState and huart->RxState to Ready */

+  huart->gState  = HAL_UART_STATE_READY;

+  huart->RxState = HAL_UART_STATE_READY;

+

+  /* Call user Abort complete callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  /* Call registered Abort complete callback */

+  huart->AbortCpltCallback(huart);

+#else

+  /* Call legacy weak Abort complete callback */

+  HAL_UART_AbortCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  DMA UART Tx communication abort callback, when initiated by user by a call to

+  *         HAL_UART_AbortTransmit_IT API (Abort only Tx transfer)

+  *         (This callback is executed at end of DMA Tx Abort procedure following user abort request,

+  *         and leads to user Tx Abort Complete callback execution).

+  * @param  hdma  Pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA module.

+  * @retval None

+  */

+static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma)

+{

+  UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  huart->TxXferCount = 0x00U;

+

+  /* Restore huart->gState to Ready */

+  huart->gState = HAL_UART_STATE_READY;

+

+  /* Call user Abort complete callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  /* Call registered Abort Transmit Complete Callback */

+  huart->AbortTransmitCpltCallback(huart);

+#else

+  /* Call legacy weak Abort Transmit Complete Callback */

+  HAL_UART_AbortTransmitCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  DMA UART Rx communication abort callback, when initiated by user by a call to

+  *         HAL_UART_AbortReceive_IT API (Abort only Rx transfer)

+  *         (This callback is executed at end of DMA Rx Abort procedure following user abort request,

+  *         and leads to user Rx Abort Complete callback execution).

+  * @param  hdma  Pointer to a DMA_HandleTypeDef structure that contains

+  *               the configuration information for the specified DMA module.

+  * @retval None

+  */

+static void UART_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma)

+{

+  UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;

+

+  huart->RxXferCount = 0x00U;

+

+  /* Restore huart->RxState to Ready */

+  huart->RxState = HAL_UART_STATE_READY;

+

+  /* Call user Abort complete callback */

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  /* Call registered Abort Receive Complete Callback */

+  huart->AbortReceiveCpltCallback(huart);

+#else

+  /* Call legacy weak Abort Receive Complete Callback */

+  HAL_UART_AbortReceiveCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+}

+

+/**

+  * @brief  Sends an amount of data in non blocking mode.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart)

+{

+  uint16_t *tmp;

+

+  /* Check that a Tx process is ongoing */

+  if (huart->gState == HAL_UART_STATE_BUSY_TX)

+  {

+    if (huart->Init.WordLength == UART_WORDLENGTH_9B)

+    {

+      tmp = (uint16_t *) huart->pTxBuffPtr;

+      huart->Instance->DR = (uint16_t)(*tmp & (uint16_t)0x01FF);

+      if (huart->Init.Parity == UART_PARITY_NONE)

+      {

+        huart->pTxBuffPtr += 2U;

+      }

+      else

+      {

+        huart->pTxBuffPtr += 1U;

+      }

+    }

+    else

+    {

+      huart->Instance->DR = (uint8_t)(*huart->pTxBuffPtr++ & (uint8_t)0x00FF);

+    }

+

+    if (--huart->TxXferCount == 0U)

+    {

+      /* Disable the UART Transmit Complete Interrupt */

+      __HAL_UART_DISABLE_IT(huart, UART_IT_TXE);

+

+      /* Enable the UART Transmit Complete Interrupt */

+      __HAL_UART_ENABLE_IT(huart, UART_IT_TC);

+    }

+    return HAL_OK;

+  }

+  else

+  {

+    return HAL_BUSY;

+  }

+}

+

+/**

+  * @brief  Wraps up transmission in non blocking mode.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart)

+{

+  /* Disable the UART Transmit Complete Interrupt */

+  __HAL_UART_DISABLE_IT(huart, UART_IT_TC);

+

+  /* Tx process is ended, restore huart->gState to Ready */

+  huart->gState = HAL_UART_STATE_READY;

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+  /*Call registered Tx complete callback*/

+  huart->TxCpltCallback(huart);

+#else

+  /*Call legacy weak Tx complete callback*/

+  HAL_UART_TxCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+

+  return HAL_OK;

+}

+

+/**

+  * @brief  Receives an amount of data in non blocking mode

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval HAL status

+  */

+static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart)

+{

+  uint16_t *tmp;

+

+  /* Check that a Rx process is ongoing */

+  if (huart->RxState == HAL_UART_STATE_BUSY_RX)

+  {

+    if (huart->Init.WordLength == UART_WORDLENGTH_9B)

+    {

+      tmp = (uint16_t *) huart->pRxBuffPtr;

+      if (huart->Init.Parity == UART_PARITY_NONE)

+      {

+        *tmp = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF);

+        huart->pRxBuffPtr += 2U;

+      }

+      else

+      {

+        *tmp = (uint16_t)(huart->Instance->DR & (uint16_t)0x00FF);

+        huart->pRxBuffPtr += 1U;

+      }

+    }

+    else

+    {

+      if (huart->Init.Parity == UART_PARITY_NONE)

+      {

+        *huart->pRxBuffPtr++ = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF);

+      }

+      else

+      {

+        *huart->pRxBuffPtr++ = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F);

+      }

+    }

+

+    if (--huart->RxXferCount == 0U)

+    {

+      /* Disable the UART Data Register not empty Interrupt */

+      __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);

+

+      /* Disable the UART Parity Error Interrupt */

+      __HAL_UART_DISABLE_IT(huart, UART_IT_PE);

+

+      /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */

+      __HAL_UART_DISABLE_IT(huart, UART_IT_ERR);

+

+      /* Rx process is completed, restore huart->RxState to Ready */

+      huart->RxState = HAL_UART_STATE_READY;

+

+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)

+      /*Call registered Rx complete callback*/

+      huart->RxCpltCallback(huart);

+#else

+      /*Call legacy weak Rx complete callback*/

+      HAL_UART_RxCpltCallback(huart);

+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */

+

+      return HAL_OK;

+    }

+    return HAL_OK;

+  }

+  else

+  {

+    return HAL_BUSY;

+  }

+}

+

+/**

+  * @brief  Configures the UART peripheral.

+  * @param  huart  Pointer to a UART_HandleTypeDef structure that contains

+  *                the configuration information for the specified UART module.

+  * @retval None

+  */

+static void UART_SetConfig(UART_HandleTypeDef *huart)

+{

+  uint32_t tmpreg;

+  uint32_t pclk;

+

+  /* Check the parameters */

+  assert_param(IS_UART_BAUDRATE(huart->Init.BaudRate));

+  assert_param(IS_UART_STOPBITS(huart->Init.StopBits));

+  assert_param(IS_UART_PARITY(huart->Init.Parity));

+  assert_param(IS_UART_MODE(huart->Init.Mode));

+

+  /*-------------------------- USART CR2 Configuration -----------------------*/

+  /* Configure the UART Stop Bits: Set STOP[13:12] bits

+     according to huart->Init.StopBits value */

+  MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits);

+

+  /*-------------------------- USART CR1 Configuration -----------------------*/

+  /* Configure the UART Word Length, Parity and mode:

+     Set the M bits according to huart->Init.WordLength value

+     Set PCE and PS bits according to huart->Init.Parity value

+     Set TE and RE bits according to huart->Init.Mode value

+     Set OVER8 bit according to huart->Init.OverSampling value */

+

+  tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling;

+  MODIFY_REG(huart->Instance->CR1,

+             (uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8),

+             tmpreg);

+

+  /*-------------------------- USART CR3 Configuration -----------------------*/

+  /* Configure the UART HFC: Set CTSE and RTSE bits according to huart->Init.HwFlowCtl value */

+  MODIFY_REG(huart->Instance->CR3, (USART_CR3_RTSE | USART_CR3_CTSE), huart->Init.HwFlowCtl);

+

+  /* Check the Over Sampling */

+  if(huart->Init.OverSampling == UART_OVERSAMPLING_8)

+  {

+    /*------- UART-associated USART registers setting : BRR Configuration ------*/

+    if((huart->Instance == USART1))

+    {

+      pclk = HAL_RCC_GetPCLK2Freq();

+      huart->Instance->BRR = UART_BRR_SAMPLING8(pclk, huart->Init.BaudRate);

+    }

+    else

+    {

+      pclk = HAL_RCC_GetPCLK1Freq();

+      huart->Instance->BRR = UART_BRR_SAMPLING8(pclk, huart->Init.BaudRate);

+    }

+  }

+  else

+  {

+    /*------- UART-associated USART registers setting : BRR Configuration ------*/

+    if((huart->Instance == USART1))

+    {

+      pclk = HAL_RCC_GetPCLK2Freq();

+      huart->Instance->BRR = UART_BRR_SAMPLING16(pclk, huart->Init.BaudRate);

+    }

+    else

+    {

+      pclk = HAL_RCC_GetPCLK1Freq();

+      huart->Instance->BRR = UART_BRR_SAMPLING16(pclk, huart->Init.BaudRate);

+    }

+  }

+}

+

+/**

+  * @}

+  */

+

+#endif /* HAL_UART_MODULE_ENABLED */

+/**

+  * @}

+  */

+

+/**

+  * @}

+  */

+

+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/