/**************************************************************************//**\r
* @file cmsis_iccarm.h\r
* @brief CMSIS compiler ICCARM (IAR Compiler for Arm) header file\r
- * @version V5.0.5\r
- * @date 10. January 2018\r
+ * @version V5.0.8\r
+ * @date 04. September 2018\r
******************************************************************************/\r
\r
//------------------------------------------------------------------------------\r
#endif\r
\r
#ifndef __RESTRICT\r
- #define __RESTRICT restrict\r
+ #if __ICCARM_V8\r
+ #define __RESTRICT __restrict\r
+ #else\r
+ /* Needs IAR language extensions */\r
+ #define __RESTRICT restrict\r
+ #endif\r
#endif\r
\r
#ifndef __STATIC_INLINE\r
#define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE)))\r
#define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS"))\r
#define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE)))\r
- #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS"))\r
- #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE)))\r
+\r
+ #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \\r
+ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r
+ // without main extensions, the non-secure PSPLIM is RAZ/WI\r
+ #define __TZ_get_PSPLIM_NS() (0U)\r
+ #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE))\r
+ #else\r
+ #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS"))\r
+ #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE)))\r
+ #endif\r
+\r
#define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS"))\r
#define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE)))\r
\r
__IAR_FT uint32_t __TZ_get_PSPLIM_NS(void)\r
{\r
uint32_t res;\r
+ #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \\r
+ (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3)))\r
+ // without main extensions, the non-secure PSPLIM is RAZ/WI\r
+ res = 0U;\r
+ #else\r
__asm volatile("MRS %0,PSPLIM_NS" : "=r" (res));\r
+ #endif\r
return res;\r
}\r
+\r
__IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value)\r
{\r
+ #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \\r
+ (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3)))\r
+ // without main extensions, the non-secure PSPLIM is RAZ/WI\r
+ (void)value;\r
+ #else\r
__asm volatile("MSR PSPLIM_NS,%0" :: "r" (value));\r
+ #endif\r
}\r
\r
__IAR_FT uint32_t __TZ_get_MSPLIM_NS(void)\r
__IAR_FT uint8_t __LDAB(volatile uint8_t *ptr)\r
{\r
uint32_t res;\r
- __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (*ptr) : "memory");\r
+ __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");\r
return ((uint8_t)res);\r
}\r
\r
__IAR_FT uint16_t __LDAH(volatile uint16_t *ptr)\r
{\r
uint32_t res;\r
- __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (*ptr) : "memory");\r
+ __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");\r
return ((uint16_t)res);\r
}\r
\r
__IAR_FT uint32_t __LDA(volatile uint32_t *ptr)\r
{\r
uint32_t res;\r
- __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (*ptr) : "memory");\r
+ __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");\r
return res;\r
}\r
\r
__IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr)\r
{\r
- __ASM volatile ("STLB %1, [%0]" :: "r" (*ptr), "r" (value) : "memory");\r
+ __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory");\r
}\r
\r
__IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr)\r
{\r
- __ASM volatile ("STLH %1, [%0]" :: "r" (*ptr), "r" (value) : "memory");\r
+ __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory");\r
}\r
\r
__IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr)\r
{\r
- __ASM volatile ("STL %1, [%0]" :: "r" (*ptr), "r" (value) : "memory");\r
+ __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory");\r
}\r
\r
__IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr)\r
{\r
uint32_t res;\r
- __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (*ptr) : "memory");\r
+ __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");\r
return ((uint8_t)res);\r
}\r
\r
__IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr)\r
{\r
uint32_t res;\r
- __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (*ptr) : "memory");\r
+ __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");\r
return ((uint16_t)res);\r
}\r
\r
__IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr)\r
{\r
uint32_t res;\r
- __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (*ptr) : "memory");\r
+ __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory");\r
return res;\r
}\r
\r
__IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr)\r
{\r
uint32_t res;\r
- __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (*ptr), "r" (value) : "memory");\r
+ __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory");\r
return res;\r
}\r
\r
__IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr)\r
{\r
uint32_t res;\r
- __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (*ptr), "r" (value) : "memory");\r
+ __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory");\r
return res;\r
}\r
\r
__IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr)\r
{\r
uint32_t res;\r
- __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (*ptr), "r" (value) : "memory");\r
+ __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory");\r
return res;\r
}\r
\r