Lines Matching +full:arm +full:- +full:gcc
5 * SPDX-License-Identifier: MIT
29 /*-----------------------------------------------------------
30 * Implementation of functions defined in portable.h for the ARM CM4F port.
31 *----------------------------------------------------------*/
42 …LL_INTERRUPT_PRIORITY must not be set to 0. See http: /*www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */
68 /* Constants used to detect a Cortex-M7 r0p1 core, which should use the ARM_CM7
99 /* The systick is a 24-bit counter. */
107 /* For strict compliance with the Cortex-M spec the task start address should
108 * have bit-0 clear, as it is loaded into the PC on exit from an ISR. */
152 /*-----------------------------------------------------------*/
192 /*-----------------------------------------------------------*/
206 pxTopOfStack--; in pxPortInitialiseStack()
209 pxTopOfStack--; in pxPortInitialiseStack()
211 pxTopOfStack--; in pxPortInitialiseStack()
215 pxTopOfStack -= 5; /* R12, R3, R2 and R1. */ in pxPortInitialiseStack()
220 pxTopOfStack--; in pxPortInitialiseStack()
223 pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */ in pxPortInitialiseStack()
227 /*-----------------------------------------------------------*/
244 /*-----------------------------------------------------------*/
248 /* *INDENT-OFF* */ in vPortSVCHandler()
256 ldmia r0!, {r4-r11,r14} in vPortSVCHandler()
262 /* *INDENT-ON* */ in vPortSVCHandler()
264 /*-----------------------------------------------------------*/
268 /* *INDENT-OFF* */ in prvStartFirstTask()
279 * before the scheduler was started - which would otherwise result in the in prvStartFirstTask()
293 /* *INDENT-ON* */ in prvStartFirstTask()
295 /*-----------------------------------------------------------*/
299 /* *INDENT-OFF* */ in prvEnableVFP()
311 /* *INDENT-ON* */ in prvEnableVFP()
313 /*-----------------------------------------------------------*/
321 * See https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */ in xPortStartScheduler()
324 /* This port can be used on all revisions of the Cortex-M7 core other than in xPortStartScheduler()
326 * /source/portable/GCC/ARM_CM7/r0p1 directory. */ in xPortStartScheduler()
360 * See https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */ in xPortStartScheduler()
379 * the software to configure PRIGROUP to not have sub-priorities. As in xPortStartScheduler()
380 * a result, the least significant bit is always used for sub-priority in xPortStartScheduler()
381 * and there are 128 preemption priorities and 2 sub-priorities. in xPortStartScheduler()
383 * This may cause some confusion in some cases - for example, if in xPortStartScheduler()
392 * The following assert ensures that the sub-priority bit in the in xPortStartScheduler()
400 ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS - ulImplementedPrioBits; in xPortStartScheduler()
425 /* Ensure the VFP is enabled - it should be anyway. */ in xPortStartScheduler()
437 /*-----------------------------------------------------------*/
445 /*-----------------------------------------------------------*/
462 /*-----------------------------------------------------------*/
467 uxCriticalNesting--; in vPortExitCritical()
474 /*-----------------------------------------------------------*/
482 /* *INDENT-OFF* */ in xPortPendSVHandler()
494 vstmdbeq r0!, {s16-s31} in xPortPendSVHandler()
497 stmdb r0!, {r4-r11, r14} in xPortPendSVHandler()
517 ldmia r0!, {r4-r11, r14} in xPortPendSVHandler()
523 vldmiaeq r0!, {s16-s31} in xPortPendSVHandler()
536 /* *INDENT-ON* */ in xPortPendSVHandler()
538 /*-----------------------------------------------------------*/
545 * known - therefore the slightly faster vPortRaiseBASEPRI() function is used in xPortSysTickHandler()
567 /*-----------------------------------------------------------*/
592 /* Re-enable interrupts - see comments above the __disable_irq() in vPortSuppressTicksAndSleep()
604 /* Use the SysTick current-value register to determine the number of in vPortSuppressTicksAndSleep()
606 * current-value register is zero, then there are actually in vPortSuppressTicksAndSleep()
617 * tick periods. -1 is used because this code normally executes part in vPortSuppressTicksAndSleep()
622 …lReloadValue = ulSysTickDecrementsLeft + ( ulTimerCountsForOneTick * ( xExpectedIdleTime - 1UL ) ); in vPortSuppressTicksAndSleep()
627 ulReloadValue -= ulTimerCountsForOneTick; in vPortSuppressTicksAndSleep()
632 ulReloadValue -= ulStoppedTimerCompensation; in vPortSuppressTicksAndSleep()
662 /* Re-enable interrupts to allow the interrupt that brought the MCU in vPortSuppressTicksAndSleep()
694 …ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CUR… in vPortSuppressTicksAndSleep()
698 * that took too long or because the SysTick current-value register in vPortSuppressTicksAndSleep()
702 ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ); in vPortSuppressTicksAndSleep()
710 ulCompleteTickPeriods = xExpectedIdleTime - 1UL; in vPortSuppressTicksAndSleep()
716 /* Use the SysTick current-value register to determine the in vPortSuppressTicksAndSleep()
722 /* If the SysTick is not using the core clock, the current- in vPortSuppressTicksAndSleep()
737 …ulCompletedSysTickDecrements = ( xExpectedIdleTime * ulTimerCountsForOneTick ) - ulSysTickDecremen… in vPortSuppressTicksAndSleep()
745 …CK_LOAD_REG = ( ( ulCompleteTickPeriods + 1UL ) * ulTimerCountsForOneTick ) - ulCompletedSysTickDe… in vPortSuppressTicksAndSleep()
759 portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; in vPortSuppressTicksAndSleep()
774 portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL; in vPortSuppressTicksAndSleep()
789 /*-----------------------------------------------------------*/
813 portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; in vPortSetupTimerInterrupt()
818 /*-----------------------------------------------------------*/
822 /* *INDENT-OFF* */ in vPortGetIPSR()
827 /* *INDENT-ON* */ in vPortGetIPSR()
829 /*-----------------------------------------------------------*/
868 * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html in vPortValidateInterruptPriority()
875 * define the interrupt's pre-emption priority bits and bits that define in vPortValidateInterruptPriority()
876 * the interrupt's sub-priority. For simplicity all bits must be defined in vPortValidateInterruptPriority()
877 * to be pre-emption priority bits. The following assertion will fail if in vPortValidateInterruptPriority()
878 * this is not the case (if some bits represent a sub-priority). in vPortValidateInterruptPriority()
881 * configuration then the correct setting can be achieved on all Cortex-M in vPortValidateInterruptPriority()
884 * assume a non-zero priority group setting, in which cases using a value in vPortValidateInterruptPriority()