From 7dc6827386df3f19ee2f170cbdc4363ad56821f3 Mon Sep 17 00:00:00 2001 From: Alexandru Niculae - M17336 Date: Wed, 29 Jul 2020 17:35:32 +0300 Subject: [PATCH] Updated indentation in portable/GCC/{AVR_AVRDx, AVR_Mega0}/* files. --- portable/GCC/AVR_AVRDx/port.c | 322 +++++++++++++------------- portable/GCC/AVR_AVRDx/porthardware.h | 173 ++++++-------- portable/GCC/AVR_AVRDx/portmacro.h | 11 +- portable/GCC/AVR_Mega0/port.c | 308 ++++++++++++------------ portable/GCC/AVR_Mega0/porthardware.h | 129 +++++------ portable/GCC/AVR_Mega0/portmacro.h | 13 +- 6 files changed, 450 insertions(+), 506 deletions(-) diff --git a/portable/GCC/AVR_AVRDx/port.c b/portable/GCC/AVR_AVRDx/port.c index 8fca32953..9d5cb9683 100644 --- a/portable/GCC/AVR_AVRDx/port.c +++ b/portable/GCC/AVR_AVRDx/port.c @@ -38,7 +38,7 @@ *----------------------------------------------------------*/ /* Start tasks with interrupts enables. */ -#define portFLAGS_INT_ENABLED ((StackType_t) 0x80) +#define portFLAGS_INT_ENABLED ((StackType_t) 0x80) /*-----------------------------------------------------------*/ @@ -63,103 +63,102 @@ extern volatile RTOS_TCB_t *volatile pxCurrentTCB; * * The interrupts will have been disabled during the call to portSAVE_CONTEXT() * so we need not worry about reading/writing to the stack pointer. - */ -#define portSAVE_CONTEXT() \ - asm volatile("push r0 \n\t" \ - "in r0, __SREG__ \n\t" \ - "cli \n\t" \ - "push r0 \n\t" \ - "in r0, __RAMPZ__ \n\t" \ - "push r0 \n\t" \ - "push r1 \n\t" \ - "clr r1 \n\t" \ - "push r2 \n\t" \ - "push r3 \n\t" \ - "push r4 \n\t" \ - "push r5 \n\t" \ - "push r6 \n\t" \ - "push r7 \n\t" \ - "push r8 \n\t" \ - "push r9 \n\t" \ - "push r10 \n\t" \ - "push r11 \n\t" \ - "push r12 \n\t" \ - "push r13 \n\t" \ - "push r14 \n\t" \ - "push r15 \n\t" \ - "push r16 \n\t" \ - "push r17 \n\t" \ - "push r18 \n\t" \ - "push r19 \n\t" \ - "push r20 \n\t" \ - "push r21 \n\t" \ - "push r22 \n\t" \ - "push r23 \n\t" \ - "push r24 \n\t" \ - "push r25 \n\t" \ - "push r26 \n\t" \ - "push r27 \n\t" \ - "push r28 \n\t" \ - "push r29 \n\t" \ - "push r30 \n\t" \ - "push r31 \n\t" \ - "lds r26, pxCurrentTCB \n\t" \ - "lds r27, pxCurrentTCB + 1 \n\t" \ - "in r0, __SP_L__ \n\t" \ - "st x+, r0 \n\t" \ - "in r0, __SP_H__ \n\t" \ - "st x+, r0 \n\t"); +#define portSAVE_CONTEXT() \ + asm volatile("push r0 \n\t" \ + "in r0, __SREG__ \n\t" \ + "cli \n\t" \ + "push r0 \n\t" \ + "in r0, __RAMPZ__ \n\t" \ + "push r0 \n\t" \ + "push r1 \n\t" \ + "clr r1 \n\t" \ + "push r2 \n\t" \ + "push r3 \n\t" \ + "push r4 \n\t" \ + "push r5 \n\t" \ + "push r6 \n\t" \ + "push r7 \n\t" \ + "push r8 \n\t" \ + "push r9 \n\t" \ + "push r10 \n\t" \ + "push r11 \n\t" \ + "push r12 \n\t" \ + "push r13 \n\t" \ + "push r14 \n\t" \ + "push r15 \n\t" \ + "push r16 \n\t" \ + "push r17 \n\t" \ + "push r18 \n\t" \ + "push r19 \n\t" \ + "push r20 \n\t" \ + "push r21 \n\t" \ + "push r22 \n\t" \ + "push r23 \n\t" \ + "push r24 \n\t" \ + "push r25 \n\t" \ + "push r26 \n\t" \ + "push r27 \n\t" \ + "push r28 \n\t" \ + "push r29 \n\t" \ + "push r30 \n\t" \ + "push r31 \n\t" \ + "lds r26, pxCurrentTCB \n\t" \ + "lds r27, pxCurrentTCB + 1 \n\t" \ + "in r0, __SP_L__ \n\t" \ + "st x+, r0 \n\t" \ + "in r0, __SP_H__ \n\t" \ + "st x+, r0 \n\t"); /* * Opposite to portSAVE_CONTEXT(). Interrupts will have been disabled during * the context save so we can write to the stack pointer. */ -#define portRESTORE_CONTEXT() \ - asm volatile("lds r26, pxCurrentTCB \n\t" \ - "lds r27, pxCurrentTCB + 1 \n\t" \ - "ld r28, x+ \n\t" \ - "out __SP_L__, r28 \n\t" \ - "ld r29, x+ \n\t" \ - "out __SP_H__, r29 \n\t" \ - "pop r31 \n\t" \ - "pop r30 \n\t" \ - "pop r29 \n\t" \ - "pop r28 \n\t" \ - "pop r27 \n\t" \ - "pop r26 \n\t" \ - "pop r25 \n\t" \ - "pop r24 \n\t" \ - "pop r23 \n\t" \ - "pop r22 \n\t" \ - "pop r21 \n\t" \ - "pop r20 \n\t" \ - "pop r19 \n\t" \ - "pop r18 \n\t" \ - "pop r17 \n\t" \ - "pop r16 \n\t" \ - "pop r15 \n\t" \ - "pop r14 \n\t" \ - "pop r13 \n\t" \ - "pop r12 \n\t" \ - "pop r11 \n\t" \ - "pop r10 \n\t" \ - "pop r9 \n\t" \ - "pop r8 \n\t" \ - "pop r7 \n\t" \ - "pop r6 \n\t" \ - "pop r5 \n\t" \ - "pop r4 \n\t" \ - "pop r3 \n\t" \ - "pop r2 \n\t" \ - "pop r1 \n\t" \ - "pop r0 \n\t" \ - "out __RAMPZ__, r0 \n\t" \ - "pop r0 \n\t" \ - "out __SREG__, r0 \n\t" \ - "pop r0 \n\t"); +#define portRESTORE_CONTEXT() \ + asm volatile("lds r26, pxCurrentTCB \n\t" \ + "lds r27, pxCurrentTCB + 1 \n\t" \ + "ld r28, x+ \n\t" \ + "out __SP_L__, r28 \n\t" \ + "ld r29, x+ \n\t" \ + "out __SP_H__, r29 \n\t" \ + "pop r31 \n\t" \ + "pop r30 \n\t" \ + "pop r29 \n\t" \ + "pop r28 \n\t" \ + "pop r27 \n\t" \ + "pop r26 \n\t" \ + "pop r25 \n\t" \ + "pop r24 \n\t" \ + "pop r23 \n\t" \ + "pop r22 \n\t" \ + "pop r21 \n\t" \ + "pop r20 \n\t" \ + "pop r19 \n\t" \ + "pop r18 \n\t" \ + "pop r17 \n\t" \ + "pop r16 \n\t" \ + "pop r15 \n\t" \ + "pop r14 \n\t" \ + "pop r13 \n\t" \ + "pop r12 \n\t" \ + "pop r11 \n\t" \ + "pop r10 \n\t" \ + "pop r9 \n\t" \ + "pop r8 \n\t" \ + "pop r7 \n\t" \ + "pop r6 \n\t" \ + "pop r5 \n\t" \ + "pop r4 \n\t" \ + "pop r3 \n\t" \ + "pop r2 \n\t" \ + "pop r1 \n\t" \ + "pop r0 \n\t" \ + "out __RAMPZ__, r0 \n\t" \ + "pop r0 \n\t" \ + "out __SREG__, r0 \n\t" \ + "pop r0 \n\t"); /*-----------------------------------------------------------*/ @@ -174,11 +173,11 @@ static void prvSetupTimerInterrupt(void); */ StackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters) { - uint16_t usAddress; + uint16_t usAddress; - /*lint -e950 -e611 -e923 Lint doesn't like this much - but nothing I can do about it. */ + /*lint -e950 -e611 -e923 Lint doesn't like this much - but nothing I can do about it. */ - /* Place a few bytes of known values on the bottom of the stack. + /* Place a few bytes of known values on the bottom of the stack. This is just useful for debugging. Uncomment if needed. */ // *pxTopOfStack = 0x11; // pxTopOfStack--; @@ -187,70 +186,70 @@ StackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxC // *pxTopOfStack = 0x33; // pxTopOfStack--; - /* The start of the task code will be popped off the stack last, so place - it on first. */ - usAddress = (uint16_t)pxCode; - *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); - pxTopOfStack--; + /* The start of the task code will be popped off the stack last, so place + it on first. */ + usAddress = (uint16_t)pxCode; + *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); + pxTopOfStack--; - usAddress >>= 8; - *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); - pxTopOfStack--; + usAddress >>= 8; + *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); + pxTopOfStack--; - /* Next simulate the stack as if after a call to portSAVE_CONTEXT(). - portSAVE_CONTEXT places the flags on the stack immediately after r0 - to ensure the interrupts get disabled as soon as possible, and so ensuring - the stack use is minimal should a context switch interrupt occur. */ - *pxTopOfStack = (StackType_t)0x00; /* R0 */ - pxTopOfStack--; - *pxTopOfStack = portFLAGS_INT_ENABLED; - pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x00; /* RAMPZ */ - pxTopOfStack--; - - /* Now the remaining registers. The compiler expects R1 to be 0. */ - *pxTopOfStack = (StackType_t)0x00; /* R1 */ + /* Next simulate the stack as if after a call to portSAVE_CONTEXT(). + portSAVE_CONTEXT places the flags on the stack immediately after r0 + to ensure the interrupts get disabled as soon as possible, and so ensuring + the stack use is minimal should a context switch interrupt occur. */ + *pxTopOfStack = (StackType_t)0x00; /* R0 */ + pxTopOfStack--; + *pxTopOfStack = portFLAGS_INT_ENABLED; + pxTopOfStack--; + *pxTopOfStack = ( StackType_t ) 0x00; /* RAMPZ */ + pxTopOfStack--; + + /* Now the remaining registers. The compiler expects R1 to be 0. */ + *pxTopOfStack = (StackType_t)0x00; /* R1 */ - /* Leave R2 - R23 untouched */ - pxTopOfStack -= 23; + /* Leave R2 - R23 untouched */ + pxTopOfStack -= 23; - /* Place the parameter on the stack in the expected location. */ - usAddress = (uint16_t)pvParameters; - *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); - pxTopOfStack--; + /* Place the parameter on the stack in the expected location. */ + usAddress = (uint16_t)pvParameters; + *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); + pxTopOfStack--; - usAddress >>= 8; - *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); + usAddress >>= 8; + *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); - /* Leave register R26 - R31 untouched */ - pxTopOfStack -= 7; + /* Leave register R26 - R31 untouched */ + pxTopOfStack -= 7; - /*lint +e950 +e611 +e923 */ + /*lint +e950 +e611 +e923 */ - return pxTopOfStack; + return pxTopOfStack; } /*-----------------------------------------------------------*/ BaseType_t xPortStartScheduler(void) { - /* Setup the hardware to generate the tick. */ - prvSetupTimerInterrupt(); + /* Setup the hardware to generate the tick. */ + prvSetupTimerInterrupt(); - /* Restore the context of the first task that is going to run. */ - portRESTORE_CONTEXT(); + /* Restore the context of the first task that is going to run. */ + portRESTORE_CONTEXT(); - /* Simulate a function call end as generated by the compiler. We will now - jump to the start of the task the context of which we have just restored. */ - asm volatile("ret"); + /* Simulate a function call end as generated by the compiler. We will now + jump to the start of the task the context of which we have just restored. */ + asm volatile("ret"); - /* Should not get here. */ - return pdTRUE; + /* Should not get here. */ + return pdTRUE; } /*-----------------------------------------------------------*/ void vPortEndScheduler(void) { - /* vPortEndScheduler is not implemented in this port. */ + /* vPortEndScheduler is not implemented in this port. */ } /*-----------------------------------------------------------*/ @@ -261,10 +260,10 @@ void vPortEndScheduler(void) void vPortYield(void) __attribute__((naked)); void vPortYield(void) { - portSAVE_CONTEXT(); - vTaskSwitchContext(); - portRESTORE_CONTEXT(); - asm volatile("ret"); + portSAVE_CONTEXT(); + vTaskSwitchContext(); + portRESTORE_CONTEXT(); + asm volatile("ret"); } /*-----------------------------------------------------------*/ @@ -275,10 +274,10 @@ void vPortYield(void) void vPortYieldFromISR(void) __attribute__((naked)); void vPortYieldFromISR(void) { - portSAVE_CONTEXT(); - vTaskSwitchContext(); - portRESTORE_CONTEXT(); - asm volatile("reti"); + portSAVE_CONTEXT(); + vTaskSwitchContext(); + portRESTORE_CONTEXT(); + asm volatile("reti"); } /*-----------------------------------------------------------*/ @@ -291,15 +290,14 @@ void vPortYieldFromISR(void) void vPortYieldFromTick(void) __attribute__((naked)); void vPortYieldFromTick(void) { - portSAVE_CONTEXT(); - - if (xTaskIncrementTick() != pdFALSE) { - vTaskSwitchContext(); - } + portSAVE_CONTEXT(); + if (xTaskIncrementTick() != pdFALSE) { + vTaskSwitchContext(); + } - portRESTORE_CONTEXT(); + portRESTORE_CONTEXT(); - asm volatile("reti"); + asm volatile("reti"); } /*-----------------------------------------------------------*/ @@ -308,7 +306,7 @@ void vPortYieldFromTick(void) */ static void prvSetupTimerInterrupt(void) { - TICK_init(); + TICK_init(); } /*-----------------------------------------------------------*/ @@ -319,17 +317,15 @@ static void prvSetupTimerInterrupt(void) * the context is saved at the start of vPortYieldFromTick(). The tick * count is incremented after the context is saved. */ - ISR(TICK_INT_vect, ISR_NAKED) { - /* Clear tick interrupt flag. */ - CLR_INT(INT_FLAGS, INT_MASK); + /* Clear tick interrupt flag. */ + CLR_INT(INT_FLAGS, INT_MASK); - vPortYieldFromTick(); + vPortYieldFromTick(); - asm volatile("reti"); + asm volatile("reti"); } - #else /* @@ -337,14 +333,10 @@ ISR(TICK_INT_vect, ISR_NAKED) * tick count. We don't need to switch context, this can only be done by * manual calls to taskYIELD(); */ - ISR(TICK_INT_vect) { - /* Clear tick interrupt flag. */ - INT_FLAGS = INT_MASK; - - xTaskIncrementTick(); + /* Clear tick interrupt flag. */ + INT_FLAGS = INT_MASK; + xTaskIncrementTick(); } - - #endif diff --git a/portable/GCC/AVR_AVRDx/porthardware.h b/portable/GCC/AVR_AVRDx/porthardware.h index 34792b966..cf2377844 100644 --- a/portable/GCC/AVR_AVRDx/porthardware.h +++ b/portable/GCC/AVR_AVRDx/porthardware.h @@ -6,121 +6,96 @@ /*-----------------------------------------------------------*/ #define CLR_INT(FLAG_REG, FLAG_MASK) \ - asm volatile( "push r16\n\t" \ - "ldi r16, %1\n\t" \ - "sts %0, r16\n\t" \ - "pop r16\n\t" \ - : \ - : "i"(_SFR_MEM_ADDR(FLAG_REG)),"i"((uint8_t)(FLAG_MASK)) \ - ); + asm volatile( \ + "push r16\n\t" \ + "ldi r16, %1\n\t" \ + "sts %0, r16\n\t" \ + "pop r16\n\t" \ + : \ + : "i"(_SFR_MEM_ADDR(FLAG_REG)),"i"((uint8_t)(FLAG_MASK)) \ + ); #if ( configUSE_TIMER_INSTANCE == 0 ) - #define TICK_INT_vect TCB0_INT_vect - #define INT_FLAGS TCB0_INTFLAGS - #define INT_MASK TCB_CAPT_bm - - #define TICK_init() { \ - TCB0.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ - TCB0.INTCTRL = TCB_CAPT_bm; \ - TCB0.CTRLA = TCB_ENABLE_bm; \ - } - - #define TICK_stop() { \ - TCB0.INTCTRL &= ~TCB_CAPT_bm;\ - TCB0.CTRLA &= ~TCB_ENABLE_bm; \ - } + #define TICK_INT_vect TCB0_INT_vect + #define INT_FLAGS TCB0_INTFLAGS + #define INT_MASK TCB_CAPT_bm + + #define TICK_init() { \ + TCB0.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ + TCB0.INTCTRL = TCB_CAPT_bm; \ + TCB0.CTRLA = TCB_ENABLE_bm; \ + } #elif ( configUSE_TIMER_INSTANCE == 1 ) - #define TICK_INT_vect TCB1_INT_vect - #define INT_FLAGS TCB1_INTFLAGS - #define INT_MASK TCB_CAPT_bm - - #define TICK_init() { \ - TCB1.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ - TCB1.INTCTRL = TCB_CAPT_bm; \ - TCB1.CTRLA = TCB_ENABLE_bm; \ - } - + #define TICK_INT_vect TCB1_INT_vect + #define INT_FLAGS TCB1_INTFLAGS + #define INT_MASK TCB_CAPT_bm + + #define TICK_init() { \ + TCB1.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ + TCB1.INTCTRL = TCB_CAPT_bm; \ + TCB1.CTRLA = TCB_ENABLE_bm; \ + } + #elif ( configUSE_TIMER_INSTANCE == 2 ) - #define TICK_INT_vect TCB2_INT_vect - #define INT_FLAGS TCB2_INTFLAGS - #define INT_MASK TCB_CAPT_bm + #define TICK_INT_vect TCB2_INT_vect + #define INT_FLAGS TCB2_INTFLAGS + #define INT_MASK TCB_CAPT_bm - #define TICK_init() { \ - TCB2.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ - TCB2.INTCTRL = TCB_CAPT_bm; \ - TCB2.CTRLA = TCB_ENABLE_bm; \ - } - - #define TICK_stop() { \ - TCB2.INTCTRL &= ~TCB_CAPT_bm; \ - TCB2.CTRLA &= ~TCB_ENABLE_bm; \ - } - + #define TICK_init() { \ + TCB2.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ + TCB2.INTCTRL = TCB_CAPT_bm; \ + TCB2.CTRLA = TCB_ENABLE_bm; \ + } + #elif ( configUSE_TIMER_INSTANCE == 3 ) - #define TICK_INT_vect TCB3_INT_vect - #define INT_FLAGS TCB3_INTFLAGS - #define INT_MASK TCB_CAPT_bm - - #define TICK_init() { \ - TCB3.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ - TCB3.INTCTRL = TCB_CAPT_bm; \ - TCB3.CTRLA = TCB_ENABLE_bm; \ - } - - #define TICK_stop() { \ - TCB3.INTCTRL &= ~TCB_CAPT_bm; \ - TCB3.CTRLA &= ~TCB_ENABLE_bm; \ - } - + #define TICK_INT_vect TCB3_INT_vect + #define INT_FLAGS TCB3_INTFLAGS + #define INT_MASK TCB_CAPT_bm + + #define TICK_init() { \ + TCB3.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ + TCB3.INTCTRL = TCB_CAPT_bm; \ + TCB3.CTRLA = TCB_ENABLE_bm; \ + } + #elif ( configUSE_TIMER_INSTANCE == 4 ) - #define TICK_INT_vect TCB4_INT_vect - #define INT_FLAGS TCB4_INTFLAGS - #define INT_MASK TCB_CAPT_bm - - #define TICK_init() { \ - TCB4.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ - TCB4.INTCTRL = TCB_CAPT_bm; \ - TCB4.CTRLA = TCB_ENABLE_bm; \ - } - - #define TICK_stop() { \ - TCB4.INTCTRL &= ~TCB_CAPT_bm; \ - TCB4.CTRLA &= ~TCB_ENABLE_bm; \ - } - + #define TICK_INT_vect TCB4_INT_vect + #define INT_FLAGS TCB4_INTFLAGS + #define INT_MASK TCB_CAPT_bm + + #define TICK_init() { \ + TCB4.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ + TCB4.INTCTRL = TCB_CAPT_bm; \ + TCB4.CTRLA = TCB_ENABLE_bm; \ + } + #elif ( configUSE_TIMER_INSTANCE == 5 ) - - /* Hertz to period for RTC setup */ - #define RTC_PERIOD_HZ(x) (32768 * ((1.0 / x))) - - #define TICK_INT_vect RTC_CNT_vect - #define INT_FLAGS RTC_INTFLAGS - #define INT_MASK RTC_OVF_bm - - #define TICK_init() { \ - while (RTC.STATUS > 0); \ - RTC.CTRLA = RTC_PRESCALER_DIV1_gc | 1 << RTC_RTCEN_bp; \ - RTC.PER = RTC_PERIOD_HZ(configTICK_RATE_HZ); \ - RTC.INTCTRL |= 1 << RTC_OVF_bp; \ - } - - #define TICK_stop() { \ - RTC.CTRLA &= ~(1 << RTC_RTCEN_bp); \ - RTC.INTCTRL &= ~(1 << RTC_OVF_bp); \ - } + + #define TICK_INT_vect RTC_CNT_vect + #define INT_FLAGS RTC_INTFLAGS + #define INT_MASK RTC_OVF_bm + + /* Hertz to period for RTC setup */ + #define RTC_PERIOD_HZ(x) ( 32768 * ( ( 1.0 / x ) ) ) + #define TICK_init() { \ + while (RTC.STATUS > 0); \ + RTC.CTRLA = RTC_PRESCALER_DIV1_gc | 1 << RTC_RTCEN_bp; \ + RTC.PER = RTC_PERIOD_HZ(configTICK_RATE_HZ); \ + RTC.INTCTRL |= 1 << RTC_OVF_bp; \ + } #else - #undef TICK_INT_vect - #undef INT_FLAGS - #undef INT_MASK - #undef TICK_init() - #error Invalid timer setting. + #undef TICK_INT_vect + #undef INT_FLAGS + #undef INT_MASK + #undef TICK_init() + #error Invalid timer setting. #endif /*-----------------------------------------------------------*/ diff --git a/portable/GCC/AVR_AVRDx/portmacro.h b/portable/GCC/AVR_AVRDx/portmacro.h index 83d41d31e..085a27fc1 100644 --- a/portable/GCC/AVR_AVRDx/portmacro.h +++ b/portable/GCC/AVR_AVRDx/portmacro.h @@ -64,18 +64,17 @@ typedef uint16_t TickType_t; typedef uint32_t TickType_t; #define portMAX_DELAY (TickType_t)0xffffffffUL #endif - /*-----------------------------------------------------------*/ /* Critical section management. */ #define portENTER_CRITICAL() \ - asm volatile("in __tmp_reg__, __SREG__"); \ - asm volatile("cli"); \ - asm volatile("push __tmp_reg__") + asm volatile("in __tmp_reg__, __SREG__"); \ + asm volatile("cli"); \ + asm volatile("push __tmp_reg__") #define portEXIT_CRITICAL() \ - asm volatile("pop __tmp_reg__"); \ - asm volatile("out __SREG__, __tmp_reg__") + asm volatile("pop __tmp_reg__"); \ + asm volatile("out __SREG__, __tmp_reg__") #define portDISABLE_INTERRUPTS() asm volatile("cli" ::); #define portENABLE_INTERRUPTS() asm volatile("sei" ::); diff --git a/portable/GCC/AVR_Mega0/port.c b/portable/GCC/AVR_Mega0/port.c index 39cdd843a..8c4684294 100644 --- a/portable/GCC/AVR_Mega0/port.c +++ b/portable/GCC/AVR_Mega0/port.c @@ -29,9 +29,7 @@ #include #include - #include "porthardware.h" - #include "FreeRTOS.h" #include "task.h" @@ -40,7 +38,7 @@ *----------------------------------------------------------*/ /* Start tasks with interrupts enables. */ -#define portFLAGS_INT_ENABLED ((StackType_t) 0x80) +#define portFLAGS_INT_ENABLED ((StackType_t) 0x80) /*-----------------------------------------------------------*/ @@ -67,96 +65,96 @@ extern volatile RTOS_TCB_t *volatile pxCurrentTCB; * so we need not worry about reading/writing to the stack pointer. */ -#define portSAVE_CONTEXT() \ - asm volatile("push r0 \n\t" \ - "in r0, __SREG__ \n\t" \ - "cli \n\t" \ - "push r0 \n\t" \ - "push r1 \n\t" \ - "clr r1 \n\t" \ - "push r2 \n\t" \ - "push r3 \n\t" \ - "push r4 \n\t" \ - "push r5 \n\t" \ - "push r6 \n\t" \ - "push r7 \n\t" \ - "push r8 \n\t" \ - "push r9 \n\t" \ - "push r10 \n\t" \ - "push r11 \n\t" \ - "push r12 \n\t" \ - "push r13 \n\t" \ - "push r14 \n\t" \ - "push r15 \n\t" \ - "push r16 \n\t" \ - "push r17 \n\t" \ - "push r18 \n\t" \ - "push r19 \n\t" \ - "push r20 \n\t" \ - "push r21 \n\t" \ - "push r22 \n\t" \ - "push r23 \n\t" \ - "push r24 \n\t" \ - "push r25 \n\t" \ - "push r26 \n\t" \ - "push r27 \n\t" \ - "push r28 \n\t" \ - "push r29 \n\t" \ - "push r30 \n\t" \ - "push r31 \n\t" \ - "lds r26, pxCurrentTCB \n\t" \ - "lds r27, pxCurrentTCB + 1 \n\t" \ - "in r0, __SP_L__ \n\t" \ - "st x+, r0 \n\t" \ - "in r0, __SP_H__ \n\t" \ - "st x+, r0 \n\t"); +#define portSAVE_CONTEXT() \ + asm volatile("push r0 \n\t" \ + "in r0, __SREG__ \n\t" \ + "cli \n\t" \ + "push r0 \n\t" \ + "push r1 \n\t" \ + "clr r1 \n\t" \ + "push r2 \n\t" \ + "push r3 \n\t" \ + "push r4 \n\t" \ + "push r5 \n\t" \ + "push r6 \n\t" \ + "push r7 \n\t" \ + "push r8 \n\t" \ + "push r9 \n\t" \ + "push r10 \n\t" \ + "push r11 \n\t" \ + "push r12 \n\t" \ + "push r13 \n\t" \ + "push r14 \n\t" \ + "push r15 \n\t" \ + "push r16 \n\t" \ + "push r17 \n\t" \ + "push r18 \n\t" \ + "push r19 \n\t" \ + "push r20 \n\t" \ + "push r21 \n\t" \ + "push r22 \n\t" \ + "push r23 \n\t" \ + "push r24 \n\t" \ + "push r25 \n\t" \ + "push r26 \n\t" \ + "push r27 \n\t" \ + "push r28 \n\t" \ + "push r29 \n\t" \ + "push r30 \n\t" \ + "push r31 \n\t" \ + "lds r26, pxCurrentTCB \n\t" \ + "lds r27, pxCurrentTCB + 1 \n\t" \ + "in r0, __SP_L__ \n\t" \ + "st x+, r0 \n\t" \ + "in r0, __SP_H__ \n\t" \ + "st x+, r0 \n\t"); /* * Opposite to portSAVE_CONTEXT(). Interrupts will have been disabled during * the context save so we can write to the stack pointer. */ -#define portRESTORE_CONTEXT() \ - asm volatile("lds r26, pxCurrentTCB \n\t" \ - "lds r27, pxCurrentTCB + 1 \n\t" \ - "ld r28, x+ \n\t" \ - "out __SP_L__, r28 \n\t" \ - "ld r29, x+ \n\t" \ - "out __SP_H__, r29 \n\t" \ - "pop r31 \n\t" \ - "pop r30 \n\t" \ - "pop r29 \n\t" \ - "pop r28 \n\t" \ - "pop r27 \n\t" \ - "pop r26 \n\t" \ - "pop r25 \n\t" \ - "pop r24 \n\t" \ - "pop r23 \n\t" \ - "pop r22 \n\t" \ - "pop r21 \n\t" \ - "pop r20 \n\t" \ - "pop r19 \n\t" \ - "pop r18 \n\t" \ - "pop r17 \n\t" \ - "pop r16 \n\t" \ - "pop r15 \n\t" \ - "pop r14 \n\t" \ - "pop r13 \n\t" \ - "pop r12 \n\t" \ - "pop r11 \n\t" \ - "pop r10 \n\t" \ - "pop r9 \n\t" \ - "pop r8 \n\t" \ - "pop r7 \n\t" \ - "pop r6 \n\t" \ - "pop r5 \n\t" \ - "pop r4 \n\t" \ - "pop r3 \n\t" \ - "pop r2 \n\t" \ - "pop r1 \n\t" \ - "pop r0 \n\t" \ - "out __SREG__, r0 \n\t" \ - "pop r0 \n\t"); +#define portRESTORE_CONTEXT() \ + asm volatile("lds r26, pxCurrentTCB \n\t" \ + "lds r27, pxCurrentTCB + 1 \n\t" \ + "ld r28, x+ \n\t" \ + "out __SP_L__, r28 \n\t" \ + "ld r29, x+ \n\t" \ + "out __SP_H__, r29 \n\t" \ + "pop r31 \n\t" \ + "pop r30 \n\t" \ + "pop r29 \n\t" \ + "pop r28 \n\t" \ + "pop r27 \n\t" \ + "pop r26 \n\t" \ + "pop r25 \n\t" \ + "pop r24 \n\t" \ + "pop r23 \n\t" \ + "pop r22 \n\t" \ + "pop r21 \n\t" \ + "pop r20 \n\t" \ + "pop r19 \n\t" \ + "pop r18 \n\t" \ + "pop r17 \n\t" \ + "pop r16 \n\t" \ + "pop r15 \n\t" \ + "pop r14 \n\t" \ + "pop r13 \n\t" \ + "pop r12 \n\t" \ + "pop r11 \n\t" \ + "pop r10 \n\t" \ + "pop r9 \n\t" \ + "pop r8 \n\t" \ + "pop r7 \n\t" \ + "pop r6 \n\t" \ + "pop r5 \n\t" \ + "pop r4 \n\t" \ + "pop r3 \n\t" \ + "pop r2 \n\t" \ + "pop r1 \n\t" \ + "pop r0 \n\t" \ + "out __SREG__, r0 \n\t" \ + "pop r0 \n\t"); /*-----------------------------------------------------------*/ @@ -171,81 +169,81 @@ static void prvSetupTimerInterrupt(void); */ StackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters) { - uint16_t usAddress; + uint16_t usAddress; - /*lint -e950 -e611 -e923 Lint doesn't like this much - but nothing I can do about it. */ - - /* Place a few bytes of known values on the bottom of the stack. - This is just useful for debugging. Uncomment if needed. */ - // *pxTopOfStack = 0x11; + /*lint -e950 -e611 -e923 Lint doesn't like this much - but nothing I can do about it. */ + + /* Place a few bytes of known values on the bottom of the stack. + This is just useful for debugging. Uncomment if needed. */ + // *pxTopOfStack = 0x11; // pxTopOfStack--; // *pxTopOfStack = 0x22; // pxTopOfStack--; // *pxTopOfStack = 0x33; // pxTopOfStack--; - /* The start of the task code will be popped off the stack last, so place - it on first. */ - usAddress = (uint16_t)pxCode; - *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); - pxTopOfStack--; + /* The start of the task code will be popped off the stack last, so place + it on first. */ + usAddress = (uint16_t)pxCode; + *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); + pxTopOfStack--; - usAddress >>= 8; - *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); - pxTopOfStack--; + usAddress >>= 8; + *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); + pxTopOfStack--; - /* Next simulate the stack as if after a call to portSAVE_CONTEXT(). - portSAVE_CONTEXT places the flags on the stack immediately after r0 - to ensure the interrupts get disabled as soon as possible, and so ensuring - the stack use is minimal should a context switch interrupt occur. */ - *pxTopOfStack = (StackType_t)0x00; /* R0 */ - pxTopOfStack--; - *pxTopOfStack = portFLAGS_INT_ENABLED; - pxTopOfStack--; + /* Next simulate the stack as if after a call to portSAVE_CONTEXT(). + portSAVE_CONTEXT places the flags on the stack immediately after r0 + to ensure the interrupts get disabled as soon as possible, and so ensuring + the stack use is minimal should a context switch interrupt occur. */ + *pxTopOfStack = (StackType_t)0x00; /* R0 */ + pxTopOfStack--; + *pxTopOfStack = portFLAGS_INT_ENABLED; + pxTopOfStack--; - /* Now the remaining registers. The compiler expects R1 to be 0. */ - *pxTopOfStack = (StackType_t)0x00; /* R1 */ + /* Now the remaining registers. The compiler expects R1 to be 0. */ + *pxTopOfStack = (StackType_t)0x00; /* R1 */ - /* Leave R2 - R23 untouched */ - pxTopOfStack -= 23; + /* Leave R2 - R23 untouched */ + pxTopOfStack -= 23; - /* Place the parameter on the stack in the expected location. */ - usAddress = (uint16_t)pvParameters; - *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); - pxTopOfStack--; + /* Place the parameter on the stack in the expected location. */ + usAddress = (uint16_t)pvParameters; + *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); + pxTopOfStack--; - usAddress >>= 8; - *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); + usAddress >>= 8; + *pxTopOfStack = (StackType_t)(usAddress & (uint16_t)0x00ff); - /* Leave register R26 - R31 untouched */ - pxTopOfStack -= 7; + /* Leave register R26 - R31 untouched */ + pxTopOfStack -= 7; - /*lint +e950 +e611 +e923 */ + /*lint +e950 +e611 +e923 */ - return pxTopOfStack; + return pxTopOfStack; } /*-----------------------------------------------------------*/ BaseType_t xPortStartScheduler(void) { - /* Setup the hardware to generate the tick. */ - prvSetupTimerInterrupt(); + /* Setup the hardware to generate the tick. */ + prvSetupTimerInterrupt(); - /* Restore the context of the first task that is going to run. */ - portRESTORE_CONTEXT(); + /* Restore the context of the first task that is going to run. */ + portRESTORE_CONTEXT(); - /* Simulate a function call end as generated by the compiler. We will now - jump to the start of the task the context of which we have just restored. */ - asm volatile("ret"); + /* Simulate a function call end as generated by the compiler. We will now + jump to the start of the task the context of which we have just restored. */ + asm volatile("ret"); - /* Should not get here. */ - return pdTRUE; + /* Should not get here. */ + return pdTRUE; } /*-----------------------------------------------------------*/ void vPortEndScheduler(void) { - /* vPortEndScheduler is not implemented in this port. */ + /* vPortEndScheduler is not implemented in this port. */ } /*-----------------------------------------------------------*/ @@ -256,10 +254,10 @@ void vPortEndScheduler(void) void vPortYield(void) __attribute__((naked)); void vPortYield(void) { - portSAVE_CONTEXT(); - vTaskSwitchContext(); - portRESTORE_CONTEXT(); - asm volatile("ret"); + portSAVE_CONTEXT(); + vTaskSwitchContext(); + portRESTORE_CONTEXT(); + asm volatile("ret"); } /*-----------------------------------------------------------*/ @@ -270,10 +268,10 @@ void vPortYield(void) void vPortYieldFromISR(void) __attribute__((naked)); void vPortYieldFromISR(void) { - portSAVE_CONTEXT(); - vTaskSwitchContext(); - portRESTORE_CONTEXT(); - asm volatile("reti"); + portSAVE_CONTEXT(); + vTaskSwitchContext(); + portRESTORE_CONTEXT(); + asm volatile("reti"); } /*-----------------------------------------------------------*/ @@ -286,14 +284,14 @@ void vPortYieldFromISR(void) void vPortYieldFromTick(void) __attribute__((naked)); void vPortYieldFromTick(void) { - portSAVE_CONTEXT(); - if (xTaskIncrementTick() != pdFALSE) { - vTaskSwitchContext(); - } + portSAVE_CONTEXT(); + if (xTaskIncrementTick() != pdFALSE) { + vTaskSwitchContext(); + } - portRESTORE_CONTEXT(); + portRESTORE_CONTEXT(); - asm volatile("reti"); + asm volatile("reti"); } /*-----------------------------------------------------------*/ @@ -302,7 +300,7 @@ void vPortYieldFromTick(void) */ static void prvSetupTimerInterrupt(void) { - TICK_init(); + TICK_init(); } /*-----------------------------------------------------------*/ @@ -315,12 +313,12 @@ static void prvSetupTimerInterrupt(void) */ ISR(TICK_INT_vect, ISR_NAKED) { - /* Clear tick interrupt flag. */ - CLR_INT(INT_FLAGS, INT_MASK); + /* Clear tick interrupt flag. */ + CLR_INT(INT_FLAGS, INT_MASK); - vPortYieldFromTick(); + vPortYieldFromTick(); - asm volatile("reti"); + asm volatile("reti"); } #else @@ -331,8 +329,8 @@ ISR(TICK_INT_vect, ISR_NAKED) */ ISR(TICK_INT_vect) { - /* Clear tick interrupt flag. */ - INT_FLAGS = INT_MASK; - xTaskIncrementTick(); + /* Clear tick interrupt flag. */ + INT_FLAGS = INT_MASK; + xTaskIncrementTick(); } #endif diff --git a/portable/GCC/AVR_Mega0/porthardware.h b/portable/GCC/AVR_Mega0/porthardware.h index 3c699f4f3..aeeccf534 100644 --- a/portable/GCC/AVR_Mega0/porthardware.h +++ b/portable/GCC/AVR_Mega0/porthardware.h @@ -6,101 +6,84 @@ /*-----------------------------------------------------------*/ #define CLR_INT(FLAG_REG, FLAG_MASK) \ - asm volatile( "push r16\n\t" \ - "ldi r16, %1\n\t" \ - "sts %0, r16\n\t" \ - "pop r16\n\t" \ - : \ - : "i"(_SFR_MEM_ADDR(FLAG_REG)),"i"((uint8_t)(FLAG_MASK)) \ - ); + asm volatile( \ + "push r16\n\t" \ + "ldi r16, %1\n\t" \ + "sts %0, r16\n\t" \ + "pop r16\n\t" \ + : \ + : "i"(_SFR_MEM_ADDR(FLAG_REG)),"i"((uint8_t)(FLAG_MASK)) \ + ); #if ( configUSE_TIMER_INSTANCE == 0 ) - #define TICK_INT_vect TCB0_INT_vect - #define INT_FLAGS TCB0_INTFLAGS - #define INT_MASK TCB_CAPT_bm + #define TICK_INT_vect TCB0_INT_vect + #define INT_FLAGS TCB0_INTFLAGS + #define INT_MASK TCB_CAPT_bm - #define TICK_init() { \ - TCB0.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ - TCB0.INTCTRL = TCB_CAPT_bm; \ - TCB0.CTRLA = TCB_ENABLE_bm; \ - } - - #define TICK_stop() { \ - TCB0.INTCTRL &= ~TCB_CAPT_bm;\ - TCB0.CTRLA &= ~TCB_ENABLE_bm; \ - } + #define TICK_init() { \ + TCB0.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ + TCB0.INTCTRL = TCB_CAPT_bm; \ + TCB0.CTRLA = TCB_ENABLE_bm; \ + } #elif ( configUSE_TIMER_INSTANCE == 1 ) - #define TICK_INT_vect TCB1_INT_vect - #define INT_FLAGS TCB1_INTFLAGS - #define INT_MASK TCB_CAPT_bm + #define TICK_INT_vect TCB1_INT_vect + #define INT_FLAGS TCB1_INTFLAGS + #define INT_MASK TCB_CAPT_bm - #define TICK_init() { \ - TCB1.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ - TCB1.INTCTRL = TCB_CAPT_bm; \ - TCB1.CTRLA = TCB_ENABLE_bm; \ - } + #define TICK_init() { \ + TCB1.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ + TCB1.INTCTRL = TCB_CAPT_bm; \ + TCB1.CTRLA = TCB_ENABLE_bm; \ + } #elif ( configUSE_TIMER_INSTANCE == 2 ) - #define TICK_INT_vect TCB2_INT_vect - #define INT_FLAGS TCB2_INTFLAGS - #define INT_MASK TCB_CAPT_bm + #define TICK_INT_vect TCB2_INT_vect + #define INT_FLAGS TCB2_INTFLAGS + #define INT_MASK TCB_CAPT_bm - #define TICK_init() { \ - TCB2.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ - TCB2.INTCTRL = TCB_CAPT_bm; \ - TCB2.CTRLA = TCB_ENABLE_bm; \ - } - - #define TICK_stop() { \ - TCB2.INTCTRL &= ~TCB_CAPT_bm; \ - TCB2.CTRLA &= ~TCB_ENABLE_bm; \ - } + #define TICK_init() { \ + TCB2.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ + TCB2.INTCTRL = TCB_CAPT_bm; \ + TCB2.CTRLA = TCB_ENABLE_bm; \ + } #elif ( configUSE_TIMER_INSTANCE == 3 ) - #define TICK_INT_vect TCB3_INT_vect - #define INT_FLAGS TCB3_INTFLAGS - #define INT_MASK TCB_CAPT_bm + #define TICK_INT_vect TCB3_INT_vect + #define INT_FLAGS TCB3_INTFLAGS + #define INT_MASK TCB_CAPT_bm - #define TICK_init() { \ - TCB3.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ - TCB3.INTCTRL = TCB_CAPT_bm; \ - TCB3.CTRLA = TCB_ENABLE_bm; \ - } - - #define TICK_stop() { \ - TCB3.INTCTRL &= ~TCB_CAPT_bm; \ - TCB3.CTRLA &= ~TCB_ENABLE_bm; \ - } + #define TICK_init() { \ + TCB3.CCMP = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \ + TCB3.INTCTRL = TCB_CAPT_bm; \ + TCB3.CTRLA = TCB_ENABLE_bm; \ + } #elif ( configUSE_TIMER_INSTANCE == 4 ) - #define TICK_INT_vect RTC_CNT_vect - #define INT_FLAGS RTC_INTFLAGS - #define INT_MASK RTC_OVF_bm + #define TICK_INT_vect RTC_CNT_vect + #define INT_FLAGS RTC_INTFLAGS + #define INT_MASK RTC_OVF_bm - #define RTC_PERIOD_HZ(x) (32768 * ( (1.0 / x) ) ) - #define TICK_init() { \ - while (RTC.STATUS > 0); \ - RTC.CTRLA = RTC_PRESCALER_DIV1_gc | 1 << RTC_RTCEN_bp; \ - RTC.PER = RTC_PERIOD_HZ(configTICK_RATE_HZ); \ - RTC.INTCTRL |= 1 << RTC_OVF_bp; \ - } - - #define TICK_stop() { \ - RTC.CTRLA &= ~(1 << RTC_RTCEN_bp); \ - RTC.INTCTRL &= ~(1 << RTC_OVF_bp); \ - } + /* Hertz to period for RTC setup */ + #define RTC_PERIOD_HZ(x) ( 32768 * ( ( 1.0 / x ) ) ) + #define TICK_init() { \ + while (RTC.STATUS > 0); \ + RTC.CTRLA = RTC_PRESCALER_DIV1_gc | 1 << RTC_RTCEN_bp; \ + RTC.PER = RTC_PERIOD_HZ(configTICK_RATE_HZ); \ + RTC.INTCTRL |= 1 << RTC_OVF_bp; \ + } #else -#undef TICK_INT_vect -#undef INT_FLAGS -#undef INT_MASK -#error Invalid timer setting + #undef TICK_INT_vect + #undef INT_FLAGS + #undef INT_MASK + #undef TICK_init() + #error Invalid timer setting. #endif /*-----------------------------------------------------------*/ diff --git a/portable/GCC/AVR_Mega0/portmacro.h b/portable/GCC/AVR_Mega0/portmacro.h index 040f498fb..085a27fc1 100644 --- a/portable/GCC/AVR_Mega0/portmacro.h +++ b/portable/GCC/AVR_Mega0/portmacro.h @@ -68,13 +68,13 @@ typedef uint32_t TickType_t; /* Critical section management. */ #define portENTER_CRITICAL() \ - asm volatile("in __tmp_reg__, __SREG__"); \ - asm volatile("cli"); \ - asm volatile("push __tmp_reg__") + asm volatile("in __tmp_reg__, __SREG__"); \ + asm volatile("cli"); \ + asm volatile("push __tmp_reg__") #define portEXIT_CRITICAL() \ - asm volatile("pop __tmp_reg__"); \ - asm volatile("out __SREG__, __tmp_reg__") + asm volatile("pop __tmp_reg__"); \ + asm volatile("out __SREG__, __tmp_reg__") #define portDISABLE_INTERRUPTS() asm volatile("cli" ::); #define portENABLE_INTERRUPTS() asm volatile("sei" ::); @@ -85,7 +85,6 @@ typedef uint32_t TickType_t; #define portTICK_PERIOD_MS ((TickType_t)1000 / configTICK_RATE_HZ) #define portBYTE_ALIGNMENT 1 #define portNOP() asm volatile("nop"); - /*-----------------------------------------------------------*/ /* Kernel utilities. */ @@ -94,7 +93,6 @@ extern void vPortYield(void) __attribute__((naked)); extern void vPortYieldFromISR(void) __attribute__((naked)); #define portYIELD_FROM_ISR() vPortYieldFromISR() - /*-----------------------------------------------------------*/ /* Task function macros as described on the FreeRTOS.org WEB site. */ @@ -106,4 +104,3 @@ extern void vPortYieldFromISR(void) __attribute__((naked)); #endif #endif /* PORTMACRO_H */ -