您的位置 首页 观点

LPC2000系列的向量中止控制器(VIC)

LPC2000系列的向量中断控制器(VIC)支持32个中断请求输入,也即是支持32个中断源。这32个中断按顺序称为VIC通道0,VIC通道1,…,VIC通道3

LPC2000系列向量中止控制器VIC)支撑32个中止恳求输入,也便是支撑32个中止源。这32个中止按次序称为VIC通道0,VIC通道1,…,VIC通道31(实际上只运用了18个其他的预留)

每一个VIC通道都支撑软件中止与硬件中止,即每个中止均可由软件或硬件中止产生,软件中止与对应通道上的硬件中止是逻辑“或”的联系。软件中止可经过置位VICSoftInt寄存器相应位来产生,也可经过置位VICSoftIntClear寄存器相应位来铲除。

LPC2000具有3类中止:FIQ、向量IRQ和非向量IRQ。LPC2000系列可经过对VICIntSelect和VICVectCntlx(x=0,1,…,15)这两类寄存器的设置,将以上的32个中止源设置为FIQ和IRQ中止的任何一种(向量IRQ和非向量IRQ和在一同)。其间,快速中止恳求FIQ具有最高优先级。主张只分配一个中止恳求给FIQ以削减中止处理程序的推迟。当然,VIC支撑多个FIQ中止。

向量IRQ具有中等优先级。该等级最多可分配32个恳求中的16个。32个恳求中的任何一个都能够分配到16个向量IRQslot中的恣意一个。其间,slot0具有最高优先级,而slot15则为最低优先级。

非向量IRQ具有最低优先级。一般也只分配一个中止源。

VIC中止设置过程:

在主程序中:

1、设置VICIntSelect

经过VICIntSelect中止挑选寄存器将32个中止恳求分配为FIQ或IRQ(包含向量IRQ与非向量IRQ)

相应位为1是FIQ,为0是IRQ。

例如:VICIntSelect = 0x00000000,设置一切中止都是IRQ

2、设置VICVectCntlx(仅关于IRQ,FIQ不需要此设置)

经过VICVectCntlx(x=0,1,…,15)来挑选32个中止恳求中的某个为向量IRQ并设定此中止恳求为IRQ slotx(x对应于VICVectCntlx中的x)。若某个中止源被设定为IRQ,但却未经过VICVectCntlx使能,则该中止源将被默以为非向量IRQ。

例如:VICVectCntl0 = 0x20 | 15,设置EINT1为向量中止,运用Slot0。其间0x20是由于VICVectCntlx寄存器第六位是使能,15是经过查周建功那本书P208页的表得到的EINT1的VIC通道号。

3、设置VICVectAddrx(仅关于IRQ,FIQ不需要此设置)

当有IRQ中止产生时,VIC将会依据中止源设置VICVectAddr寄存器为相应中止服务程序的地址,切换处理器作业形式为IRQ形式,并跳转到IRQ中止进口0x00000018处;

异常中止向量表中0x00000018处运用“LDR PC, [PC, #-0xFF0]”,使得程序跳转到(0x00000018+8-0x00000FF0=0xFFFFF030)存储器处保存的地址。0xFFFFF030是VICVectAddr寄存器地址。也便是说:经过该指令,程序跳转到VICVectAddr寄存器所指向的中止服务程序的地址。

例如:VICVectAddr0 = (uint32)EINT1_Exception,设置EINT1中止地址。EINT1一般是中止服务程序函数名即服务中止服务程序的首地址,前面要用(uint32)强制类型转化。

4、设置VICDefVectAddr(当都设置为向量IRQ时能够没有这个)

若对错向量IRQ中止,VIC供给默许服务程序地址VICDefVectAddr,IRQ中止进口程序可经过读取VIC的向量地址寄存器VICVectAddr来获得该地址,然后跳转到相应服务程序持续履行。该默许服务程序由一切非向量IRQ共用,默许服务程序可读取IRQ状况寄存器以确认哪个IRQ被激活。

例如:VICDefVectAddr = (uint32)Default_Entry,设置非向量中止地址。如果在办理向量中止的VICVectCntl0~15和VICVectAddr0~15中没有设置某一个中止EINTx则此EINTx中止产生时,要进入非向量中止处理程序Default_Entry。

5、设置VICIntEnable使能

例如:VICIntEnable = 0x00018000,使能EINT1和EINT2。由于EINT1和EINT2的VIC通道号分别为15和16,所以15和16两方位一将EINT1和EINT2使能。

在中止服务程序中:

1、中止处理程序。用户自己编写的完成某种功用的中止程序

2、铲除相应的中止标志,以呼应下一次中止,并切换处理器作业形式。主张用__irq关键字界说中止服务程序,这样的话,该函数将主动切换处理器作业形式,但该函数不能回来参数或许数值。

3、退出中止前,必定要对VICVectAddr寄存器写0,告诉VIC中止完毕

详细FIQ、向量IRQ和非向量IRQ的详细设置过程不完全相同

1、快速中止FIQ

⑴在主程序中:

1、在VICIntSelect中将中止分配为FIQ中止;

2、在VICIntEnable中使能外设中止。

⑵中止服务程序中:

1、中止处理程序;

2、铲除相应的中止标志,以呼应下一次中止。

2、向量IRQ

⑴主程序

1、在VICIntSelect中将中止分配为IRQ中止;

2、在VICVectCntlx中分配中止通道(优先级);

3、在VICVectAddrx中设置中止服务程序的地址;

4、经过VICIntEnable使能外设中止。

⑵中止服务程序

1、中止处理;

2、铲除相应的中止标志,以呼应下一次中止;

3、对VICVectAddr寄存器履行写操作(一般为0x00),完毕向量中止。

3、非向量IRQ

⑴主程序

1、在VICDefVectAddr中设置中止服务程序的地址;

2、经过VICIntEnable使能外设中止。

⑵中止服务程序

1、中止处理;

2、铲除相应的中止标志,以呼应下一次中止;

3、对VICVectAddr寄存器履行写操作(一般为0x00),完毕向量中止。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部