《嵌入式系统原理与开发》第13讲南京大学计算机系俞建新主讲2008年春季2008年6月22日南京大学计算机系2第7章中断、DMA和时间管理本章主要介绍以下内容:嵌入式中断控制器嵌入式DMA控制器嵌入式时钟电源管理器嵌入式实时时钟嵌入式脉宽调制定时器2008年6月22日南京大学计算机系3引言中断控制、DMA控制、时钟脉冲控制和定时控制是所有计算机的必备功能,嵌入式处理器也不例外。这一讲主要学习S3C44B0X嵌入式处理器中的中断控制器、DMA控制器以及与时间控制直接相关的四个部件。与时间控制直接相关的四个部件是分别是:时钟电源管理器、锁相环、实时时钟和脉冲宽度调制定时器。2008年6月22日南京大学计算机系47.1嵌入式系统中断控制本节介绍以下内容嵌入式中断控制器工作原理S3C44B0X中断控制器S3C44B0X的中断优先级产生模块S3C44B0X的向量中断模式S3C4510B中断控制器简介S3C2410X中断控制器简介建立异常中断向量中断表非向量中断模式的中断入口程序范例嵌入式中断应用程序举例S3C44B0X硬件中断应用举例2008年6月22日南京大学计算机系5中断控制器概述——几种处理器的中断控制器一览表处理器型号Pentium4MCS-51S3C44B0XS3C4510MPC680计算机类别PC单片机嵌入式嵌入式嵌入式体系结构x868051ARM7ARM7PowerPC内置/外置芯片外置,8259A,可以级联内置内置内置内置中断源数8个,最大级联方式下64个5个共30个,外部8个共21个共44个控制寄存器IRR,IMR,ISR,ICW1-ICW4,OCW1-OCW3TCON,IE,SCON,IPINTCON,INTPNDINTMOD,INTMSKEXTINT,EXTINTPND,,,etcINTPND,INTMOD,INTMSK,INTOFFSET,EXTPNDPRI,,,etc两个控制器:SIU和CPM2008年6月22日南京大学计算机系6PC机的中断控制器以普遍使用的基于x86处理器的PC机(台式机和笔记本)为例,它们都拥有两块级联的中断控制器接口芯片Intel8259A,这种中断控制器接口芯片早期是分立元件,安装在主板上。自从80386处理器问世之后到现在所有PC机的这两块8259A中断接口控制器都集成在芯片组中。2008年6月22日南京大学计算机系7嵌入式系统中断控制器概述对通用计算机而言,中断控制包括:中断请求管理、中断使能/禁能、中断优先级分配、中断优先级判定、中断屏蔽/解除屏蔽、中断响应、现场保护和恢复等等。中断控制由CPU内部的中断处理逻辑和寄存器,以及外部的中断控制器接口芯片完成。从功能角度看,嵌入式处理器与通用处理器的中断控制器拥有基本相同的功能,只是实现细节不同。2008年6月22日南京大学计算机系8PC和ES的中断控制器之主要差异中断控制器对于PC和ES都是不可缺少的但是PC机的中断控制器与CPU芯片是分离的,而ES中的中断控制器几乎都是内嵌的。例如:8051系列和ARM系列处理器等。2008年6月22日南京大学计算机系9x86与ARM中断向量表的比较x86处理器的中断向量表实模式中断向量表起始地址是0号单元地址,每一个中断向量占4字节,总共占空间1KB字节。ARM处理器的中断向量表与x86处理器类似,ARM处理器在启动时也需要一个异常中断向量表。该表也从ROM的0号地址单元存放,每4个字节对应于一个异常中断,总空间只有32个字节。与x86处理器实模式中断向量表不同的是ARM处理器的中断向量表中存放的是转移指令,而不是转移目标的逻辑地址。2008年6月22日南京大学计算机系10x86处理器的实模式中断向量表起始地址是0号单元地址,每一个中断向量占4字节,总共占空间1KB字节。x86处理器的每一个中断向量就是该中断向量号所对应的中断服务子程序首条指令的逻辑地址。x86处理器的实模式中断向量表2008年6月22日南京大学计算机系11三种嵌入式中断控制器介绍以下详细介绍S3C44B0X中断控制器的工作原理与使用方法概括介绍S3C4510B和S3C2410X的中断控制器。共同特点:三者都内嵌在处理器芯片内。差异之处:这些中断控制器能够管理的中断源数量各不相同,内部控制寄存器的设置不同,中断优先级分配也不一样。2008年6月22日南京大学计算机系12ARM系列处理器有两种中断请求类型:普通中断请求—IRQ快速中断请求—FIQ7.1.1ARM处理器的中断类型2008年6月22日南京大学计算机系13IRQ中断请求InterruptRequest也叫IRQ异常,属于普通中断请求。由nIRQ引脚上的低电平触发。IRQ中断请求的优先级低于FIQ,当FIQ信号进入时,IRQ被暂停执行。IRQ—普通中断请求2008年6月22日南京大学计算机系14FIQ—快速中断请求FIQ中断请求FastInterruptRequest也叫FIQ异常,属于快速中断请求。用于高速数据传输和通道处理在ARM工作模式下,FIQ拥有充足的私用寄存器。无需程序员在编程时考虑节省寄存器,从而减小了任务切换时的开销。2008年6月22日南京大学计算机系15FIQ由外部的nFIQ引脚上的低电平产生,其电平输入依赖于ISYNC(ARM7TDMI输入信号),能够排除同步或异步的情况。当ISYNC信号为低电平时,IRQ和FIQ被认为是异步的,在中断影响处理器流程之前,会产生一个时钟周期延时以转入同步状态。FIQ的信号产生2008年6月22日南京大学计算机系16在特权(非用户)模式下,设置/复位PSR(CPSR和SPSR的统称)的I位和F位,能够禁止/允许CPU响应IRQ和FIQ中断请求。因此为了开发IRQ和FIQ中断响应功能,I位和F位必须被清0,同时INTMSK(中断屏蔽寄存器)的相应位也必须清0。IRQ中断和FIQ中断的禁能/使能方式2008年6月22日南京大学计算机系17ADS/AXD中的增强型程序状态字(EPSR)以下是ADS的AXD工具给出的EPSR显示界面2008年6月22日南京大学计算机系18S3C44B0X处理器能够处理30个中断源,其中内建的中断控制器可接受26个中断源的中断请求信号。4个外部中断(EINT4/5/6/7)请求是通过“或”的形式合成为1个中断源送至中断控制器,2个UART错误中断(UERROR0/1)也是如此。下面给出S3C44B0X的中断控制器内部寄存器以及处理流程。7.1.2S3C44B0X中断控制器概述2008年6月22日南京大学计算机系197.1.2.1S3C44B0X的中断控制寄存器组INTPND中断请求寄存器26个中断源INTMOD中断模式寄存器INTMSK中断屏蔽寄存器IRQFIQ中断优先级产生模块I_ISPR或者F_ISPR中断服务登记寄存器I_ISPC或者F_ISPC中断服务清除寄存器IRQIRQFIQFIQFIQIRQINTCON中断控制寄存器FIQ或者IRQ中断请求IRQ从群优先级寄存器I_PSLVIRQ主群优先级寄存器I_PMST2008年6月22日南京大学计算机系20S3C44B0X处理器的中断源说明有关S3C44B0X处理器的中断源的详细信息如教材中的表7-2所示。表7-2的栏目说明第2列:中断源名称第3列:中断描述第4列:从属连接的中断优先级裁决器的主单元名第5列:从属连接的中断优先级裁决器的辅单元名第6列:二级中断向量地址(小端序)2008年6月22日南京大学计算机系21S3C44B0X的中断源清单(1)序号中断源描述主单元辅单元ID中断向量地址1EINT0外部中断0mGAsGA0x000000202EINT1外部中断1mGAsGB0x000000243EINT2外部中断2mGAsGC0x000000284EINT3外部中断3mGAsGD0x0000002C5EINT4/5/6/7外部中断4/5/6/7mGAsGKA0x000000306TICKRTC时钟节拍中断mGAsGKB0x000000347INT_ZDMA0通用DMA0中断mGBsGA0x000000408INT_ZDMA1通用DMA1中断mGBsGB0x000000442008年6月22日南京大学计算机系22S3C44B0X的中断源清单(2)序号中断源描述主单元辅单元ID中断向量地址9INT_BDMA0桥DMA0中断mGBsGC0x0000004810INT_BDMA1桥DMA1中断mGBsGD0x0000004C11INT_WDT看门狗中断mGBsGKA0x0000005012INT_UERR0/1串行口O/1错误mGBsGKB0x0000005413INT_TIMER0定时器0中断mGCsGA0x0000006014INT_TIMER1定时器1中断mGCsGB0x0000006415INT_TIMER2定时器2中断mGCsGC0x0000006816INT_TIMER3定时器3中断mGCsGD0x0000006C17INT_TIMER4定时器4中断mGCsGKA0x000000702008年6月22日南京大学计算机系23S3C44B0X的中断源清单(3)序号中断源描述主单元辅单元ID中断向量地址18INT_TIMER5定时器5中断mGCsGKB0x0000007419INT_URXD0串行口0接收中断mGDsGA0x0000008020INT_URXD1串行口1接收中断mGDsGB0x0000008421INT_IICIIC中断mGDsGC0x0000008822INT_SIOSIO中断mGDsGD0x0000008C23INT_UTXD0串行口0发送中断mGDsGKA0x0000009024INT_UTXD1串行口1发送中断mGDsGKB0x0000009425INT_RTCRTC报警中断mGKA─0x000000A026INT_ADCAD转换结束中断mGKB─0x000000C02008年6月22日南京大学计算机系24S3C44B0X的中断源优先级上面的表7-2的栏目序号代表了中断源的中断优先级。例如:EINT0,外部中断0的中断优先级为1,是具有最高优先级的中断源在例如:INT_ADC,AD转换操作结束中断的中断优先级为26,它的中断优先级最低。2008年6月22日南京大学计算机系25EINT4,EINT5,EINT6和EINT7是S3C44B0X处理器的外部中断请求引脚,它们共用同一个中断请求源。因此,ISR(中断服务子程序)要通过读取EXTINTPND3~0寄存器来区别这4个中断源,并在处理结束时通过将EXTINTPND3~0中对应位写1来清除该位。S3C44B0X“线或”的4个外部中断源2008年6月22日南京大学计算机系26S3C44B0X中的中断请求(悬置)寄存器就是INTPND寄存器,其端口地址在0x01E00004,只读属性,初值为0x0。它记录中断请求信号的到来,相当于PC机8259A中断控制器接口中的中断请求寄存器(IRR:InterruptRequestRegister)。因为S3C44B0X的中断控制器只处理26个中断源,所以INTPND寄存器共有26个位有效位。其中的26位[bit25-bit0]分别对应26个中断源,标记该中断源的中断请求状态,称为该中断源的中断Pending状态位。Pending位等于0,说明对应的中断源没有发出中断请求;Pending位等于1,说明对应的中断源发出了中断请求。参看表7-3的左起第3列。S3C44B0X的中断请求(悬置)寄存器INTPND2008年6月22日南京大学计算机系27中断控制器主要功能列表(表7-3)控制位中断源INTPND寄存器中断请求寄存器只读存储器INTMOD中断模式寄存器INTMSK中断屏蔽寄存器I_ISPR/F_ISPR中断服务悬挂寄存器I_ISPC/F_ISPC中断服务悬挂清除寄存器0ADC