cc y / mbed

Fork of mbed by mbed official

Committer:
Kojto
Date:
Tue Feb 02 14:43:35 2016 +0000
Revision:
113:f141b2784e32
Parent:
98:8ab26030e058
Child:
128:9bcdf88f62b0
Release 113 of the mbed library

Changes:
- new targets - Silabs Perl Gecko, TY51822
- Silabs - emlib update to 4.1.0, various bugfixes as result
- STM B96B_F446VE - add async serial support
- Freescale KLXX - rtc lock fix
- LPC11U68 and LPC1549 - pwm bugfixes - duty cycle

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 98:8ab26030e058 1 /***************************************************************************//**
Kojto 98:8ab26030e058 2 * @file em_mpu.h
Kojto 98:8ab26030e058 3 * @brief Memory protection unit (MPU) peripheral API
Kojto 113:f141b2784e32 4 * @version 4.2.1
Kojto 98:8ab26030e058 5 *******************************************************************************
Kojto 98:8ab26030e058 6 * @section License
Kojto 113:f141b2784e32 7 * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
Kojto 98:8ab26030e058 8 *******************************************************************************
Kojto 98:8ab26030e058 9 *
Kojto 98:8ab26030e058 10 * Permission is granted to anyone to use this software for any purpose,
Kojto 98:8ab26030e058 11 * including commercial applications, and to alter it and redistribute it
Kojto 98:8ab26030e058 12 * freely, subject to the following restrictions:
Kojto 98:8ab26030e058 13 *
Kojto 98:8ab26030e058 14 * 1. The origin of this software must not be misrepresented; you must not
Kojto 98:8ab26030e058 15 * claim that you wrote the original software.
Kojto 98:8ab26030e058 16 * 2. Altered source versions must be plainly marked as such, and must not be
Kojto 98:8ab26030e058 17 * misrepresented as being the original software.
Kojto 98:8ab26030e058 18 * 3. This notice may not be removed or altered from any source distribution.
Kojto 98:8ab26030e058 19 *
Kojto 98:8ab26030e058 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
Kojto 98:8ab26030e058 21 * obligation to support this Software. Silicon Labs is providing the
Kojto 98:8ab26030e058 22 * Software "AS IS", with no express or implied warranties of any kind,
Kojto 98:8ab26030e058 23 * including, but not limited to, any implied warranties of merchantability
Kojto 98:8ab26030e058 24 * or fitness for any particular purpose or warranties against infringement
Kojto 98:8ab26030e058 25 * of any proprietary rights of a third party.
Kojto 98:8ab26030e058 26 *
Kojto 98:8ab26030e058 27 * Silicon Labs will not be liable for any consequential, incidental, or
Kojto 98:8ab26030e058 28 * special damages, or any other relief, or for any claim by any third party,
Kojto 98:8ab26030e058 29 * arising from your use of this Software.
Kojto 98:8ab26030e058 30 *
Kojto 98:8ab26030e058 31 ******************************************************************************/
Kojto 98:8ab26030e058 32
Kojto 113:f141b2784e32 33 #ifndef __SILICON_LABS_EM_MPU_H__
Kojto 113:f141b2784e32 34 #define __SILICON_LABS_EM_MPU_H__
Kojto 98:8ab26030e058 35
Kojto 98:8ab26030e058 36 #include "em_device.h"
Kojto 98:8ab26030e058 37
Kojto 98:8ab26030e058 38 #if defined(__MPU_PRESENT) && (__MPU_PRESENT == 1)
Kojto 98:8ab26030e058 39 #include "em_assert.h"
Kojto 98:8ab26030e058 40
Kojto 98:8ab26030e058 41 #include <stdbool.h>
Kojto 98:8ab26030e058 42
Kojto 98:8ab26030e058 43 #ifdef __cplusplus
Kojto 98:8ab26030e058 44 extern "C" {
Kojto 98:8ab26030e058 45 #endif
Kojto 98:8ab26030e058 46
Kojto 98:8ab26030e058 47 /***************************************************************************//**
Kojto 98:8ab26030e058 48 * @addtogroup EM_Library
Kojto 98:8ab26030e058 49 * @{
Kojto 98:8ab26030e058 50 ******************************************************************************/
Kojto 98:8ab26030e058 51
Kojto 98:8ab26030e058 52 /***************************************************************************//**
Kojto 98:8ab26030e058 53 * @addtogroup MPU
Kojto 98:8ab26030e058 54 * @{
Kojto 98:8ab26030e058 55 ******************************************************************************/
Kojto 98:8ab26030e058 56
Kojto 98:8ab26030e058 57 /** @anchor MPU_CTRL_PRIVDEFENA
Kojto 98:8ab26030e058 58 * Argument to MPU_enable(). Enables priviledged
Kojto 98:8ab26030e058 59 * access to default memory map. */
Kojto 98:8ab26030e058 60 #define MPU_CTRL_PRIVDEFENA MPU_CTRL_PRIVDEFENA_Msk
Kojto 98:8ab26030e058 61
Kojto 98:8ab26030e058 62 /** @anchor MPU_CTRL_HFNMIENA
Kojto 98:8ab26030e058 63 * Argument to MPU_enable(). Enables MPU during hard fault,
Kojto 98:8ab26030e058 64 * NMI, and FAULTMASK handlers. */
Kojto 98:8ab26030e058 65 #define MPU_CTRL_HFNMIENA MPU_CTRL_HFNMIENA_Msk
Kojto 98:8ab26030e058 66
Kojto 98:8ab26030e058 67 /*******************************************************************************
Kojto 98:8ab26030e058 68 ******************************** ENUMS ************************************
Kojto 98:8ab26030e058 69 ******************************************************************************/
Kojto 98:8ab26030e058 70
Kojto 98:8ab26030e058 71 /**
Kojto 98:8ab26030e058 72 * Size of an MPU region.
Kojto 98:8ab26030e058 73 */
Kojto 98:8ab26030e058 74 typedef enum
Kojto 98:8ab26030e058 75 {
Kojto 98:8ab26030e058 76 mpuRegionSize32b = 4, /**< 32 byte region size. */
Kojto 98:8ab26030e058 77 mpuRegionSize64b = 5, /**< 64 byte region size. */
Kojto 98:8ab26030e058 78 mpuRegionSize128b = 6, /**< 128 byte region size. */
Kojto 98:8ab26030e058 79 mpuRegionSize256b = 7, /**< 256 byte region size. */
Kojto 98:8ab26030e058 80 mpuRegionSize512b = 8, /**< 512 byte region size. */
Kojto 98:8ab26030e058 81 mpuRegionSize1Kb = 9, /**< 1K byte region size. */
Kojto 98:8ab26030e058 82 mpuRegionSize2Kb = 10, /**< 2K byte region size. */
Kojto 98:8ab26030e058 83 mpuRegionSize4Kb = 11, /**< 4K byte region size. */
Kojto 98:8ab26030e058 84 mpuRegionSize8Kb = 12, /**< 8K byte region size. */
Kojto 98:8ab26030e058 85 mpuRegionSize16Kb = 13, /**< 16K byte region size. */
Kojto 98:8ab26030e058 86 mpuRegionSize32Kb = 14, /**< 32K byte region size. */
Kojto 98:8ab26030e058 87 mpuRegionSize64Kb = 15, /**< 64K byte region size. */
Kojto 98:8ab26030e058 88 mpuRegionSize128Kb = 16, /**< 128K byte region size. */
Kojto 98:8ab26030e058 89 mpuRegionSize256Kb = 17, /**< 256K byte region size. */
Kojto 98:8ab26030e058 90 mpuRegionSize512Kb = 18, /**< 512K byte region size. */
Kojto 98:8ab26030e058 91 mpuRegionSize1Mb = 19, /**< 1M byte region size. */
Kojto 98:8ab26030e058 92 mpuRegionSize2Mb = 20, /**< 2M byte region size. */
Kojto 98:8ab26030e058 93 mpuRegionSize4Mb = 21, /**< 4M byte region size. */
Kojto 98:8ab26030e058 94 mpuRegionSize8Mb = 22, /**< 8M byte region size. */
Kojto 98:8ab26030e058 95 mpuRegionSize16Mb = 23, /**< 16M byte region size. */
Kojto 98:8ab26030e058 96 mpuRegionSize32Mb = 24, /**< 32M byte region size. */
Kojto 98:8ab26030e058 97 mpuRegionSize64Mb = 25, /**< 64M byte region size. */
Kojto 98:8ab26030e058 98 mpuRegionSize128Mb = 26, /**< 128M byte region size. */
Kojto 98:8ab26030e058 99 mpuRegionSize256Mb = 27, /**< 256M byte region size. */
Kojto 98:8ab26030e058 100 mpuRegionSize512Mb = 28, /**< 512M byte region size. */
Kojto 98:8ab26030e058 101 mpuRegionSize1Gb = 29, /**< 1G byte region size. */
Kojto 98:8ab26030e058 102 mpuRegionSize2Gb = 30, /**< 2G byte region size. */
Kojto 98:8ab26030e058 103 mpuRegionSize4Gb = 31 /**< 4G byte region size. */
Kojto 98:8ab26030e058 104 } MPU_RegionSize_TypeDef;
Kojto 98:8ab26030e058 105
Kojto 98:8ab26030e058 106 /**
Kojto 98:8ab26030e058 107 * MPU region access permission attributes.
Kojto 98:8ab26030e058 108 */
Kojto 98:8ab26030e058 109 typedef enum
Kojto 98:8ab26030e058 110 {
Kojto 98:8ab26030e058 111 mpuRegionNoAccess = 0, /**< No access what so ever. */
Kojto 98:8ab26030e058 112 mpuRegionApPRw = 1, /**< Priviledged state R/W only. */
Kojto 98:8ab26030e058 113 mpuRegionApPRwURo = 2, /**< Priviledged state R/W, User state R only. */
Kojto 98:8ab26030e058 114 mpuRegionApFullAccess = 3, /**< R/W in Priviledged and User state. */
Kojto 98:8ab26030e058 115 mpuRegionApPRo = 5, /**< Priviledged R only. */
Kojto 98:8ab26030e058 116 mpuRegionApPRo_URo = 6 /**< R only in Priviledged and User state. */
Kojto 98:8ab26030e058 117 } MPU_RegionAp_TypeDef;
Kojto 98:8ab26030e058 118
Kojto 98:8ab26030e058 119
Kojto 98:8ab26030e058 120 /*******************************************************************************
Kojto 98:8ab26030e058 121 ******************************* STRUCTS ***********************************
Kojto 98:8ab26030e058 122 ******************************************************************************/
Kojto 98:8ab26030e058 123
Kojto 98:8ab26030e058 124 /** MPU Region init structure. */
Kojto 98:8ab26030e058 125 typedef struct
Kojto 98:8ab26030e058 126 {
Kojto 98:8ab26030e058 127 bool regionEnable; /**< MPU region enable. */
Kojto 98:8ab26030e058 128 uint8_t regionNo; /**< MPU region number. */
Kojto 98:8ab26030e058 129 uint32_t baseAddress; /**< Region baseaddress. */
Kojto 98:8ab26030e058 130 MPU_RegionSize_TypeDef size; /**< Memory region size. */
Kojto 98:8ab26030e058 131 MPU_RegionAp_TypeDef accessPermission; /**< Memory access permissions. */
Kojto 98:8ab26030e058 132 bool disableExec; /**< Disable execution. */
Kojto 98:8ab26030e058 133 bool shareable; /**< Memory shareable attribute. */
Kojto 98:8ab26030e058 134 bool cacheable; /**< Memory cacheable attribute. */
Kojto 98:8ab26030e058 135 bool bufferable; /**< Memory bufferable attribute. */
Kojto 98:8ab26030e058 136 uint8_t srd; /**< Memory subregion disable bits. */
Kojto 98:8ab26030e058 137 uint8_t tex; /**< Memory type extension attributes. */
Kojto 98:8ab26030e058 138 } MPU_RegionInit_TypeDef;
Kojto 98:8ab26030e058 139
Kojto 98:8ab26030e058 140 /** Default configuration of MPU region init structure for flash memory. */
Kojto 113:f141b2784e32 141 #define MPU_INIT_FLASH_DEFAULT \
Kojto 113:f141b2784e32 142 { \
Kojto 113:f141b2784e32 143 true, /* Enable MPU region. */ \
Kojto 113:f141b2784e32 144 0, /* MPU Region number. */ \
Kojto 113:f141b2784e32 145 FLASH_MEM_BASE, /* Flash base address. */ \
Kojto 113:f141b2784e32 146 mpuRegionSize1Mb, /* Size - Set to max. */ \
Kojto 113:f141b2784e32 147 mpuRegionApFullAccess, /* Access permissions. */ \
Kojto 113:f141b2784e32 148 false, /* Execution allowed. */ \
Kojto 113:f141b2784e32 149 false, /* Not shareable. */ \
Kojto 113:f141b2784e32 150 true, /* Cacheable. */ \
Kojto 113:f141b2784e32 151 false, /* Not bufferable. */ \
Kojto 113:f141b2784e32 152 0, /* No subregions. */ \
Kojto 113:f141b2784e32 153 0 /* No TEX attributes. */ \
Kojto 113:f141b2784e32 154 }
Kojto 98:8ab26030e058 155
Kojto 98:8ab26030e058 156
Kojto 98:8ab26030e058 157 /** Default configuration of MPU region init structure for sram memory. */
Kojto 113:f141b2784e32 158 #define MPU_INIT_SRAM_DEFAULT \
Kojto 113:f141b2784e32 159 { \
Kojto 113:f141b2784e32 160 true, /* Enable MPU region. */ \
Kojto 113:f141b2784e32 161 1, /* MPU Region number. */ \
Kojto 113:f141b2784e32 162 RAM_MEM_BASE, /* SRAM base address. */ \
Kojto 113:f141b2784e32 163 mpuRegionSize128Kb, /* Size - Set to max. */ \
Kojto 113:f141b2784e32 164 mpuRegionApFullAccess, /* Access permissions. */ \
Kojto 113:f141b2784e32 165 false, /* Execution allowed. */ \
Kojto 113:f141b2784e32 166 true, /* Shareable. */ \
Kojto 113:f141b2784e32 167 true, /* Cacheable. */ \
Kojto 113:f141b2784e32 168 false, /* Not bufferable. */ \
Kojto 113:f141b2784e32 169 0, /* No subregions. */ \
Kojto 113:f141b2784e32 170 0 /* No TEX attributes. */ \
Kojto 113:f141b2784e32 171 }
Kojto 98:8ab26030e058 172
Kojto 98:8ab26030e058 173
Kojto 98:8ab26030e058 174 /** Default configuration of MPU region init structure for onchip peripherals.*/
Kojto 113:f141b2784e32 175 #define MPU_INIT_PERIPHERAL_DEFAULT \
Kojto 113:f141b2784e32 176 { \
Kojto 113:f141b2784e32 177 true, /* Enable MPU region. */ \
Kojto 113:f141b2784e32 178 0, /* MPU Region number. */ \
Kojto 113:f141b2784e32 179 0, /* Region base address. */ \
Kojto 113:f141b2784e32 180 mpuRegionSize32b, /* Size - Set to minimum */ \
Kojto 113:f141b2784e32 181 mpuRegionApFullAccess, /* Access permissions. */ \
Kojto 113:f141b2784e32 182 true, /* Execution not allowed. */ \
Kojto 113:f141b2784e32 183 true, /* Shareable. */ \
Kojto 113:f141b2784e32 184 false, /* Not cacheable. */ \
Kojto 113:f141b2784e32 185 true, /* Bufferable. */ \
Kojto 113:f141b2784e32 186 0, /* No subregions. */ \
Kojto 113:f141b2784e32 187 0 /* No TEX attributes. */ \
Kojto 113:f141b2784e32 188 }
Kojto 98:8ab26030e058 189
Kojto 98:8ab26030e058 190
Kojto 98:8ab26030e058 191 /*******************************************************************************
Kojto 98:8ab26030e058 192 ***************************** PROTOTYPES **********************************
Kojto 98:8ab26030e058 193 ******************************************************************************/
Kojto 98:8ab26030e058 194
Kojto 98:8ab26030e058 195
Kojto 98:8ab26030e058 196 void MPU_ConfigureRegion(const MPU_RegionInit_TypeDef *init);
Kojto 98:8ab26030e058 197
Kojto 98:8ab26030e058 198
Kojto 98:8ab26030e058 199 /***************************************************************************//**
Kojto 98:8ab26030e058 200 * @brief
Kojto 98:8ab26030e058 201 * Disable the MPU
Kojto 98:8ab26030e058 202 * @details
Kojto 98:8ab26030e058 203 * Disable MPU and MPU fault exceptions.
Kojto 98:8ab26030e058 204 ******************************************************************************/
Kojto 98:8ab26030e058 205 __STATIC_INLINE void MPU_Disable(void)
Kojto 98:8ab26030e058 206 {
Kojto 98:8ab26030e058 207 SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; /* Disable fault exceptions */
Kojto 98:8ab26030e058 208 MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; /* Disable the MPU */
Kojto 98:8ab26030e058 209 }
Kojto 98:8ab26030e058 210
Kojto 98:8ab26030e058 211
Kojto 98:8ab26030e058 212 /***************************************************************************//**
Kojto 98:8ab26030e058 213 * @brief
Kojto 98:8ab26030e058 214 * Enable the MPU
Kojto 98:8ab26030e058 215 * @details
Kojto 98:8ab26030e058 216 * Enable MPU and MPU fault exceptions.
Kojto 98:8ab26030e058 217 * @param[in] flags
Kojto 98:8ab26030e058 218 * Use a logical OR of @ref MPU_CTRL_PRIVDEFENA and
Kojto 98:8ab26030e058 219 * @ref MPU_CTRL_HFNMIENA as needed.
Kojto 98:8ab26030e058 220 ******************************************************************************/
Kojto 98:8ab26030e058 221 __STATIC_INLINE void MPU_Enable(uint32_t flags)
Kojto 98:8ab26030e058 222 {
Kojto 113:f141b2784e32 223 EFM_ASSERT(!(flags & ~(MPU_CTRL_PRIVDEFENA_Msk
Kojto 113:f141b2784e32 224 | MPU_CTRL_HFNMIENA_Msk
Kojto 113:f141b2784e32 225 | MPU_CTRL_ENABLE_Msk)));
Kojto 98:8ab26030e058 226
Kojto 98:8ab26030e058 227 MPU->CTRL = flags | MPU_CTRL_ENABLE_Msk; /* Enable the MPU */
Kojto 98:8ab26030e058 228 SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; /* Enable fault exceptions */
Kojto 98:8ab26030e058 229 }
Kojto 98:8ab26030e058 230
Kojto 98:8ab26030e058 231
Kojto 98:8ab26030e058 232 /** @} (end addtogroup MPU) */
Kojto 98:8ab26030e058 233 /** @} (end addtogroup EM_Library) */
Kojto 98:8ab26030e058 234
Kojto 98:8ab26030e058 235 #ifdef __cplusplus
Kojto 98:8ab26030e058 236 }
Kojto 98:8ab26030e058 237 #endif
Kojto 98:8ab26030e058 238
Kojto 98:8ab26030e058 239 #endif /* defined(__MPU_PRESENT) && (__MPU_PRESENT == 1) */
Kojto 98:8ab26030e058 240
Kojto 113:f141b2784e32 241 #endif /* __SILICON_LABS_EM_MPU_H__ */