Subversion Repositories DashDisplay

Rev

Rev 50 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32l1xx_hal_cortex.h
  4.   * @author  MCD Application Team
  5.   * @brief   Header file of CORTEX HAL module.
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * Copyright (c) 2017 STMicroelectronics.
  10.   * All rights reserved.
  11.   *
  12.   * This software is licensed under terms that can be found in the LICENSE file in
  13.   * the root directory of this software component.
  14.   * If no LICENSE file comes with this software, it is provided AS-IS.
  15.   *
  16.   ******************************************************************************
  17.   */
  18.  
  19. /* Define to prevent recursive inclusion -------------------------------------*/
  20. #ifndef __STM32L1xx_HAL_CORTEX_H
  21. #define __STM32L1xx_HAL_CORTEX_H
  22.  
  23. #ifdef __cplusplus
  24.  extern "C" {
  25. #endif
  26.  
  27. /* Includes ------------------------------------------------------------------*/
  28. #include "stm32l1xx_hal_def.h"
  29.  
  30. /** @addtogroup STM32L1xx_HAL_Driver
  31.   * @{
  32.   */
  33.  
  34. /** @addtogroup CORTEX
  35.   * @{
  36.   */
  37.  
  38. /* Exported types ------------------------------------------------------------*/
  39. /** @defgroup CORTEX_Exported_Types Cortex Exported Types
  40.   * @{
  41.   */
  42.  
  43. #if (__MPU_PRESENT == 1)
  44. /** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition
  45.   * @brief  MPU Region initialization structure
  46.   * @{
  47.   */
  48. typedef struct
  49. {
  50.   uint8_t                Enable;                /*!< Specifies the status of the region.
  51.                                                      This parameter can be a value of @ref CORTEX_MPU_Region_Enable                 */
  52.   uint8_t                Number;                /*!< Specifies the number of the region to protect.
  53.                                                      This parameter can be a value of @ref CORTEX_MPU_Region_Number                 */
  54.   uint32_t               BaseAddress;           /*!< Specifies the base address of the region to protect.                           */
  55.   uint8_t                Size;                  /*!< Specifies the size of the region to protect.
  56.                                                      This parameter can be a value of @ref CORTEX_MPU_Region_Size                   */
  57.   uint8_t                SubRegionDisable;      /*!< Specifies the number of the subregion protection to disable.
  58.                                                      This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF    */        
  59.   uint8_t                TypeExtField;          /*!< Specifies the TEX field level.
  60.                                                      This parameter can be a value of @ref CORTEX_MPU_TEX_Levels                    */                
  61.   uint8_t                AccessPermission;      /*!< Specifies the region access permission type.
  62.                                                      This parameter can be a value of @ref CORTEX_MPU_Region_Permission_Attributes  */
  63.   uint8_t                DisableExec;           /*!< Specifies the instruction access status.
  64.                                                      This parameter can be a value of @ref CORTEX_MPU_Instruction_Access            */
  65.   uint8_t                IsShareable;           /*!< Specifies the shareability status of the protected region.
  66.                                                      This parameter can be a value of @ref CORTEX_MPU_Access_Shareable              */
  67.   uint8_t                IsCacheable;           /*!< Specifies the cacheable status of the region protected.
  68.                                                      This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable              */
  69.   uint8_t                IsBufferable;          /*!< Specifies the bufferable status of the protected region.
  70.                                                      This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable             */
  71. }MPU_Region_InitTypeDef;
  72. /**
  73.   * @}
  74.   */
  75. #endif /* __MPU_PRESENT */
  76.  
  77. /**
  78.   * @}
  79.   */
  80.  
  81. /* Exported constants --------------------------------------------------------*/
  82.  
  83. /** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants
  84.   * @{
  85.   */
  86.  
  87.  
  88. /** @defgroup CORTEX_Preemption_Priority_Group  CORTEX Preemption Priority Group
  89.   * @{
  90.   */
  91.  
  92. #define NVIC_PRIORITYGROUP_0         (0x00000007U) /*!< 0 bits for pre-emption priority
  93.                                                         4 bits for subpriority */
  94. #define NVIC_PRIORITYGROUP_1         (0x00000006U) /*!< 1 bits for pre-emption priority
  95.                                                         3 bits for subpriority */
  96. #define NVIC_PRIORITYGROUP_2         (0x00000005U) /*!< 2 bits for pre-emption priority
  97.                                                         2 bits for subpriority */
  98. #define NVIC_PRIORITYGROUP_3         (0x00000004U) /*!< 3 bits for pre-emption priority
  99.                                                         1 bits for subpriority */
  100. #define NVIC_PRIORITYGROUP_4         (0x00000003U) /*!< 4 bits for pre-emption priority
  101.                                                         0 bits for subpriority */
  102. /**
  103.   * @}
  104.   */
  105.  
  106. /** @defgroup CORTEX_SysTick_clock_source CORTEX SysTick clock source
  107.   * @{
  108.   */
  109. #define SYSTICK_CLKSOURCE_HCLK_DIV8    (0x00000000U)
  110. #define SYSTICK_CLKSOURCE_HCLK         (0x00000004U)
  111.  
  112. /**
  113.   * @}
  114.   */
  115.  
  116. #if (__MPU_PRESENT == 1)
  117. /** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control
  118.   * @{
  119.   */
  120. #define  MPU_HFNMI_PRIVDEF_NONE      (0x00000000U)  
  121. #define  MPU_HARDFAULT_NMI           (MPU_CTRL_HFNMIENA_Msk)
  122. #define  MPU_PRIVILEGED_DEFAULT      (MPU_CTRL_PRIVDEFENA_Msk)
  123. #define  MPU_HFNMI_PRIVDEF           (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk)
  124.  
  125. /**
  126.   * @}
  127.   */
  128.  
  129. /** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable
  130.   * @{
  131.   */
  132. #define  MPU_REGION_ENABLE     ((uint8_t)0x01)
  133. #define  MPU_REGION_DISABLE    ((uint8_t)0x00)
  134. /**
  135.   * @}
  136.   */
  137.  
  138. /** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access
  139.   * @{
  140.   */
  141. #define  MPU_INSTRUCTION_ACCESS_ENABLE      ((uint8_t)0x00)
  142. #define  MPU_INSTRUCTION_ACCESS_DISABLE     ((uint8_t)0x01)
  143. /**
  144.   * @}
  145.   */
  146.  
  147. /** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable
  148.   * @{
  149.   */
  150. #define  MPU_ACCESS_SHAREABLE        ((uint8_t)0x01)
  151. #define  MPU_ACCESS_NOT_SHAREABLE    ((uint8_t)0x00)
  152. /**
  153.   * @}
  154.   */
  155.  
  156. /** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable
  157.   * @{
  158.   */
  159. #define  MPU_ACCESS_CACHEABLE         ((uint8_t)0x01)
  160. #define  MPU_ACCESS_NOT_CACHEABLE     ((uint8_t)0x00)
  161. /**
  162.   * @}
  163.   */
  164.  
  165. /** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable
  166.   * @{
  167.   */
  168. #define  MPU_ACCESS_BUFFERABLE         ((uint8_t)0x01)
  169. #define  MPU_ACCESS_NOT_BUFFERABLE     ((uint8_t)0x00)
  170. /**
  171.   * @}
  172.   */
  173.  
  174. /** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels
  175.   * @{
  176.   */
  177. #define  MPU_TEX_LEVEL0    ((uint8_t)0x00)
  178. #define  MPU_TEX_LEVEL1    ((uint8_t)0x01)
  179. #define  MPU_TEX_LEVEL2    ((uint8_t)0x02)
  180. /**
  181.   * @}
  182.   */
  183.  
  184. /** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size
  185.   * @{
  186.   */
  187. #define   MPU_REGION_SIZE_32B      ((uint8_t)0x04)
  188. #define   MPU_REGION_SIZE_64B      ((uint8_t)0x05)
  189. #define   MPU_REGION_SIZE_128B     ((uint8_t)0x06)
  190. #define   MPU_REGION_SIZE_256B     ((uint8_t)0x07)
  191. #define   MPU_REGION_SIZE_512B     ((uint8_t)0x08)
  192. #define   MPU_REGION_SIZE_1KB      ((uint8_t)0x09)  
  193. #define   MPU_REGION_SIZE_2KB      ((uint8_t)0x0A)
  194. #define   MPU_REGION_SIZE_4KB      ((uint8_t)0x0B)
  195. #define   MPU_REGION_SIZE_8KB      ((uint8_t)0x0C)
  196. #define   MPU_REGION_SIZE_16KB     ((uint8_t)0x0D)
  197. #define   MPU_REGION_SIZE_32KB     ((uint8_t)0x0E)
  198. #define   MPU_REGION_SIZE_64KB     ((uint8_t)0x0F)
  199. #define   MPU_REGION_SIZE_128KB    ((uint8_t)0x10)
  200. #define   MPU_REGION_SIZE_256KB    ((uint8_t)0x11)
  201. #define   MPU_REGION_SIZE_512KB    ((uint8_t)0x12)
  202. #define   MPU_REGION_SIZE_1MB      ((uint8_t)0x13)
  203. #define   MPU_REGION_SIZE_2MB      ((uint8_t)0x14)
  204. #define   MPU_REGION_SIZE_4MB      ((uint8_t)0x15)
  205. #define   MPU_REGION_SIZE_8MB      ((uint8_t)0x16)
  206. #define   MPU_REGION_SIZE_16MB     ((uint8_t)0x17)
  207. #define   MPU_REGION_SIZE_32MB     ((uint8_t)0x18)
  208. #define   MPU_REGION_SIZE_64MB     ((uint8_t)0x19)
  209. #define   MPU_REGION_SIZE_128MB    ((uint8_t)0x1A)
  210. #define   MPU_REGION_SIZE_256MB    ((uint8_t)0x1B)
  211. #define   MPU_REGION_SIZE_512MB    ((uint8_t)0x1C)
  212. #define   MPU_REGION_SIZE_1GB      ((uint8_t)0x1D)
  213. #define   MPU_REGION_SIZE_2GB      ((uint8_t)0x1E)
  214. #define   MPU_REGION_SIZE_4GB      ((uint8_t)0x1F)
  215. /**                                
  216.   * @}
  217.   */
  218.    
  219. /** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes
  220.   * @{
  221.   */
  222. #define  MPU_REGION_NO_ACCESS      ((uint8_t)0x00)  
  223. #define  MPU_REGION_PRIV_RW        ((uint8_t)0x01)
  224. #define  MPU_REGION_PRIV_RW_URO    ((uint8_t)0x02)  
  225. #define  MPU_REGION_FULL_ACCESS    ((uint8_t)0x03)  
  226. #define  MPU_REGION_PRIV_RO        ((uint8_t)0x05)
  227. #define  MPU_REGION_PRIV_RO_URO    ((uint8_t)0x06)
  228. /**
  229.   * @}
  230.   */
  231.  
  232. /** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number
  233.   * @{
  234.   */
  235. #define  MPU_REGION_NUMBER0    ((uint8_t)0x00)  
  236. #define  MPU_REGION_NUMBER1    ((uint8_t)0x01)
  237. #define  MPU_REGION_NUMBER2    ((uint8_t)0x02)  
  238. #define  MPU_REGION_NUMBER3    ((uint8_t)0x03)  
  239. #define  MPU_REGION_NUMBER4    ((uint8_t)0x04)
  240. #define  MPU_REGION_NUMBER5    ((uint8_t)0x05)
  241. #define  MPU_REGION_NUMBER6    ((uint8_t)0x06)
  242. #define  MPU_REGION_NUMBER7    ((uint8_t)0x07)
  243. /**
  244.   * @}
  245.   */
  246. #endif /* __MPU_PRESENT */
  247. /**
  248.   * @}
  249.   */
  250.  
  251. /* Exported Macros -----------------------------------------------------------*/
  252. /** @defgroup CORTEX_Exported_Macros CORTEX Exported Macros
  253.   * @{
  254.   */
  255.  
  256. /** @defgroup CORTEX_Preemption_Priority_Group_Macro  CORTEX Preemption Priority Group
  257.   * @{
  258.   */
  259. #define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PRIORITYGROUP_0) || \
  260.                                        ((GROUP) == NVIC_PRIORITYGROUP_1) || \
  261.                                        ((GROUP) == NVIC_PRIORITYGROUP_2) || \
  262.                                        ((GROUP) == NVIC_PRIORITYGROUP_3) || \
  263.                                        ((GROUP) == NVIC_PRIORITYGROUP_4))
  264.  
  265. #define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)
  266.  
  267. #define IS_NVIC_SUB_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)
  268.  
  269. #define IS_NVIC_DEVICE_IRQ(IRQ)  ((IRQ) >= 0x00)
  270.  
  271. /**
  272.   * @}
  273.   */
  274.  
  275. /**
  276.   * @}
  277.   */
  278.  
  279. /* Private macro -------------------------------------------------------------*/
  280. /** @defgroup CORTEX_Private_Macros CORTEX Private Macros
  281.   * @{
  282.   */  
  283.                                  
  284. /** @defgroup CORTEX_SysTick_clock_source_Macro_Private CORTEX SysTick clock source
  285.   * @{
  286.   */                      
  287. #define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || \
  288.                                        ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8))
  289. /**
  290.   * @}
  291.   */
  292.  
  293. #if (__MPU_PRESENT == 1)
  294. #define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || \
  295.                                      ((STATE) == MPU_REGION_DISABLE))
  296.  
  297. #define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || \
  298.                                           ((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE))
  299.  
  300. #define IS_MPU_ACCESS_SHAREABLE(STATE)   (((STATE) == MPU_ACCESS_SHAREABLE) || \
  301.                                           ((STATE) == MPU_ACCESS_NOT_SHAREABLE))
  302.  
  303. #define IS_MPU_ACCESS_CACHEABLE(STATE)   (((STATE) == MPU_ACCESS_CACHEABLE) || \
  304.                                           ((STATE) == MPU_ACCESS_NOT_CACHEABLE))
  305.  
  306. #define IS_MPU_ACCESS_BUFFERABLE(STATE)   (((STATE) == MPU_ACCESS_BUFFERABLE) || \
  307.                                           ((STATE) == MPU_ACCESS_NOT_BUFFERABLE))
  308.  
  309. #define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0)  || \
  310.                                 ((TYPE) == MPU_TEX_LEVEL1)  || \
  311.                                 ((TYPE) == MPU_TEX_LEVEL2))
  312.  
  313. #define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE) (((TYPE) == MPU_REGION_NO_ACCESS)   || \
  314.                                                   ((TYPE) == MPU_REGION_PRIV_RW)     || \
  315.                                                   ((TYPE) == MPU_REGION_PRIV_RW_URO) || \
  316.                                                   ((TYPE) == MPU_REGION_FULL_ACCESS) || \
  317.                                                   ((TYPE) == MPU_REGION_PRIV_RO)     || \
  318.                                                   ((TYPE) == MPU_REGION_PRIV_RO_URO))
  319.  
  320. #define IS_MPU_REGION_NUMBER(NUMBER)    (((NUMBER) == MPU_REGION_NUMBER0) || \
  321.                                          ((NUMBER) == MPU_REGION_NUMBER1) || \
  322.                                          ((NUMBER) == MPU_REGION_NUMBER2) || \
  323.                                          ((NUMBER) == MPU_REGION_NUMBER3) || \
  324.                                          ((NUMBER) == MPU_REGION_NUMBER4) || \
  325.                                          ((NUMBER) == MPU_REGION_NUMBER5) || \
  326.                                          ((NUMBER) == MPU_REGION_NUMBER6) || \
  327.                                          ((NUMBER) == MPU_REGION_NUMBER7))
  328.  
  329. #define IS_MPU_REGION_SIZE(SIZE)    (((SIZE) == MPU_REGION_SIZE_32B)   || \
  330.                                      ((SIZE) == MPU_REGION_SIZE_64B)   || \
  331.                                      ((SIZE) == MPU_REGION_SIZE_128B)  || \
  332.                                      ((SIZE) == MPU_REGION_SIZE_256B)  || \
  333.                                      ((SIZE) == MPU_REGION_SIZE_512B)  || \
  334.                                      ((SIZE) == MPU_REGION_SIZE_1KB)   || \
  335.                                      ((SIZE) == MPU_REGION_SIZE_2KB)   || \
  336.                                      ((SIZE) == MPU_REGION_SIZE_4KB)   || \
  337.                                      ((SIZE) == MPU_REGION_SIZE_8KB)   || \
  338.                                      ((SIZE) == MPU_REGION_SIZE_16KB)  || \
  339.                                      ((SIZE) == MPU_REGION_SIZE_32KB)  || \
  340.                                      ((SIZE) == MPU_REGION_SIZE_64KB)  || \
  341.                                      ((SIZE) == MPU_REGION_SIZE_128KB) || \
  342.                                      ((SIZE) == MPU_REGION_SIZE_256KB) || \
  343.                                      ((SIZE) == MPU_REGION_SIZE_512KB) || \
  344.                                      ((SIZE) == MPU_REGION_SIZE_1MB)   || \
  345.                                      ((SIZE) == MPU_REGION_SIZE_2MB)   || \
  346.                                      ((SIZE) == MPU_REGION_SIZE_4MB)   || \
  347.                                      ((SIZE) == MPU_REGION_SIZE_8MB)   || \
  348.                                      ((SIZE) == MPU_REGION_SIZE_16MB)  || \
  349.                                      ((SIZE) == MPU_REGION_SIZE_32MB)  || \
  350.                                      ((SIZE) == MPU_REGION_SIZE_64MB)  || \
  351.                                      ((SIZE) == MPU_REGION_SIZE_128MB) || \
  352.                                      ((SIZE) == MPU_REGION_SIZE_256MB) || \
  353.                                      ((SIZE) == MPU_REGION_SIZE_512MB) || \
  354.                                      ((SIZE) == MPU_REGION_SIZE_1GB)   || \
  355.                                      ((SIZE) == MPU_REGION_SIZE_2GB)   || \
  356.                                      ((SIZE) == MPU_REGION_SIZE_4GB))
  357.  
  358. #define IS_MPU_SUB_REGION_DISABLE(SUBREGION)  ((SUBREGION) < (uint16_t)0x00FF)
  359. #endif /* __MPU_PRESENT */
  360.  
  361. /**
  362.   * @}
  363.   */
  364.                                                                                    
  365. /* Private functions ---------------------------------------------------------*/  
  366. /** @defgroup CORTEX_Private_Functions CORTEX Private Functions
  367.   * @brief    CORTEX private  functions
  368.   * @{
  369.   */
  370.  
  371.  
  372. /**
  373.   * @}
  374.   */
  375.  
  376. /* Exported functions --------------------------------------------------------*/
  377. /** @addtogroup CORTEX_Exported_Functions
  378.   * @{
  379.   */
  380.  
  381. /** @addtogroup CORTEX_Exported_Functions_Group1
  382.   * @{
  383.   */  
  384. /* Initialization and de-initialization functions *****************************/
  385. void     HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup);
  386. void     HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);
  387. void     HAL_NVIC_EnableIRQ(IRQn_Type IRQn);
  388. void     HAL_NVIC_DisableIRQ(IRQn_Type IRQn);
  389. void     HAL_NVIC_SystemReset(void);
  390. uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb);
  391. /**
  392.   * @}
  393.   */
  394.  
  395. /** @addtogroup CORTEX_Exported_Functions_Group2
  396.   * @{
  397.   */
  398. /* Peripheral Control functions ***********************************************/
  399. #if (__MPU_PRESENT == 1)
  400. void HAL_MPU_Enable(uint32_t MPU_Control);
  401. void HAL_MPU_Disable(void);
  402. void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init);
  403. #endif /* __MPU_PRESENT */
  404. uint32_t HAL_NVIC_GetPriorityGrouping(void);
  405. void     HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority);
  406. uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn);
  407. void     HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn);
  408. void     HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn);
  409. uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn);
  410. void     HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource);
  411. void     HAL_SYSTICK_IRQHandler(void);
  412. void     HAL_SYSTICK_Callback(void);
  413. /**
  414.   * @}
  415.   */
  416.  
  417. /**
  418.   * @}
  419.   */
  420.  
  421. /**
  422.   * @}
  423.   */
  424.  
  425. /**
  426.   * @}
  427.   */
  428.  
  429. #ifdef __cplusplus
  430. }
  431. #endif
  432.  
  433. #endif /* __STM32L1xx_HAL_CORTEX_H */
  434.  
  435.  
  436.