二十六.屏蔽中断

来源:互联网 发布:华三交换机端口隔离 编辑:程序博客网 时间:2024/05/16 08:48
1.6410和210采用向量中断,由硬件执行。有两组中断源,相应的控制寄存器也有多个

2.6410和210使能和屏蔽是分开的寄存器

3.屏蔽控制寄存器的读写操作从而屏蔽中断,都是写入全1

4.6410的代码:
@屏蔽中断,要操作两个寄存器,目的是将使能中断寄存器的相关位清除#define VIC0INTENCLEAR 0x71200014 #define VIC1INTENCLEAR 0x71300014 disable_interrupt:ldrr0,=VIC0INTENCLEARmvn r1,#0x0strr1,[r0]ldrr0,=VIC1INTENCLEARstrr1,[r0]<pre name="code" class="cpp"><pre name="code" class="cpp" style="orphans: 2; widows: 2;"><span style="white-space:pre"></span>mov pc,lr


5.中断的屏蔽与否由两部分控制
(1)CPSR的I F位


(2)中断屏蔽寄存器

6.完整代码
@****************************@File:start.S@@Tiny6410裸机上学期代码@****************************.text.global _start@异常向量表_start:bresetldr pc,_Undefined_instructionldr pc,_Software_interruptldrpc,_Command_abortldrpc,_Data_abortldrpc,_Nothing_usedldrpc,_IRQldrpc,_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:blset_svcbl set_peri_portbldisable_watchdogbl disable_interrupt@通过读-修改-写的方式控制CPSR从而改变工作模式的svc模式set_svc:mrsr0,cpsrbicr0,r0,#0x1Forrr0,r0,#0xD3msrcpsr,r0movpc,lr@外设地址初始化,要放在进入svc模式以后的第一步操作set_peri_port:ldr r0, =0x70000000 @对于6410来说,内存(0x00000000~0x60000000),外设(0x70000000-0x7fffffff)orr r0, r0, #0x13@外设大小:256Mmcr p15,0,r0,c15,c2,4        @把r0的值(包括了外设基地址+外设大小)告诉cpumovpc,lr@关闭看门狗#definepWTCON 0x7E004000disable_watchdog:ldrr0,=pWTCONmovr1,#0x00strr1,[r0]mov pc,lr@屏蔽中断,要操作两个寄存器,目的是将使能中断寄存器的相关位清除#define VIC0INTENCLEAR 0x71200014 #define VIC1INTENCLEAR 0x71300014 disable_interrupt:ldrr0,=VIC0INTENCLEARmvn r1,#0x0strr1,[r0]ldrr0,=VIC1INTENCLEARstrr1,[r0]mov pc,lr


0 0
原创粉丝点击