@ -50,49 +50,7 @@
.extern pullNextTime
.extern ulTimerIncrementsForOneTick
.extern xISRStackTop
/*-----------------------------------------------------------*/
.align 8
xPortStartFirstTask :
la t 0 , v P o r t T r a p H a n d l e r
csrw m t v e c , t 0
lw s p , p x C u r r e n t T C B / * L o a d p x C u r r e n t T C B . * /
lw s p , 0 ( s p ) / * R e a d s p f r o m f i r s t T C B m e m b e r . * /
lw x1 , 0 ( s p ) / * N o t e f o r s t a r t i n g t h e s c h e d u l e r t h e e x c e p t i o n r e t u r n a d d r e s s i s u s e d a s t h e f u n c t i o n r e t u r n a d d r e s s . * /
lw x5 , 2 * W O R D _ S I Z E ( s p ) / * t 0 * /
lw x6 , 3 * W O R D _ S I Z E ( s p ) / * t 1 * /
lw x7 , 4 * W O R D _ S I Z E ( s p ) / * t 2 * /
lw x8 , 5 * W O R D _ S I Z E ( s p ) / * s0 / f p * /
lw x9 , 6 * W O R D _ S I Z E ( s p ) / * s1 * /
lw x10 , 7 * W O R D _ S I Z E ( s p ) / * a0 * /
lw x11 , 8 * W O R D _ S I Z E ( s p ) / * a1 * /
lw x12 , 9 * W O R D _ S I Z E ( s p ) / * a2 * /
lw x13 , 1 0 * W O R D _ S I Z E ( s p ) / * a3 * /
lw x14 , 1 1 * W O R D _ S I Z E ( s p ) / * a4 * /
lw x15 , 1 2 * W O R D _ S I Z E ( s p ) / * a5 * /
lw x16 , 1 3 * W O R D _ S I Z E ( s p ) / * a6 * /
lw x17 , 1 4 * W O R D _ S I Z E ( s p ) / * a7 * /
lw x18 , 1 5 * W O R D _ S I Z E ( s p ) / * s2 * /
lw x19 , 1 6 * W O R D _ S I Z E ( s p ) / * s3 * /
lw x20 , 1 7 * W O R D _ S I Z E ( s p ) / * s4 * /
lw x21 , 1 8 * W O R D _ S I Z E ( s p ) / * s5 * /
lw x22 , 1 9 * W O R D _ S I Z E ( s p ) / * s6 * /
lw x23 , 2 0 * W O R D _ S I Z E ( s p ) / * s7 * /
lw x24 , 2 1 * W O R D _ S I Z E ( s p ) / * s8 * /
lw x25 , 2 2 * W O R D _ S I Z E ( s p ) / * s9 * /
lw x26 , 2 3 * W O R D _ S I Z E ( s p ) / * s10 * /
lw x27 , 2 4 * W O R D _ S I Z E ( s p ) / * s11 * /
lw x28 , 2 5 * W O R D _ S I Z E ( s p ) / * t 3 * /
lw x29 , 2 6 * W O R D _ S I Z E ( s p ) / * t 4 * /
lw x30 , 2 7 * W O R D _ S I Z E ( s p ) / * t 5 * /
lw x31 , 2 8 * W O R D _ S I Z E ( s p ) / * t 6 * /
addi s p , s p , C O N T E X T _ S I Z E
csrs m s t a t u s , 8 / * E n a b l e m a c h i n e i n t e r r u p t s . * /
ret
.extern vPortHandleInterrupt
/*-----------------------------------------------------------*/
@ -152,7 +110,7 @@ test_if_timer:
lui t 0 , 0 x80 0 0 0
addi t 1 ,t 0 , 7 / * 0 x80 0 0 0 0 0 7 = = m a c h i n e t i m e r i n t e r r u p t . * /
bne a0 , t 1 , as _ y e t _ u n h a n d l e d
bne a0 , t 1 , te s t _ i f _ e x t e r n a l _ i n t e r r u p t
lw t 0 , p u l l M a c h i n e T i m e r C o m p a r e R e g i s t e r / * L o a d a d d r e s s o f c o m p a r e r e g i s t e r i n t o t 0 . * /
lw t 1 , p u l l N e x t T i m e / * L o a d t h e a d d r e s s o f u l l N e x t T i m e i n t o t 1 . * /
@ -172,9 +130,15 @@ test_if_timer:
jal v T a s k S w i t c h C o n t e x t
j p r o c e s s e d _ s o u r c e
as_yet_unhandled :
/ / ebreak / * E x t e r n a l i n t e r r u p t ? * /
j a s _ y e t _ u n h a n d l e d
test_if_external_interrupt :
addi t 1 , t 1 , 4 / * 0 x80 0 0 0 0 0 7 + 4 = 0 x80 0 0 0 0 0 b = = M a c h i n e e x t e r n a l i n t e r r u p t . * /
bne a0 , t 1 , i s _ e x c e p t i o n / * O n l y t h i n g l e f t i t c a n b e . * /
jal v P o r t H a n d l e I n t e r r u p t
j p r o c e s s e d _ s o u r c e
is_exception :
ebreak
j i s _ e x c e p t i o n
processed_source :
lw s p , p x C u r r e n t T C B / * L o a d p x C u r r e n t T C B . * /
@ -219,5 +183,48 @@ processed_source:
addi s p , s p , C O N T E X T _ S I Z E
mret
/*-----------------------------------------------------------*/
.align 8
xPortStartFirstTask :
la t 0 , v P o r t T r a p H a n d l e r
csrw m t v e c , t 0
lw s p , p x C u r r e n t T C B / * L o a d p x C u r r e n t T C B . * /
lw s p , 0 ( s p ) / * R e a d s p f r o m f i r s t T C B m e m b e r . * /
lw x1 , 0 ( s p ) / * N o t e f o r s t a r t i n g t h e s c h e d u l e r t h e e x c e p t i o n r e t u r n a d d r e s s i s u s e d a s t h e f u n c t i o n r e t u r n a d d r e s s . * /
lw x5 , 2 * W O R D _ S I Z E ( s p ) / * t 0 * /
lw x6 , 3 * W O R D _ S I Z E ( s p ) / * t 1 * /
lw x7 , 4 * W O R D _ S I Z E ( s p ) / * t 2 * /
lw x8 , 5 * W O R D _ S I Z E ( s p ) / * s0 / f p * /
lw x9 , 6 * W O R D _ S I Z E ( s p ) / * s1 * /
lw x10 , 7 * W O R D _ S I Z E ( s p ) / * a0 * /
lw x11 , 8 * W O R D _ S I Z E ( s p ) / * a1 * /
lw x12 , 9 * W O R D _ S I Z E ( s p ) / * a2 * /
lw x13 , 1 0 * W O R D _ S I Z E ( s p ) / * a3 * /
lw x14 , 1 1 * W O R D _ S I Z E ( s p ) / * a4 * /
lw x15 , 1 2 * W O R D _ S I Z E ( s p ) / * a5 * /
lw x16 , 1 3 * W O R D _ S I Z E ( s p ) / * a6 * /
lw x17 , 1 4 * W O R D _ S I Z E ( s p ) / * a7 * /
lw x18 , 1 5 * W O R D _ S I Z E ( s p ) / * s2 * /
lw x19 , 1 6 * W O R D _ S I Z E ( s p ) / * s3 * /
lw x20 , 1 7 * W O R D _ S I Z E ( s p ) / * s4 * /
lw x21 , 1 8 * W O R D _ S I Z E ( s p ) / * s5 * /
lw x22 , 1 9 * W O R D _ S I Z E ( s p ) / * s6 * /
lw x23 , 2 0 * W O R D _ S I Z E ( s p ) / * s7 * /
lw x24 , 2 1 * W O R D _ S I Z E ( s p ) / * s8 * /
lw x25 , 2 2 * W O R D _ S I Z E ( s p ) / * s9 * /
lw x26 , 2 3 * W O R D _ S I Z E ( s p ) / * s10 * /
lw x27 , 2 4 * W O R D _ S I Z E ( s p ) / * s11 * /
lw x28 , 2 5 * W O R D _ S I Z E ( s p ) / * t 3 * /
lw x29 , 2 6 * W O R D _ S I Z E ( s p ) / * t 4 * /
lw x30 , 2 7 * W O R D _ S I Z E ( s p ) / * t 5 * /
lw x31 , 2 8 * W O R D _ S I Z E ( s p ) / * t 6 * /
addi s p , s p , C O N T E X T _ S I Z E
csrs m s t a t u s , 8 / * E n a b l e m a c h i n e i n t e r r u p t s . * /
ret
/*-----------------------------------------------------------*/