二十六 遮蔽中斷

2021-06-27 12:23:55 字數 2551 閱讀 7794

1.6410和210採用向量中斷,由硬體執行。有兩組中斷源,相應的控制暫存器也有多個

2.6410和210使能和遮蔽是分開的暫存器

3.遮蔽控制暫存器的讀寫操作從而遮蔽中斷,都是寫入全1

4.6410的**:

@遮蔽中斷,要操作兩個暫存器,目的是將使能中斷暫存器的相關位清除

#define vic0intenclear 0x71200014

#define vic1intenclear 0x71300014

disable_interrupt:

ldr r0, =vic0intenclear

mvn r1, #0x0

str r1, [r0]

ldr r0, =vic1intenclear

str r1, [r0]mov pc, lr

5.中斷的遮蔽與否由兩部分控制

(1)cpsr的i f位

(2)中斷遮蔽暫存器

6.完整**

@****************************

@file:start.s

@@tiny6410裸機上學期**

@****************************

.text

.global _start

@異常向量表

_start:

b reset

ldr pc, _undefined_instruction

ldr pc, _software_interrupt

ldr pc, _command_abort

ldr pc, _data_abort

ldr pc, _nothing_used

ldr pc, _irq

ldr pc, _fiq

@存放實際異常入口位址開闢的儲存單元

_undefined_instruction:

.word undefined_instruction

_software_interrupt:

.word software_interrupt

_command_abort:

.word command_abort

_data_abort:

.word data_abort

_nothing_used:

.word nothing_used

_irq:

.word irq

_fiq:

.word fiq

@各種實際的異常處理函式

undefined_instruction:

nopsoftware_interrupt:

nopcommand_abort:

nopdata_abort:

nopnothing_used:

nopirq:

nopfiq:

nop

@上電復位以後就執行這裡

reset:

bl set_svc

bl set_peri_port

bl disable_watchdog

bl disable_interrupt

@通過讀-修改-寫的方式控制cpsr從而改變工作模式的svc模式

set_svc:

mrs r0, cpsr

bic r0,r0,#0x1f

orr r0,r0,#0xd3

msr cpsr, r0

mov pc, lr

@外設位址初始化,要放在進入svc模式以後的第一步操作

set_peri_port:

ldr r0, =0x70000000 @對於6410來說,記憶體(0x00000000~0x60000000),外設(0x70000000-0x7fffffff)

orr r0, r0, #0x13 @外設大小:256m

mcr p15,0,r0,c15,c2,4 @把r0的值(包括了外設基位址+外設大小)告訴cpu

mov pc, lr

@關閉看門狗

#define pwtcon 0x7e004000

disable_watchdog:

ldr r0, =pwtcon

mov r1, #0x00

str r1, [r0]

mov pc, lr

@遮蔽中斷,要操作兩個暫存器,目的是將使能中斷暫存器的相關位清除

#define vic0intenclear 0x71200014

#define vic1intenclear 0x71300014

disable_interrupt:

ldr r0, =vic0intenclear

mvn r1, #0x0

str r1, [r0]

ldr r0, =vic1intenclear

str r1, [r0]

mov pc, lr

二十六 裝飾器

裝飾器 由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強 no...

每日程式設計(二十六)

如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1,3,2 3,2,1 1,2,3 1,1,5 1,5,1 分析 很明顯從後想前遍歷,直到找到乙個前面的數比後面的小,然後在...

出差(二十六)調節

週日,下雨的一天,沒有因為昨晚的最強大腦影響今天起床,電視節目依舊精彩,再次被鬼才之眼的超能力震撼,直接又一次秒殺日本對手,給力。想到兒子這段時間連續上課,補課,大家都在努力,當老爸的也得加油。今天上午把新調整的功能重新過了一遍,對頁面布局,資料聯動做了一輪驗證,按著正常的流程基本能走通。由於是週日...