Mercurial > flash_v2
diff packages/hal/arm/arch/current/src/vectors.S @ 54:f10165814f1e ecos-sw-1999-11-19
Merge from eCos master repository on 1999-11-19-22:24:39-GMT
| author | jlarmour |
|---|---|
| date | Fri, 19 Nov 1999 23:37:56 +0000 |
| parents | a0774359f013 |
| children | 755351606154 |
line wrap: on
line diff
--- a/packages/hal/arm/arch/current/src/vectors.S +++ b/packages/hal/arm/arch/current/src/vectors.S @@ -139,6 +139,9 @@ reset_vector: // which can set DRAM size at 0x40 // see <cyg/hal/hal_platform_setup.h> + // Come here to reset board +warm_reset: + #if defined(CYG_HAL_STARTUP_RAM) && \ !defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) mrs r7,cpsr // move back to IRQ mode @@ -225,6 +228,11 @@ 10: LED 4 #if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_STUBS) + // Set up reset vector + ldr r2,[r1,#0x00] // reset vector intstruction + str r2,[r0,#0x00] + ldr r2,=warm_reset + str r2,[r0,#0x20] // Relocate [copy] data from ROM to RAM ldr r3,.__rom_data_start ldr r4,.__ram_data_start @@ -310,6 +318,19 @@ 2: _start_hang: b _start_hang .code 32 + + .global reset_platform + .type reset_platform,function +reset_platform: +#ifdef CYG_HAL_STARTUP_STUBS + // initialize CPSR (machine state register) + mov r0,#(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_SUPERVISOR_MODE) + msr cpsr,r0 + b warm_reset +#else + mov r0,#0 + mov pc,r0 // Jump to reset vector +#endif init_done: .long 0xDEADB00B @@ -321,7 +342,6 @@ init_done: .code 32 undefined_instruction: ldr sp,.__undef_exception_stack // get good stack - sub lr,lr,#4 // PC at time of interrupt stmfd sp!,{r0,fp,ip,lr} mrs r0,spsr stmfd sp!,{r0} @@ -346,6 +366,7 @@ 10: sub sp,sp,#ARMREG_SIZE // make space for frame stmea sp,{r0-r10,fp} // save immediately visible registers ldmfd ip,{r0-r4} // saved registers + sub r4,r4,#4 // PC at time of interrupt str r0,[sp,#armreg_cpsr] // CPSR at time of interrupt str r1,[sp,#armreg_r0] // saved R0 str r2,[sp,#armreg_fp] // saved FP @@ -364,7 +385,6 @@ 10: .code 32 software_interrupt: ldr sp,.__startup_stack // get good stack - sub lr,lr,#4 // PC at time of interrupt stmfd sp!,{r0,ip,lr} mrs r0,spsr stmfd sp!,{r0} @@ -379,6 +399,7 @@ software_interrupt: sub sp,sp,#ARMREG_SIZE+16 // make space for frame stmea sp,{r0-r10,fp} // save immediately visible registers ldmfd ip,{r0-r3} // saved registers + sub r3,r3,#4 // PC at time of interrupt str r0,[sp,#armreg_cpsr] // CPSR at time of interrupt str r1,[sp,#armreg_r0] // saved R0 str r2,[sp,#armreg_ip] // saved IP
