/*
 * FreeRTOS Kernel <DEVELOPMENT BRANCH>
 * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * SPDX-License-Identifier: MIT AND BSD-3-Clause
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 * the Software, and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * https://www.FreeRTOS.org
 * https://github.com/FreeRTOS
 *
 */

/*This file has been prepared for Doxygen automatic documentation generation.*/

/*! \file *********************************************************************
 *
 * \brief FreeRTOS port source for AVR32 UC3.
 *
 * - Compiler:           GNU GCC for AVR32
 * - Supported devices:  All AVR32 devices can be used.
 * - AppNote:
 *
 * \author               Atmel Corporation (Now Microchip):
 *                                        https://www.microchip.com \n
 *                       Support and FAQ: https://www.microchip.com/support/
 *
 *****************************************************************************/

/*
 * Copyright (c) 2007, Atmel Corporation All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. The name of ATMEL may not be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
 * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef PORTMACRO_H
#define PORTMACRO_H

/*-----------------------------------------------------------
 * Port specific definitions.
 *
 * The settings in this file configure FreeRTOS correctly for the
 * given hardware and compiler.
 *
 * These settings should not be altered.
 *-----------------------------------------------------------
 */
#include <avr32/io.h>
#include "intc.h"
#include "compiler.h"

/* *INDENT-OFF* */
#ifdef __cplusplus
    extern "C" {
#endif
/* *INDENT-ON* */


/* Type definitions. */
#define portCHAR          char
#define portFLOAT         float
#define portDOUBLE        double
#define portLONG          long
#define portSHORT         short
#define portSTACK_TYPE    uint32_t
#define portBASE_TYPE     long

typedef portSTACK_TYPE   StackType_t;
typedef long             BaseType_t;
typedef unsigned long    UBaseType_t;

#define TASK_DELAY_MS( x )     ( ( x ) / portTICK_PERIOD_MS )
#define TASK_DELAY_S( x )      ( ( x ) * 1000 / portTICK_PERIOD_MS )
#define TASK_DELAY_MIN( x )    ( ( x ) * 60 * 1000 / portTICK_PERIOD_MS )

#define configTICK_TC_IRQ    ATPASTE2( AVR32_TC_IRQ, configTICK_TC_CHANNEL )

#if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
    typedef uint16_t   TickType_t;
    #define portMAX_DELAY    ( TickType_t ) 0xffff
#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS )
    typedef uint32_t   TickType_t;
    #define portMAX_DELAY    ( TickType_t ) ( 0xFFFFFFFFUL )
#else
    #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
#endif
/*-----------------------------------------------------------*/

/* Architecture specifics. */
#define portSTACK_GROWTH      ( -1 )
#define portTICK_PERIOD_MS    ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
#define portBYTE_ALIGNMENT    4
#define portNOP()    { __asm__ __volatile__ ( "nop" ); }
/*-----------------------------------------------------------*/


/*-----------------------------------------------------------*/

/* INTC-specific. */
#define DISABLE_ALL_EXCEPTIONS()        Disable_global_exception()
#define ENABLE_ALL_EXCEPTIONS()         Enable_global_exception()

#define DISABLE_ALL_INTERRUPTS()        Disable_global_interrupt()
#define ENABLE_ALL_INTERRUPTS()         Enable_global_interrupt()

#define DISABLE_INT_LEVEL( int_lev )    Disable_interrupt_level( int_lev )
#define ENABLE_INT_LEVEL( int_lev )     Enable_interrupt_level( int_lev )


/*
 * Debug trace.
 * Activated if and only if configDBG is nonzero.
 * Prints a formatted string to stdout.
 * The current source file name and line number are output with a colon before
 * the formatted string.
 * A carriage return and a linefeed are appended to the output.
 * stdout is redirected to the USART configured by configDBG_USART.
 * The parameters are the same as for the standard printf function.
 * There is no return value.
 * SHALL NOT BE CALLED FROM WITHIN AN INTERRUPT as fputs and printf use malloc,
 * which is interrupt-unsafe with the current __malloc_lock and __malloc_unlock.
 */
#if configDBG
    #define portDBG_TRACE( ... )                                 \
    {                                                            \
        fputs( __FILE__ ":" ASTRINGZ( __LINE__ ) ": ", stdout ); \
        printf( __VA_ARGS__ );                                   \
        fputs( "\r\n", stdout );                                 \
    }
#else
    #define portDBG_TRACE( ... )
#endif


/* Critical section management. */
#define portDISABLE_INTERRUPTS()    DISABLE_ALL_INTERRUPTS()
#define portENABLE_INTERRUPTS()     ENABLE_ALL_INTERRUPTS()


extern void vPortEnterCritical( void );
extern void vPortExitCritical( void );

#define portENTER_CRITICAL()    vPortEnterCritical();
#define portEXIT_CRITICAL()     vPortExitCritical();


/* Added as there is no such function in FreeRTOS. */
extern void * pvPortRealloc( void * pv,
                             size_t xSize );
/*-----------------------------------------------------------*/


/*=============================================================================================*/

/*
 * Restore Context for cases other than INTi.
 */
#define portRESTORE_CONTEXT()                                                                         \
    {                                                                                                 \
        extern volatile uint32_t ulCriticalNesting;                                                   \
        extern volatile void * volatile pxCurrentTCB;                                                 \
                                                                                                      \
        __asm__ __volatile__ (                                                                        \
            /* Set SP to point to new stack */                                                        \
            "mov     r8, LO(%[pxCurrentTCB])                                                    \n\t" \
            "orh     r8, HI(%[pxCurrentTCB])                                                    \n\t" \
            "ld.w    r0, r8[0]                                                                  \n\t" \
            "ld.w    sp, r0[0]                                                                  \n\t" \
                                                                                                      \
            /* Restore ulCriticalNesting variable */                                                  \
            "ld.w    r0, sp++                                                                   \n\t" \
            "mov     r8, LO(%[ulCriticalNesting])                                               \n\t" \
            "orh     r8, HI(%[ulCriticalNesting])                                               \n\t" \
            "st.w    r8[0], r0                                                                  \n\t" \
                                                                                                      \
            /* Restore R0..R7 */                                                                      \
            "ldm     sp++, r0-r7                                                                \n\t" \
            /* R0-R7 should not be used below this line */                                            \
            /* Skip PC and SR (will do it at the end) */                                              \
            "sub     sp, -2*4                                                                   \n\t" \
            /* Restore R8..R12 and LR */                                                              \
            "ldm     sp++, r8-r12, lr                                                           \n\t" \
            /* Restore SR */                                                                          \
            "ld.w    r0, sp[-8*4]\n\t" /* R0 is modified, is restored later. */                       \
            "mtsr    %[SR], r0                                                                  \n\t" \
            /* Restore r0 */                                                                          \
            "ld.w    r0, sp[-9*4]                                                               \n\t" \
            /* Restore PC */                                                                          \
            "ld.w    pc, sp[-7*4]" /* Get PC from stack - PC is the 7th register saved */             \
            :                                                                                         \
            :[ ulCriticalNesting ] "i" ( &ulCriticalNesting ),                                        \
            [ pxCurrentTCB ] "i" ( &pxCurrentTCB ),                                                   \
            [ SR ] "i" ( AVR32_SR )                                                                   \
            );                                                                                        \
    }


/*
 * portSAVE_CONTEXT_INT() and portRESTORE_CONTEXT_INT(): for INT0..3 exceptions.
 * portSAVE_CONTEXT_SCALL() and portRESTORE_CONTEXT_SCALL(): for the scall exception.
 *
 * Had to make different versions because registers saved on the system stack
 * are not the same between INT0..3 exceptions and the scall exception.
 */

/* Task context stack layout: */
/* R8  (*) */
/* R9  (*) */
/* R10 (*) */
/* R11 (*) */
/* R12 (*) */
/* R14/LR (*) */
/* R15/PC (*) */
/* SR (*) */
/* R0 */
/* R1 */
/* R2 */
/* R3 */
/* R4 */
/* R5 */
/* R6 */
/* R7 */
/* ulCriticalNesting */
/* (*) automatically done for INT0..INT3, but not for SCALL */

/*
 * The ISR used for the scheduler tick depends on whether the cooperative or
 * the preemptive scheduler is being used.
 */
#if configUSE_PREEMPTION == 0

/*
 * portSAVE_CONTEXT_OS_INT() for OS Tick exception.
 */
    #define portSAVE_CONTEXT_OS_INT()                                                     \
    {                                                                                     \
        /* Save R0..R7 */                                                                 \
        __asm__ __volatile__ ( "stm     --sp, r0-r7" );                                   \
                                                                                          \
        /* With the cooperative scheduler, as there is no context switch by interrupt, */ \
        /* there is also no context save. */                                              \
    }

/*
 * portRESTORE_CONTEXT_OS_INT() for Tick exception.
 */
    #define portRESTORE_CONTEXT_OS_INT()                                                      \
    {                                                                                         \
        __asm__ __volatile__ (                                                                \
            /* Restore R0..R7 */                                                              \
            "ldm     sp++, r0-r7\n\t"                                                         \
                                                                                              \
            /* With the cooperative scheduler, as there is no context switch by interrupt, */ \
            /* there is also no context restore. */                                           \
            "rete"                                                                            \
            );                                                                                \
    }

#else /* if configUSE_PREEMPTION == 0 */

/*
 * portSAVE_CONTEXT_OS_INT() for OS Tick exception.
 */
    #define portSAVE_CONTEXT_OS_INT()                                                                             \
    {                                                                                                             \
        extern volatile uint32_t ulCriticalNesting;                                                               \
        extern volatile void * volatile pxCurrentTCB;                                                             \
                                                                                                                  \
        /* When we come here */                                                                                   \
        /* Registers R8..R12, LR, PC and SR had already been pushed to system stack */                            \
                                                                                                                  \
        __asm__ __volatile__ (                                                                                    \
            /* Save R0..R7 */                                                                                     \
            "stm     --sp, r0-r7                                                                            \n\t" \
                                                                                                                  \
            /* Save ulCriticalNesting variable  - R0 is overwritten */                                            \
            "mov     r8, LO(%[ulCriticalNesting])\n\t"                                                            \
            "orh     r8, HI(%[ulCriticalNesting])\n\t"                                                            \
            "ld.w    r0, r8[0]                                                                              \n\t" \
            "st.w    --sp, r0                                                                               \n\t" \
                                                                                                                  \
            /* Check if INT0 or higher were being handled (case where the OS tick interrupted another */          \
            /* interrupt handler (which was of a higher priority level but decided to lower its priority */       \
            /* level and allow other lower interrupt level to occur). */                                          \
            /* In this case we don't want to do a task switch because we don't know what the stack */             \
            /* currently looks like (we don't know what the interrupted interrupt handler was doing). */          \
            /* Saving SP in pxCurrentTCB and then later restoring it (thinking restoring the task) */             \
            /* will just be restoring the interrupt handler, no way!!! */                                         \
            /* So, since we won't do a vTaskSwitchContext(), it's of no use to save SP. */                        \
            "ld.w    r0, sp[9*4]\n\t"   /* Read SR in stack */                                                    \
            "bfextu  r0, r0, 22, 3\n\t" /* Extract the mode bits to R0. */                                        \
            "cp.w    r0, 1\n\t"         /* Compare the mode bits with supervisor mode(b'001) */                   \
            "brhi    LABEL_INT_SKIP_SAVE_CONTEXT_%[LINE]                                                    \n\t" \
                                                                                                                  \
            /* Store SP in the first member of the structure pointed to by pxCurrentTCB */                        \
            /* NOTE: we don't enter a critical section here because all interrupt handlers */                     \
            /* MUST perform a SAVE_CONTEXT/RESTORE_CONTEXT in the same way as */                                  \
            /* portSAVE_CONTEXT_OS_INT/port_RESTORE_CONTEXT_OS_INT if they call OS functions. */                  \
            /* => all interrupt handlers must use portENTER_SWITCHING_ISR/portEXIT_SWITCHING_ISR. */              \
            "mov     r8, LO(%[pxCurrentTCB])\n\t"                                                                 \
            "orh     r8, HI(%[pxCurrentTCB])\n\t"                                                                 \
            "ld.w    r0, r8[0]\n\t"                                                                               \
            "st.w    r0[0], sp\n"                                                                                 \
                                                                                                                  \
            "LABEL_INT_SKIP_SAVE_CONTEXT_%[LINE]:"                                                                \
            :                                                                                                     \
            :[ ulCriticalNesting ] "i" ( &ulCriticalNesting ),                                                    \
            [ pxCurrentTCB ] "i" ( &pxCurrentTCB ),                                                               \
            [ LINE ] "i" ( __LINE__ )                                                                             \
            );                                                                                                    \
    }

/*
 * portRESTORE_CONTEXT_OS_INT() for Tick exception.
 */
    #define portRESTORE_CONTEXT_OS_INT()                                                                          \
    {                                                                                                             \
        extern volatile uint32_t ulCriticalNesting;                                                               \
        extern volatile void * volatile pxCurrentTCB;                                                             \
                                                                                                                  \
        /* Check if INT0 or higher were being handled (case where the OS tick interrupted another */              \
        /* interrupt handler (which was of a higher priority level but decided to lower its priority */           \
        /* level and allow other lower interrupt level to occur). */                                              \
        /* In this case we don't want to do a task switch because we don't know what the stack */                 \
        /* currently looks like (we don't know what the interrupted interrupt handler was doing). */              \
        /* Saving SP in pxCurrentTCB and then later restoring it (thinking restoring the task) */                 \
        /* will just be restoring the interrupt handler, no way!!! */                                             \
        __asm__ __volatile__ (                                                                                    \
            "ld.w    r0, sp[9*4]\n\t"   /* Read SR in stack */                                                    \
            "bfextu  r0, r0, 22, 3\n\t" /* Extract the mode bits to R0. */                                        \
            "cp.w    r0, 1\n\t"         /* Compare the mode bits with supervisor mode(b'001) */                   \
            "brhi    LABEL_INT_SKIP_RESTORE_CONTEXT_%[LINE]"                                                      \
            :                                                                                                     \
            :[ LINE ] "i" ( __LINE__ )                                                                            \
            );                                                                                                    \
                                                                                                                  \
        /* Else */                                                                                                \
        /* because it is here safe, always call vTaskSwitchContext() since an OS tick occurred. */                \
        /* A critical section has to be used here because vTaskSwitchContext handles FreeRTOS linked lists. */    \
        portENTER_CRITICAL();                                                                                     \
        vTaskSwitchContext();                                                                                     \
        portEXIT_CRITICAL();                                                                                      \
                                                                                                                  \
        /* Restore all registers */                                                                               \
                                                                                                                  \
        __asm__ __volatile__ (                                                                                    \
            /* Set SP to point to new stack */                                                                    \
            "mov     r8, LO(%[pxCurrentTCB])                                                                \n\t" \
            "orh     r8, HI(%[pxCurrentTCB])                                                                \n\t" \
            "ld.w    r0, r8[0]                                                                              \n\t" \
            "ld.w    sp, r0[0]                                                                              \n"   \
                                                                                                                  \
            "LABEL_INT_SKIP_RESTORE_CONTEXT_%[LINE]:                                                        \n\t" \
                                                                                                                  \
            /* Restore ulCriticalNesting variable */                                                              \
            "ld.w    r0, sp++                                                                               \n\t" \
            "mov     r8, LO(%[ulCriticalNesting])                                                           \n\t" \
            "orh     r8, HI(%[ulCriticalNesting])                                                           \n\t" \
            "st.w    r8[0], r0                                                                              \n\t" \
                                                                                                                  \
            /* Restore R0..R7 */                                                                                  \
            "ldm     sp++, r0-r7                                                                            \n\t" \
                                                                                                                  \
            /* Now, the stack should be R8..R12, LR, PC and SR */                                                 \
            "rete"                                                                                                \
            :                                                                                                     \
            :[ ulCriticalNesting ] "i" ( &ulCriticalNesting ),                                                    \
            [ pxCurrentTCB ] "i" ( &pxCurrentTCB ),                                                               \
            [ LINE ] "i" ( __LINE__ )                                                                             \
            );                                                                                                    \
    }

#endif /* if configUSE_PREEMPTION == 0 */


/*
 * portSAVE_CONTEXT_SCALL() for SupervisorCALL exception.
 *
 * NOTE: taskYIELD()(== SCALL) MUST NOT be called in a mode > supervisor mode.
 *
 */
#define portSAVE_CONTEXT_SCALL()                                                                                        \
    {                                                                                                                   \
        extern volatile uint32_t ulCriticalNesting;                                                                     \
        extern volatile void * volatile pxCurrentTCB;                                                                   \
                                                                                                                        \
        /* Warning: the stack layout after SCALL doesn't match the one after an interrupt. */                           \
        /* If SR[M2:M0] == 001 */                                                                                       \
        /*    PC and SR are on the stack.  */                                                                           \
        /* Else (other modes) */                                                                                        \
        /*    Nothing on the stack. */                                                                                  \
                                                                                                                        \
        /* WARNING NOTE: the else case cannot happen as it is strictly forbidden to call */                             \
        /* vTaskDelay() and vTaskDelayUntil() OS functions (that result in a taskYield()) */                            \
        /* in an interrupt|exception handler. */                                                                        \
                                                                                                                        \
        __asm__ __volatile__ (                                                                                          \
            /* in order to save R0-R7 */                                                                                \
            "sub     sp, 6*4                                                                        \n\t"               \
            /* Save R0..R7 */                                                                                           \
            "stm     --sp, r0-r7                                                                    \n\t"               \
                                                                                                                        \
            /* in order to save R8-R12 and LR */                                                                        \
            /* do not use SP if interrupts occurs, SP must be left at bottom of stack */                                \
            "sub     r7, sp,-16*4                                                                   \n\t"               \
            /* Copy PC and SR in other places in the stack. */                                                          \
            "ld.w    r0, r7[-2*4]                                                                   \n\t" /* Read SR */ \
            "st.w    r7[-8*4], r0                                                                   \n\t" /* Copy SR */ \
            "ld.w    r0, r7[-1*4]                                                                   \n\t" /* Read PC */ \
            "st.w    r7[-7*4], r0                                                                   \n\t" /* Copy PC */ \
                                                                                                                        \
            /* Save R8..R12 and LR on the stack. */                                                                     \
            "stm     --r7, r8-r12, lr                                                               \n\t"               \
                                                                                                                        \
            /* Arriving here we have the following stack organizations: */                                              \
            /* R8..R12, LR, PC, SR, R0..R7. */                                                                          \
                                                                                                                        \
            /* Now we can finalize the save. */                                                                         \
                                                                                                                        \
            /* Save ulCriticalNesting variable  - R0 is overwritten */                                                  \
            "mov     r8, LO(%[ulCriticalNesting])                                                   \n\t"               \
            "orh     r8, HI(%[ulCriticalNesting])                                                   \n\t"               \
            "ld.w    r0, r8[0]                                                                      \n\t"               \
            "st.w    --sp, r0"                                                                                          \
            :                                                                                                           \
            :[ ulCriticalNesting ] "i" ( &ulCriticalNesting )                                                           \
            );                                                                                                          \
                                                                                                                        \
        /* Disable the its which may cause a context switch (i.e. cause a change of */                                  \
        /* pxCurrentTCB). */                                                                                            \
        /* Basically, all accesses to the pxCurrentTCB structure should be put in a */                                  \
        /* critical section because it is a global structure. */                                                        \
        portENTER_CRITICAL();                                                                                           \
                                                                                                                        \
        /* Store SP in the first member of the structure pointed to by pxCurrentTCB */                                  \
        __asm__ __volatile__ (                                                                                          \
            "mov     r8, LO(%[pxCurrentTCB])                                                        \n\t"               \
            "orh     r8, HI(%[pxCurrentTCB])                                                        \n\t"               \
            "ld.w    r0, r8[0]                                                                      \n\t"               \
            "st.w    r0[0], sp"                                                                                         \
            :                                                                                                           \
            :[ pxCurrentTCB ] "i" ( &pxCurrentTCB )                                                                     \
            );                                                                                                          \
    }

/*
 * portRESTORE_CONTEXT() for SupervisorCALL exception.
 */
#define portRESTORE_CONTEXT_SCALL()                                                                                     \
    {                                                                                                                   \
        extern volatile uint32_t ulCriticalNesting;                                                                     \
        extern volatile void * volatile pxCurrentTCB;                                                                   \
                                                                                                                        \
        /* Restore all registers */                                                                                     \
                                                                                                                        \
        /* Set SP to point to new stack */                                                                              \
        __asm__ __volatile__ (                                                                                          \
            "mov     r8, LO(%[pxCurrentTCB])                                                        \n\t"               \
            "orh     r8, HI(%[pxCurrentTCB])                                                        \n\t"               \
            "ld.w    r0, r8[0]                                                                      \n\t"               \
            "ld.w    sp, r0[0]"                                                                                         \
            :                                                                                                           \
            :[ pxCurrentTCB ] "i" ( &pxCurrentTCB )                                                                     \
            );                                                                                                          \
                                                                                                                        \
        /* Leave pxCurrentTCB variable access critical section */                                                       \
        portEXIT_CRITICAL();                                                                                            \
                                                                                                                        \
        __asm__ __volatile__ (                                                                                          \
            /* Restore ulCriticalNesting variable */                                                                    \
            "ld.w    r0, sp++                                                                       \n\t"               \
            "mov     r8, LO(%[ulCriticalNesting])                                                   \n\t"               \
            "orh     r8, HI(%[ulCriticalNesting])                                                   \n\t"               \
            "st.w    r8[0], r0                                                                      \n\t"               \
                                                                                                                        \
            /* skip PC and SR */                                                                                        \
            /* do not use SP if interrupts occurs, SP must be left at bottom of stack */                                \
            "sub     r7, sp, -10*4                                                                  \n\t"               \
            /* Restore r8-r12 and LR */                                                                                 \
            "ldm     r7++, r8-r12, lr                                                               \n\t"               \
                                                                                                                        \
            /* RETS will take care of the extra PC and SR restore. */                                                   \
            /* So, we have to prepare the stack for this. */                                                            \
            "ld.w    r0, r7[-8*4]                                                                   \n\t" /* Read SR */ \
            "st.w    r7[-2*4], r0                                                                   \n\t" /* Copy SR */ \
            "ld.w    r0, r7[-7*4]                                                                   \n\t" /* Read PC */ \
            "st.w    r7[-1*4], r0                                                                   \n\t" /* Copy PC */ \
                                                                                                                        \
            /* Restore R0..R7 */                                                                                        \
            "ldm     sp++, r0-r7                                                                    \n\t"               \
                                                                                                                        \
            "sub     sp, -6*4                                                                       \n\t"               \
                                                                                                                        \
            "rets"                                                                                                      \
            :                                                                                                           \
            :[ ulCriticalNesting ] "i" ( &ulCriticalNesting )                                                           \
            );                                                                                                          \
    }


/*
 * The ISR used depends on whether the cooperative or
 * the preemptive scheduler is being used.
 */
#if configUSE_PREEMPTION == 0

/*
 * ISR entry and exit macros.  These are only required if a task switch
 * is required from the ISR.
 */
    #define portENTER_SWITCHING_ISR()                                                     \
    {                                                                                     \
        /* Save R0..R7 */                                                                 \
        __asm__ __volatile__ ( "stm     --sp, r0-r7" );                                   \
                                                                                          \
        /* With the cooperative scheduler, as there is no context switch by interrupt, */ \
        /* there is also no context save. */                                              \
    }

/*
 * Input parameter: in R12, boolean. Perform a vTaskSwitchContext() if 1
 */
    #define portEXIT_SWITCHING_ISR()                                                                      \
    {                                                                                                     \
        __asm__ __volatile__ (                                                                            \
            /* Restore R0..R7 */                                                                          \
            "ldm     sp++, r0-r7                                                                    \n\t" \
                                                                                                          \
            /* With the cooperative scheduler, as there is no context switch by interrupt, */             \
            /* there is also no context restore. */                                                       \
            "rete"                                                                                        \
            );                                                                                            \
    }

#else /* if configUSE_PREEMPTION == 0 */

/*
 * ISR entry and exit macros.  These are only required if a task switch
 * is required from the ISR.
 */
    #define portENTER_SWITCHING_ISR()                                                                                                                             \
    {                                                                                                                                                             \
        extern volatile uint32_t ulCriticalNesting;                                                                                                               \
        extern volatile void * volatile pxCurrentTCB;                                                                                                             \
                                                                                                                                                                  \
        /* When we come here */                                                                                                                                   \
        /* Registers R8..R12, LR, PC and SR had already been pushed to system stack */                                                                            \
                                                                                                                                                                  \
        __asm__ __volatile__ (                                                                                                                                    \
            /* Save R0..R7 */                                                                                                                                     \
            "stm     --sp, r0-r7                                                                    \n\t"                                                         \
                                                                                                                                                                  \
            /* Save ulCriticalNesting variable  - R0 is overwritten */                                                                                            \
            "mov     r8, LO(%[ulCriticalNesting])                                                   \n\t"                                                         \
            "orh     r8, HI(%[ulCriticalNesting])                                                   \n\t"                                                         \
            "ld.w    r0, r8[0]                                                                      \n\t"                                                         \
            "st.w    --sp, r0                                                                       \n\t"                                                         \
                                                                                                                                                                  \
            /* Check if INT0 or higher were being handled (case where the OS tick interrupted another */                                                          \
            /* interrupt handler (which was of a higher priority level but decided to lower its priority */                                                       \
            /* level and allow other lower interrupt level to occur). */                                                                                          \
            /* In this case we don't want to do a task switch because we don't know what the stack */                                                             \
            /* currently looks like (we don't know what the interrupted interrupt handler was doing). */                                                          \
            /* Saving SP in pxCurrentTCB and then later restoring it (thinking restoring the task) */                                                             \
            /* will just be restoring the interrupt handler, no way!!! */                                                                                         \
            /* So, since we won't do a vTaskSwitchContext(), it's of no use to save SP. */                                                                        \
            "ld.w    r0, sp[9*4]                                                                    \n\t" /* Read SR in stack */                                  \
            "bfextu  r0, r0, 22, 3                                                                  \n\t" /* Extract the mode bits to R0. */                      \
            "cp.w    r0, 1                                                                          \n\t" /* Compare the mode bits with supervisor mode(b'001) */ \
            "brhi    LABEL_ISR_SKIP_SAVE_CONTEXT_%[LINE]                                            \n\t"                                                         \
                                                                                                                                                                  \
            /* Store SP in the first member of the structure pointed to by pxCurrentTCB */                                                                        \
            "mov     r8, LO(%[pxCurrentTCB])                                                        \n\t"                                                         \
            "orh     r8, HI(%[pxCurrentTCB])                                                        \n\t"                                                         \
            "ld.w    r0, r8[0]                                                                      \n\t"                                                         \
            "st.w    r0[0], sp                                                                      \n"                                                           \
                                                                                                                                                                  \
            "LABEL_ISR_SKIP_SAVE_CONTEXT_%[LINE]:"                                                                                                                \
            :                                                                                                                                                     \
            :[ ulCriticalNesting ] "i" ( &ulCriticalNesting ),                                                                                                    \
            [ pxCurrentTCB ] "i" ( &pxCurrentTCB ),                                                                                                               \
            [ LINE ] "i" ( __LINE__ )                                                                                                                             \
            );                                                                                                                                                    \
    }

/*
 * Input parameter: in R12, boolean. Perform a vTaskSwitchContext() if 1
 */
    #define portEXIT_SWITCHING_ISR()                                                                                                                              \
    {                                                                                                                                                             \
        extern volatile uint32_t ulCriticalNesting;                                                                                                               \
        extern volatile void * volatile pxCurrentTCB;                                                                                                             \
                                                                                                                                                                  \
        __asm__ __volatile__ (                                                                                                                                    \
            /* Check if INT0 or higher were being handled (case where the OS tick interrupted another */                                                          \
            /* interrupt handler (which was of a higher priority level but decided to lower its priority */                                                       \
            /* level and allow other lower interrupt level to occur). */                                                                                          \
            /* In this case it's of no use to switch context and restore a new SP because we purposely */                                                         \
            /* did not previously save SP in its TCB. */                                                                                                          \
            "ld.w    r0, sp[9*4]                                                                    \n\t" /* Read SR in stack */                                  \
            "bfextu  r0, r0, 22, 3                                                                  \n\t" /* Extract the mode bits to R0. */                      \
            "cp.w    r0, 1                                                                          \n\t" /* Compare the mode bits with supervisor mode(b'001) */ \
            "brhi    LABEL_ISR_SKIP_RESTORE_CONTEXT_%[LINE]                                         \n\t"                                                         \
                                                                                                                                                                  \
            /* If a switch is required then we just need to call */                                                                                               \
            /* vTaskSwitchContext() as the context has already been */                                                                                            \
            /* saved. */                                                                                                                                          \
            "cp.w    r12, 1                                                                         \n\t" /* Check if Switch context is required. */              \
            "brne    LABEL_ISR_RESTORE_CONTEXT_%[LINE]"                                                                                                           \
            :                                                                                                                                                     \
            :[ LINE ] "i" ( __LINE__ )                                                                                                                            \
            );                                                                                                                                                    \
                                                                                                                                                                  \
        /* A critical section has to be used here because vTaskSwitchContext handles FreeRTOS linked lists. */                                                    \
        portENTER_CRITICAL();                                                                                                                                     \
        vTaskSwitchContext();                                                                                                                                     \
        portEXIT_CRITICAL();                                                                                                                                      \
                                                                                                                                                                  \
        __asm__ __volatile__ (                                                                                                                                    \
            "LABEL_ISR_RESTORE_CONTEXT_%[LINE]:                                                     \n\t"                                                         \
            /* Restore the context of which ever task is now the highest */                                                                                       \
            /* priority that is ready to run. */                                                                                                                  \
                                                                                                                                                                  \
            /* Restore all registers */                                                                                                                           \
                                                                                                                                                                  \
            /* Set SP to point to new stack */                                                                                                                    \
            "mov     r8, LO(%[pxCurrentTCB])                                                        \n\t"                                                         \
            "orh     r8, HI(%[pxCurrentTCB])                                                        \n\t"                                                         \
            "ld.w    r0, r8[0]                                                                      \n\t"                                                         \
            "ld.w    sp, r0[0]                                                                      \n"                                                           \
                                                                                                                                                                  \
            "LABEL_ISR_SKIP_RESTORE_CONTEXT_%[LINE]:                                                \n\t"                                                         \
                                                                                                                                                                  \
            /* Restore ulCriticalNesting variable */                                                                                                              \
            "ld.w    r0, sp++                                                                       \n\t"                                                         \
            "mov     r8, LO(%[ulCriticalNesting])                                                   \n\t"                                                         \
            "orh     r8, HI(%[ulCriticalNesting])                                                   \n\t"                                                         \
            "st.w    r8[0], r0                                                                      \n\t"                                                         \
                                                                                                                                                                  \
            /* Restore R0..R7 */                                                                                                                                  \
            "ldm     sp++, r0-r7                                                                    \n\t"                                                         \
                                                                                                                                                                  \
            /* Now, the stack should be R8..R12, LR, PC and SR  */                                                                                                \
            "rete"                                                                                                                                                \
            :                                                                                                                                                     \
            :[ ulCriticalNesting ] "i" ( &ulCriticalNesting ),                                                                                                    \
            [ pxCurrentTCB ] "i" ( &pxCurrentTCB ),                                                                                                               \
            [ LINE ] "i" ( __LINE__ )                                                                                                                             \
            );                                                                                                                                                    \
    }

#endif /* if configUSE_PREEMPTION == 0 */


#define portYIELD()                                           { __asm__ __volatile__ ( "scall" ); }

/* Task function macros as described on the FreeRTOS.org WEB site. */
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters )    void vFunction( void * pvParameters )
#define portTASK_FUNCTION( vFunction, pvParameters )          void vFunction( void * pvParameters )

/* *INDENT-OFF* */
#ifdef __cplusplus
    }
#endif
/* *INDENT-ON* */

#endif /* PORTMACRO_H */
