ARM嵌入式C编程标准教程 第四章 S3C2410的中断系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
S3C2410的中断系统
4.5.3
◦ 在主程序中,系统初始化后,程序进入死循环,等待中 断。同时,初始化定时器1,设定时器中断时间,当设 定时器定时时间到,产生中断。 ◦ 在北京精仪达盛科技公司EL-ARM830教学实验系统中, 接有两个LED发光管,两个LED发光管的阴极分别接 I/O口G的bit8和bit9,阳极通过电阻接电源。 ◦ 在中断服务程序中,把LED1和LED2两只发光管循环 亮灭,每循环亮灭一次,说明来一次中断。关于定时器 操作,可参考第十一章内容。(程序见课本)
S3C2410的中断系统
4.3
S3C2410中
◦ 56个中断源具体来说: ◦ 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个)、 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个。
S3C2410的中断系统
4.2.3
中断挂起寄存器(INTPND)和 中断源挂起寄存器 (SRCPND)
◦ 如果屏蔽位被设置为1,则相应的SRCPND位会被置1, 而INTPND寄存器不会有变化;如果INTPND被置位, 只要标志I或标志F被清零,就会执行相应的中断服务子 程序。在中断服务子程序中要先向SRCPND中的相应 位写1来清除挂起状态,再用同样的方法来清除 INTPND相应位的挂起状态。 ◦ 注意:可以通过INTPND= INTPND来实现清零,以 避免写入不正确的数据引起错误。
S3C2410的中断系统
4.5.1
◦ 从上面可以看出,每个中断源的中断服务函数指针名是 固定的:pISR+中断源。 ◦ 设中断触发方式,触发方式有5种,有上升沿、下降沿、 双沿、低电平、高电平触发方式,外部中断触发方式在 外部中断控制寄存器(EXTINTn)中设定。如EINT0触 发方式在EXTINT0[2:0] 中设定,[2:0]=000低电 平、001高电平、01X下降沿、10X上升沿、11X双沿 触发,更详细内容见S3C2410.pdf.。
◦ 取消总中断屏蔽和子中断屏蔽,等待中断,如下面实验例程通过 rEINTMASK&=~(1<<11); rINTMASK&=~(BIT_EINT0|BIT_EINT8_23);来实现。
主程序工作
S3C2410的中断系统
4.5.2
中断服务程序工作
◦ 在中断服务程序中,先屏蔽中断,防止其他中断产生干 扰我们中断服务程序的执行; ◦ 执行中断服务程序; ◦ 清中断源挂起寄存器(SRCPND)和中断挂起寄存器 (INTPND); ◦ 取消总中断屏蔽和子中断屏蔽,等待新中断产生; ◦ 中断返回。
◦ 上面已介绍过,S3C2410共有56个中断源,有26个中 断控制器,外部中断EXTIN8~23共用一个中断控制器, 外部中断EXTIN4~7共用一个中断控制器,9个UART 中断分成3组,共用3个中断控制器,ADC和触摸屏共 用一个中断控制器。中断的优先级是由主组号和从ID 号的级别控制,具体见表4-1。 ◦ 中断优先级设置模块如图4-2所示:
中断优先寄存器 (PRIORITY)
S3C2410的中断系统
S3C2410的中断系统
S3C2410的中断系统
4.3
S3C2410中断源
◦ 表4-2所示为S3C2410的56个中断源。在56个中断源 中,有30个中断源提供给中断控制器,其中,外部中 断EINT4~EINT7通过“或”的形式提供一个中断源送 至中断控制器,EINT8~EINT23也通过“或”的形式 提供一个中断源送至中断控制器。
S3C2410的中断系统
4.2.5
从上图可以看出,中断优先级产生模块共有7个中断仲裁 器(AIRBITER0~AIRBITER6),每个中断仲裁器是否 使能由寄存器PRIORITY[6:0]决定,每个中断仲裁器下 面有4~6个中断源,这些中断源对应着REQ0~REQ5这6 个优先级。 每个中断仲裁器可以控制6个中断请求的优先顺序 (ARB_MODE),仲裁器和中断请求的优先顺序如表4-1 示: 其中,REQ 0中断优先级总是最高的,REQ5中断优先级 总是最低的。
S3C2410的中断系统
4.2.4
中断屏蔽寄存器(INTMSK)
◦ 当INTMSK寄存器的相应位(屏蔽位)为1时,对应的 中断被禁止;当INTMSK寄存器的屏蔽位为0时,则相 应的中断正常实行。如果一个中断的屏蔽位为1,则该 中断请求不被受理。
S3C2410的中断系统
4.2.5
中断优先寄存器 (PRIORITY)
中断控制专用寄存器
S3C2410的中断系统
4.4.1
IRQ偏移寄存器(INTOFFSET)
◦ 除上面介绍的5个中断控制寄存器以外,还有几个寄存 器与中断控制有关。 ◦ 中断偏移寄存器INTOFFSET给出IRQ模式的中断请求 中被响应的中断的地址(哪个IRQ模式的中断请求被响 应)。
S3C2410的中断系统
第四章 S3C2410的中断系统
S3C2410的处理器中断
S3C2410的中断控制 S3C2410的中断源
S3C2410中断控制专用寄存器
S3C2410中断控制程序编写步骤
本章实验例程
S3C2410的中断系统
S3C2410的处理器中断
◦ S3C2410的中断控制逻辑如图,它可以处理56个中断 源的中断请求。这些中断源可以是来自片内外设的中断, 比如DMA、UART和I2C等;也可以是来自处理器外部 中断输入引脚。
S3C2410的中断系统
S3C2410的处理器中断
◦ INT_ADC A/D转换中断;
◦ 下面的11个中断源通过分支中断控制器来申请使用中断
◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ INT_TC 触摸屏中断; INT_ERR2 UART2收发错误中断; INT_TXD2 UART2发送中断; INT_RXD2 UART2接收中断; INT_ERR1 UART1收发错误中断; INT_TXD1 UART1发送中断; INT_RXD1 UART1接收中断; INT_ERR0 UART0收发错误中断; INT_TXD0 UART0发送中断; INT_RXD0 UART0接收中断。
S3C2410的中断系统
4.5.1
主程序工作
◦ I/O口初始化,有些中断源要通过I/O口向CPU申请中断,如外部 中断0(EXTINT0)通过F口的GPF0、外部中断11(EXTINT11) 通过G口的GPG3向CPU申请中断,此时两个口的控制寄存器 GPFCON和GPGCON的要设置成:GPFCON[1:0]=1,0; GPGCON[7:6]=1,0。具体见下章I/O口介绍。 ◦ 设中断服务函数地址,S3C2410在2410addr.h中定义了40个宏, 设置了系统支持的中断服务函数的指针,设中断服务函数地址就 是把我们编写的中断服务函数的地址(就是中断服务函数的名字) 赋予相应的函数指针。函数指针定义如下:(见课本)
S3C2410的中断系统
4.2.1
◦ 如果CPSR(程序状态寄存器)的F位被设置为1,那么 CPU将不接受来自中断控制器的FIQ(快速中断请求); 如果CPSR程序状态寄存器的I位被设置为1,那么CPU 将不接受来自中断控制器的IRQ(通用中断请求)。因 此,为了使能FIQ和IRQ,必须先将CPSR程序状态寄 存器的F位和I位清零,并且中断屏蔽寄存器INTMSK中 相应的位也要清零。 ◦ 在使用C语言编写控制程序时,CPSR在程序中是不可 见的。F位和I位清零可由中断屏蔽寄存器INTMSK中相 应的位清零自动完成。
S3C2410的中断系统
S3C2410的处理器中断
◦ 当多重中断源请求中断时,硬件优先级逻辑会判断哪一 个中断将被执行;同时,硬件逻辑将会执行位于0x18 (或0x1C)地址处的指令,再由软件编程识别各个中 断源,然后再根据中断源跳转到相应的中断处理程序
S3C2410的中断系统
中断控制
◦ 4.2.1 程序状态寄存器的F位和I位 ◦ 4.2.2 中断模式(INTMOD) ◦ 4.2.3 中断挂起寄存器(INTPND)和中断源挂起寄 存器 (SRCPND) ◦ 4.2.4 中断屏蔽寄存器(INTMSK) ◦ 4.2.5 中断优先寄存器 (PRIORITY)
S3C2410的中断系统
S3C2410的处理器中断
◦ 实际上最初CPU内核只有FIQ和IRQ两种中断,其他中 断都是各个芯片厂家在设计芯片时,通过加入一个中断 控制器来扩展定义的。这些中断根据中断优先级的高低 来进行处理,更符合Fra Baidu bibliotek际应用系统中要求提供多个中断 源的要求。 ◦ 例如,如果定义所有的中断源为IRQ中断(通过中断模 式寄存器设置),并且同时有10个中断发出请求,那 么这时可以通过读中断优先级寄存器来确定哪一个中断 被优先执行
S3C2410的中断系统
4.5
中断控制程序编写步骤
◦ 4.5.1 主程序工作
◦ 4.5.2 中断服务程序工作
◦ 4.5.3 中断服务程序示例
S3C2410的中断系统
4.5.1
主程序工作
◦ 先清除中断源挂起寄存器(SRCPND)和中断挂起寄 存器(INTPND),可用rSRCPND= rSRCPND和 rINTPND=r INTPND来完成; ◦ 设中断模式,这里使用通用中断, rINTMOD=0x00000000;因上电或复位时 rINTMOD是清0的,这步也可以不做。
S3C2410的中断系统
4.4
◦ 在4.2节中已介绍中断控制器有5个,但S3C2410有8 个寄存器与中断有关,有5个专用于中断控制:源挂起 寄存器(SRCPND)、中断模式寄存器(INTMOD)、 中断屏蔽寄存器(INTMSK)、中断优先权寄存器 (PRIORITY)和中断挂起寄存器(INTPND),与中 断有关的寄存器如表4-3所列。 ◦ 中断源发出的中断请求首先被寄存在中断源挂起寄存器 (SRCPND)中,中断模式寄存器INTMOD把中断请 求分为两组:快速中断请求(FIQ)和通用中断请求 (IRQ),中断优先权寄存器(PRIORITY)处理中断 的优先级。
S3C2410的中断系统
4.2.3
中断挂起寄存器( INTPND )和 中断源挂起寄存器 (SRCPND)
◦ S3C2410有两个中断挂起寄存器:中断源挂起寄存器 (SRCPND)和中断挂起寄存器(INTPND)。这两个 寄存器用于指示对应的中断源和中断是否被激活。当中 断源请求中断时,SRCPND寄存器的相应位被置1;当 中断被激活时,INTPND寄存器的相应位被置1。
S3C2410的中断系统
S3C2410的处理器中断
◦ 片内UARTn中断和EINTn是逻辑“或”的关系,它们 共用一根中断请求线。 ◦ 中断控制逻辑(interruption controller logic)的任 务是在片内外围和外部中断源组成的多重中断发生时, 选择其中一个中断,通过FIQ(快速请求中断)或IRQ (通用中断请求)向CPU内核发出中断请求。
程序状态寄存器的F位和I位
S3C2410的中断系统
4.2.2
中断模式(INTMOD)
◦ S3C2410提供了两种中断模式,即FIQ(快速)模式 和IRQ(通用)模式。所有的中断源在中断请求时都要 确定使用那一种中断模式。INTMOD相应位为0,选通 用中断模式;INTMOD相应位为1,选快速中断模式。 上电或复位时INTMOD相应位为0,默认选通用中断模 式。
4.4.2
外部中断控制寄存器(EXTINTn)
◦ EXTINTn配置外部中断的触发类型是电平触发还是边 沿触发以及触发的极性。EXTINT[2 :0]的具体配置 参考数据手册。
S3C2410的中断系统
4.4.3
外部中断屏蔽寄存器 (EINTMASK)
◦ EINTMASK[23:4]分别对应外部中断23~4,该位 等于1,对应外部中断被屏蔽;该位等于0,对应外部 中断被使能,EINTMASK[3 :0〕保留。