From 1b12b909635477ebe6ff2b273cfbcd7247473740 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 22 Apr 2012 14:05:22 +0000 Subject: [PATCH] PRIGROUP setting is now configurable. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4121 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/ports/GCC/ARMCMx/chcore_v7m.c | 2 +- os/ports/GCC/ARMCMx/chcore_v7m.h | 11 ++++++++++- os/ports/IAR/ARMCMx/chcore_v7m.c | 2 +- os/ports/IAR/ARMCMx/chcore_v7m.h | 9 +++++++++ os/ports/RVCT/ARMCMx/chcore_v7m.c | 2 +- os/ports/RVCT/ARMCMx/chcore_v7m.h | 9 +++++++++ os/ports/common/ARMCMx/nvic.h | 2 +- readme.txt | 4 ++++ 8 files changed, 36 insertions(+), 5 deletions(-) diff --git a/os/ports/GCC/ARMCMx/chcore_v7m.c b/os/ports/GCC/ARMCMx/chcore_v7m.c index 8c650a202..a661bb60a 100644 --- a/os/ports/GCC/ARMCMx/chcore_v7m.c +++ b/os/ports/GCC/ARMCMx/chcore_v7m.c @@ -112,7 +112,7 @@ void _port_init(void) { /* Initialization of the vector table and priority related settings.*/ SCB_VTOR = CORTEX_VTOR_INIT; - SCB_AIRCR = AIRCR_VECTKEY | AIRCR_PRIGROUP(0); + SCB_AIRCR = AIRCR_VECTKEY | AIRCR_PRIGROUP(CORTEX_PRIGROUP_INIT); /* Initialization of the system vectors used by the port.*/ nvicSetSystemHandlerPriority(HANDLER_SVCALL, diff --git a/os/ports/GCC/ARMCMx/chcore_v7m.h b/os/ports/GCC/ARMCMx/chcore_v7m.h index 10edcc45b..6fdfd44d6 100644 --- a/os/ports/GCC/ARMCMx/chcore_v7m.h +++ b/os/ports/GCC/ARMCMx/chcore_v7m.h @@ -129,7 +129,16 @@ * @brief NVIC VTOR initialization expression. */ #if !defined(CORTEX_VTOR_INIT) || defined(__DOXYGEN__) -#define CORTEX_VTOR_INIT 0x00000000 +#define CORTEX_VTOR_INIT 0x00000000 +#endif + +/** + * @brief NVIC PRIGROUP initialization expression. + * @details The default assigns all available priority bits as preemption + * priority with no sub-priority. + */ +#if !defined(CORTEX_PRIGROUP_INIT) || defined(__DOXYGEN__) +#define CORTEX_PRIGROUP_INIT (7 - CORTEX_PRIORITY_BITS) #endif /*===========================================================================*/ diff --git a/os/ports/IAR/ARMCMx/chcore_v7m.c b/os/ports/IAR/ARMCMx/chcore_v7m.c index 2db2d1dd2..ce7f44243 100644 --- a/os/ports/IAR/ARMCMx/chcore_v7m.c +++ b/os/ports/IAR/ARMCMx/chcore_v7m.c @@ -112,7 +112,7 @@ void _port_init(void) { /* Initialization of the vector table and priority related settings.*/ SCB_VTOR = CORTEX_VTOR_INIT; - SCB_AIRCR = AIRCR_VECTKEY | AIRCR_PRIGROUP(0); + SCB_AIRCR = AIRCR_VECTKEY | AIRCR_PRIGROUP(CORTEX_PRIGROUP_INIT); #if CORTEX_USE_FPU { diff --git a/os/ports/IAR/ARMCMx/chcore_v7m.h b/os/ports/IAR/ARMCMx/chcore_v7m.h index b46ef22f0..24145d409 100644 --- a/os/ports/IAR/ARMCMx/chcore_v7m.h +++ b/os/ports/IAR/ARMCMx/chcore_v7m.h @@ -132,6 +132,15 @@ #define CORTEX_VTOR_INIT 0x00000000 #endif +/** + * @brief NVIC PRIGROUP initialization expression. + * @details The default assigns all available priority bits as preemption + * priority with no sub-priority. + */ +#if !defined(CORTEX_PRIGROUP_INIT) || defined(__DOXYGEN__) +#define CORTEX_PRIGROUP_INIT (7 - CORTEX_PRIORITY_BITS) +#endif + /*===========================================================================*/ /* Port derived parameters. */ /*===========================================================================*/ diff --git a/os/ports/RVCT/ARMCMx/chcore_v7m.c b/os/ports/RVCT/ARMCMx/chcore_v7m.c index 90dcbf32e..fb11547c6 100644 --- a/os/ports/RVCT/ARMCMx/chcore_v7m.c +++ b/os/ports/RVCT/ARMCMx/chcore_v7m.c @@ -114,7 +114,7 @@ void _port_init(void) { /* Initialization of the vector table and priority related settings.*/ SCB_VTOR = CORTEX_VTOR_INIT; - SCB_AIRCR = AIRCR_VECTKEY | AIRCR_PRIGROUP(0); + SCB_AIRCR = AIRCR_VECTKEY | AIRCR_PRIGROUP(CORTEX_PRIGROUP_INIT); #if CORTEX_USE_FPU { diff --git a/os/ports/RVCT/ARMCMx/chcore_v7m.h b/os/ports/RVCT/ARMCMx/chcore_v7m.h index 98bbb6358..c31bbcffe 100644 --- a/os/ports/RVCT/ARMCMx/chcore_v7m.h +++ b/os/ports/RVCT/ARMCMx/chcore_v7m.h @@ -132,6 +132,15 @@ #define CORTEX_VTOR_INIT 0x00000000 #endif +/** + * @brief NVIC PRIGROUP initialization expression. + * @details The default assigns all available priority bits as preemption + * priority with no sub-priority. + */ +#if !defined(CORTEX_PRIGROUP_INIT) || defined(__DOXYGEN__) +#define CORTEX_PRIGROUP_INIT (7 - CORTEX_PRIORITY_BITS) +#endif + /*===========================================================================*/ /* Port derived parameters. */ /*===========================================================================*/ diff --git a/os/ports/common/ARMCMx/nvic.h b/os/ports/common/ARMCMx/nvic.h index e4b6757a0..7188c4bcd 100644 --- a/os/ports/common/ARMCMx/nvic.h +++ b/os/ports/common/ARMCMx/nvic.h @@ -189,7 +189,7 @@ typedef struct { #define AIRCR_VECTKEY 0x05FA0000U #define AIRCR_PRIGROUP_MASK (0x7U << 8) -#define AIRCR_PRIGROUP(n) ((n##U) << 8) +#define AIRCR_PRIGROUP(n) ((n) << 8) /** * @brief Structure representing the FPU I/O space. diff --git a/readme.txt b/readme.txt index 9ecd51eb4..cbe7d6e81 100644 --- a/readme.txt +++ b/readme.txt @@ -117,6 +117,10 @@ under ./os/various/fatfs_bindings and shared among all demos. The FatFS file ffconf.h is now application-specific like all the other configuration files. +- NEW: Added an new option CORTEX_PRIGROUP_INIT to the Cortex-Mx ports in + order to make priority organization configurable, the default is to + assign all the available priority bits to preemption priority with no + sub-priorities. - NEW: Added support for pools of generic "mail" objects under ./os/various, mail objects are meant to be used together with mailboxes. - NEW: Added a new function chPoolLoadArray() to the Memory Pools subsystem,