;****************************************************************************** THUMB REQUIRE8 PRESERVE8 AREA |.text|, CODE, READONLY, ALIGN=2 ; Reference to the FailSafe routine to be executed in case of non-recoverable ; failure IMPORT FailSafePOR EXPORT STU_CPUTestWalkpat_R0 EXPORT STU_CPUTestWalkpat_R1 EXPORT STU_CPUTestWalkpat_R2 EXPORT STU_CPUTestWalkpat_R3 EXPORT STU_CPUTestWalkpat_R4 EXPORT STU_CPUTestWalkpat_R5 EXPORT STU_CPUTestWalkpat_R6 EXPORT STU_CPUTestWalkpat_R7 EXPORT STU_CPUTestWalkpat_R8 EXPORT STU_CPUTestWalkpat_R9 EXPORT STU_CPUTestWalkpat_R10 EXPORT STU_CPUTestWalkpat_R11 EXPORT STU_CPUTestWalkpat_R12 ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R0 ; : R0 test register ; : R1 next register ; : R4 test data ; : R5 background data ; : R6 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R0 PROC ;21.2us PUSH {R0,R1,R4-R6} ;********************* Walkpat 1 ************************** MOVS R0, #0x00000000 MOVS R1, #0x00000000 MOVS R4,#0x01 MOVS R5,#0x00000000 MOVS R6, #1 __CPU_WALKPAT_1_LOOP_R0 MOV R0,R4 ;set one bit ,and Verify CMP R0,R4 BNE __CPU_ERR_R0 ;不等于 CMP R1,R5 ;Verify next word BNE __CPU_ERR_R0 MOV R0, R5 ;reset one bit ,and Verify CMP R0,R5 BNE __CPU_ERR_R0 ;不等于 CMP R1,R5 ;Verify next word BNE __CPU_ERR_R0 LSL R4,#1 ;Test data moved one place to the left ADD R6,R6,#1 CMP R6,#32 BLE __CPU_WALKPAT_1_LOOP_R0 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R0, #0xFFFFFFFF MOVS R1, #0xFFFFFFFF MOVS R4,#0x7FFFFFFF MOVS R5,#0xFFFFFFFF MOVS R6, #1 __CPU_WALKPAT_0_LOOP_R0 MOV R0,R4 ;set one bit ,and Verify CMP R0,R4 BNE __CPU_ERR_R0 ;不等于 CMP R1,R5 ;Verify next word BNE __CPU_ERR_R0 MOV R0, R5 ;reset one bit ,and Verify CMP R0,R5 BNE __CPU_ERR_R0 ;不等于 CMP R1,R5 ;Verify next word BNE __CPU_ERR_R0 ROR R4,#1 ;Test data moved one place to the left ADD R6,R6,#1 CMP R6,#32 BLE __CPU_WALKPAT_0_LOOP_R0 ;小于等于 B __CPU_RET_R0 __CPU_ERR_R0 B FailSafePOR __CPU_RET_R0 POP {R0,R1,R4-R6} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R1 ; : R1 test register ; : R0 R2 before/next register ; : R5 test data ; : R6 background data ; : R7 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R1 PROC ;26.6us PUSH {R0-R2,R5-R7} ;********************* Walkpat 1 ************************** MOVS R1, #0x00000000 ;test cell MOVS R0, #0x00000000 ;before cell MOVS R2, #0x00000000 ;next cell MOVS R5,#0x01 ;test data MOVS R6,#0x00000000 ;background data MOVS R7, #1 ;test count __CPU_WALKPAT_1_LOOP_R1 MOV R1,R5 ;set one bit ,and Verify CMP R1,R5 BNE __CPU_ERR_R1 ;不等于 CMP R0,R6 ;Verify before cell BNE __CPU_ERR_R1 CMP R2,R6 ;Verify next cell BNE __CPU_ERR_R1 MOV R1, R6 ;reset one bit ,and Verify CMP R1,R6 BNE __CPU_ERR_R1 ;不等于 CMP R0,R6 ;Verify before cell BNE __CPU_ERR_R1 CMP R2,R6 ;Verify next cell BNE __CPU_ERR_R1 LSL R5,#1 ;Test data moved one place to the left ADD R7,R7,#1 CMP R7,#32 BLE __CPU_WALKPAT_1_LOOP_R1 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R1, #0xFFFFFFFF ;test cell MOVS R0, #0xFFFFFFFF ;before cell MOVS R2, #0xFFFFFFFF ;next cell MOVS R5,#0x7FFFFFFF MOVS R6,#0xFFFFFFFF MOVS R7, #1 __CPU_WALKPAT_0_LOOP_R1 MOV R1,R5 ;set one bit ,and Verify CMP R1,R5 BNE __CPU_ERR_R1 ;不等于 CMP R0,R6 ;Verify before cell BNE __CPU_ERR_R1 CMP R2,R6 ;Verify next cell BNE __CPU_ERR_R1 MOV R1, R6 ;reset one bit ,and Verify CMP R1,R6 BNE __CPU_ERR_R1 ;不等于 CMP R0,R6 ;Verify before cell BNE __CPU_ERR_R1 CMP R2,R6 ;Verify next cell BNE __CPU_ERR_R1 ROR R5,#1 ;Test data moved one place to the left ADD R7,R7,#1 CMP R7,#32 BLE __CPU_WALKPAT_0_LOOP_R1 ;小于等于 B __CPU_RET_R1 __CPU_ERR_R1 B FailSafePOR __CPU_RET_R1 POP {R0-R2,R5-R7} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R2 ; : R2 test register ; : R1 R3 before/next register ; : R6 test data ; : R7 background data ; : R8 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R2 PROC PUSH {R1-R3,R6-R8} ;********************* Walkpat 1 ************************** MOVS R2, #0x00000000 ;test cell MOVS R1, #0x00000000 ;before cell MOVS R3, #0x00000000 ;next cell MOVS R6,#0x01 ;test data MOVS R7,#0x00000000 ;background data MOVS R8, #1 ;test count __CPU_WALKPAT_1_LOOP_R2 MOV R2,R6 ;set one bit ,and Verify CMP R2,R6 BNE __CPU_ERR_R2 ;不等于 CMP R1,R7 ;Verify before cell BNE __CPU_ERR_R2 CMP R3,R7 ;Verify next cell BNE __CPU_ERR_R2 MOV R2, R7 ;reset one bit ,and Verify CMP R2,R7 BNE __CPU_ERR_R2 ;不等于 CMP R1,R7 ;Verify before cell BNE __CPU_ERR_R2 CMP R3,R7 ;Verify next cell BNE __CPU_ERR_R2 LSL R6,#1 ;Test data moved one place to the left ADD R8,R8,#1 CMP R8,#32 BLE __CPU_WALKPAT_1_LOOP_R2 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R2, #0xFFFFFFFF ;test cell MOVS R1, #0xFFFFFFFF ;before cell MOVS R3, #0xFFFFFFFF ;next cell MOVS R6,#0x7FFFFFFF MOVS R7,#0xFFFFFFFF MOVS R8, #1 __CPU_WALKPAT_0_LOOP_R2 MOV R2,R6 ;set one bit ,and Verify CMP R2,R6 BNE __CPU_ERR_R2 ;不等于 CMP R1,R7 ;Verify before cell BNE __CPU_ERR_R2 CMP R3,R7 ;Verify next cell BNE __CPU_ERR_R2 MOV R2, R7 ;reset one bit ,and Verify CMP R2,R7 BNE __CPU_ERR_R2 ;不等于 CMP R1,R7 ;Verify before cell BNE __CPU_ERR_R2 CMP R3,R7 ;Verify next cell BNE __CPU_ERR_R2 ROR R6,#1 ;Test data moved one place to the left ADD R8,R8,#1 CMP R8,#32 BLE __CPU_WALKPAT_0_LOOP_R2 ;小于等于 B __CPU_RET_R2 __CPU_ERR_R2 B FailSafePOR __CPU_RET_R2 POP {R1-R3,R6-R8} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R3 ; : R3 test register ; : R2 R4 before/next register ; : R7 test data ; : R8 background data ; : R9 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R3 PROC PUSH {R2-R4,R7-R9} ;********************* Walkpat 1 ************************** MOVS R3, #0x00000000 ;test cell MOVS R2, #0x00000000 ;before cell MOVS R4, #0x00000000 ;next cell MOVS R7,#0x01 ;test data MOVS R8,#0x00000000 ;background data MOVS R9, #1 ;test count __CPU_WALKPAT_1_LOOP_R3 MOV R3,R7 ;set one bit ,and Verify CMP R3,R7 BNE __CPU_ERR_R3 ;不等于 CMP R2,R8 ;Verify before cell BNE __CPU_ERR_R3 CMP R4,R8 ;Verify next cell BNE __CPU_ERR_R3 MOV R3, R8 ;reset one bit ,and Verify CMP R3,R8 BNE __CPU_ERR_R3 ;不等于 CMP R2,R8 ;Verify before cell BNE __CPU_ERR_R3 CMP R4,R8 ;Verify next cell BNE __CPU_ERR_R3 LSL R7,#1 ;Test data moved one place to the left ADD R9,R9,#1 CMP R9,#32 BLE __CPU_WALKPAT_1_LOOP_R3 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R3, #0xFFFFFFFF ;test cell MOVS R2, #0xFFFFFFFF ;before cell MOVS R4, #0xFFFFFFFF ;next cell MOVS R7,#0x7FFFFFFF MOVS R8,#0xFFFFFFFF MOVS R9, #1 __CPU_WALKPAT_0_LOOP_R3 MOV R3,R7 ;set one bit ,and Verify CMP R3,R7 BNE __CPU_ERR_R3 ;不等于 CMP R2,R8 ;Verify before cell BNE __CPU_ERR_R3 CMP R4,R8 ;Verify next cell BNE __CPU_ERR_R3 MOV R3, R8 ;reset one bit ,and Verify CMP R3,R8 BNE __CPU_ERR_R3 ;不等于 CMP R2,R8 ;Verify before cell BNE __CPU_ERR_R3 CMP R4,R8 ;Verify next cell BNE __CPU_ERR_R3 ROR R7,#1 ;Test data moved one place to the left ADD R9,R9,#1 CMP R9,#32 BLE __CPU_WALKPAT_0_LOOP_R3 ;小于等于 B __CPU_RET_R3 __CPU_ERR_R3 B FailSafePOR __CPU_RET_R3 POP {R2-R4,R7-R9} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R4 ; : R4 test register ; : R3 R5 before/next register ; : R10 test data ; : R11 background data ; : R12 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R4 PROC PUSH {R3-R5,R10-R12} ;********************* Walkpat 1 ************************** MOVS R4, #0x00000000 ;test cell MOVS R3, #0x00000000 ;before cell MOVS R5, #0x00000000 ;next cell MOVS R10,#0x01 ;test data MOVS R11,#0x00000000 ;background data MOVS R12, #1 ;test count __CPU_WALKPAT_1_LOOP_R4 MOV R4,R10 ;set one bit ,and Verify CMP R4,R10 BNE __CPU_ERR_R4 ;不等于 CMP R3,R11 ;Verify before cell BNE __CPU_ERR_R4 CMP R5,R11 ;Verify next cell BNE __CPU_ERR_R4 MOV R4, R11 ;reset one bit ,and Verify CMP R4,R11 BNE __CPU_ERR_R4 ;不等于 CMP R3,R11 ;Verify before cell BNE __CPU_ERR_R4 CMP R5,R11 ;Verify next cell BNE __CPU_ERR_R4 LSL R10,#1 ;Test data moved one place to the left ADD R12,R12,#1 CMP R12,#32 BLE __CPU_WALKPAT_1_LOOP_R4 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R4, #0xFFFFFFFF ;test cell MOVS R3, #0xFFFFFFFF ;before cell MOVS R5, #0xFFFFFFFF ;next cell MOVS R10,#0x7FFFFFFF MOVS R11,#0xFFFFFFFF MOVS R12, #1 __CPU_WALKPAT_0_LOOP_R4 MOV R4,R10 ;set one bit ,and Verify CMP R4,R10 BNE __CPU_ERR_R4 ;不等于 CMP R3,R11 ;Verify before cell BNE __CPU_ERR_R4 CMP R5,R11 ;Verify next cell BNE __CPU_ERR_R4 MOV R4, R11 ;reset one bit ,and Verify CMP R4,R11 BNE __CPU_ERR_R4 ;不等于 CMP R3,R11 ;Verify before cell BNE __CPU_ERR_R4 CMP R5,R11 ;Verify next cell BNE __CPU_ERR_R4 ROR R10,#1 ;Test data moved one place to the left ADD R12,R12,#1 CMP R12,#32 BLE __CPU_WALKPAT_0_LOOP_R4 ;小于等于 B __CPU_RET_R4 __CPU_ERR_R4 B FailSafePOR __CPU_RET_R4 POP {R3-R5,R10-R12} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R5 ; : R5 test register ; : R4 R6 before/next register ; : R10 test data ; : R11 background data ; : R12 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R5 PROC PUSH {R4-R6,R10-R12} ;********************* Walkpat 1 ************************** MOVS R5, #0x00000000 ;test cell MOVS R4, #0x00000000 ;before cell MOVS R6, #0x00000000 ;next cell MOVS R10,#0x01 ;test data MOVS R11,#0x00000000 ;background data MOVS R12, #1 ;test count __CPU_WALKPAT_1_LOOP_R5 MOV R5,R10 ;set one bit ,and Verify CMP R5,R10 BNE __CPU_ERR_R5 ;不等于 CMP R4,R11 ;Verify before cell BNE __CPU_ERR_R5 CMP R6,R11 ;Verify next cell BNE __CPU_ERR_R5 MOV R5, R11 ;reset one bit ,and Verify CMP R5,R11 BNE __CPU_ERR_R5 ;不等于 CMP R4,R11 ;Verify before cell BNE __CPU_ERR_R5 CMP R6,R11 ;Verify next cell BNE __CPU_ERR_R5 LSL R10,#1 ;Test data moved one place to the left ADD R12,R12,#1 CMP R12,#32 BLE __CPU_WALKPAT_1_LOOP_R5 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R5, #0xFFFFFFFF ;test cell MOVS R4, #0xFFFFFFFF ;before cell MOVS R6, #0xFFFFFFFF ;next cell MOVS R10,#0x7FFFFFFF MOVS R11,#0xFFFFFFFF MOVS R12, #1 __CPU_WALKPAT_0_LOOP_R5 MOV R5,R10 ;set one bit ,and Verify CMP R5,R10 BNE __CPU_ERR_R5 ;不等于 CMP R4,R11 ;Verify before cell BNE __CPU_ERR_R5 CMP R6,R11 ;Verify next cell BNE __CPU_ERR_R5 MOV R5, R11 ;reset one bit ,and Verify CMP R5,R11 BNE __CPU_ERR_R5 ;不等于 CMP R4,R11 ;Verify before cell BNE __CPU_ERR_R5 CMP R6,R11 ;Verify next cell BNE __CPU_ERR_R5 ROR R10,#1 ;Test data moved one place to the left ADD R12,R12,#1 CMP R12,#32 BLE __CPU_WALKPAT_0_LOOP_R5 ;小于等于 B __CPU_RET_R5 __CPU_ERR_R5 B FailSafePOR __CPU_RET_R5 POP {R4-R6,R10-R12} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R6 ; : R6 test register ; : R5 R7 before/next register ; : R10 test data ; : R11 background data ; : R12 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R6 PROC PUSH {R5-R7,R10-R12} ;********************* Walkpat 1 ************************** MOVS R6, #0x00000000 ;test cell MOVS R5, #0x00000000 ;before cell MOVS R7, #0x00000000 ;next cell MOVS R10,#0x01 ;test data MOVS R11,#0x00000000 ;background data MOVS R12, #1 ;test count __CPU_WALKPAT_1_LOOP_R6 MOV R6,R10 ;set one bit ,and Verify CMP R6,R10 BNE __CPU_ERR_R6 ;不等于 CMP R5,R11 ;Verify before cell BNE __CPU_ERR_R6 CMP R7,R11 ;Verify next cell BNE __CPU_ERR_R6 MOV R6, R11 ;reset one bit ,and Verify CMP R6,R11 BNE __CPU_ERR_R6 ;不等于 CMP R5,R11 ;Verify before cell BNE __CPU_ERR_R6 CMP R7,R11 ;Verify next cell BNE __CPU_ERR_R6 LSL R10,#1 ;Test data moved one place to the left ADD R12,R12,#1 CMP R12,#32 BLE __CPU_WALKPAT_1_LOOP_R6 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R6, #0xFFFFFFFF ;test cell MOVS R5, #0xFFFFFFFF ;before cell MOVS R7, #0xFFFFFFFF ;next cell MOVS R10,#0x7FFFFFFF MOVS R11,#0xFFFFFFFF MOVS R12, #1 __CPU_WALKPAT_0_LOOP_R6 MOV R6,R10 ;set one bit ,and Verify CMP R6,R10 BNE __CPU_ERR_R6 ;不等于 CMP R5,R11 ;Verify before cell BNE __CPU_ERR_R6 CMP R7,R11 ;Verify next cell BNE __CPU_ERR_R6 MOV R6, R11 ;reset one bit ,and Verify CMP R6,R11 BNE __CPU_ERR_R6 ;不等于 CMP R5,R11 ;Verify before cell BNE __CPU_ERR_R6 CMP R7,R11 ;Verify next cell BNE __CPU_ERR_R6 ROR R10,#1 ;Test data moved one place to the left ADD R12,R12,#1 CMP R12,#32 BLE __CPU_WALKPAT_0_LOOP_R6 ;小于等于 B __CPU_RET_R6 __CPU_ERR_R6 B FailSafePOR __CPU_RET_R6 POP {R5-R7,R10-R12} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R7 ; : R7 test register ; : R6 R8 before/next register ; : R10 test data ; : R11 background data ; : R12 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R7 PROC PUSH {R6-R8,R10-R12} ;********************* Walkpat 1 ************************** MOVS R7, #0x00000000 ;test cell MOVS R6, #0x00000000 ;before cell MOVS R8, #0x00000000 ;next cell MOVS R10,#0x01 ;test data MOVS R11,#0x00000000 ;background data MOVS R12, #1 ;test count __CPU_WALKPAT_1_LOOP_R7 MOV R7,R10 ;set one bit ,and Verify CMP R7,R10 BNE __CPU_ERR_R7 ;不等于 CMP R6,R11 ;Verify before cell BNE __CPU_ERR_R7 CMP R8,R11 ;Verify next cell BNE __CPU_ERR_R7 MOV R7, R11 ;reset one bit ,and Verify CMP R7,R11 BNE __CPU_ERR_R7 ;不等于 CMP R6,R11 ;Verify before cell BNE __CPU_ERR_R7 CMP R8,R11 ;Verify next cell BNE __CPU_ERR_R7 LSL R10,#1 ;Test data moved one place to the left ADD R12,R12,#1 CMP R12,#32 BLE __CPU_WALKPAT_1_LOOP_R7 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R7, #0xFFFFFFFF ;test cell MOVS R6, #0xFFFFFFFF ;before cell MOVS R8, #0xFFFFFFFF ;next cell MOVS R10,#0x7FFFFFFF MOVS R11,#0xFFFFFFFF MOVS R12, #1 __CPU_WALKPAT_0_LOOP_R7 MOV R7,R10 ;set one bit ,and Verify CMP R7,R10 BNE __CPU_ERR_R7 ;不等于 CMP R6,R11 ;Verify before cell BNE __CPU_ERR_R7 CMP R8,R11 ;Verify next cell BNE __CPU_ERR_R7 MOV R7, R11 ;reset one bit ,and Verify CMP R7,R11 BNE __CPU_ERR_R7 ;不等于 CMP R6,R11 ;Verify before cell BNE __CPU_ERR_R7 CMP R8,R11 ;Verify next cell BNE __CPU_ERR_R7 ROR R10,#1 ;Test data moved one place to the left ADD R12,R12,#1 CMP R12,#32 BLE __CPU_WALKPAT_0_LOOP_R7 ;小于等于 B __CPU_RET_R7 __CPU_ERR_R7 B FailSafePOR __CPU_RET_R7 POP {R6-R8,R10-R12} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R8 ; : R8 test register ; : R7 R9 before/next register ; : R10 test data ; : R11 background data ; : R12 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R8 PROC PUSH {R7-R12} ;********************* Walkpat 1 ************************** MOVS R8, #0x00000000 ;test cell MOVS R7, #0x00000000 ;before cell MOVS R9, #0x00000000 ;next cell MOVS R10,#0x01 ;test data MOVS R11,#0x00000000 ;background data MOVS R12, #1 ;test count __CPU_WALKPAT_1_LOOP_R8 MOV R8,R10 ;set one bit ,and Verify CMP R8,R10 BNE __CPU_ERR_R8 ;不等于 CMP R7,R11 ;Verify before cell BNE __CPU_ERR_R8 CMP R9,R11 ;Verify next cell BNE __CPU_ERR_R8 MOV R8, R11 ;reset one bit ,and Verify CMP R8,R11 BNE __CPU_ERR_R8 ;不等于 CMP R7,R11 ;Verify before cell BNE __CPU_ERR_R8 CMP R9,R11 ;Verify next cell BNE __CPU_ERR_R8 LSL R10,#1 ;Test data moved one place to the left ADD R12,R12,#1 CMP R12,#32 BLE __CPU_WALKPAT_1_LOOP_R8 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R8, #0xFFFFFFFF ;test cell MOVS R7, #0xFFFFFFFF ;before cell MOVS R9, #0xFFFFFFFF ;next cell MOVS R10,#0x7FFFFFFF MOVS R11,#0xFFFFFFFF MOVS R12, #1 __CPU_WALKPAT_0_LOOP_R8 MOV R8,R10 ;set one bit ,and Verify CMP R8,R10 BNE __CPU_ERR_R8 ;不等于 CMP R7,R11 ;Verify before cell BNE __CPU_ERR_R8 CMP R9,R11 ;Verify next cell BNE __CPU_ERR_R8 MOV R8, R11 ;reset one bit ,and Verify CMP R8,R11 BNE __CPU_ERR_R8 ;不等于 CMP R7,R11 ;Verify before cell BNE __CPU_ERR_R8 CMP R9,R11 ;Verify next cell BNE __CPU_ERR_R8 ROR R10,#1 ;Test data moved one place to the left ADD R12,R12,#1 CMP R12,#32 BLE __CPU_WALKPAT_0_LOOP_R8 ;小于等于 B __CPU_RET_R8 __CPU_ERR_R8 B FailSafePOR __CPU_RET_R8 POP {R7-R12} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R9 ; : R9 test register ; : R8 R10 before/next register ; : R4 test data ; : R5 background data ; : R6 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R9 PROC PUSH {R8-R10,R4-R6} ;********************* Walkpat 1 ************************** MOVS R9, #0x00000000 ;test cell MOVS R8, #0x00000000 ;before cell MOVS R10, #0x00000000 ;next cell MOVS R4,#0x01 ;test data MOVS R5,#0x00000000 ;background data MOVS R6, #1 ;test count __CPU_WALKPAT_1_LOOP_R9 MOV R9,R4 ;set one bit ,and Verify CMP R9,R4 BNE __CPU_ERR_R9 ;不等于 CMP R8,R5 ;Verify before cell BNE __CPU_ERR_R9 CMP R10,R5 ;Verify next cell BNE __CPU_ERR_R9 MOV R9, R5 ;reset one bit ,and Verify CMP R9,R5 BNE __CPU_ERR_R9 ;不等于 CMP R8,R5 ;Verify before cell BNE __CPU_ERR_R9 CMP R10,R5 ;Verify next cell BNE __CPU_ERR_R9 LSL R4,#1 ;Test data moved one place to the left ADD R6,R6,#1 CMP R6,#32 BLE __CPU_WALKPAT_1_LOOP_R9 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R9, #0xFFFFFFFF ;test cell MOVS R8, #0xFFFFFFFF ;before cell MOVS R10, #0xFFFFFFFF ;next cell MOVS R4,#0x7FFFFFFF MOVS R5,#0xFFFFFFFF MOVS R6, #1 __CPU_WALKPAT_0_LOOP_R9 MOV R9,R4 ;set one bit ,and Verify CMP R9,R4 BNE __CPU_ERR_R9 ;不等于 CMP R8,R5 ;Verify before cell BNE __CPU_ERR_R9 CMP R10,R5 ;Verify next cell BNE __CPU_ERR_R9 MOV R9, R5 ;reset one bit ,and Verify CMP R9,R5 BNE __CPU_ERR_R9 ;不等于 CMP R8,R5 ;Verify before cell BNE __CPU_ERR_R9 CMP R10,R5 ;Verify next cell BNE __CPU_ERR_R9 ROR R4,#1 ;Test data moved one place to the left ADD R6,R6,#1 CMP R6,#32 BLE __CPU_WALKPAT_0_LOOP_R9 ;小于等于 B __CPU_RET_R9 __CPU_ERR_R9 B FailSafePOR __CPU_RET_R9 POP {R8-R10,R4-R6} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R10 ; : R10 test register ; : R9 R11 before/next register ; : R4 test data ; : R5 background data ; : R6 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R10 PROC PUSH {R9-R11,R4-R6} ;********************* Walkpat 1 ************************** MOVS R10, #0x00000000 ;test cell MOVS R9, #0x00000000 ;before cell MOVS R11, #0x00000000 ;next cell MOVS R4,#0x01 ;test data MOVS R5,#0x00000000 ;background data MOVS R6, #1 ;test count __CPU_WALKPAT_1_LOOP_R10 MOV R10,R4 ;set one bit ,and Verify CMP R10,R4 BNE __CPU_ERR_R10 ;不等于 CMP R9,R5 ;Verify before cell BNE __CPU_ERR_R10 CMP R11,R5 ;Verify next cell BNE __CPU_ERR_R10 MOV R10, R5 ;reset one bit ,and Verify CMP R10,R5 BNE __CPU_ERR_R10 ;不等于 CMP R9,R5 ;Verify before cell BNE __CPU_ERR_R10 CMP R11,R5 ;Verify next cell BNE __CPU_ERR_R10 LSL R4,#1 ;Test data moved one place to the left ADD R6,R6,#1 CMP R6,#32 BLE __CPU_WALKPAT_1_LOOP_R10 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R10, #0xFFFFFFFF ;test cell MOVS R9, #0xFFFFFFFF ;before cell MOVS R11, #0xFFFFFFFF ;next cell MOVS R4,#0x7FFFFFFF MOVS R5,#0xFFFFFFFF MOVS R6, #1 __CPU_WALKPAT_0_LOOP_R10 MOV R10,R4 ;set one bit ,and Verify CMP R10,R4 BNE __CPU_ERR_R10 ;不等于 CMP R9,R5 ;Verify before cell BNE __CPU_ERR_R10 CMP R11,R5 ;Verify next cell BNE __CPU_ERR_R10 MOV R10, R5 ;reset one bit ,and Verify CMP R10,R5 BNE __CPU_ERR_R10 ;不等于 CMP R9,R5 ;Verify before cell BNE __CPU_ERR_R10 CMP R11,R5 ;Verify next cell BNE __CPU_ERR_R10 ROR R4,#1 ;Test data moved one place to the left ADD R6,R6,#1 CMP R6,#32 BLE __CPU_WALKPAT_0_LOOP_R10 ;小于等于 B __CPU_RET_R10 __CPU_ERR_R10 B FailSafePOR __CPU_RET_R10 POP {R9-R11,R4-R6} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R11 ; : R11 test register ; : R10 R12 before/next register ; : R4 test data ; : R5 background data ; : R6 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R11 PROC PUSH {R10-R12,R4-R6} ;********************* Walkpat 1 ************************** MOVS R11, #0x00000000 ;test cell MOVS R10, #0x00000000 ;before cell MOVS R12, #0x00000000 ;next cell MOVS R4,#0x01 ;test data MOVS R5,#0x00000000 ;background data MOVS R6, #1 ;test count __CPU_WALKPAT_1_LOOP_R11 MOV R11,R4 ;set one bit ,and Verify CMP R11,R4 BNE __CPU_ERR_R11 ;不等于 CMP R10,R5 ;Verify before cell BNE __CPU_ERR_R11 CMP R12,R5 ;Verify next cell BNE __CPU_ERR_R11 MOV R11, R5 ;reset one bit ,and Verify CMP R11,R5 BNE __CPU_ERR_R11 ;不等于 CMP R10,R5 ;Verify before cell BNE __CPU_ERR_R11 CMP R12,R5 ;Verify next cell BNE __CPU_ERR_R11 LSL R4,#1 ;Test data moved one place to the left ADD R6,R6,#1 CMP R6,#32 BLE __CPU_WALKPAT_1_LOOP_R11 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R11, #0xFFFFFFFF ;test cell MOVS R10, #0xFFFFFFFF ;before cell MOVS R12, #0xFFFFFFFF ;next cell MOVS R4,#0x7FFFFFFF MOVS R5,#0xFFFFFFFF MOVS R6, #1 __CPU_WALKPAT_0_LOOP_R11 MOV R11,R4 ;set one bit ,and Verify CMP R11,R4 BNE __CPU_ERR_R11 ;不等于 CMP R10,R5 ;Verify before cell BNE __CPU_ERR_R11 CMP R12,R5 ;Verify next cell BNE __CPU_ERR_R11 MOV R11, R5 ;reset one bit ,and Verify CMP R11,R5 BNE __CPU_ERR_R11 ;不等于 CMP R10,R5 ;Verify before cell BNE __CPU_ERR_R11 CMP R12,R5 ;Verify next cell BNE __CPU_ERR_R11 ROR R4,#1 ;Test data moved one place to the left ADD R6,R6,#1 CMP R6,#32 BLE __CPU_WALKPAT_0_LOOP_R11 ;小于等于 B __CPU_RET_R11 __CPU_ERR_R11 B FailSafePOR __CPU_RET_R11 POP {R10-R12,R4-R6} BX LR ; return to the caller ENDP ;******************************************************************************* ; Function Name : STU_CPUTestWalkpat_R12 ; : R12 test register ; : R11 before register ; : R4 test data ; : R5 background data ; : R6 test count(1-32) ; Description : Full Cortex-M3 CPU test at start-up ;*******************************************************************************/ STU_CPUTestWalkpat_R12 PROC PUSH {R11,R12,R4-R6} ;********************* Walkpat 1 ************************** MOVS R12, #0x00000000 ;test cell MOVS R11, #0x00000000 ;before cell MOVS R4,#0x01 ;test data MOVS R5,#0x00000000 ;background data MOVS R6, #1 ;test count __CPU_WALKPAT_1_LOOP_R12 MOV R12,R4 ;set one bit ,and Verify CMP R12,R4 BNE __CPU_ERR_R12 ;不等于 CMP R11,R5 ;Verify before cell BNE __CPU_ERR_R12 MOV R12, R5 ;reset one bit ,and Verify CMP R12,R5 BNE __CPU_ERR_R12 ;不等于 CMP R11,R5 ;Verify before cell BNE __CPU_ERR_R12 LSL R4,#1 ;Test data moved one place to the left ADD R6,R6,#1 CMP R6,#32 BLE __CPU_WALKPAT_1_LOOP_R12 ;小于等于 ;********************* Walkpat 0 ************************** MOVS R12, #0xFFFFFFFF ;test cell MOVS R11, #0xFFFFFFFF ;before cell MOVS R4,#0x7FFFFFFF MOVS R5,#0xFFFFFFFF MOVS R6, #1 __CPU_WALKPAT_0_LOOP_R12 MOV R12,R4 ;set one bit ,and Verify CMP R12,R4 BNE __CPU_ERR_R12 ;不等于 CMP R11,R5 ;Verify before cell BNE __CPU_ERR_R12 MOV R12, R5 ;reset one bit ,and Verify CMP R12,R5 BNE __CPU_ERR_R12 ;不等于 CMP R11,R5 ;Verify before cell BNE __CPU_ERR_R12 ROR R4,#1 ;Test data moved one place to the left ADD R6,R6,#1 CMP R6,#32 BLE __CPU_WALKPAT_0_LOOP_R12 ;小于等于 B __CPU_RET_R12 __CPU_ERR_R12 B FailSafePOR __CPU_RET_R12 POP {R11,R12,R4-R6} BX LR ; return to the caller ENDP END