123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- ;******************************************************************************
- 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
- ;*******************************************************************************
- ; Function Name : STL_TranspRamMarchCXStep
- ; Description : Transparent RAM walkpat test for run time
- ; Input : R0 .. RAM begin (first address to test),
- ; R1 .. Buffer begin (First address of backup buffer)
- ; R2 .. Background pattern
- ; R4 .. test cell data
- ; R5 .. cout for words test loop address offset
- ; R6 .. read data
- ; R7 .. befor/next cell address
- ; R8 .. Background data 0 OR 0xFFFFFFFF
- ; R9 .. cout for word test loop
- ; Return : TEST_SUCCESSFULL (=1)
- ;*******************************************************************************/
- STU_RamWalkpatStep PROC ;195.6us
- EXPORT STU_RamWalkpatStep
-
- PUSH {R4-R9}
-
- MOVS R4, #0
- MOVS R5, #0
- __BACKUP_LOOP ;save content of the RAM slice into the backup buffer and reset test uint
- LDR R6,[R0, R5]
- STR R6,[R1, R5]
- STR R4,[R0, R5] ;reset test word
- ADD R5,R5,#4
- CMP R5, #24
- BLT __BACKUP_LOOP
-
- ;********************* Walkpat 1 **************************
- MOVS R5, #4
- MOVS R8, #0
- __STEP_TEST_WORDS_LOOP
- MOVS R4,#0x01
- MOVS R9, #1
- __STEP_TEST_WORD_LOOP
- STR R4,[R0, R5] ;set one bit ,and Verify
- LDR R6,[R0, R5]
- CMP R4,R6
- BNE __STEP_ERR
-
- ADD R7,R5,#4 ;Verify next word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __STEP_ERR
-
- SUBS R7,R5,#4 ;Verify before word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __STEP_ERR
-
- STR R8,[R0, R5] ;reset ont bit ,and Verify
- LDR R6,[R0, R5]
- CMP R8,R6
- BNE __STEP_ERR
-
- ADD R7,R5,#4 ;Verify next word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __STEP_ERR
-
- SUBS R7,R5,#4 ;Verify before word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __STEP_ERR
-
- LSL R4,#1 ;Test data moved one place to the left
- ADD R9,R9,#1
- CMP R9,#32
- BLE __STEP_TEST_WORD_LOOP
-
- ADD R5,R5,#4 ;Test next word
- CMP R5, #20
- BLT __STEP_TEST_WORDS_LOOP
-
- ;********************* Walkpat 0 **************************
- MOVS R4, #0xFFFFFFFF
- MOVS R5, #0
- __BACKGROUND_LOOP
- STR R4,[R0, R5] ;set test word
- ADD R5,R5,#4
- CMP R5, #24
- BLT __BACKGROUND_LOOP
-
- MOVS R5, #4
- MOVS R8, #0xFFFFFFFF
- __STEP_TEST_WORDS_LOOP_2
- MOVS R4,#0x7FFFFFFF
- MOVS R9, #1
- __STEP_TEST_WORD_LOOP_2
- STR R4,[R0, R5] ;set one bit ,and Verify
- LDR R6,[R0, R5]
- CMP R4,R6
- BNE __STEP_ERR
-
- ADD R7,R5,#4 ;Verify next word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __STEP_ERR
-
- SUBS R7,R5,#4 ;Verify before word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __STEP_ERR
-
- STR R8,[R0, R5] ;reset ont bit ,and Verify
- LDR R6,[R0, R5]
- CMP R8,R6
- BNE __STEP_ERR
-
- ADD R7,R5,#4 ;Verify next word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __STEP_ERR
-
- SUBS R7,R5,#4 ;Verify before word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __STEP_ERR
-
- ROR R4,#1 ;Test data moved one place to the left
- ADD R9,R9,#1
- CMP R9,#32
- BLE __STEP_TEST_WORD_LOOP_2
-
- ADD R5,R5,#4 ;Test next word
- CMP R5, #20
- BLT __STEP_TEST_WORDS_LOOP_2
-
- MOVS R5, #0
- __RESTORE_LOOP ;restore content of the RAM slice back from the backup buffer
- LDR R6,[R1, R5]
- STR R6,[R0, R5]
- ADD R5,R5,#4
- CMP R5, #24
- BLT __RESTORE_LOOP
-
- MOVS R0, #1 ; Correct return
- B __STEP_RET
-
- __STEP_ERR
- MOVS R0, #0 ; error result
-
- __STEP_RET
- POP {R4-R9}
- BX LR ; return to the caller
- ENDP
-
- ;*******************************************************************************
- ; Function Name : STL_TranspRamMarchCXStep
- ; Description : Transparent walkpat test for startup
- ; Input : R0 .. RAM begin (first address to test),
- ; R1 .. RAM size (byte)
- ; R2 .. Background pattern
- ; R4 .. test cell data
- ; R5 .. cout for words test loop address offset
- ; R6 .. read data
- ; R7 .. befor/next cell address
- ; R8 .. Background data 0 OR 0xFFFFFFFF
- ; R9 .. cout for word test loop
- ; Return : TEST_SUCCESSFULL (=1)
- ;*******************************************************************************/
- STU_FullRamWalkpat PROC
- EXPORT STU_FullRamWalkpat
-
- PUSH {R4-R9}
-
- ;********************* Walkpat 1 **************************
- MOVS R4, #0
- MOVS R5, #0
- __FULL_LOOP_1 ;reset test uint
- STR R4,[R0, R5] ;reset test word
- ADD R5,R5,#4
- CMP R5, R1
- BLT __FULL_LOOP_1 ;带符号数小于
-
- MOVS R5, #0
- MOVS R8, #0
- __FULL_TEST_WORDS_LOOP
- MOVS R4,#0x01
- MOVS R9, #1
- __FULL_TEST_WORD_LOOP
- STR R4,[R0, R5] ;set one bit ,and Verify
- LDR R6,[R0, R5]
- CMP R4,R6
- BNE __FULL_ERR
-
- CMP R5, #0
- BEQ __VERIFY_NEXT_1
-
- SUBS R7,R5,#4 ;Verify before word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __FULL_ERR
- __VERIFY_NEXT_1
- ADD R7,R5,#4 ;Verify next word
- CMP R7, R1
- BGE __FULL_STEP_3
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __FULL_ERR
-
- __FULL_STEP_3
- STR R8,[R0, R5] ;reset one bit ,and Verify
- LDR R6,[R0, R5]
- CMP R8,R6
- BNE __FULL_ERR
-
- CMP R5, #0
- BEQ __VERIFY_NEXT_2
-
- SUBS R7,R5,#4 ;Verify before word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __FULL_ERR
-
- __VERIFY_NEXT_2
- ADD R7,R5,#4 ;Verify next word
- CMP R7, R1
- BGE __FULL_STEP_4
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __FULL_ERR
-
- __FULL_STEP_4
- LSL R4,#1 ;Test data moved one place to the left
- ADD R9,R9,#1
- CMP R9,#32
- BLE __FULL_TEST_WORD_LOOP ;小于等于
-
- ADD R5,R5,#4 ;Test next word
- CMP R5, R1
- BLT __FULL_TEST_WORDS_LOOP
-
-
- ;********************* Walkpat 0 **************************
- MOVS R4, #0xFFFFFFFF ;background data
- MOVS R5, #0
- __FULL_LOOP_2
- STR R4,[R0, R5] ;set test word
- ADD R5,R5,#4
- CMP R5, R1
- BLT __FULL_LOOP_2 ;带符号数小于
-
- MOVS R5, #0
- MOVS R8, #0xFFFFFFFF
- __FULL_TEST_WORDS_LOOP_2
- MOVS R4,#0x7FFFFFFF ;first test data
- MOVS R9, #1
- __FULL_TEST_WORD_LOOP_2
- STR R4,[R0, R5] ;set one bit ,and Verify
- LDR R6,[R0, R5]
- CMP R4,R6
- BNE __FULL_ERR
-
- CMP R5, #0
- BEQ __VERIFY_NEXT_3
-
- SUBS R7,R5,#4 ;Verify before word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __FULL_ERR
- __VERIFY_NEXT_3
- ADD R7,R5,#4 ;Verify next word
- CMP R7, R1
- BGE __FULL_STEP_5
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __FULL_ERR
-
- __FULL_STEP_5
- STR R8,[R0, R5] ;set one bit ,and Verify
- LDR R6,[R0, R5]
- CMP R8,R6
- BNE __FULL_ERR
-
- CMP R5, #0
- BEQ __VERIFY_NEXT_4
-
- SUBS R7,R5,#4 ;Verify before word
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __FULL_ERR
-
- __VERIFY_NEXT_4
- ADD R7,R5,#4 ;Verify next word
- CMP R7, R1
- BGE __FULL_STEP_6
- LDR R6,[R0, R7]
- CMP R8,R6
- BNE __FULL_ERR
-
- __FULL_STEP_6
- ROR R4,#1 ;Test data moved one place to the right
- ADD R9,R9,#1
- CMP R9,#32
- BLE __FULL_TEST_WORD_LOOP_2 ;小于等于
-
- ADD R5,R5,#4 ;Test next word
- CMP R5, R1
- BLT __FULL_TEST_WORDS_LOOP_2
-
-
- MOVS R0, #1 ; Correct return
- B __FULL_RET
-
- __FULL_ERR
- MOVS R0, #0 ; error result
-
- __FULL_RET
- POP {R4-R9}
- BX LR ; return to the caller
- ENDP
-
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|