2410中断
mini2440调试进不了中断解决方案

ldr r0,=SRCPND str r1,[r0] ldr r0,=INTPND str r1,[r0] ldr r0,=INTSUBMSK ldr r1,=0x7fff @all sub interrupt disable, 2002/04/10 str r1,[r0] @@@设置频率 mov r1, #CLK_CTL_BASE ldr r2, clock_locktime str r2, [r1, #oLOCKTIME] mov r1, #CLK_CTL_BASE ldr r2, clkdivn_value str r2, [r1, #oCLKDIVN] mrc p15, 0, r1, c1, c0, 0 @ read ctrl register orr r1, r1, #0xc0000000 @ Asynchronous mcr p15, 0, r1, c1, c0, 0 @ write ctrl register mov r1, #CLK_CTL_BASE ldr r2, mpll_value @ clock default str r2, [r1, #oMPLLCON] @@@@初始化串口 InitUART: @set GPIO for UART mov r1, #GPIO_CTL_BASE add r1, r1, #oGPIO_H ldr r2, gpio_con_uart str r2, [r1, #oGPIO_CON] ldr r2, gpio_up_uart str r2, [r1, #oGPIO_UP] ldr r1, SerBase mov r2, #0x0 str r2, [r1, #oUFCON] str r2, [r1, #oUMCON] mov r2, #0x3 str r2, [r1, #oULCON] ldr r2, =0x245 str r2, [r1, #oUCON] .equ UART_BRD , ((UART_PCLK / (UART_BAUD_RATE*16)) - 1) mov r2, #UART_BRD str r2, [r1, #oUBRDIV] mov r3, #100 InitUART1:
MC2410 用户手册说明书

SinoMCU RF 2.4G射频传输专用芯片MC2410用户手册V1.0目录1产品概要 (3)2产品特性 (3)3模块框图 (4)4端口定义 (4)4.1引脚排列 (4)4.2端口说明 (5)5电气特性 (6)6典型应用 (8)7SPI接口 (9)7.1SPI默认格式 (9)7.2SPI时序要求 (10)8发送/接收流程 (11)8.1RF初始化 (11)8.2短包发送/接收流程 (11)8.3长包发送/接收流程 (12)8.4进入IDLE模式流程 (13)8.5进入SLEEP模式流程 (13)8.6SLEEP唤醒 (13)8.7扫描RSSI流程 (13)8.8250K传输数据率的附加流程 (13)9寄存器信息 (15)10数据包格式 (19)11电源要求 (19)12发射功率的调整 (20)13ESOP8封装功能说明 (20)13.1MCU通讯接口 (20)13.2射频性能 (20)14应用注意事项 (21)14.1IO电压 (21)14.2CE管脚 (21)14.3POR (21)14.4状态转换 (21)14.5同步字使用注意事项 (22)15封装尺寸 (23)15.1SOP16 (23)15.2ESOP8 (23)16修订记录 (24)1产品概要本产品是一款低成本,高集成度的2.4GHz的无线收发芯片,片上集成发射机、接收机、频率综合器和GFSK调制解调器,具有高灵敏度、低功耗以及抗干扰能力强的优点,可适用于无线遥控、无线键鼠、无线通讯以及工业控制等领域。
片上的发射接收FIFO寄存器可以和MCU进行通信,存储数据,然后以1Mbps或250Kbps数据率在空中传输。
内置了CRC、FEC、Auto ACK和自动重传机制,可以大大简化系统设计并优化性能。
同时外围电路简单,只需搭配MCU以及少数外围被动元件。
为了提高电池使用寿命,芯片在各个环节都降低功耗,芯片最低工作电压可以到1.9V,最低睡眠模式电流小于1μA。
中断异常处理流程

计算机体系结构中,异常或者中断是处理系统中突发事件的一种机制,几乎所有的处理器都提供这种机制。
异常主要是从处理器被动接受的角度出发的一种描述,指意外操作引起的异常。
而中断则带有向处理器主动申请的意味。
但这两种情况具有一定的共性,都是请求处理器打断正常的程序执行流程,进入特定程序的一种机制。
若无特别说明,对“异常”和“中断”都不作严格的区分。
本文结合经过实际验证的代码对ARM9中断处理流程进行分析,并设计出基于S3C2410芯片的外部中断处理程序。
1.异常中断响应和返回系统运行时,异常可能会随时发生。
当一个异常出现以后,ARM微处理器会执行以下几步操作:1) 将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。
2)将CPSR复制到相应的SPSR中。
3)根据异常类型,强制设置CPSR的运行模式位。
4) 强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
这些工作是由ARM内核完成的,不需要用户程序参与。
异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:1)将连接寄存器LR的值减去相应的偏移量后送到PC中。
2)将SPSR复制回CPSR中。
3) 若在进入异常处理时设置了中断禁止位,要在此清除。
这些工作必须由用户在中断处理函数中实现。
为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理。
采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序。
当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序。
当异常处理完成以后,返回到主程序继续执行。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
2.异常处理程序设计2.1 异常响应流程由于向量表的限制,只能有一条指令B完成32MB范围内的跳转,并不能保证所有的异常处理函数都位于32MB范围内。
博创科技 UP-Star2410 开发板 硬件说明书

UP-Star2410开发板硬件说明书一、UP-Star2410硬件资源1.核心资源S3C2410 ARM CPU、32M SDRAM、64M NAND FLASH。
2. 100M网卡,DM9000AE。
3.一个USB主口,一个USB从口。
4.一个RS232串口DB9接口。
另有一路RS232串口和TTL串口从扩展插座上引出。
5.扩展插座,引出所有总线信号(经过驱动芯片)和未占用资源。
6. LCD和触摸屏接口,外接专配液晶屏/触摸屏板。
7.电源、复位、JTAG、RTC等基本资源和接口,支持博创UP-LINK和J-LINK仿真器。
8.设置了IO控制的LED和可产生硬中断的5位导航按键等简单调试资源。
二、电路原理说明1.S3C2410的OM0和OM1两个引脚用来配置启动方式和Bank0的总线宽度。
当OM[1:0]=00时从NandFlash启动,此时Bank0不能使用;当OM[1:0]=01时从Bank0启动,并配置为16Bit宽度,也就是从NorFlash启动。
UP-Star2410上固定设置为从NandFlash启动。
2.S3C2410从NandFlash引导时,通过NCON脚的电平来配置NandFlash控制器的寻址字节数。
从这点上看,无法从128M及以上容量的大块NandFlash引导,因为128M Flash的寻址方式和块页组织都有所变化。
UP-Star2410上将NCON接高电平,支持64M NandFlash引导。
3.K9F1208是三星公司的NandFlash芯片,而S3C2410内部具有Nand 控制器,所以K9F1208直接和S3C2410连接,并可以从NandFlash引导。
NandFlash的原理图如下所示:4.核心板的SDRAM采用两片HY57V561620,每片32M字节,总的SDRAM为32MB。
HY57V561620数据宽度16Bit,内部分为4个Bank,每Bank为4M字节。
ADS环境程序启动分析

EQU EQU EQU EQU EQU EQU EQU EQU
(_ISR_STARTADDRESS+0x0) (_ISR_STARTADDRESS+0x4) (_ISR_STARTADDRESS+0x8) (_ISR_STARTADDRESS+0xc) (_ISR_STARTADDRESS+0x10) (_ISR_STARTADDRESS+0x14) (_ISR_STARTADDRESS+0x18) (_ISR_STARTADDRESS+0x1c)
2009-4-9
8
2410启动代码分析
DW8 EQU (0x0) DW16 EQU (0x1) DW32 EQU (0x2) WAIT EQU (0x1<<2) UBLB EQU (0x1<<3) 这几句代码主要用来设置2410内的存储控制积存器BWSCON 大家应该知道2410的存储控制积存器有以下特性: 1 支持大端、小端模式。 2 每个BANK地址空间128M 3 可编程的总线位宽。 4 总共有8个BANK 5 BANK0-BANK6的起始地址是固定的。 6 BANK7的起始地址是可以编程控制的。 7 每个BANK的访问周期可以编程控制的。 下面回顾一下2410的地址映射图:
2009-4-9
11
2410启动代码分析
ASSERT :DEF:BUSWIDTH [ BUSWIDTH=16 B1_BWSCON EQU (DW16) B2_BWSCON EQU (DW16) B3_BWSCON EQU (DW16) B4_BWSCON EQU (DW16) B5_BWSCON EQU (DW16) B6_BWSCON EQU (DW16) B7_BWSCON EQU (DW16) | ;BUSWIDTH=32 B1_BWSCON EQU (DW32) B2_BWSCON EQU (DW16) B3_BWSCON EQU (DW16) B4_BWSCON EQU (DW16) B5_BWSCON EQU (DW16) B6_BWSCON EQU (DW32) B7_BWSCON EQU (DW32) ]
经典平台CPLD接口说明书

博创科技经典平台CPLD接口说明2011-1-10经典平台上有两片CPLD,第1片控制网卡、IDE的逻辑、串口选择、CF卡逻辑等。
第2片控制音频和触摸屏选择、LED矩阵和数码管等。
对软件而言,两片CPLD可以看作同一外设,有的寄存器分开放在两片CPLD内的。
如无特别说明,S3C2440核心板所对应的地址分配和S3C2410核心板完全相同。
一、网卡、IDE、复位等逻辑和原来经典平台一样,对软件透明,无需设置。
1、网卡1和网卡2,对于270和2410核心板,都在Bank2上。
当nGCS2为0时,A2为0则选中网卡1,A2为1则选中网卡2。
对于每个网卡芯片,A1为0访问INDEX端口,A1为1访问DATA端口。
物理地址:2410核心板:网卡1:INDEX:0x1000 0000 DATA::0x1000 0002网卡2:INDEX:0x1000 0004 DATA::0x1000 0006 270核心板:网卡1:INDEX:0x0800 0000 DATA::0x0800 0002网卡2:INDEX:0x0800 0004 DATA::0x0800 00062、IDE接口和其他一些资源占用同一个Bank,2410核心板是Bank1,270核心板是Bank4。
当A8为0时选中IDE接口,A8为1时选中其他资源,后面逐步说明。
物理地址范围:2410核心板:IDE接口:0x0800 0000---0x0800 00FF其他设备:0x0800 0100---0x0800 011E270核心板: IDE接口:0x1000 0000---0x1000 00FF其他设备:0x1000 0100---0x1000 011E3、复位逻辑仅提供各复位电平之间的逻辑与关系。
二、CPLD内部包括核心板选择寄存器,并据此对音频和触摸屏等资源进行选择,以及控制串口选择的寄存器,数码管和矩阵LED寄存器,还有270核心板下的CF卡相关寄存器。
ARM2410实时钟RTC

Reset R/W Description Value
0x5700005C(L) R/W ALMHOUR 字节) 0x5700005F(B) (字节 字节
报警小时 寄存器 义
0x00 初值
00 00 0000
字段名 Reserved ALMHOURH ALMHOURL
0x57000070/ BCDSEC R/W 秒当前值寄存器 0xXX 3 0x57000074/ BCDMIN R/W 分钟当前值寄存器 0xXX 7 0x57000078/ BCDHOUR R/W 小时当前值寄存器 0xXX B 0x5700007C/ BCDDAY R/W 日当前值寄存器 0xXX F 0x57000080/
意
义
初值
0 0 0 0 0 0 0 0
时报警使能位。 :失能; : 2 时报警使能位。0:失能;1:使能
1 分报警使能位。0:失能;1:使能 分报警使能位。 :失能; : 0 秒报警使能位。0:失能;1:使能 秒报警使能位。 :失能; :
4、RTC报警秒数寄存器(ALMSEC) 、 报警秒数寄存器( 报警秒数寄存器 )
1、RTC控制寄存器(RTCCON) 、 控制寄存器( 控制寄存器 )
Register
RTCCON
Address
R/W
Description
Reset Value
0x57000040(L) R/W RTC控制寄存器 0x0 控制寄存器 字节) 0x57000043(B) (字节 字节
字段名 位 CLKRST 3
意
义
初值
0 0 0 0
RTC时钟计数复位。 时钟计数复位。 时钟计数复位 0:不复位;1 = BCD计数复位。 计数复位。 :不复位; 计数复位 BCD计数选择。0:合并 计数选择。 :合并BCD计数; 计数; 计数选择 计数 2 1 = 保留(单独的 CNTSEL 保留(单独的BCD计数器) 计数器) 计数器 BCD时钟选择。 0:XTAL/32768 时钟选择。 : 时钟选择 1:用XTAL原值(但只用于测试) 原值( : 原值 但只用于测试) RTC控制使能。 0:失能; 1:使能 控制使能。 :失能; : 控制使能 RTCEN 0 指BCD时间计数和读取操作可以被执行 时间计数和读取操作可以被执行
kernel里面的中断代码分析

* @depth:
disable-depth, for nested irq_disable() calls
* @wake_depth:
enable depth, for multiple set_irq_wake() callers
* @irq_count:
stats field to detect stalled irqs
for (irqno = IRQ_EINT4; irqno <= IRQ_EINT23; irqno++) { irqdbf("registering irq %d (extended s3c irq)\n", irqno); set_irq_chip(irqno, &s3c_irqext_chip); set_irq_handler(irqno, do_edge_IRQ); set_irq_flags(irqno, IRQF_VALID);
struct irq_chip *chip;
void
*handler_data;
void
*chip_data;
struct irqaction *action; /* IRQ action list */
unsigned int
status;
/* IRQ status */
unsigned int
depth;
/* nested irq disables */
unsigned int
wake_depth; /* nested wake enables */
unsigned int
irq_count; /* For detecting broken IRQs */
ELTABARMII2410说明书

ELTABARMII2410说明书硬件资源概述EL-TAB-ARM-II型教学实验系统属于一种综合的教学实验系统,它是集学习、应用编程、开发研究于一体ARM实验教学系统。
用户可依照自己的需求选用不同类型的CPU适配板,兼容ARM7与ARM9、ARM10,而不需要改变任何配置,同时,实验系统上的Tech_V总线能够拓展较为丰富的实验接口板。
用户在了解Tech_V标准后,更能研发出不同用途的实验接口板。
除此之外,在实验板上有丰富的外围扩展资源(数字量IO输入输出,语音编解码、人机接口等单元),能够完成ARM的基础实验和数据通信实验、以太网实验。
1.1 实验系统的硬件资源总揽图1-1-1 EL-ARM-830实验教学系统的功能框图1.2 核心板ARM9的资源介绍1.核心板的硬件资源(ARM920T核)☆CPU:ARM920T,芯片三星的S3C2410,工作频率最高202MHz;☆动态储备器:64MB,芯片HY57V561620;☆海量储备器:32MB,芯片K9F5608;☆ USB单元: 1个主接口,两个设备接口,芯片PDIUSBD12;☆网络单元: 10/100M以太网,芯片AX88796;☆ UART单元: 2个,最高通信波特率115200bps;☆语音单元: IIS格式,芯片UDA1341TS,采样频率最高48KHz;☆ LCD单元: 5.7寸,256色,320X240像素;☆触摸屏单元:四线电阻屏,320X240,5.7寸;☆ SD卡单元:通信频率最高25MHz,芯片W86L388D,兼容MMC卡;☆键盘单元: 4X4键盘,带8位LED数码管;芯片HD7279A;☆模拟输入输出单元:8个带自锁的按键,及8个LED发光管;☆ A/D转换单元:芯片自带的8路10位A/D,满量程2.5V;☆信号源单元:方波输出;☆标准键盘及PS2鼠标接口;☆标准的IDE硬盘接口;☆达盛公司的Tech_V总线接口;☆达盛公司的E_Lab总线接口;☆调试接口: 20针JTAG;☆ CPLD单元;☆电源模块单元。
RealARM 2410硬件平台综述

一、 RealARM 2410 硬件平台综述RealARM 2410平台由核心板(Core-Board)和底板( Bottom-Board ) 组成。
如下图所示I、RealARM2410的主要特点Core-Board(核心板)Samsung S3c2410x (ARM920T CORE,203MHz)FLASH ROM: 256Mbit NAND FLASH (Samsung K9F5608)2M NOR FLASH HY29LV160TTSDRAM : 64Mbyte HY57V561620BT-HRTC 实时时钟NAND FLASH --NOR FLASH 启动选择开关两个I/O 口连接两个LED,方便用户调试自己的程序Bottom-Board (底板)LCD 接口,支持各种TFT LCD触摸屏接口:可接四线电阻式触摸屏USB HOSTUSB DEVICESD/MMC 接口2个UART 提供标准的232电平,1个TTL UART标准ARM 20芯 JTAG&&Wiggle&&ICE接口ADC 模数转换接口SPI接口IIS :采用UDA1341TS IIS接口(立体声输出,MIC输入) 外部中断接口(方便用户二次开发)10M 网卡:CS8900A4个LED 和4个按键,方便你的调试和输入以上很多接口都可以复用为通用I/O,方便用户外接自己的设备。
II、RealARM2410与众不同的特点1、采用核心板和底板分离的设计思想,用户可以方便的使用Core-Board进行二次开发核心板和底板采用稳固DIMM-144标准PCI插槽接口。
如图所示2、Core-Board 集成了ARM最小系统,包括 CPU、内存、NandFlash、NorFlash、RTC核心部件。
特别是Nor Flash的集成使ARM最小系统进一步完整,这一点是别的公司没有做到的。
Nor Flash的集成让用方便地调试Vxwork等软件如图所示Bottom-Board的把CPU的所有功能全部引出,方便用户使用,LED和按键的加入,可以方便用户调试程序。
第六章 ARM9_串口UART及编程

6.2.6 发送和接收状态寄存器UTRSTATn 发送和接收状态寄存器UTRSTATn
UTRSTATn发送和接收状态寄存器包括 UTRSTATn发送和接收状态寄存器包括 UTRSTAT0, UTRSTAT1 and UTRSTAT2 UTRSTATn 寄存器各位定义: 寄存器各位定义: UTRSTATn [1] 发送缓冲器空标志 0 =不空; =不空; 不空 1 = 空。 UTRSTATn [0] 接收缓冲器有接收数据标志 0 =空; =空 1 = 接收缓冲器有数据。 接收缓冲器有数据。
6.1.3 UART通信操作 UART通信操作 下面简略介绍UART操作,关于数据发送、 下面简略介绍UART操作,关于数据发送、数据接 操作 收、中断产生、波特率产生、查询检测模式、红外 中断产生、波特率产生、查询检测模式、 模式的详细介绍,参见下面6.3节 模式的详细介绍,参见下面6.3节。 发送数据帧是可编程的。一个数据帧包含1 发送数据帧是可编程的。一个数据帧包含1个起始 5~8个数据位 个可选的奇偶校验位和1~2位 个数据位、 位、5~8个数据位、1个可选的奇偶校验位和1~2位 ULCONn配置。 停止位,停止位通过行控制寄存器ULCONn配置 停止位,停止位通过行控制寄存器ULCONn配置。 与发送数据帧类似,接收数据帧也是可编程的。 与发送数据帧类似,接收数据帧也是可编程的。接 收帧由1个起始位、5~8个数据位 个数据位、 收帧由1个起始位、5~8个数据位、l个可选的奇偶 校验位以及1~2位行控制寄存器 位行控制寄存器ULCONn中设定的 校验位以及1~2位行控制寄存器ULCONn中设定的 停止位组成。接收器还可以检测溢出错、 停止位组成。接收器还可以检测溢出错、奇偶校验 帧错误和传输中断, 错、帧错误和传输中断,每一个错误均可以设置一 个错误标志。 个错误标志。
DSP 第3讲 中断系统

§3.11 中断和中断向量表
中断号(K) 优先级 名 称 向量位置 功 能
16
17 18 19 20 21 22
3
4 5 6 7 8 9
INT0/SINT0
INT1/SINT1 IN12/SINT2 TINT0/SINT3 BRINT0/SINT4 BXINT0/SINT5 DMAC0/SINT6
§3.12 VC5402的中断向量表文件—续
RESET: ;复位中断,优先级最高 BD _c_int00 ;执行完该语句下面的一条语句后,跳转到_c_int00处 STM #128,SP ;设置堆栈大小为128个字 nmi:RETE ;nmi非屏蔽中断返回,下面依次为VC5402的各个中断, NOP ;每个只占4个字节 NOP NOP sint17 .space 4*16 ;VC5402的软中断 sint18 .space 4*16 ;.space表示开辟空间(单位:bit) sint19 .space 4*16 sint20 .space 4*16 sire21 .space 4*16 sint22 .space 4*16 sint23 .space 4*16 sint24 .space 4*16 sint25 .space 4*16 sint26 .space 4*16 sint27 .space 4*16 sint28 .space 4*16 sint29 .space 4*16 sint30 .space 4*16 ;这部分可以直接写为 .space 14*4*16
(3)IMR屏蔽位为1。(使能一个中断)
§3.6 执行中断服务程序(ISR)
当应答中断后,CPU会采取如下的操作:
华清远见 GX-ARM9-2410EP 用户手册说明书

GX-ARM9-2410EP 硬件资源:GX-ARM9-2410EP 核心模块:● SAMSUNG ARM9 S3C2410处理器,主频200MHz● 64M SDRAM ● 通过可靠的SODIMM接口和主板相连接GX-ARM9-2410EP 主板资源:● 2M AMD 线性 FLASH:类似 PC BIOS 的功能,实现对系统的初始化和配置● 8M Intel线性FLASH:可通过主板的JTAG接口直接烧写 ● 1个SMC接口:系统支持直接从SMC卡启动 ● 本系统支持三种启动方式,通过跳线可以设置系统从AMD FLASH、Intel FLASH或者从外接的SMC卡启动 ● PCMCIA控制器扩展的PCMCIA接口:不仅可外接PCMCIA外设,而且可以通过转接卡连接带CF卡接口外设 ● Audio音频接口:音频的输入输出方式十分灵活,直接通过跳线选择,既可以是外接的MIC(MICROPHONE) Input及Line Output,还可以是板载的MIC及双声道喇叭 ● 1个SD卡接口● 2 个以太网卡接口:1 个是由 CS8900 外扩的 10M 网口,还有 1 个是由 DM9000 外扩的 10M/100M 自适应网口 ● 2 个USB接口:1 个USB Host,1 个USB Host/Device ● 2 个PS/2接口:可直接接PS/2接口的鼠标与键盘 ● 多功能扩展模块接口:通过两个 96Pin 的欧式座引出系统的 32 位总线、由 CPLD 扩展的大量 GPIO以及SPI、IIC、 UART等接口,针对各高等院校电子信息、计算机、自动化、测控等专业需求,可方便地扩展各个的专用模块, 实现功能无限扩展。
可选配GPS 模块、GPRS 模块、GPS&GPRS 模块、蓝牙扩展板、GX-SOPC-Nios II模 块、滑动式半导体指纹模块、802.15.4扩展板、射频卡&IC卡扩展板、GX-CAN&485扩展板、电机扩展板…… ● 液晶显示器模块和液晶显示器扩展接口电路:自带 3.5寸真彩TFT液晶屏,分辨率 320×240,LED背光,带触摸 屏,通过液晶屏扩展接口可扩展成更大尺寸的液晶屏……● 5 个 RS232 接口:其中 1个红外复用● 1 个IDE硬盘接口:可直接接笔记本硬盘● 1 个标准 25 针并行接口● 8 个 8 段的数码管:方便数字的显示● 10bit A/D 接口:电压输入可以是板载电位器、板载温度传感器或 D/A 的输出信号● DAC0832 扩展的 D/A 通道接口:信号可以直接输出,也可以作为 A/D 的一个信号源● 实时时钟 RTC:在 CPU 内部集成,通过主板上的 3V 锂电池提供掉电保护● I 2C接口的 E 2PROM :可通过 CPU 的 I 2C 接口实现对 E 2PROM 中的数据读写,数据掉电不丢失● SPI接口的 E 2PROM :可通过 CPU 的 SPI 接口实现对 E 2PROM中的数据的高速读写,数据掉电不丢失 ● 移植成功的 MIZILinux 及μC/OS II 嵌入式实时操作系统源代码公开。
实验2-外部中断的LED控制

外部中断的LED控制实验目的1.了解中断的作用2.掌握嵌入式系统中断的处理流程3.掌握ARM中断编程实验内容编写中断处理程序,处理外部中断预备知识了解ADT集成开发环境的基本功能;了解中断的作用以及基本处理过程。
实验设备硬件:JXARM9-2400教学试验箱,PC机;软件:PC机操作系统Windows 98(2000、XP)+ADT IDE开发环境基础知识参照教学实验教程P73-79实验步骤1.参照模板工程interrupt新建一个工程,并修改工程设置。
2.加入如下文件到工程中:2400lib.c; 2440init.s; 2440slib.s interrupt.c。
3.参照基础知识编写中断程序和主程序。
4.在中断服务函数中添加代码实现如下功能:每触发一次中断,二极管进行若干次闪烁。
5.参考模板工程interrupt对工程进行设置,然后编译6.下载斌运行程序,按下外部中断键,实现实验效果。
实验报告要求简述中断处理的步骤有哪些?说明每一步的主要工作。
main.c代码/* 包含文件*/#include "def.h"#include "2410lib.h"#include "option.h"#include "2410addr.h"#include "interrupt.h"#define U8 unsigned char/* functions */void eint3_isr(void) __attribute__ ((interrupt("IRQ")));;void delay();/* variables */int dither_count3 = 0;/****************************************************************** *********** // Function name : Main// Description : JXARM9-2410 中断实验主程序// 完成功能:// 外部中断按键引发中断// Return type : void// Argument : void******************************************************************* **********/ void Main(void){/* 中断初始化*/Isr_Init();/* 初始化端口*/Port_Init();/* 请求中断*/Irq_Request(IRQ_EINT3, eint3_isr);/* 使能中断*/Irq_Enable(IRQ_EINT3);dither_count3 = 0;while(1){delay();dither_count3++;}}/****************************************************************** *********** // Function name : eint3_isr// Description : EINT3中断处理程序// Return type : int// Argument : void******************************************************************* **********/ void eint3_isr(void){Irq_Clear(IRQ_EINT3); /*清中断*/if(dither_count3 > 5) //去抖动{dither_count3 = 0; //将去抖动计数归零int i,j;for(j=0;j<10;j++) //实现二极管循环闪烁10次{i=0xAA; //0xAA=10101010对应1的二极管点亮*((U8*) 0x20005000) = i;//将数值送二极管控制地质delay();i^=0xff; //异或0xFF,取反*((U8*) 0x20005000) = i;delay();}}} //循环够10次,跳出中断函数返回主程序void delay(){int index = 0;for ( index = 0 ; index < 10000; index++); }。
北理工嵌入式系统实验报告

嵌入式系统实验报告目录实验二 (1)实验三 (4)实验四 (7)实验六 (17)填充三角形实验 (24)实验二基于ARM的汇编语言程序设计简介一、实验目的1. 了解ARM 汇编语言的基本框架,学会使用ARM 的汇编语言编程二、实验内容1. 用汇编语言编写一个简单的应用程序三、实验设备1. EL-ARM-830 教学实验箱,PentiumII 以上的PC 机,仿真调试电缆,串口电缆。
2. PC 操作系统WIN98 或WIN2000 或WINXP,ADS1.2 集成开发环境,仿真调试驱动程序四、汇编语言简介1. ARM汇编的一些简要的书写规范ARM 汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。
ARM 汇编对标识符的大小写敏感,书写标号及指令时字母大小写要一致。
在ARM 汇编中,ARM 指令、伪指令、寄存器名等可以全部大写或者全部小写,但不要大小写混合使用。
注释使用“;”号,注释的内容由“;”号起到此行结束,注释可以在一行的顶格书写。
详细的汇编语句及规范请参照ARM汇编的相关书籍、文档,也可参照我们提供的文档。
2. ARM汇编语言程序的基本结构在ARM 汇编语言程序中,是以程序段为单位来组织代码。
段是相对独立的指令或数据序列,具有特定的名称。
段可以分为代码段的和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。
一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。
可执行映像文件通常由以下几部分构成:◆一个或多个代码段,代码段为只读属性。
◆零个或多个包含初始化数据的数据段,数据段的属性为可读写。
◆零个或多个不包含初始化数据的数据段,数据段的属性为可读写。
链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位EL - ARM - 830 实验指导书39置。
源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定相同。
sc按键驱动完整版

/ 2410 中断按键驱动基于s3c2410的16个按键驱动;采用中断的方式;实现了阻塞和非阻塞;并用定时器进行了消抖处理消抖;也实现的异步通知;POLL机制;每个源文件我都加了比较详细的注释..各位刚刚学习ARM/Linux 驱动的同学可以参考../// button_irq_driver .c 驱动源文件// button_irq_test.c 应用程序---按键测试open可实现阻塞和非阻塞// button_poll_test.c 应用程序---poll机制按键测试// button_fasync.c 应用程序---异步通知方式按键测试/ button_irq_driver .c /include<linux/module.h>include<linux/init.h>include<linux/fs.h>include<linux/device.h>include<linux/cdev.h>include<asm/uaccess.h>include<linux/io.h>include<linux/interrupt.h>include<asm/arch/regs-gpio.h>include<linux/poll.h>static unsigned int buttons_major = 0;//本地结构体;表示一个按键struct fsbuttons_cdev{struct cdev buttons_cdev; //按键设备结构体struct class buttons_class;//所属类unsigned int key_buttons; //按键管脚电1 /0wait_queue_head_t buttons_wq;struct timer_list button_timer;};static struct fsbuttons_cdev fs_buttons ;//构建一个结构体;用来描述中断管脚struct fspin{int irq;int pin;char name;int num;int row_input;int row_output;int int_put;int key_val;};static struct fspin fspin_desc4={{IRQ_EINT0; S3C2410_GPF0; "row0"; 0;S3C2410_GPF0_INP; S3C2410_GPF0_OUTP;S3C2410_GPF0_EINT0};{IRQ_EINT2; S3C2410_GPF2; "row1"; 1;S3C2410_GPF2_INP; S3C2410_GPF2_OUTP;S3C2410_GPF2_EINT2};{IRQ_EINT11; S3C2410_GPG3; "row2"; 2;S3C2410_GPG3_INP; S3C2410_GPG3_OUTP;S3C2410_GPG3_EINT11};{IRQ_EINT19; S3C2410_GPG11; "row3"; 3;S3C2410_GPG11_INP; S3C2410_GPG11_OUTP;S3C2410_GPG11_EINT19};};struct pin_col {int pin;int col_input;int col_output;};static struct pin_col col_line4 = {{S3C2410_GPE11; S3C2410_GPE11_INP; S3C2410_GPE11_OUTP};{S3C2410_GPG6; S3C2410_GPG6_INP; S3C2410_GPG6_OUTP};{S3C2410_GPE13; S3C2410_GPE13_INP; S3C2410_GPE13_OUTP};{S3C2410_GPG2; S3C2410_GPG2_INP; S3C2410_GPG2_OUTP}; };static int key_comfirm44={{10;11;12;16};{7;8;9;15};{4;5;6;14};{1;2;3;13};};/构建异步通知注册函数用到的结构体/struct fasync_struct fsbuttons_fasync;struct fspin cur_pin;static void set_col_outputvoid{int i;fori = 0;i<4;i++{s3c2410_gpio_cfgpincol_linei.pin;col_linei.col_output;s3c2410_gpio_setpincol_linei.pin;0;}}static void set_col_inputvoid{int i;fori = 0;i<4;i++{s3c2410_gpio_cfgpincol_linei.pin;col_linei.col_input;s3c2410_gpio_pullupcol_linei.pin; 0;//上拉}}//void functionunsigned long;static irqreturn_t button_timer_fununsigned long data{int i;unsigned int val_sec;int row;int col =-1;ifcur_pinreturn IRQ_NONE;val_sec = s3c2410_gpio_getpincur_pin->pin;ifval_sec = cur_pin->key_valreturn IRQ_NONE;row = cur_pin->num;/将发生中断的引脚配置为输出低电平/s3c2410_gpio_cfgpincur_pin->pin; cur_pin->row_output;s3c2410_gpio_setpincur_pin->pin; 0;/将kscan0-kscan3设为输入并拉高/set_col_input;/ 轮询列线;看哪个管脚为0;为0的那列保存起来/fori = 0;i<4;i++{ifs3c2410_gpio_getpincol_linei.pin == 0col = i;}/根据列线与行线保存键值/fs_buttons->key_buttons= key_comfirmrowcol;/恢复//将列线恢复为输出;并且输出为0/set_col_output;/将产生中断的管脚;再次恢复为中断功能/s3c2410_gpio_cfgpincur_pin->pin;cur_pin->int_put;/唤醒休眠的进程/wake_up_interruptible&fs_buttons->buttons_wq;/异步通知;发信号/kill_fasync&fsbuttons_fasync; SIGIO; POLLIN;return IRQ_HANDLED;}//typedef int irqreturn_t;//define IRQ_NONE 0 //处理失败//define IRQ_HANDLED 1 //处理成功//define IRQ_RETVALx x = 0 //无效的static irqreturn_t buttons_irq_handler_funint irq; void dev_id{cur_pin = struct fspin dev_id;/获取管脚状态/cur_pin->key_val= s3c2410_gpio_getpincur_pin->pin;/有键按键按下/ifcur_pin->key_val== 0/重载定时器/mod_timer&fs_buttons->button_timer; jiffies +5;return IRQ_HANDLED ;}static int buttons_openstruct inode inode; struct file file{int i ;int ret = -1;/初始化设备//设置 kscan0 引脚为输出..输出为0/set_col_output;/注册中断 ;下降沿触发;中断名;中断id/fori =0 ;i<4;i++ret = request_irqfspin_desci.irq;buttons_irq_handler_fun; IRQF_TRIGGER_FALLING; fspin_; &fspin_desci;/初始化定时器/init_timer&fs_buttons->button_timer;fs_buttons->button_timer.expires = jiffies +5;fs_buttons->button_timer.function =voidbutton_timer_fun;/加载定时器/add_timer&fs_buttons->button_timer;/初始化等待队列头/init_waitqueue_head&fs_buttons->buttons_wq;return 0;}static ssize_t buttons_readstruct file filp; char __user buf; size_t count; loff_t opps{int ret;/1.如果没有按键;而且应用程序是以非阻塞方式打开;就直接返回/iffs_buttons->key_buttons == 0 && filp->f_flags &O_NONBLOCKreturn 0;/1.如果没有键值key_buttons = 0 ;则休眠/wait_event_interruptiblefs_buttons->buttons_wq;fs_buttons->key_buttons;/2.如果有键值;将键值返回用户空间//如果拷贝成功则返回0;否则返回剩下的没有拷贝完的字节数/ret = copy_to_userbuf; &fs_buttons->key_buttons; count;fs_buttons->key_buttons = 0; //键值清0return 1;}static ssize_t buttons_writestruct file file; const char __user buf; size_t count; loff_t opps{}/异步通知/int buttons_fasyncint fd; struct file file ; int on{int error = 0;/想办法将file中的某些参数拿出来;实际上就是在设置fsbuttons_fasync结构体/error = fasync_helperfd; file; on; &fsbuttons_fasync;return error;}static unsigned int buttons_pollstruct file file; struct poll_table_struct wait{int mask = 0;/1.将进程挂入等待队列;但是并不休眠/poll_waitfile; &fs_buttons->buttons_wq; wait;/2.查看是否有事件/iffs_buttons->key_buttonsmask |= POLLIN;return mask;}int buttons_closestruct inode inode; struct file file{int i;fori = 0;i<4;i++free_irqfspin_desci.irq; &fspin_desci;}struct file_operations buttons_fops={.owner =THIS_MODULE;.open =buttons_open;.read =buttons_read;.write =buttons_write;.poll =buttons_poll;.release =buttons_close;.fasync =buttons_fasync;};/构建和初始化fsbuttons_cdev结构体/static void setup_fsbuttons_cdevvoid{/给cdev结构体分配空间/fs_buttons->buttons_cdev = cdev_alloc;/初始化/cdev_initfs_buttons->buttons_cdev; &buttons_fops;/加载cdev/cdev_addfs_buttons->buttons_cdev; MKDEVbuttons_major;0; 1; }static int __init buttons_initvoid{int devno;/申请设备号;注册/ifbuttons_major{/静态方式/devno = MKDEVbuttons_major;0;register_chrdev_regiondevno; 1; "buttons_driver";}else{/动态方式/alloc_chrdev_region&devno; 0; 1; "buttons_driver";buttons_major = MAJORdevno;}/2.分配空间;GFP_KERNEL:如果分配空间不成功;则会休眠/fs_buttons =kmallocsizeoffs_buttons; GFP_KERNEL;/构建cdev/setup_fsbuttons_cdev;/创建设备文件/fs_buttons->buttons_class =class_createTHIS_MODULE;"buttons";class_device_createfs_buttons->buttons_class; NULL; MKDEVbuttons_major;0; NULL; "buttons";return 0;}static void __exit buttons_exitvoid{unregister_chrdev_regionMKDEVbuttons_major;0; 1;kfreefs_buttons;cdev_delfs_buttons->buttons_cdev;class_device_destroyfs_buttons->buttons_class; MKDEVbuttons_major;0;class_destroyfs_buttons->buttons_class;}module_initbuttons_init;module_exitbuttons_exit;MODULE_LICENSE"GPL";/ button_irq_test.c /include<stdio.h>include<string.h>include <sys/types.h>include <sys/stat.h>include <fcntl.h>int mainvoid{int fd = -1;int val = -1;int ret = -1;// fd = open"/dev/buttons";O_RDWR|O_NONBLOCK;fd = open"/dev/buttons";O_RDWR;iffd < 0{perror"open";exit-1;}while1{ret = readfd;&val;4;ifret < 0{perror"read";exit-1;}printf"val = %d\n";val;}return 0;}/ button_poll_test.c /include<stdio.h>include<string.h>include <sys/types.h>include <sys/stat.h>include <fcntl.h>include<poll.h>int mainvoid{int fd = -1;int val = -1;int ret = -1;struct pollfd poll_fd1;// fd = open"/dev/buttons";O_RDWR|O_NONBLOCK;fd = open"/dev/buttons";O_RDWR;iffd < 0{perror"open";exit-1;}poll_fd0.fd = fd;poll_fd0.events = POLLIN;while1{ret =pollpoll_fd;1;5000;ifret>0{readpoll_fd0.fd;&val;4;printf"val =%d\n";val;}else ifret ==0{printf"timeout\n";}else{printf"error\n";}}return 0;}/ button_fasync.c /include <stdio.h>include <string.h>include <sys/types.h>include <sys/stat.h>include <fcntl.h>include <poll.h>include <unistd.h>include <fcntl.h>include <signal.h>int fd;/1.实现信号处理函数/void signal_functionint signum{unsigned int val;static int cnt = 0;printf"get singal %d; cnt = %d\n"; signum; cnt++;readfd;&val;4;printf"val =%d\n";val;}int mainint argc; charargv{int flags;fd =open"/dev/buttons";O_RDWR;iffd<0{printf"cannot open /dev/buttons\n";return -1;}/2.将信号与信号处理函数绑定/signalSIGIO; signal_function;/3.设置信号的拥有者为本进程/fcntlfd;F_SETOWN;getpid; //filp->f_owner.pid =get_pidpid;/4.设置为异步通知的模式/flags |=FASYNC;fcntlfd;F_SETFL;flags; //调用到驱动中的fasync功能函数while1{/做自己的事情/sleep3;}return 0;}。
S3C2410中断处理

S3C2410中断处理在介绍2410的中断处理之前,我们不得不先看看先把ARM的异常向量表(Exception Vectors),下面对异常向量表(Exception Vectors),做一个简单的介绍:ARM的异常向量表一般存放在0x00000000处,ARM920T能处理有7个异常,他们分别是:Reset(复位),Undefined instruction,Software Interrupt,Abort 舍弃(prefetch),Abort (data),IRQ,FIQ下面是系统源码片段:上面这部分片段一般出现在一个名叫“head.s”的汇编文件里,“b Handle_Reset”这条语句就是系统上电之后运行的第一条语句。
因为上电后CPU会从SDRAM的0x00000000处取第一条指令并执行。
上所示会放在0x00000000地址处,以后每当系统有异常出现,则CPU会根据异常号,从内存0x00000000地址处开始查中断向量表并做相应的处理,比如系统触发了一个IRQ异常,IRQ为6号异常,则CPU将把PC指向0x00000000地址处运行,调用中断服务程序。
S3C2410芯片可以接收56个中断源,产生32个中断请求。
这些中断源来自两部分:内部外设,如DMA控制器,UA RT等和外部引脚线。
A RM920T具有两种类型的中断模式:FIQ和IRQ,通过判定优先级产生IRQ或FIQ中断。
如果在ARM920T的CUP中的PSR(程序状态寄存器)的控制位F位置1,则CPU从中断控制器中不接受FIQ中断,如果在A RM920T的CUP中的PSR (程序状态寄存器)的控制位I位置1,则CPU从中断控制器中不接受IRQ中断,因此中断控制器通过清除F-bit位或I-bit位产生中断。
S3C2410的中断异常处理模块有以下寄存器构成:∙ SRCPND,∙INTMODE,∙INTMSK,∙PRIORITY,∙INTPND,∙INTOFFSET,∙SUBSRCPND,∙INTSUBMSK。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图6.2
异常响应流程图
中断向量表的加载(两级)
•
第二级(用于处理IRQ中断):
在启动代码中,利用中断偏移寄存器进行中断地址分派
ISRIRQ sub sp,sp,#4 ;reserved for pc
stmfd sp!,{r8-r9}
ldr
ldr ldr
r9,=intoffset
r9,[r9] r8,=handlerint0
断,通过FIQ ( 快速中断请求)或IRQ(通用中断请求)向 CPU 内核发出中断请求。
6. 2 S3C2410A的中断结构
6.2.1 S3C2410的中断源
S3C2410可以处理多达 56个中断源的中断请求。这些中断源可 以是来自片内外设的的中断,比如DMA、UART和I2C等;也可以来 自处理器的外部中断输入引脚。
外部中断源的共享及子中断
UART1收发错误中断,INT_TXD1 UART1发送中断,
INT_ERR1
INT_RXD1
INT_ERR0 INT_RXD0
UART1接收中断;
UART0收发错误中断,INT_TXD0 UART0接收中断。 UART0发送中断,
EINT4~EINT7 通过“或”的形式共享,提供一个中断源送至中 断控制器;
#define pISR_NOTUSED6 (*(unsigned *)(ISRSTARTADDR+0x38))
#define pISR_BAT_FLT #define pISR_TICK (*(unsigned *)(ISRSTARTADDR+0x3c)) (*(unsigned *)(ISRSTARTADDR+0x40))
中断控制器;
•
EINT8~EINT23:通过“或”的形式共享,提供一个中断源送至 中断控制器
•
INT_UART0 ( 3 个), INT_UART1 ( 3 个) ,INT_UART2 ( 3 个):
各通过“或”的形式提供一个中断源送至中断控制器;
•
ADC和触摸屏:共用一个中断控制器
外部中断源的共享及子中断
以上中断源即为子中断 这样总共有32个(见表6.2)中断源提供给中断控制器(包括2
个保留引脚)。
在56个中断源中,如下子中断源通过分支(子中断)中断控制
器来申请使用中断: INT_ADC INT_ERR2 INT_RXD2 A/D转换中断和INT_TC 触摸屏中断; UART2收发错误中断,INT_TXD2 UART2接收中断; UART2发送中断,
0x7F 0x00000000 0x00000000 0x00000000 0x7FF
地址 0x0000,0000 0x0000,0004 表6.1 ARM的异常向量 异常 进入模式 复位 未定义指令 管理模式 未定义模式 优先级(6最低) 1 6
0x0000,0008
0x0000,000C 0x0000,0010 0x0000,0014 0x0000,0018
软件中断
中止(预取指令) 中止(数据) 保留 IRQ
ARM的异常向量(见表6.1)
表6.1 ARM的异常向量 地址 0x0000,0000 0x0000,0004 0x0000,0008 0x0000,000C 0x0000,0010 0x0000,0014 0x0000,0018 异常 复位 未定义指令 软件中断 中止(预取指令) 中止(数据) 保留 IRQ 进入模式 管理模式 未定义模式 管理模式 中止模式 中止模式 保留 IRQ 优先级(6最低) 1 6 6 5 2 未使用 4
b
b
HandlerIRQ
HandlerFIQ
;handler for IRQ interrupt
;handler for FIQ interrupt
异常响应流程
由于向量表的限制,只能有一条指令 B完成32MB范围内的跳转
,并不能保证所有的异常处理函数都位于32MB范围内。为了扩展 跳转范围,需要二次跳转才能把异常处理函数的地址传送给PC。 异常处理调用关系如图6.2所示。
• • • •
ARM920T内核有两个中断IRQ中断和FIQ中断 IRQ是普通中断用于处理一般事件 FIQ是快速中断,一般用于大批量数据传送等情况 FIQ的优先级别高于IRQ S3C2410中断逻辑 中断控制逻辑(interrupt controller logic)的任务是在片
内外围和外部中断源组成的多重中断发生时,选择其中一个中
表6.2 S3C2410A56个中断源
S3C2410A的56个中断源
表6.2(续)S3C2410A56个中断源
6.2.2 外部中断源的共享及子中断
由于中断请求引脚数目有限,不能保证每个中断源对应一个中 断请求信号,因此采用共享技术。
•
EINT4~EINT7 :通过“或”的形式共享,提供一个中断源送至
;中断偏移寄存器
;中断向量表首地址
add
ldr str
r8,r8,r9,lsl #2
r8,[r8] r8,[sp,#8]
ldmfd sp!,{r8-r9,pc}
根据中断服务号,转去执行相应的中断处理程序段。
中断向量表的加载(两级)
#define pISR_EINT0 (*(unsigned *)(ISRSTARTADDR+0x20)) #define pISR_EINT1 (*(unsigned *)(ISRSTARTADDR+0x24)) #define pISR_EINT2 (*(unsigned *)(ISRSTARTADDR+0x28)) #define pISR_EINT3 (*(unsigned *)(ISRSTARTADDR+0x2c)) #define pISR_EINT4_7 (*(unsigned *)(ISRSTARTADDR+0x30)) #define pISR_EINT8_23 (*(unsigned *)(ISRSTARTADDR+0x34))
ARM的中断步骤:
④ 多个中断请求处理。在ARM系统中,可以存在多个中断请求源 ,比如串口中断、AD中断、外部中断、定时器中断及DMA中断
等,所以可能出现多个中断源同时请求中断的情况。为了更
好地区分各个中断源,通常为这些中断定义不同的优先级别 ,并为每一个中断设置一个中断标志位。当发生中断时,通
#define pISR_WDT
#define pISR_TIMER0 #define pISR_TIMER1 …………………………………………….
(*(unsigned *)(ISRSTARTADDR+0x44))
(*(unsigned *)(ISRSTARTADDR+0x48)) (*(unsigned *)(ISRSTARTADDR+0x4c))
过判断中断优先级以及访问中断标志位的状态来识别哪一个
中断发生了,进而调用相应的函数进行中断处理。 ⑤ 中断返回,恢复现场。当完成中断服务子程序后,将 SPSR 中 保存的程序运行状态恢复到CPSR中,R14中保存的被中断程序 的地址恢复到PC中,继续执行被中断的程序。
6. 2 S3C2410A的中断结构
第6章
中断
本章提要
1. 中断
6.1 S3C2410A的中断处理
6.1.1 ARM系统的中断类型
在ARM系统中,支持复位、未定义指令、软中断、预取中止、 数据中止、IRQ和FIQ 7种异常,每种异常对应于不同的处理器模 式,有对应的异常向量(固定的存储器地址)。
6.1.1 ARM系统的中断类型
INT_DMA0~INT_DMA3(4
个
)
、
INT_SDI(1
个
)
、
INT_SPI0~INT_SPI1(2 个 ) 、 INT_USBD(1 个 ) 、 INT_USBH(1 个 ) 、INT_IIC(1个)、INT_RTC(1个)、INT_ADC(2个),共56个。
S3C2410A的56个中断源
6.2.1 S3C2410的中断源
•
S3C2410的56个中断源,(见表6.2)他们是:
EINT0~EINT23(24 个 ) 、 nBATT_FLT(1 个 ) 、 INT_TICK(1 个 ) 、 INT_WDT(1 个 ) 、 INT_TIMER0~INT_TIMER4(5 个 ) 、 INT_UART0~INT_UART2( 各 3 个 , 共 9 个 ) 、 INT_LCD(2 个 ) 、
中断优先逻辑见图6.1
S3C2410A的中 断中断优先逻辑
•
中断系统有 6 个分仲裁器
和1个总仲裁器
•
每一个仲裁器可以处理 6 路中断
图6.1
S3C2410A中断优先逻辑
6.2.4 中断向量表的加载(两级)
•
第一级(上电复位时):
位于启动代码(裸机)、head.s(bootloader)的起始位置
EINT8~EINT23通过“或”的形式共享,提供一个中断源送至中
断控制器
6.2.3 中断优先逻辑
中断产生后根据中断屏蔽、中断优先级、中断模式等寄存器 决定中断执行顺序,同一时刻只用一种中断处于执行状态。
通过中断优先逻辑仲裁各中断源的优先级。
S3C2410A 的中断优先逻辑采用两级管理,由 6 个一级仲裁器
6.3 S3C2410A的中断控制
1. 程序状态寄存器的F位和I位
•
如果CPSR (程序状态寄存器)的F位被设置为1,那么CPU将不 接受来自中断控制器的FIQ(快速中断请求);
•
如果CPSR程序状态寄存器的 I位被设置为1,那么CPU将不接受