s3c2410a第十四章-中断控制器

s3c2410a第十四章-中断控制器
s3c2410a第十四章-中断控制器

第十四章 中断控制器

概述

S3C2410A中断控制器可以接受来自56个中断源的请求。这些中断源是有内部外设(DMA控制器、UART、IIC 以及其他外设)供给的。在这些中断源中,UARTn和EINTn中断是经过或之后送入中断控制器的。

当接收到来自内部外设和外部中断引脚的多路中断请求时,中断控制在仲裁程序之后请求ARM920T核心的FIQ或IRQ中断。

仲裁程序依赖于硬件优先逻辑,其结果被写入中断未决寄存器,让用户知道在众多的中断源中那个中断发生。

图14-1 中断处理过程图

中断控制器操作

程序状态寄存器(PSR)的F位和I位

如果在ARM920T CPU内的PSR的F位设置为1,则CPU不接收来自中断控制器的快速中断请求(FIQ)。同样地,如果PSR的I位设置为1,则CPU不接收来自中断控制器的中断请求(IRQ)。所以通过清除PSR的F 位和I位以及设置INTMSK相应位为0,,中断控制器才能接收中断。

中断模式

ARM920T有两种中断模式:FIQ或IRQ。每个中断源决定那种模式用于中断请求。

中断未决寄存器

S3C2410A有2个中断未决寄存器:源未决寄存器(SRCPND)和中断未决寄存器(INTPND)。这些未决寄存器表明是否中断请求正在等待处理(未决的)。当中断源请求中断服务,SRCPND寄存器相应位设置为1,且同时在仲裁程序之后,INTPDN单独的一个位也被自动置位(相应位也被置1)。如果中断中断被屏蔽,SRCPND 寄存器相应位置1,但这不能引起INTPND寄存器中位发生改变。当INTPND寄存器中一个未决位置1时,只要I标志和F标志为0,则中断服务例行程序就开始执行。SRCPND和INTPND寄存器可以进行读写,所以服务例行程序必须先通过向SRCPND寄存器相应位写入1来清除未决条件,然后用同样的方法来清除INTPND的未决条件(先向SRCPDN相应位写入1,然后向INTPND相应位写入1,以清除中断标志)。

中断屏蔽寄存器

这些寄存器表示一个中断如果相应屏蔽位设为1时被禁用。如果INTMSK的中断屏蔽位为0,则中断将能常工作。如果相应屏蔽位为1且中断发生,则源未决位被置位。

中断源

中断控制器支持56个中断源(如下表所示)。

源 描述 仲裁组

INT_ADC ADC EOC 和触摸中断(INT_ADC/INT_TC) ARB5

INT_RTC RTC报警中断 ARB5

INT_SPI1 SPI1中断 ARB5

INT_UART0 UART0中断(ERR,RXD和TXD) ARB5

INT_IIC IIC中断 ARB4

INT_USBH USB主机中断 ARB4

INT_USBD USB设备中断 ARB4

保留 保留 ARB4

INT_UART1 UART1中断(ERR,RXD和TXD) ARB4

INT_SPI0 SPI0中断 ARB4

INT_SDI SDI中断 ARB3

INT_DMA3 DMA通道3中断 ARB3

INT_DMA2 DMA通道2中断 ARB3

INT_DMA1 DMA通道1中断 ARB3

INT_DMA0 DMA通道0中断 ARB3

INT_LCD LCD中断(INT_FrSyn和INT_FiCnt) ARB3

INT_UART2 UART2中断(ERR,RXD和TXD) ARB2

INT_TIMER4 定时器4中断 ARB2

INT_TIMER3 定时器3中断 ARB2

INT_TIMER2 定时器2中断 ARB2

INT_TIMER1 定时器1中断 ARB2

INT_TIMER0 定时器0中断 ARB2

INT_WDT 看门狗定时器中断 ARB1

INT_TICK RTC定时器滴答中断 ARB1 nBATT_FLT 电池故障中断 ARB1

保留 保留 ARB1

EINT8_23 外部中断8 – 23 ARB1

EINT4_7 外部中断4 – 7 ARB1

EINT3 外部中断3 ARB0

EINT2 外部中断2 ARB0

EINT1 外部中断1 ARB0

EINT0 外部中断0 ARB0

中断优先级产生模块

32个中断请求优先级逻辑是有七个轮寻仲裁器组成:6个一级仲裁器和一个二级仲裁器(如图14-2所示)。

图14-2 优先级产生模块

中断优先级

基于仲裁模式控制(ARB_MODE)一个位和选择控制信号(ARB_SEL)的两个位,每个仲裁能处理6个中断请求。如下所示:

- 如果ARB_SEL位为00,则优先级顺序为REQ0,REQ1,REQ2,REQ3,REQ4,REQ5。

- 如果ARB_SEL位为01,则优先级顺序为REQ0,REQ2,REQ3,REQ4,REQ1,REQ5。

- 如果ARB_SEL位为10,则优先级顺序为REQ0,REQ3,REQ4,REQ1,REQ2,REQ5。

- 如果ARB_SEL位为11,则优先级顺序为REQ0,REQ4,REQ1,REQ2,REQ3,REQ5。

注意:REQ0的优先级总是为最高优先级,REQ5总是为最低优先级。另外,通过改变ARB_SEL位,我们可以轮换REQ1到REQ4的优先级。

此时,如果ARB_MODE位为0,则ARB_SEL位不能自动改变,使得仲裁器在固定优先级模式下进行操作(注意即使在这种模式下,我们可以通过手动改变ARB_BIT位来重新配置仲裁器)。另一方面,如果ARB_MODE为1,ARB_SEL位按轮寻方式进行改变。举例来说,如果REQ1被使用,ARB_SEL位被自动改变为01,以便使REQ1为低优先级。ARB_SEL变化的详细规则如下所示:

- 如果REQ0和REQ5被使用,ARB_SEL位根本不改变。

- 如果REQ1被使用,ARB_SEL位变为01。

- 如果REQ2被使用,ARB_SEL位变为10。

- 如果REQ3被使用,ARB_SEL位变为11。

- 如果REQ4被使用,ARB_SEL位变为00。

中断控制专用寄存器

在中断控制器里有5个控制寄存器:源未决寄存器、中断模式寄存器、屏蔽寄存器、优先级寄存器和中断未决寄存器。

所有来自中断源的中断请求首先被登记到源未决寄存器中。根据中断模式寄存器,它们被分成2组:快速中断请求(FIQ)和中断请求(IRQ)。仲裁程序根据优先级寄存器来处理多路IRQ中断。

源未决寄存器(SRCPND)

SRCPND寄存器有32位组成,每个位与一个中断源相关联。如果中断源产生中断请求并等待中断被响应,则该中断源所对应的位置1。从而该寄存器可指出那个中断源正在等待中断被响应。注意SRCPND寄存器的每个位都由中断源自动设置的,它不考虑INTMASK寄存器的屏蔽位是否设置了屏蔽(跟屏蔽没有关系)。另外SRCPND寄存器不受中断控制器的优先级逻辑影响。

在一个指定的中断源的中断响应程序中,SRCPND寄存器的相应位必须清0,以便正确的获得来自同一中断源的中断请求。如果你没有清除该位就从ISR中返回,则中断控制器就会像获得另一个来自同一中断源的中断请求一样进行操作(也就是继续响应该中断操作,因为中断标志未被清除)。换句话说,如果SRCPND寄存器一个指定的位被置1,它总是认为一个有效的中断请求正在等待响应。

相应位的清除时间依赖于用户需求。如果你想接收另一个来自于同一个中断源的有效请求,你首先应该清除相应位,然后再实现中断过程。

你可以通过向SRCPND寄存器中写入数据来清除该寄存器中指定位。它只能向SRCPND寄存器在数据上相对应的数位位置设1来清0。而向在数据上相对应的数位位置设0则保持原值不变。

寄存器 地址 R/W 描述 复位值 SRCPND 0x4A000000 R/W 显示中断请求的状态。

0x00000000

0 = 中断未被请求。

1 = 中断源发出中断请求。

SRCPND 位 描述 初始值 INT_ADC [31] 0 = 未请求 ,1 = 请求 0

INT_RTC [30] 0 = 未请求 ,1 = 请求 0

INT_SPI1 [29] 0 = 未请求 ,1 = 请求 0

INT_UART0 [28] 0 = 未请求 ,1 = 请求 0

INT_IIC [27] 0 = 未请求 ,1 = 请求 0

INT_USBH [26] 0 = 未请求 ,1 = 请求 0

INT_USBD [25] 0 = 未请求 ,1 = 请求 0

保留 [24] 保留 0

INT_UART1 [23] 0 = 未请求 ,1 = 请求 0

INT_SPI0 [22] 0 = 未请求 ,1 = 请求 0

INT_SDI [21] 0 = 未请求 ,1 = 请求 0

INT_DMA3 [20] 0 = 未请求 ,1 = 请求 0

INT_DMA2 [19] 0 = 未请求 ,1 = 请求 0

INT_DMA1 [18] 0 = 未请求 ,1 = 请求 0

INT_DMA0 [17] 0 = 未请求 ,1 = 请求 0

INT_LCD [16] 0 = 未请求 ,1 = 请求 0

INT_UART2 [15] 0 = 未请求 ,1 = 请求 0

INT_TIMER4 [14] 0 = 未请求 ,1 = 请求 0

INT_TIMER3 [13] 0 = 未请求 ,1 = 请求 0

INT_TIMER2 [12] 0 = 未请求 ,1 = 请求 0

INT_TIMER1 [11] 0 = 未请求 ,1 = 请求 0

INT_TIMER0 [10] 0 = 未请求 ,1 = 请求 0

INT_WDT [9] 0 = 未请求 ,1 = 请求 0

INT_TICK [8] 0 = 未请求 ,1 = 请求 0 nBATT_FLT [7] 0 = 未请求 ,1 = 请求 0

保留 [6] 保留 0

EINT8_23 [5] 0 = 未请求 ,1 = 请求 0

EINT4_7 [4] 0 = 未请求 ,1 = 请求 0

EINT3 [3] 0 = 未请求 ,1 = 请求 0

EINT2 [2] 0 = 未请求 ,1 = 请求 0

EINT1 [1] 0 = 未请求 ,1 = 请求 0

EINT0 [0] 0 = 未请求 ,1 = 请求 0

中断模式寄存器(INTMOD)

该寄存器由32个各自与一个中断源联系的位组成。如果指定位为1,则相应中断用FIQ(快速中断)模式处理。否则就用IRQ(标准中断)模式处理。

注意在中断控制器里FIQ模式下,仅仅一个中断源能被响应(仅当非常紧急的中断时,才有必要将该中断设为FIQ模式)。因此,INTMOD只有一个位能设为1。

寄存器 地址 R/W 描述 复位值

0x00000000 INTMOD 0x4A000004 R/W 中断模式寄存器。

0 = IRQ模式。

1 = FIQ模式。

注意:如果在INTMOD寄存器中将一个中断设置为FIQ模式,那么FIQ中断并不影响INTPND和INTOFFSET 寄存器。因此这2个寄存器只对IRQ模式中断源有效。

INTMOD 位 描述 初始值 INT_ADC [31] 0 = IRQ ,1 = FIQ 0

INT_RTC [30] 0 = IRQ ,1 = FIQ 0

INT_SPI1 [29] 0 = IRQ ,1 = FIQ 0

INT_UART0 [28] 0 = IRQ ,1 = FIQ 0

INT_IIC [27] 0 = IRQ ,1 = FIQ 0

INT_USBH [26] 0 = IRQ ,1 = FIQ 0

INT_USBD [25] 0 = IRQ ,1 = FIQ 0

保留 [24] 保留 0

INT_UART1 [23] 0 = IRQ ,1 = FIQ 0

INT_SPI0 [22] 0 = IRQ ,1 = FIQ 0

INT_SDI [21] 0 = IRQ ,1 = FIQ 0

INT_DMA3 [20] 0 = IRQ ,1 = FIQ 0

INT_DMA2 [19] 0 = IRQ ,1 = FIQ 0

INT_DMA1 [18] 0 = IRQ ,1 = FIQ 0

INT_DMA0 [17] 0 = IRQ ,1 = FIQ 0

INT_LCD [16] 0 = IRQ ,1 = FIQ 0

INT_UART2 [15] 0 = IRQ ,1 = FIQ 0

INT_TIMER4 [14] 0 = IRQ ,1 = FIQ 0

INT_TIMER3 [13] 0 = IRQ ,1 = FIQ 0

INT_TIMER2 [12] 0 = IRQ ,1 = FIQ 0

INT_TIMER1 [11] 0 = IRQ ,1 = FIQ 0

INT_TIMER0 [10] 0 = IRQ ,1 = FIQ 0

INT_WDT [9] 0 = IRQ ,1 = FIQ 0

INT_TICK [8] 0 = IRQ ,1 = FIQ 0 nBATT_FLT [7] 0 = IRQ ,1 = FIQ 0

保留 [6] 保留 0

EINT8_23 [5] 0 = IRQ ,1 = FIQ 0

EINT4_7 [4] 0 = IRQ ,1 = FIQ 0

EINT3 [3] 0 = IRQ ,1 = FIQ 0

EINT2 [2] 0 = IRQ ,1 = FIQ 0

EINT1 [1] 0 = IRQ ,1 = FIQ 0

EINT0 [0] 0 = IRQ ,1 = FIQ 0

中断屏蔽寄存器(INTMSK)

该寄存器由32个各自与一个中断源联系的位组成。如果一个指定位为1,则CPU不响应来自相应中断源的中断请求(注意即使在SRCPND寄存器相应位为1这样的情况下也是一样的)。如果屏蔽位为0,则中断请求被响应。

寄存器 地址 R/W 描述 复位值

0xFFFFFFFF INTMSK 0x4A000008 R/W 决定那个中断源被屏蔽。被屏蔽的中断源将不被响应。

0 = 中断响应可用。

1 = 中断响应被屏蔽。

INTMSK 位 描述 初始值 INT_ADC [31] 0 = 响应可用 ,1 = 被屏蔽 1

INT_RTC [30] 0 = 响应可用 ,1 = 被屏蔽 1

INT_SPI1 [29] 0 = 响应可用 ,1 = 被屏蔽 1

INT_UART0 [28] 0 = 响应可用 ,1 = 被屏蔽 1

INT_IIC [27] 0 = 响应可用 ,1 = 被屏蔽 1

INT_USBH [26] 0 = 响应可用 ,1 = 被屏蔽 1

INT_USBD [25] 0 = 响应可用 ,1 = 被屏蔽 1

保留 [24] 保留 1

INT_UART1 [23] 0 = 响应可用 ,1 = 被屏蔽 1

INT_SPI0 [22] 0 = 响应可用 ,1 = 被屏蔽 1

INT_SDI [21] 0 = 响应可用 ,1 = 被屏蔽 1

INT_DMA3 [20] 0 = 响应可用 ,1 = 被屏蔽 1 INT_DMA2 [19] 0 = 响应可用 ,1 = 被屏蔽 1 INT_DMA1 [18] 0 = 响应可用 ,1 = 被屏蔽 1 INT_DMA0 [17] 0 = 响应可用 ,1 = 被屏蔽 1 INT_LCD [16] 0 = 响应可用 ,1 = 被屏蔽 1 INT_UART2 [15] 0 = 响应可用 ,1 = 被屏蔽 1 INT_TIMER4 [14] 0 = 响应可用 ,1 = 被屏蔽 1 INT_TIMER3 [13] 0 = 响应可用 ,1 = 被屏蔽 1 INT_TIMER2 [12] 0 = 响应可用 ,1 = 被屏蔽 1 INT_TIMER1 [11] 0 = 响应可用 ,1 = 被屏蔽 1 INT_TIMER0 [10] 0 = 响应可用 ,1 = 被屏蔽 1 INT_WDT [9] 0 = 响应可用 ,1 = 被屏蔽 1 INT_TICK [8] 0 = 响应可用 ,1 = 被屏蔽 1 nBATT_FLT [7] 0 = 响应可用 ,1 = 被屏蔽 1

保留 [6] 保留 1 EINT8_23 [5] 0 = 响应可用 ,1 = 被屏蔽 1 EINT4_7 [4] 0 = 响应可用 ,1 = 被屏蔽 1 EINT3 [3] 0 = 响应可用 ,1 = 被屏蔽 1 EINT2 [2] 0 = 响应可用 ,1 = 被屏蔽 1 EINT1 [1] 0 = 响应可用 ,1 = 被屏蔽 1 EINT0 [0] 0 = 响应可用 ,1 = 被屏蔽 1

优先级寄存器(PRIORITY)

寄存器 地址 R/W 描述 复位值 PRIORITY 0x4A00000C R/W IRQ优先级控制寄存器 0X7F

PRIORITY 位 描述 初始值

0 ARB_SEL6 [20:19] 仲裁器6组优先级顺序序列。

00 = REQ 0-1-2-3-4-5 01 = REQ 0-2-3-4-1-5

10 = REQ 0-3-4-1-2-5 11 = REQ 0-4-1-2-3-5

0 ARB_SEL5 [18:17] 仲裁器5组优先级顺序序列。

00 = REQ 1-2-3-4 01 = REQ 2-3-4-1

10 = REQ 3-4-1-2 11 = REQ 4-1-2-3

0 ARB_SEL4 [16:15] 仲裁器4组优先级顺序序列。

00 = REQ 0-1-2-3-4-5 01 = REQ 0-2-3-4-1-5

10 = REQ 0-3-4-1-2-5 11 = REQ 0-4-1-2-3-5

0 ARB_SEL3 [14:13] 仲裁器3组优先级顺序序列。

00 = REQ 0-1-2-3-4-5 01 = REQ 0-2-3-4-1-5

10 = REQ 0-3-4-1-2-5 11 = REQ 0-4-1-2-3-5

0 ARB_SEL2 [12:11] 仲裁器2组优先级顺序序列。

00 = REQ 0-1-2-3-4-5 01 = REQ 0-2-3-4-1-5

10 = REQ 0-3-4-1-2-5 11 = REQ 0-4-1-2-3-5

ARB_SEL1 [10:9] 仲裁器1组优先级顺序序列。 0

00 = REQ 0-1-2-3-4-5 01 = REQ 0-2-3-4-1-5

10 = REQ 0-3-4-1-2-5 11 = REQ 0-4-1-2-3-5

ARB_SEL0 [8:7] 仲裁器0组优先级顺序序列。

00 = REQ 1-2-3-4 01 = REQ 2-3-4-1

10 = REQ 3-4-1-2 11 = REQ 4-1-2-3

1

ARB_MODE6 [6] 仲裁器6组优先级轮换使能。

0 = 优先级不能轮换。

1 = 优先级轮换使能。

1

ARB_MODE5 [5] 仲裁器5组优先级轮换使能。

0 = 优先级不能轮换。

1 = 优先级轮换使能。

ARB_MODE4 [4] 仲裁器4组优先级轮换使能。

1

0 = 优先级不能轮换。

1 = 优先级轮换使能。

ARB_MODE3 [3] 仲裁器3组优先级轮换使能。

1

0 = 优先级不能轮换。

1 = 优先级轮换使能。

1

ARB_MODE2 [2] 仲裁器2组优先级轮换使能。

0 = 优先级不能轮换。

1 = 优先级轮换使能。

1

ARB_MODE1 [1] 仲裁器1组优先级轮换使能。

0 = 优先级不能轮换。

1 = 优先级轮换使能。

1

ARB_MODE0 [0] 仲裁器0组优先级轮换使能。

0 = 优先级不能轮换。

1 = 优先级轮换使能。

中断未决寄存器(INTPND)

中断未决寄存器中的32位中每个位显示相应的中断请求是否未被屏蔽并等待中断响应,并拥有最高的优先级。因为INTPND寄存器位于优先级逻辑之后,所以该寄存器中只能有一个位设置为1,而且中断请求产生一个IRQ给CPU。在IRQ中断响应程序中,你可以读取该寄存器的值来确定在32个源之中那个中断源被响应。

像SRCPND寄存器一样,该寄存器也必须在中断响应程序中清除SRCPND寄存器之后被清除。我们可以向INTPND寄存器写入数据来清除该寄存器中的指定位。它只能向INTPND寄存器在数据上相对应的数位位置设1来清0。而向在数据上相对应的数位位置设0则保持原值不变。

寄存器 地址 R/W 描述 复位值 INTPND 0x4A000010 R/W 确定中断请求状态。

0x00000000

0 = 中断未被请求。

1 = 中断源发出了中断请求。

注意:

1.如果FIQ模式的中断发生,由于INTPND寄存器只对于IRQ模式中断有效,故INTPND相应位并

不能打开。

2.在清除INTPND寄存器的注意事项:

INTPND寄存器通过写入”1”来清0。如果INTPND位为”1”,而写入一个“0”来清除,那么INTPND寄存器和INTOFFSET寄存器在某些情况下也许会变为一个不可预料的值。所以你决不能在

INTPND位为“1”时写入 “0”。一个清除INTPND寄存器的简便的方法是将INTPND寄存器的值写入INTPND寄存器本身(即使在我们的实例代码中,这种操作仍未被应用)。

INTPND 位 描述 初始值 INT_ADC [31] 0 = 未请求 ,1 = 请求 0

INT_RTC [30] 0 = 未请求 ,1 = 请求 0

INT_SPI1 [29] 0 = 未请求 ,1 = 请求 0

INT_UART0 [28] 0 = 未请求 ,1 = 请求 0

INT_IIC [27] 0 = 未请求 ,1 = 请求 0

INT_USBH [26] 0 = 未请求 ,1 = 请求 0

INT_USBD [25] 0 = 未请求 ,1 = 请求 0

保留 [24] 保留 0

INT_UART1 [23] 0 = 未请求 ,1 = 请求 0

INT_SPI0 [22] 0 = 未请求 ,1 = 请求 0

INT_SDI [21] 0 = 未请求 ,1 = 请求 0

INT_DMA3 [20] 0 = 未请求 ,1 = 请求 0

INT_DMA2 [19] 0 = 未请求 ,1 = 请求 0

INT_DMA1 [18] 0 = 未请求 ,1 = 请求 0

INT_DMA0 [17] 0 = 未请求 ,1 = 请求 0

INT_LCD [16] 0 = 未请求 ,1 = 请求 0

INT_UART2 [15] 0 = 未请求 ,1 = 请求 0

INT_TIMER4 [14] 0 = 未请求 ,1 = 请求 0

INT_TIMER3 [13] 0 = 未请求 ,1 = 请求 0

INT_TIMER2 [12] 0 = 未请求 ,1 = 请求 0

INT_TIMER1 [11] 0 = 未请求 ,1 = 请求 0

INT_TIMER0 [10] 0 = 未请求 ,1 = 请求 0

INT_WDT [9] 0 = 未请求 ,1 = 请求 0

INT_TICK [8] 0 = 未请求 ,1 = 请求 0 nBATT_FLT [7] 0 = 未请求 ,1 = 请求 0

保留 [6] 保留 0

EINT8_23 [5] 0 = 未请求 ,1 = 请求 0

EINT4_7 [4] 0 = 未请求 ,1 = 请求 0

EINT3 [3] 0 = 未请求 ,1 = 请求 0

EINT2 [2] 0 = 未请求 ,1 = 请求 0

EINT1 [1] 0 = 未请求 ,1 = 请求 0

EINT0 [0] 0 = 未请求 ,1 = 请求 0

中断偏移寄存器(INTOFFSET)

中断偏移寄存器的值可说明在INTPND寄存器中是哪一个IRQ模式的中断请求。

通过对SRCPND和INTPND清除,使得该寄存器被自动清除。

寄存器 地址 R/W 描述 复位值 INTOFFSET 0x4A000014 R/W 指出IRQ中断请求源 0x00000000

中断源 偏移值 中断源 偏移值

INT_ADC 31 INT_UART2 15

INT_RTC 30 INT_TIMER4 14

INT_SPI1 29 INT_TIMER3 13

INT_UART0 28 INT_TIMER2 12

INT_IIC 27 INT_TIMER1 11

INT_USBH 26 INT_TIMER0 10

INT_USBD 25 INT_WDT 9

保留 24 INT_TICK 8

INT_UART1 23 nBATT_FLT 7

INT_SPI0 22 保留 6

INT_SDI 21 EINT8_23 5

INT_DMA3 20 EINT4_7 4

INT_DMA2 19 EINT3 3

INT_DMA1 18 EINT2 2

INT_DMA0 17 EINT1 1

INT_LCD 16 EINT0 0

注意:因为INTOFFSET寄存器只对IRQ模式中断有效,所以FIQ模式中断不影响INTOFFSET寄存器。

辅助源未决寄存器(SUBSRCPND)

你可以通过向SUBSRCPND寄存器写入数据来清除该寄存器的指定位。它只能向SUBSRCPND寄存器在数据上相对应的数位位置设1来清0。而向在数据上相对应的数位位置设0则保持原值不变。

寄存器 地址 R/W 描述 复位值

0x00000000 SUBSRCPND 0x4A000018 R/W 确定中断请求状态。

0 = 中断未被请求。

1 = 中断源发出了中断请求。

SUBSRCPND 位 描述 初始值

保留 [31:11] 未使用 0

INT_ADC [10] 0 = 未请求 ,1 = 请求 0

INT_TC [9] 0 = 未请求 ,1 = 请求 0

INT_ERR2 [8] 0 = 未请求 ,1 = 请求 0

INT_TXD2 [7] 0 = 未请求 ,1 = 请求 0

INT_RXD2 [6] 0 = 未请求 ,1 = 请求 0

INT_ERR1 [5] 0 = 未请求 ,1 = 请求 0

INT_TXD1 [4] 0 = 未请求 ,1 = 请求 0

INT_RXD1 [3] 0 = 未请求 ,1 = 请求 0

INT_ERR0 [2] 0 = 未请求 ,1 = 请求 0

INT_TXD0 [1] 0 = 未请求 ,1 = 请求 0

INT_RXD0 [0] 0 = 未请求 ,1 = 请求 0

辅助中断屏蔽寄存器(INTSUBMSK)

该寄存器由11个各自与一个中断源联系的位组成。如果一个指定位为1,则CPU不响应来自相应中断源

的中断请求(注意即使在SUBSRCPND寄存器相应位为1这样的情况下也是一样的)。如果屏蔽位为0,则中断请求被响应。

寄存器 地址 R/W 描述 复位值

0x7FF INTSUBMSK 0x4A00001C R/W 决定那个中断源被屏蔽。被屏蔽的中断源将不被响应。

0 = 中断响应可用。

1 = 中断响应被屏蔽。

INTSUBMSK 位 描述 初始值

保留 [31:11] 未使用 0

INT_ADC [10] 0 = 响应可用 ,1 = 被屏蔽 1

INT_TC [9] 0 = 响应可用 ,1 = 被屏蔽 1

INT_ERR2 [8] 0 = 响应可用 ,1 = 被屏蔽 1

INT_TXD2 [7] 0 = 响应可用 ,1 = 被屏蔽 1

INT_RXD2 [6] 保留 1

INT_ERR1 [5] 0 = 响应可用 ,1 = 被屏蔽 1

INT_TXD1 [4] 0 = 响应可用 ,1 = 被屏蔽 1

INT_RXD1 [3] 0 = 响应可用 ,1 = 被屏蔽 1

INT_ERR0 [2] 0 = 响应可用 ,1 = 被屏蔽 1

INT_TXD0 [1] 0 = 响应可用 ,1 = 被屏蔽 1

INT_RXD0 [0] 0 = 响应可用 ,1 = 被屏蔽 1

8051单片机中断系统结构及中断控制原理

8051单片机中断系统结构及中断控制原理 当几个中断源同时向CPU请求中断时,按所发生的实时事件的轻重缓急排队,优先处理最紧急事件的中断请求,于是单片机规定每个中断源的优先级别。 当CPU正在处理一个中断请求,又发生另一个优先级比它高的中断请求,CPU暂时中止对前一中断处理,转而去处理优先级更高的中断请求,待处理完后,再继续执行原来的中断处理程序,这样的过程称为中断嵌套,这样的中断系统称为多级中断系统。 由于外界异步事件中断CPU正在执行的程序时随机的,CPU转向去执行中断服务程序时,除了硬件会自动把断电地址,即16位PC程序计数器的值压入堆栈之外,用户还得注意保护有关工作寄存器,累加器,标志位等信息,这个过程通常称为保护现场。以便在完成中断服务程序后,恢复原工作寄存器,累加器,标志位等的内容,这个过程称恢复现场;最后执行中断返回指令,自动弹出断电到PC,返回主程序,继续执行被中断的程序。 下面我们看看8051中断系统结构及中断控制: 8051单片机有五个中断请求源,四个用于中断控制的寄存器IE.IP.TCON和SCON,用于控制中断的类型,中断允许,中断起停和各种中断源的优先级别。 五个中断源有两个优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。8051的中断源包括:INT0,INT1引脚输入的外部中断源;三个内部的中断源,即定时器T0的溢出中断源,定时器T1的溢出中断源和串行口的发送/接收中断源。 从INT0,INT1引脚输入的两个外部中断源和它们的触发方式控制位锁存在特殊功能寄存器TCON的低四位,其格式如下: IE1,即TCON.3:外部中断INT1请求标志位。当CPU检测到在INT1引脚上出现的外部中断信号时,由硬件置位IE1=1,请求中断。CPU执行中断服务程序后,IE1位被硬件自动清0. IT1,即TCON.2:外部中断INT1请求类型,触发方式控制位,由软件来置1或清0,以

《8259中断控制器实验》的实验报告

实验六8259中断控制器实验 6.1 实验目的 (1) 学习中断控制器8259的工作原理。 (2) 掌握可编程控制器8259的应用编程方法。 6.2 实验设备 PC微机一台、TD-PIT+实验系统一套。 6.3 实验内容 1. 单中断应用实验 (1)编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示一个字符。 (2)编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示“Hello”,中断5次后退出。 2.扩展多中断源实验 利用实验平台上8259控制器对扩展系统总线上的中断线INTR进行扩展。编写程序对8259控制器的IR0和IR1中断请求进行处理。 6.4 实验原理 1. 8259控制器的介绍 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图6-1所示。 8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图6-2所示,

微机原理习题7-中断控制器

习题七中断控制器 参考答案 7.2.8086 CPU响应中断的条件?简述8086CPU响应中断处理过程。 【答】CPU响应中断的条件:(1)有中断源发出的中断请求信号,并保存在中断请求触发器中,直至CPU响应此中断请求之后才清除。(2)开放总中断。(3)在现行指令结束后响应中断。 8086CPU的中断处理过程: (1)CPU自动完成如下工作: 关中断,断点保护,形成中断入口地址。即获得中断服务程序的入口地址,从而进入中断服务程序。 (2)CPU中断服务。包括保护现场、CPU开放中断、中断处理、CPU关中断、恢复现场。 (3)中断返回。 7.3 软件中断有哪些特点?在中断处理子程序和主程序的关系上,软件中断和硬件中断有什么 不同之处? 【答】(1)是由CPU内部事件引起的中断,是确定的;与硬件无关,不执行中断响应周期; 除单步中断外,软件中断(内部中断)不可屏蔽;优先级高于硬件中断(外部中断)。 (2)硬件中断由外部事件引起,是随机的,需要执行总线周期,中断类型码由中断控制器提供。 7.4 什么叫中断向量?它放在哪里?对应于1CH的中断向量在哪里?如1CH中断程序从 5110H :2030H开始,则中断向量应怎样存放? 【答】中断向量是中断处理子程序的入口地址,它放在中断向量表中。 由1ch*4=70H知中断向量存放在0000:0070处。 由于中断处理入口地址为5110H:2030H,所以2030H应放在0070H,0071H两个存储单元,5110H应放在0072H、0073H这2个单元。 7.5 叙述可屏蔽中断的响应过程,一个可屏蔽中断或者非屏蔽中断响应后,堆栈顶部四个单元 中是什么内容? 【答】当CPU在INTR引脚上接受一个高电平的中断请求信号并且当前的中断允许标志为1,CPU就会在当前指令执行完后开始响应外部的中断请求,具体如下: 1)从数据总线上读取外设送来的中断类型码,将其存入内部暂存器中; 2)将标志寄存器的值入栈,清IF 和TF,将断点保护到堆栈中; 3)根据中断类型获取中断向量; 4)转入中断处理子程序; 5)处理完后恢复现场 6)中断返回。 可屏蔽中断或者非屏蔽中断响应后堆栈的顶部6个单元是断点处的IP、CS、FLAG内容。 7.6 从8086/8088的中断向量表中可以看到,如果一个用户想定义某个中断,应该选择在什么范 围? 【答】从8086/8088的中断向量表中可以看出,如果一个用户想定义一个中断,应该选择中 断类型60H-6FH,其中断向量在中断向量表的0180H-01BFH。 7.7 类型号为20H的中断服务程序入口符号地址为INT-5,试写出中断向量的装入程序片断。【答】中断向量的地址:20H×4=10000000=80H 中断向量的装入参考程序: CLI PUSH DS XOR AX,AX MOV DS,AX MOV AX,OFFSET INT-5 MOV WORD PTR [080H],AX MOV AX,SEG INT-5

实验四定时器8253与中断控制器8259A实验

实验四 定时器8253与中断控制器8259A 实验 一﹑实验目的 1. 掌握计数器/定时器8253的工作原理和编程方法。 2. 掌握8259中断控制器的工作原理; 3. 掌握中断服务程序的编写。 二﹑实验内容 1. 该实验用PC 机内部的中断控制器8259A ,中断源用TPC_H 实验箱上8253来产生,电路如下所示,将8253计数器0、计数器1分别设置为方式3和方式2,计数初值设为2000,每隔4秒产生一次。TPC_H 实验箱上的IRQ 已连接到PC 机内部主片8259A 的IRQ7,主片8259A 的端口地址为20H 和21H ,主机启动时,系统已将8259A 中断控制器进行了初始化(边沿触发﹑一般完全嵌套方式﹑非自动结束,ICW2为08H ,IRQ7对应的中断类型码为0FH); 2. 实验电路如下图: 注意:做中断实验时,JB 上的短路片应插在“I/O ”位置,JC 上的短路片插在“I/O ”位置。 3. 编写程序,要求每次主机响应外中断IRQ7时,显示"THIS IS A 8259A INTERRUPT !",在键盘上敲任意一个键,程序退出。 4. 修改电路和程序,直接用手动产生单个脉冲作为中断请求信号,要求每按一次开关产生一次中断,在屏幕上显示一次“THIS IS A IRQ7 INTRUPT !”,中断10次后程序退出。 JC I/O EM 实验连线6条,如图红色虚线所示 去IRQ7 去去50去1MHz 输出端

1.复习8259A工作原理,编程方法和使用方法。 2.根据要求编写相应的汇编程序。 四﹑报告要求 1.整理好经过运行是正确的源程序,并加上注释。 2.总结实验调试过程中遇到的问题。 3.通过实验回答思考题。 五﹑思考题 初始化时设置为非自动结束方式,那么在中断服务程序 将结束时必须设置什么操作命令?如果不设置这种命令会发 生什么现象? 六、实验原理 1、PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。 IBM-PC/XT机内有一片8259中断控制器对外可提供8个中断源: 中断源中断类型号中断功能 IRQ0 08H 时钟 IRQ1 09H 键盘 IRQ2 0AH 保留 IRQ3 0BH 串行口2 IRQ4 0CH 串行口1 IRQ5 0DH 硬盘 IRQ6 0EH 软盘 IRQ7 0FH 并行打印机 8个中断源的中断请求信号线IRQ0~IRQ7在主机的62线总线插槽中可以引出,系统已设定中断请求信号为“边沿触发”、普通结束方式。对于286以上的微机又扩展了一片8259中断控制器,主片的IRQ2已用于从片的级连。本实验箱在出厂时,默认IRQ7引到实验台上。 2、编程说明:PC机中断控制器8259的地址为20H、21H,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器IMR对应位要清0(允许中断),中断服务程序返回前要使用中断结束命令: MOV AL,20H OUT 20H,AL 中断结束返回DOS时应将IMR对应位置1,以关闭中断。

习题8-中断控制器

习题八中断控制器 8.1 8088/8086CPU管理有哪些中断源?各种中断的产生条件是什么? 【答】NMI中断和INTR中断。INTR中断产生的条件是:无总线请求、FR.IF=1、CPU执行完当前指令。 8.2 8088/8086中断向量表的作用是什么? 【答】中断向量是中断服务程序的入口地址。将所有中断向量集中放在一起,形成中断向量表。 8086系统有256个类型的中断源。每个类型对应一个中断向量,一个中断向量由四个字节组成:2个高地址字节:存放中断服务程序的代码段的段值;2个低地址字节:存放中断服务程序的偏移地址。中断向量表放在内存的地段地址0单元开始的单 元:00000H~03FFFH。 8.3 什么叫中断向量?它放在哪里?对应于1CH的中断向量在哪里?如1CH中断程序从 5110H:2030H开始,则中断向量应怎样存放? 【答】中断向量是中断处理子程序的入口地址,它放在中断向量表中,由1ch*4=70h知中断向量存放在0000:0070处。由于中断处理入口地址为5110:2030所以0070H,0071H,0072H,0073H 这四个单元的值分别为30H,20H,10H,51H。 8.4 叙述可屏蔽中断的响应过程,一个可屏蔽中断或者非屏蔽中断响应后,堆栈顶部四个单元 中是什么内容? 【答】当CPU在INTR引脚上接受一个高电平的中断请求信号并且当前的中断允许标志为1,CPU 就会在当前指令执行完后开始响应外部的中断请求,具体如下: 1、从数据总线上读取外设送来的中断类型码,将其存入内部暂存器中; 2、将标志寄存器的值推入堆栈; 3、将标志寄存器中IF 和TF清零; 4、将断点保护到堆栈中; 5、根据中断类型获取中断向量转入中断处理子程序; 6、处理完后恢复现场。 响应后堆栈的顶部4个单元是IP,CS。 8.5 从8086/8088的中断向量表中可以看到,如果一个用户想定义某个中断,应该选择在什么 范围? 【答】从8086/8088的中断向量表中可以看出,如果一个用户想定义一个中断,应该选择中断类型60H-6FH,其中断向量在中断向量表的0180H-01BFH。 8.6 非屏蔽中断处理程序的入口地址怎样寻找? 【答】非屏蔽对应类型2,它位于中断向量表0000:0008H-0000:000BH处,4个单元的值即为非屏蔽中断处理程序的入口地址:08H、09H放偏移量,0AH、0BH放段地址。 8.7 类型号为20H的中断服务程序入口符号地址为INT-5,试写出中断向量的装入程序片断。【答】中断向量的地址:20H×4=001 0 00 0000=80H 中断向量的装入参考程序: CLI PUSH DS XOR AX,AX MOV DS,AX MOV AX,OFFSET INT-5 MOV WORD PTR [080H],AX MOV AX,SEG INT-5 MOV WORD PTR [082H],AX POP DS STI…… INT-5 PROC NEAR ……. IRET INT-5 ENDP 8.8 8259A中 IRR、IMR和 ISR三个寄存器的作用是什么? 【答】中断请求寄存器IRR:保存对应位的中断请求 中断屏蔽寄存器IMR:屏蔽对应位的中断请求; 中断服务寄存器ISR:保存当前正在服务的中断申请。 8.9 填空:某时刻8259A的IRR内容是08H(00001000B),说明(_IR3引脚有中断请求_)。某时 刻8259A的ISR内容是08H,说明(_IR3引脚的中断请求正在服务_)。在两片8259A级连

第5章中断系统课后习题答案

第5章中断系统 1)作业题 1.8051微控制器中,有几个中断源?几个中断优先级?中断优先级是如何控制的?在出 现同级中断申请时,CPU按什么顺序响应(按由高级到低级的顺序写出各个中断源)? 各个中断源的入口地址是多少? 答:8051微控制器中有五个中断源,两个中断优先级。通过IP进行优先级控制。IP为中断优先级寄存器,物理地址为B8H,其中的后五位PS PT1 PX1 PT0 PX0分别控制串行口、定时器/计数器1、外部中断1、定时器/计数器0、外部中断0的优先级。在出现同级中断申请时,CPU按如下顺序响应各个中断源的请求:INT0、T0、INT1、T1、串行口,各个中断源的入口地址分别是0003H、000BH、0013H、001BH、0023H。 2.8051微控制器中,各中断标志是如何产生的,又如何清0的? 答:每个中断源请求中断时会在SFR的某些寄存器中产生响应的标志位,表示该中断源请求了中断。INT0、INT1、T0和T1的中断标志存放在TCON(定时器/计数器控制寄存器)中,占4位;串行口的中断标志存放在SCON(串行口控制寄存器)中,占2位。 TF0:T0溢出标志,溢出时由硬件置1,并且请求中断,CPU响应后,由硬件自动将TF0清0;不用中断方式时,要用软件清0。 TF1:T1溢出标志,溢出时由硬件置1,并且请求中断,CPU响应后,由硬件自动将TF1清0;不用中断方式时,要用软件清0。 IE0:INT0中断标志,发生INT0中断时,硬件置IE0为1,并向CPU请求中断。 IE1:INT1中断标志,发生INT1中断时,硬件置IE1为1,并向CPU请求中断。SCON:串行口控制寄存器。 TI:串行口发送中断标志,发送完一帧数据时由硬件置位,并请求中断。 RI:串行口接受中断标志,接收到一帧数据时,由硬件置位,并且请求中断。 TI、RI标志,必须用软件清0。 3.简述8051微控制器中中断响应的过程。 答:单片机响应中断的条件:中断源有请求(响应的中断标志位置1),CPU允许所有中断(CPU中断允许位EA=1),中断允许寄存器IE中,相应中断源允许位置1;没有同级或者高级中断正在服务,现行指令已经执行完毕,若执行指令为RETI或者读/写IE或者IP指令时则该指令的下一条指令也执行完毕。 中断响应的过程: 1)CPU在每个机器周期的S5P2检测中断源。在下一个机器周期的S6按照优先次序查询各个中断标志。若查询到有中断标志为1时,按照优先级别进行处理,即响应中断;2)置相应的“优先级状态”触发器为1,即指出CPU当前正在处理的中断优先级,以阻断同级或者低级中断请求; 3)自动保护断点,即将现行PC内容(即断点地址)压入堆栈,并且根据中断源把相应的

实验二 中断控制电路实验

实验二中断控制电路实验 一、实验目的 1、学习单片机的中断控制原理。 2、编程中断控制器。 二、实验环境 硬件环境:奔3以上处理器,512MB以上内存空间 软件环境:windowsXP以上操作系统,emu8086编译环境,Proteus7、5sp3。 三.实验内容与完成情况 1、实验电路图 2.实验原理 8259中断控制器就是专为控制优先级中断设计的芯片。它将中断源优先级排队,辩别中断源以及提供中断矢量的电路集于一片中。因此无需附加任何电路,只需对8259进行编程,就可以管理8级中断,并选择优行模式与中断请求方式,即中断结构可以由用户编程来设定。同时,在不需要增加其它电路的情况下,通过多片8259的级联,能构成多达64级的矢量中断系统。 (1) 写初始化命令字 * 写初始化命令字ICW1(A0=0),以确定中断请求信号类型,清除中断屏蔽寄存器,中断优先级排队与确定系统用单片还就是多片。

* 写初始化命令字ICW2,以定义中断向量的高五位类型码。 * 写初始化命令字ICW3,以定义主片8259A中断请求线上IR0~IR7有无级联的8259A从片。 第i位=0,表明IRi引脚上无从片 第i位=1,表明IRi引脚上有从片 * 写初始化命令ICW4,用来定义8259A工作时用8085模式,还就是8088模式,以及中断服务寄存器复位方式等。

(2) 写控制命令字 * 写操作命令字0CW1,用来设置或清除对中断源的屏蔽。 第i位=0,对应的中断请求IRi开放 第i位=1,对应的中断请求IRi屏蔽 注: OCW1如不写,则在初始化命令写入后,OCW1为全开放状态。 * 操作命令字OCW2,设置优先级就是否进行循环、循环方式及中断结束方式。 注: 8259A复位时自动设置IR0优先权最高,IR7优先权最低。

微机接口实验报告-8259中断控制器应用实验

姓名 院专业班 年月日实验内容8259中断控制器实验指导老师 【实验目的】 (1)学习中断控制器8259的工作原理。 (2)掌握可编程控制器8259的应用编程方法。 【试验设备】 PC微机一台、TD-PIT+实验系统一套。 【实验内容】 (1) 编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示一个字符。 (2) 编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示“9”,中断显示6次后退出。 【实验原理】 1. 8259控制器的介绍 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图6-1所示。 8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1- OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图6-2所示,OCW1-OCW3各命令字格式如图6-3所示,其中OCW1用于设置中断屏蔽操作字,OCW2用于设置优先级循环方式和中断结束方式的操作命令字,OCW3用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设置对8259内部寄存器的读出命令。 图6-1 8259内部结构和引脚图

S3C2440中断控制器痛点详解

中断详解 1、S3C2440官方手册最权威: 手册是最芯片IP开发者最直接的描述,最准确;但对英文阅读能力要求高、因详细而繁杂;适合参考和深入研究; 另外参考网上相关短文较容易入门,并短文是有套路的:基本是围绕几个较优秀的文章(优秀短文要多研读几遍理解透作者的每个心思)。 2、支持60个中断源: S3C2440中断控制器总共支持60个中断源(内部外设和外部管脚):详细数下表中Descriptions中的中断源个数正好60; 子中断源分解如下:

注:INT_LCD也有两个中断但没有包含在子中断源寄存器中 3、一种中断源分类方法: 1、独立的外部中断源(EINT0-EINT3):4个; 2、合并的外部中断源(EINT4-EINT23):20个,合并后对应EINT4_7和EINT8_23; 注意:对应的相关寄存器在IO模块中,手册中的做法有点特殊; 3、带子中断的内部中断源:15个中断源,体现为6个bit(INT_WDT_AC97/ INT_CAM/ INT_ADC/ INT_UART2/ INT_UART1/ INT_UART0); 4、不带子中断的内部中断源:21个; 注意:INT_LCD实际对应两个中断源但是没有作为带子中断的内部中断源(如下图手册中有提到,TMD隐蔽!); 综上理解中断过程可以总结为:

4、中断优先级解析: 优秀的SOC对外设中断的处理都比较用心,基本能照顾到用户的各种场景,和LPC2292以及作者工作期间参与开发的一款SOC相比,作者经历到的三款SOC对中断的处理各有千秋(原谅不细说,因为没有必要); 可以总结为易用和特性的平衡,如果极特殊的场景下的实时性得不到满足,那就换个SOC 呗!没有必要使用一款SOC打遍天下,也不可能,而且厂家也没有强迫你呀! 言归正传: S3C2440A支持60种中断,多个硬件可能同时产生中断请求,由于CPU只能处理一个中断,中断控制器怎么选择出一个最佳的中断,交给ARM内核进行处理呢?中断控制器采用优先级仲裁比较的方式进行选择,找出优先级最高的中断源。中断控制器将60种中断源分成7组,如下图所示,它类似体育赛事里的比赛方式,所有参赛选手在小组赛PK,选择出小组赛最优秀选手,然后进入决赛阶段和其它小组最优先选择再PK,最后优胜者就是总冠军。其中ARBITER0~ARBITER5为“小组赛”阶段,中断源信号在各自小组里进行优先级仲裁,选择出最高优先级中断信号,每小组选出的中断信号送到ARBITER6,也就是决赛阶段,选择出最高优先级中断信号,交给ARM内核。 中断信号在7个分组里PK时的优先级是可编程的,通过PRIORITY寄存器进行优先级设置。如下表(只列出PRIORITY寄存器部分位): 表3-6 中断优先级控制寄存器(PRIORITY)

实验二:8259 中断控制器实验

实验二 8259A中断控制器实验 1、编制程序:拨动单脉冲开关,“”送给8259A的IR0,触发中断, 8088计数中断次数,显示于G5区的数码管上 2、运行程序 3、上下拨动单脉冲开关,拨动二次,产生一个“”,观察结果, 数码管上显示的次数与拨动开关次数是否对应。 .MODEL TINY EXTRN DISPLAY8:NEAR IO8259_0 EQU 0F000H IO8259_1 EQU 0F001H .STACK 100 .DATA BUFFER DB 8 DUP(?) COUNTER DB ? REDISPLAYFLAG DB 0 .CODE START: MOV AX,@DATA MOV DS,AX MOV ES,AX NOP CALL INIT8259 CALL WRIINTVER MOV COUNTER,0 MOV REDISPLAYFLAG,1 STI ;?a?D?? START1: CMP REDISPLAYFLAG,0 JZ START1 CALL LEDDISPLAY MOV REDISPLAYFLAG,0 JMP S TART1 INIT8259 PROC NEAR MOV DX,IO8259_0 MOV AL,13H OUT DX,AL MOV DX,IO8259_1 MOV AL,08H OUT DX,AL MOV AL,09H OUT DX,AL MOV AL,0FEH OUT DX,AL

RET INIT8259 ENDP WRIINTVER PROC NEAR PUSH ES MOV AX,0 MOV ES,AX MOV DI,20H LEA AX,INT_0 STOSW MOV AX,CS STOSW POP E S RET WRIINTVER ENDP LEDDISPLAY PROC NEAR MOV AL,COUNTER MOV AH,AL AND AL,0FH MOV BUFFER,AL AND AH,0F0H ROR A H,4 MOV BUFFER + 1,AH MOV BUFFER + 2,10H ;??áù??2?Dèòa??ê? MOV BUFFER + 3,10H MOV BUFFER + 4,10H MOV BUFFER + 5,10H MOV BUFFER + 6,10H MOV BUFFER + 7,10H LEA SI,BUFFER CALL DISPLAY8 RET LEDDISPLAY ENDP INT_0: PUSH DX PUSH AX MOV AL,COUNTER ADD AL,1 DAA MOV COUNTER,AL MOV REDISPLAYFLAG,1 MOV DX,IO8259_0 MOV AL,20H

中断及中断控制器本章学习要点中断技术概述8086的中断

第7章中断及中断控制器 本章学习要点 ●中断技术概述、8086的中断类型 ●中断优先权及其管理、中断矢量 ●中断处理过程 ●可编程中断控制器8259A及其应用 7-1 本章知识重点 7-1-1 中断技术的基本概念 1.中断的概念 所谓“中断”是指CPU在正常执行程序时,由于内部/外部事件或程序的预先安排引起CPU暂时终止执行现行程序,转而去执行请求CPU为其服务的服务程序,待该服务程序执行完毕,又能自动返回到被中断的程序继续执行。 2.中断源 能引起中断的外部设备或内部原因称为中断源。 按照与CPU的位置关系可分为内部中断和外部中断。内部中断是CPU在处理某些特殊事件时所引起或通过内部逻辑电路自己去调用的中断。外部中断是由于外部设备要求数据输入/输出操作时请求CPU为之服务的一种中断。 通常中断源有以下几种: (1)一般的输入/输出设备,如键盘、打印机等。 (2)实时时钟。 (3)故障源。 (4)软件中断。 3.中断源识别 识别中断源通常有两种方法:查询中断和矢量中断。 (1)查询中断:就是用软件查询的方法确定中断源。当CPU收到中断请求信号时,通过执行一段查询程序,从多个可能的外设中查询申请中断的外设。 (2)矢量中断:又称向量中断。每个中断源预先指定一个矢量标志,要求外设在提出中断请求的同时,提供该中断矢量标志。当CPU响应某个中断源的中断请求时,控制逻辑就将该中断源的矢量标志送入CPU,CPU根据矢量标志自动找到相应的中断服务程序入口地址,转入中断服务。这种中断源识别方法比查询中断要快很多。 4.中断技术的优点 (1)同步操作:中断方式不仅可以实现CPU和外设之问的并行工作,而且CPU可命令多个外设同时工作,这大大提高r CPU的利用率,也加快了输A./输出的速度。 (2)实现实时处理:利用中断技术可以及时处理随机输入到微型计算机的各种参数和信息,使微型计算机具备实时处理与控制的能力。 (3)故障处理:CPU可以就根据故障源发出的中断请求,立即去执行相应的故障处理程序,自行处理故障而不必停机,因此提高了微型计算机工作的可靠性。 7-1-2中断系统 1.中断系统的功能 (1)能实现中断响应、中断服务和中断返回。 当某个中断源发出中断请求n,J,CPU可决定是否响应这个中断请求。如果CPU正在执行更紧急、更重要的工作时,可以暂不响应中断。若允许响应这个中断请求,则CPU必须在执行

中断控制器8259A及中断服务

实验内容:中断控制器8259A及中断服务 1、实验连线原理见图1所示: 8259A连线: (1)单脉冲与时钟单元“”插孔和8259的3号中断IR3插孔相连作为中断源; (2)8259的INT连8088的INTR(Xl5); (3)8259的INTA连8088的INTA(Xl2); (4)8259的CS端接EX1(8259A端口地址是60H,61H); (5)A0→A0。 (6)IOWR→IOWR; (7)IORD→IORD; (8)连通CPU和8259A的数据总线,JX4→JX17。 8255连线: (1)将8255的A端口的PA7到PA0连接到灯L1~L8上。 图1:实验连线图 2、实验原理:按动按键AN0后,单脉冲与时钟单元部件会产生“”信号,该信号的上升沿作为中断请求送8259A的IR3引脚,如果8259A没有屏蔽该级中断并且其优先级最高,8259A向CPU的INTR引脚送中断,CPU如果允许响应中断,则进入中断处理子程序,中断处理子程序向8255A的A端口送数据,将灯L1~L8点亮1秒。 3、实验要求:单片8259A以缓冲方式连接数据总线,以上升沿作为中断请求信号,中断源通过IR3引入,优先级采用一般全嵌套方式,非自动中断结束方式,引脚IR0~IR7的中断类型号为08F~0FH,编写一个汇编程序,主程序完成8255和8259A的初始化,循环等待中断请求;中断处理子程序将灯点亮1秒后熄灭。 4、端口地址: 5、系统内存分配:

5、程序结构: CODE SEGMENT ASSUME CS:CODE MAIN PROC START: ;主过程 ;初始化8259 ;初始化8255 ;调用3号中断 MAIN ENDP INT3 PRCO ……;中断处理子程序 INT3 ENDP DELAY PROC …… ;延时子过程 DELAY ENDP CODE ENDS END 6、程序流程图 主程序

8259A中断控制器和8253计数器

8259A中断控制器和8253计数器·定时器实验 浏览次数:1129次悬赏分:50|解决时间:2008-12-2 12:17 |提问者:liushang8811 程序1 参考流程图 1:开始 2:关中断 3:初始化8253(设定定时器0和1的工作方式及技术初值) 4:使用INT 21H的35H号功能获取0AH号中断向量并保存。 5:使用INT 21H的25H号功能设置0AH号中断的新中断向量。 6:设置IMR寄读器及允许IRQ2中断。 7:开中断 8:循环等待中断。 程序2 参考流程图:编写中断服务程序。要求主机每响应一次IRQ2的中断时,就执行一次终端服务子程序。中断服务子程序的核心就是显示字符串“THIS IS A 8259A INTERRUPT” 1:开始 2:显示字符串 3:技术结束?终端结束并返回 4:关中断 5: 使用INT 21H的25H号功能恢复原OAH号中断的中断向量 6: 恢复IMR寄存器的原值 7: 开中断 8: 结束,返回DOS 用汇编,急用,跪谢 1. MOV AX,FLAGS AND AX,1111110111111111B ;关中断 MOV FLAGS,AX

MOV AL,00110110B ;假设定时器0设为方式3 OUT 43H,AL MOV AL,XXH ; OUT 40H,AL MOV AL,XXH OUT 40H,AL ;定时器0初值 MOV AL,01110110B ;假设定时器1设为方式3 OUT 43H,AL MOV AL,XXH ; OUT 41H,AL MOV AL,XXH OUT 41H,AL ;定时器1初值 MOV AH,35H MOV AL,0AH INT 21H PUSH ES ;保存原向量 PUSH BX PUSH DS ;借用DS和DX作中断入口,暂时保存原值PUSH DX MOV DS,XXH ;新中断向量段地址 MOV DX,XXH ;新中断向量偏移量 MOV AH,25H MOV AL,0AH INT 21H

中断控制器

ARM(以S3C2440A为例)中的中断控制器 中断请求由硬件产生,根据中断源类型分别将中断信号送到SUBSRCPND (SubSourcePending)和SRCPND(SourcePending)寄存器,SUBSRCPND是子中断源暂存寄存器,用来保存子中断源信号,SRCPND是中断源暂存寄存器,用来保存中断源信号。中断信号可通过编程方式屏蔽掉,SUBMASK是子中断源屏蔽寄存器,可以屏蔽指定的子中断信号,MASK功能同SUBMASK用来屏蔽中断源信号。 中断分为两种模式:一般中断的和快速中断,MODE是中断模式判断寄存器,用来判断当前中断是否为快速中断,如果为快速中断直接将快速中断信号送给ARM内核(为什么快速中断不需要仲裁,因为arm规定了快速中断只能有一个),如果不是快速中断,还要将中断信号进行仲裁选择。 S3C2440A支持多达60种中断,很有可能多个硬件同时产生中断请求,这时要求中断控制器做出裁决,Priority是中断源优先级仲裁选择器,当多个中断产生时,选择出优先级最高的中断源进行处理,INTPND是中断源结果寄存器,里面存放优先级仲裁出的唯一中断源。 中断控制器负责收集所有中断源发起的中断,现有的中断控制器几乎都是可编程的,通过对中断控制器的编程,我们可以控制每个中断源的优先级、中断的电器类型,还可以打开和关闭某一个中断源。 smp系统中,甚至可以控制某个中断源发往哪一个CPU进行处理。对于ARM架构的soc,使用较多的中断控制器是VIC(Vector Interrupt Controller),进入多核时代以后,GIC(General Interrupt Controller)的应用也开始逐渐变多。 x86架构处理器 在x86中的中断控制器为8259芯片,下面介绍一下它的工作原理 当一个中断请求从IR0到IR7中的某根线到达IMR时,IMR首先判断此IR是否被屏蔽,如果被屏蔽,则此中断请求被丢弃;否则,则将其放入IRR中。 在此中断请求不能进行下一步处理之前,它一直被放在IRR中。一旦发现处理中断的时机已到,Priority Resolver将从所有被放置于IRR中的中断中挑选出一个优先级最高的中断,将其传递给CPU去处理。IR号越低的中断优先级别越高,比如IR0的优先级别是最高的。 8259A通过发送一个INTR(Interrupt Request)信号给CPU,通知CPU有一个中断到达。CPU收到这个信号后,会暂停执行下一条指令,然后发送一个INTA(Interrupt Acknowledge)信号给8259A。8259A收到这个信号之后,马上将ISR中对应此中断请求的Bit设置,同时IRR中相应的bit会被reset。比如,如果当前的中断请求是IR3的话,那么ISR中的bit-3就会被设置,IRR中IR3对应的bit就会被reset。这表示此中断请求正在被CPU处理,而不是正在等待CPU处理。 随后,CPU会再次发送一个INTA信号给8259A,要求它告诉CPU此中断请求的中断向量是什么,这是一个从0到255的一个数。8259A根据被设置的起始向量号(起始向量号通过中断控制字ICW2被初始化)加上中断请求号计算出中断向量号,并将其放置在Data Bus 上。比如被初始化的起始向量号为8,当前的中断请求为IR3,则计算出的中断向量为8+3=11。CPU从Data Bus上得到这个中断向量之后,就去IDT中找到相应的中断服务程序ISR,并调用它。如果8259A的End of Interrupt (EOI)通知被设定位人工模式,那么当ISR处理完

8259A中断控制器实现

一、实验目的与要求 1、了解8259的内部结构,工作原理;了解8259A 与8088的接口逻辑; 掌握对8259A 的初始化编程方法,了解8088是如何响应中断、退出中断的。 二、实验逻辑原理图与分析 2.1 画实验逻辑原理图 AD0~AD15 ALE WR# INTR INTA 数据锁存器 地址锁存器 地址译码器D0~D7 CS#A0 WR#INT INTA# IR0 A0 2.2 逻辑原理图分析 8282地址锁存器,用于8086CPU 与8259A 芯片地址线的连接用于总线周期T1状态 下发出的地址信号。经锁存后的地址信号可以在整个周期内保持稳定不变,8286收发器用于8086CPU 与8259A 芯片数据线的连接,通过地址译码器实现片选信号(CS )的选通。 (1)、8086是Intel 系列的16为微处理器,芯片上有4万个晶体管,采用NMOS 工艺制造,用单一的+5V 电源,时钟频率为4.77MHZ~10MHZ.8086有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据,可寻址的内存空间为1MB 。 (2)、8282锁存器:用来锁存8086访问存储器或I/O 端口时,于总线周期T1状态下发出的地址信号。经锁存后的地址信号可以在整个周期内保持稳定不变 (3)、8286收发器:可以进行双向数据锁存 (4)、8259A 可编程中断控制器主要功能: 1)、 1片8259A 能管理8级中断,通过级联用9片8259A 可以构成64 级主从 式中断系统 2)、每一级中断可以屏蔽或允许 3)、在中断响应周期,8259A 可提供相应的中断类型号。 4)、 可编程使8259A 工作在多种不同的方式。 (5)、8259A 的内部结构:

中断实验报告报告

中断试验试验报告 班级:电信1001 姓名:张贵彬学号:201046830213 一、实验目的 1、掌握PC机中断处理系统的基本原理。 2、学会编写中断服务程序。 二、实验原理与内容 1、实验原理 PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源: 中断源中断类型号中断功能 IRQ0 08H 时钟 IRQ1 09H 键盘 IRQ2 0AH 保留 IRQ3 OBH 串行口2 IRQ4 0CH 串行口1 IRQ5 0DH 硬盘 IRQ6 0EH 软盘 IRQ7 0FH 并行打印机 8个中断源的中断请求信号线IRQ0~IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。对于PC/AT及286以上微机内又扩展了一片8259中断控制,IRQ2用于两片8259之间级连,对外可以提供16个中断源: 中断源中断类型号中断功能 IRQ8 070H 实时时钟 IRQ9 071H 用户中断 IRQ10 072H 保留 IRQ11 O73H 保留 IRQ12 074H 保留 IRQ13 075H 协处理器 IRQ14 076H 硬盘 IRQ15 077H 保留 TPC-USB实验板上,固定的接到了3号中断IRQ3上,即进行中断实验时,所用中断类型号为0BH。 2、实验内容 实验电路如图9-1,直接用手动产单脉冲作为中断请求信号(只需连接一根导线)。要求每按一次开关产生一次中断,在屏幕上显示一次“TPCA Interrupt!”,中断10次后程序退出。 三、实验电路图

实验一 8259单级中断控制器实验

实验一8259单级中断控制器实验 一、实验目的 ⒈掌握8259中断控制器的接口方法。 ⒉掌握8259中断控制器的应用编程。 二、实验内容 利用8259实现对外部中断的响应和处理,要求程序对每次中断进行计数,并将计数结果送数码显示。 三、实验接线图 图6-6 四、编程指南 ⑴8259芯片介绍 中断控制器8259A是专为控制优先级中断而设计的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中。因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式。即中断结构可以由用户编程来设定。同时,在不需要增加其它电路的情况下,通过多片8259A的级联,能构成多达64级的矢量中断系统。

⑵本实验中使用3号中断源IR3,“”插孔和IR3相连,中断方式为边沿触发方式,每拨二次AN开关产生一次中断,满5次中断,显示“8259——good”。如果中断源电平信号不符合规定要求,则自动转到7号中断,显示“Err”。 五、实验程序框图 IR3中断服务程序: IR7中断服务程序:

六、实验步骤 1、按图6-6连好实验线路图。 ⑴ 8259的INT连8088的INTR; ⑵ 8259的INTA连8088的INTA; ⑶“”插孔和8259的3号中断IR3插孔相连,“”端初始为低电平; ⑷ 8259的CS端接FF80H孔; ⑸连JX4→JX17。 2、DJ-8086k软件启动和联机 ⑴启动和联机。双击桌面上‘DJ-8086k’快捷图标,即可运行DJ-8086k软件; ⑵新建文件:单击菜单栏“文件”或工具栏“新建”图标,即会建立一个新的源程序 编辑窗口,此时可在此窗口编辑、输入源程序(注:新建文件扩展名为 .ASM)。 或打开文件F3:单击菜单栏“文件”或工具栏“打开”图标,弹出“打开文件”的对话框,然后选择要装入的源文件,单击“确定”即可装入源文件。; 3、调试程序 ⑴编译装载F9: 打开源文件,依次单击:调试”\“编译装载F9”或工具栏上的编译装载图标,状 态栏会提示正在编译、编译成功、正在装载数据、装载数据结束,几秒钟后便会弹出‘源文件调试窗口’,如编译出错,会提示错误信息,待修改源文件正确后,重新编译装载即可; ⑵连续运行; 单击菜单栏“调试”下的“连续运行”或单击工具栏的连续运行图标,即全速连续运行程序,系统显示8259-1。 ⑶在系统处于命令提示符“P.”状态下,输入12D0,按EXEC键,系统显示8259-1。 ⑷拨动AN开关按钮,按满6次显示good。 七、实验程序清单 CODE SEGMENT ;H8259.ASM ASSUME CS: CODE INTPORT1 EQU 0FF80H INTPORT2 EQU 0FF81H INTQ3 EQU INTREEUP3 INTQ7 EQU INTREEUP7 PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 ORG 12D0H START: JMP START0 BUF DB ?,?,?,?,?,?

微机原理实验---中断控制实验

深圳大学实验报告 课程名称:微机计算机设计 实验项目名称:8259 中断控制实验 学院:信息工程学院 专业:电子信息工程 指导教师: 报告人:学号:2009100000班级:<1>班实验时间:2011. 05.19 实验报告提交时间:2011. 05. 26 教务处制

一、实验目的 1. 掌握8259 中断控制器的工作原理。 2. 学习8259 的应用编程方法。 3. 掌握8259 级联方式的使用方法。 二、实验要求 1、8259 单中断实验,由单次脉冲输出与主片8259 的IR7 相连可以实现每按动一次单次脉冲,产生一次外部中断,在显示屏上输出一个字符“7”。 2、8259 级联实验,由KK1+连接到主片8259 的IR7 上,KK2+连接到从片8259 的IR1 上,可实现当按一次KK1+时,显示屏上显示字符“M7”,按一次KK2+时,显示字符“S1”。 三、实验设备 PC 机一台,TD-PITE 实验装置或TD-PITC 实验装置一套。 四、实验原理 1、在Intel 386EX 芯片中集成有中断控制单元(ICU),该单元包含有两个级联中断控制器,一个为主控制器,一个为从控制器。该中断控制单元就功能而言与工业上标准的82C59A 是一致的,操作方法也相同。从片的INT 连接到主片的IR2 信号上构成两片8259 的级联。在TD-PITE 实验系统中,将主控制器的IR6、IR7 以及从控制器的IR1 开放出来供实验使用,主片8259 的IR4 供系统串口使用。8259 的内部连接及外部管脚引出如图: 2、在对8259 进行编程时,首先必须进行初始化。一般先使用CLI 指令将所有的可屏蔽中断禁止,然后写入初始化命令字。8259 有一个状态机控制对寄存器的访问,不正确的初始化顺序会造成异常初始化。在初始化主片8259 时,写入初

相关文档
最新文档