Add register tests to H743ZI2 demo project (#977)
Add register tests to H743ZI2 demo project. Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com> Co-authored-by: kar-rahul-aws <karahulx@amazon.com>pull/982/head
parent
4408d7430e
commit
aba448be9c
@ -0,0 +1,988 @@
|
|||||||
|
/*
|
||||||
|
* FreeRTOS V202212.00
|
||||||
|
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* https://www.FreeRTOS.org
|
||||||
|
* https://github.com/FreeRTOS
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "Reg test" tasks - These fill the registers with known values, then check
|
||||||
|
* that each register maintains its expected value for the lifetime of the
|
||||||
|
* task. Each task uses a different set of values. The reg test tasks execute
|
||||||
|
* with a very low priority, so get preempted very frequently. A register
|
||||||
|
* containing an unexpected value is indicative of an error in the context
|
||||||
|
* switching mechanism.
|
||||||
|
*/
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Functions that implement reg tests. */
|
||||||
|
void vRegTest1Asm( void ) __attribute__( ( naked ) );
|
||||||
|
void vRegTest2Asm( void ) __attribute__( ( naked ) );
|
||||||
|
void vRegTest3Asm( void ) __attribute__( ( naked ) );
|
||||||
|
void vRegTest4Asm( void ) __attribute__( ( naked ) );
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vRegTest1Asm( void ) /* __attribute__( ( naked ) ) */
|
||||||
|
{
|
||||||
|
__asm volatile
|
||||||
|
(
|
||||||
|
".extern ulRegTest1LoopCounter \n"
|
||||||
|
".syntax unified \n"
|
||||||
|
" \n"
|
||||||
|
" /* Fill the core registers with known values. */ \n"
|
||||||
|
" movs r0, #100 \n"
|
||||||
|
" movs r1, #101 \n"
|
||||||
|
" movs r2, #102 \n"
|
||||||
|
" movs r3, #103 \n"
|
||||||
|
" movs r4, #104 \n"
|
||||||
|
" movs r5, #105 \n"
|
||||||
|
" movs r6, #106 \n"
|
||||||
|
" movs r7, #107 \n"
|
||||||
|
" mov r8, #108 \n"
|
||||||
|
" mov r9, #109 \n"
|
||||||
|
" mov r10, #110 \n"
|
||||||
|
" mov r11, #111 \n"
|
||||||
|
" mov r12, #112 \n"
|
||||||
|
" \n"
|
||||||
|
" /* Fill the FPU registers with known values. */ \n"
|
||||||
|
" vmov.f32 s1, #1.5 \n"
|
||||||
|
" vmov.f32 s2, #2.5 \n"
|
||||||
|
" vmov.f32 s3, #3.5 \n"
|
||||||
|
" vmov.f32 s4, #4.5 \n"
|
||||||
|
" vmov.f32 s5, #5.5 \n"
|
||||||
|
" vmov.f32 s6, #6.5 \n"
|
||||||
|
" vmov.f32 s7, #7.5 \n"
|
||||||
|
" vmov.f32 s8, #8.5 \n"
|
||||||
|
" vmov.f32 s9, #9.5 \n"
|
||||||
|
" vmov.f32 s10, #10.5 \n"
|
||||||
|
" vmov.f32 s11, #11.5 \n"
|
||||||
|
" vmov.f32 s12, #12.5 \n"
|
||||||
|
" vmov.f32 s13, #13.5 \n"
|
||||||
|
" vmov.f32 s14, #14.5 \n"
|
||||||
|
" vmov.f32 s15, #1.0 \n"
|
||||||
|
" vmov.f32 s16, #2.0 \n"
|
||||||
|
" vmov.f32 s17, #3.0 \n"
|
||||||
|
" vmov.f32 s18, #4.0 \n"
|
||||||
|
" vmov.f32 s19, #5.0 \n"
|
||||||
|
" vmov.f32 s20, #6.0 \n"
|
||||||
|
" vmov.f32 s21, #7.0 \n"
|
||||||
|
" vmov.f32 s22, #8.0 \n"
|
||||||
|
" vmov.f32 s23, #9.0 \n"
|
||||||
|
" vmov.f32 s24, #10.0 \n"
|
||||||
|
" vmov.f32 s25, #11.0 \n"
|
||||||
|
" vmov.f32 s26, #12.0 \n"
|
||||||
|
" vmov.f32 s27, #13.0 \n"
|
||||||
|
" vmov.f32 s28, #14.0 \n"
|
||||||
|
" vmov.f32 s29, #1.5 \n"
|
||||||
|
" vmov.f32 s30, #2.5 \n"
|
||||||
|
" vmov.f32 s31, #3.5 \n"
|
||||||
|
" \n"
|
||||||
|
"reg1_loop: \n"
|
||||||
|
" \n"
|
||||||
|
" /* Verify that core registers contain correct values. */ \n"
|
||||||
|
" cmp r0, #100 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r1, #101 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r2, #102 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r3, #103 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r4, #104 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r5, #105 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r6, #106 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r7, #107 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r8, #108 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r9, #109 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r10, #110 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r11, #111 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" cmp r12, #112 \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" \n"
|
||||||
|
" /* Verify that FPU registers contain correct values. */ \n"
|
||||||
|
" vmov.f32 s0, #1.5 \n" /* s0 = 1.5. */
|
||||||
|
" vcmp.f32 s1, s0 \n" /* Compare s0 and s1. */
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n" /* Copy floating point flags (FPSCR flags) to ASPR flags - needed for next bne to work. */
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #2.5 \n"
|
||||||
|
" vcmp.f32 s2, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #3.5 \n"
|
||||||
|
" vcmp.f32 s3, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #4.5 \n"
|
||||||
|
" vcmp.f32 s4, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #5.5 \n"
|
||||||
|
" vcmp.f32 s5, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #6.5 \n"
|
||||||
|
" vcmp.f32 s6, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #7.5 \n"
|
||||||
|
" vcmp.f32 s7, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #8.5 \n"
|
||||||
|
" vcmp.f32 s8, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #9.5 \n"
|
||||||
|
" vcmp.f32 s9, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #10.5 \n"
|
||||||
|
" vcmp.f32 s10, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #11.5 \n"
|
||||||
|
" vcmp.f32 s11, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #12.5 \n"
|
||||||
|
" vcmp.f32 s12, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #13.5 \n"
|
||||||
|
" vcmp.f32 s13, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #14.5 \n"
|
||||||
|
" vcmp.f32 s14, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #1.0 \n"
|
||||||
|
" vcmp.f32 s15, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #2.0 \n"
|
||||||
|
" vcmp.f32 s16, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #3.0 \n"
|
||||||
|
" vcmp.f32 s17, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #4.0 \n"
|
||||||
|
" vcmp.f32 s18, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #5.0 \n"
|
||||||
|
" vcmp.f32 s19, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #6.0 \n"
|
||||||
|
" vcmp.f32 s20, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #7.0 \n"
|
||||||
|
" vcmp.f32 s21, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #8.0 \n"
|
||||||
|
" vcmp.f32 s22, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #9.0 \n"
|
||||||
|
" vcmp.f32 s23, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #10.0 \n"
|
||||||
|
" vcmp.f32 s24, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #11.0 \n"
|
||||||
|
" vcmp.f32 s25, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #12.0 \n"
|
||||||
|
" vcmp.f32 s26, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #13.0 \n"
|
||||||
|
" vcmp.f32 s27, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #14.0 \n"
|
||||||
|
" vcmp.f32 s28, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #1.5 \n"
|
||||||
|
" vcmp.f32 s29, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #2.5 \n"
|
||||||
|
" vcmp.f32 s30, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" vmov.f32 s0, #3.5 \n"
|
||||||
|
" vcmp.f32 s31, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg1_error_loop \n"
|
||||||
|
" \n"
|
||||||
|
" /* Everything passed, inc the loop counter. */ \n"
|
||||||
|
" push { r0, r1 } \n"
|
||||||
|
" ldr r0, =ulRegTest1LoopCounter \n"
|
||||||
|
" ldr r1, [r0] \n"
|
||||||
|
" adds r1, r1, #1 \n"
|
||||||
|
" str r1, [r0] \n"
|
||||||
|
" \n"
|
||||||
|
" /* Yield to increase test coverage. */ \n"
|
||||||
|
" movs r0, #0x01 \n"
|
||||||
|
" ldr r1, =0xe000ed04 \n" /* NVIC_ICSR */
|
||||||
|
" lsls r0, #28 \n" /* Shift to PendSV bit */
|
||||||
|
" str r0, [r1] \n"
|
||||||
|
" dsb \n"
|
||||||
|
" pop { r0, r1 } \n"
|
||||||
|
" \n"
|
||||||
|
" /* Start again. */ \n"
|
||||||
|
" b reg1_loop \n"
|
||||||
|
" \n"
|
||||||
|
"reg1_error_loop: \n"
|
||||||
|
" /* If this line is hit then there was an error in \n"
|
||||||
|
" * a core register value. The loop ensures the \n"
|
||||||
|
" * loop counter stops incrementing. */ \n"
|
||||||
|
" b reg1_error_loop \n"
|
||||||
|
" nop \n"
|
||||||
|
".ltorg \n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vRegTest2Asm( void ) /* __attribute__( ( naked ) ) */
|
||||||
|
{
|
||||||
|
__asm volatile
|
||||||
|
(
|
||||||
|
".extern ulRegTest2LoopCounter \n"
|
||||||
|
".syntax unified \n"
|
||||||
|
" \n"
|
||||||
|
" /* Fill the core registers with known values. */ \n"
|
||||||
|
" movs r0, #0 \n"
|
||||||
|
" movs r1, #1 \n"
|
||||||
|
" movs r2, #2 \n"
|
||||||
|
" movs r3, #3 \n"
|
||||||
|
" movs r4, #4 \n"
|
||||||
|
" movs r5, #5 \n"
|
||||||
|
" movs r6, #6 \n"
|
||||||
|
" movs r7, #7 \n"
|
||||||
|
" mov r8, #8 \n"
|
||||||
|
" mov r9, #9 \n"
|
||||||
|
" movs r10, #10 \n"
|
||||||
|
" movs r11, #11 \n"
|
||||||
|
" movs r12, #12 \n"
|
||||||
|
" \n"
|
||||||
|
" /* Fill the FPU registers with known values. */ \n"
|
||||||
|
" vmov.f32 s1, #1.0 \n"
|
||||||
|
" vmov.f32 s2, #2.0 \n"
|
||||||
|
" vmov.f32 s3, #3.0 \n"
|
||||||
|
" vmov.f32 s4, #4.0 \n"
|
||||||
|
" vmov.f32 s5, #5.0 \n"
|
||||||
|
" vmov.f32 s6, #6.0 \n"
|
||||||
|
" vmov.f32 s7, #7.0 \n"
|
||||||
|
" vmov.f32 s8, #8.0 \n"
|
||||||
|
" vmov.f32 s9, #9.0 \n"
|
||||||
|
" vmov.f32 s10, #10.0 \n"
|
||||||
|
" vmov.f32 s11, #11.0 \n"
|
||||||
|
" vmov.f32 s12, #12.0 \n"
|
||||||
|
" vmov.f32 s13, #13.0 \n"
|
||||||
|
" vmov.f32 s14, #14.0 \n"
|
||||||
|
" vmov.f32 s15, #1.5 \n"
|
||||||
|
" vmov.f32 s16, #2.5 \n"
|
||||||
|
" vmov.f32 s17, #3.5 \n"
|
||||||
|
" vmov.f32 s18, #4.5 \n"
|
||||||
|
" vmov.f32 s19, #5.5 \n"
|
||||||
|
" vmov.f32 s20, #6.5 \n"
|
||||||
|
" vmov.f32 s21, #7.5 \n"
|
||||||
|
" vmov.f32 s22, #8.5 \n"
|
||||||
|
" vmov.f32 s23, #9.5 \n"
|
||||||
|
" vmov.f32 s24, #10.5 \n"
|
||||||
|
" vmov.f32 s25, #11.5 \n"
|
||||||
|
" vmov.f32 s26, #12.5 \n"
|
||||||
|
" vmov.f32 s27, #13.5 \n"
|
||||||
|
" vmov.f32 s28, #14.5 \n"
|
||||||
|
" vmov.f32 s29, #1.0 \n"
|
||||||
|
" vmov.f32 s30, #2.0 \n"
|
||||||
|
" vmov.f32 s31, #3.0 \n"
|
||||||
|
" \n"
|
||||||
|
"reg2_loop: \n"
|
||||||
|
" \n"
|
||||||
|
" /* Verify that core registers contain correct values. */ \n"
|
||||||
|
" cmp r0, #0 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r1, #1 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r2, #2 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r3, #3 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r4, #4 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r5, #5 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r6, #6 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r7, #7 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r8, #8 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r9, #9 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r10, #10 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r11, #11 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" cmp r12, #12 \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" \n"
|
||||||
|
" /* Verify that FPU registers contain correct values. */ \n"
|
||||||
|
" vmov.f32 s0, #1.0 \n"
|
||||||
|
" vcmp.f32 s1, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #2.0 \n"
|
||||||
|
" vcmp.f32 s2, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #3.0 \n"
|
||||||
|
" vcmp.f32 s3, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #4.0 \n"
|
||||||
|
" vcmp.f32 s4, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #5.0 \n"
|
||||||
|
" vcmp.f32 s5, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #6.0 \n"
|
||||||
|
" vcmp.f32 s6, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #7.0 \n"
|
||||||
|
" vcmp.f32 s7, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #8.0 \n"
|
||||||
|
" vcmp.f32 s8, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #9.0 \n"
|
||||||
|
" vcmp.f32 s9, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #10.0 \n"
|
||||||
|
" vcmp.f32 s10, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #11.0 \n"
|
||||||
|
" vcmp.f32 s11, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #12.0 \n"
|
||||||
|
" vcmp.f32 s12, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #13.0 \n"
|
||||||
|
" vcmp.f32 s13, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #14.0 \n"
|
||||||
|
" vcmp.f32 s14, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #1.5 \n"
|
||||||
|
" vcmp.f32 s15, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #2.5 \n"
|
||||||
|
" vcmp.f32 s16, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #3.5 \n"
|
||||||
|
" vcmp.f32 s17, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #4.5 \n"
|
||||||
|
" vcmp.f32 s18, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #5.5 \n"
|
||||||
|
" vcmp.f32 s19, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #6.5 \n"
|
||||||
|
" vcmp.f32 s20, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #7.5 \n"
|
||||||
|
" vcmp.f32 s21, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #8.5 \n"
|
||||||
|
" vcmp.f32 s22, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #9.5 \n"
|
||||||
|
" vcmp.f32 s23, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #10.5 \n"
|
||||||
|
" vcmp.f32 s24, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #11.5 \n"
|
||||||
|
" vcmp.f32 s25, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #12.5 \n"
|
||||||
|
" vcmp.f32 s26, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #13.5 \n"
|
||||||
|
" vcmp.f32 s27, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #14.5 \n"
|
||||||
|
" vcmp.f32 s28, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #1.0 \n"
|
||||||
|
" vcmp.f32 s29, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #2.0 \n"
|
||||||
|
" vcmp.f32 s30, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" vmov.f32 s0, #3.0 \n"
|
||||||
|
" vcmp.f32 s31, s0 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg2_error_loop \n"
|
||||||
|
" \n"
|
||||||
|
" /* Everything passed, inc the loop counter. */ \n"
|
||||||
|
" push { r0, r1 } \n"
|
||||||
|
" ldr r0, =ulRegTest2LoopCounter \n"
|
||||||
|
" ldr r1, [r0] \n"
|
||||||
|
" adds r1, r1, #1 \n"
|
||||||
|
" str r1, [r0] \n"
|
||||||
|
" pop { r0, r1 } \n"
|
||||||
|
" \n"
|
||||||
|
" /* Start again. */ \n"
|
||||||
|
" b reg2_loop \n"
|
||||||
|
" \n"
|
||||||
|
"reg2_error_loop: \n"
|
||||||
|
" /* If this line is hit then there was an error in \n"
|
||||||
|
" * a core register value. The loop ensures the \n"
|
||||||
|
" * loop counter stops incrementing. */ \n"
|
||||||
|
" b reg2_error_loop \n"
|
||||||
|
" nop \n"
|
||||||
|
".ltorg \n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vRegTest3Asm( void ) /* __attribute__( ( naked ) ) */
|
||||||
|
{
|
||||||
|
__asm volatile
|
||||||
|
(
|
||||||
|
".extern ulRegTest3LoopCounter \n"
|
||||||
|
".syntax unified \n"
|
||||||
|
" \n"
|
||||||
|
" /* Fill the core registers with known values. */ \n"
|
||||||
|
" movs r0, #100 \n"
|
||||||
|
" movs r1, #101 \n"
|
||||||
|
" movs r2, #102 \n"
|
||||||
|
" movs r3, #103 \n"
|
||||||
|
" movs r4, #104 \n"
|
||||||
|
" movs r5, #105 \n"
|
||||||
|
" movs r6, #106 \n"
|
||||||
|
" movs r7, #107 \n"
|
||||||
|
" mov r8, #108 \n"
|
||||||
|
" mov r9, #109 \n"
|
||||||
|
" mov r10, #110 \n"
|
||||||
|
" mov r11, #111 \n"
|
||||||
|
" mov r12, #112 \n"
|
||||||
|
" \n"
|
||||||
|
" /* Fill the FPU registers with known values. */ \n"
|
||||||
|
" vmov.f32 s0, #1.5 \n"
|
||||||
|
" vmov.f32 s2, #2.0 \n"
|
||||||
|
" vmov.f32 s3, #3.5 \n"
|
||||||
|
" vmov.f32 s4, #4.0 \n"
|
||||||
|
" vmov.f32 s5, #5.5 \n"
|
||||||
|
" vmov.f32 s6, #6.0 \n"
|
||||||
|
" vmov.f32 s7, #7.5 \n"
|
||||||
|
" vmov.f32 s8, #8.0 \n"
|
||||||
|
" vmov.f32 s9, #9.5 \n"
|
||||||
|
" vmov.f32 s10, #10.0 \n"
|
||||||
|
" vmov.f32 s11, #11.5 \n"
|
||||||
|
" vmov.f32 s12, #12.0 \n"
|
||||||
|
" vmov.f32 s13, #13.5 \n"
|
||||||
|
" vmov.f32 s14, #14.0 \n"
|
||||||
|
" vmov.f32 s15, #1.5 \n"
|
||||||
|
" vmov.f32 s16, #2.0 \n"
|
||||||
|
" vmov.f32 s17, #3.5 \n"
|
||||||
|
" vmov.f32 s18, #4.0 \n"
|
||||||
|
" vmov.f32 s19, #5.5 \n"
|
||||||
|
" vmov.f32 s20, #6.0 \n"
|
||||||
|
" vmov.f32 s21, #7.5 \n"
|
||||||
|
" vmov.f32 s22, #8.0 \n"
|
||||||
|
" vmov.f32 s23, #9.5 \n"
|
||||||
|
" vmov.f32 s24, #10.0 \n"
|
||||||
|
" vmov.f32 s25, #11.5 \n"
|
||||||
|
" vmov.f32 s26, #12.0 \n"
|
||||||
|
" vmov.f32 s27, #13.5 \n"
|
||||||
|
" vmov.f32 s28, #14.0 \n"
|
||||||
|
" vmov.f32 s29, #1.5 \n"
|
||||||
|
" vmov.f32 s30, #2.0 \n"
|
||||||
|
" vmov.f32 s31, #3.5 \n"
|
||||||
|
" \n"
|
||||||
|
"reg3_loop: \n"
|
||||||
|
" \n"
|
||||||
|
" /* Verify that core registers contain correct values. */ \n"
|
||||||
|
" cmp r0, #100 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r1, #101 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r2, #102 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r3, #103 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r4, #104 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r5, #105 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r6, #106 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r7, #107 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r8, #108 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r9, #109 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r10, #110 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r11, #111 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" cmp r12, #112 \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" \n"
|
||||||
|
" /* Verify that FPU registers contain correct values. */ \n"
|
||||||
|
" vmov.f32 s1, #1.5 \n"
|
||||||
|
" vcmp.f32 s0, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #2.0 \n"
|
||||||
|
" vcmp.f32 s2, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #3.5 \n"
|
||||||
|
" vcmp.f32 s3, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #4.0 \n"
|
||||||
|
" vcmp.f32 s4, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #5.5 \n"
|
||||||
|
" vcmp.f32 s5, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #6.0 \n"
|
||||||
|
" vcmp.f32 s6, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #7.5 \n"
|
||||||
|
" vcmp.f32 s7, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #8.0 \n"
|
||||||
|
" vcmp.f32 s8, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #9.5 \n"
|
||||||
|
" vcmp.f32 s9, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #10.0 \n"
|
||||||
|
" vcmp.f32 s10, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #11.5 \n"
|
||||||
|
" vcmp.f32 s11, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #12.0 \n"
|
||||||
|
" vcmp.f32 s12, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #13.5 \n"
|
||||||
|
" vcmp.f32 s13, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #14.0 \n"
|
||||||
|
" vcmp.f32 s14, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #1.5 \n"
|
||||||
|
" vcmp.f32 s15, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #2.0 \n"
|
||||||
|
" vcmp.f32 s16, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #3.5 \n"
|
||||||
|
" vcmp.f32 s17, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #4.0 \n"
|
||||||
|
" vcmp.f32 s18, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #5.5 \n"
|
||||||
|
" vcmp.f32 s19, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #6.0 \n"
|
||||||
|
" vcmp.f32 s20, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #7.5 \n"
|
||||||
|
" vcmp.f32 s21, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #8.0 \n"
|
||||||
|
" vcmp.f32 s22, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #9.5 \n"
|
||||||
|
" vcmp.f32 s23, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #10.0 \n"
|
||||||
|
" vcmp.f32 s24, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #11.5 \n"
|
||||||
|
" vcmp.f32 s25, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #12.0 \n"
|
||||||
|
" vcmp.f32 s26, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #13.5 \n"
|
||||||
|
" vcmp.f32 s27, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #14.0 \n"
|
||||||
|
" vcmp.f32 s28, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #1.5 \n"
|
||||||
|
" vcmp.f32 s29, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #2.0 \n"
|
||||||
|
" vcmp.f32 s30, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" vmov.f32 s1, #3.5 \n"
|
||||||
|
" vcmp.f32 s31, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg3_error_loop \n"
|
||||||
|
" \n"
|
||||||
|
" /* Everything passed, inc the loop counter. */ \n"
|
||||||
|
" push { r0, r1 } \n"
|
||||||
|
" ldr r0, =ulRegTest3LoopCounter \n"
|
||||||
|
" ldr r1, [r0] \n"
|
||||||
|
" adds r1, r1, #1 \n"
|
||||||
|
" str r1, [r0] \n"
|
||||||
|
" \n"
|
||||||
|
" /* Yield to increase test coverage. */ \n"
|
||||||
|
" movs r0, #0x01 \n"
|
||||||
|
" ldr r1, =0xe000ed04 \n" /* NVIC_ICSR */
|
||||||
|
" lsls r0, #28 \n" /* Shift to PendSV bit */
|
||||||
|
" str r0, [r1] \n"
|
||||||
|
" dsb \n"
|
||||||
|
" pop { r0, r1 } \n"
|
||||||
|
" \n"
|
||||||
|
" /* Start again. */ \n"
|
||||||
|
" b reg3_loop \n"
|
||||||
|
" \n"
|
||||||
|
"reg3_error_loop: \n"
|
||||||
|
" /* If this line is hit then there was an error in \n"
|
||||||
|
" * a core register value. The loop ensures the \n"
|
||||||
|
" * loop counter stops incrementing. */ \n"
|
||||||
|
" b reg3_error_loop \n"
|
||||||
|
" nop \n"
|
||||||
|
".ltorg \n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vRegTest4Asm( void ) /* __attribute__( ( naked ) ) */
|
||||||
|
{
|
||||||
|
__asm volatile
|
||||||
|
(
|
||||||
|
".extern ulRegTest4LoopCounter \n"
|
||||||
|
".syntax unified \n"
|
||||||
|
" \n"
|
||||||
|
" /* Fill the core registers with known values. */ \n"
|
||||||
|
" movs r0, #0 \n"
|
||||||
|
" movs r1, #1 \n"
|
||||||
|
" movs r2, #2 \n"
|
||||||
|
" movs r3, #3 \n"
|
||||||
|
" movs r4, #4 \n"
|
||||||
|
" movs r5, #5 \n"
|
||||||
|
" movs r6, #6 \n"
|
||||||
|
" movs r7, #7 \n"
|
||||||
|
" mov r8, #8 \n"
|
||||||
|
" mov r9, #9 \n"
|
||||||
|
" movs r10, #10 \n"
|
||||||
|
" movs r11, #11 \n"
|
||||||
|
" movs r12, #12 \n"
|
||||||
|
" \n"
|
||||||
|
" /* Fill the FPU registers with known values. */ \n"
|
||||||
|
" vmov.f32 s0, #1.5 \n"
|
||||||
|
" vmov.f32 s2, #2.0 \n"
|
||||||
|
" vmov.f32 s3, #3.0 \n"
|
||||||
|
" vmov.f32 s4, #4.5 \n"
|
||||||
|
" vmov.f32 s5, #5.0 \n"
|
||||||
|
" vmov.f32 s6, #6.0 \n"
|
||||||
|
" vmov.f32 s7, #7.5 \n"
|
||||||
|
" vmov.f32 s8, #8.0 \n"
|
||||||
|
" vmov.f32 s9, #9.0 \n"
|
||||||
|
" vmov.f32 s10, #10.5 \n"
|
||||||
|
" vmov.f32 s11, #11.0 \n"
|
||||||
|
" vmov.f32 s12, #12.0 \n"
|
||||||
|
" vmov.f32 s13, #13.5 \n"
|
||||||
|
" vmov.f32 s14, #14.0 \n"
|
||||||
|
" vmov.f32 s15, #1.0 \n"
|
||||||
|
" vmov.f32 s16, #2.5 \n"
|
||||||
|
" vmov.f32 s17, #3.0 \n"
|
||||||
|
" vmov.f32 s18, #4.0 \n"
|
||||||
|
" vmov.f32 s19, #5.5 \n"
|
||||||
|
" vmov.f32 s20, #6.0 \n"
|
||||||
|
" vmov.f32 s21, #7.0 \n"
|
||||||
|
" vmov.f32 s22, #8.5 \n"
|
||||||
|
" vmov.f32 s23, #9.0 \n"
|
||||||
|
" vmov.f32 s24, #10.0 \n"
|
||||||
|
" vmov.f32 s25, #11.5 \n"
|
||||||
|
" vmov.f32 s26, #12.0 \n"
|
||||||
|
" vmov.f32 s27, #13.0 \n"
|
||||||
|
" vmov.f32 s28, #14.5 \n"
|
||||||
|
" vmov.f32 s29, #1.0 \n"
|
||||||
|
" vmov.f32 s30, #2.0 \n"
|
||||||
|
" vmov.f32 s31, #3.5 \n"
|
||||||
|
" \n"
|
||||||
|
"reg4_loop: \n"
|
||||||
|
" \n"
|
||||||
|
" /* Verify that core registers contain correct values. */ \n"
|
||||||
|
" cmp r0, #0 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r1, #1 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r2, #2 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r3, #3 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r4, #4 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r5, #5 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r6, #6 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r7, #7 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r8, #8 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r9, #9 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r10, #10 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r11, #11 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" cmp r12, #12 \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" \n"
|
||||||
|
" /* Verify that FPU registers contain correct values. */ \n"
|
||||||
|
" vmov.f32 s1, #1.5 \n"
|
||||||
|
" vcmp.f32 s0, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #2.0 \n"
|
||||||
|
" vcmp.f32 s2, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #3.0 \n"
|
||||||
|
" vcmp.f32 s3, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #4.5 \n"
|
||||||
|
" vcmp.f32 s4, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #5.0 \n"
|
||||||
|
" vcmp.f32 s5, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #6.0 \n"
|
||||||
|
" vcmp.f32 s6, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #7.5 \n"
|
||||||
|
" vcmp.f32 s7, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #8.0 \n"
|
||||||
|
" vcmp.f32 s8, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #9.0 \n"
|
||||||
|
" vcmp.f32 s9, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #10.5 \n"
|
||||||
|
" vcmp.f32 s10, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #11.0 \n"
|
||||||
|
" vcmp.f32 s11, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #12.0 \n"
|
||||||
|
" vcmp.f32 s12, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #13.5 \n"
|
||||||
|
" vcmp.f32 s13, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #14.0 \n"
|
||||||
|
" vcmp.f32 s14, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #1.0 \n"
|
||||||
|
" vcmp.f32 s15, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #2.5 \n"
|
||||||
|
" vcmp.f32 s16, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #3.0 \n"
|
||||||
|
" vcmp.f32 s17, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #4.0 \n"
|
||||||
|
" vcmp.f32 s18, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #5.5 \n"
|
||||||
|
" vcmp.f32 s19, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #6.0 \n"
|
||||||
|
" vcmp.f32 s20, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #7.0 \n"
|
||||||
|
" vcmp.f32 s21, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #8.5 \n"
|
||||||
|
" vcmp.f32 s22, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #9.0 \n"
|
||||||
|
" vcmp.f32 s23, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #10.0 \n"
|
||||||
|
" vcmp.f32 s24, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #11.5 \n"
|
||||||
|
" vcmp.f32 s25, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #12.0 \n"
|
||||||
|
" vcmp.f32 s26, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #13.0 \n"
|
||||||
|
" vcmp.f32 s27, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #14.5 \n"
|
||||||
|
" vcmp.f32 s28, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #1.0 \n"
|
||||||
|
" vcmp.f32 s29, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #2.0 \n"
|
||||||
|
" vcmp.f32 s30, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" vmov.f32 s1, #3.5 \n"
|
||||||
|
" vcmp.f32 s31, s1 \n"
|
||||||
|
" vmrs APSR_nzcv, FPSCR \n"
|
||||||
|
" bne reg4_error_loop \n"
|
||||||
|
" \n"
|
||||||
|
" /* Everything passed, inc the loop counter. */ \n"
|
||||||
|
" push { r0, r1 } \n"
|
||||||
|
" ldr r0, =ulRegTest4LoopCounter \n"
|
||||||
|
" ldr r1, [r0] \n"
|
||||||
|
" adds r1, r1, #1 \n"
|
||||||
|
" str r1, [r0] \n"
|
||||||
|
" pop { r0, r1 } \n"
|
||||||
|
" \n"
|
||||||
|
" /* Start again. */ \n"
|
||||||
|
" b reg4_loop \n"
|
||||||
|
" \n"
|
||||||
|
"reg4_error_loop: \n"
|
||||||
|
" /* If this line is hit then there was an error in \n"
|
||||||
|
" * a core register value. The loop ensures the \n"
|
||||||
|
" * loop counter stops incrementing. */ \n"
|
||||||
|
" b reg4_error_loop \n"
|
||||||
|
" nop \n"
|
||||||
|
".ltorg \n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
@ -0,0 +1,956 @@
|
|||||||
|
/*
|
||||||
|
* FreeRTOS V202212.00
|
||||||
|
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* https://www.FreeRTOS.org
|
||||||
|
* https://github.com/FreeRTOS
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "Reg test" - These fill the registers with known values, then check
|
||||||
|
* that each register maintains its expected value for the lifetime of the
|
||||||
|
* task. Each task uses a different set of values. The reg test tasks execute
|
||||||
|
* with a very low priority, so get preempted very frequently. A register
|
||||||
|
* containing an unexpected value is indicative of an error in the context
|
||||||
|
* switching mechanism.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
SECTION .text:CODE:NOROOT(2)
|
||||||
|
THUMB
|
||||||
|
|
||||||
|
EXTERN ulRegTest1LoopCounter
|
||||||
|
EXTERN ulRegTest2LoopCounter
|
||||||
|
EXTERN ulRegTest3LoopCounter
|
||||||
|
EXTERN ulRegTest4LoopCounter
|
||||||
|
|
||||||
|
PUBLIC vRegTest1Asm
|
||||||
|
PUBLIC vRegTest2Asm
|
||||||
|
PUBLIC vRegTest3Asm
|
||||||
|
PUBLIC vRegTest4Asm
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
vRegTest1Asm:
|
||||||
|
/* Fill the core registers with known values. */
|
||||||
|
movs r0, #100
|
||||||
|
movs r1, #101
|
||||||
|
movs r2, #102
|
||||||
|
movs r3, #103
|
||||||
|
movs r4, #104
|
||||||
|
movs r5, #105
|
||||||
|
movs r6, #106
|
||||||
|
movs r7, #107
|
||||||
|
movs r8, #108
|
||||||
|
movs r9, #109
|
||||||
|
movs r10, #110
|
||||||
|
movs r11, #111
|
||||||
|
movs r12, #112
|
||||||
|
|
||||||
|
vmov.f32 s1, #1.5
|
||||||
|
vmov.f32 s2, #2.5
|
||||||
|
vmov.f32 s3, #3.5
|
||||||
|
vmov.f32 s4, #4.5
|
||||||
|
vmov.f32 s5, #5.5
|
||||||
|
vmov.f32 s6, #6.5
|
||||||
|
vmov.f32 s7, #7.5
|
||||||
|
vmov.f32 s8, #8.5
|
||||||
|
vmov.f32 s9, #9.5
|
||||||
|
vmov.f32 s10, #10.5
|
||||||
|
vmov.f32 s11, #11.5
|
||||||
|
vmov.f32 s12, #12.5
|
||||||
|
vmov.f32 s13, #13.5
|
||||||
|
vmov.f32 s14, #14.5
|
||||||
|
vmov.f32 s15, #1.0
|
||||||
|
vmov.f32 s16, #2.0
|
||||||
|
vmov.f32 s17, #3.0
|
||||||
|
vmov.f32 s18, #4.0
|
||||||
|
vmov.f32 s19, #5.0
|
||||||
|
vmov.f32 s20, #6.0
|
||||||
|
vmov.f32 s21, #7.0
|
||||||
|
vmov.f32 s22, #8.0
|
||||||
|
vmov.f32 s23, #9.0
|
||||||
|
vmov.f32 s24, #10.0
|
||||||
|
vmov.f32 s25, #11.0
|
||||||
|
vmov.f32 s26, #12.0
|
||||||
|
vmov.f32 s27, #13.0
|
||||||
|
vmov.f32 s28, #14.0
|
||||||
|
vmov.f32 s29, #1.5
|
||||||
|
vmov.f32 s30, #2.5
|
||||||
|
vmov.f32 s31, #3.5
|
||||||
|
|
||||||
|
reg1_loop:
|
||||||
|
cmp r0, #100
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r1, #101
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r2, #102
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r3, #103
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r4, #104
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r5, #105
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r6, #106
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r7, #107
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r8, #108
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r9, #109
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r10, #110
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r11, #111
|
||||||
|
bne reg1_error_loop
|
||||||
|
cmp r12, #112
|
||||||
|
bne reg1_error_loop
|
||||||
|
|
||||||
|
/* Verify that FPU registers contain correct values. */
|
||||||
|
vmov.f32 s0, #1.5
|
||||||
|
vcmp.f32 s1, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #2.5
|
||||||
|
vcmp.f32 s2, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #3.5
|
||||||
|
vcmp.f32 s3, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #4.5
|
||||||
|
vcmp.f32 s4, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #5.5
|
||||||
|
vcmp.f32 s5, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #6.5
|
||||||
|
vcmp.f32 s6, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #7.5
|
||||||
|
vcmp.f32 s7, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #8.5
|
||||||
|
vcmp.f32 s8, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #9.5
|
||||||
|
vcmp.f32 s9, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #10.5
|
||||||
|
vcmp.f32 s10, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #11.5
|
||||||
|
vcmp.f32 s11, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #12.5
|
||||||
|
vcmp.f32 s12, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #13.5
|
||||||
|
vcmp.f32 s13, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #14.5
|
||||||
|
vcmp.f32 s14, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #1.0
|
||||||
|
vcmp.f32 s15, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #2.0
|
||||||
|
vcmp.f32 s16, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #3.0
|
||||||
|
vcmp.f32 s17, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #4.0
|
||||||
|
vcmp.f32 s18, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #5.0
|
||||||
|
vcmp.f32 s19, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #6.0
|
||||||
|
vcmp.f32 s20, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #7.0
|
||||||
|
vcmp.f32 s21, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #8.0
|
||||||
|
vcmp.f32 s22, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #9.0
|
||||||
|
vcmp.f32 s23, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #10.0
|
||||||
|
vcmp.f32 s24, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #11.0
|
||||||
|
vcmp.f32 s25, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #12.0
|
||||||
|
vcmp.f32 s26, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #13.0
|
||||||
|
vcmp.f32 s27, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #14.0
|
||||||
|
vcmp.f32 s28, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #1.5
|
||||||
|
vcmp.f32 s29, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #2.5
|
||||||
|
vcmp.f32 s30, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
vmov.f32 s0, #3.5
|
||||||
|
vcmp.f32 s31, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg1_error_loop
|
||||||
|
|
||||||
|
/* Everything passed, inc the loop counter. */
|
||||||
|
push { r0, r1 }
|
||||||
|
ldr r0, =ulRegTest1LoopCounter
|
||||||
|
ldr r1, [r0]
|
||||||
|
adds r1, r1, #1
|
||||||
|
str r1, [r0]
|
||||||
|
|
||||||
|
/* Yield to increase test coverage. */
|
||||||
|
movs r0, #0x01
|
||||||
|
ldr r1, =0xe000ed04 /* NVIC_ICSR. */
|
||||||
|
lsls r0, r0, #28 /* Shift to PendSV bit. */
|
||||||
|
str r0, [r1]
|
||||||
|
dsb
|
||||||
|
pop { r0, r1 }
|
||||||
|
|
||||||
|
/* Start again. */
|
||||||
|
b reg1_loop
|
||||||
|
|
||||||
|
reg1_error_loop:
|
||||||
|
b reg1_error_loop
|
||||||
|
nop
|
||||||
|
ltorg /* Create a literal pool to ensure that the constants accessed in the above
|
||||||
|
* code are not out of range. */
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
vRegTest2Asm:
|
||||||
|
/* Fill the core registers with known values. */
|
||||||
|
movs r0, #0
|
||||||
|
movs r1, #1
|
||||||
|
movs r2, #2
|
||||||
|
movs r3, #3
|
||||||
|
movs r4, #4
|
||||||
|
movs r5, #5
|
||||||
|
movs r6, #6
|
||||||
|
movs r7, #7
|
||||||
|
mov r8, #8
|
||||||
|
mov r9, #9
|
||||||
|
movs r10, #10
|
||||||
|
movs r11, #11
|
||||||
|
movs r12, #12
|
||||||
|
|
||||||
|
/* Fill the FPU registers with known values. */
|
||||||
|
vmov.f32 s1, #1.0
|
||||||
|
vmov.f32 s2, #2.0
|
||||||
|
vmov.f32 s3, #3.0
|
||||||
|
vmov.f32 s4, #4.0
|
||||||
|
vmov.f32 s5, #5.0
|
||||||
|
vmov.f32 s6, #6.0
|
||||||
|
vmov.f32 s7, #7.0
|
||||||
|
vmov.f32 s8, #8.0
|
||||||
|
vmov.f32 s9, #9.0
|
||||||
|
vmov.f32 s10, #10.0
|
||||||
|
vmov.f32 s11, #11.0
|
||||||
|
vmov.f32 s12, #12.0
|
||||||
|
vmov.f32 s13, #13.0
|
||||||
|
vmov.f32 s14, #14.0
|
||||||
|
vmov.f32 s15, #1.5
|
||||||
|
vmov.f32 s16, #2.5
|
||||||
|
vmov.f32 s17, #3.5
|
||||||
|
vmov.f32 s18, #4.5
|
||||||
|
vmov.f32 s19, #5.5
|
||||||
|
vmov.f32 s20, #6.5
|
||||||
|
vmov.f32 s21, #7.5
|
||||||
|
vmov.f32 s22, #8.5
|
||||||
|
vmov.f32 s23, #9.5
|
||||||
|
vmov.f32 s24, #10.5
|
||||||
|
vmov.f32 s25, #11.5
|
||||||
|
vmov.f32 s26, #12.5
|
||||||
|
vmov.f32 s27, #13.5
|
||||||
|
vmov.f32 s28, #14.5
|
||||||
|
vmov.f32 s29, #1.0
|
||||||
|
vmov.f32 s30, #2.0
|
||||||
|
vmov.f32 s31, #3.0
|
||||||
|
|
||||||
|
reg2_loop:
|
||||||
|
/* Verify that core registers contain correct values. */
|
||||||
|
cmp r0, #0
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r1, #1
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r2, #2
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r3, #3
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r4, #4
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r5, #5
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r6, #6
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r7, #7
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r8, #8
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r9, #9
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r10, #10
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r11, #11
|
||||||
|
bne reg2_error_loop
|
||||||
|
cmp r12, #12
|
||||||
|
bne reg2_error_loop
|
||||||
|
|
||||||
|
/* Verify that FPU registers contain correct values. */
|
||||||
|
vmov.f32 s0, #1.0
|
||||||
|
vcmp.f32 s1, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #2.0
|
||||||
|
vcmp.f32 s2, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #3.0
|
||||||
|
vcmp.f32 s3, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #4.0
|
||||||
|
vcmp.f32 s4, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #5.0
|
||||||
|
vcmp.f32 s5, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #6.0
|
||||||
|
vcmp.f32 s6, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #7.0
|
||||||
|
vcmp.f32 s7, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #8.0
|
||||||
|
vcmp.f32 s8, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #9.0
|
||||||
|
vcmp.f32 s9, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #10.0
|
||||||
|
vcmp.f32 s10, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #11.0
|
||||||
|
vcmp.f32 s11, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #12.0
|
||||||
|
vcmp.f32 s12, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #13.0
|
||||||
|
vcmp.f32 s13, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #14.0
|
||||||
|
vcmp.f32 s14, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #1.5
|
||||||
|
vcmp.f32 s15, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #2.5
|
||||||
|
vcmp.f32 s16, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #3.5
|
||||||
|
vcmp.f32 s17, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #4.5
|
||||||
|
vcmp.f32 s18, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #5.5
|
||||||
|
vcmp.f32 s19, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #6.5
|
||||||
|
vcmp.f32 s20, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #7.5
|
||||||
|
vcmp.f32 s21, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #8.5
|
||||||
|
vcmp.f32 s22, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #9.5
|
||||||
|
vcmp.f32 s23, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #10.5
|
||||||
|
vcmp.f32 s24, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #11.5
|
||||||
|
vcmp.f32 s25, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #12.5
|
||||||
|
vcmp.f32 s26, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #13.5
|
||||||
|
vcmp.f32 s27, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #14.5
|
||||||
|
vcmp.f32 s28, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #1.0
|
||||||
|
vcmp.f32 s29, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #2.0
|
||||||
|
vcmp.f32 s30, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
vmov.f32 s0, #3.0
|
||||||
|
vcmp.f32 s31, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg2_error_loop
|
||||||
|
|
||||||
|
/* Everything passed, inc the loop counter. */
|
||||||
|
push { r0, r1 }
|
||||||
|
ldr r0, =ulRegTest2LoopCounter
|
||||||
|
ldr r1, [r0]
|
||||||
|
adds r1, r1, #1
|
||||||
|
str r1, [r0]
|
||||||
|
pop { r0, r1 }
|
||||||
|
|
||||||
|
/* Start again. */
|
||||||
|
b reg2_loop
|
||||||
|
|
||||||
|
reg2_error_loop:
|
||||||
|
b reg2_error_loop
|
||||||
|
nop
|
||||||
|
ltorg /* Create a literal pool to ensure that the constants accessed in the above
|
||||||
|
* code are not out of range. */
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
vRegTest3Asm:
|
||||||
|
/* Fill the core registers with known values. */
|
||||||
|
movs r0, #100
|
||||||
|
movs r1, #101
|
||||||
|
movs r2, #102
|
||||||
|
movs r3, #103
|
||||||
|
movs r4, #104
|
||||||
|
movs r5, #105
|
||||||
|
movs r6, #106
|
||||||
|
movs r7, #107
|
||||||
|
mov r8, #108
|
||||||
|
mov r9, #109
|
||||||
|
mov r10, #110
|
||||||
|
mov r11, #111
|
||||||
|
mov r12, #112
|
||||||
|
|
||||||
|
/* Fill the FPU registers with known values. */
|
||||||
|
vmov.f32 s0, #1.5
|
||||||
|
vmov.f32 s2, #2.0
|
||||||
|
vmov.f32 s3, #3.5
|
||||||
|
vmov.f32 s4, #4.0
|
||||||
|
vmov.f32 s5, #5.5
|
||||||
|
vmov.f32 s6, #6.0
|
||||||
|
vmov.f32 s7, #7.5
|
||||||
|
vmov.f32 s8, #8.0
|
||||||
|
vmov.f32 s9, #9.5
|
||||||
|
vmov.f32 s10, #10.0
|
||||||
|
vmov.f32 s11, #11.5
|
||||||
|
vmov.f32 s12, #12.0
|
||||||
|
vmov.f32 s13, #13.5
|
||||||
|
vmov.f32 s14, #14.0
|
||||||
|
vmov.f32 s15, #1.5
|
||||||
|
vmov.f32 s16, #2.0
|
||||||
|
vmov.f32 s17, #3.5
|
||||||
|
vmov.f32 s18, #4.0
|
||||||
|
vmov.f32 s19, #5.5
|
||||||
|
vmov.f32 s20, #6.0
|
||||||
|
vmov.f32 s21, #7.5
|
||||||
|
vmov.f32 s22, #8.0
|
||||||
|
vmov.f32 s23, #9.5
|
||||||
|
vmov.f32 s24, #10.0
|
||||||
|
vmov.f32 s25, #11.5
|
||||||
|
vmov.f32 s26, #12.0
|
||||||
|
vmov.f32 s27, #13.5
|
||||||
|
vmov.f32 s28, #14.0
|
||||||
|
vmov.f32 s29, #1.5
|
||||||
|
vmov.f32 s30, #2.0
|
||||||
|
vmov.f32 s31, #3.5
|
||||||
|
|
||||||
|
reg3_loop:
|
||||||
|
/* Verify that core registers contain correct values. */
|
||||||
|
cmp r0, #100
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r1, #101
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r2, #102
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r3, #103
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r4, #104
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r5, #105
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r6, #106
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r7, #107
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r8, #108
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r9, #109
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r10, #110
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r11, #111
|
||||||
|
bne reg3_error_loop
|
||||||
|
cmp r12, #112
|
||||||
|
bne reg3_error_loop
|
||||||
|
|
||||||
|
/* Verify that FPU registers contain correct values. */
|
||||||
|
vmov.f32 s1, #1.5
|
||||||
|
vcmp.f32 s0, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #2.0
|
||||||
|
vcmp.f32 s2, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #3.5
|
||||||
|
vcmp.f32 s3, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #4.0
|
||||||
|
vcmp.f32 s4, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #5.5
|
||||||
|
vcmp.f32 s5, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #6.0
|
||||||
|
vcmp.f32 s6, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #7.5
|
||||||
|
vcmp.f32 s7, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #8.0
|
||||||
|
vcmp.f32 s8, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #9.5
|
||||||
|
vcmp.f32 s9, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #10.0
|
||||||
|
vcmp.f32 s10, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #11.5
|
||||||
|
vcmp.f32 s11, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #12.0
|
||||||
|
vcmp.f32 s12, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #13.5
|
||||||
|
vcmp.f32 s13, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #14.0
|
||||||
|
vcmp.f32 s14, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #1.5
|
||||||
|
vcmp.f32 s15, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #2.0
|
||||||
|
vcmp.f32 s16, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #3.5
|
||||||
|
vcmp.f32 s17, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #4.0
|
||||||
|
vcmp.f32 s18, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #5.5
|
||||||
|
vcmp.f32 s19, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #6.0
|
||||||
|
vcmp.f32 s20, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #7.5
|
||||||
|
vcmp.f32 s21, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #8.0
|
||||||
|
vcmp.f32 s22, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #9.5
|
||||||
|
vcmp.f32 s23, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #10.0
|
||||||
|
vcmp.f32 s24, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #11.5
|
||||||
|
vcmp.f32 s25, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #12.0
|
||||||
|
vcmp.f32 s26, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #13.5
|
||||||
|
vcmp.f32 s27, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #14.0
|
||||||
|
vcmp.f32 s28, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #1.5
|
||||||
|
vcmp.f32 s29, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #2.0
|
||||||
|
vcmp.f32 s30, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
vmov.f32 s1, #3.5
|
||||||
|
vcmp.f32 s31, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg3_error_loop
|
||||||
|
|
||||||
|
/* Everything passed, inc the loop counter. */
|
||||||
|
push { r0, r1 }
|
||||||
|
ldr r0, =ulRegTest3LoopCounter
|
||||||
|
ldr r1, [r0]
|
||||||
|
adds r1, r1, #1
|
||||||
|
str r1, [r0]
|
||||||
|
|
||||||
|
/* Yield to increase test coverage. */
|
||||||
|
movs r0, #0x01
|
||||||
|
ldr r1, =0xe000ed04 /* NVIC_ICSR. */
|
||||||
|
lsl r0, r0, #28 /* Shift to PendSV bit. */
|
||||||
|
str r0, [r1]
|
||||||
|
dsb
|
||||||
|
pop { r0, r1 }
|
||||||
|
|
||||||
|
/* Start again. */
|
||||||
|
b reg3_loop
|
||||||
|
|
||||||
|
reg3_error_loop:
|
||||||
|
b reg3_error_loop
|
||||||
|
nop
|
||||||
|
ltorg /* Create a literal pool to ensure that the constants accessed in the above
|
||||||
|
* code are not out of range. */
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
vRegTest4Asm:
|
||||||
|
/* Fill the core registers with known values. */
|
||||||
|
movs r0, #0
|
||||||
|
movs r1, #1
|
||||||
|
movs r2, #2
|
||||||
|
movs r3, #3
|
||||||
|
movs r4, #4
|
||||||
|
movs r5, #5
|
||||||
|
movs r6, #6
|
||||||
|
movs r7, #7
|
||||||
|
mov r8, #8
|
||||||
|
mov r9, #9
|
||||||
|
movs r10, #10
|
||||||
|
movs r11, #11
|
||||||
|
movs r12, #12
|
||||||
|
|
||||||
|
/* Fill the FPU registers with known values. */
|
||||||
|
vmov.f32 s0, #1.5
|
||||||
|
vmov.f32 s2, #2.0
|
||||||
|
vmov.f32 s3, #3.0
|
||||||
|
vmov.f32 s4, #4.5
|
||||||
|
vmov.f32 s5, #5.0
|
||||||
|
vmov.f32 s6, #6.0
|
||||||
|
vmov.f32 s7, #7.5
|
||||||
|
vmov.f32 s8, #8.0
|
||||||
|
vmov.f32 s9, #9.0
|
||||||
|
vmov.f32 s10, #10.5
|
||||||
|
vmov.f32 s11, #11.0
|
||||||
|
vmov.f32 s12, #12.0
|
||||||
|
vmov.f32 s13, #13.5
|
||||||
|
vmov.f32 s14, #14.0
|
||||||
|
vmov.f32 s15, #1.0
|
||||||
|
vmov.f32 s16, #2.5
|
||||||
|
vmov.f32 s17, #3.0
|
||||||
|
vmov.f32 s18, #4.0
|
||||||
|
vmov.f32 s19, #5.5
|
||||||
|
vmov.f32 s20, #6.0
|
||||||
|
vmov.f32 s21, #7.0
|
||||||
|
vmov.f32 s22, #8.5
|
||||||
|
vmov.f32 s23, #9.0
|
||||||
|
vmov.f32 s24, #10.0
|
||||||
|
vmov.f32 s25, #11.5
|
||||||
|
vmov.f32 s26, #12.0
|
||||||
|
vmov.f32 s27, #13.0
|
||||||
|
vmov.f32 s28, #14.5
|
||||||
|
vmov.f32 s29, #1.0
|
||||||
|
vmov.f32 s30, #2.0
|
||||||
|
vmov.f32 s31, #3.5
|
||||||
|
|
||||||
|
reg4_loop:
|
||||||
|
/* Verify that core registers contain correct values. */
|
||||||
|
cmp r0, #0
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r1, #1
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r2, #2
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r3, #3
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r4, #4
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r5, #5
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r6, #6
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r7, #7
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r8, #8
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r9, #9
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r10, #10
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r11, #11
|
||||||
|
bne reg4_error_loop
|
||||||
|
cmp r12, #12
|
||||||
|
bne reg4_error_loop
|
||||||
|
|
||||||
|
/* Verify that FPU registers contain correct values. */
|
||||||
|
vmov.f32 s1, #1.5
|
||||||
|
vcmp.f32 s0, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #2.0
|
||||||
|
vcmp.f32 s2, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #3.0
|
||||||
|
vcmp.f32 s3, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #4.5
|
||||||
|
vcmp.f32 s4, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #5.0
|
||||||
|
vcmp.f32 s5, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #6.0
|
||||||
|
vcmp.f32 s6, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #7.5
|
||||||
|
vcmp.f32 s7, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #8.0
|
||||||
|
vcmp.f32 s8, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #9.0
|
||||||
|
vcmp.f32 s9, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #10.5
|
||||||
|
vcmp.f32 s10, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #11.0
|
||||||
|
vcmp.f32 s11, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #12.0
|
||||||
|
vcmp.f32 s12, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #13.5
|
||||||
|
vcmp.f32 s13, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #14.0
|
||||||
|
vcmp.f32 s14, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #1.0
|
||||||
|
vcmp.f32 s15, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #2.5
|
||||||
|
vcmp.f32 s16, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #3.0
|
||||||
|
vcmp.f32 s17, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #4.0
|
||||||
|
vcmp.f32 s18, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #5.5
|
||||||
|
vcmp.f32 s19, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #6.0
|
||||||
|
vcmp.f32 s20, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #7.0
|
||||||
|
vcmp.f32 s21, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #8.5
|
||||||
|
vcmp.f32 s22, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #9.0
|
||||||
|
vcmp.f32 s23, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #10.0
|
||||||
|
vcmp.f32 s24, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #11.5
|
||||||
|
vcmp.f32 s25, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #12.0
|
||||||
|
vcmp.f32 s26, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #13.0
|
||||||
|
vcmp.f32 s27, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #14.5
|
||||||
|
vcmp.f32 s28, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #1.0
|
||||||
|
vcmp.f32 s29, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #2.0
|
||||||
|
vcmp.f32 s30, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
vmov.f32 s1, #3.5
|
||||||
|
vcmp.f32 s31, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne reg4_error_loop
|
||||||
|
|
||||||
|
/* Everything passed, inc the loop counter. */
|
||||||
|
push { r0, r1 }
|
||||||
|
ldr r0, =ulRegTest4LoopCounter
|
||||||
|
ldr r1, [r0]
|
||||||
|
adds r1, r1, #1
|
||||||
|
str r1, [r0]
|
||||||
|
pop { r0, r1 }
|
||||||
|
|
||||||
|
/* Start again. */
|
||||||
|
b reg4_loop
|
||||||
|
|
||||||
|
reg4_error_loop:
|
||||||
|
b reg4_error_loop
|
||||||
|
nop
|
||||||
|
ltorg /* Create a literal pool to ensure that the constants accessed in the above
|
||||||
|
* code are not out of range. */
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
END
|
@ -0,0 +1,956 @@
|
|||||||
|
;/*
|
||||||
|
; * FreeRTOS V202212.00
|
||||||
|
; * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
; *
|
||||||
|
; * Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
; * this software and associated documentation files (the "Software"), to deal in
|
||||||
|
; * the Software without restriction, including without limitation the rights to
|
||||||
|
; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
; * the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
; * subject to the following conditions:
|
||||||
|
; *
|
||||||
|
; * The above copyright notice and this permission notice shall be included in all
|
||||||
|
; * copies or substantial portions of the Software.
|
||||||
|
; *
|
||||||
|
; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
; *
|
||||||
|
; * https://www.FreeRTOS.org
|
||||||
|
; * https://github.com/FreeRTOS
|
||||||
|
; *
|
||||||
|
; */
|
||||||
|
|
||||||
|
;/*
|
||||||
|
; * "Reg test" tasks - These fill the registers with known values, then check
|
||||||
|
; * that each register maintains its expected value for the lifetime of the
|
||||||
|
; * task. Each task uses a different set of values. The reg test tasks execute
|
||||||
|
; * with a very low priority, so get preempted very frequently. A register
|
||||||
|
; * containing an unexpected value is indicative of an error in the context
|
||||||
|
; * switching mechanism.
|
||||||
|
; */
|
||||||
|
;/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
IMPORT ulRegTest1LoopCounter
|
||||||
|
IMPORT ulRegTest2LoopCounter
|
||||||
|
IMPORT ulRegTest3LoopCounter
|
||||||
|
IMPORT ulRegTest4LoopCounter
|
||||||
|
|
||||||
|
EXPORT vRegTest1Asm
|
||||||
|
EXPORT vRegTest2Asm
|
||||||
|
EXPORT vRegTest3Asm
|
||||||
|
EXPORT vRegTest4Asm
|
||||||
|
|
||||||
|
AREA REG_TESTS_ASM, CODE, READONLY
|
||||||
|
;/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
vRegTest1Asm
|
||||||
|
|
||||||
|
PRESERVE8
|
||||||
|
|
||||||
|
;/* Fill the core registers with known values. */
|
||||||
|
movs r0, #100
|
||||||
|
movs r1, #101
|
||||||
|
movs r2, #102
|
||||||
|
movs r3, #103
|
||||||
|
movs r4, #104
|
||||||
|
movs r5, #105
|
||||||
|
movs r6, #106
|
||||||
|
movs r7, #107
|
||||||
|
mov r8, #108
|
||||||
|
mov r9, #109
|
||||||
|
mov r10, #110
|
||||||
|
mov r11, #111
|
||||||
|
mov r12, #112
|
||||||
|
|
||||||
|
;/* Fill the FPU registers with known values. */
|
||||||
|
vmov.f32 s1, #1.5
|
||||||
|
vmov.f32 s2, #2.5
|
||||||
|
vmov.f32 s3, #3.5
|
||||||
|
vmov.f32 s4, #4.5
|
||||||
|
vmov.f32 s5, #5.5
|
||||||
|
vmov.f32 s6, #6.5
|
||||||
|
vmov.f32 s7, #7.5
|
||||||
|
vmov.f32 s8, #8.5
|
||||||
|
vmov.f32 s9, #9.5
|
||||||
|
vmov.f32 s10, #10.5
|
||||||
|
vmov.f32 s11, #11.5
|
||||||
|
vmov.f32 s12, #12.5
|
||||||
|
vmov.f32 s13, #13.5
|
||||||
|
vmov.f32 s14, #14.5
|
||||||
|
vmov.f32 s15, #1.0
|
||||||
|
vmov.f32 s16, #2.0
|
||||||
|
vmov.f32 s17, #3.0
|
||||||
|
vmov.f32 s18, #4.0
|
||||||
|
vmov.f32 s19, #5.0
|
||||||
|
vmov.f32 s20, #6.0
|
||||||
|
vmov.f32 s21, #7.0
|
||||||
|
vmov.f32 s22, #8.0
|
||||||
|
vmov.f32 s23, #9.0
|
||||||
|
vmov.f32 s24, #10.0
|
||||||
|
vmov.f32 s25, #11.0
|
||||||
|
vmov.f32 s26, #12.0
|
||||||
|
vmov.f32 s27, #13.0
|
||||||
|
vmov.f32 s28, #14.0
|
||||||
|
vmov.f32 s29, #1.5
|
||||||
|
vmov.f32 s30, #2.5
|
||||||
|
vmov.f32 s31, #3.5
|
||||||
|
|
||||||
|
reg1_loop
|
||||||
|
;/* Verify that core registers contain correct values. */
|
||||||
|
cmp r0, #100
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r1, #101
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r2, #102
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r3, #103
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r4, #104
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r5, #105
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r6, #106
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r7, #107
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r8, #108
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r9, #109
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r10, #110
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r11, #111
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
cmp r12, #112
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
|
||||||
|
;/* Verify that FPU registers contain correct values. */
|
||||||
|
vmov.f32 s0, #1.5 ;/* s0 = 1.5. */
|
||||||
|
vcmp.f32 s1, s0 ;/* Compare s0 and s1. */
|
||||||
|
vmrs APSR_nzcv, FPSCR ;/* Copy floating point flags (FPSCR flags) to ASPR flags - needed for next bne.w to work. */
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #2.5
|
||||||
|
vcmp.f32 s2, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #3.5
|
||||||
|
vcmp.f32 s3, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #4.5
|
||||||
|
vcmp.f32 s4, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #5.5
|
||||||
|
vcmp.f32 s5, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #6.5
|
||||||
|
vcmp.f32 s6, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #7.5
|
||||||
|
vcmp.f32 s7, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #8.5
|
||||||
|
vcmp.f32 s8, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #9.5
|
||||||
|
vcmp.f32 s9, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #10.5
|
||||||
|
vcmp.f32 s10, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #11.5
|
||||||
|
vcmp.f32 s11, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #12.5
|
||||||
|
vcmp.f32 s12, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #13.5
|
||||||
|
vcmp.f32 s13, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #14.5
|
||||||
|
vcmp.f32 s14, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #1.0
|
||||||
|
vcmp.f32 s15, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #2.0
|
||||||
|
vcmp.f32 s16, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #3.0
|
||||||
|
vcmp.f32 s17, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #4.0
|
||||||
|
vcmp.f32 s18, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #5.0
|
||||||
|
vcmp.f32 s19, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #6.0
|
||||||
|
vcmp.f32 s20, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #7.0
|
||||||
|
vcmp.f32 s21, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #8.0
|
||||||
|
vcmp.f32 s22, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #9.0
|
||||||
|
vcmp.f32 s23, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #10.0
|
||||||
|
vcmp.f32 s24, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #11.0
|
||||||
|
vcmp.f32 s25, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #12.0
|
||||||
|
vcmp.f32 s26, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #13.0
|
||||||
|
vcmp.f32 s27, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #14.0
|
||||||
|
vcmp.f32 s28, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #1.5
|
||||||
|
vcmp.f32 s29, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #2.5
|
||||||
|
vcmp.f32 s30, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
vmov.f32 s0, #3.5
|
||||||
|
vcmp.f32 s31, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg1_error_loop
|
||||||
|
|
||||||
|
;/* Everything passed, inc the loop counter. */
|
||||||
|
push { r0, r1 }
|
||||||
|
ldr r0, =ulRegTest1LoopCounter
|
||||||
|
ldr r1, [r0]
|
||||||
|
adds r1, r1, #1
|
||||||
|
str r1, [r0]
|
||||||
|
|
||||||
|
;/* Yield to increase test coverage. */
|
||||||
|
movs r0, #0x01
|
||||||
|
ldr r1, =0xe000ed04 ;/* NVIC_ICSR. */
|
||||||
|
lsls r0, #28 ;/* Shift to PendSV bit. */
|
||||||
|
str r0, [r1]
|
||||||
|
dsb
|
||||||
|
pop { r0, r1 }
|
||||||
|
|
||||||
|
;/* Start again. */
|
||||||
|
b reg1_loop
|
||||||
|
|
||||||
|
reg1_error_loop
|
||||||
|
b reg1_error_loop
|
||||||
|
LTORG
|
||||||
|
;/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
vRegTest2Asm
|
||||||
|
|
||||||
|
PRESERVE8
|
||||||
|
|
||||||
|
;/* Fill the core registers with known values. */
|
||||||
|
movs r0, #0
|
||||||
|
movs r1, #1
|
||||||
|
movs r2, #2
|
||||||
|
movs r3, #3
|
||||||
|
movs r4, #4
|
||||||
|
movs r5, #5
|
||||||
|
movs r6, #6
|
||||||
|
movs r7, #7
|
||||||
|
mov r8, #8
|
||||||
|
mov r9, #9
|
||||||
|
movs r10, #10
|
||||||
|
movs r11, #11
|
||||||
|
movs r12, #12
|
||||||
|
|
||||||
|
;/* Fill the FPU registers with known values. */
|
||||||
|
vmov.f32 s1, #1.0
|
||||||
|
vmov.f32 s2, #2.0
|
||||||
|
vmov.f32 s3, #3.0
|
||||||
|
vmov.f32 s4, #4.0
|
||||||
|
vmov.f32 s5, #5.0
|
||||||
|
vmov.f32 s6, #6.0
|
||||||
|
vmov.f32 s7, #7.0
|
||||||
|
vmov.f32 s8, #8.0
|
||||||
|
vmov.f32 s9, #9.0
|
||||||
|
vmov.f32 s10, #10.0
|
||||||
|
vmov.f32 s11, #11.0
|
||||||
|
vmov.f32 s12, #12.0
|
||||||
|
vmov.f32 s13, #13.0
|
||||||
|
vmov.f32 s14, #14.0
|
||||||
|
vmov.f32 s15, #1.5
|
||||||
|
vmov.f32 s16, #2.5
|
||||||
|
vmov.f32 s17, #3.5
|
||||||
|
vmov.f32 s18, #4.5
|
||||||
|
vmov.f32 s19, #5.5
|
||||||
|
vmov.f32 s20, #6.5
|
||||||
|
vmov.f32 s21, #7.5
|
||||||
|
vmov.f32 s22, #8.5
|
||||||
|
vmov.f32 s23, #9.5
|
||||||
|
vmov.f32 s24, #10.5
|
||||||
|
vmov.f32 s25, #11.5
|
||||||
|
vmov.f32 s26, #12.5
|
||||||
|
vmov.f32 s27, #13.5
|
||||||
|
vmov.f32 s28, #14.5
|
||||||
|
vmov.f32 s29, #1.0
|
||||||
|
vmov.f32 s30, #2.0
|
||||||
|
vmov.f32 s31, #3.0
|
||||||
|
|
||||||
|
reg2_loop
|
||||||
|
;/* Verify that core registers contain correct values. */
|
||||||
|
cmp r0, #0
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r1, #1
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r2, #2
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r3, #3
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r4, #4
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r5, #5
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r6, #6
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r7, #7
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r8, #8
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r9, #9
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r10, #10
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r11, #11
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
cmp r12, #12
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
|
||||||
|
;/* Verify that FPU registers contain correct values. */
|
||||||
|
vmov.f32 s0, #1.0
|
||||||
|
vcmp.f32 s1, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #2.0
|
||||||
|
vcmp.f32 s2, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #3.0
|
||||||
|
vcmp.f32 s3, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #4.0
|
||||||
|
vcmp.f32 s4, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #5.0
|
||||||
|
vcmp.f32 s5, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #6.0
|
||||||
|
vcmp.f32 s6, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #7.0
|
||||||
|
vcmp.f32 s7, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #8.0
|
||||||
|
vcmp.f32 s8, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #9.0
|
||||||
|
vcmp.f32 s9, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #10.0
|
||||||
|
vcmp.f32 s10, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #11.0
|
||||||
|
vcmp.f32 s11, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #12.0
|
||||||
|
vcmp.f32 s12, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #13.0
|
||||||
|
vcmp.f32 s13, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #14.0
|
||||||
|
vcmp.f32 s14, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #1.5
|
||||||
|
vcmp.f32 s15, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #2.5
|
||||||
|
vcmp.f32 s16, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #3.5
|
||||||
|
vcmp.f32 s17, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #4.5
|
||||||
|
vcmp.f32 s18, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #5.5
|
||||||
|
vcmp.f32 s19, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #6.5
|
||||||
|
vcmp.f32 s20, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #7.5
|
||||||
|
vcmp.f32 s21, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #8.5
|
||||||
|
vcmp.f32 s22, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #9.5
|
||||||
|
vcmp.f32 s23, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #10.5
|
||||||
|
vcmp.f32 s24, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #11.5
|
||||||
|
vcmp.f32 s25, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #12.5
|
||||||
|
vcmp.f32 s26, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #13.5
|
||||||
|
vcmp.f32 s27, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #14.5
|
||||||
|
vcmp.f32 s28, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #1.0
|
||||||
|
vcmp.f32 s29, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #2.0
|
||||||
|
vcmp.f32 s30, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
vmov.f32 s0, #3.0
|
||||||
|
vcmp.f32 s31, s0
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg2_error_loop
|
||||||
|
|
||||||
|
;/* Everything passed, inc the loop counter. */
|
||||||
|
push { r0, r1 }
|
||||||
|
ldr r0, =ulRegTest2LoopCounter
|
||||||
|
ldr r1, [r0]
|
||||||
|
adds r1, r1, #1
|
||||||
|
str r1, [r0]
|
||||||
|
pop { r0, r1 }
|
||||||
|
|
||||||
|
;/* Start again. */
|
||||||
|
b reg2_loop
|
||||||
|
|
||||||
|
reg2_error_loop
|
||||||
|
b reg2_error_loop
|
||||||
|
LTORG
|
||||||
|
;/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
vRegTest3Asm
|
||||||
|
|
||||||
|
PRESERVE8
|
||||||
|
|
||||||
|
;/* Fill the core registers with known values. */
|
||||||
|
movs r0, #100
|
||||||
|
movs r1, #101
|
||||||
|
movs r2, #102
|
||||||
|
movs r3, #103
|
||||||
|
movs r4, #104
|
||||||
|
movs r5, #105
|
||||||
|
movs r6, #106
|
||||||
|
movs r7, #107
|
||||||
|
mov r8, #108
|
||||||
|
mov r9, #109
|
||||||
|
mov r10, #110
|
||||||
|
mov r11, #111
|
||||||
|
mov r12, #112
|
||||||
|
|
||||||
|
;/* Fill the FPU registers with known values. */
|
||||||
|
vmov.f32 s0, #1.5
|
||||||
|
vmov.f32 s2, #2.0
|
||||||
|
vmov.f32 s3, #3.5
|
||||||
|
vmov.f32 s4, #4.0
|
||||||
|
vmov.f32 s5, #5.5
|
||||||
|
vmov.f32 s6, #6.0
|
||||||
|
vmov.f32 s7, #7.5
|
||||||
|
vmov.f32 s8, #8.0
|
||||||
|
vmov.f32 s9, #9.5
|
||||||
|
vmov.f32 s10, #10.0
|
||||||
|
vmov.f32 s11, #11.5
|
||||||
|
vmov.f32 s12, #12.0
|
||||||
|
vmov.f32 s13, #13.5
|
||||||
|
vmov.f32 s14, #14.0
|
||||||
|
vmov.f32 s15, #1.5
|
||||||
|
vmov.f32 s16, #2.0
|
||||||
|
vmov.f32 s17, #3.5
|
||||||
|
vmov.f32 s18, #4.0
|
||||||
|
vmov.f32 s19, #5.5
|
||||||
|
vmov.f32 s20, #6.0
|
||||||
|
vmov.f32 s21, #7.5
|
||||||
|
vmov.f32 s22, #8.0
|
||||||
|
vmov.f32 s23, #9.5
|
||||||
|
vmov.f32 s24, #10.0
|
||||||
|
vmov.f32 s25, #11.5
|
||||||
|
vmov.f32 s26, #12.0
|
||||||
|
vmov.f32 s27, #13.5
|
||||||
|
vmov.f32 s28, #14.0
|
||||||
|
vmov.f32 s29, #1.5
|
||||||
|
vmov.f32 s30, #2.0
|
||||||
|
vmov.f32 s31, #3.5
|
||||||
|
|
||||||
|
reg3_loop
|
||||||
|
;/* Verify that core registers contain correct values. */
|
||||||
|
cmp r0, #100
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r1, #101
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r2, #102
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r3, #103
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r4, #104
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r5, #105
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r6, #106
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r7, #107
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r8, #108
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r9, #109
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r10, #110
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r11, #111
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
cmp r12, #112
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
|
||||||
|
;/* Verify that FPU registers contain correct values. */
|
||||||
|
vmov.f32 s1, #1.5
|
||||||
|
vcmp.f32 s0, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #2.0
|
||||||
|
vcmp.f32 s2, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #3.5
|
||||||
|
vcmp.f32 s3, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #4.0
|
||||||
|
vcmp.f32 s4, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #5.5
|
||||||
|
vcmp.f32 s5, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #6.0
|
||||||
|
vcmp.f32 s6, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #7.5
|
||||||
|
vcmp.f32 s7, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #8.0
|
||||||
|
vcmp.f32 s8, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #9.5
|
||||||
|
vcmp.f32 s9, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #10.0
|
||||||
|
vcmp.f32 s10, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #11.5
|
||||||
|
vcmp.f32 s11, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #12.0
|
||||||
|
vcmp.f32 s12, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #13.5
|
||||||
|
vcmp.f32 s13, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #14.0
|
||||||
|
vcmp.f32 s14, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #1.5
|
||||||
|
vcmp.f32 s15, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #2.0
|
||||||
|
vcmp.f32 s16, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #3.5
|
||||||
|
vcmp.f32 s17, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #4.0
|
||||||
|
vcmp.f32 s18, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #5.5
|
||||||
|
vcmp.f32 s19, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #6.0
|
||||||
|
vcmp.f32 s20, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #7.5
|
||||||
|
vcmp.f32 s21, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #8.0
|
||||||
|
vcmp.f32 s22, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #9.5
|
||||||
|
vcmp.f32 s23, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #10.0
|
||||||
|
vcmp.f32 s24, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #11.5
|
||||||
|
vcmp.f32 s25, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #12.0
|
||||||
|
vcmp.f32 s26, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #13.5
|
||||||
|
vcmp.f32 s27, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #14.0
|
||||||
|
vcmp.f32 s28, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #1.5
|
||||||
|
vcmp.f32 s29, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #2.0
|
||||||
|
vcmp.f32 s30, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
vmov.f32 s1, #3.5
|
||||||
|
vcmp.f32 s31, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg3_error_loop
|
||||||
|
|
||||||
|
;/* Everything passed, inc the loop counter. */
|
||||||
|
push { r0, r1 }
|
||||||
|
ldr r0, =ulRegTest3LoopCounter
|
||||||
|
ldr r1, [r0]
|
||||||
|
adds r1, r1, #1
|
||||||
|
str r1, [r0]
|
||||||
|
|
||||||
|
;/* Yield to increase test coverage. */
|
||||||
|
movs r0, #0x01
|
||||||
|
ldr r1, =0xe000ed04 ;/* NVIC_ICSR. */
|
||||||
|
lsls r0, #28 ;/* Shift to PendSV bit. */
|
||||||
|
str r0, [r1]
|
||||||
|
dsb
|
||||||
|
pop { r0, r1 }
|
||||||
|
|
||||||
|
;/* Start again. */
|
||||||
|
b reg3_loop
|
||||||
|
|
||||||
|
reg3_error_loop
|
||||||
|
b reg3_error_loop
|
||||||
|
LTORG
|
||||||
|
;/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
vRegTest4Asm
|
||||||
|
|
||||||
|
PRESERVE8
|
||||||
|
|
||||||
|
;/* Fill the core registers with known values. */
|
||||||
|
movs r0, #0
|
||||||
|
movs r1, #1
|
||||||
|
movs r2, #2
|
||||||
|
movs r3, #3
|
||||||
|
movs r4, #4
|
||||||
|
movs r5, #5
|
||||||
|
movs r6, #6
|
||||||
|
movs r7, #7
|
||||||
|
mov r8, #8
|
||||||
|
mov r9, #9
|
||||||
|
movs r10, #10
|
||||||
|
movs r11, #11
|
||||||
|
movs r12, #12
|
||||||
|
|
||||||
|
;/* Fill the FPU registers with known values. */
|
||||||
|
vmov.f32 s0, #1.5
|
||||||
|
vmov.f32 s2, #2.0
|
||||||
|
vmov.f32 s3, #3.0
|
||||||
|
vmov.f32 s4, #4.5
|
||||||
|
vmov.f32 s5, #5.0
|
||||||
|
vmov.f32 s6, #6.0
|
||||||
|
vmov.f32 s7, #7.5
|
||||||
|
vmov.f32 s8, #8.0
|
||||||
|
vmov.f32 s9, #9.0
|
||||||
|
vmov.f32 s10, #10.5
|
||||||
|
vmov.f32 s11, #11.0
|
||||||
|
vmov.f32 s12, #12.0
|
||||||
|
vmov.f32 s13, #13.5
|
||||||
|
vmov.f32 s14, #14.0
|
||||||
|
vmov.f32 s15, #1.0
|
||||||
|
vmov.f32 s16, #2.5
|
||||||
|
vmov.f32 s17, #3.0
|
||||||
|
vmov.f32 s18, #4.0
|
||||||
|
vmov.f32 s19, #5.5
|
||||||
|
vmov.f32 s20, #6.0
|
||||||
|
vmov.f32 s21, #7.0
|
||||||
|
vmov.f32 s22, #8.5
|
||||||
|
vmov.f32 s23, #9.0
|
||||||
|
vmov.f32 s24, #10.0
|
||||||
|
vmov.f32 s25, #11.5
|
||||||
|
vmov.f32 s26, #12.0
|
||||||
|
vmov.f32 s27, #13.0
|
||||||
|
vmov.f32 s28, #14.5
|
||||||
|
vmov.f32 s29, #1.0
|
||||||
|
vmov.f32 s30, #2.0
|
||||||
|
vmov.f32 s31, #3.5
|
||||||
|
|
||||||
|
reg4_loop
|
||||||
|
;/* Verify that core registers contain correct values. */
|
||||||
|
cmp r0, #0
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r1, #1
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r2, #2
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r3, #3
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r4, #4
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r5, #5
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r6, #6
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r7, #7
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r8, #8
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r9, #9
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r10, #10
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r11, #11
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
cmp r12, #12
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
|
||||||
|
;/* Verify that FPU registers contain correct values. */
|
||||||
|
vmov.f32 s1, #1.5
|
||||||
|
vcmp.f32 s0, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #2.0
|
||||||
|
vcmp.f32 s2, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #3.0
|
||||||
|
vcmp.f32 s3, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #4.5
|
||||||
|
vcmp.f32 s4, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #5.0
|
||||||
|
vcmp.f32 s5, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #6.0
|
||||||
|
vcmp.f32 s6, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #7.5
|
||||||
|
vcmp.f32 s7, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #8.0
|
||||||
|
vcmp.f32 s8, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #9.0
|
||||||
|
vcmp.f32 s9, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #10.5
|
||||||
|
vcmp.f32 s10, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #11.0
|
||||||
|
vcmp.f32 s11, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #12.0
|
||||||
|
vcmp.f32 s12, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #13.5
|
||||||
|
vcmp.f32 s13, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #14.0
|
||||||
|
vcmp.f32 s14, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #1.0
|
||||||
|
vcmp.f32 s15, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #2.5
|
||||||
|
vcmp.f32 s16, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #3.0
|
||||||
|
vcmp.f32 s17, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #4.0
|
||||||
|
vcmp.f32 s18, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #5.5
|
||||||
|
vcmp.f32 s19, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #6.0
|
||||||
|
vcmp.f32 s20, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #7.0
|
||||||
|
vcmp.f32 s21, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #8.5
|
||||||
|
vcmp.f32 s22, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #9.0
|
||||||
|
vcmp.f32 s23, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #10.0
|
||||||
|
vcmp.f32 s24, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #11.5
|
||||||
|
vcmp.f32 s25, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #12.0
|
||||||
|
vcmp.f32 s26, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #13.0
|
||||||
|
vcmp.f32 s27, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #14.5
|
||||||
|
vcmp.f32 s28, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #1.0
|
||||||
|
vcmp.f32 s29, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #2.0
|
||||||
|
vcmp.f32 s30, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
vmov.f32 s1, #3.5
|
||||||
|
vcmp.f32 s31, s1
|
||||||
|
vmrs APSR_nzcv, FPSCR
|
||||||
|
bne.w reg4_error_loop
|
||||||
|
|
||||||
|
;/* Everything passed, inc the loop counter. */
|
||||||
|
push { r0, r1 }
|
||||||
|
ldr r0, =ulRegTest4LoopCounter
|
||||||
|
ldr r1, [r0]
|
||||||
|
adds r1, r1, #1
|
||||||
|
str r1, [r0]
|
||||||
|
pop { r0, r1 }
|
||||||
|
|
||||||
|
;/* Start again. */
|
||||||
|
b reg4_loop
|
||||||
|
|
||||||
|
reg4_error_loop
|
||||||
|
b reg4_error_loop
|
||||||
|
LTORG
|
||||||
|
;/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
END
|
@ -0,0 +1,376 @@
|
|||||||
|
/*
|
||||||
|
* FreeRTOS V202212.00
|
||||||
|
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* https://www.FreeRTOS.org
|
||||||
|
* https://github.com/FreeRTOS
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Scheduler includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
|
||||||
|
/* Reg test includes. */
|
||||||
|
#include "reg_tests.h"
|
||||||
|
|
||||||
|
/* Hardware includes. */
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Functions that implement reg test tasks.
|
||||||
|
*/
|
||||||
|
static void prvRegTest1Task( void * pvParameters );
|
||||||
|
static void prvRegTest2Task( void * pvParameters );
|
||||||
|
static void prvRegTest3Task( void * pvParameters );
|
||||||
|
static void prvRegTest4Task( void * pvParameters );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check task periodically checks that reg tests tasks
|
||||||
|
* are running fine.
|
||||||
|
*/
|
||||||
|
static void prvCheckTask( void * pvParameters );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Functions implemented in assembly.
|
||||||
|
*/
|
||||||
|
extern void vRegTest1Asm( void );
|
||||||
|
extern void vRegTest2Asm( void );
|
||||||
|
extern void vRegTest3Asm( void );
|
||||||
|
extern void vRegTest4Asm( void );
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Priority of the check task.
|
||||||
|
*/
|
||||||
|
#define CHECK_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Frequency of check task.
|
||||||
|
*/
|
||||||
|
#define NO_ERROR_CHECK_TASK_PERIOD ( pdMS_TO_TICKS( 5000UL ) )
|
||||||
|
#define ERROR_CHECK_TASK_PERIOD ( pdMS_TO_TICKS( 200UL ) )
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parameters passed to reg test tasks.
|
||||||
|
*/
|
||||||
|
#define REG_TEST_TASK_1_PARAMETER ( ( void * ) 0x12345678 )
|
||||||
|
#define REG_TEST_TASK_2_PARAMETER ( ( void * ) 0x87654321 )
|
||||||
|
#define REG_TEST_TASK_3_PARAMETER ( ( void * ) 0x12348765 )
|
||||||
|
#define REG_TEST_TASK_4_PARAMETER ( ( void * ) 0x43215678 )
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following variables are used to communicate the status of the register
|
||||||
|
* test tasks to the check task. If the variables keep incrementing, then the
|
||||||
|
* register test tasks have not discovered any errors. If a variable stops
|
||||||
|
* incrementing, then an error has been found.
|
||||||
|
*/
|
||||||
|
volatile unsigned long ulRegTest1LoopCounter = 0UL, ulRegTest2LoopCounter = 0UL;
|
||||||
|
volatile unsigned long ulRegTest3LoopCounter = 0UL, ulRegTest4LoopCounter = 0UL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Counter to keep a count of how may times the check task loop has detected
|
||||||
|
* error.
|
||||||
|
*/
|
||||||
|
volatile unsigned long ulCheckTaskLoops = 0UL;
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vStartRegTests( void )
|
||||||
|
{
|
||||||
|
static StackType_t xRegTest1TaskStack[ configMINIMAL_STACK_SIZE ] __attribute__( ( aligned( configMINIMAL_STACK_SIZE * sizeof( StackType_t ) ) ) );
|
||||||
|
static StackType_t xRegTest2TaskStack[ configMINIMAL_STACK_SIZE ] __attribute__( ( aligned( configMINIMAL_STACK_SIZE * sizeof( StackType_t ) ) ) );
|
||||||
|
static StackType_t xRegTest3TaskStack[ configMINIMAL_STACK_SIZE ] __attribute__( ( aligned( configMINIMAL_STACK_SIZE * sizeof( StackType_t ) ) ) );
|
||||||
|
static StackType_t xRegTest4TaskStack[ configMINIMAL_STACK_SIZE ] __attribute__( ( aligned( configMINIMAL_STACK_SIZE * sizeof( StackType_t ) ) ) );
|
||||||
|
static StackType_t xCheckTaskStack[ configMINIMAL_STACK_SIZE ] __attribute__( ( aligned( configMINIMAL_STACK_SIZE * sizeof( StackType_t ) ) ) );
|
||||||
|
|
||||||
|
TaskParameters_t xRegTest1TaskParameters =
|
||||||
|
{
|
||||||
|
.pvTaskCode = prvRegTest1Task,
|
||||||
|
.pcName = "RegTest1",
|
||||||
|
.usStackDepth = configMINIMAL_STACK_SIZE,
|
||||||
|
.pvParameters = REG_TEST_TASK_1_PARAMETER,
|
||||||
|
.uxPriority = tskIDLE_PRIORITY | portPRIVILEGE_BIT,
|
||||||
|
.puxStackBuffer = xRegTest1TaskStack,
|
||||||
|
.xRegions = {
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
TaskParameters_t xRegTest2TaskParameters =
|
||||||
|
{
|
||||||
|
.pvTaskCode = prvRegTest2Task,
|
||||||
|
.pcName = "RegTest2",
|
||||||
|
.usStackDepth = configMINIMAL_STACK_SIZE,
|
||||||
|
.pvParameters = REG_TEST_TASK_2_PARAMETER,
|
||||||
|
.uxPriority = tskIDLE_PRIORITY | portPRIVILEGE_BIT,
|
||||||
|
.puxStackBuffer = xRegTest2TaskStack,
|
||||||
|
.xRegions = {
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
TaskParameters_t xRegTest3TaskParameters =
|
||||||
|
{
|
||||||
|
.pvTaskCode = prvRegTest3Task,
|
||||||
|
.pcName = "RegTest3",
|
||||||
|
.usStackDepth = configMINIMAL_STACK_SIZE,
|
||||||
|
.pvParameters = REG_TEST_TASK_3_PARAMETER,
|
||||||
|
.uxPriority = tskIDLE_PRIORITY | portPRIVILEGE_BIT,
|
||||||
|
.puxStackBuffer = xRegTest3TaskStack,
|
||||||
|
.xRegions = {
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
TaskParameters_t xRegTest4TaskParameters =
|
||||||
|
{
|
||||||
|
.pvTaskCode = prvRegTest4Task,
|
||||||
|
.pcName = "RegTest4",
|
||||||
|
.usStackDepth = configMINIMAL_STACK_SIZE,
|
||||||
|
.pvParameters = REG_TEST_TASK_4_PARAMETER,
|
||||||
|
.uxPriority = tskIDLE_PRIORITY | portPRIVILEGE_BIT,
|
||||||
|
.puxStackBuffer = xRegTest4TaskStack,
|
||||||
|
.xRegions = {
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TaskParameters_t xCheckTaskParameters =
|
||||||
|
{
|
||||||
|
.pvTaskCode = prvCheckTask,
|
||||||
|
.pcName = "Check",
|
||||||
|
.usStackDepth = configMINIMAL_STACK_SIZE,
|
||||||
|
.pvParameters = NULL,
|
||||||
|
.uxPriority = ( CHECK_TASK_PRIORITY | portPRIVILEGE_BIT ),
|
||||||
|
.puxStackBuffer = xCheckTaskStack,
|
||||||
|
.xRegions = {
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
xTaskCreateRestricted( &( xRegTest1TaskParameters ), NULL );
|
||||||
|
xTaskCreateRestricted( &( xRegTest2TaskParameters ), NULL );
|
||||||
|
xTaskCreateRestricted( &( xRegTest3TaskParameters ), NULL );
|
||||||
|
xTaskCreateRestricted( &( xRegTest4TaskParameters ), NULL );
|
||||||
|
xTaskCreateRestricted( &( xCheckTaskParameters ), NULL );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvRegTest1Task( void * pvParameters )
|
||||||
|
{
|
||||||
|
/* Although the reg tests are written in assembly, its entry
|
||||||
|
* point is written in C for convenience of checking that the
|
||||||
|
* task parameter is being passed in correctly. */
|
||||||
|
if( pvParameters == REG_TEST_TASK_1_PARAMETER )
|
||||||
|
{
|
||||||
|
/* Start the part of the test that is written in assembler. */
|
||||||
|
vRegTest1Asm();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The following line will only execute if the task parameter
|
||||||
|
* is found to be incorrect. The check task will detect that
|
||||||
|
* the reg test loop counter is not being incremented and flag
|
||||||
|
* an error. */
|
||||||
|
vTaskDelete( NULL );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvRegTest2Task( void * pvParameters )
|
||||||
|
{
|
||||||
|
/* Although the reg tests are written in assembly, its entry
|
||||||
|
* point is written in C for convenience of checking that the
|
||||||
|
* task parameter is being passed in correctly. */
|
||||||
|
if( pvParameters == REG_TEST_TASK_2_PARAMETER )
|
||||||
|
{
|
||||||
|
/* Start the part of the test that is written in assembler. */
|
||||||
|
vRegTest2Asm();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The following line will only execute if the task parameter
|
||||||
|
* is found to be incorrect. The check task will detect that
|
||||||
|
* the reg test loop counter is not being incremented and flag
|
||||||
|
* an error. */
|
||||||
|
vTaskDelete( NULL );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvRegTest3Task( void * pvParameters )
|
||||||
|
{
|
||||||
|
/* Although the reg tests are written in assembly, its entry
|
||||||
|
* point is written in C for convenience of checking that the
|
||||||
|
* task parameter is being passed in correctly. */
|
||||||
|
if( pvParameters == REG_TEST_TASK_3_PARAMETER )
|
||||||
|
{
|
||||||
|
/* Start the part of the test that is written in assembler. */
|
||||||
|
vRegTest3Asm();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The following line will only execute if the task parameter
|
||||||
|
* is found to be incorrect. The check task will detect that
|
||||||
|
* the reg test loop counter is not being incremented and flag
|
||||||
|
* an error. */
|
||||||
|
vTaskDelete( NULL );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvRegTest4Task( void * pvParameters )
|
||||||
|
{
|
||||||
|
/* Although the reg tests are written in assembly, its entry
|
||||||
|
* point is written in C for convenience of checking that the
|
||||||
|
* task parameter is being passed in correctly. */
|
||||||
|
if( pvParameters == REG_TEST_TASK_4_PARAMETER )
|
||||||
|
{
|
||||||
|
/* Start the part of the test that is written in assembler. */
|
||||||
|
vRegTest4Asm();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The following line will only execute if the task parameter
|
||||||
|
* is found to be incorrect. The check task will detect that
|
||||||
|
* the reg test loop counter is not being incremented and flag
|
||||||
|
* an error. */
|
||||||
|
vTaskDelete( NULL );
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvCheckTask( void * pvParameters )
|
||||||
|
{
|
||||||
|
TickType_t xDelayPeriod = NO_ERROR_CHECK_TASK_PERIOD;
|
||||||
|
TickType_t xLastExecutionTime;
|
||||||
|
unsigned long ulErrorFound = pdFALSE;
|
||||||
|
static unsigned long ulLastRegTest1Value = 0, ulLastRegTest2Value = 0;
|
||||||
|
static unsigned long ulLastRegTest3Value = 0, ulLastRegTest4Value = 0;
|
||||||
|
|
||||||
|
/* Just to stop compiler warnings. */
|
||||||
|
( void ) pvParameters;
|
||||||
|
|
||||||
|
/* Initialize xLastExecutionTime so the first call to vTaskDelayUntil()
|
||||||
|
* works correctly. */
|
||||||
|
xLastExecutionTime = xTaskGetTickCount();
|
||||||
|
|
||||||
|
/* Cycle for ever, delaying then checking all the other tasks are still
|
||||||
|
* operating without error. The onboard LED is toggled on each iteration.
|
||||||
|
* If an error is detected then the delay period is decreased from
|
||||||
|
* mainNO_ERROR_CHECK_TASK_PERIOD to mainERROR_CHECK_TASK_PERIOD. This has
|
||||||
|
* the effect of increasing the rate at which the onboard LED toggles, and
|
||||||
|
* in so doing gives visual feedback of the system status. */
|
||||||
|
for( ;; )
|
||||||
|
{
|
||||||
|
/* Delay until it is time to execute again. */
|
||||||
|
vTaskDelayUntil( &xLastExecutionTime, xDelayPeriod );
|
||||||
|
|
||||||
|
/* Check that the register test 1 task is still running. */
|
||||||
|
if( ulLastRegTest1Value == ulRegTest1LoopCounter )
|
||||||
|
{
|
||||||
|
ulErrorFound |= 1UL << 0UL;
|
||||||
|
}
|
||||||
|
ulLastRegTest1Value = ulRegTest1LoopCounter;
|
||||||
|
|
||||||
|
/* Check that the register test 2 task is still running. */
|
||||||
|
if( ulLastRegTest2Value == ulRegTest2LoopCounter )
|
||||||
|
{
|
||||||
|
ulErrorFound |= 1UL << 1UL;
|
||||||
|
}
|
||||||
|
ulLastRegTest2Value = ulRegTest2LoopCounter;
|
||||||
|
|
||||||
|
/* Check that the register test 3 task is still running. */
|
||||||
|
if( ulLastRegTest3Value == ulRegTest3LoopCounter )
|
||||||
|
{
|
||||||
|
ulErrorFound |= 1UL << 2UL;
|
||||||
|
}
|
||||||
|
ulLastRegTest3Value = ulRegTest3LoopCounter;
|
||||||
|
|
||||||
|
/* Check that the register test 4 task is still running. */
|
||||||
|
if( ulLastRegTest4Value == ulRegTest4LoopCounter )
|
||||||
|
{
|
||||||
|
ulErrorFound |= 1UL << 3UL;
|
||||||
|
}
|
||||||
|
ulLastRegTest4Value = ulRegTest4LoopCounter;
|
||||||
|
|
||||||
|
|
||||||
|
/* Toggle the green LED to give an indication of the system status.
|
||||||
|
* If the LED toggles every NO_ERROR_CHECK_TASK_PERIOD milliseconds
|
||||||
|
* then everything is ok. A faster toggle indicates an error. */
|
||||||
|
HAL_GPIO_TogglePin( LD1_GPIO_Port, LD1_Pin );
|
||||||
|
|
||||||
|
if( ulErrorFound != pdFALSE )
|
||||||
|
{
|
||||||
|
/* An error has been detected in one of the tasks - flash the LED
|
||||||
|
* at a higher frequency to give visible feedback that something has
|
||||||
|
* gone wrong (it might just be that the loop back connector required
|
||||||
|
* by the comtest tasks has not been fitted). */
|
||||||
|
xDelayPeriod = ERROR_CHECK_TASK_PERIOD;
|
||||||
|
|
||||||
|
/* Turn on Red LED to indicate error. */
|
||||||
|
HAL_GPIO_WritePin( LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET );
|
||||||
|
|
||||||
|
/* Increment error detection count. */
|
||||||
|
ulCheckTaskLoops++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* FreeRTOS V202212.00
|
||||||
|
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* https://www.FreeRTOS.org
|
||||||
|
* https://github.com/FreeRTOS
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef REG_TESTS_H
|
||||||
|
#define REG_TESTS_H
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Creates all the tasks for reg tests.
|
||||||
|
*/
|
||||||
|
void vStartRegTests( void );
|
||||||
|
|
||||||
|
#endif /* REG_TESTS_H */
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,45 @@
|
|||||||
|
; Flash Layout
|
||||||
|
;
|
||||||
|
; ---------------------
|
||||||
|
; | Privileged Code |
|
||||||
|
; ---------------------
|
||||||
|
; | Unprivileged Code |
|
||||||
|
; ---------------------
|
||||||
|
;
|
||||||
|
; RAM Layout
|
||||||
|
;
|
||||||
|
; ---------------------
|
||||||
|
; | Privileged Data |
|
||||||
|
; ---------------------
|
||||||
|
; | Unprivileged Data |
|
||||||
|
; ---------------------
|
||||||
|
|
||||||
|
LR_APP 0x08000000 0x00200000 ; load region size_region
|
||||||
|
{
|
||||||
|
ER_IROM_PRIVILEGED 0x08000000
|
||||||
|
{
|
||||||
|
*.o (RESET, +First)
|
||||||
|
*(InRoot$$Sections)
|
||||||
|
*(privileged_functions)
|
||||||
|
}
|
||||||
|
|
||||||
|
ER_IROM_FREERTOS_SYSTEM_CALLS 0x08008000 FIXED
|
||||||
|
{
|
||||||
|
*(freertos_system_calls)
|
||||||
|
}
|
||||||
|
|
||||||
|
ER_IROM_UNPRIVILEGED +0
|
||||||
|
{
|
||||||
|
.ANY (+RO)
|
||||||
|
}
|
||||||
|
|
||||||
|
RW_IRAM_PRIVILEGED 0x20000000
|
||||||
|
{
|
||||||
|
*(privileged_data)
|
||||||
|
}
|
||||||
|
|
||||||
|
RW_IRAM_UNPRIVILEGED 0x20008000
|
||||||
|
{
|
||||||
|
.ANY (+RW +ZI)
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* FreeRTOS V202212.00
|
||||||
|
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* https://www.FreeRTOS.org
|
||||||
|
* https://github.com/FreeRTOS
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
extern uint32_t Image$$ER_IROM_FREERTOS_SYSTEM_CALLS$$Base;
|
||||||
|
extern uint32_t Image$$ER_IROM_FREERTOS_SYSTEM_CALLS$$Limit;
|
||||||
|
|
||||||
|
/* Memory map needed for MPU setup. Must must match the one defined in
|
||||||
|
* the scatter-loading file (FreeRTOSDemo.sct). */
|
||||||
|
const uint32_t * __FLASH_segment_start__ = ( uint32_t * ) 0x08000000;
|
||||||
|
const uint32_t * __FLASH_segment_end__ = ( uint32_t * ) 0x08200000;
|
||||||
|
const uint32_t * __SRAM_segment_start__ = ( uint32_t * ) 0x20000000;
|
||||||
|
const uint32_t * __SRAM_segment_end__ = ( uint32_t * ) 0x20020000;
|
||||||
|
|
||||||
|
const uint32_t * __privileged_functions_start__ = ( uint32_t * ) 0x08000000;
|
||||||
|
const uint32_t * __privileged_functions_end__ = ( uint32_t * ) 0x08008000;
|
||||||
|
const uint32_t * __privileged_data_start__ = ( uint32_t * ) 0x20000000;
|
||||||
|
const uint32_t * __privileged_data_end__ = ( uint32_t * ) 0x20008000;
|
||||||
|
|
||||||
|
const uint32_t * __syscalls_flash_start__ = ( uint32_t * ) &( Image$$ER_IROM_FREERTOS_SYSTEM_CALLS$$Base );
|
||||||
|
const uint32_t * __syscalls_flash_end__ = ( uint32_t * ) &( Image$$ER_IROM_FREERTOS_SYSTEM_CALLS$$Limit );
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Mem fault handler.
|
||||||
|
*/
|
||||||
|
void MemManage_Handler( void );
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
__asm void MemManage_Handler( void )
|
||||||
|
{
|
||||||
|
extern vHandleMemoryFault;
|
||||||
|
|
||||||
|
PRESERVE8
|
||||||
|
|
||||||
|
tst lr, #4
|
||||||
|
ite eq
|
||||||
|
mrseq r0, msp
|
||||||
|
mrsne r0, psp
|
||||||
|
b vHandleMemoryFault
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
@ -0,0 +1,611 @@
|
|||||||
|
;******************** (C) COPYRIGHT 2017 STMicroelectronics ********************
|
||||||
|
;* File Name : startup_stm32h743xx.s
|
||||||
|
;* @author MCD Application Team
|
||||||
|
;* Description : STM32H7xx devices vector table for MDK-ARM toolchain.
|
||||||
|
;* This module performs:
|
||||||
|
;* - Set the initial SP
|
||||||
|
;* - Set the initial PC == Reset_Handler
|
||||||
|
;* - Set the vector table entries with the exceptions ISR address
|
||||||
|
;* - Branches to __main in the C library (which eventually
|
||||||
|
;* calls main()).
|
||||||
|
;* After Reset the Cortex-M processor is in Thread mode,
|
||||||
|
;* priority is Privileged, and the Stack is set to Main.
|
||||||
|
;* <<< Use Configuration Wizard in Context Menu >>>
|
||||||
|
;******************************************************************************
|
||||||
|
;* @attention
|
||||||
|
;*
|
||||||
|
;* Copyright (c) 2017 STMicroelectronics.
|
||||||
|
;* All rights reserved.
|
||||||
|
;*
|
||||||
|
;* This software component is licensed by ST under BSD 3-Clause license,
|
||||||
|
;* the "License"; You may not use this file except in compliance with the
|
||||||
|
;* License. You may obtain a copy of the License at:
|
||||||
|
;* opensource.org/licenses/BSD-3-Clause
|
||||||
|
;*
|
||||||
|
;******************************************************************************
|
||||||
|
|
||||||
|
; Amount of memory (in bytes) allocated for Stack
|
||||||
|
; Tailor this value to your application needs
|
||||||
|
; <h> Stack Configuration
|
||||||
|
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||||
|
; </h>
|
||||||
|
|
||||||
|
Stack_Size EQU 0x400
|
||||||
|
|
||||||
|
AREA STACK, NOINIT, READWRITE, ALIGN=3
|
||||||
|
Stack_Mem SPACE Stack_Size
|
||||||
|
__initial_sp
|
||||||
|
|
||||||
|
|
||||||
|
; <h> Heap Configuration
|
||||||
|
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||||
|
; </h>
|
||||||
|
|
||||||
|
Heap_Size EQU 0x200
|
||||||
|
|
||||||
|
AREA HEAP, NOINIT, READWRITE, ALIGN=3
|
||||||
|
__heap_base
|
||||||
|
Heap_Mem SPACE Heap_Size
|
||||||
|
__heap_limit
|
||||||
|
|
||||||
|
PRESERVE8
|
||||||
|
THUMB
|
||||||
|
|
||||||
|
|
||||||
|
; Vector Table Mapped to Address 0 at Reset
|
||||||
|
AREA RESET, DATA, READONLY
|
||||||
|
EXPORT __Vectors
|
||||||
|
EXPORT __Vectors_End
|
||||||
|
EXPORT __Vectors_Size
|
||||||
|
|
||||||
|
__Vectors DCD __initial_sp ; Top of Stack
|
||||||
|
DCD Reset_Handler ; Reset Handler
|
||||||
|
DCD NMI_Handler ; NMI Handler
|
||||||
|
DCD HardFault_Handler ; Hard Fault Handler
|
||||||
|
DCD MemManage_Handler ; MPU Fault Handler
|
||||||
|
DCD BusFault_Handler ; Bus Fault Handler
|
||||||
|
DCD UsageFault_Handler ; Usage Fault Handler
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD SVC_Handler ; SVCall Handler
|
||||||
|
DCD DebugMon_Handler ; Debug Monitor Handler
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD PendSV_Handler ; PendSV Handler
|
||||||
|
DCD SysTick_Handler ; SysTick Handler
|
||||||
|
|
||||||
|
; External Interrupts
|
||||||
|
DCD WWDG_IRQHandler ; Window WatchDog interrupt ( wwdg1_it)
|
||||||
|
DCD PVD_AVD_IRQHandler ; PVD/AVD through EXTI Line detection
|
||||||
|
DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line
|
||||||
|
DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line
|
||||||
|
DCD FLASH_IRQHandler ; FLASH
|
||||||
|
DCD RCC_IRQHandler ; RCC
|
||||||
|
DCD EXTI0_IRQHandler ; EXTI Line0
|
||||||
|
DCD EXTI1_IRQHandler ; EXTI Line1
|
||||||
|
DCD EXTI2_IRQHandler ; EXTI Line2
|
||||||
|
DCD EXTI3_IRQHandler ; EXTI Line3
|
||||||
|
DCD EXTI4_IRQHandler ; EXTI Line4
|
||||||
|
DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0
|
||||||
|
DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1
|
||||||
|
DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2
|
||||||
|
DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3
|
||||||
|
DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4
|
||||||
|
DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5
|
||||||
|
DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6
|
||||||
|
DCD ADC_IRQHandler ; ADC1, ADC2
|
||||||
|
DCD FDCAN1_IT0_IRQHandler ; FDCAN1 interrupt line 0
|
||||||
|
DCD FDCAN2_IT0_IRQHandler ; FDCAN2 interrupt line 0
|
||||||
|
DCD FDCAN1_IT1_IRQHandler ; FDCAN1 interrupt line 1
|
||||||
|
DCD FDCAN2_IT1_IRQHandler ; FDCAN2 interrupt line 1
|
||||||
|
DCD EXTI9_5_IRQHandler ; External Line[9:5]s
|
||||||
|
DCD TIM1_BRK_IRQHandler ; TIM1 Break interrupt
|
||||||
|
DCD TIM1_UP_IRQHandler ; TIM1 Update Interrupt
|
||||||
|
DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation Interrupt
|
||||||
|
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
|
||||||
|
DCD TIM2_IRQHandler ; TIM2
|
||||||
|
DCD TIM3_IRQHandler ; TIM3
|
||||||
|
DCD TIM4_IRQHandler ; TIM4
|
||||||
|
DCD I2C1_EV_IRQHandler ; I2C1 Event
|
||||||
|
DCD I2C1_ER_IRQHandler ; I2C1 Error
|
||||||
|
DCD I2C2_EV_IRQHandler ; I2C2 Event
|
||||||
|
DCD I2C2_ER_IRQHandler ; I2C2 Error
|
||||||
|
DCD SPI1_IRQHandler ; SPI1
|
||||||
|
DCD SPI2_IRQHandler ; SPI2
|
||||||
|
DCD USART1_IRQHandler ; USART1
|
||||||
|
DCD USART2_IRQHandler ; USART2
|
||||||
|
DCD USART3_IRQHandler ; USART3
|
||||||
|
DCD EXTI15_10_IRQHandler ; External Line[15:10]
|
||||||
|
DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break Interrupt and TIM12 global interrupt
|
||||||
|
DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update Interrupt and TIM13 global interrupt
|
||||||
|
DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt
|
||||||
|
DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare Interrupt
|
||||||
|
DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7
|
||||||
|
DCD FMC_IRQHandler ; FMC
|
||||||
|
DCD SDMMC1_IRQHandler ; SDMMC1
|
||||||
|
DCD TIM5_IRQHandler ; TIM5
|
||||||
|
DCD SPI3_IRQHandler ; SPI3
|
||||||
|
DCD UART4_IRQHandler ; UART4
|
||||||
|
DCD UART5_IRQHandler ; UART5
|
||||||
|
DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors
|
||||||
|
DCD TIM7_IRQHandler ; TIM7
|
||||||
|
DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0
|
||||||
|
DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1
|
||||||
|
DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2
|
||||||
|
DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3
|
||||||
|
DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4
|
||||||
|
DCD ETH_IRQHandler ; Ethernet
|
||||||
|
DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line
|
||||||
|
DCD FDCAN_CAL_IRQHandler ; FDCAN calibration unit interrupt
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5
|
||||||
|
DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6
|
||||||
|
DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7
|
||||||
|
DCD USART6_IRQHandler ; USART6
|
||||||
|
DCD I2C3_EV_IRQHandler ; I2C3 event
|
||||||
|
DCD I2C3_ER_IRQHandler ; I2C3 error
|
||||||
|
DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out
|
||||||
|
DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In
|
||||||
|
DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI
|
||||||
|
DCD OTG_HS_IRQHandler ; USB OTG HS
|
||||||
|
DCD DCMI_IRQHandler ; DCMI
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD RNG_IRQHandler ; Rng
|
||||||
|
DCD FPU_IRQHandler ; FPU
|
||||||
|
DCD UART7_IRQHandler ; UART7
|
||||||
|
DCD UART8_IRQHandler ; UART8
|
||||||
|
DCD SPI4_IRQHandler ; SPI4
|
||||||
|
DCD SPI5_IRQHandler ; SPI5
|
||||||
|
DCD SPI6_IRQHandler ; SPI6
|
||||||
|
DCD SAI1_IRQHandler ; SAI1
|
||||||
|
DCD LTDC_IRQHandler ; LTDC
|
||||||
|
DCD LTDC_ER_IRQHandler ; LTDC error
|
||||||
|
DCD DMA2D_IRQHandler ; DMA2D
|
||||||
|
DCD SAI2_IRQHandler ; SAI2
|
||||||
|
DCD QUADSPI_IRQHandler ; QUADSPI
|
||||||
|
DCD LPTIM1_IRQHandler ; LPTIM1
|
||||||
|
DCD CEC_IRQHandler ; HDMI_CEC
|
||||||
|
DCD I2C4_EV_IRQHandler ; I2C4 Event
|
||||||
|
DCD I2C4_ER_IRQHandler ; I2C4 Error
|
||||||
|
DCD SPDIF_RX_IRQHandler ; SPDIF_RX
|
||||||
|
DCD OTG_FS_EP1_OUT_IRQHandler ; USB OTG FS End Point 1 Out
|
||||||
|
DCD OTG_FS_EP1_IN_IRQHandler ; USB OTG FS End Point 1 In
|
||||||
|
DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI
|
||||||
|
DCD OTG_FS_IRQHandler ; USB OTG FS
|
||||||
|
DCD DMAMUX1_OVR_IRQHandler ; DMAMUX1 Overrun interrupt
|
||||||
|
DCD HRTIM1_Master_IRQHandler ; HRTIM Master Timer global Interrupts
|
||||||
|
DCD HRTIM1_TIMA_IRQHandler ; HRTIM Timer A global Interrupt
|
||||||
|
DCD HRTIM1_TIMB_IRQHandler ; HRTIM Timer B global Interrupt
|
||||||
|
DCD HRTIM1_TIMC_IRQHandler ; HRTIM Timer C global Interrupt
|
||||||
|
DCD HRTIM1_TIMD_IRQHandler ; HRTIM Timer D global Interrupt
|
||||||
|
DCD HRTIM1_TIME_IRQHandler ; HRTIM Timer E global Interrupt
|
||||||
|
DCD HRTIM1_FLT_IRQHandler ; HRTIM Fault global Interrupt
|
||||||
|
DCD DFSDM1_FLT0_IRQHandler ; DFSDM Filter0 Interrupt
|
||||||
|
DCD DFSDM1_FLT1_IRQHandler ; DFSDM Filter1 Interrupt
|
||||||
|
DCD DFSDM1_FLT2_IRQHandler ; DFSDM Filter2 Interrupt
|
||||||
|
DCD DFSDM1_FLT3_IRQHandler ; DFSDM Filter3 Interrupt
|
||||||
|
DCD SAI3_IRQHandler ; SAI3 global Interrupt
|
||||||
|
DCD SWPMI1_IRQHandler ; Serial Wire Interface 1 global interrupt
|
||||||
|
DCD TIM15_IRQHandler ; TIM15 global Interrupt
|
||||||
|
DCD TIM16_IRQHandler ; TIM16 global Interrupt
|
||||||
|
DCD TIM17_IRQHandler ; TIM17 global Interrupt
|
||||||
|
DCD MDIOS_WKUP_IRQHandler ; MDIOS Wakeup Interrupt
|
||||||
|
DCD MDIOS_IRQHandler ; MDIOS global Interrupt
|
||||||
|
DCD JPEG_IRQHandler ; JPEG global Interrupt
|
||||||
|
DCD MDMA_IRQHandler ; MDMA global Interrupt
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD SDMMC2_IRQHandler ; SDMMC2 global Interrupt
|
||||||
|
DCD HSEM1_IRQHandler ; HSEM1 global Interrupt
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD ADC3_IRQHandler ; ADC3 global Interrupt
|
||||||
|
DCD DMAMUX2_OVR_IRQHandler ; DMAMUX Overrun interrupt
|
||||||
|
DCD BDMA_Channel0_IRQHandler ; BDMA Channel 0 global Interrupt
|
||||||
|
DCD BDMA_Channel1_IRQHandler ; BDMA Channel 1 global Interrupt
|
||||||
|
DCD BDMA_Channel2_IRQHandler ; BDMA Channel 2 global Interrupt
|
||||||
|
DCD BDMA_Channel3_IRQHandler ; BDMA Channel 3 global Interrupt
|
||||||
|
DCD BDMA_Channel4_IRQHandler ; BDMA Channel 4 global Interrupt
|
||||||
|
DCD BDMA_Channel5_IRQHandler ; BDMA Channel 5 global Interrupt
|
||||||
|
DCD BDMA_Channel6_IRQHandler ; BDMA Channel 6 global Interrupt
|
||||||
|
DCD BDMA_Channel7_IRQHandler ; BDMA Channel 7 global Interrupt
|
||||||
|
DCD COMP1_IRQHandler ; COMP1 global Interrupt
|
||||||
|
DCD LPTIM2_IRQHandler ; LP TIM2 global interrupt
|
||||||
|
DCD LPTIM3_IRQHandler ; LP TIM3 global interrupt
|
||||||
|
DCD LPTIM4_IRQHandler ; LP TIM4 global interrupt
|
||||||
|
DCD LPTIM5_IRQHandler ; LP TIM5 global interrupt
|
||||||
|
DCD LPUART1_IRQHandler ; LP UART1 interrupt
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD CRS_IRQHandler ; Clock Recovery Global Interrupt
|
||||||
|
DCD ECC_IRQHandler ; ECC diagnostic Global Interrupt
|
||||||
|
DCD SAI4_IRQHandler ; SAI4 global interrupt
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD WAKEUP_PIN_IRQHandler ; Interrupt for all 6 wake-up pins
|
||||||
|
|
||||||
|
|
||||||
|
__Vectors_End
|
||||||
|
|
||||||
|
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||||
|
|
||||||
|
AREA |.text|, CODE, READONLY
|
||||||
|
|
||||||
|
; Reset handler
|
||||||
|
Reset_Handler PROC
|
||||||
|
EXPORT Reset_Handler [WEAK]
|
||||||
|
IMPORT SystemInit
|
||||||
|
IMPORT __main
|
||||||
|
|
||||||
|
LDR R0, =SystemInit
|
||||||
|
BLX R0
|
||||||
|
LDR R0, =__main
|
||||||
|
BX R0
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
; Dummy Exception Handlers (infinite loops which can be modified)
|
||||||
|
|
||||||
|
NMI_Handler PROC
|
||||||
|
EXPORT NMI_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
HardFault_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT HardFault_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
MemManage_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT MemManage_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
BusFault_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT BusFault_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
UsageFault_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT UsageFault_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
SVC_Handler PROC
|
||||||
|
EXPORT SVC_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
DebugMon_Handler\
|
||||||
|
PROC
|
||||||
|
EXPORT DebugMon_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
PendSV_Handler PROC
|
||||||
|
EXPORT PendSV_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
SysTick_Handler PROC
|
||||||
|
EXPORT SysTick_Handler [WEAK]
|
||||||
|
B .
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
Default_Handler PROC
|
||||||
|
|
||||||
|
EXPORT WWDG_IRQHandler [WEAK]
|
||||||
|
EXPORT PVD_AVD_IRQHandler [WEAK]
|
||||||
|
EXPORT TAMP_STAMP_IRQHandler [WEAK]
|
||||||
|
EXPORT RTC_WKUP_IRQHandler [WEAK]
|
||||||
|
EXPORT FLASH_IRQHandler [WEAK]
|
||||||
|
EXPORT RCC_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI0_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI1_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI2_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI3_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI4_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream0_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream1_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream2_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream3_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream4_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream5_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream6_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream7_IRQHandler [WEAK]
|
||||||
|
EXPORT ADC_IRQHandler [WEAK]
|
||||||
|
EXPORT FDCAN1_IT0_IRQHandler [WEAK]
|
||||||
|
EXPORT FDCAN2_IT0_IRQHandler [WEAK]
|
||||||
|
EXPORT FDCAN1_IT1_IRQHandler [WEAK]
|
||||||
|
EXPORT FDCAN2_IT1_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI9_5_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM1_BRK_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM1_UP_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM1_TRG_COM_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM1_CC_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM2_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM3_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM4_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C1_EV_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C1_ER_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C2_EV_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C2_ER_IRQHandler [WEAK]
|
||||||
|
EXPORT SPI1_IRQHandler [WEAK]
|
||||||
|
EXPORT SPI2_IRQHandler [WEAK]
|
||||||
|
EXPORT USART1_IRQHandler [WEAK]
|
||||||
|
EXPORT USART2_IRQHandler [WEAK]
|
||||||
|
EXPORT USART3_IRQHandler [WEAK]
|
||||||
|
EXPORT EXTI15_10_IRQHandler [WEAK]
|
||||||
|
EXPORT RTC_Alarm_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM8_BRK_TIM12_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM8_UP_TIM13_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM8_CC_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA1_Stream7_IRQHandler [WEAK]
|
||||||
|
EXPORT FMC_IRQHandler [WEAK]
|
||||||
|
EXPORT SDMMC1_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM5_IRQHandler [WEAK]
|
||||||
|
EXPORT SPI3_IRQHandler [WEAK]
|
||||||
|
EXPORT UART4_IRQHandler [WEAK]
|
||||||
|
EXPORT UART5_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM6_DAC_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM7_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream0_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream1_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream2_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream3_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream4_IRQHandler [WEAK]
|
||||||
|
EXPORT ETH_IRQHandler [WEAK]
|
||||||
|
EXPORT ETH_WKUP_IRQHandler [WEAK]
|
||||||
|
EXPORT FDCAN_CAL_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream5_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream6_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2_Stream7_IRQHandler [WEAK]
|
||||||
|
EXPORT USART6_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C3_EV_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C3_ER_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_HS_EP1_OUT_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_HS_EP1_IN_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_HS_WKUP_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_HS_IRQHandler [WEAK]
|
||||||
|
EXPORT DCMI_IRQHandler [WEAK]
|
||||||
|
EXPORT RNG_IRQHandler [WEAK]
|
||||||
|
EXPORT FPU_IRQHandler [WEAK]
|
||||||
|
EXPORT UART7_IRQHandler [WEAK]
|
||||||
|
EXPORT UART8_IRQHandler [WEAK]
|
||||||
|
EXPORT SPI4_IRQHandler [WEAK]
|
||||||
|
EXPORT SPI5_IRQHandler [WEAK]
|
||||||
|
EXPORT SPI6_IRQHandler [WEAK]
|
||||||
|
EXPORT SAI1_IRQHandler [WEAK]
|
||||||
|
EXPORT LTDC_IRQHandler [WEAK]
|
||||||
|
EXPORT LTDC_ER_IRQHandler [WEAK]
|
||||||
|
EXPORT DMA2D_IRQHandler [WEAK]
|
||||||
|
EXPORT SAI2_IRQHandler [WEAK]
|
||||||
|
EXPORT QUADSPI_IRQHandler [WEAK]
|
||||||
|
EXPORT LPTIM1_IRQHandler [WEAK]
|
||||||
|
EXPORT CEC_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C4_EV_IRQHandler [WEAK]
|
||||||
|
EXPORT I2C4_ER_IRQHandler [WEAK]
|
||||||
|
EXPORT SPDIF_RX_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_FS_EP1_OUT_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_FS_EP1_IN_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_FS_WKUP_IRQHandler [WEAK]
|
||||||
|
EXPORT OTG_FS_IRQHandler [WEAK]
|
||||||
|
EXPORT DMAMUX1_OVR_IRQHandler [WEAK]
|
||||||
|
EXPORT HRTIM1_Master_IRQHandler [WEAK]
|
||||||
|
EXPORT HRTIM1_TIMA_IRQHandler [WEAK]
|
||||||
|
EXPORT HRTIM1_TIMB_IRQHandler [WEAK]
|
||||||
|
EXPORT HRTIM1_TIMC_IRQHandler [WEAK]
|
||||||
|
EXPORT HRTIM1_TIMD_IRQHandler [WEAK]
|
||||||
|
EXPORT HRTIM1_TIME_IRQHandler [WEAK]
|
||||||
|
EXPORT HRTIM1_FLT_IRQHandler [WEAK]
|
||||||
|
EXPORT DFSDM1_FLT0_IRQHandler [WEAK]
|
||||||
|
EXPORT DFSDM1_FLT1_IRQHandler [WEAK]
|
||||||
|
EXPORT DFSDM1_FLT2_IRQHandler [WEAK]
|
||||||
|
EXPORT DFSDM1_FLT3_IRQHandler [WEAK]
|
||||||
|
EXPORT SAI3_IRQHandler [WEAK]
|
||||||
|
EXPORT SWPMI1_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM15_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM16_IRQHandler [WEAK]
|
||||||
|
EXPORT TIM17_IRQHandler [WEAK]
|
||||||
|
EXPORT MDIOS_WKUP_IRQHandler [WEAK]
|
||||||
|
EXPORT MDIOS_IRQHandler [WEAK]
|
||||||
|
EXPORT JPEG_IRQHandler [WEAK]
|
||||||
|
EXPORT MDMA_IRQHandler [WEAK]
|
||||||
|
EXPORT SDMMC2_IRQHandler [WEAK]
|
||||||
|
EXPORT HSEM1_IRQHandler [WEAK]
|
||||||
|
EXPORT ADC3_IRQHandler [WEAK]
|
||||||
|
EXPORT DMAMUX2_OVR_IRQHandler [WEAK]
|
||||||
|
EXPORT BDMA_Channel0_IRQHandler [WEAK]
|
||||||
|
EXPORT BDMA_Channel1_IRQHandler [WEAK]
|
||||||
|
EXPORT BDMA_Channel2_IRQHandler [WEAK]
|
||||||
|
EXPORT BDMA_Channel3_IRQHandler [WEAK]
|
||||||
|
EXPORT BDMA_Channel4_IRQHandler [WEAK]
|
||||||
|
EXPORT BDMA_Channel5_IRQHandler [WEAK]
|
||||||
|
EXPORT BDMA_Channel6_IRQHandler [WEAK]
|
||||||
|
EXPORT BDMA_Channel7_IRQHandler [WEAK]
|
||||||
|
EXPORT COMP1_IRQHandler [WEAK]
|
||||||
|
EXPORT LPTIM2_IRQHandler [WEAK]
|
||||||
|
EXPORT LPTIM3_IRQHandler [WEAK]
|
||||||
|
EXPORT LPTIM4_IRQHandler [WEAK]
|
||||||
|
EXPORT LPTIM5_IRQHandler [WEAK]
|
||||||
|
EXPORT LPUART1_IRQHandler [WEAK]
|
||||||
|
EXPORT CRS_IRQHandler [WEAK]
|
||||||
|
EXPORT ECC_IRQHandler [WEAK]
|
||||||
|
EXPORT SAI4_IRQHandler [WEAK]
|
||||||
|
EXPORT WAKEUP_PIN_IRQHandler [WEAK]
|
||||||
|
|
||||||
|
|
||||||
|
WWDG_IRQHandler
|
||||||
|
PVD_AVD_IRQHandler
|
||||||
|
TAMP_STAMP_IRQHandler
|
||||||
|
RTC_WKUP_IRQHandler
|
||||||
|
FLASH_IRQHandler
|
||||||
|
RCC_IRQHandler
|
||||||
|
EXTI0_IRQHandler
|
||||||
|
EXTI1_IRQHandler
|
||||||
|
EXTI2_IRQHandler
|
||||||
|
EXTI3_IRQHandler
|
||||||
|
EXTI4_IRQHandler
|
||||||
|
DMA1_Stream0_IRQHandler
|
||||||
|
DMA1_Stream1_IRQHandler
|
||||||
|
DMA1_Stream2_IRQHandler
|
||||||
|
DMA1_Stream3_IRQHandler
|
||||||
|
DMA1_Stream4_IRQHandler
|
||||||
|
DMA1_Stream5_IRQHandler
|
||||||
|
DMA1_Stream6_IRQHandler
|
||||||
|
ADC_IRQHandler
|
||||||
|
FDCAN1_IT0_IRQHandler
|
||||||
|
FDCAN2_IT0_IRQHandler
|
||||||
|
FDCAN1_IT1_IRQHandler
|
||||||
|
FDCAN2_IT1_IRQHandler
|
||||||
|
EXTI9_5_IRQHandler
|
||||||
|
TIM1_BRK_IRQHandler
|
||||||
|
TIM1_UP_IRQHandler
|
||||||
|
TIM1_TRG_COM_IRQHandler
|
||||||
|
TIM1_CC_IRQHandler
|
||||||
|
TIM2_IRQHandler
|
||||||
|
TIM3_IRQHandler
|
||||||
|
TIM4_IRQHandler
|
||||||
|
I2C1_EV_IRQHandler
|
||||||
|
I2C1_ER_IRQHandler
|
||||||
|
I2C2_EV_IRQHandler
|
||||||
|
I2C2_ER_IRQHandler
|
||||||
|
SPI1_IRQHandler
|
||||||
|
SPI2_IRQHandler
|
||||||
|
USART1_IRQHandler
|
||||||
|
USART2_IRQHandler
|
||||||
|
USART3_IRQHandler
|
||||||
|
EXTI15_10_IRQHandler
|
||||||
|
RTC_Alarm_IRQHandler
|
||||||
|
TIM8_BRK_TIM12_IRQHandler
|
||||||
|
TIM8_UP_TIM13_IRQHandler
|
||||||
|
TIM8_TRG_COM_TIM14_IRQHandler
|
||||||
|
TIM8_CC_IRQHandler
|
||||||
|
DMA1_Stream7_IRQHandler
|
||||||
|
FMC_IRQHandler
|
||||||
|
SDMMC1_IRQHandler
|
||||||
|
TIM5_IRQHandler
|
||||||
|
SPI3_IRQHandler
|
||||||
|
UART4_IRQHandler
|
||||||
|
UART5_IRQHandler
|
||||||
|
TIM6_DAC_IRQHandler
|
||||||
|
TIM7_IRQHandler
|
||||||
|
DMA2_Stream0_IRQHandler
|
||||||
|
DMA2_Stream1_IRQHandler
|
||||||
|
DMA2_Stream2_IRQHandler
|
||||||
|
DMA2_Stream3_IRQHandler
|
||||||
|
DMA2_Stream4_IRQHandler
|
||||||
|
ETH_IRQHandler
|
||||||
|
ETH_WKUP_IRQHandler
|
||||||
|
FDCAN_CAL_IRQHandler
|
||||||
|
DMA2_Stream5_IRQHandler
|
||||||
|
DMA2_Stream6_IRQHandler
|
||||||
|
DMA2_Stream7_IRQHandler
|
||||||
|
USART6_IRQHandler
|
||||||
|
I2C3_EV_IRQHandler
|
||||||
|
I2C3_ER_IRQHandler
|
||||||
|
OTG_HS_EP1_OUT_IRQHandler
|
||||||
|
OTG_HS_EP1_IN_IRQHandler
|
||||||
|
OTG_HS_WKUP_IRQHandler
|
||||||
|
OTG_HS_IRQHandler
|
||||||
|
DCMI_IRQHandler
|
||||||
|
RNG_IRQHandler
|
||||||
|
FPU_IRQHandler
|
||||||
|
UART7_IRQHandler
|
||||||
|
UART8_IRQHandler
|
||||||
|
SPI4_IRQHandler
|
||||||
|
SPI5_IRQHandler
|
||||||
|
SPI6_IRQHandler
|
||||||
|
SAI1_IRQHandler
|
||||||
|
LTDC_IRQHandler
|
||||||
|
LTDC_ER_IRQHandler
|
||||||
|
DMA2D_IRQHandler
|
||||||
|
SAI2_IRQHandler
|
||||||
|
QUADSPI_IRQHandler
|
||||||
|
LPTIM1_IRQHandler
|
||||||
|
CEC_IRQHandler
|
||||||
|
I2C4_EV_IRQHandler
|
||||||
|
I2C4_ER_IRQHandler
|
||||||
|
SPDIF_RX_IRQHandler
|
||||||
|
OTG_FS_EP1_OUT_IRQHandler
|
||||||
|
OTG_FS_EP1_IN_IRQHandler
|
||||||
|
OTG_FS_WKUP_IRQHandler
|
||||||
|
OTG_FS_IRQHandler
|
||||||
|
DMAMUX1_OVR_IRQHandler
|
||||||
|
HRTIM1_Master_IRQHandler
|
||||||
|
HRTIM1_TIMA_IRQHandler
|
||||||
|
HRTIM1_TIMB_IRQHandler
|
||||||
|
HRTIM1_TIMC_IRQHandler
|
||||||
|
HRTIM1_TIMD_IRQHandler
|
||||||
|
HRTIM1_TIME_IRQHandler
|
||||||
|
HRTIM1_FLT_IRQHandler
|
||||||
|
DFSDM1_FLT0_IRQHandler
|
||||||
|
DFSDM1_FLT1_IRQHandler
|
||||||
|
DFSDM1_FLT2_IRQHandler
|
||||||
|
DFSDM1_FLT3_IRQHandler
|
||||||
|
SAI3_IRQHandler
|
||||||
|
SWPMI1_IRQHandler
|
||||||
|
TIM15_IRQHandler
|
||||||
|
TIM16_IRQHandler
|
||||||
|
TIM17_IRQHandler
|
||||||
|
MDIOS_WKUP_IRQHandler
|
||||||
|
MDIOS_IRQHandler
|
||||||
|
JPEG_IRQHandler
|
||||||
|
MDMA_IRQHandler
|
||||||
|
SDMMC2_IRQHandler
|
||||||
|
HSEM1_IRQHandler
|
||||||
|
ADC3_IRQHandler
|
||||||
|
DMAMUX2_OVR_IRQHandler
|
||||||
|
BDMA_Channel0_IRQHandler
|
||||||
|
BDMA_Channel1_IRQHandler
|
||||||
|
BDMA_Channel2_IRQHandler
|
||||||
|
BDMA_Channel3_IRQHandler
|
||||||
|
BDMA_Channel4_IRQHandler
|
||||||
|
BDMA_Channel5_IRQHandler
|
||||||
|
BDMA_Channel6_IRQHandler
|
||||||
|
BDMA_Channel7_IRQHandler
|
||||||
|
COMP1_IRQHandler
|
||||||
|
LPTIM2_IRQHandler
|
||||||
|
LPTIM3_IRQHandler
|
||||||
|
LPTIM4_IRQHandler
|
||||||
|
LPTIM5_IRQHandler
|
||||||
|
LPUART1_IRQHandler
|
||||||
|
CRS_IRQHandler
|
||||||
|
ECC_IRQHandler
|
||||||
|
SAI4_IRQHandler
|
||||||
|
WAKEUP_PIN_IRQHandler
|
||||||
|
|
||||||
|
B .
|
||||||
|
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
ALIGN
|
||||||
|
|
||||||
|
;*******************************************************************************
|
||||||
|
; User Stack and Heap initialization
|
||||||
|
;*******************************************************************************
|
||||||
|
IF :DEF:__MICROLIB
|
||||||
|
|
||||||
|
EXPORT __initial_sp
|
||||||
|
EXPORT __heap_base
|
||||||
|
EXPORT __heap_limit
|
||||||
|
|
||||||
|
ELSE
|
||||||
|
|
||||||
|
IMPORT __use_two_region_memory
|
||||||
|
EXPORT __user_initial_stackheap
|
||||||
|
|
||||||
|
__user_initial_stackheap
|
||||||
|
|
||||||
|
LDR R0, = Heap_Mem
|
||||||
|
LDR R1, =(Stack_Mem + Stack_Size)
|
||||||
|
LDR R2, = (Heap_Mem + Heap_Size)
|
||||||
|
LDR R3, = Stack_Mem
|
||||||
|
BX LR
|
||||||
|
|
||||||
|
ALIGN
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
|
Loading…
Reference in New Issue