VIC中断控制
扫描二维码
随时随地手机看文章
ARM7比较难理解和控制的就是中断控制,把自己找的一些资料写上来。
1、 快速中断FIQ
⑴在主程序中:
① 在VICIntSelect中将中断分配为FIQ中断;
② 在VICIntEnable中使能外设中断。
⑵中断服务程序中:
① 中断处理;
② 清除相应的中断标志,以响应下一次中断。
2、 向量IRQ
⑴主程序
① 在VICIntSelect中将中断分配为IRQ中断;
② 在VICVectCntlx中分配中断通道(优先级);
③ 在VICVectAddrx中设置中断服务程序的地址;
④ 通过VICIntEnable使能外设中断。
⑵中断服务程序
① 中断处理;
② 清除相应的中断标志,以响应下一次中断;
③ 对VICVectAddr寄存器执行写操作(通常为0x00),结束向量中断,以更新硬件优先级。
3、 非向量IRQ
⑴主程序
① 在VICDefVectAddr中设置中断服务程序的地址;
② 通过VICIntEnable使能外设中断。
⑵中断服务程序
①中断处理;
②清除相应的中断标志,以响应下一次中断;
③对VICVectAddr寄存器执行写操作(通常为0x00),结束向量中断,以更新硬件优先级。
初始化
1,设置IRQ/FIQ中断;
2,若是IRQ中断,则可以设置为向量中断并分配中断优先级,否则为非向量IRQ;
3,然后可以设置中断允许
4,以及向量中断对应地址或非向量中断默认地址
IRQ中断时
1,读取向量地址寄存器,跳转到相应代码
2,退出中断时,对向量地址寄存器写0,通知VIC中断结束
当发生中断时,处理器将会切换处理器模式,同时相关的寄器也将会映射
LPC2104的中断管理是由向量中断控制器(VIC)操作的,向量中断控制器具有32个中断请求输入(32个中断通道,但LPC210X只使用了17个通道,即0~16),可将它们设置为FIQ,向量IRQ和非向量IRQ,通过编程不同外设的向量IRQ中断优先级,可实现动态分配调整。非向量IRQ中断优先级最低
相关寄在存器解释如下:
检查中断状态或中断通道
VICIRQStatus:IRQ状态请求标志。置1的位表示对应的通道号中断有效(此通道设置为IRQ,并已使能。只读。
VICFIQStatus:FIQ状态请求标志。同上。
VICRawIntr:所有中断的状态。32个通道的中断请求/软件中断状态(不管是否使能)。只读。
中断通道IRQ或FIQ选择
VICIntSelect:中断选择,即选择IRQ或FIQ中断。置1时表示对应通道设置为FIQ。读/写
中断使能及软件中断
VICIntEnable:中断使能。置1时表示对应通道使能,否则为禁能。读/写。
VICIntEnclr:中断使能清零。置1时清除对应通道使能标志。只写。
VICSoftInt:软件中断设置。置1时表示对应通道产生中断。只能通过VICSoftClear清除软件中断标志。读/写
VICSoftClear:软件中断清零。清除相应通道的软件中断标志。只写。
IRQ中断向量
VICVectAddr:向量中断地址。当发生向量IRQ时,此寄存器是最高优先级IRQ通道的向量地址值。读/写。
IRQ向量原地址
VICDefVectAddr:非向量中断的向量地址。当发生非向量中断时,即将此寄存器值复制到VICVectAddr中。读/写
VICVectAddr0~15:优先级0~15向量中断的向量地址。当有对应优先级向量IRQ中断时,将会把保存的值复制到VICVectAddr中。读/写
向量IRQ中断优先级设置
VICVectCntl0~15:向量控制寄存器0~15,即向量优先级寄存器。可以把各个IRQ中断通道分配到不同的向量控制寄存器中,使其成为向量中断,并具有一定的优先级。读/写。
设置向量中断,即是把中断通道分配到向量IRQ中断优先级寄存器中,当然对应通道必须设置为IRQ中断类型,而不能为FIQ中断类型。在VIC中,FIQ无中断优先级,也无向量地址,一般只分配一个通道为FIQ中断。VICVectCntl0~15寄存器的D5位是控制是否使能此优先级的向量功能,若复位为0,则关闭其向量功能,此向量IRQ变为非向量IRQ。
杂项
VICProtection:保护使能,若最低位为1,则只允许在特权模式下访问VIC寄存器。