@ -1,5 +1,5 @@
/ *
FreeRTOS. o r g V 4 . 2. 1 - C o p y r i g h t ( C ) 2 0 0 3 - 2 0 0 7 R i c h a r d B a r r y .
FreeRTOS. o r g V 4 . 3. 0 - C o p y r i g h t ( C ) 2 0 0 3 - 2 0 0 7 R i c h a r d B a r r y .
This f i l e i s p a r t o f t h e F r e e R T O S . o r g d i s t r i b u t i o n .
@ -32,13 +32,29 @@
with c o m m e r c i a l d e v e l o p m e n t a n d s u p p o r t o p t i o n s .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* /
/ *
Change f r o m V 4 . 2 . 1 :
+ Introduced u s a g e o f c o n f i g K E R N E L _ I N T E R R U P T _ P R I O R I T Y m a c r o t o s e t t h e
interrupt p r i o r i t y u s e d b y t h e k e r n e l .
* /
# include < F r e e R T O S C o n f i g . h >
/ * For b a c k w a r d c o m p a t i b i l i t y , e n s u r e c o n f i g K E R N E L _ I N T E R R U P T _ P R I O R I T Y i s
defined. T h e v a l u e z e r o s h o u l d a l s o e n s u r e b a c k w a r d c o m p a t i b i l i t y .
FreeRTOS. o r g v e r s i o n s p r i o r t o V 4 . 3 . 0 d i d n o t i n c l u d e t h i s d e f i n i t i o n . * /
# ifndef c o n f i g K E R N E L _ I N T E R R U P T _ P R I O R I T Y
# define c o n f i g K E R N E L _ I N T E R R U P T _ P R I O R I T Y 0
# endif
RSEG I C O D E : C O D E
EXTERN v P o r t Y i e l d F r o m I S R
EXTERN v T a s k S w i t c h C o n t e x t
EXTERN v T a s k I n c r e m e n t T i c k
EXTERN v Po r t S w i t c h C o n t e x t
EXTERN v Po r t I n c r e m e n t T i c k
EXTERN u x C r i t i c a l N e s t i n g
EXTERN p x C u r r e n t T C B
@ -46,16 +62,20 @@
PUBLIC v S e t M S P
PUBLIC x P o r t P e n d S V H a n d l e r
PUBLIC x P o r t S y s T i c k H a n d l e r
PUBLIC v P o r t S e t I n t e r r u p t M a s k
PUBLIC v P o r t C l e a r I n t e r r u p t M a s k
vSetPSP :
msr p s p , r0
bx l r
/*-----------------------------------------------------------*/
vSetMSP
msr m s p , r0
bx l r
/*-----------------------------------------------------------*/
xPortPendSVHandler :
@ -73,11 +93,9 @@ xPortPendSVHandler:
ldr r1 , [ r1 ]
str r0 , [ r1 ]
no_save :
ldr r0 , =v Task SwitchContext
ldr r0 , =v Port SwitchContext
push { r14 }
cpsid i
blx r0
cpsie i
pop { r14 }
/* Restore the context. */
@ -96,18 +114,18 @@ no_save:
bx r14
sv_disable_interrupts :
cpsid i
mov r1 , #c o n f i g K E R N E L _ I N T E R R U P T _ P R I O R I T Y
msr b a s e p r i , R 1
bx r14
/*-----------------------------------------------------------*/
xPortSysTickHandler :
/* Call the scheduler tick function. */
ldr r0 , =v Task IncrementTick
ldr r0 , =v Port IncrementTick
push { r14 }
cpsid i
blx r0
cpsie i
pop { r14 }
/* If using preemption, also force a context switch. */
@ -125,8 +143,32 @@ xPortSysTickHandler:
bx r14
tick_disable_interrupts :
cpsid i
mov r1 , #c o n f i g K E R N E L _ I N T E R R U P T _ P R I O R I T Y
msr b a s e p r i , R 1
bx r14
END
/*-----------------------------------------------------------*/
vPortSetInterruptMask :
push { r0 }
mov R 0 , #c o n f i g K E R N E L _ I N T E R R U P T _ P R I O R I T Y
msr B A S E P R I , R 0
pop { R 0 }
bx r14
/*-----------------------------------------------------------*/
vPortClearInterruptMask :
PUSH { r0 }
MOV R 0 , #0
MSR B A S E P R I , R 0
POP { R 0 }
bx r14
/*-----------------------------------------------------------*/
END