u boot關閉中斷

2021-06-22 09:26:14 字數 1774 閱讀 4624

.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一般為硬體模組。它的硬體邏輯是,硬體上有個記錄超時功能,然後要求使用者需要每隔一段時間 此時間可以根據自己需求而...