⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startup.s

📁 LPC2106 example: I2C, Interrupt, UART0 Ram/Rom Config
💻 S
字号:
/******************************************************************************
       Module: startup.s
  Description: Device controller - Startup Code
Version     Date           Initials    Description
1.0.0    19-FEB-2002         ASH         Initial
******************************************************************************/
.arm
.text
.global     _int_vectors
.func       _int_vectors

/******************************************************************************
*          Exception vector tablecommon to all ARM-based systems              *
******************************************************************************* 
* Common to all ARM-based systems. See ARM Architecture Reference Manual,     *
* Programmer's Model section for details. Table entries just jump to handlers *
* (using full 32-bit addressing).                                             *
******************************************************************************/

_int_vectors:   
    
    ldr     pc, do_reset_addr
    ldr     pc, do_undefined_instruction_addr
    ldr     pc, do_software_interrupt_addr
    ldr     pc, do_prefetch_abort_addr
    ldr     pc, do_data_abort_addr
    .long   0xB8A06F58                        /* ARM-reserved vector */
    ldr     pc, do_irq_addr
    ldr     pc, do_fiq_addr

do_reset_addr:                  .long   do_reset
do_undefined_instruction_addr:  .long   do_undefined_instruction
do_software_interrupt_addr:     .long   do_software_interrupt
do_prefetch_abort_addr:         .long   do_prefetch_abort
do_data_abort_addr:             .long   do_data_abort
                                .long   0x00
do_irq_addr:                    .long   do_irq
do_fiq_addr:                    .long   do_fiq

/******************************************************************************
 *                               IRQ Handler                                  *
 ******************************************************************************
 * Branch to a c function to handle the exception.                            *
 *****************************************************************************/
do_irq:
	b	ExternalInterrupt

/******************************************************************************
*                         Yet to be implemented exceptions                    *
*******************************************************************************
* Just fall through to reset exception handler for now                        *                                     *
******************************************************************************/                                                                            
do_undefined_instruction:
do_software_interrupt:
do_prefetch_abort:
do_data_abort:
do_fiq:

/******************************************************************************
*                            System reset handler                             *
******************************************************************************/
do_reset:

    /*Set stack pointers for all modes used (supervisor, IRQ and FIQ)*/
    msr     cpsr_c, #0xd3       /* ensure we're in supervisor mode */
    ldr     sp, =__stack_svc    /* set supervisor mode stack pointer */

    msr     cpsr_c, #0xd2       /* enter IRQ mode, with interrupts disabled */
    ldr     sp, =__stack_irq    /* set IRQ mode stack pointer */

    msr     cpsr_c, #0xd1       /* enter FIQ mode, with interrupts disabled */
    ldr     sp, =__stack_fiq    /* set FIQ mode stack pointer */

    /* Clear uninitialized data section (bss) */
    ldr     r4, =__start_bss      /* First address*/      
    ldr     r5, =__end_bss       /* Last  address*/      
    mov     r6, #0x0                                
                                                
1:  str     r6, [r4]                                
    add     r4, r4, #0x4                            
    cmp     r4, r5                                  
    blt     1b                                    
    
    /* Enable interrupts, enter supervisor mode and branch to start of 'C' code */
    /*msr     cpsr_c, #0x13       /* I=0 F=0 T=0 MODE=supervisor */
    b       main

/******************************************************************************
 *                               IRQ Handler                                  *
 ******************************************************************************
 * Branch to a c funcion to handle the exception.                             *
 *****************************************************************************/
/*do_irq:
	b	ExternalInterrupt
*/
/******************************************************************************
*                          Software Interrupt Handler                         *
*******************************************************************************
*                                                                             *
******************************************************************************/
/*do_software_interrupt:
	nop
*/
/******************************************************************************
*                        End of startup and interrupt code                    *
******************************************************************************/
.size   _int_vectors,.-_int_vectors;
.endfunc

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -