ARM异常及中断处理实验报告

  • 格式:docx
  • 大小:948.80 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

实验题目

ARM异常及中断处理实验

姓名:

学号:

课程名称:

所在学院:

专业班级:

任课教师:

实验项目名称ARM异常及中断处理实验

一、实验目的与要求:

利用 Exynos4412 的 K2、K3这2个I/O引脚的中断模式,当被按下时进入相应的中断处理函数处理相应的事件。

二、实验设备:

华清远见试验箱,PC机

三、实验方法(原理,流程图)

1、电路原理

电路原理如图所示,K2、K3 分别与 GPX1_1、GPX1_2 相连,在没有按下按键时 GPX1_1、GPX1_2 引脚上一直处于高电平,当把这两个引脚设为中断模式并为下降沿中断,则按键被按下俩引脚就会有高电平变为低电平,因此,产生 GPIO 中断进入相应的中断函数,处理中段事件,从终端上打印出相应的按键信息。其中K2 对应的是XEINT9 中断源,K3 对应的是 XEINT10 中断源。

2、编程流程

(1)设置 GPX1_2、GPX1_2 两个管脚没有内部上下拉属性,然后配置为中断模式;

(2)设置中断触发方式;

(3)GPIO 控制器中关闭屏蔽、使能中断;

(4)在 GIC 中断控制器中使能中断;

(5)设置中断优先级;

(6)使能 GIC;

(7)选择中断发送给 CPU0;

(8)等待中断产生,然后进入中断处理器函数;

(9)清楚中断源的挂起状态。

四、实验过程、步骤及内容

1、寄存器设置

为了实现进入中断目的,需要通过配置 GPX1CON 寄存器将 GPX1_1、GPX1_2 设置为中断模式。设置中断方式、中断处理函数、使能中断。

2、编写相关代码如下:

(1)设置异常向量表:

.text

.global _start

_start:

b reset

ldr pc,_undefined_instruction

ldr pc,_software_interrupt

ldr pc,_prefetch_abort

ldr pc,_data_abort

ldr pc,_not_used

ldr pc,_irq

ldr pc,_fiq

_undefined_instruction: .word _undefined_instruction

_software_interrupt:.word _software_interrupt

_prefetch_abort:.word _prefetch_abort

_data_abort:.word _data_abort

_not_used:.word _not_used

_irq:.word irq_handler

_fiq:.word _fiq

reset:

ldr r0,=0x40008000

mcr p15,0,r0,c12,c0,0 @ Vector Base Address Register

mrs r0,cpsr

bic r0,r0,#0x1f

orr r0,r0,#0xd3

msr cpsr,r0 @ Enable svc mode of cpu

.text

.global _start

_start:

b reset

ldr pc,_undefined_instruction

ldr pc,_software_interrupt

ldr pc,_prefetch_abort

ldr pc,_data_abort

ldr pc,_not_used

ldr pc,_irq

ldr pc,_fiq

_undefined_instruction: .word _undefined_instruction

_software_interrupt:.word _software_interrupt

_prefetch_abort:.word _prefetch_abort

_data_abort:.word _data_abort

_not_used:.word _not_used

_irq:.word irq_handler

_fiq:.word _fiq

reset:

ldr r0,=0x40008000

mcr p15,0,r0,c12,c0,0 @ Vector Base Address Register

mrs r0,cpsr

bic r0,r0,#0x1f

orr r0,r0,#0xd3

msr cpsr,r0 @ Enable svc mode of cpu

init_stack:

ldr r0,stacktop /*get stack top pointer*/

/********svc mode stack********/

mov sp,r0

sub r0,#128*4 /*512 byte for irq mode of stack*/ /****irq mode stack**/

msr cpsr,#0xd2

mov sp,r0

sub r0,#128*4 /*512 byte for irq mode of stack*/ /***fiq mode stack***/

msr cpsr,#0xd1

mov sp,r0

sub r0,#0

/***abort mode stack***/

msr cpsr,#0xd7

mov sp,r0

sub r0,#0