stm32f1xx_STURamWalkpatKEIL.s 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. ;******************************************************************************
  2. THUMB
  3. REQUIRE8
  4. PRESERVE8
  5. AREA |.text|, CODE, READONLY, ALIGN=2
  6. ; Reference to the FailSafe routine to be executed in case of non-recoverable
  7. ; failure
  8. IMPORT FailSafePOR
  9. ;*******************************************************************************
  10. ; Function Name : STL_TranspRamMarchCXStep
  11. ; Description : Transparent RAM walkpat test for run time
  12. ; Input : R0 .. RAM begin (first address to test),
  13. ; R1 .. Buffer begin (First address of backup buffer)
  14. ; R2 .. Background pattern
  15. ; R4 .. test cell data
  16. ; R5 .. cout for words test loop address offset
  17. ; R6 .. read data
  18. ; R7 .. befor/next cell address
  19. ; R8 .. Background data 0 OR 0xFFFFFFFF
  20. ; R9 .. cout for word test loop
  21. ; Return : TEST_SUCCESSFULL (=1)
  22. ;*******************************************************************************/
  23. STU_RamWalkpatStep PROC ;195.6us
  24. EXPORT STU_RamWalkpatStep
  25. PUSH {R4-R9}
  26. MOVS R4, #0
  27. MOVS R5, #0
  28. __BACKUP_LOOP ;save content of the RAM slice into the backup buffer and reset test uint
  29. LDR R6,[R0, R5]
  30. STR R6,[R1, R5]
  31. STR R4,[R0, R5] ;reset test word
  32. ADD R5,R5,#4
  33. CMP R5, #24
  34. BLT __BACKUP_LOOP
  35. ;********************* Walkpat 1 **************************
  36. MOVS R5, #4
  37. MOVS R8, #0
  38. __STEP_TEST_WORDS_LOOP
  39. MOVS R4,#0x01
  40. MOVS R9, #1
  41. __STEP_TEST_WORD_LOOP
  42. STR R4,[R0, R5] ;set one bit ,and Verify
  43. LDR R6,[R0, R5]
  44. CMP R4,R6
  45. BNE __STEP_ERR
  46. ADD R7,R5,#4 ;Verify next word
  47. LDR R6,[R0, R7]
  48. CMP R8,R6
  49. BNE __STEP_ERR
  50. SUBS R7,R5,#4 ;Verify before word
  51. LDR R6,[R0, R7]
  52. CMP R8,R6
  53. BNE __STEP_ERR
  54. STR R8,[R0, R5] ;reset ont bit ,and Verify
  55. LDR R6,[R0, R5]
  56. CMP R8,R6
  57. BNE __STEP_ERR
  58. ADD R7,R5,#4 ;Verify next word
  59. LDR R6,[R0, R7]
  60. CMP R8,R6
  61. BNE __STEP_ERR
  62. SUBS R7,R5,#4 ;Verify before word
  63. LDR R6,[R0, R7]
  64. CMP R8,R6
  65. BNE __STEP_ERR
  66. LSL R4,#1 ;Test data moved one place to the left
  67. ADD R9,R9,#1
  68. CMP R9,#32
  69. BLE __STEP_TEST_WORD_LOOP
  70. ADD R5,R5,#4 ;Test next word
  71. CMP R5, #20
  72. BLT __STEP_TEST_WORDS_LOOP
  73. ;********************* Walkpat 0 **************************
  74. MOVS R4, #0xFFFFFFFF
  75. MOVS R5, #0
  76. __BACKGROUND_LOOP
  77. STR R4,[R0, R5] ;set test word
  78. ADD R5,R5,#4
  79. CMP R5, #24
  80. BLT __BACKGROUND_LOOP
  81. MOVS R5, #4
  82. MOVS R8, #0xFFFFFFFF
  83. __STEP_TEST_WORDS_LOOP_2
  84. MOVS R4,#0x7FFFFFFF
  85. MOVS R9, #1
  86. __STEP_TEST_WORD_LOOP_2
  87. STR R4,[R0, R5] ;set one bit ,and Verify
  88. LDR R6,[R0, R5]
  89. CMP R4,R6
  90. BNE __STEP_ERR
  91. ADD R7,R5,#4 ;Verify next word
  92. LDR R6,[R0, R7]
  93. CMP R8,R6
  94. BNE __STEP_ERR
  95. SUBS R7,R5,#4 ;Verify before word
  96. LDR R6,[R0, R7]
  97. CMP R8,R6
  98. BNE __STEP_ERR
  99. STR R8,[R0, R5] ;reset ont bit ,and Verify
  100. LDR R6,[R0, R5]
  101. CMP R8,R6
  102. BNE __STEP_ERR
  103. ADD R7,R5,#4 ;Verify next word
  104. LDR R6,[R0, R7]
  105. CMP R8,R6
  106. BNE __STEP_ERR
  107. SUBS R7,R5,#4 ;Verify before word
  108. LDR R6,[R0, R7]
  109. CMP R8,R6
  110. BNE __STEP_ERR
  111. ROR R4,#1 ;Test data moved one place to the left
  112. ADD R9,R9,#1
  113. CMP R9,#32
  114. BLE __STEP_TEST_WORD_LOOP_2
  115. ADD R5,R5,#4 ;Test next word
  116. CMP R5, #20
  117. BLT __STEP_TEST_WORDS_LOOP_2
  118. MOVS R5, #0
  119. __RESTORE_LOOP ;restore content of the RAM slice back from the backup buffer
  120. LDR R6,[R1, R5]
  121. STR R6,[R0, R5]
  122. ADD R5,R5,#4
  123. CMP R5, #24
  124. BLT __RESTORE_LOOP
  125. MOVS R0, #1 ; Correct return
  126. B __STEP_RET
  127. __STEP_ERR
  128. MOVS R0, #0 ; error result
  129. __STEP_RET
  130. POP {R4-R9}
  131. BX LR ; return to the caller
  132. ENDP
  133. ;*******************************************************************************
  134. ; Function Name : STL_TranspRamMarchCXStep
  135. ; Description : Transparent walkpat test for startup
  136. ; Input : R0 .. RAM begin (first address to test),
  137. ; R1 .. RAM size (byte)
  138. ; R2 .. Background pattern
  139. ; R4 .. test cell data
  140. ; R5 .. cout for words test loop address offset
  141. ; R6 .. read data
  142. ; R7 .. befor/next cell address
  143. ; R8 .. Background data 0 OR 0xFFFFFFFF
  144. ; R9 .. cout for word test loop
  145. ; Return : TEST_SUCCESSFULL (=1)
  146. ;*******************************************************************************/
  147. STU_FullRamWalkpat PROC
  148. EXPORT STU_FullRamWalkpat
  149. PUSH {R4-R9}
  150. ;********************* Walkpat 1 **************************
  151. MOVS R4, #0
  152. MOVS R5, #0
  153. __FULL_LOOP_1 ;reset test uint
  154. STR R4,[R0, R5] ;reset test word
  155. ADD R5,R5,#4
  156. CMP R5, R1
  157. BLT __FULL_LOOP_1 ;带符号数小于
  158. MOVS R5, #0
  159. MOVS R8, #0
  160. __FULL_TEST_WORDS_LOOP
  161. MOVS R4,#0x01
  162. MOVS R9, #1
  163. __FULL_TEST_WORD_LOOP
  164. STR R4,[R0, R5] ;set one bit ,and Verify
  165. LDR R6,[R0, R5]
  166. CMP R4,R6
  167. BNE __FULL_ERR
  168. CMP R5, #0
  169. BEQ __VERIFY_NEXT_1
  170. SUBS R7,R5,#4 ;Verify before word
  171. LDR R6,[R0, R7]
  172. CMP R8,R6
  173. BNE __FULL_ERR
  174. __VERIFY_NEXT_1
  175. ADD R7,R5,#4 ;Verify next word
  176. CMP R7, R1
  177. BGE __FULL_STEP_3
  178. LDR R6,[R0, R7]
  179. CMP R8,R6
  180. BNE __FULL_ERR
  181. __FULL_STEP_3
  182. STR R8,[R0, R5] ;reset one bit ,and Verify
  183. LDR R6,[R0, R5]
  184. CMP R8,R6
  185. BNE __FULL_ERR
  186. CMP R5, #0
  187. BEQ __VERIFY_NEXT_2
  188. SUBS R7,R5,#4 ;Verify before word
  189. LDR R6,[R0, R7]
  190. CMP R8,R6
  191. BNE __FULL_ERR
  192. __VERIFY_NEXT_2
  193. ADD R7,R5,#4 ;Verify next word
  194. CMP R7, R1
  195. BGE __FULL_STEP_4
  196. LDR R6,[R0, R7]
  197. CMP R8,R6
  198. BNE __FULL_ERR
  199. __FULL_STEP_4
  200. LSL R4,#1 ;Test data moved one place to the left
  201. ADD R9,R9,#1
  202. CMP R9,#32
  203. BLE __FULL_TEST_WORD_LOOP ;小于等于
  204. ADD R5,R5,#4 ;Test next word
  205. CMP R5, R1
  206. BLT __FULL_TEST_WORDS_LOOP
  207. ;********************* Walkpat 0 **************************
  208. MOVS R4, #0xFFFFFFFF ;background data
  209. MOVS R5, #0
  210. __FULL_LOOP_2
  211. STR R4,[R0, R5] ;set test word
  212. ADD R5,R5,#4
  213. CMP R5, R1
  214. BLT __FULL_LOOP_2 ;带符号数小于
  215. MOVS R5, #0
  216. MOVS R8, #0xFFFFFFFF
  217. __FULL_TEST_WORDS_LOOP_2
  218. MOVS R4,#0x7FFFFFFF ;first test data
  219. MOVS R9, #1
  220. __FULL_TEST_WORD_LOOP_2
  221. STR R4,[R0, R5] ;set one bit ,and Verify
  222. LDR R6,[R0, R5]
  223. CMP R4,R6
  224. BNE __FULL_ERR
  225. CMP R5, #0
  226. BEQ __VERIFY_NEXT_3
  227. SUBS R7,R5,#4 ;Verify before word
  228. LDR R6,[R0, R7]
  229. CMP R8,R6
  230. BNE __FULL_ERR
  231. __VERIFY_NEXT_3
  232. ADD R7,R5,#4 ;Verify next word
  233. CMP R7, R1
  234. BGE __FULL_STEP_5
  235. LDR R6,[R0, R7]
  236. CMP R8,R6
  237. BNE __FULL_ERR
  238. __FULL_STEP_5
  239. STR R8,[R0, R5] ;set one bit ,and Verify
  240. LDR R6,[R0, R5]
  241. CMP R8,R6
  242. BNE __FULL_ERR
  243. CMP R5, #0
  244. BEQ __VERIFY_NEXT_4
  245. SUBS R7,R5,#4 ;Verify before word
  246. LDR R6,[R0, R7]
  247. CMP R8,R6
  248. BNE __FULL_ERR
  249. __VERIFY_NEXT_4
  250. ADD R7,R5,#4 ;Verify next word
  251. CMP R7, R1
  252. BGE __FULL_STEP_6
  253. LDR R6,[R0, R7]
  254. CMP R8,R6
  255. BNE __FULL_ERR
  256. __FULL_STEP_6
  257. ROR R4,#1 ;Test data moved one place to the right
  258. ADD R9,R9,#1
  259. CMP R9,#32
  260. BLE __FULL_TEST_WORD_LOOP_2 ;小于等于
  261. ADD R5,R5,#4 ;Test next word
  262. CMP R5, R1
  263. BLT __FULL_TEST_WORDS_LOOP_2
  264. MOVS R0, #1 ; Correct return
  265. B __FULL_RET
  266. __FULL_ERR
  267. MOVS R0, #0 ; error result
  268. __FULL_RET
  269. POP {R4-R9}
  270. BX LR ; return to the caller
  271. ENDP
  272. END