向量中断控制器(VIC)的操作方法

来源:本站
导读:目前正在解读《向量中断控制器(VIC)的操作方法》的相关信息,《向量中断控制器(VIC)的操作方法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《向量中断控制器(VIC)的操作方法》的详细说明。
简介:向量中断控制器(VIC)具有32 个中断请求输入,可将其编程分为3 类:FIQ、向量IRQ 和非向量IRQ。可编程分配机制意味着不同外设的中断优先级可以动态分配并调整。

1、快速中断FIQ

⑴在主程序中:

VICIntSelect中将中断分配为FIQ中断;

VICIntEnable中使能外设中断。

⑵中断服务程序中:

中断处理;

清除相应的中断标志,以响应下一次中断。

2、向量IRQ

⑴主程序

VICIntSelect中将中断分配为IRQ中断;

VICVectCntlx中分配中断通道(优先级);

VICVectAddrx中设置中断服务程序的地址;

通过VICIntEnable使能外设中断。

⑵中断服务程序

中断处理;

清除相应的中断标志,以响应下一次中断;

VICVectAddr寄存器执行写操作(通常为0x00),结束向量中断,以更新硬件优先级。

3、非向量IRQ

⑴主程序

VICDefVectAddr中设置中断服务程序的地址;

EXTINT外部中断流程

首先使用PINSEL0和PINSEL1来配置相应的I/O口工作模式,设置相应的中断位→设置相应的输入输出→使用VICIntSelect来选择使用FIQ或者IRQ(0)→VICIntEnable中断使用→使用EXTINT设置中断标志,写入1将方位清零→while(1)等等中断发生。

在中断子函数中,首先使用VICIRQStatus读出当前的中断状态→函数功能完成→清除相应中断→设置向量地址寄存器VICVectAddr(当任何分配给向量IRQ Slot的中断请求或软件中断使能,分配为IRQ并声明时,读取该寄存器将返回最高优先级微量地址寄存器中的地址。否则,返回默认微量地址寄存器中的地址。)

#include "config.h"

#define LEDCON 0x00000800

void __irq IRQ_Eint1(void)

{ uint32 i;

i=VICIRQStatus;//读出VICIRQStatus的值

i=IOSET;//读出当前LED2控制值

if((i&LEDCON)==0)//控制LED2控制值

{ IOSET=LEDCON;

}

else

{ IOCLR=LEDCON;

}

while((EXTINT&0x02)!=0)//等待外部中断信号恢复为高电平

{ EXTINT=0x02;//清除EINT1中断标志

}

VICVectAddr=0x00;

}

int main(void)

{

PINSEL0=0x20000000;//这里选择为外部中断1,

PINSEL1=0x00000000;

IODIR=LEDCON;//控制引脚输入输出

IOSET=LEDCON;//点亮相应的灯

IOCLR=LEDCON;//熄灭相应的灯,但上面那一句有什么作用,好象多余呀

VICIntSelect=0;//中断功能选择

VICIntEnable=0x00008000;//在某一位上使能中断

VICVectCntl1=0x 2F;

VICVectAddr1=(int)IRQ_Eint1;

EXTINT=0x07;

while(1);

}

说明:VICVectAddr(当任何分配给向量IRQ Slot的中断请求或软件中断使能,分配为IRQ并声明时,读取该寄存器将返回最高优先级微量地址寄存器中的地址。否则,返回默认微量地址寄存器中的地址。)

VICVectCntl每一个寄存器控制16个微量IRQ Slot中的一个,Slot0优先级最高。在VICVectCntl寄存器中禁止一个微量IRQ Slot不会禁止中断本身,中断只是变为非向量的形式。为1表示向量IRQ使能,

通过VICIntEnable使能外设中断。

⑵中断服务程序

①中断处理;

②清除相应的中断标志,以响应下一次中断;

③对VICVectAddr寄存器执行写操作(通常为0x00),结束向量中断,以更新硬件优先级。

提醒:《向量中断控制器(VIC)的操作方法》最后刷新时间 2024-03-14 01:12:51,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《向量中断控制器(VIC)的操作方法》该内容的真实性请自行鉴别。