Add ulReadValueAPSR API

This commit is contained in:
Rahul Kar 2024-07-08 17:54:22 +05:30
parent 886d1fd4ff
commit d6fff2a530
2 changed files with 14 additions and 5 deletions

View file

@ -83,10 +83,12 @@
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
/* /*
* Starts the first task executing. This function is necessarily written in * Starts the first task executing. These functions are necessarily written in
* assembly code so is implemented in portASM.s. * assembly code so is implemented in portASM.s.
*/ */
extern void vPortRestoreTaskContext( void ); extern void vPortRestoreTaskContext( void );
extern void vPortInitialiseFPSCR( void );
extern uint32_t ulReadValueAPSR( void );
/* /*
* Used to catch tasks that attempt to return from their implementing function. * Used to catch tasks that attempt to return from their implementing function.
@ -218,7 +220,7 @@ BaseType_t xPortStartScheduler( void )
/* Only continue if the CPU is not in User mode. The CPU must be in a /* Only continue if the CPU is not in User mode. The CPU must be in a
* Privileged mode for the scheduler to start. */ * Privileged mode for the scheduler to start. */
__asm volatile ( "MRS %0, APSR" : "=r" ( ulAPSR )::"memory" ); ulAPSR = ulReadValueAPSR();
ulAPSR &= portAPSR_MODE_BITS_MASK; ulAPSR &= portAPSR_MODE_BITS_MASK;
configASSERT( ulAPSR != portAPSR_USER_MODE ); configASSERT( ulAPSR != portAPSR_USER_MODE );
@ -312,14 +314,11 @@ void FreeRTOS_Tick_Handler( void )
void vPortTaskUsesFPU( void ) void vPortTaskUsesFPU( void )
{ {
//uint32_t ulInitialFPSCR = 0;
/* A task is registering the fact that it needs an FPU context. Set the /* A task is registering the fact that it needs an FPU context. Set the
* FPU flag (which is saved as part of the task context). */ * FPU flag (which is saved as part of the task context). */
ulPortTaskHasFPUContext = pdTRUE; ulPortTaskHasFPUContext = pdTRUE;
/* Initialise the floating point status register. */ /* Initialise the floating point status register. */
vPortInitialiseFPSCR(); vPortInitialiseFPSCR();
/*__asm volatile ( "FMXR FPSCR, %0" ::"r" ( ulInitialFPSCR ) : "memory" );*/
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

View file

@ -48,6 +48,7 @@
.global FreeRTOS_SVC_Handler .global FreeRTOS_SVC_Handler
.global vPortRestoreTaskContext .global vPortRestoreTaskContext
.global vPortInitialiseFPSCR .global vPortInitialiseFPSCR
.global ulReadValueAPSR
.macro portSAVE_CONTEXT .macro portSAVE_CONTEXT
@ -162,6 +163,15 @@ vPortInitialiseFPSCR:
FMXR FPSCR, R0 FMXR FPSCR, R0
BX LR BX LR
/******************************************************************************
* ulReadValueAPSR is used to read the value of APSR context.
*****************************************************************************/
.align 4
.type ulReadValueAPSR, %function
ulReadValueAPSR:
MRS R0, APSR
BX LR
.align 4 .align 4
.type FreeRTOS_IRQ_Handler, %function .type FreeRTOS_IRQ_Handler, %function
FreeRTOS_IRQ_Handler: FreeRTOS_IRQ_Handler: