arm9的中断

GPIO

习惯了stm32GPIO,发现高端处理器arm在这方面反而简单了。

ARM9控制GPIO只有三种寄存器。

 

GPxCON:配置引脚功能,GPACON用一位控制一个GPIO,分别是0为输出引脚,1为输入引脚。GPBCON---GPH/JCON 则用两位控制一个引脚,分别是00表示输入,01表示输出,10表示特殊功能。

 

GPxDAT:当此引脚被设置为输入时,读此引脚可知相应引脚的电平状态是高还是低。当次引脚被设置为输出时,写此引脚可令此引脚输出高电平或者低电平。

 

GPxUP:某位为1时,相应引脚无内部上拉电阻,某位为0时,相应引脚使用内部上拉电阻。

 

相比于stm32的八种输入输出模式,7个寄存器,还不算配置复用的寄存器…..果然…..没有库函数的stm32可怎么活啊。

中断

先说一下irqfiq的区别:

1) fiq拥有更多的bank的寄存器,irq则没有,这意味着irq要用更多的时间去保存现场。

2) fiq的优先级高于irq,所以fiq可以打断irq,但是irq不能打断fiq

3) 只能有一个中断被设置为irq

 

当发生一个中断的时候,arm9核会自动完成如下的事情(arm9工作):

1) 在异常工作模式的连接寄存器R14中保存前一个工作模式的下一条。

2) 将cpsr的值复制到异常模式的spsr

3) 将cpsr的工作模式设为这个异常对应的工作模式。

4) 令pc等于这个异常在异常向量表的地址。

 

中断处理(程序员工作)

1) cpu响应了中断之后,需要保存当前的运行环境(各个寄存器),然后调用中断服务程序(ISR)。

2) 在ISR中读取中断控制器,外设的相关寄存器来判断这是哪一个中断。

3) 清除中断。

4) 最后回复中断程序的运行环境(就是上面保存的各个寄存器),

 

从异常工作模式退出返回之前的工作模式,需要软件完成下列事情(程序员工作):

1) 前面进入异常模式时候,连接寄存器保存了前一个工作模式的下一条指令地址,将它减去一个适当的值后赋给pc

2) 将spsr的值赋值回cpsr

Arm9外部中断:

Arm9的清爽向量表如下,如下,每种异常对应一种运行模式,地址零处为Reset向量:

842584-20160308213924725-661662437.jpg

 

Arm9有60个中断源,其中一级中断有23个。比如EIN4_7属于一级中断源,但是该中断源包含EIN4\EIN5\EIN6\EIN7四个子中断源。

下图是外部中断,包含了中断号,中断引脚,外部中断挂起寄存器,中断屏蔽寄存器,源挂起寄存器。

842584-20160308213933710-1189101385.jpg

 

上面主要说的是外部中断的寄存器,下面确切说一下各个寄存器:

SUBSRCOND寄存器:用来标示中断,主要是处理内部中断,如INT_RXD0INT_TXD0

 

INTSUBMSK寄存器:用来屏蔽SUBSRCOND中所标示的中断。某位被标示为1时,表示该中断被屏蔽。

 

SRCPND寄存器:用来标示中断,包括内部中断和外部中断。

 

INTMASK寄存器:用来屏蔽SRCPND中的中断。

 

INTMOD寄存器:设置FIQ

 

PRIORITY寄存器:设置7个仲裁器的仲裁规则,以达到设置中断优先级的目的。

 

INTPND寄存器:经过中断优先级仲裁器选出优先级最高的中断,这个中断在INTPND寄存器中相应的位被置1,随后cpu进入中断模式处理它。

 

INTOFFSET寄存器:这个寄存器用来查看INTPND寄存器中哪一位被置一。

补:EINTMASK寄存器:用来屏蔽外部中断。

 





转载于:https://www.cnblogs.com/dchipnau/p/5256027.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值