.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:
nopsoftware_interrupt:
nopprefetch_abort:
nopdata_abort:
nopnot_used:
nopirq:
nopfiq:
nopreset:
bl set_svc
bl disable_watchdog
bl disable_interrupt
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
//2440和6410以及210關閉中斷的操作不一樣
//2440
disable_interrupt:
mvn r1, #0x0 //mvn取反傳送,r1=0x1
ldr r0, =0x4a000008 //0x4a000008為intmsk暫存器的位址
str r1, [r0]
mov pc, lr
//6410的使能中斷和遮蔽中斷用的是不同的暫存器
disable_interrupt:
mvn r1,#0x0
ldr r0,=0x71200014 //vic0intenclear 暫存器位址
str r1,[r0]
ldr r0,=0x71300014 //
vic1intenclear暫存器位址
str r1,[r0]
mov pc, lr
//210和6410一樣,使能中斷和遮蔽中斷用的是不同的暫存器
disable_interrupt:
mvn r1,#0x0
ldr r0,=0xf2000014
str r1,[r0]
ldr r0,=0xf2100014
str r1,[r0]
ldr r0,=0xf2200014
str r1,[r0]
ldr r0,=0xf2300014
str r1,[r0]
mov pc, lr
關閉中斷的疑惑
中斷的執行過程如下 如果需要關閉中斷的話,在哪一步關閉呢?是關閉peripheral ie pieier ier還是intm?假設我們關閉pieier,其過程在ti的interrupt reference guide中表述如下 但實際的interrupt在cpu級別的執行過程如下,問題也如下所示 在...
uboot中新增FIQ中斷及相關問題
本文主要說明了在uboot中新增fiq中斷時遇到的問題以及對應的解決辦法。問題 一 發生fiq中斷之後處理器做了哪些事情?發生中斷之後arm處理器需要處理完當前的指令,然後自動完成以下事情 1.將當前程式狀態暫存器cpsr儲存到fiq模式下的備份程式狀態暫存器spsr fiq之中 執行中斷返回時其逆...
理解為什麼在uboot階段要關閉watchdog
1 簡要理解什麼是watchdog?在嵌入式系統中,很多應用場景是系統長期執行且無人看守的,難免會有概率出現系統宕機的情況,此時watchdog的作用就是自動幫你重啟系統。watchdog一般為硬體模組。它的硬體邏輯是,硬體上有個記錄超時功能,然後要求使用者需要每隔一段時間 此時間可以根據自己需求而...