附录 S3C2410中断源名称_第1页
附录 S3C2410中断源名称_第2页
附录 S3C2410中断源名称_第3页
附录 S3C2410中断源名称_第4页
附录 S3C2410中断源名称_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中断源名称描述仲裁判决器INT_ADCADC结束中断、触摸屏中断 (2个)ARB5INT_RTCRTC闹钟中断ARB5INT_SPI1SPI1中断ARB5INT_UART0串口0中断(ERR、RXD、TXD) (3个)ARB5INT_IICI2C中断ARB4INT_USBHUSB主机中断ARB4INT_USBDUSB设备中断ARB4Reserved保留ARB4INT_UART1串口1中断(ERR、RXD、TXD) (3个)ARB4INT_SPI0SPI0中断ARB4INT_SDISDI中断ARB3INT_DMA3DMA通道3中断ARB3INT_DMA2DMA通道2中断ARB3INT_DMA1D

2、MA通道1中断ARB3INT_DMA0DMA通道0中断ARB3INT_LCDLCD中断(INT_FrSyn、INT_FiCnt) (2个)ARB3INT_UART2串口2中断(ERR、RXD、TXD) (3个)ARB2INT_TIMER4定时器4中断ARB2INT_TIMER3定时器3中断ARB2INT_TIMER2定时器2中断ARB2INT_TIMER1定时器1中断ARB2INT_TIMER0定时器0中断ARB2INT_WDT看门狗定时器中断ARB1INT_TICKRTC定时中断ARB1nBATT_FLT电池失效中断ARB1Reserved保留ARB1EINT8_23外部中断8_23 (16

3、个)ARB1EINT4_7外部中断4_7 (4个)ARB1EINT3外部中断3ARB0EINT2外部中断2ARB0EINT1外部中断1ARB0EINT0外部中断0ARB0表1 中断控制器支持的5 6个中断源表2 SRCPND寄存器的定义位描述初始状态31确定INT_ADC中断请求。0没有请求;1请求 030确定INT_RTC中断请求。0没有请求;1请求029确定INT_SPI1中断请求。0没有请求;1请求028确定INT_UART0中断请求。0没有请求;1请求027确定INT_IIC中断请求。0没有请求;1请求026确定INT_USBH中断请求。0没有请求;1请求025确定INT_USBD中断

4、请求。0没有请求;1请求024保留023确定INT_UART1中断请求。0没有请求;1请求022确定INT_SPI0中断请求。0没有请求;1请求021确定INT_SDI中断请求。0没有请求;1请求020确定INT_DMA3中断请求。0没有请求;1请求019确定INT_DMA2中断请求。0没有请求;1请求018确定INT_DMA1中断请求。0没有请求;1请求017确定INT_DMA0中断请求。0没有请求;1请求016确定INT_LCD中断请求。0没有请求;1请求015确定INT_UART2中断请求。0没有请求;1请求014确定INT_TIMER4中断请求。0没有请求;1请求013确定INT_TI

5、MER3中断请求。0没有请求;1请求012确定INT_TIMER2中断请求。0没有请求;1请求011确定INT_TIMER1中断请求。0没有请求;1请求010确定INT_TIMER0中断请求。0没有请求;1请求09确定INT_WDT中断请求。0没有请求;1请求08确定INT_TICK中断请求。0没有请求;1请求07确定nBATT_FLT中断请求。0没有请求;1请求06保留05确定EINT8_23中断请求。0没有请求;1请求04确定EINT4_7中断请求。0没有请求;1请求03确定EINT3中断请求。0没有请求;1请求02确定EINT2中断请求。0没有请求;1请求01确定EINT1中断请求。0没

6、有请求;1请求00确定EINT0中断请求。0没有请求;1请求0表3 INTMOD寄存器的定义位描述初始状态31确定INT_ADC中断模式。0IRQ;1FIQ 030确定INT_RTC中断模式。0IRQ;1FIQ029确定INT_SPI1中断模式。0IRQ;1FIQ028确定INT_UART0中断模式。0IRQ;1FIQ027确定INT_IIC中断模式。0IRQ;1FIQ026确定INT_USBH中断模式。0IRQ;1FIQ025确定INT_USBD中断模式。0IRQ;1FIQ024保留023确定INT_UART1中断模式。0IRQ;1FIQ022确定INT_SPI0中断模式。0IRQ;1FIQ

7、021确定INT_SDI中断模式。0IRQ;1FIQ020确定INT_DMA3中断模式。0IRQ;1FIQ019确定INT_DMA2中断模式。0IRQ;1FIQ018确定INT_DMA1中断模式。0IRQ;1FIQ017确定INT_DMA0中断模式。0IRQ;1FIQ016确定INT_LCD中断模式。0IRQ;1FIQ015确定INT_UART2中断模式。0IRQ;1FIQ014确定INT_TIMER4中断模式。0IRQ;1FIQ013确定INT_TIMER3中断模式。0IRQ;1FIQ012确定INT_TIMER2中断模式。0IRQ;1FIQ011确定INT_TIMER1中断模式。0IRQ;

8、1FIQ010确定INT_TIMER0中断模式。0IRQ;1FIQ09确定INT_WDT中断模式。0IRQ;1FIQ08确定INT_TICK中断模式。0IRQ;1FIQ07确定nBATT_FLT中断模式。0IRQ;1FIQ0.6保留05确定IEINT8_23中断模式。0IRQ;1FIQ04确定EINT4_7中断模式。0IRQ;1FIQ03确定EINT3中断模式。0IRQ;1FIQ02确定EINT2中断模式。0IRQ;1FIQ01确定EINT1中断模式。0IRQ;1FIQ00确定EINT0中断模式。0IRQ;1FIQ0表4 INTMSK寄存器的定义位描述初始状态31确定INT_ADC中断屏蔽位。

9、0允许中断;1屏蔽中断 130确定INT_RTC中断屏蔽位。0允许中断;1屏蔽中断129确定INT_SPI1中断屏蔽位。0允许中断;1屏蔽中断128确定INT_UART0中断屏蔽位。0允许中断;1屏蔽中断127确定INT_IIC中断屏蔽位。0允许中断;1屏蔽中断126确定INT_USBH中断屏蔽位。0允许中断;1屏蔽中断125确定INT_USBD中断屏蔽位。0允许中断;1屏蔽中断124保留123确定INT_UART1中断屏蔽位。0允许中断;1屏蔽中断122确定INT_SPI0中断屏蔽位。0允许中断;1屏蔽中断121确定INT_SDI中断屏蔽位。0允许中断;1屏蔽中断120确定INT_DMA3中

10、断屏蔽位。0允许中断;1屏蔽中断119确定INT_DMA2中断屏蔽位。0允许中断;1屏蔽中断118确定INT_DMA1中断屏蔽位。0允许中断;1屏蔽中断117确定INT_DMA0中断屏蔽位。0允许中断;1屏蔽中断116确定INT_LCD中断屏蔽位。0允许中断;1屏蔽中断115确定INT_UART2中断屏蔽位。0允许中断;1屏蔽中断114确定INT_TIMER4中断屏蔽位。0允许中断;1屏蔽中断113确定INT_TIMER3中断屏蔽位。0允许中断;1屏蔽中断112确定INT_TIMER2中断屏蔽位。0允许中断;1屏蔽中断111确定INT_TIMER1中断屏蔽位。0允许中断;1屏蔽中断110确定I

11、NT_TIMER0中断屏蔽位。0允许中断;1屏蔽中断19确定INT_WDT中断屏蔽位。0允许中断;1屏蔽中断18确定INT_TICK中断屏蔽位。0允许中断;1屏蔽中断17确定nBATT_FLT中断屏蔽位。0允许中断;1屏蔽中断16保留15确定IEINT8_23中断屏蔽位。0允许中断;1屏蔽中断14确定EINT4_7中断屏蔽位。0允许中断;1屏蔽中断13确定EINT3中断屏蔽位。0允许中断;1屏蔽中断12确定EINT2中断屏蔽位。0允许中断;1屏蔽中断11确定EINT1中断屏蔽位。0允许中断;1屏蔽中断10确定EINT0中断屏蔽位。0允许中断;1屏蔽中断1表5 PRIORITY寄存器的定义位描述

12、初始状态20:19确定仲裁判决器Arbiter6的优先级顺序。00REQ0-1-2-3-4-5;01REQ0-2-3-4-1-5;10REQ0-3-4-1-2-5;11REQ0-4-1-2-3-5 ( 0和5不变)0018:17确定仲裁判决器Arbiter5的优先级顺序。00REQ1-2-3-4;01REQ2-3-4-1;10REQ3-4-1-2;11REQ4-1-2-30016:15确定仲裁判决器Arbiter4的优先级顺序。00REQ0-1-2-3-4-5;01REQ0-2-3-4-1-5;10REQ0-3-4-1-2-5;11REQ0-4-1-2-3-5 ( 0和5不变)0014:13确

13、定仲裁判决器Arbiter3的优先级顺序。00REQ0-1-2-3-4-5;01REQ0-2-3-4-1-5;10REQ0-3-4-1-2-5;11REQ0-4-1-2-3-5 ( 0和5不变)0012:11确定仲裁判决器Arbiter2的优先级顺序。00REQ0-1-2-3-4-5;01REQ0-2-3-4-1-5;10REQ0-3-4-1-2-5;11REQ0-4-1-2-3-5 ( 0和5不变)0010:9确定仲裁判决器Arbiter1的优先级顺序。00REQ0-1-2-3-4-5;01REQ0-2-3-4-1-5;10REQ0-3-4-1-2-5;11REQ0-4-1-2-3-5 (

14、0和5不变)008:7确定仲裁判决器Arbiter0的优先级顺序。00REQ1-2-3-4;01REQ2-3-4-1;10REQ3-4-1-2;11REQ4-1-2-3006确定仲裁判决器Arbiter6的循环优先级。0优先级不循环;1优先级循环15确定仲裁判决器Arbiter5的循环优先级。0优先级不循环;1优先级循环14确定仲裁判决器Arbiter4的循环优先级。0优先级不循环;1优先级循环13确定仲裁判决器Arbiter3的循环优先级。0优先级不循环;1优先级循环12确定仲裁判决器Arbiter2的循环优先级。0优先级不循环;1优先级循环11确定仲裁判决器Arbiter1的循环优先级。0

15、优先级不循环;1优先级循环10确定仲裁判决器Arbiter0的循环优先级。0优先级不循环;1优先级循环1表6 INTPND寄存器的定义位描述初始状态31确定INT_ADC中断请求未决。0没有请求;1请求 030确定INT_RTC中断请求未决。0没有请求;1请求029确定INT_SPI1中断请求未决。0没有请求;1请求028确定INT_UART0中断请求未决。0没有请求;1请求027确定INT_IIC中断请求未决。0没有请求;1请求026确定INT_USBH中断请求未决。0没有请求;1请求025确定INT_USBD中断请求未决。0没有请求;1请求024保留023确定INT_UART1中断请求未决

16、。0没有请求;1请求022确定INT_SPI0中断请求未决。0没有请求;1请求021确定INT_SDI中断请求未决。0没有请求;1请求020确定INT_DMA3中断请求未决。0没有请求;1请求019确定INT_DMA2中断请求未决。0没有请求;1请求018确定INT_DMA1中断请求未决。0没有请求;1请求017确定INT_DMA0中断请求未决。0没有请求;1请求016确定INT_LCD中断请求未决。0没有请求;1请求015确定INT_UART2中断请求未决。0没有请求;1请求014确定INT_TIMER4中断请求未决。0没有请求;1请求013确定INT_TIMER3中断请求未决。0没有请求;

17、1请求012确定INT_TIMER2中断请求未决。0没有请求;1请求011确定INT_TIMER1中断请求未决。0没有请求;1请求010确定INT_TIMER0中断请求未决。0没有请求;1请求09确定INT_WDT中断请求未决。0没有请求;1请求08确定INT_TICK中断请求未决。0没有请求;1请求07确定nBATT_FLT中断请求未决。0没有请求;1请求06保留05确定IEINT8_23中断请求未决。0没有请求;1请求04确定EINT4_7中断请求未决。0没有请求;1请求03确定EINT3中断请求未决。0没有请求;1请求02确定EINT2中断请求未决。0没有请求;1请求01确定EINT1中

18、断请求未决。0没有请求;1请求00确定EINT0中断请求未决。0没有请求;1请求0实例6-1完成一个S3C2410芯片中断源的中断控制程序的编写,需要完成四部分内容。第一部分的实例在前面已经介绍。下面介绍后三部分内容的编程实例。例程中所用到的一些寄存器常量等在头文件reg2410.h和isr.h中定义,详见附录。这两个头文件必须包含在例程文件中。#include "./inc/reg2410.h"#include "./inc/isr.h"例程中还需要用到下面的结构体。/* 定义结构体*/typedef structInterrupt_func_t In

19、terruptHandlers;void* data;int valid; /设置中断是否有效1=有效0=无效mask_func_t mask;mask_func_t unmask;mask_func_t ack_irq;struct_InterruptFunc;static struct_InterruptFunc InterruptFuncNR_IRQS=NULL,;static void ack_irq(unsigned int irq) rSRCPND = (1 << irq); rINTPND = (1 << irq);static void mask_irq

20、(unsigned int irq) rINTMSK |= (1 << irq);static void unmask_irq(unsigned int irq) rINTMSK &= (1 << irq);(1) 56个中断源中断向量设置/* 56个中断源的中断向量设置函数 */void ISR_IrqHandler(void)unsigned int irq=GetISROffsetClr();/得到中断源的中断号irq=fixup_irq(irq); /计算子中断源的地址偏移if(irq>=NR_IRQS)return;if(InterruptFun

21、cirq.InterruptHandlers=NULL)InterruptFuncirq.ack_irq(irq);/清中断未决位return;/* 调用中断服务程序 */InterruptFuncirq.InterruptHandlers(irq, InterruptFuncirq.data);InterruptFuncirq.ack_irq(irq);/清中断未决位上述程序中,GetISROffsetClr()、fixup_irq()是用来计算中断源号及子中断源地址偏移的函数。程序代码如下:/ GetISROffsetClr()函数int GetISROffsetClr() /计算中断的偏

22、移地址,高位优先 int i,ispr=rI_ISPR,tmp=1<<(MAXHNDLRS-1); for(i=MAXHNDLRS;i>0;i-) if(ispr&tmp) return i-1; tmp>>=1; return -1;/ fixup_irq()函数static unsigned int fixup_irq(int irq) unsigned int ret; unsigned long sub_mask, ext_mask; switch (irq) case IRQ_UART0: sub_mask = rSUBSRCPND &

23、rINTSUBMSK; ret = get_subIRQ(sub_mask, 0, 2, irq); break; case IRQ_UART1: sub_mask = rSUBSRCPND & rINTSUBMSK; ret = get_subIRQ(sub_mask, 3, 5, irq); break; case IRQ_UART2: sub_mask = rSUBSRCPND & rINTSUBMSK; ret = get_subIRQ(sub_mask, 6, 8, irq); break; case IRQ_ADCTC: sub_mask = rSUBSRCPND

24、& rINTSUBMSK; ret = get_subIRQ(sub_mask, 9, 10, irq); break; case IRQ_EINT4_7: ext_mask = rEINTPEND & rEINTMASK; ret = get_extIRQ(ext_mask, 4, 7, irq); break; case IRQ_EINT8_23: ext_mask = rEINTPEND & rEINTMASK; ret = get_extIRQ(ext_mask, 8, 23, irq); break; default: ret = irq; return re

25、t;(2) 中断控制初始化中断控制器初始化程序主要完成具体中断源的中断模式、中断屏蔽位、子中断屏蔽位的设置。根据5.2.3中介绍的寄存器格式,选择对应该中断源的寄存器位是设置为1,还是设置为0。void ISR_Init(void)int irq;/* 设置所有中断源为IRQ模式,并首先屏蔽所有中断源 */rINTMOD = 0x0; /所有中断源为IRQ模式rINTMSK = BIT_ALLMSK; / BIT_ALLMSK =0xffffffffrINTSUBMSK = BIT_SUB_ALLMSK; / BIT_SUB_ALLMSK= 0x7ff/* 初始化结构体中的成员 */for (

26、irq=0; irq < NORMAL_IRQ_OFFSET; irq+) InterruptFuncirq.valid = 1;InterruptFuncirq.ack_irq = ack_irq;InterruptFuncirq.mask = mask_irq;InterruptFuncirq.unmask = unmask_irq;InterruptFuncIRQ_RESERVED6.valid= 0;InterruptFuncIRQ_RESERVED24.valid= 0;InterruptFuncIRQ_EINT4_7.valid= 0;InterruptFuncIRQ_EIN

27、T8_23.valid= 0;InterruptFuncIRQ_EINT0.valid= 0;InterruptFuncIRQ_EINT1.valid= 0;InterruptFuncIRQ_EINT2.valid= 0;InterruptFuncIRQ_EINT3.valid= 0;for (irq=NORMAL_IRQ_OFFSET; irq < EXT_IRQ_OFFSET; irq+) InterruptFuncirq.valid= 0;InterruptFuncirq.ack_irq= EINT4_23ack_irq;InterruptFuncirq.mask= EINT4_2

28、3mask_irq;InterruptFuncirq.unmask= EINT4_23unmask_irq;for (irq=EXT_IRQ_OFFSET; irq < SUB_IRQ_OFFSET; irq+) InterruptFuncirq.valid= 1;InterruptFuncirq.ack_irq= SUB_ack_irq;InterruptFuncirq.mask= SUB_mask_irq;InterruptFuncirq.unmask= SUB_unmask_irq; 上述例程中,对中断源的控制寄存器进行初始设置,是每个I/O端口或部件采用中断方式控制时必须编写的程序。但根据不同的用户需求,寄存器设置的值是不同的。对于初始化结构体中的成员,不是必须的。初始化工作还需要完成中断句柄的设置。下面一段程序是完成该功能的例程。int SetISR_Interrupt(int vector, void (*handler)(int, void*), void* data)if(vector>NR_IRQS | vector<0)return -1;if(!InterruptF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论