stm32f1xx_STUCpuWalkpatKEIL.s 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180
  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. EXPORT STU_CPUTestWalkpat_R0
  10. EXPORT STU_CPUTestWalkpat_R1
  11. EXPORT STU_CPUTestWalkpat_R2
  12. EXPORT STU_CPUTestWalkpat_R3
  13. EXPORT STU_CPUTestWalkpat_R4
  14. EXPORT STU_CPUTestWalkpat_R5
  15. EXPORT STU_CPUTestWalkpat_R6
  16. EXPORT STU_CPUTestWalkpat_R7
  17. EXPORT STU_CPUTestWalkpat_R8
  18. EXPORT STU_CPUTestWalkpat_R9
  19. EXPORT STU_CPUTestWalkpat_R10
  20. EXPORT STU_CPUTestWalkpat_R11
  21. EXPORT STU_CPUTestWalkpat_R12
  22. ;*******************************************************************************
  23. ; Function Name : STU_CPUTestWalkpat_R0
  24. ; : R0 test register
  25. ; : R1 next register
  26. ; : R4 test data
  27. ; : R5 background data
  28. ; : R6 test count(1-32)
  29. ; Description : Full Cortex-M3 CPU test at start-up
  30. ;*******************************************************************************/
  31. STU_CPUTestWalkpat_R0 PROC ;21.2us
  32. PUSH {R0,R1,R4-R6}
  33. ;********************* Walkpat 1 **************************
  34. MOVS R0, #0x00000000
  35. MOVS R1, #0x00000000
  36. MOVS R4,#0x01
  37. MOVS R5,#0x00000000
  38. MOVS R6, #1
  39. __CPU_WALKPAT_1_LOOP_R0
  40. MOV R0,R4 ;set one bit ,and Verify
  41. CMP R0,R4
  42. BNE __CPU_ERR_R0 ;不等于
  43. CMP R1,R5 ;Verify next word
  44. BNE __CPU_ERR_R0
  45. MOV R0, R5 ;reset one bit ,and Verify
  46. CMP R0,R5
  47. BNE __CPU_ERR_R0 ;不等于
  48. CMP R1,R5 ;Verify next word
  49. BNE __CPU_ERR_R0
  50. LSL R4,#1 ;Test data moved one place to the left
  51. ADD R6,R6,#1
  52. CMP R6,#32
  53. BLE __CPU_WALKPAT_1_LOOP_R0 ;小于等于
  54. ;********************* Walkpat 0 **************************
  55. MOVS R0, #0xFFFFFFFF
  56. MOVS R1, #0xFFFFFFFF
  57. MOVS R4,#0x7FFFFFFF
  58. MOVS R5,#0xFFFFFFFF
  59. MOVS R6, #1
  60. __CPU_WALKPAT_0_LOOP_R0
  61. MOV R0,R4 ;set one bit ,and Verify
  62. CMP R0,R4
  63. BNE __CPU_ERR_R0 ;不等于
  64. CMP R1,R5 ;Verify next word
  65. BNE __CPU_ERR_R0
  66. MOV R0, R5 ;reset one bit ,and Verify
  67. CMP R0,R5
  68. BNE __CPU_ERR_R0 ;不等于
  69. CMP R1,R5 ;Verify next word
  70. BNE __CPU_ERR_R0
  71. ROR R4,#1 ;Test data moved one place to the left
  72. ADD R6,R6,#1
  73. CMP R6,#32
  74. BLE __CPU_WALKPAT_0_LOOP_R0 ;小于等于
  75. B __CPU_RET_R0
  76. __CPU_ERR_R0
  77. B FailSafePOR
  78. __CPU_RET_R0
  79. POP {R0,R1,R4-R6}
  80. BX LR ; return to the caller
  81. ENDP
  82. ;*******************************************************************************
  83. ; Function Name : STU_CPUTestWalkpat_R1
  84. ; : R1 test register
  85. ; : R0 R2 before/next register
  86. ; : R5 test data
  87. ; : R6 background data
  88. ; : R7 test count(1-32)
  89. ; Description : Full Cortex-M3 CPU test at start-up
  90. ;*******************************************************************************/
  91. STU_CPUTestWalkpat_R1 PROC ;26.6us
  92. PUSH {R0-R2,R5-R7}
  93. ;********************* Walkpat 1 **************************
  94. MOVS R1, #0x00000000 ;test cell
  95. MOVS R0, #0x00000000 ;before cell
  96. MOVS R2, #0x00000000 ;next cell
  97. MOVS R5,#0x01 ;test data
  98. MOVS R6,#0x00000000 ;background data
  99. MOVS R7, #1 ;test count
  100. __CPU_WALKPAT_1_LOOP_R1
  101. MOV R1,R5 ;set one bit ,and Verify
  102. CMP R1,R5
  103. BNE __CPU_ERR_R1 ;不等于
  104. CMP R0,R6 ;Verify before cell
  105. BNE __CPU_ERR_R1
  106. CMP R2,R6 ;Verify next cell
  107. BNE __CPU_ERR_R1
  108. MOV R1, R6 ;reset one bit ,and Verify
  109. CMP R1,R6
  110. BNE __CPU_ERR_R1 ;不等于
  111. CMP R0,R6 ;Verify before cell
  112. BNE __CPU_ERR_R1
  113. CMP R2,R6 ;Verify next cell
  114. BNE __CPU_ERR_R1
  115. LSL R5,#1 ;Test data moved one place to the left
  116. ADD R7,R7,#1
  117. CMP R7,#32
  118. BLE __CPU_WALKPAT_1_LOOP_R1 ;小于等于
  119. ;********************* Walkpat 0 **************************
  120. MOVS R1, #0xFFFFFFFF ;test cell
  121. MOVS R0, #0xFFFFFFFF ;before cell
  122. MOVS R2, #0xFFFFFFFF ;next cell
  123. MOVS R5,#0x7FFFFFFF
  124. MOVS R6,#0xFFFFFFFF
  125. MOVS R7, #1
  126. __CPU_WALKPAT_0_LOOP_R1
  127. MOV R1,R5 ;set one bit ,and Verify
  128. CMP R1,R5
  129. BNE __CPU_ERR_R1 ;不等于
  130. CMP R0,R6 ;Verify before cell
  131. BNE __CPU_ERR_R1
  132. CMP R2,R6 ;Verify next cell
  133. BNE __CPU_ERR_R1
  134. MOV R1, R6 ;reset one bit ,and Verify
  135. CMP R1,R6
  136. BNE __CPU_ERR_R1 ;不等于
  137. CMP R0,R6 ;Verify before cell
  138. BNE __CPU_ERR_R1
  139. CMP R2,R6 ;Verify next cell
  140. BNE __CPU_ERR_R1
  141. ROR R5,#1 ;Test data moved one place to the left
  142. ADD R7,R7,#1
  143. CMP R7,#32
  144. BLE __CPU_WALKPAT_0_LOOP_R1 ;小于等于
  145. B __CPU_RET_R1
  146. __CPU_ERR_R1
  147. B FailSafePOR
  148. __CPU_RET_R1
  149. POP {R0-R2,R5-R7}
  150. BX LR ; return to the caller
  151. ENDP
  152. ;*******************************************************************************
  153. ; Function Name : STU_CPUTestWalkpat_R2
  154. ; : R2 test register
  155. ; : R1 R3 before/next register
  156. ; : R6 test data
  157. ; : R7 background data
  158. ; : R8 test count(1-32)
  159. ; Description : Full Cortex-M3 CPU test at start-up
  160. ;*******************************************************************************/
  161. STU_CPUTestWalkpat_R2 PROC
  162. PUSH {R1-R3,R6-R8}
  163. ;********************* Walkpat 1 **************************
  164. MOVS R2, #0x00000000 ;test cell
  165. MOVS R1, #0x00000000 ;before cell
  166. MOVS R3, #0x00000000 ;next cell
  167. MOVS R6,#0x01 ;test data
  168. MOVS R7,#0x00000000 ;background data
  169. MOVS R8, #1 ;test count
  170. __CPU_WALKPAT_1_LOOP_R2
  171. MOV R2,R6 ;set one bit ,and Verify
  172. CMP R2,R6
  173. BNE __CPU_ERR_R2 ;不等于
  174. CMP R1,R7 ;Verify before cell
  175. BNE __CPU_ERR_R2
  176. CMP R3,R7 ;Verify next cell
  177. BNE __CPU_ERR_R2
  178. MOV R2, R7 ;reset one bit ,and Verify
  179. CMP R2,R7
  180. BNE __CPU_ERR_R2 ;不等于
  181. CMP R1,R7 ;Verify before cell
  182. BNE __CPU_ERR_R2
  183. CMP R3,R7 ;Verify next cell
  184. BNE __CPU_ERR_R2
  185. LSL R6,#1 ;Test data moved one place to the left
  186. ADD R8,R8,#1
  187. CMP R8,#32
  188. BLE __CPU_WALKPAT_1_LOOP_R2 ;小于等于
  189. ;********************* Walkpat 0 **************************
  190. MOVS R2, #0xFFFFFFFF ;test cell
  191. MOVS R1, #0xFFFFFFFF ;before cell
  192. MOVS R3, #0xFFFFFFFF ;next cell
  193. MOVS R6,#0x7FFFFFFF
  194. MOVS R7,#0xFFFFFFFF
  195. MOVS R8, #1
  196. __CPU_WALKPAT_0_LOOP_R2
  197. MOV R2,R6 ;set one bit ,and Verify
  198. CMP R2,R6
  199. BNE __CPU_ERR_R2 ;不等于
  200. CMP R1,R7 ;Verify before cell
  201. BNE __CPU_ERR_R2
  202. CMP R3,R7 ;Verify next cell
  203. BNE __CPU_ERR_R2
  204. MOV R2, R7 ;reset one bit ,and Verify
  205. CMP R2,R7
  206. BNE __CPU_ERR_R2 ;不等于
  207. CMP R1,R7 ;Verify before cell
  208. BNE __CPU_ERR_R2
  209. CMP R3,R7 ;Verify next cell
  210. BNE __CPU_ERR_R2
  211. ROR R6,#1 ;Test data moved one place to the left
  212. ADD R8,R8,#1
  213. CMP R8,#32
  214. BLE __CPU_WALKPAT_0_LOOP_R2 ;小于等于
  215. B __CPU_RET_R2
  216. __CPU_ERR_R2
  217. B FailSafePOR
  218. __CPU_RET_R2
  219. POP {R1-R3,R6-R8}
  220. BX LR ; return to the caller
  221. ENDP
  222. ;*******************************************************************************
  223. ; Function Name : STU_CPUTestWalkpat_R3
  224. ; : R3 test register
  225. ; : R2 R4 before/next register
  226. ; : R7 test data
  227. ; : R8 background data
  228. ; : R9 test count(1-32)
  229. ; Description : Full Cortex-M3 CPU test at start-up
  230. ;*******************************************************************************/
  231. STU_CPUTestWalkpat_R3 PROC
  232. PUSH {R2-R4,R7-R9}
  233. ;********************* Walkpat 1 **************************
  234. MOVS R3, #0x00000000 ;test cell
  235. MOVS R2, #0x00000000 ;before cell
  236. MOVS R4, #0x00000000 ;next cell
  237. MOVS R7,#0x01 ;test data
  238. MOVS R8,#0x00000000 ;background data
  239. MOVS R9, #1 ;test count
  240. __CPU_WALKPAT_1_LOOP_R3
  241. MOV R3,R7 ;set one bit ,and Verify
  242. CMP R3,R7
  243. BNE __CPU_ERR_R3 ;不等于
  244. CMP R2,R8 ;Verify before cell
  245. BNE __CPU_ERR_R3
  246. CMP R4,R8 ;Verify next cell
  247. BNE __CPU_ERR_R3
  248. MOV R3, R8 ;reset one bit ,and Verify
  249. CMP R3,R8
  250. BNE __CPU_ERR_R3 ;不等于
  251. CMP R2,R8 ;Verify before cell
  252. BNE __CPU_ERR_R3
  253. CMP R4,R8 ;Verify next cell
  254. BNE __CPU_ERR_R3
  255. LSL R7,#1 ;Test data moved one place to the left
  256. ADD R9,R9,#1
  257. CMP R9,#32
  258. BLE __CPU_WALKPAT_1_LOOP_R3 ;小于等于
  259. ;********************* Walkpat 0 **************************
  260. MOVS R3, #0xFFFFFFFF ;test cell
  261. MOVS R2, #0xFFFFFFFF ;before cell
  262. MOVS R4, #0xFFFFFFFF ;next cell
  263. MOVS R7,#0x7FFFFFFF
  264. MOVS R8,#0xFFFFFFFF
  265. MOVS R9, #1
  266. __CPU_WALKPAT_0_LOOP_R3
  267. MOV R3,R7 ;set one bit ,and Verify
  268. CMP R3,R7
  269. BNE __CPU_ERR_R3 ;不等于
  270. CMP R2,R8 ;Verify before cell
  271. BNE __CPU_ERR_R3
  272. CMP R4,R8 ;Verify next cell
  273. BNE __CPU_ERR_R3
  274. MOV R3, R8 ;reset one bit ,and Verify
  275. CMP R3,R8
  276. BNE __CPU_ERR_R3 ;不等于
  277. CMP R2,R8 ;Verify before cell
  278. BNE __CPU_ERR_R3
  279. CMP R4,R8 ;Verify next cell
  280. BNE __CPU_ERR_R3
  281. ROR R7,#1 ;Test data moved one place to the left
  282. ADD R9,R9,#1
  283. CMP R9,#32
  284. BLE __CPU_WALKPAT_0_LOOP_R3 ;小于等于
  285. B __CPU_RET_R3
  286. __CPU_ERR_R3
  287. B FailSafePOR
  288. __CPU_RET_R3
  289. POP {R2-R4,R7-R9}
  290. BX LR ; return to the caller
  291. ENDP
  292. ;*******************************************************************************
  293. ; Function Name : STU_CPUTestWalkpat_R4
  294. ; : R4 test register
  295. ; : R3 R5 before/next register
  296. ; : R10 test data
  297. ; : R11 background data
  298. ; : R12 test count(1-32)
  299. ; Description : Full Cortex-M3 CPU test at start-up
  300. ;*******************************************************************************/
  301. STU_CPUTestWalkpat_R4 PROC
  302. PUSH {R3-R5,R10-R12}
  303. ;********************* Walkpat 1 **************************
  304. MOVS R4, #0x00000000 ;test cell
  305. MOVS R3, #0x00000000 ;before cell
  306. MOVS R5, #0x00000000 ;next cell
  307. MOVS R10,#0x01 ;test data
  308. MOVS R11,#0x00000000 ;background data
  309. MOVS R12, #1 ;test count
  310. __CPU_WALKPAT_1_LOOP_R4
  311. MOV R4,R10 ;set one bit ,and Verify
  312. CMP R4,R10
  313. BNE __CPU_ERR_R4 ;不等于
  314. CMP R3,R11 ;Verify before cell
  315. BNE __CPU_ERR_R4
  316. CMP R5,R11 ;Verify next cell
  317. BNE __CPU_ERR_R4
  318. MOV R4, R11 ;reset one bit ,and Verify
  319. CMP R4,R11
  320. BNE __CPU_ERR_R4 ;不等于
  321. CMP R3,R11 ;Verify before cell
  322. BNE __CPU_ERR_R4
  323. CMP R5,R11 ;Verify next cell
  324. BNE __CPU_ERR_R4
  325. LSL R10,#1 ;Test data moved one place to the left
  326. ADD R12,R12,#1
  327. CMP R12,#32
  328. BLE __CPU_WALKPAT_1_LOOP_R4 ;小于等于
  329. ;********************* Walkpat 0 **************************
  330. MOVS R4, #0xFFFFFFFF ;test cell
  331. MOVS R3, #0xFFFFFFFF ;before cell
  332. MOVS R5, #0xFFFFFFFF ;next cell
  333. MOVS R10,#0x7FFFFFFF
  334. MOVS R11,#0xFFFFFFFF
  335. MOVS R12, #1
  336. __CPU_WALKPAT_0_LOOP_R4
  337. MOV R4,R10 ;set one bit ,and Verify
  338. CMP R4,R10
  339. BNE __CPU_ERR_R4 ;不等于
  340. CMP R3,R11 ;Verify before cell
  341. BNE __CPU_ERR_R4
  342. CMP R5,R11 ;Verify next cell
  343. BNE __CPU_ERR_R4
  344. MOV R4, R11 ;reset one bit ,and Verify
  345. CMP R4,R11
  346. BNE __CPU_ERR_R4 ;不等于
  347. CMP R3,R11 ;Verify before cell
  348. BNE __CPU_ERR_R4
  349. CMP R5,R11 ;Verify next cell
  350. BNE __CPU_ERR_R4
  351. ROR R10,#1 ;Test data moved one place to the left
  352. ADD R12,R12,#1
  353. CMP R12,#32
  354. BLE __CPU_WALKPAT_0_LOOP_R4 ;小于等于
  355. B __CPU_RET_R4
  356. __CPU_ERR_R4
  357. B FailSafePOR
  358. __CPU_RET_R4
  359. POP {R3-R5,R10-R12}
  360. BX LR ; return to the caller
  361. ENDP
  362. ;*******************************************************************************
  363. ; Function Name : STU_CPUTestWalkpat_R5
  364. ; : R5 test register
  365. ; : R4 R6 before/next register
  366. ; : R10 test data
  367. ; : R11 background data
  368. ; : R12 test count(1-32)
  369. ; Description : Full Cortex-M3 CPU test at start-up
  370. ;*******************************************************************************/
  371. STU_CPUTestWalkpat_R5 PROC
  372. PUSH {R4-R6,R10-R12}
  373. ;********************* Walkpat 1 **************************
  374. MOVS R5, #0x00000000 ;test cell
  375. MOVS R4, #0x00000000 ;before cell
  376. MOVS R6, #0x00000000 ;next cell
  377. MOVS R10,#0x01 ;test data
  378. MOVS R11,#0x00000000 ;background data
  379. MOVS R12, #1 ;test count
  380. __CPU_WALKPAT_1_LOOP_R5
  381. MOV R5,R10 ;set one bit ,and Verify
  382. CMP R5,R10
  383. BNE __CPU_ERR_R5 ;不等于
  384. CMP R4,R11 ;Verify before cell
  385. BNE __CPU_ERR_R5
  386. CMP R6,R11 ;Verify next cell
  387. BNE __CPU_ERR_R5
  388. MOV R5, R11 ;reset one bit ,and Verify
  389. CMP R5,R11
  390. BNE __CPU_ERR_R5 ;不等于
  391. CMP R4,R11 ;Verify before cell
  392. BNE __CPU_ERR_R5
  393. CMP R6,R11 ;Verify next cell
  394. BNE __CPU_ERR_R5
  395. LSL R10,#1 ;Test data moved one place to the left
  396. ADD R12,R12,#1
  397. CMP R12,#32
  398. BLE __CPU_WALKPAT_1_LOOP_R5 ;小于等于
  399. ;********************* Walkpat 0 **************************
  400. MOVS R5, #0xFFFFFFFF ;test cell
  401. MOVS R4, #0xFFFFFFFF ;before cell
  402. MOVS R6, #0xFFFFFFFF ;next cell
  403. MOVS R10,#0x7FFFFFFF
  404. MOVS R11,#0xFFFFFFFF
  405. MOVS R12, #1
  406. __CPU_WALKPAT_0_LOOP_R5
  407. MOV R5,R10 ;set one bit ,and Verify
  408. CMP R5,R10
  409. BNE __CPU_ERR_R5 ;不等于
  410. CMP R4,R11 ;Verify before cell
  411. BNE __CPU_ERR_R5
  412. CMP R6,R11 ;Verify next cell
  413. BNE __CPU_ERR_R5
  414. MOV R5, R11 ;reset one bit ,and Verify
  415. CMP R5,R11
  416. BNE __CPU_ERR_R5 ;不等于
  417. CMP R4,R11 ;Verify before cell
  418. BNE __CPU_ERR_R5
  419. CMP R6,R11 ;Verify next cell
  420. BNE __CPU_ERR_R5
  421. ROR R10,#1 ;Test data moved one place to the left
  422. ADD R12,R12,#1
  423. CMP R12,#32
  424. BLE __CPU_WALKPAT_0_LOOP_R5 ;小于等于
  425. B __CPU_RET_R5
  426. __CPU_ERR_R5
  427. B FailSafePOR
  428. __CPU_RET_R5
  429. POP {R4-R6,R10-R12}
  430. BX LR ; return to the caller
  431. ENDP
  432. ;*******************************************************************************
  433. ; Function Name : STU_CPUTestWalkpat_R6
  434. ; : R6 test register
  435. ; : R5 R7 before/next register
  436. ; : R10 test data
  437. ; : R11 background data
  438. ; : R12 test count(1-32)
  439. ; Description : Full Cortex-M3 CPU test at start-up
  440. ;*******************************************************************************/
  441. STU_CPUTestWalkpat_R6 PROC
  442. PUSH {R5-R7,R10-R12}
  443. ;********************* Walkpat 1 **************************
  444. MOVS R6, #0x00000000 ;test cell
  445. MOVS R5, #0x00000000 ;before cell
  446. MOVS R7, #0x00000000 ;next cell
  447. MOVS R10,#0x01 ;test data
  448. MOVS R11,#0x00000000 ;background data
  449. MOVS R12, #1 ;test count
  450. __CPU_WALKPAT_1_LOOP_R6
  451. MOV R6,R10 ;set one bit ,and Verify
  452. CMP R6,R10
  453. BNE __CPU_ERR_R6 ;不等于
  454. CMP R5,R11 ;Verify before cell
  455. BNE __CPU_ERR_R6
  456. CMP R7,R11 ;Verify next cell
  457. BNE __CPU_ERR_R6
  458. MOV R6, R11 ;reset one bit ,and Verify
  459. CMP R6,R11
  460. BNE __CPU_ERR_R6 ;不等于
  461. CMP R5,R11 ;Verify before cell
  462. BNE __CPU_ERR_R6
  463. CMP R7,R11 ;Verify next cell
  464. BNE __CPU_ERR_R6
  465. LSL R10,#1 ;Test data moved one place to the left
  466. ADD R12,R12,#1
  467. CMP R12,#32
  468. BLE __CPU_WALKPAT_1_LOOP_R6 ;小于等于
  469. ;********************* Walkpat 0 **************************
  470. MOVS R6, #0xFFFFFFFF ;test cell
  471. MOVS R5, #0xFFFFFFFF ;before cell
  472. MOVS R7, #0xFFFFFFFF ;next cell
  473. MOVS R10,#0x7FFFFFFF
  474. MOVS R11,#0xFFFFFFFF
  475. MOVS R12, #1
  476. __CPU_WALKPAT_0_LOOP_R6
  477. MOV R6,R10 ;set one bit ,and Verify
  478. CMP R6,R10
  479. BNE __CPU_ERR_R6 ;不等于
  480. CMP R5,R11 ;Verify before cell
  481. BNE __CPU_ERR_R6
  482. CMP R7,R11 ;Verify next cell
  483. BNE __CPU_ERR_R6
  484. MOV R6, R11 ;reset one bit ,and Verify
  485. CMP R6,R11
  486. BNE __CPU_ERR_R6 ;不等于
  487. CMP R5,R11 ;Verify before cell
  488. BNE __CPU_ERR_R6
  489. CMP R7,R11 ;Verify next cell
  490. BNE __CPU_ERR_R6
  491. ROR R10,#1 ;Test data moved one place to the left
  492. ADD R12,R12,#1
  493. CMP R12,#32
  494. BLE __CPU_WALKPAT_0_LOOP_R6 ;小于等于
  495. B __CPU_RET_R6
  496. __CPU_ERR_R6
  497. B FailSafePOR
  498. __CPU_RET_R6
  499. POP {R5-R7,R10-R12}
  500. BX LR ; return to the caller
  501. ENDP
  502. ;*******************************************************************************
  503. ; Function Name : STU_CPUTestWalkpat_R7
  504. ; : R7 test register
  505. ; : R6 R8 before/next register
  506. ; : R10 test data
  507. ; : R11 background data
  508. ; : R12 test count(1-32)
  509. ; Description : Full Cortex-M3 CPU test at start-up
  510. ;*******************************************************************************/
  511. STU_CPUTestWalkpat_R7 PROC
  512. PUSH {R6-R8,R10-R12}
  513. ;********************* Walkpat 1 **************************
  514. MOVS R7, #0x00000000 ;test cell
  515. MOVS R6, #0x00000000 ;before cell
  516. MOVS R8, #0x00000000 ;next cell
  517. MOVS R10,#0x01 ;test data
  518. MOVS R11,#0x00000000 ;background data
  519. MOVS R12, #1 ;test count
  520. __CPU_WALKPAT_1_LOOP_R7
  521. MOV R7,R10 ;set one bit ,and Verify
  522. CMP R7,R10
  523. BNE __CPU_ERR_R7 ;不等于
  524. CMP R6,R11 ;Verify before cell
  525. BNE __CPU_ERR_R7
  526. CMP R8,R11 ;Verify next cell
  527. BNE __CPU_ERR_R7
  528. MOV R7, R11 ;reset one bit ,and Verify
  529. CMP R7,R11
  530. BNE __CPU_ERR_R7 ;不等于
  531. CMP R6,R11 ;Verify before cell
  532. BNE __CPU_ERR_R7
  533. CMP R8,R11 ;Verify next cell
  534. BNE __CPU_ERR_R7
  535. LSL R10,#1 ;Test data moved one place to the left
  536. ADD R12,R12,#1
  537. CMP R12,#32
  538. BLE __CPU_WALKPAT_1_LOOP_R7 ;小于等于
  539. ;********************* Walkpat 0 **************************
  540. MOVS R7, #0xFFFFFFFF ;test cell
  541. MOVS R6, #0xFFFFFFFF ;before cell
  542. MOVS R8, #0xFFFFFFFF ;next cell
  543. MOVS R10,#0x7FFFFFFF
  544. MOVS R11,#0xFFFFFFFF
  545. MOVS R12, #1
  546. __CPU_WALKPAT_0_LOOP_R7
  547. MOV R7,R10 ;set one bit ,and Verify
  548. CMP R7,R10
  549. BNE __CPU_ERR_R7 ;不等于
  550. CMP R6,R11 ;Verify before cell
  551. BNE __CPU_ERR_R7
  552. CMP R8,R11 ;Verify next cell
  553. BNE __CPU_ERR_R7
  554. MOV R7, R11 ;reset one bit ,and Verify
  555. CMP R7,R11
  556. BNE __CPU_ERR_R7 ;不等于
  557. CMP R6,R11 ;Verify before cell
  558. BNE __CPU_ERR_R7
  559. CMP R8,R11 ;Verify next cell
  560. BNE __CPU_ERR_R7
  561. ROR R10,#1 ;Test data moved one place to the left
  562. ADD R12,R12,#1
  563. CMP R12,#32
  564. BLE __CPU_WALKPAT_0_LOOP_R7 ;小于等于
  565. B __CPU_RET_R7
  566. __CPU_ERR_R7
  567. B FailSafePOR
  568. __CPU_RET_R7
  569. POP {R6-R8,R10-R12}
  570. BX LR ; return to the caller
  571. ENDP
  572. ;*******************************************************************************
  573. ; Function Name : STU_CPUTestWalkpat_R8
  574. ; : R8 test register
  575. ; : R7 R9 before/next register
  576. ; : R10 test data
  577. ; : R11 background data
  578. ; : R12 test count(1-32)
  579. ; Description : Full Cortex-M3 CPU test at start-up
  580. ;*******************************************************************************/
  581. STU_CPUTestWalkpat_R8 PROC
  582. PUSH {R7-R12}
  583. ;********************* Walkpat 1 **************************
  584. MOVS R8, #0x00000000 ;test cell
  585. MOVS R7, #0x00000000 ;before cell
  586. MOVS R9, #0x00000000 ;next cell
  587. MOVS R10,#0x01 ;test data
  588. MOVS R11,#0x00000000 ;background data
  589. MOVS R12, #1 ;test count
  590. __CPU_WALKPAT_1_LOOP_R8
  591. MOV R8,R10 ;set one bit ,and Verify
  592. CMP R8,R10
  593. BNE __CPU_ERR_R8 ;不等于
  594. CMP R7,R11 ;Verify before cell
  595. BNE __CPU_ERR_R8
  596. CMP R9,R11 ;Verify next cell
  597. BNE __CPU_ERR_R8
  598. MOV R8, R11 ;reset one bit ,and Verify
  599. CMP R8,R11
  600. BNE __CPU_ERR_R8 ;不等于
  601. CMP R7,R11 ;Verify before cell
  602. BNE __CPU_ERR_R8
  603. CMP R9,R11 ;Verify next cell
  604. BNE __CPU_ERR_R8
  605. LSL R10,#1 ;Test data moved one place to the left
  606. ADD R12,R12,#1
  607. CMP R12,#32
  608. BLE __CPU_WALKPAT_1_LOOP_R8 ;小于等于
  609. ;********************* Walkpat 0 **************************
  610. MOVS R8, #0xFFFFFFFF ;test cell
  611. MOVS R7, #0xFFFFFFFF ;before cell
  612. MOVS R9, #0xFFFFFFFF ;next cell
  613. MOVS R10,#0x7FFFFFFF
  614. MOVS R11,#0xFFFFFFFF
  615. MOVS R12, #1
  616. __CPU_WALKPAT_0_LOOP_R8
  617. MOV R8,R10 ;set one bit ,and Verify
  618. CMP R8,R10
  619. BNE __CPU_ERR_R8 ;不等于
  620. CMP R7,R11 ;Verify before cell
  621. BNE __CPU_ERR_R8
  622. CMP R9,R11 ;Verify next cell
  623. BNE __CPU_ERR_R8
  624. MOV R8, R11 ;reset one bit ,and Verify
  625. CMP R8,R11
  626. BNE __CPU_ERR_R8 ;不等于
  627. CMP R7,R11 ;Verify before cell
  628. BNE __CPU_ERR_R8
  629. CMP R9,R11 ;Verify next cell
  630. BNE __CPU_ERR_R8
  631. ROR R10,#1 ;Test data moved one place to the left
  632. ADD R12,R12,#1
  633. CMP R12,#32
  634. BLE __CPU_WALKPAT_0_LOOP_R8 ;小于等于
  635. B __CPU_RET_R8
  636. __CPU_ERR_R8
  637. B FailSafePOR
  638. __CPU_RET_R8
  639. POP {R7-R12}
  640. BX LR ; return to the caller
  641. ENDP
  642. ;*******************************************************************************
  643. ; Function Name : STU_CPUTestWalkpat_R9
  644. ; : R9 test register
  645. ; : R8 R10 before/next register
  646. ; : R4 test data
  647. ; : R5 background data
  648. ; : R6 test count(1-32)
  649. ; Description : Full Cortex-M3 CPU test at start-up
  650. ;*******************************************************************************/
  651. STU_CPUTestWalkpat_R9 PROC
  652. PUSH {R8-R10,R4-R6}
  653. ;********************* Walkpat 1 **************************
  654. MOVS R9, #0x00000000 ;test cell
  655. MOVS R8, #0x00000000 ;before cell
  656. MOVS R10, #0x00000000 ;next cell
  657. MOVS R4,#0x01 ;test data
  658. MOVS R5,#0x00000000 ;background data
  659. MOVS R6, #1 ;test count
  660. __CPU_WALKPAT_1_LOOP_R9
  661. MOV R9,R4 ;set one bit ,and Verify
  662. CMP R9,R4
  663. BNE __CPU_ERR_R9 ;不等于
  664. CMP R8,R5 ;Verify before cell
  665. BNE __CPU_ERR_R9
  666. CMP R10,R5 ;Verify next cell
  667. BNE __CPU_ERR_R9
  668. MOV R9, R5 ;reset one bit ,and Verify
  669. CMP R9,R5
  670. BNE __CPU_ERR_R9 ;不等于
  671. CMP R8,R5 ;Verify before cell
  672. BNE __CPU_ERR_R9
  673. CMP R10,R5 ;Verify next cell
  674. BNE __CPU_ERR_R9
  675. LSL R4,#1 ;Test data moved one place to the left
  676. ADD R6,R6,#1
  677. CMP R6,#32
  678. BLE __CPU_WALKPAT_1_LOOP_R9 ;小于等于
  679. ;********************* Walkpat 0 **************************
  680. MOVS R9, #0xFFFFFFFF ;test cell
  681. MOVS R8, #0xFFFFFFFF ;before cell
  682. MOVS R10, #0xFFFFFFFF ;next cell
  683. MOVS R4,#0x7FFFFFFF
  684. MOVS R5,#0xFFFFFFFF
  685. MOVS R6, #1
  686. __CPU_WALKPAT_0_LOOP_R9
  687. MOV R9,R4 ;set one bit ,and Verify
  688. CMP R9,R4
  689. BNE __CPU_ERR_R9 ;不等于
  690. CMP R8,R5 ;Verify before cell
  691. BNE __CPU_ERR_R9
  692. CMP R10,R5 ;Verify next cell
  693. BNE __CPU_ERR_R9
  694. MOV R9, R5 ;reset one bit ,and Verify
  695. CMP R9,R5
  696. BNE __CPU_ERR_R9 ;不等于
  697. CMP R8,R5 ;Verify before cell
  698. BNE __CPU_ERR_R9
  699. CMP R10,R5 ;Verify next cell
  700. BNE __CPU_ERR_R9
  701. ROR R4,#1 ;Test data moved one place to the left
  702. ADD R6,R6,#1
  703. CMP R6,#32
  704. BLE __CPU_WALKPAT_0_LOOP_R9 ;小于等于
  705. B __CPU_RET_R9
  706. __CPU_ERR_R9
  707. B FailSafePOR
  708. __CPU_RET_R9
  709. POP {R8-R10,R4-R6}
  710. BX LR ; return to the caller
  711. ENDP
  712. ;*******************************************************************************
  713. ; Function Name : STU_CPUTestWalkpat_R10
  714. ; : R10 test register
  715. ; : R9 R11 before/next register
  716. ; : R4 test data
  717. ; : R5 background data
  718. ; : R6 test count(1-32)
  719. ; Description : Full Cortex-M3 CPU test at start-up
  720. ;*******************************************************************************/
  721. STU_CPUTestWalkpat_R10 PROC
  722. PUSH {R9-R11,R4-R6}
  723. ;********************* Walkpat 1 **************************
  724. MOVS R10, #0x00000000 ;test cell
  725. MOVS R9, #0x00000000 ;before cell
  726. MOVS R11, #0x00000000 ;next cell
  727. MOVS R4,#0x01 ;test data
  728. MOVS R5,#0x00000000 ;background data
  729. MOVS R6, #1 ;test count
  730. __CPU_WALKPAT_1_LOOP_R10
  731. MOV R10,R4 ;set one bit ,and Verify
  732. CMP R10,R4
  733. BNE __CPU_ERR_R10 ;不等于
  734. CMP R9,R5 ;Verify before cell
  735. BNE __CPU_ERR_R10
  736. CMP R11,R5 ;Verify next cell
  737. BNE __CPU_ERR_R10
  738. MOV R10, R5 ;reset one bit ,and Verify
  739. CMP R10,R5
  740. BNE __CPU_ERR_R10 ;不等于
  741. CMP R9,R5 ;Verify before cell
  742. BNE __CPU_ERR_R10
  743. CMP R11,R5 ;Verify next cell
  744. BNE __CPU_ERR_R10
  745. LSL R4,#1 ;Test data moved one place to the left
  746. ADD R6,R6,#1
  747. CMP R6,#32
  748. BLE __CPU_WALKPAT_1_LOOP_R10 ;小于等于
  749. ;********************* Walkpat 0 **************************
  750. MOVS R10, #0xFFFFFFFF ;test cell
  751. MOVS R9, #0xFFFFFFFF ;before cell
  752. MOVS R11, #0xFFFFFFFF ;next cell
  753. MOVS R4,#0x7FFFFFFF
  754. MOVS R5,#0xFFFFFFFF
  755. MOVS R6, #1
  756. __CPU_WALKPAT_0_LOOP_R10
  757. MOV R10,R4 ;set one bit ,and Verify
  758. CMP R10,R4
  759. BNE __CPU_ERR_R10 ;不等于
  760. CMP R9,R5 ;Verify before cell
  761. BNE __CPU_ERR_R10
  762. CMP R11,R5 ;Verify next cell
  763. BNE __CPU_ERR_R10
  764. MOV R10, R5 ;reset one bit ,and Verify
  765. CMP R10,R5
  766. BNE __CPU_ERR_R10 ;不等于
  767. CMP R9,R5 ;Verify before cell
  768. BNE __CPU_ERR_R10
  769. CMP R11,R5 ;Verify next cell
  770. BNE __CPU_ERR_R10
  771. ROR R4,#1 ;Test data moved one place to the left
  772. ADD R6,R6,#1
  773. CMP R6,#32
  774. BLE __CPU_WALKPAT_0_LOOP_R10 ;小于等于
  775. B __CPU_RET_R10
  776. __CPU_ERR_R10
  777. B FailSafePOR
  778. __CPU_RET_R10
  779. POP {R9-R11,R4-R6}
  780. BX LR ; return to the caller
  781. ENDP
  782. ;*******************************************************************************
  783. ; Function Name : STU_CPUTestWalkpat_R11
  784. ; : R11 test register
  785. ; : R10 R12 before/next register
  786. ; : R4 test data
  787. ; : R5 background data
  788. ; : R6 test count(1-32)
  789. ; Description : Full Cortex-M3 CPU test at start-up
  790. ;*******************************************************************************/
  791. STU_CPUTestWalkpat_R11 PROC
  792. PUSH {R10-R12,R4-R6}
  793. ;********************* Walkpat 1 **************************
  794. MOVS R11, #0x00000000 ;test cell
  795. MOVS R10, #0x00000000 ;before cell
  796. MOVS R12, #0x00000000 ;next cell
  797. MOVS R4,#0x01 ;test data
  798. MOVS R5,#0x00000000 ;background data
  799. MOVS R6, #1 ;test count
  800. __CPU_WALKPAT_1_LOOP_R11
  801. MOV R11,R4 ;set one bit ,and Verify
  802. CMP R11,R4
  803. BNE __CPU_ERR_R11 ;不等于
  804. CMP R10,R5 ;Verify before cell
  805. BNE __CPU_ERR_R11
  806. CMP R12,R5 ;Verify next cell
  807. BNE __CPU_ERR_R11
  808. MOV R11, R5 ;reset one bit ,and Verify
  809. CMP R11,R5
  810. BNE __CPU_ERR_R11 ;不等于
  811. CMP R10,R5 ;Verify before cell
  812. BNE __CPU_ERR_R11
  813. CMP R12,R5 ;Verify next cell
  814. BNE __CPU_ERR_R11
  815. LSL R4,#1 ;Test data moved one place to the left
  816. ADD R6,R6,#1
  817. CMP R6,#32
  818. BLE __CPU_WALKPAT_1_LOOP_R11 ;小于等于
  819. ;********************* Walkpat 0 **************************
  820. MOVS R11, #0xFFFFFFFF ;test cell
  821. MOVS R10, #0xFFFFFFFF ;before cell
  822. MOVS R12, #0xFFFFFFFF ;next cell
  823. MOVS R4,#0x7FFFFFFF
  824. MOVS R5,#0xFFFFFFFF
  825. MOVS R6, #1
  826. __CPU_WALKPAT_0_LOOP_R11
  827. MOV R11,R4 ;set one bit ,and Verify
  828. CMP R11,R4
  829. BNE __CPU_ERR_R11 ;不等于
  830. CMP R10,R5 ;Verify before cell
  831. BNE __CPU_ERR_R11
  832. CMP R12,R5 ;Verify next cell
  833. BNE __CPU_ERR_R11
  834. MOV R11, R5 ;reset one bit ,and Verify
  835. CMP R11,R5
  836. BNE __CPU_ERR_R11 ;不等于
  837. CMP R10,R5 ;Verify before cell
  838. BNE __CPU_ERR_R11
  839. CMP R12,R5 ;Verify next cell
  840. BNE __CPU_ERR_R11
  841. ROR R4,#1 ;Test data moved one place to the left
  842. ADD R6,R6,#1
  843. CMP R6,#32
  844. BLE __CPU_WALKPAT_0_LOOP_R11 ;小于等于
  845. B __CPU_RET_R11
  846. __CPU_ERR_R11
  847. B FailSafePOR
  848. __CPU_RET_R11
  849. POP {R10-R12,R4-R6}
  850. BX LR ; return to the caller
  851. ENDP
  852. ;*******************************************************************************
  853. ; Function Name : STU_CPUTestWalkpat_R12
  854. ; : R12 test register
  855. ; : R11 before register
  856. ; : R4 test data
  857. ; : R5 background data
  858. ; : R6 test count(1-32)
  859. ; Description : Full Cortex-M3 CPU test at start-up
  860. ;*******************************************************************************/
  861. STU_CPUTestWalkpat_R12 PROC
  862. PUSH {R11,R12,R4-R6}
  863. ;********************* Walkpat 1 **************************
  864. MOVS R12, #0x00000000 ;test cell
  865. MOVS R11, #0x00000000 ;before cell
  866. MOVS R4,#0x01 ;test data
  867. MOVS R5,#0x00000000 ;background data
  868. MOVS R6, #1 ;test count
  869. __CPU_WALKPAT_1_LOOP_R12
  870. MOV R12,R4 ;set one bit ,and Verify
  871. CMP R12,R4
  872. BNE __CPU_ERR_R12 ;不等于
  873. CMP R11,R5 ;Verify before cell
  874. BNE __CPU_ERR_R12
  875. MOV R12, R5 ;reset one bit ,and Verify
  876. CMP R12,R5
  877. BNE __CPU_ERR_R12 ;不等于
  878. CMP R11,R5 ;Verify before cell
  879. BNE __CPU_ERR_R12
  880. LSL R4,#1 ;Test data moved one place to the left
  881. ADD R6,R6,#1
  882. CMP R6,#32
  883. BLE __CPU_WALKPAT_1_LOOP_R12 ;小于等于
  884. ;********************* Walkpat 0 **************************
  885. MOVS R12, #0xFFFFFFFF ;test cell
  886. MOVS R11, #0xFFFFFFFF ;before cell
  887. MOVS R4,#0x7FFFFFFF
  888. MOVS R5,#0xFFFFFFFF
  889. MOVS R6, #1
  890. __CPU_WALKPAT_0_LOOP_R12
  891. MOV R12,R4 ;set one bit ,and Verify
  892. CMP R12,R4
  893. BNE __CPU_ERR_R12 ;不等于
  894. CMP R11,R5 ;Verify before cell
  895. BNE __CPU_ERR_R12
  896. MOV R12, R5 ;reset one bit ,and Verify
  897. CMP R12,R5
  898. BNE __CPU_ERR_R12 ;不等于
  899. CMP R11,R5 ;Verify before cell
  900. BNE __CPU_ERR_R12
  901. ROR R4,#1 ;Test data moved one place to the left
  902. ADD R6,R6,#1
  903. CMP R6,#32
  904. BLE __CPU_WALKPAT_0_LOOP_R12 ;小于等于
  905. B __CPU_RET_R12
  906. __CPU_ERR_R12
  907. B FailSafePOR
  908. __CPU_RET_R12
  909. POP {R11,R12,R4-R6}
  910. BX LR ; return to the caller
  911. ENDP
  912. END