stack.asm 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. ;
  2. ; Copyright (c) 2021, Shenzhen Academy of Aerospace Technology
  3. ;
  4. ; SPDX-License-Identifier: Apache-2.0
  5. ;
  6. ; Change Logs:
  7. ; Date Author Notes
  8. ; 2021-11-16 Dystopia the first version
  9. ;
  10. ;-----------------------------------------------------------
  11. ; build thread stack for C6000 DSP
  12. ;-----------------------------------------------------------
  13. ;-----------------------------------------------------------
  14. ; macro definition
  15. ;-----------------------------------------------------------
  16. ADDRESS_MSK .set 0xFFFFFFF0
  17. ;
  18. ;-----------------------------------------------------------
  19. ;
  20. .sect ".text"
  21. ;
  22. ;-----------------------------------------------------------
  23. ;
  24. ;
  25. ; rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, rt_uint8_t *stack_addr, void *texit)
  26. ; tentry --> A4
  27. ; parameter --> B4
  28. ; stack_addr --> A6
  29. ; texit --> B6
  30. ;{
  31. .global rt_hw_stack_init
  32. rt_hw_stack_init:
  33. SUB A6,1,B1 ;
  34. MVKL .S1 ADDRESS_MSK,A1 ;
  35. MVKH .S1 ADDRESS_MSK,A1 ; Build address mask
  36. MVC .S2 CSR,B0 ;
  37. AND -2,B0,B0 ; Clear GIE bit
  38. OR 2,B0,B0 ; Set PGIE bit for interrupt return
  39. AND A1,B1,B1 ; Ensure alignment
  40. ;
  41. ; Actually build the stack frame.
  42. ;
  43. MV .S1 B1,A3
  44. MV .S1 B14,A2
  45. STDW .D2T1 A3:A2,*--B1[1] ; Initial B15:B14
  46. SUBAW .D2 B1,2,B1
  47. ZERO A2
  48. ZERO A3 ; Clear value
  49. STDW .D2T1 A3:A2,*B1--[1] ; Initial A15:A14
  50. STDW .D2T1 A3:A2,*B1--[1] ; Initial A13:A12
  51. STDW .D2T1 A3:A2,*B1--[1] ; Initial A11:A10
  52. STDW .D2T1 A3:A2,*B1--[1] ; Initial A9:A8
  53. STDW .D2T1 A3:A2,*B1--[1] ; Initial A7:A6
  54. MV .S1 B4,A2
  55. STDW .D2T1 A3:A2,*B1--[1] ; Initial A5:A4
  56. ZERO A2
  57. STDW .D2T1 A3:A2,*B1--[1] ; Initial A3:A2
  58. STDW .D2T1 A3:A2,*B1--[1] ; Initial A1:A0
  59. STDW .D2T1 A3:A2,*B1--[1] ; Initial A31:A30
  60. STDW .D2T1 A3:A2,*B1--[1] ; Initial A29:A28
  61. STDW .D2T1 A3:A2,*B1--[1] ; Initial A27:A26
  62. STDW .D2T1 A3:A2,*B1--[1] ; Initial A25:A24
  63. STDW .D2T1 A3:A2,*B1--[1] ; Initial A23:A22
  64. STDW .D2T1 A3:A2,*B1--[1] ; Initial A21:A20
  65. STDW .D2T1 A3:A2,*B1--[1] ; Initial A19:A18
  66. STDW .D2T1 A3:A2,*B1--[1] ; Initial A17:A16
  67. STDW .D2T1 A3:A2,*B1--[1] ; Initial B13:B12
  68. STDW .D2T1 A3:A2,*B1--[1] ; Initial B11:B10
  69. STDW .D2T1 A3:A2,*B1--[1] ; Initial B9:B8
  70. STDW .D2T1 A3:A2,*B1--[1] ; Initial B7:B6
  71. STDW .D2T1 A3:A2,*B1--[1] ; Initial B5:B4
  72. MV .S1 B6,A3
  73. STDW .D2T1 A3:A2,*B1--[1] ; Initial B3:B2
  74. ZERO A3
  75. STDW .D2T1 A3:A2,*B1--[1] ; Initial B1:B0
  76. STDW .D2T1 A3:A2,*B1--[1] ; Initial B31:B30
  77. STDW .D2T1 A3:A2,*B1--[1] ; Initial B29:B28
  78. STDW .D2T1 A3:A2,*B1--[1] ; Initial B27:B26
  79. STDW .D2T1 A3:A2,*B1--[1] ; Initial B25:B24
  80. STDW .D2T1 A3:A2,*B1--[1] ; Initial B23:B22
  81. STDW .D2T1 A3:A2,*B1--[1] ; Initial B21:B20
  82. STDW .D2T1 A3:A2,*B1--[1] ; Initial B19:B18
  83. STDW .D2T1 A3:A2,*B1--[1] ; Initial B17:B16
  84. MV .S1 A4,A3
  85. MV .S1 B0,A2
  86. STDW .D2T1 A3:A2,*B1--[1] ; Initial PC:CSR
  87. ZERO A2
  88. ZERO A3
  89. STDW .D2T1 A3:A2,*B1--[1] ; Initial ILC:RILC
  90. B B3
  91. MVKL .S2 0x3,B0
  92. MV .S1 B0,A3
  93. MVKL .S1 1,A2
  94. STDW .D2T1 A3:A2,*B1--[1] ; Initial TSR:stack type
  95. MV .S1 B1,A4 ; Save to TCB
  96. ;}
  97. .end