【s3c2440】第四课:外部中断

外部中断初始化流程

外部中断的流程图如下:
外部中断流程

此处不考虑中断优先级,涉及的寄存器如下:
寄存器作用
CPSR设置为usr模式,开启中断总开关
GPxCON配置寄存器为外部中断模式
EXTINT设置外部中断触发方式
EXIMASK外部中断屏蔽寄存器
EXITPEND由于EINT4-7、EINT8-23使用的是一个中断源,此寄存器分辨到底是哪一个IO产生的中断
寄存器作用
INTMASK中断屏蔽寄存器
SRCPND产生的所有中断的标志
INTPND正在处理的中断的标志
INTOFFSET正在处理的中断的编号
外部中断配置

一、初始化中断

  1. 将系统的模式(MODE)从SVC(supervise)模式设置位USER模式。将M4~M0设置为b10000即可。
    CPSR寄存器详细描述:cpsr
    各种模式下M4~M0的值:
    mode
  2. 打开中断总开关。CPSR中的第6位表示中断总开关。当I等于0时,irq中断使能。
  3. 初始化外部中断,中断控制器中的INTMSK寄存器可以屏蔽各种中断,需要解除外部中断的屏蔽。INTMSK的默认值为0xFFFFFFFF。0表示使能中断,1表示屏蔽中断。
    INTMSK寄存器详细信息:
INTMSKBit DescriptionInitial State
INT_ADC[31]0 = Service available, 1 = Masked 1
INT_RTC[30]0 = Service available, 1 = Masked 1
INT_SPI1[29]0 = Service available, 1 = Masked 1
INT_UART0[28]0 = Service available, 1 = Masked 1
INT_IIC[27]0 = Service available, 1 = Masked 1
INT_USBH[26]0 = Service available, 1 = Masked 1
INT_USBD[25]0 = Service available, 1 = Masked 1
INT_NFCON[24]0 = Service available, 1 = Masked 1
INT_UART1[23]0 = Service available, 1 = Masked 1
INT_SPI0[22]0 = Service available, 1 = Masked 1
INT_SDI[21]0 = Service available, 1 = Masked 1
INT_DMA3[20]0 = Service available, 1 = Masked 1
INT_DMA2[19]0 = Service available, 1 = Masked 1
INT_DMA1[18]0 = Service available, 1 = Masked 1
INT_DMA0[17]0 = Service available, 1 = Masked 1
INT_LCD[16]0 = Service available, 1 = Masked 1
INT_UART2[15]0 = Service available, 1 = Masked 1
INT_TIMER4[14]0 = Service available, 1 = Masked 1
INT_TIMER3[13]0 = Service available, 1 = Masked 1
INT_TIMER2[12]0 = Service available, 1 = Masked 1
INT_TIMER1[11]0 = Service available, 1 = Masked 1
INT_TIMER0[10]0 = Service available, 1 = Masked 1
INT_WDT_AC97[9]0 = Service available, 1 = Masked 1
INT_TICK[8]0 = Service available, 1 = Masked 1
nBATT_FLT[7]0 = Service available, 1 = Masked 1
INT_CAM[6]0 = Service available, 1 = Masked 1
EINT8_23[5]0 = Service available, 1 = Masked 1
EINT4_7[4]0 = Service available, 1 = Masked 1
EINT3[3]0 = Service available, 1 = Masked 1
EINT2[2]0 = Service available, 1 = Masked 1
EINT1[1]0 = Service available, 1 = Masked 1
EINT0[0]0 = Service available, 1 = Masked 1
  1. INTMOD设置中断模式:0: IRQ MODE; 1: FIQ MODE。

二、初始化外部中断

  1. GPxCON寄存器配置引脚为外部中断引脚。
    00 = Input
    01 = Output
    10 = EINT[x]
    11 = Reserved
  2. EXITINTx寄存器配置外部中断触发方式。其中EINT8~EINT12可以设置filter。
RegisterAddressR/WDescription Reset Value
EXTINT00x56000088R/WExternal interrupt control register 0 0x000000
EXTINT10x5600008cR/WExternal interrupt control register 1 0x000000
EXTINT20x56000090R/WExternal interrupt control register 2 0x000000
EXTINT0BitDescription
EINT7[30:28]Setting the signaling method of the EINT7. 000 = Low level 001 = High level 01x = Falling edge triggered10x = Rising edge triggered 11x = Both edge triggered
EINT6[26:24]Setting the signaling method of the EINT6. 000 = Low level 001 = High level 01x = Falling edge triggered10x = Rising edge triggered 11x = Both edge triggered
EINT5[22:20]Setting the signaling method of the EINT5. 000 = Low level 001 = High level 01x = Falling edge triggered10x = Rising edge triggered 11x = Both edge triggered
EINT4[18:16]Setting the signaling method of the EINT4. 000 = Low level 001 = High level 01x = Falling edge triggered10x = Rising edge triggered 11x = Both edge triggered
EINT3[14:12]Setting the signaling method of the EINT3. 000 = Low level 001 = High level 01x = Falling edge triggered10x = Rising edge triggered 11x = Both edge triggered
EINT2[10:8]Setting the signaling method of the EINT2. 000 = Low level 001 = High level 01x = Falling edge triggered10x = Rising edge triggered 11x = Both edge triggered
EINT1[6:4]Setting the signaling method of the EINT1. 000 = Low level 001 = High level 01x = Falling edge triggered10x = Rising edge triggered 11x = Both edge triggered
EINT0[2:0]Setting the signaling method of the EINT0. 000 = Low level 001 = High level 01x = Falling edge triggered10x = Rising edge triggered 11x = Both edge triggered

三、查询中断源

  1. SRCPND可以查看当前正在触发中断的所有中断标志。当处理完中断后,需要通过向指定位置写 1 手动清零相应的中断标志。
SRCPNDBitDescription Initial State
INT_ADC[31]0 = Not requested, 1 = Requested 0
INT_RTC[30]0 = Not requested, 1 = Requested 0
INT_SPI1[29]0 = Not requested, 1 = Requested 0
INT_UART0[28]0 = Not requested, 1 = Requested 0
INT_IIC[27]0 = Not requested, 1 = Requested 0
INT_USBH[26]0 = Not requested, 1 = Requested 0
INT_USBD[25]0 = Not requested, 1 = Requested 0
INT_NFCON[24]0 = Not requested, 1 = Requested 0
INT_UART1[23]0 = Not requested, 1 = Requested 0
INT_SPI0[22]0 = Not requested, 1 = Requested 0
INT_SDI[21]0 = Not requested, 1 = Requested 0
INT_DMA3[20]0 = Not requested, 1 = Requested 0
INT_DMA2[19]0 = Not requested, 1 = Requested 0
INT_DMA1[18]0 = Not requested, 1 = Requested 0
INT_DMA0[17]0 = Not requested, 1 = Requested 0
INT_LCD[16]0 = Not requested, 1 = Requested 0
INT_UART2[15]0 = Not requested, 1 = Requested 0
INT_TIMER4[14]0 = Not requested, 1 = Requested 0
INT_TIMER3[13]0 = Not requested, 1 = Requested 0
INT_TIMER2[12]0 = Not requested, 1 = Requested 0
INT_TIMER1[11]0 = Not requested, 1 = Requested 0
INT_TIMER0[10]0 = Not requested, 1 = Requested 0
INT_WDT_AC97[9]0 = Not requested, 1 = Requested 0
INT_TICK[8]0 = Not requested, 1 = Requested 0
nBATT_FLT[7]0 = Not requested, 1 = Requested 0
INT_CAM[6]
EINT8_23[5]0 = Not requested, 1 = Requested 0
EINT4_7[4]0 = Not requested, 1 = Requested 0
EINT3[3]0 = Not requested, 1 = Requested 0
EINT2[2]0 = Not requested, 1 = Requested 0
EINT1[1]0 = Not requested, 1 = Requested 0
EINT0[0]0 = Not requested, 1 = Requested 0
  1. INTPND寄存器可以查看优先级最高的中断标志,当处理完中断后,需要通过向指定位置写 1 手动清零相应的中断标志。
INTPNDBitDescription Initial State
INT_ADC[31]0 = Not requested, 1 = Requested 0
INT_RTC[30]0 = Not requested, 1 = Requested 0
INT_SPI1[29]0 = Not requested, 1 = Requested 0
INT_UART0[28]0 = Not requested, 1 = Requested 0
INT_IIC[27]0 = Not requested, 1 = Requested 0
INT_USBH[26]0 = Not requested, 1 = Requested 0
INT_USBD[25]0 = Not requested, 1 = Requested 0
INT_NFCON[24]0 = Not requested, 1 = Requested 0
INT_UART1[23]0 = Not requested, 1 = Requested 0
INT_SPI0[22]0 = Not requested, 1 = Requested 0
INT_SDI[21]0 = Not requested, 1 = Requested 0
INT_DMA3[20]0 = Not requested, 1 = Requested 0
INT_DMA2[19]0 = Not requested, 1 = Requested 0
INT_DMA1[18]0 = Not requested, 1 = Requested 0
INT_DMA0[17]0 = Not requested, 1 = Requested 0
INT_LCD[16]0 = Not requested, 1 = Requested 0
INT_UART2[15]0 = Not requested, 1 = Requested 0
INT_TIMER4[14]0 = Not requested, 1 = Requested 0
INT_TIMER3[13]0 = Not requested, 1 = Requested 0
INT_TIMER2[12]0 = Not requested, 1 = Requested 0
INT_TIMER1[11]0 = Not requested, 1 = Requested 0
INT_TIMER0[10]0 = Not requested, 1 = Requested 0
INT_WDT_AC97[9]0 = Not requested, 1 = Requested 0
INT_TICK[8]0 = Not requested, 1 = Requested 0
nBATT_FLT[7]0 = Not requested, 1 = Requested 0
INT_CAM[6]0 = Not requested, 1 = Requested 0
EINT8_23[5]0 = Not requested, 1 = Requested 0
EINT4_7[4]0 = Not requested, 1 = Requested 0
EINT3[3]0 = Not requested, 1 = Requested 0
EINT2[2]0 = Not requested, 1 = Requested 0
EINT1[1]0 = Not requested, 1 = Requested 0
EINT0[0]0 = Not requested, 1 = Requested 0
  1. INTOFFSET寄存器保存的是每一个中断对应的序号,当某一类中断发生了的时候,该寄存器保存相应的值。该寄存器不用手动清除。
INT SourceThe OFFSET valueINT SourceThe OFFSET value
INT_ADC31INT_UART215
INT_RTC30INT_TIMER414
INT_SPI129INT_TIMER313
INT_UART028INT_TIMER212
INT_IIC27INT_TIMER111
INT_USBH26INT_TIMER010
INT_USBD25INT_WDT_AC979
INT_NFCON24INT_TICK8
INT_UART123nBATT_FLT7
INT_SPI022INT_CAM6
INT_SDI21EINT8_235
INT_DMA320EINT4_74
INT_DMA219EINT33
INT_DMA118EINT22
INT_DMA017EINT11
INT_LCD16EINT00
  1. 由于EINT4-7、EINT8-23使用的是一个中断源,需要区分到底是哪一个IO触发外部中断。可以使用EINTPEND寄存器区分。需要通过向对应位写 1 手动清除该寄存器的标志。
EINTPENDBitDescriptionReset Value
EINT23[23]It is cleard by writing “1” 0 = Not occur 1 = Occur interrupt0
EINT22[22]
EINT21[21]
EINT20[20]
EINT19[19]
EINT18[18]
EINT17[17]
EINT16[16]
EINT15[15]
EINT14[14]
EINT13[13]
EINT12[12]
EINT11[11]
EINT10[10]
EINT9[9]
EINT8[8]
EINT7[7]
EINT6[6]
EINT5[5]
EINT4[4]
Reserved[3:0]Reserved0000
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值