diff options
author | Kumar Gala <kumar.gala@linaro.org> | 2017-01-18 12:28:52 -0600 |
---|---|---|
committer | Kumar Gala <kumar.gala@linaro.org> | 2017-01-30 11:02:36 -0600 |
commit | f85dbb1b34e35aaa1141f985d306e3fa59160217 (patch) | |
tree | 3f9744e0193da5984183adf99b258394353b3b84 | |
parent | 6e55fd38deb3b8dcc4530846a04add833fbb54cc (diff) |
arm: cmsis: Convert _ScbExcPrioSet to NVIC_SetPriority
Replace _ScbExcPrioSet with calls to NVIC_SetPriority as it handles both
interrupt and exception priorities. We don't need to shift around the
priority values for NVIC_SetPriority.
Jira: ZEP-1568
Change-Id: Iccd68733c3f7faa82b7ccb17200eef328090b6da
Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
-rw-r--r-- | arch/arm/include/cortex_m/exc.h | 14 | ||||
-rw-r--r-- | drivers/timer/cortex_m_systick.c | 2 | ||||
-rw-r--r-- | include/arch/arm/cortex_m/nvic.h | 20 | ||||
-rw-r--r-- | include/arch/arm/cortex_m/scb.h | 35 |
4 files changed, 10 insertions, 61 deletions
diff --git a/arch/arm/include/cortex_m/exc.h b/arch/arm/include/cortex_m/exc.h index ab25ebd77..c5eb8a554 100644 --- a/arch/arm/include/cortex_m/exc.h +++ b/arch/arm/include/cortex_m/exc.h @@ -27,6 +27,8 @@ extern "C" { #else +#include <arch/arm/cortex_m/cmsis.h> + /** * * @brief Find out if running in an ISR context @@ -57,6 +59,8 @@ static ALWAYS_INLINE int _IsInIsr(void) #endif /* CONFIG_ARMV6_M */ } +#define _EXC_SVC_PRIO 0 +#define _EXC_FAULT_PRIO 0 /** * @brief Setup system exceptions * @@ -69,16 +73,16 @@ static ALWAYS_INLINE int _IsInIsr(void) */ static ALWAYS_INLINE void _ExcSetup(void) { - _ScbExcPrioSet(_EXC_PENDSV, _EXC_PRIO(0xff)); + NVIC_SetPriority(PendSV_IRQn, 0xff); #ifdef CONFIG_CPU_CORTEX_M_HAS_BASEPRI - _ScbExcPrioSet(_EXC_SVC, _EXC_PRIO(_EXC_SVC_PRIO)); + NVIC_SetPriority(SVCall_IRQn, _EXC_SVC_PRIO); #endif #ifdef CONFIG_CPU_CORTEX_M_HAS_PROGRAMMABLE_FAULT_PRIOS - _ScbExcPrioSet(_EXC_MPU_FAULT, _EXC_PRIO(_EXC_FAULT_PRIO)); - _ScbExcPrioSet(_EXC_BUS_FAULT, _EXC_PRIO(_EXC_FAULT_PRIO)); - _ScbExcPrioSet(_EXC_USAGE_FAULT, _EXC_PRIO(_EXC_FAULT_PRIO)); + NVIC_SetPriority(MemoryManagement_IRQn, _EXC_FAULT_PRIO); + NVIC_SetPriority(BusFault_IRQn, _EXC_FAULT_PRIO); + NVIC_SetPriority(UsageFault_IRQn, _EXC_FAULT_PRIO); _ScbUsageFaultEnable(); _ScbBusFaultEnable(); diff --git a/drivers/timer/cortex_m_systick.c b/drivers/timer/cortex_m_systick.c index e94351481..77d0a338b 100644 --- a/drivers/timer/cortex_m_systick.c +++ b/drivers/timer/cortex_m_systick.c @@ -537,7 +537,7 @@ int _sys_clock_driver_init(struct device *device) #endif /* CONFIG_TICKLESS_IDLE */ - _ScbExcPrioSet(_EXC_SYSTICK, _EXC_IRQ_DEFAULT_PRIO); + NVIC_SetPriority(SysTick_IRQn, _IRQ_PRIO_OFFSET); SysTick->CTRL = ctrl; diff --git a/include/arch/arm/cortex_m/nvic.h b/include/arch/arm/cortex_m/nvic.h index 8bd41596b..588df9291 100644 --- a/include/arch/arm/cortex_m/nvic.h +++ b/include/arch/arm/cortex_m/nvic.h @@ -55,26 +55,6 @@ extern "C" { #define _EXC_IRQ_DEFAULT_PRIO _EXC_PRIO(_IRQ_PRIO_OFFSET) -#define _EXC_SVC_PRIO 0 -#define _EXC_FAULT_PRIO 0 - -/* no exc #0 */ -#define _EXC_RESET 1 -#define _EXC_NMI 2 -#define _EXC_HARD_FAULT 3 -#define _EXC_MPU_FAULT 4 -#define _EXC_BUS_FAULT 5 -#define _EXC_USAGE_FAULT 6 -/* 7-10 reserved */ -#define _EXC_SVC 11 -#define _EXC_DEBUG 12 -/* 13 reserved */ -#define _EXC_PENDSV 14 -#define _EXC_SYSTICK 15 -/* 16+ IRQs */ - -#define _NUM_EXC 16 - #define NUM_IRQS_PER_REG 32 #define REG_FROM_IRQ(irq) (irq / NUM_IRQS_PER_REG) #define BIT_FROM_IRQ(irq) (irq % NUM_IRQS_PER_REG) diff --git a/include/arch/arm/cortex_m/scb.h b/include/arch/arm/cortex_m/scb.h index a138b8fa4..099898210 100644 --- a/include/arch/arm/cortex_m/scb.h +++ b/include/arch/arm/cortex_m/scb.h @@ -110,41 +110,6 @@ static inline uint32_t _ScbActiveVectorGet(void) return __scs.scb.icsr.bit.vectactive; } -/** - * - * @brief Set priority of an exception - * - * Only works with exceptions; i.e. do not use this for interrupts, which - * are exceptions 16+. - * - * Note that the processor might not implement all 8 bits, in which case the - * lower N bits are ignored. - * - * ARMv6-M: Exceptions 1 to 3 priorities are fixed (-3, -2, -1) and 4 to 9 are - * reserved exceptions. - * ARMv7-M: Exceptions 1 to 3 priorities are fixed (-3, -2, -1). - * - * @param exc exception number, 10 to 15 on ARMv6-M and 4 to 15 on ARMv7-M - * @param pri priority, 0 to 255 - * @return N/A - */ - -static inline void _ScbExcPrioSet(uint8_t exc, uint8_t pri) -{ -#if defined(CONFIG_ARMV6_M) - volatile uint32_t * const shpr = &__scs.scb.shpr[_PRIO_SHP_IDX(exc)]; - __ASSERT((exc > 10) && (exc < 16), ""); - *shpr = ((*shpr & ~((uint32_t)0xff << _PRIO_BIT_SHIFT(exc))) | - ((uint32_t)pri << _PRIO_BIT_SHIFT(exc))); -#elif defined(CONFIG_ARMV7_M) - /* For priority exception handler 4-15 */ - __ASSERT((exc > 3) && (exc < 16), ""); - __scs.scb.shpr[exc - 4] = pri; -#else -#error Unknown ARM architecture -#endif /* CONFIG_ARMV6_M */ -} - #if defined(CONFIG_ARMV6_M) #elif defined(CONFIG_ARMV7_M) /** |