123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- ;
- ; Copyright (c) 2021, Shenzhen Academy of Aerospace Technology
- ;
- ; SPDX-License-Identifier: Apache-2.0
- ;
- ; Change Logs:
- ; Date Author Notes
- ; 2021-11-16 Dystopia the first version
- ;
- ;-----------------------------------------------------------
- ; build thread stack for C6000 DSP
- ;-----------------------------------------------------------
- ;-----------------------------------------------------------
- ; macro definition
- ;-----------------------------------------------------------
- ADDRESS_MSK .set 0xFFFFFFF0
- ;
- ;-----------------------------------------------------------
- ;
- .sect ".text"
- ;
- ;-----------------------------------------------------------
- ;
- ;
- ; rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, rt_uint8_t *stack_addr, void *texit)
- ; tentry --> A4
- ; parameter --> B4
- ; stack_addr --> A6
- ; texit --> B6
- ;{
- .global rt_hw_stack_init
- rt_hw_stack_init:
- SUB A6,1,B1 ;
- MVKL .S1 ADDRESS_MSK,A1 ;
- MVKH .S1 ADDRESS_MSK,A1 ; Build address mask
- MVC .S2 CSR,B0 ;
- AND -2,B0,B0 ; Clear GIE bit
- OR 2,B0,B0 ; Set PGIE bit for interrupt return
- AND A1,B1,B1 ; Ensure alignment
- ;
- ; Actually build the stack frame.
- ;
- MV .S1 B1,A3
- MV .S1 B14,A2
- STDW .D2T1 A3:A2,*--B1[1] ; Initial B15:B14
- SUBAW .D2 B1,2,B1
- ZERO A2
- ZERO A3 ; Clear value
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A15:A14
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A13:A12
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A11:A10
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A9:A8
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A7:A6
- MV .S1 B4,A2
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A5:A4
- ZERO A2
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A3:A2
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A1:A0
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A31:A30
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A29:A28
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A27:A26
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A25:A24
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A23:A22
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A21:A20
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A19:A18
- STDW .D2T1 A3:A2,*B1--[1] ; Initial A17:A16
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B13:B12
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B11:B10
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B9:B8
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B7:B6
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B5:B4
- MV .S1 B6,A3
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B3:B2
- ZERO A3
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B1:B0
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B31:B30
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B29:B28
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B27:B26
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B25:B24
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B23:B22
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B21:B20
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B19:B18
- STDW .D2T1 A3:A2,*B1--[1] ; Initial B17:B16
- MV .S1 A4,A3
- MV .S1 B0,A2
- STDW .D2T1 A3:A2,*B1--[1] ; Initial PC:CSR
- ZERO A2
- ZERO A3
- STDW .D2T1 A3:A2,*B1--[1] ; Initial ILC:RILC
- B B3
- MVKL .S2 0x3,B0
- MV .S1 B0,A3
- MVKL .S1 1,A2
- STDW .D2T1 A3:A2,*B1--[1] ; Initial TSR:stack type
- MV .S1 B1,A4 ; Save to TCB
- ;}
- .end
|