异常向量表

异常向量表_第1张图片

异常:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件。 

当一种异常发生的时候, ARM 处理器会跳转到 对应该异常的固定地址 去执行异常处理程序,而 这个固定的地址 ,就称之为 异常向量


异常向量表_第2张图片

由七个异常向量及其处理函数跳转关系组成的
表即为异常向量表
.
0x00000000: b reset
0x00000004: ldr pc, _undefined_instruction
0x00000008: ldr pc, _software_interrupt

0x0000000c: ldr pc, _prefetch_abort
0x00000010: ldr pc, _data_abort
0x00000014: ldr pc, _not_used
0x00000018: ldr pc, _irq
0x0000001c: ldr pc, _fiq
 


@****************************
@File:start.S
@****************************

.text
.global _start
_start:
b reset
ldr pc, _undifined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq



_undifined_instruction: .word undifined_instruction
_software_interrupt: .word software_interrupt
_prefetch_abort: .word prefetch_abort
_data_abort: .word data_abort
_not_used: .word not_used
_irq: .word irq
_fiq: .word reset


undifined_instruction:
nop


software_interrupt:
nop

prefetch_abort:
nop

data_abort:
nop


not_used:
nop


irq:
nop


fiq:
nop


reset:
bl set_svc
bl disable_watchdog
bl disable_interrupt
bl disable_mmu
bl init_clock
bl light_led


set_svc:
mrs r0, cpsr
bic r0, r0,#0x1f
orr r0, r0,#0xd3
msr cpsr, r0
mov pc, lr


#define pWTCON 0x53000000
disable_watchdog:
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
mov pc, lr


disable_interrupt:
mvn r1, #0x0
ldr r0, =0x4a000008
str r1, [r0]
mov pc, lr

disable_mmu:
mcr p15,0,r0,c7,c7,0
mrc p15,0,r0,c1,c0,0
bic r0, r0, #0x00000007
mcr p15,0,r0,c1,c0,0
mov pc, lr


#define CLKDIVN 0x4c000014
#define MPLLCON 0x4c000004
#define MPLL_405MHZ ((127<<12)|(2<<4)|(1<<0))


init_clock:
ldr r0, =CLKDIVN
mov r1, #0x5
str r1, [r0]

mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000
mcr p15,0,r0,c1,c0,0

ldr r0, =MPLLCON
ldr r1, =MPLL_405MHZ
str r1, [r0]
mov pc, lr


#define GPBCON 0x56000010
#define GPBDAT 0x56000014
light_led:
ldr r0, =GPBCON
mov r1, #0x400
str r1, [r0]

ldr r0, =GPBDAT
mov r1, #0x0
str r1, [r0]
mov pc, lr


Makefile文件

all: start.o 
arm-linux-ld -Tgboot.lds -o gboot.elf $^
arm-linux-objcopy -O binary gboot.elf gboot.bin

%.o : %.S
arm-linux-gcc -g -c $^

%.o : %.c
arm-linux-gcc -g -c $^

.PHONY: clean
clean:
rm *.o *.elf *.bin



gboot.lds文件

OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS {
. = 0x30008000;

. = ALIGN(4);
.text :
{
start.o (.text)
*(.text)
}


. = ALIGN(4);
.data : 
{
*(.data)
}

. = ALIGN(4);
bss_start = .;
.bss : 
{
*(.bss) 
}
bss_end = .;
}

异常向量表_第3张图片


异常向量表_第4张图片


异常向量表_第5张图片

你可能感兴趣的:(异常向量表)