From a00b9f7bd08833318e137e88c4b2273fe14c55e4 Mon Sep 17 00:00:00 2001 From: Mariano Alvira Date: Tue, 2 Mar 2010 16:26:42 -0500 Subject: [PATCH] better start file removed unnecessary line from tmr-int test --- src/start.S | 129 ++++++++++++++++++++++++++++++----------------- tests/tmr-ints.c | 6 --- 2 files changed, 82 insertions(+), 53 deletions(-) diff --git a/src/start.S b/src/start.S index 5944d6713..f89ae0f21 100644 --- a/src/start.S +++ b/src/start.S @@ -4,9 +4,6 @@ * Copyright (c) 2001 Marius Gröger * Copyright (c) 2002 Alex Züpke * - * Modified for the mc13224v - * Copyright (c) 2009 Mariano Alvira - * * See file CREDITS for list of people who contributed to this * project. * @@ -26,10 +23,11 @@ * MA 02111-1307 USA */ + /* Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs */ - .equ I_BIT, 0x80 /* when I bit is set, IRQ is disabled */ - .equ F_BIT, 0x40 /* when F bit is set, FIQ is disabled */ + .equ IRQ_DISABLE, 0x80 /* when I bit is set, IRQ is disabled */ + .equ FIQ_DISABLE, 0x40 /* when F bit is set, FIQ is disabled */ .equ USR_MODE, 0x10 .equ FIQ_MODE, 0x11 @@ -39,12 +37,13 @@ .equ UND_MODE, 0x1B .equ SYS_MODE, 0x1F - .equ usr_stack_size, 256*4 - .equ irq_stack_size, 128*4 - .equ fiq_stack_size, 128*4 - .equ und_stack_size, 32*4 - .equ abt_stack_size, 32*4 - .equ sup_stack_size, 32*4 + .equ usr_stack_size, 1024 + .equ irq_stack_size, 256 + .equ fiq_stack_size, 256 + .equ und_stack_size, 256 + .equ abt_stack_size, 16 + .equ sup_stack_size, 16 + /* ************************************************************************* @@ -52,11 +51,13 @@ * Jump vector table as in table 3.1 in [1] * ************************************************************************* - */ + */ + .set base, . .set _rom_data_init, 0x108d0 + .globl _start _start: b _begin ldr pc, _undefined_instruction @@ -67,7 +68,7 @@ _start: b _begin ldr pc, _irq ldr pc, _fiq -#ifdef USE_ROM_VARS +#ifdef USE_ROM_VARS /* these vectors are used for rom patching */ .org 0x20 .code 16 @@ -85,7 +86,6 @@ _RPTV_2_START: .org 0xe0 _RPTV_3_START: bx lr /* do nothing */ - .org 0x120 ROM_var_start: .word 0 @@ -96,41 +96,66 @@ ROM_var_end: .word 0 .code 32 .align _begin: + /* FIQ mode stack */ + msr CPSR_c, #(FIQ_MODE | IRQ_DISABLE | FIQ_DISABLE) + ldr sp, =__fiq_stack_top__ /* set the FIQ stack pointer */ - ldr r1,=_system_stack - msr cpsr_c,#(SVC_MODE | I_BIT | F_BIT) - add r1,r1,#sup_stack_size - mov sp,r1 + /* IRQ mode stack */ + msr CPSR_c, #(IRQ_MODE | IRQ_DISABLE | FIQ_DISABLE) + ldr sp, =__irq_stack_top__ /* set the IRQ stack pointer */ - msr cpsr_c,#(IRQ_MODE | I_BIT | F_BIT) - add r1,r1,#irq_stack_size - mov sp,r1 + /* Supervisor mode stack */ + msr CPSR_c, #(SVC_MODE | IRQ_DISABLE | FIQ_DISABLE) + ldr sp, =__svc_stack_top__ /* set the SVC stack pointer */ - msr cpsr_c,#(FIQ_MODE | I_BIT | F_BIT) - add r1,r1,#fiq_stack_size - mov sp,r1 - - msr cpsr_c,#(ABT_MODE | I_BIT | F_BIT) - add r1,r1,#abt_stack_size - mov sp,r1 + /* Undefined mode stack */ + msr CPSR_c, #(UND_MODE | IRQ_DISABLE | FIQ_DISABLE) + ldr sp, =__und_stack_top__ /* set the UND stack pointer */ - msr cpsr_c,#(UND_MODE | I_BIT | F_BIT) - add r1,r1,#und_stack_size - mov sp,r1 + /* Abort mode stack */ + msr CPSR_c, #(ABT_MODE | IRQ_DISABLE | FIQ_DISABLE) + ldr sp, =__abt_stack_top__ /* set the ABT stack pointer */ -// msr cpsr_c,#(USR_MODE | I_BIT | F_BIT) + /* System mode stack */ + msr CPSR_c, #(SYS_MODE | IRQ_DISABLE | FIQ_DISABLE) + ldr sp, =__sys_stack_top__ /* set the SYS stack pointer */ #ifdef USE_ROM_VARS bl _rom_data_init+.-base #endif - msr cpsr_c,#(SVC_MODE) // turn on interrupts --- for debug only + msr CPSR_c, #(SYS_MODE) + + b main + +// ldr r1,=_system_stack +// msr cpsr_c,#(SVC_MODE | I_BIT | F_BIT) +// add r1,r1,#sup_stack_size +// mov sp,r1 + +// msr cpsr_c,#(IRQ_MODE | I_BIT | F_BIT) +// add r1,r1,#irq_stack_size +// mov sp,r1 + +// msr cpsr_c,#(FIQ_MODE | I_BIT | F_BIT) +// add r1,r1,#fiq_stack_size +// mov sp,r1 + +// msr cpsr_c,#(ABT_MODE | I_BIT | F_BIT) +// add r1,r1,#abt_stack_size +// mov sp,r1 + +// msr cpsr_c,#(UND_MODE | I_BIT | F_BIT) +// add r1,r1,#und_stack_size +// mov sp,r1 + +// msr cpsr_c,#(USR_MODE | I_BIT | F_BIT) + +// bl _rom_data_init+.-base +// msr cpsr_c,#(SVC_MODE) // turn on interrupts --- for debug only // msr cpsr_c,#(USR_MODE) // turn on interrupts --- for debug only // add r1,r1,#usr_stack_size // mov sp,r1 - b main - - _undefined_instruction: .word undefined_instruction _software_interrupt: .word software_interrupt _prefetch_abort: .word prefetch_abort @@ -138,8 +163,9 @@ _data_abort: .word data_abort _not_used: .word not_used _irq: .word irq _fiq: .word fiq - .balignl 16,0xdeadbeef - + .balignl 16,0xdeadbeef + + /* ************************************************************************* * @@ -160,10 +186,6 @@ _TEXT_BASE: _armboot_start: .word _start -_system_stack: - . = . + usr_stack_size + irq_stack_size + fiq_stack_size + und_stack_size + abt_stack_size + sup_stack_size - - /* * These are defined in the board-specific linker script. */ @@ -177,6 +199,22 @@ _bss_end: _start_armboot: .word main +_system_stack: + . = . + usr_stack_size + irq_stack_size + fiq_stack_size + und_stack_size + abt_stack_size + sup_stack_size + + +/* + ************************************************************************* + * + * CPU_init_critical registers + * + ************************************************************************* + */ + +cpu_init_crit: + # actually do nothing for now! + mov pc, lr + /* * exception handlers @@ -199,11 +237,8 @@ not_used: .align 5 //irq: -// push {lr} -// movs lr,pc -// b isr -// pop {lr} -// subs pc,r14,#4 // suggested irq return cmd +// +// .align 5 fiq: .align 5 diff --git a/tests/tmr-ints.c b/tests/tmr-ints.c index 17de11f16..d33d82d4d 100644 --- a/tests/tmr-ints.c +++ b/tests/tmr-ints.c @@ -60,12 +60,6 @@ void main(void) { enable_tmr_irq(); - /* go into user mode to handle IRQs */ - /* disabling interrupts is now difficult */ - asm(".code 32;" - "msr cpsr_c,#(0x10);" - ".code 16; "); - while(1) { /* sit here and let the interrupts do the work */ };