em_system.h
Go to the documentation of this file.00001
00034 #ifndef __EM_SYSTEM_H
00035 #define __EM_SYSTEM_H
00036
00037 #include <stdbool.h>
00038 #include "em_device.h"
00039
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043
00044
00049
00054
00055
00056
00057
00059 typedef enum
00060 {
00061 systemPartFamilyGecko = _DEVINFO_PART_DEVICE_FAMILY_G,
00062 systemPartFamilyGiant = _DEVINFO_PART_DEVICE_FAMILY_GG,
00063 systemPartFamilyTiny = _DEVINFO_PART_DEVICE_FAMILY_TG,
00064 systemPartFamilyLeopard = _DEVINFO_PART_DEVICE_FAMILY_LG,
00065 systemPartFamilyWonder = _DEVINFO_PART_DEVICE_FAMILY_WG,
00066 systemPartFamilyZero = _DEVINFO_PART_DEVICE_FAMILY_ZG,
00067 systemPartFamilyUnknown = 0xFF
00070 } SYSTEM_PartFamily_TypeDef;
00071
00072
00073
00074
00075
00076
00078 typedef struct
00079 {
00080 uint8_t minor;
00081 uint8_t major;
00082 uint8_t family;
00083 } SYSTEM_ChipRevision_TypeDef;
00084
00085 #if defined( __FPU_PRESENT ) && ( __FPU_PRESENT == 1 )
00086
00087 typedef enum
00088 {
00089 fpuAccessDenied = (0x0 << 20),
00090 fpuAccessPrivilegedOnly = (0x5 << 20),
00091 fpuAccessReserved = (0xA << 20),
00092 fpuAccessFull = (0xF << 20)
00093 } SYSTEM_FpuAccess_TypeDef;
00094 #endif
00095
00096
00097
00098
00099
00100 void SYSTEM_ChipRevisionGet(SYSTEM_ChipRevision_TypeDef *rev);
00101 uint32_t SYSTEM_GetCalibrationValue(volatile uint32_t *regAddress);
00102
00103 #if defined( __FPU_PRESENT ) && ( __FPU_PRESENT == 1 )
00104
00112 __STATIC_INLINE void SYSTEM_FpuAccessModeSet(SYSTEM_FpuAccess_TypeDef accessMode)
00113 {
00114 SCB->CPACR = (SCB->CPACR & ~(0xF << 20)) | accessMode;
00115 }
00116 #endif
00117
00118
00125 __STATIC_INLINE uint64_t SYSTEM_GetUnique(void)
00126 {
00127 return ((uint64_t) ((uint64_t) DEVINFO->UNIQUEH << 32) | (uint64_t) DEVINFO->UNIQUEL);
00128 }
00129
00130
00137 __STATIC_INLINE uint8_t SYSTEM_GetProdRev(void)
00138 {
00139 return ((DEVINFO->PART & _DEVINFO_PART_PROD_REV_MASK)
00140 >> _DEVINFO_PART_PROD_REV_SHIFT);
00141 }
00142
00143
00155 __STATIC_INLINE uint16_t SYSTEM_GetSRAMSize(void)
00156 {
00157 #if defined(_EFM32_GECKO_FAMILY)
00158
00159 if (SYSTEM_GetProdRev() < 5)
00160 {
00161 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_FLASH_MASK)
00162 >> _DEVINFO_MSIZE_FLASH_SHIFT;
00163 }
00164 #endif
00165 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_SRAM_MASK)
00166 >> _DEVINFO_MSIZE_SRAM_SHIFT;
00167 }
00168
00169
00181 __STATIC_INLINE uint16_t SYSTEM_GetFlashSize(void)
00182 {
00183 #if defined(_EFM32_GECKO_FAMILY)
00184
00185 if (SYSTEM_GetProdRev() < 5)
00186 {
00187 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_SRAM_MASK)
00188 >> _DEVINFO_MSIZE_SRAM_SHIFT;
00189 }
00190 #endif
00191 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_FLASH_MASK)
00192 >> _DEVINFO_MSIZE_FLASH_SHIFT;
00193 }
00194
00195
00196
00208 __STATIC_INLINE uint32_t SYSTEM_GetFlashPageSize(void)
00209 {
00210 #if defined(_EFM32_GIANT_FAMILY)
00211 if (SYSTEM_GetProdRev() < 18)
00212 {
00213
00214 return FLASH_PAGE_SIZE;
00215 }
00216 #endif
00217 uint32_t tmp = (DEVINFO->MEMINFO & _DEVINFO_MEMINFO_FLASH_PAGE_SIZE_MASK)
00218 >> _DEVINFO_MEMINFO_FLASH_PAGE_SIZE_SHIFT;
00219
00220 return 1 << ((tmp + 10) & 0xFF);
00221 }
00222
00223
00230 __STATIC_INLINE uint16_t SYSTEM_GetPartNumber(void)
00231 {
00232 return (DEVINFO->PART & _DEVINFO_PART_DEVICE_NUMBER_MASK)
00233 >> _DEVINFO_PART_DEVICE_NUMBER_SHIFT;
00234 }
00235
00236
00250 __STATIC_INLINE SYSTEM_PartFamily_TypeDef SYSTEM_GetFamily(void)
00251 {
00252 return (SYSTEM_PartFamily_TypeDef)
00253 ((DEVINFO->PART & _DEVINFO_PART_DEVICE_FAMILY_MASK)
00254 >> _DEVINFO_PART_DEVICE_FAMILY_SHIFT);
00255 }
00256
00257
00264 __STATIC_INLINE uint8_t SYSTEM_GetCalibrationTemperature(void)
00265 {
00266 return (DEVINFO->CAL & _DEVINFO_CAL_TEMP_MASK)
00267 >> _DEVINFO_CAL_TEMP_SHIFT;
00268 }
00269
00273 #ifdef __cplusplus
00274 }
00275 #endif
00276
00277 #endif