diff options
Diffstat (limited to 'os/common/ext/ARM')
23 files changed, 1905 insertions, 551 deletions
diff --git a/os/common/ext/ARM/CMSIS/Core/Include/cmsis_armcc.h b/os/common/ext/ARM/CMSIS/Core/Include/cmsis_armcc.h index 093d35b9e..4d9d0645d 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/cmsis_armcc.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/cmsis_armcc.h @@ -337,8 +337,6 @@ __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)             (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */ -#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) -  /**    \brief   Get FPSCR    \details Returns the current value of the Floating Point Status/Control register. @@ -372,9 +370,6 @@ __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)  #endif  } -#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */ - -  /*@} end of CMSIS_Core_RegAccFunctions */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/cmsis_armclang.h b/os/common/ext/ARM/CMSIS/Core/Include/cmsis_armclang.h index 5c4c20e87..162a400ea 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/cmsis_armclang.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/cmsis_armclang.h @@ -237,7 +237,7 @@ __STATIC_FORCEINLINE uint32_t __get_xPSR(void)   */  __STATIC_FORCEINLINE uint32_t __get_PSP(void)  { -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, psp"  : "=r" (result) );    return(result); @@ -252,7 +252,7 @@ __STATIC_FORCEINLINE uint32_t __get_PSP(void)   */  __STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void)  { -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, psp_ns"  : "=r" (result) );    return(result); @@ -291,7 +291,7 @@ __STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack)   */  __STATIC_FORCEINLINE uint32_t __get_MSP(void)  { -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, msp" : "=r" (result) );    return(result); @@ -306,7 +306,7 @@ __STATIC_FORCEINLINE uint32_t __get_MSP(void)   */  __STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void)  { -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, msp_ns" : "=r" (result) );    return(result); @@ -346,7 +346,7 @@ __STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack)   */  __STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void)  { -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, sp_ns" : "=r" (result) );    return(result); @@ -581,7 +581,7 @@ __STATIC_FORCEINLINE uint32_t __get_PSPLIM(void)      // without main extensions, the non-secure PSPLIM is RAZ/WI    return 0U;  #else -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, psplim"  : "=r" (result) );    return result;  #endif @@ -603,7 +603,7 @@ __STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void)    // without main extensions, the non-secure PSPLIM is RAZ/WI    return 0U;  #else -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, psplim_ns"  : "=r" (result) );    return result;  #endif @@ -669,7 +669,7 @@ __STATIC_FORCEINLINE uint32_t __get_MSPLIM(void)    // without main extensions, the non-secure MSPLIM is RAZ/WI    return 0U;  #else -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, msplim" : "=r" (result) );    return result;  #endif @@ -691,7 +691,7 @@ __STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void)    // without main extensions, the non-secure MSPLIM is RAZ/WI    return 0U;  #else -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) );    return result;  #endif @@ -742,10 +742,6 @@ __STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit)  #endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \             (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */ - -#if ((defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \ -     (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) -  /**    \brief   Get FPSCR    \details Returns the current value of the Floating Point Status/Control register. @@ -770,10 +766,6 @@ __STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit)  #define __set_FPSCR(x)      ((void)(x))  #endif -#endif /* ((defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \ -           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */ - -  /*@} end of CMSIS_Core_RegAccFunctions */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/cmsis_gcc.h b/os/common/ext/ARM/CMSIS/Core/Include/cmsis_gcc.h index 5d0f07e8a..2d9db15a5 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/cmsis_gcc.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/cmsis_gcc.h @@ -1,11 +1,11 @@  /**************************************************************************//**   * @file     cmsis_gcc.h   * @brief    CMSIS compiler GCC header file - * @version  V5.0.3 - * @date     16. January 2018 + * @version  V5.0.4 + * @date     09. April 2018   ******************************************************************************/  /* - * Copyright (c) 2009-2017 ARM Limited. All rights reserved. + * Copyright (c) 2009-2018 Arm Limited. All rights reserved.   *   * SPDX-License-Identifier: Apache-2.0   * @@ -246,7 +246,7 @@ __STATIC_FORCEINLINE uint32_t __get_xPSR(void)   */  __STATIC_FORCEINLINE uint32_t __get_PSP(void)  { -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, psp"  : "=r" (result) );    return(result); @@ -261,7 +261,7 @@ __STATIC_FORCEINLINE uint32_t __get_PSP(void)   */  __STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void)  { -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, psp_ns"  : "=r" (result) );    return(result); @@ -300,7 +300,7 @@ __STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack)   */  __STATIC_FORCEINLINE uint32_t __get_MSP(void)  { -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, msp" : "=r" (result) );    return(result); @@ -315,7 +315,7 @@ __STATIC_FORCEINLINE uint32_t __get_MSP(void)   */  __STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void)  { -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, msp_ns" : "=r" (result) );    return(result); @@ -355,7 +355,7 @@ __STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack)   */  __STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void)  { -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, sp_ns" : "=r" (result) );    return(result); @@ -596,7 +596,7 @@ __STATIC_FORCEINLINE uint32_t __get_PSPLIM(void)      // without main extensions, the non-secure PSPLIM is RAZ/WI    return 0U;  #else -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, psplim"  : "=r" (result) );    return result;  #endif @@ -617,7 +617,7 @@ __STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void)    // without main extensions, the non-secure PSPLIM is RAZ/WI    return 0U;  #else -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, psplim_ns"  : "=r" (result) );    return result;  #endif @@ -683,7 +683,7 @@ __STATIC_FORCEINLINE uint32_t __get_MSPLIM(void)    // without main extensions, the non-secure MSPLIM is RAZ/WI    return 0U;  #else -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, msplim" : "=r" (result) );    return result;  #endif @@ -705,7 +705,7 @@ __STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void)    // without main extensions, the non-secure MSPLIM is RAZ/WI    return 0U;  #else -  register uint32_t result; +  uint32_t result;    __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) );    return result;  #endif @@ -758,9 +758,6 @@ __STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit)             (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */ -#if ((defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \ -     (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) -  /**    \brief   Get FPSCR    \details Returns the current value of the Floating Point Status/Control register. @@ -770,7 +767,9 @@ __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) || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) +#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 @@ -794,7 +793,9 @@ __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) || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) +#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 @@ -805,10 +806,6 @@ __STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr)  #endif  } -#endif /* ((defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \ -           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */ - -  /*@} end of CMSIS_Core_RegAccFunctions */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/cmsis_iccarm.h b/os/common/ext/ARM/CMSIS/Core/Include/cmsis_iccarm.h index edcaee3d4..11c4af0eb 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/cmsis_iccarm.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/cmsis_iccarm.h @@ -1,8 +1,8 @@  /**************************************************************************//**   * @file     cmsis_iccarm.h   * @brief    CMSIS compiler ICCARM (IAR Compiler for Arm) header file - * @version  V5.0.5 - * @date     10. January 2018 + * @version  V5.0.7 + * @date     19. June 2018   ******************************************************************************/  //------------------------------------------------------------------------------ @@ -150,7 +150,7 @@  #endif  #ifndef   __RESTRICT -  #define __RESTRICT            restrict +  #define __RESTRICT            __restrict  #endif  #ifndef   __STATIC_INLINE @@ -340,8 +340,17 @@ __packed struct  __iar_u32 { uint32_t v; };    #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))) -  #define __TZ_get_PSPLIM_NS()        (__arm_rsr("PSPLIM_NS")) -  #define __TZ_set_PSPLIM_NS(VALUE)   (__arm_wsr("PSPLIM_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))) @@ -716,12 +725,25 @@ __packed struct  __iar_u32 { uint32_t v; };      __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) @@ -826,78 +848,78 @@ __packed struct  __iar_u32 { uint32_t v; };    __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr)    {      uint32_t res; -    __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (*ptr) : "memory"); +    __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"); +    __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"); +    __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"); +    __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"); +    __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"); +    __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"); +    __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"); +    __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"); +    __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"); +    __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"); +    __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"); +    __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory");      return res;    } diff --git a/os/common/ext/ARM/CMSIS/Core/Include/core_armv8mbl.h b/os/common/ext/ARM/CMSIS/Core/Include/core_armv8mbl.h index 47a39893a..251e4ede3 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/core_armv8mbl.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/core_armv8mbl.h @@ -1,8 +1,8 @@  /**************************************************************************//**   * @file     core_armv8mbl.h   * @brief    CMSIS Armv8-M Baseline Core Peripheral Access Layer Header File - * @version  V5.0.4 - * @date     10. January 2018 + * @version  V5.0.7 + * @date     22. June 2018   ******************************************************************************/  /*   * Copyright (c) 2009-2018 Arm Limited. All rights reserved. @@ -59,7 +59,7 @@    \ingroup Cortex_ARMv8MBL    @{   */ -  +  #include "cmsis_version.h"  /*  CMSIS definitions */ @@ -415,6 +415,9 @@ typedef struct  #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 */ @@ -721,8 +724,8 @@ typedef struct   */  typedef struct  { -  __IOM uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */ -  __IOM uint32_t CSPSR;                  /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */ +  __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]; @@ -730,26 +733,18 @@ typedef struct          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 */ -  __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 */ +  __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_PRESCALER_Pos              0U                                         /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< TPI ACPR: PRESCALER Mask */ +#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 */ @@ -772,68 +767,25 @@ typedef struct  #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 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_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/)    /*!< TPI ITATBCTR2: ATREADY 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 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 */ +/* 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_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_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_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_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/)    /*!< TPI ITATBCTR0: ATREADY Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos                 0U                                         /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk                (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode 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 */ @@ -845,22 +797,16 @@ typedef struct  #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 */ +#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_MajorType_Pos           4U                                         /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */ - -#define TPI_DEVTYPE_SubType_Pos             0U                                         /*!< TPI DEVTYPE: SubType Position */ +#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 */ @@ -1239,8 +1185,8 @@ typedef struct    #endif    #include CMSIS_NVIC_VIRTUAL_HEADER_FILE  #else -/*#define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping   not available for Armv8-M Baseline */ -/*#define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping   not available for Armv8-M Baseline */ +  #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 @@ -1266,12 +1212,36 @@ typedef struct  #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 @@ -1513,6 +1483,58 @@ __STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)  /** +  \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, @@ -1556,7 +1578,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)    \brief   System Reset    \details Initiates a system reset request to reset the MCU.   */ -__STATIC_INLINE void __NVIC_SystemReset(void) +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)  {    __DSB();                                                          /* Ensure all outstanding memory accesses included                                                                         buffered write are completed before reset */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/core_armv8mml.h b/os/common/ext/ARM/CMSIS/Core/Include/core_armv8mml.h index 0951a1f78..3a3148ea3 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/core_armv8mml.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/core_armv8mml.h @@ -1,8 +1,8 @@  /**************************************************************************//**   * @file     core_armv8mml.h   * @brief    CMSIS Armv8-M Mainline Core Peripheral Access Layer Header File - * @version  V5.0.4 - * @date     10. January 2018 + * @version  V5.0.7 + * @date     06. July 2018   ******************************************************************************/  /*   * Copyright (c) 2009-2018 Arm Limited. All rights reserved. @@ -61,7 +61,7 @@   */  #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 */ @@ -90,12 +90,12 @@        #define __DSP_USED       1U      #else        #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" -      #define __DSP_USED         0U     +      #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) @@ -113,7 +113,7 @@        #define __DSP_USED       1U      #else        #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" -      #define __DSP_USED         0U     +      #define __DSP_USED         0U      #endif    #else      #define __DSP_USED         0U @@ -130,18 +130,18 @@    #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     +      #define __DSP_USED         0U      #endif    #else      #define __DSP_USED         0U    #endif -   +  #elif defined ( __ICCARM__ )    #if defined __ARMVFP__      #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) @@ -159,12 +159,12 @@        #define __DSP_USED       1U      #else        #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" -      #define __DSP_USED         0U     +      #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) @@ -568,6 +568,9 @@ typedef struct  #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 */ @@ -1383,8 +1386,8 @@ typedef struct   */  typedef struct  { -  __IOM uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */ -  __IOM uint32_t CSPSR;                  /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */ +  __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]; @@ -1392,26 +1395,18 @@ typedef struct          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 */ -  __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 */ +  __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_PRESCALER_Pos              0U                                         /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< TPI ACPR: PRESCALER Mask */ +#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 */ @@ -1434,68 +1429,25 @@ typedef struct  #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 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_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/)    /*!< TPI ITATBCTR2: ATREADY 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 */ +/* 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 */ -#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 */ +/* 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_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_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_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_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/)    /*!< TPI ITATBCTR0: ATREADY Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos                 0U                                         /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk                (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode 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 */ @@ -1507,22 +1459,16 @@ typedef struct  #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 */ +#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_MajorType_Pos           4U                                         /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */ - -#define TPI_DEVTYPE_SubType_Pos             0U                                         /*!< TPI DEVTYPE: SubType Position */ +#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 */ @@ -1587,8 +1533,8 @@ typedef struct  #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_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 */ @@ -2136,6 +2082,27 @@ typedef struct  #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 @@ -2495,7 +2462,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)    \brief   System Reset    \details Initiates a system reset request to reset the MCU.   */ -__STATIC_INLINE void __NVIC_SystemReset(void) +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)  {    __DSB();                                                          /* Ensure all outstanding memory accesses included                                                                         buffered write are completed before reset */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/core_cm0.h b/os/common/ext/ARM/CMSIS/Core/Include/core_cm0.h index a3f1b9ac3..f929bba07 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/core_cm0.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/core_cm0.h @@ -1,8 +1,8 @@  /**************************************************************************//**   * @file     core_cm0.h   * @brief    CMSIS Cortex-M0 Core Peripheral Access Layer Header File - * @version  V5.0.3 - * @date     10. January 2018 + * @version  V5.0.5 + * @date     28. May 2018   ******************************************************************************/  /*   * Copyright (c) 2009-2018 Arm Limited. All rights reserved. @@ -572,8 +572,8 @@ typedef struct    #endif    #include CMSIS_NVIC_VIRTUAL_HEADER_FILE  #else -/*#define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping   not available for Cortex-M0 */ -/*#define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping   not available for Cortex-M0 */ +  #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 @@ -599,12 +599,20 @@ typedef struct  #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 @@ -758,6 +766,59 @@ __STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)  /** +  \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, @@ -792,7 +853,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)    \brief   System Reset    \details Initiates a system reset request to reset the MCU.   */ -__STATIC_INLINE void __NVIC_SystemReset(void) +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)  {    __DSB();                                                          /* Ensure all outstanding memory accesses included                                                                         buffered write are completed before reset */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/core_cm0plus.h b/os/common/ext/ARM/CMSIS/Core/Include/core_cm0plus.h index f8f30c349..424011ac3 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/core_cm0plus.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/core_cm0plus.h @@ -1,8 +1,8 @@  /**************************************************************************//**   * @file     core_cm0plus.h   * @brief    CMSIS Cortex-M0+ Core Peripheral Access Layer Header File - * @version  V5.0.4 - * @date     10. January 2018 + * @version  V5.0.6 + * @date     28. May 2018   ******************************************************************************/  /*   * Copyright (c) 2009-2018 Arm Limited. All rights reserved. @@ -690,8 +690,8 @@ typedef struct    #endif    #include CMSIS_NVIC_VIRTUAL_HEADER_FILE  #else -/*#define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping   not available for Cortex-M0+ */ -/*#define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping   not available for Cortex-M0+ */ +  #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 @@ -717,12 +717,20 @@ typedef struct  #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 @@ -876,6 +884,58 @@ __STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)  /** +  \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, @@ -920,7 +980,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)    \brief   System Reset    \details Initiates a system reset request to reset the MCU.   */ -__STATIC_INLINE void __NVIC_SystemReset(void) +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)  {    __DSB();                                                          /* Ensure all outstanding memory accesses included                                                                         buffered write are completed before reset */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/core_cm1.h b/os/common/ext/ARM/CMSIS/Core/Include/core_cm1.h new file mode 100644 index 000000000..0ed678e3b --- /dev/null +++ b/os/common/ext/ARM/CMSIS/Core/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/os/common/ext/ARM/CMSIS/Core/Include/core_cm23.h b/os/common/ext/ARM/CMSIS/Core/Include/core_cm23.h index 7d1d478af..acbc5dfea 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/core_cm23.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/core_cm23.h @@ -1,8 +1,8 @@  /**************************************************************************//**   * @file     core_cm23.h   * @brief    CMSIS Cortex-M23 Core Peripheral Access Layer Header File - * @version  V5.0.4 - * @date     10. January 2018 + * @version  V5.0.7 + * @date     22. June 2018   ******************************************************************************/  /*   * Copyright (c) 2009-2018 Arm Limited. All rights reserved. @@ -68,7 +68,7 @@  #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 */ +#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 @@ -415,6 +415,9 @@ typedef struct  #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 */ @@ -721,7 +724,7 @@ typedef struct   */  typedef struct  { -  __IOM uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */ +  __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 */ @@ -730,29 +733,26 @@ typedef struct          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 */ +  __IOM uint32_t PSCR;                   /*!< Offset: 0x308 (R/W)  Periodic Synchronization Control Register */          uint32_t RESERVED3[759U]; -  __IM  uint32_t TRIGGER;                /*!< Offset: 0xEE8 (R/ )  TRIGGER */ -  __IM  uint32_t FIFO0;                  /*!< Offset: 0xEEC (R/ )  Integration ETM Data */ -  __IM  uint32_t ITATBCTR2;              /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */ +  __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/ )  ITATBCTR0 */ -  __IM  uint32_t FIFO1;                  /*!< Offset: 0xEFC (R/ )  Integration ITM Data */ +  __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/ )  TPIU_DEVID */ -  __IM  uint32_t DEVTYPE;                /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */ +  __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                                         /*!< @Deprecated TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< @Deprecated TPI ACPR: PRESCALER Mask */ - -#define TPI_ACPR_SWOSCALER_Pos              0U                                         /*!< TPI ACPR: SWOSCALER Position */ -#define TPI_ACPR_SWOSCALER_Msk             (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/)    /*!< TPI ACPR: SWOSCALER Mask */ +#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 */ @@ -775,6 +775,9 @@ typedef struct  #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 */ @@ -782,61 +785,79 @@ typedef struct  #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 */ +/* 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 */ -#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 */ +/* 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_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_ITATBCTR2_AFVALID1S_Pos         1U                                         /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk        (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos)      /*!< TPI ITATBCTR2: AFVALID1SS 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_ITATBCTR2_ATREADY2S_Pos         0U                                         /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk        (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/)  /*!< TPI ITATBCTR2: ATREADY2S 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_ITATBCTR2_ATREADY1S_Pos         0U                                         /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk        (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/)  /*!< TPI ITATBCTR2: ATREADY1S 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 */ +/* 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_FIFO0_ETM0_Pos                  0U                                         /*!< TPI FIFO0: ETM0 Position */ -#define TPI_FIFO0_ETM0_Msk                 (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/)          /*!< TPI FIFO0: ETM0 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 */ -/* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/)    /*!< TPI ITATBCTR2: ATREADY 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 */ -/* 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_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_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_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_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_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_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_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 */ -#define TPI_FIFO1_ITM2_Pos                 16U                                         /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk                 (0xFFUL << TPI_FIFO1_ITM2_Pos)              /*!< TPI FIFO1: ITM2 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_FIFO1_ITM1_Pos                  8U                                         /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk                 (0xFFUL << TPI_FIFO1_ITM1_Pos)              /*!< TPI FIFO1: ITM1 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_FIFO1_ITM0_Pos                  0U                                         /*!< TPI FIFO1: ITM0 Position */ -#define TPI_FIFO1_ITM0_Msk                 (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/)          /*!< TPI FIFO1: ITM0 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 */ -/* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/)    /*!< TPI ITATBCTR0: ATREADY 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                (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */ +#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 */ @@ -848,22 +869,19 @@ typedef struct  #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_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         (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */ +#define TPI_DEVID_NrTraceInput_Msk         (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */  /* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_MajorType_Pos           4U                                         /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */ - -#define TPI_DEVTYPE_SubType_Pos             0U                                         /*!< TPI DEVTYPE: SubType Position */ +#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 */ @@ -1269,12 +1287,36 @@ typedef struct  #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 @@ -1516,6 +1558,58 @@ __STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)  /** +  \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, @@ -1559,7 +1653,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)    \brief   System Reset    \details Initiates a system reset request to reset the MCU.   */ -__STATIC_INLINE void __NVIC_SystemReset(void) +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)  {    __DSB();                                                          /* Ensure all outstanding memory accesses included                                                                         buffered write are completed before reset */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/core_cm3.h b/os/common/ext/ARM/CMSIS/Core/Include/core_cm3.h index a2c0d0805..74bff64be 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/core_cm3.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/core_cm3.h @@ -1,11 +1,11 @@  /**************************************************************************//**   * @file     core_cm3.h   * @brief    CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version  V5.0.5 - * @date     08. January 2018 + * @version  V5.0.8 + * @date     04. June 2018   ******************************************************************************/  /* - * Copyright (c) 2009-2017 ARM Limited. All rights reserved. + * Copyright (c) 2009-2018 Arm Limited. All rights reserved.   *   * SPDX-License-Identifier: Apache-2.0   * @@ -61,7 +61,7 @@   */  #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 */ @@ -995,7 +995,7 @@ typedef struct   */  typedef struct  { -  __IOM uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */ +  __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 */ @@ -1006,7 +1006,7 @@ typedef struct    __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 */ +  __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]; @@ -1022,11 +1022,8 @@ typedef struct  } TPI_Type;  /* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos              0U                                         /*!< @Deprecated TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< @Deprecated TPI ACPR: PRESCALER Mask */ - -#define TPI_ACPR_SWOSCALER_Pos              0U                                         /*!< TPI ACPR: SWOSCALER Position */ -#define TPI_ACPR_SWOSCALER_Msk             (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/)    /*!< TPI ACPR: SWOSCALER Mask */ +#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 */ @@ -1079,8 +1076,11 @@ typedef struct  #define TPI_FIFO0_ETM0_Msk                 (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/)          /*!< TPI FIFO0: ETM0 Mask */  /* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/)    /*!< TPI ITATBCTR2: ATREADY Mask */ +#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 */ @@ -1105,12 +1105,15 @@ typedef struct  #define TPI_FIFO1_ITM0_Msk                 (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/)          /*!< TPI FIFO1: ITM0 Mask */  /* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/)    /*!< TPI ITATBCTR0: ATREADY Mask */ +#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                (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */ +#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 */ @@ -1132,12 +1135,12 @@ typedef struct  #define TPI_DEVID_NrTraceInput_Msk         (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */  /* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_MajorType_Pos           4U                                         /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */ - -#define TPI_DEVTYPE_SubType_Pos             0U                                         /*!< TPI DEVTYPE: SubType Position */ +#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 */ @@ -1459,6 +1462,11 @@ typedef struct  #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 @@ -1751,7 +1759,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)    \brief   System Reset    \details Initiates a system reset request to reset the MCU.   */ -__STATIC_INLINE void __NVIC_SystemReset(void) +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)  {    __DSB();                                                          /* Ensure all outstanding memory accesses included                                                                         buffered write are completed before reset */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/core_cm33.h b/os/common/ext/ARM/CMSIS/Core/Include/core_cm33.h index b1efbcae7..6cd2db77f 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/core_cm33.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/core_cm33.h @@ -1,11 +1,11 @@  /**************************************************************************//**   * @file     core_cm33.h   * @brief    CMSIS Cortex-M33 Core Peripheral Access Layer Header File - * @version  V5.0.5 - * @date     08. January 2018 + * @version  V5.0.9 + * @date     06. July 2018   ******************************************************************************/  /* - * Copyright (c) 2009-2017 ARM Limited. All rights reserved. + * Copyright (c) 2009-2018 Arm Limited. All rights reserved.   *   * SPDX-License-Identifier: Apache-2.0   * @@ -61,14 +61,14 @@   */  #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_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 */ +                                     __CM33_CMSIS_VERSION_SUB           )      /*!< \deprecated CMSIS HAL version number */ -#define __CORTEX_M                 (33U)                                      /*!< Cortex-M Core */ +#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. @@ -90,7 +90,7 @@        #define __DSP_USED       1U      #else        #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" -      #define __DSP_USED         0U     +      #define __DSP_USED         0U      #endif    #else      #define __DSP_USED         0U @@ -113,7 +113,7 @@        #define __DSP_USED       1U      #else        #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" -      #define __DSP_USED         0U     +      #define __DSP_USED         0U      #endif    #else      #define __DSP_USED         0U @@ -136,7 +136,7 @@        #define __DSP_USED       1U      #else        #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" -      #define __DSP_USED         0U     +      #define __DSP_USED         0U      #endif    #else      #define __DSP_USED         0U @@ -159,7 +159,7 @@        #define __DSP_USED       1U      #else        #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" -      #define __DSP_USED         0U     +      #define __DSP_USED         0U      #endif    #else      #define __DSP_USED         0U @@ -568,6 +568,9 @@ typedef struct  #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 */ @@ -1383,7 +1386,7 @@ typedef struct   */  typedef struct  { -  __IOM uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */ +  __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 */ @@ -1392,29 +1395,26 @@ typedef struct          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 */ +  __IOM uint32_t PSCR;                   /*!< Offset: 0x308 (R/W)  Periodic Synchronization Control Register */          uint32_t RESERVED3[759U]; -  __IM  uint32_t TRIGGER;                /*!< Offset: 0xEE8 (R/ )  TRIGGER */ -  __IM  uint32_t FIFO0;                  /*!< Offset: 0xEEC (R/ )  Integration ETM Data */ -  __IM  uint32_t ITATBCTR2;              /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */ +  __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/ )  ITATBCTR0 */ -  __IM  uint32_t FIFO1;                  /*!< Offset: 0xEFC (R/ )  Integration ITM Data */ +  __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/ )  TPIU_DEVID */ -  __IM  uint32_t DEVTYPE;                /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */ +  __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                                         /*!< @Deprecated TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< @Deprecated TPI ACPR: PRESCALER Mask */ - -#define TPI_ACPR_SWOSCALER_Pos              0U                                         /*!< TPI ACPR: SWOSCALER Position */ -#define TPI_ACPR_SWOSCALER_Msk             (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/)    /*!< TPI ACPR: SWOSCALER Mask */ +#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 */ @@ -1437,6 +1437,9 @@ typedef struct  #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 */ @@ -1444,61 +1447,79 @@ typedef struct  #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 */ +/* 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 */ -#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 */ +/* 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_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_ITATBCTR2_AFVALID1S_Pos         1U                                         /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk        (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos)      /*!< TPI ITATBCTR2: AFVALID1SS 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_ITATBCTR2_ATREADY2S_Pos         0U                                         /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk        (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/)  /*!< TPI ITATBCTR2: ATREADY2S 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_ITATBCTR2_ATREADY1S_Pos         0U                                         /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk        (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/)  /*!< TPI ITATBCTR2: ATREADY1S 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 */ +/* 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_FIFO0_ETM0_Pos                  0U                                         /*!< TPI FIFO0: ETM0 Position */ -#define TPI_FIFO0_ETM0_Msk                 (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/)          /*!< TPI FIFO0: ETM0 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 */ -/* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/)    /*!< TPI ITATBCTR2: ATREADY 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 */ -/* 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_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_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_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_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_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_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_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 */ -#define TPI_FIFO1_ITM2_Pos                 16U                                         /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk                 (0xFFUL << TPI_FIFO1_ITM2_Pos)              /*!< TPI FIFO1: ITM2 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_FIFO1_ITM1_Pos                  8U                                         /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk                 (0xFFUL << TPI_FIFO1_ITM1_Pos)              /*!< TPI FIFO1: ITM1 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_FIFO1_ITM0_Pos                  0U                                         /*!< TPI FIFO1: ITM0 Position */ -#define TPI_FIFO1_ITM0_Msk                 (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/)          /*!< TPI FIFO1: ITM0 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 */ -/* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/)    /*!< TPI ITATBCTR0: ATREADY 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                (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */ +#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 */ @@ -1510,22 +1531,19 @@ typedef struct  #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_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         (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */ +#define TPI_DEVID_NrTraceInput_Msk         (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */  /* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_MajorType_Pos           4U                                         /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */ - -#define TPI_DEVTYPE_SubType_Pos             0U                                         /*!< TPI DEVTYPE: SubType Position */ +#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 */ @@ -1590,8 +1608,8 @@ typedef struct  #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: ADDR Position */ -#define MPU_RBAR_BASE_Msk                  (0x7FFFFFFUL << MPU_RBAR_BASE_Pos)             /*!< MPU RBAR: ADDR Mask */ +#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 */ @@ -2139,6 +2157,27 @@ typedef struct  #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 @@ -2498,7 +2537,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)    \brief   System Reset    \details Initiates a system reset request to reset the MCU.   */ -__STATIC_INLINE void __NVIC_SystemReset(void) +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)  {    __DSB();                                                          /* Ensure all outstanding memory accesses included                                                                         buffered write are completed before reset */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/core_cm4.h b/os/common/ext/ARM/CMSIS/Core/Include/core_cm4.h index a11a3817a..7d5687353 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/core_cm4.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/core_cm4.h @@ -1,11 +1,11 @@  /**************************************************************************//**   * @file     core_cm4.h   * @brief    CMSIS Cortex-M4 Core Peripheral Access Layer Header File - * @version  V5.0.5 - * @date     08. January 2018 + * @version  V5.0.8 + * @date     04. June 2018   ******************************************************************************/  /* - * Copyright (c) 2009-2017 ARM Limited. All rights reserved. + * Copyright (c) 2009-2018 Arm Limited. All rights reserved.   *   * SPDX-License-Identifier: Apache-2.0   * @@ -61,7 +61,7 @@   */  #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 */ @@ -1060,7 +1060,7 @@ typedef struct   */  typedef struct  { -  __IOM uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */ +  __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 */ @@ -1071,7 +1071,7 @@ typedef struct    __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 */ +  __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]; @@ -1087,11 +1087,8 @@ typedef struct  } TPI_Type;  /* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos              0U                                         /*!< @Deprecated TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< @Deprecated TPI ACPR: PRESCALER Mask */ - -#define TPI_ACPR_SWOSCALER_Pos              0U                                         /*!< TPI ACPR: SWOSCALER Position */ -#define TPI_ACPR_SWOSCALER_Msk             (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/)    /*!< TPI ACPR: SWOSCALER Mask */ +#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 */ @@ -1144,8 +1141,11 @@ typedef struct  #define TPI_FIFO0_ETM0_Msk                 (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/)          /*!< TPI FIFO0: ETM0 Mask */  /* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/)    /*!< TPI ITATBCTR2: ATREADY Mask */ +#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 */ @@ -1170,12 +1170,15 @@ typedef struct  #define TPI_FIFO1_ITM0_Msk                 (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/)          /*!< TPI FIFO1: ITM0 Mask */  /* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/)    /*!< TPI ITATBCTR0: ATREADY Mask */ +#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                (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */ +#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 */ @@ -1197,12 +1200,12 @@ typedef struct  #define TPI_DEVID_NrTraceInput_Msk         (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */  /* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_MajorType_Pos           4U                                         /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */ - -#define TPI_DEVTYPE_SubType_Pos             0U                                         /*!< TPI DEVTYPE: SubType Position */ +#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 */ @@ -1633,6 +1636,14 @@ typedef struct  #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 @@ -1925,7 +1936,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)    \brief   System Reset    \details Initiates a system reset request to reset the MCU.   */ -__STATIC_INLINE void __NVIC_SystemReset(void) +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)  {    __DSB();                                                          /* Ensure all outstanding memory accesses included                                                                         buffered write are completed before reset */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/core_cm7.h b/os/common/ext/ARM/CMSIS/Core/Include/core_cm7.h index 1fe53bf01..a14dc623b 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/core_cm7.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/core_cm7.h @@ -1,11 +1,11 @@  /**************************************************************************//**   * @file     core_cm7.h   * @brief    CMSIS Cortex-M7 Core Peripheral Access Layer Header File - * @version  V5.0.5 - * @date     08. January 2018 + * @version  V5.0.8 + * @date     04. June 2018   ******************************************************************************/  /* - * Copyright (c) 2009-2017 ARM Limited. All rights reserved. + * Copyright (c) 2009-2018 Arm Limited. All rights reserved.   *   * SPDX-License-Identifier: Apache-2.0   * @@ -62,7 +62,7 @@  #include "cmsis_version.h" -/*  CMSIS CM7 definitions */ +/* 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) | \ @@ -1265,7 +1265,7 @@ typedef struct   */  typedef struct  { -  __IOM uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */ +  __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 */ @@ -1276,7 +1276,7 @@ typedef struct    __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 */ +  __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]; @@ -1292,11 +1292,8 @@ typedef struct  } TPI_Type;  /* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos              0U                                         /*!< @Deprecated TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk             (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)    /*!< @Deprecated TPI ACPR: PRESCALER Mask */ - -#define TPI_ACPR_SWOSCALER_Pos              0U                                         /*!< TPI ACPR: SWOSCALER Position */ -#define TPI_ACPR_SWOSCALER_Msk             (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/)    /*!< TPI ACPR: SWOSCALER Mask */ +#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 */ @@ -1349,8 +1346,11 @@ typedef struct  #define TPI_FIFO0_ETM0_Msk                 (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/)          /*!< TPI FIFO0: ETM0 Mask */  /* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/)    /*!< TPI ITATBCTR2: ATREADY Mask */ +#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 */ @@ -1375,12 +1375,15 @@ typedef struct  #define TPI_FIFO1_ITM0_Msk                 (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/)          /*!< TPI FIFO1: ITM0 Mask */  /* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/)    /*!< TPI ITATBCTR0: ATREADY Mask */ +#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                (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */ +#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 */ @@ -1402,12 +1405,12 @@ typedef struct  #define TPI_DEVID_NrTraceInput_Msk         (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */  /* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_MajorType_Pos           4U                                         /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */ - -#define TPI_DEVTYPE_SubType_Pos             0U                                         /*!< TPI DEVTYPE: SubType Position */ +#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 */ @@ -1841,6 +1844,14 @@ typedef struct  #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 @@ -2133,7 +2144,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)    \brief   System Reset    \details Initiates a system reset request to reset the MCU.   */ -__STATIC_INLINE void __NVIC_SystemReset(void) +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)  {    __DSB();                                                          /* Ensure all outstanding memory accesses included                                                                         buffered write are completed before reset */ @@ -2308,9 +2319,9 @@ __STATIC_INLINE void SCB_EnableDCache (void)  __STATIC_INLINE void SCB_DisableDCache (void)  {    #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) -    register uint32_t ccsidr; -    register uint32_t sets; -    register uint32_t ways; +    uint32_t ccsidr; +    uint32_t sets; +    uint32_t ways;      SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/  /* Level 1 data cache */      __DSB(); diff --git a/os/common/ext/ARM/CMSIS/Core/Include/core_sc000.h b/os/common/ext/ARM/CMSIS/Core/Include/core_sc000.h index 9aab5e5b3..9b67c92f3 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/core_sc000.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/core_sc000.h @@ -1,8 +1,8 @@  /**************************************************************************//**   * @file     core_sc000.h   * @brief    CMSIS SC000 Core Peripheral Access Layer Header File - * @version  V5.0.3 - * @date     10. January 2018 + * @version  V5.0.5 + * @date     28. May 2018   ******************************************************************************/  /*   * Copyright (c) 2009-2018 Arm Limited. All rights reserved. @@ -727,6 +727,12 @@ typedef struct  #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) @@ -920,7 +926,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)    \brief   System Reset    \details Initiates a system reset request to reset the MCU.   */ -__STATIC_INLINE void __NVIC_SystemReset(void) +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)  {    __DSB();                                                          /* Ensure all outstanding memory accesses included                                                                         buffered write are completed before reset */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/core_sc300.h b/os/common/ext/ARM/CMSIS/Core/Include/core_sc300.h index a569ef2ac..3e8a47109 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/core_sc300.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/core_sc300.h @@ -1,8 +1,8 @@  /**************************************************************************//**   * @file     core_sc300.h   * @brief    CMSIS SC300 Core Peripheral Access Layer Header File - * @version  V5.0.3 - * @date     10. January 2018 + * @version  V5.0.6 + * @date     04. June 2018   ******************************************************************************/  /*   * Copyright (c) 2009-2018 Arm Limited. All rights reserved. @@ -977,7 +977,7 @@ typedef struct   */  typedef struct  { -  __IOM uint32_t SSPSR;                  /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */ +  __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 */ @@ -988,7 +988,7 @@ typedef struct    __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 */ +  __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]; @@ -1058,8 +1058,11 @@ typedef struct  #define TPI_FIFO0_ETM0_Msk                 (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/)          /*!< TPI FIFO0: ETM0 Mask */  /* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/)    /*!< TPI ITATBCTR2: ATREADY Mask */ +#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 */ @@ -1084,12 +1087,15 @@ typedef struct  #define TPI_FIFO1_ITM0_Msk                 (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/)          /*!< TPI FIFO1: ITM0 Mask */  /* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY_Pos           0U                                         /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk          (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/)    /*!< TPI ITATBCTR0: ATREADY Mask */ +#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                (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/)          /*!< TPI ITCTRL: Mode Mask */ +#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 */ @@ -1111,12 +1117,12 @@ typedef struct  #define TPI_DEVID_NrTraceInput_Msk         (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)  /*!< TPI DEVID: NrTraceInput Mask */  /* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_MajorType_Pos           4U                                         /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk          (0xFUL << TPI_DEVTYPE_MajorType_Pos)        /*!< TPI DEVTYPE: MajorType Mask */ - -#define TPI_DEVTYPE_SubType_Pos             0U                                         /*!< TPI DEVTYPE: SubType Position */ +#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 */ @@ -1436,6 +1442,12 @@ typedef struct  #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 @@ -1728,7 +1740,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)    \brief   System Reset    \details Initiates a system reset request to reset the MCU.   */ -__STATIC_INLINE void __NVIC_SystemReset(void) +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)  {    __DSB();                                                          /* Ensure all outstanding memory accesses included                                                                         buffered write are completed before reset */ diff --git a/os/common/ext/ARM/CMSIS/Core/Include/mpu_armv7.h b/os/common/ext/ARM/CMSIS/Core/Include/mpu_armv7.h index aa180c9e5..01422033d 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/mpu_armv7.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/mpu_armv7.h @@ -31,41 +31,41 @@  #ifndef ARM_MPU_ARMV7_H  #define ARM_MPU_ARMV7_H -#define ARM_MPU_REGION_SIZE_32B      ((uint8_t)0x04U) -#define ARM_MPU_REGION_SIZE_64B      ((uint8_t)0x05U) -#define ARM_MPU_REGION_SIZE_128B     ((uint8_t)0x06U) -#define ARM_MPU_REGION_SIZE_256B     ((uint8_t)0x07U) -#define ARM_MPU_REGION_SIZE_512B     ((uint8_t)0x08U) -#define ARM_MPU_REGION_SIZE_1KB      ((uint8_t)0x09U) -#define ARM_MPU_REGION_SIZE_2KB      ((uint8_t)0x0AU) -#define ARM_MPU_REGION_SIZE_4KB      ((uint8_t)0x0BU) -#define ARM_MPU_REGION_SIZE_8KB      ((uint8_t)0x0CU) -#define ARM_MPU_REGION_SIZE_16KB     ((uint8_t)0x0DU) -#define ARM_MPU_REGION_SIZE_32KB     ((uint8_t)0x0EU) -#define ARM_MPU_REGION_SIZE_64KB     ((uint8_t)0x0FU) -#define ARM_MPU_REGION_SIZE_128KB    ((uint8_t)0x10U) -#define ARM_MPU_REGION_SIZE_256KB    ((uint8_t)0x11U) -#define ARM_MPU_REGION_SIZE_512KB    ((uint8_t)0x12U) -#define ARM_MPU_REGION_SIZE_1MB      ((uint8_t)0x13U) -#define ARM_MPU_REGION_SIZE_2MB      ((uint8_t)0x14U) -#define ARM_MPU_REGION_SIZE_4MB      ((uint8_t)0x15U) -#define ARM_MPU_REGION_SIZE_8MB      ((uint8_t)0x16U) -#define ARM_MPU_REGION_SIZE_16MB     ((uint8_t)0x17U) -#define ARM_MPU_REGION_SIZE_32MB     ((uint8_t)0x18U) -#define ARM_MPU_REGION_SIZE_64MB     ((uint8_t)0x19U) -#define ARM_MPU_REGION_SIZE_128MB    ((uint8_t)0x1AU) -#define ARM_MPU_REGION_SIZE_256MB    ((uint8_t)0x1BU) -#define ARM_MPU_REGION_SIZE_512MB    ((uint8_t)0x1CU) -#define ARM_MPU_REGION_SIZE_1GB      ((uint8_t)0x1DU) -#define ARM_MPU_REGION_SIZE_2GB      ((uint8_t)0x1EU) -#define ARM_MPU_REGION_SIZE_4GB      ((uint8_t)0x1FU) - -#define ARM_MPU_AP_NONE 0U  -#define ARM_MPU_AP_PRIV 1U -#define ARM_MPU_AP_URO  2U -#define ARM_MPU_AP_FULL 3U -#define ARM_MPU_AP_PRO  5U -#define ARM_MPU_AP_RO   6U +#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  * @@ -78,6 +78,34 @@     (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. @@ -90,15 +118,60 @@  * \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) \ -  ((((DisableExec     ) << MPU_RASR_XN_Pos)     & MPU_RASR_XN_Msk)     | \ -   (((AccessPermission) << MPU_RASR_AP_Pos)     & MPU_RASR_AP_Msk)     | \ -   (((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)      | \ -   (((SubRegionDisable) << MPU_RASR_SRD_Pos)    & MPU_RASR_SRD_Msk)    | \ -   (((Size            ) << MPU_RASR_SIZE_Pos)   & MPU_RASR_SIZE_Msk)   | \ -   (MPU_RASR_ENABLE_Msk)) +  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  /** diff --git a/os/common/ext/ARM/CMSIS/Core/Include/mpu_armv8.h b/os/common/ext/ARM/CMSIS/Core/Include/mpu_armv8.h index 0ccfc74fe..62571da5b 100644 --- a/os/common/ext/ARM/CMSIS/Core/Include/mpu_armv8.h +++ b/os/common/ext/ARM/CMSIS/Core/Include/mpu_armv8.h @@ -87,7 +87,7 @@  * \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_Pos) | \ +  ((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)) diff --git a/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_armcc.h b/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_armcc.h index 7c4c94834..313d7435b 100644 --- a/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_armcc.h +++ b/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_armcc.h @@ -451,8 +451,8 @@ __STATIC_INLINE void __set_FPEXC(uint32_t fpexc)   * Include common core functions to access Coprocessor 15 registers   */ -#define __get_CP(cp, op1, Rt, CRn, CRm, op2) do { register uint32_t tmp __ASM("cp" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2); (Rt) = tmp; } while(0) -#define __set_CP(cp, op1, Rt, CRn, CRm, op2) do { register uint32_t tmp __ASM("cp" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2); tmp = (Rt); } while(0) +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) do { register volatile uint32_t tmp __ASM("cp" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2); (Rt) = tmp; } while(0) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) do { register volatile uint32_t tmp __ASM("cp" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2); tmp = (Rt); } while(0)  #define __get_CP64(cp, op1, Rt, CRm) \    do { \      uint32_t ltmp, htmp; \ diff --git a/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_gcc.h b/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_gcc.h index 5ac93d12c..4f464627a 100644 --- a/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_gcc.h +++ b/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_gcc.h @@ -1,11 +1,11 @@  /**************************************************************************//**   * @file     cmsis_gcc.h   * @brief    CMSIS compiler specific macros, functions, instructions - * @version  V1.0.1 - * @date     07. Sep 2017 + * @version  V1.0.2 + * @date     09. April 2018   ******************************************************************************/  /* - * Copyright (c) 2009-2017 ARM Limited. All rights reserved. + * Copyright (c) 2009-2018 Arm Limited. All rights reserved.   *   * SPDX-License-Identifier: Apache-2.0   * @@ -450,7 +450,9 @@ __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) || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) +  #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 @@ -473,7 +475,9 @@ __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) || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) +  #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 diff --git a/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_iccarm.h b/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_iccarm.h index a441e2d85..bb0248dc6 100644 --- a/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_iccarm.h +++ b/os/common/ext/ARM/CMSIS/Core_A/Include/cmsis_iccarm.h @@ -1,8 +1,8 @@  /**************************************************************************//**   * @file     cmsis_iccarm.h   * @brief    CMSIS compiler ICCARM (IAR Compiler for Arm) header file - * @version  V5.0.5 - * @date     10. January 2018 + * @version  V5.0.6 + * @date     02. March 2018   ******************************************************************************/  //------------------------------------------------------------------------------ @@ -109,7 +109,7 @@  #endif  #ifndef   __RESTRICT -  #define __RESTRICT            restrict +  #define __RESTRICT            __restrict  #endif  #ifndef   __STATIC_INLINE diff --git a/os/common/ext/ARM/CMSIS/Core_A/Include/core_ca.h b/os/common/ext/ARM/CMSIS/Core_A/Include/core_ca.h index c7c4b511f..dbe9794d4 100644 --- a/os/common/ext/ARM/CMSIS/Core_A/Include/core_ca.h +++ b/os/common/ext/ARM/CMSIS/Core_A/Include/core_ca.h @@ -1,8 +1,8 @@  /**************************************************************************//**   * @file     core_ca.h   * @brief    CMSIS Cortex-A Core Peripheral Access Layer Header File - * @version  V1.00 - * @date     22. Feb 2017 + * @version  V1.0.1 + * @date     07. May 2018   ******************************************************************************/  /*   * Copyright (c) 2009-2017 ARM Limited. All rights reserved. @@ -1284,8 +1284,6 @@ __STATIC_INLINE void GIC_SetPendingIRQ(IRQn_Type IRQn)    } else {      // INTID 0-15 Software Generated Interrupt      GICDistributor->SPENDSGIR[IRQn / 4U] = 1U << ((IRQn % 4U) * 8U); -    // Forward the interrupt to the CPU interface that requested it -    GICDistributor->SGIR = (IRQn | 0x02000000U);    }  } diff --git a/os/common/ext/ARM/CMSIS/Core_A/Source/irq_ctrl_gic.c b/os/common/ext/ARM/CMSIS/Core_A/Source/irq_ctrl_gic.c index 5fbe9dc65..25d135915 100644 --- a/os/common/ext/ARM/CMSIS/Core_A/Source/irq_ctrl_gic.c +++ b/os/common/ext/ARM/CMSIS/Core_A/Source/irq_ctrl_gic.c @@ -1,8 +1,8 @@  /**************************************************************************//**   * @file     irq_ctrl_gic.c   * @brief    Interrupt controller handling implementation for GIC - * @version  V1.0.0 - * @date     30. June 2017 + * @version  V1.0.1 + * @date     9. April 2018   ******************************************************************************/  /*   * Copyright (c) 2017 ARM Limited. All rights reserved. @@ -37,7 +37,7 @@  #endif  static IRQHandler_t IRQTable[IRQ_GIC_LINE_COUNT] = { 0U }; -static uint32_t   IRQ_ID0; +static uint32_t     IRQ_ID0;  /// Initialize interrupt controller.  __WEAK int32_t IRQ_Initialize (void) { @@ -70,6 +70,9 @@ __WEAK int32_t IRQ_SetHandler (IRQn_ID_t irqn, IRQHandler_t handler) {  __WEAK IRQHandler_t IRQ_GetHandler (IRQn_ID_t irqn) {    IRQHandler_t h; +  // Ignore CPUID field (software generated interrupts) +  irqn &= 0x3FFU; +    if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) {      h = IRQTable[irqn];    } else { @@ -271,9 +274,12 @@ __WEAK IRQn_ID_t IRQ_GetActiveFIQ (void) {  /// Signal end of interrupt processing.  __WEAK int32_t IRQ_EndOfInterrupt (IRQn_ID_t irqn) {    int32_t status; +  IRQn_Type irq = (IRQn_Type)irqn; + +  irqn &= 0x3FFU;    if ((irqn >= 0) && (irqn < (IRQn_ID_t)IRQ_GIC_LINE_COUNT)) { -    GIC_EndInterrupt ((IRQn_Type)irqn); +    GIC_EndInterrupt (irq);      if (irqn == 0) {        IRQ_ID0 = 0U;  | 
