diff options
Diffstat (limited to 'os')
| -rw-r--r-- | os/hal/platforms/LPC11xx/hal_lld.c | 7 | ||||
| -rw-r--r-- | os/ports/GCC/ARMCMx/chcore.c | 2 | ||||
| -rw-r--r-- | os/ports/GCC/ARMCMx/chcore.h | 3 | 
3 files changed, 5 insertions, 7 deletions
| diff --git a/os/hal/platforms/LPC11xx/hal_lld.c b/os/hal/platforms/LPC11xx/hal_lld.c index d58648c5e..31d9f5417 100644 --- a/os/hal/platforms/LPC11xx/hal_lld.c +++ b/os/hal/platforms/LPC11xx/hal_lld.c @@ -58,13 +58,8 @@   */
  void hal_lld_init(void) {
 -  /* Note: PRIGROUP 2:0 (2:6).*/
 -//  SCB->AIRCR = AIRCR_VECTKEY | SCB_AIRCR_PRIGROUP_0 | SCB_AIRCR_PRIGROUP_1;
 -  NVICSetSystemHandlerPriority(HANDLER_SVCALL, CORTEX_PRIORITY_SVCALL);
 -  NVICSetSystemHandlerPriority(HANDLER_SYSTICK, CORTEX_PRIORITY_SYSTICK);
 -  NVICSetSystemHandlerPriority(HANDLER_PENDSV, CORTEX_PRIORITY_PENDSV);
 -
    /* SysTick initialization using the system clock.*/
 +  NVICSetSystemHandlerPriority(HANDLER_SYSTICK, CORTEX_PRIORITY_SYSTICK);
    SysTick->LOAD = LPC11xx_SYSCLK / CH_FREQUENCY - 1;
    SysTick->VAL = 0;
    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
 diff --git a/os/ports/GCC/ARMCMx/chcore.c b/os/ports/GCC/ARMCMx/chcore.c index 9ed51d97e..9d0f6b060 100644 --- a/os/ports/GCC/ARMCMx/chcore.c +++ b/os/ports/GCC/ARMCMx/chcore.c @@ -80,6 +80,8 @@ void _port_switch_from_irq(void) {                  "mrs     r1, XPSR                               \n\t"   \
                  "push    {r0, r1, lr}                           \n\t"   \
                  "ldr     r0, =_port_saved_pc                    \n\t"   \
 +                "ldr     r0, [r0]                               \n\t"   \
 +                "add 	 r0, r0, #1								\n\t"	\
                  "str     r0, [sp, #28]");
    chSchDoRescheduleI();
 diff --git a/os/ports/GCC/ARMCMx/chcore.h b/os/ports/GCC/ARMCMx/chcore.h index 4ee55dc4a..5a8d3c9ad 100644 --- a/os/ports/GCC/ARMCMx/chcore.h +++ b/os/ports/GCC/ARMCMx/chcore.h @@ -211,7 +211,8 @@ struct context {   */
  #define PORT_IRQ_EPILOGUE() {                                           \
    chSysLockFromIsr();                                                   \
 -  if (((SCB_ICSR & ICSR_RETTOBASE) != 0) && chSchIsRescRequiredExI()) { \
 +  if (((SCB_ICSR & ICSR_VECTPENDING_MASK) == 0) &&						\
 +      chSchIsRescRequiredExI()) {										\
      register struct cmxctx *ctxp asm ("r3");                            \
                                                                          \
      asm volatile ("mrs     %0, PSP" : "=r" (ctxp) : "r" (ctxp));        \
 | 
