您的位置 首页 ADAS

ARM11—中止—向量中止控制器(VIC)—结合s3c6410

(一)、首先说一下PL192向量中断控制器一个中断控制器是用来处理多个中断源的外围设备,通常包含以下几个特性:1.为每个中断源分配一…

(一)、首先说一下PL192向量中止控制器

一个中止控制器是用来处理多个中止源的外围设备,一般包括以下几个特性:

1.为每个中止源分配一个中止恳求输入端口。为每个中止恳求分配一个中止恳求输出端口,以能衔接到处理器的VIC端口。

其实手册上说的这么多,我感觉其实便是这样的:要确保每个中止都能:

************************************************

中止源——–>PL192 VIC———>处理器VIC端口

************************************************

2.能够用软件屏蔽掉恣意拟定的中止源的中止。

3.可认为每个中止设置优先级。

以上是中止控制器做的工作,可是咱们的软件方还要做:

1.确认恳求服务的中止源。

2.确认中止处理程序的地址。

可是一个向量中止控制器能够在硬件上,把一切的上述功用都完成了,他能够供给当时最高优先级的中止的ISR的开始地址和向量地址。

PL192 VIC和处理器VIC端口的衔接:

处理器能够经过VICVECTADDROUT[31:0]这个端口获取当时中止的ISR,不必向曾经(比方ARM9)那样,选用0x00000018或许

0xffff0018的战略了。可是处理器的VIC端口不支持读 FIQ 的向量地址。

以下是引脚的解说:

IRQACK是由处理器宣布的信号,用来告知VIC:我想读取某某中止的中止处理程序的地址(IRQADDR)

IRQADDRV是由VIC宣布的信号,告知处理器:ISR的地址现已发送,并且有用,你就定心的读吧!

IRQACK和IRQADDRV在VIC和处理器之间完成了一个四次握手的机制。(后边有解说。)

(二)、中止处理函数的退出:

往中止对应的向量地址寄存器里履行写操作。

(三)、处理器和VIC之间的时序:

下面这个图是VIC端口操作时序的比如,状况是这样的:先有了一个 IRQC,后来了一个 IRQB,并且IRQB的优先级比较高。

 

 这个图表解说了根本的处理器和VIC之间根本的握手机制。

 1.IRQC中止恳求宣布,导致PL192 VIC设置处理器的nIRQ为低。

2.处理器得知nIRQ为低,然后初始化一个中止序列。

3.然后就在这要害的时分,忽然来了一个中止IRQB,它告知PL192 VIC,我比IRQC更急!!

4.在B3和B4之间,处理器判别来的这个中止是不是IRQ,假如是则发送IRQACK 信号(高电平)。

5.在B4,PL192 VIC得到IRQACK 高电平信号,然后把IRQADDR改成IRQB的ISR地址。

6.在B6阶段,VIC宣布IRQADDRV信号(置高),IRQADDRV在处理器得到正确的ISR地址之前,一向是高电平,在这期间,就算来个更高优先级的中止要置高!否则IRQB这次中止就

丢掉了。

7.在B8阶段左右,处理器读取IRQADDR的值,正确读取后,就将IRQACK置低,由于他的任务现已完成了!

8.当PL192 VIC发现IRQACK是低电平的时分,it stacks the priority of the IRQB interrupt(这句咱们自己了解吧,应该是保存IRQ的优先级,详细什么用我还不清楚。)然后将

IRQADDRV置低,假如没有更高优先级的中止,他也把nIRQ置高。

9.当处理器得知IRQADDRV是低电平的时分,他就知道他又能够检测nIRQ了,所以假如VIC要停一段时间再将nIRQ置高的时分,有必要确保IRQADDRV是高电平,否则,处理器就一向检测到

有中止,其实是中止源宣布的同一次中止。

咱们写中止程序需求留意的:

**********************************************************************************************************************************************

中止处理程序要确保在程序的终究进行中止的铲除,这样能够确保多个中止源同享一个中止线。别的,中止处理程序要告诉PL192 VIC当时的中止的ISR现已完毕.

原文是这样的:

The clearing of the interrupt is handled in software by the interrupt handling routine,this enable multiple interrupt sources to share a

signal interrupt priority,In addition,the interrupt handling routine must communicate to the VIC that the interrupt currently being handled

is complete,using the memory-mapped or coprocessor-mapped interface,to enable the interrupt masking to be unwound.

**********************************************************************************************************************************************

PL192 VIC是不支持快速中止的,所以s3c6410中止流程图就这样画:

一切的快速中止跑到VCI1,又经过VIC0,来到了TZIC0,终究都由TZIC0一个个的发送到ARM1176了。

下面这个图是中止宣布到被履行的流程图:

这儿涉及到ARM形式的转化。

到了这儿咱们应该清楚中止的发生和中止处理程序的履行的流程了。

注:VE是VIC ENABLE

mrc p15,0,r0,c1,c0,0
orr r0,r0,#(1<<24)
mcr p15,0,r0,c1,c0,0

这样咱们的PL192 V%&&&&&%就能够用了。

今日写到这儿,太累了,今后再写写内部中止(watch dog)和外部中止( key )详细流程。都是根据OK6410,今日的算是弥补下理论知识。

个人认为这些东西对中止的了解挺重要的!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/276935.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部