• LPC2138微控制器之VIC


    第四章 VIC(Vectored Interrupt Controller)

    中断源

    LPC2138微控制器使用ARM7 TDMI-S核和ARM PrimeCell VIC,支持32个中断请求输入。

    32个中断请求输入分为三类:

    优先级别FIQ > Vectored IRQ > Non-Vectored IRQ。32个中断输入请求中,任意(最多16个)可以配置为任意Vectored IRQ,其中Vectored IRQ 0~15优先级从高到低。

    1)FIQ

    VICIntSelect寄存器中对应位置1时,对应中断源被分类为FIQ,反之为为IRQ。

    当多个FIQ被触发时,VIC ORs(或运算) 这些中断请求,直接发送给ARM核,FIQ ISR随后读取VICFIQStatus寄存器,判断FIQ中断源。

    如果只有一个FIQ被触发,则ARM核直接执行FIQ ISR。

    2)最多16个Vectored IRQ

    每个Vectored IRQ有一个独享的VICVectCntl寄存器(配置中断源)和VICVectAddr寄存器(配置中断向量)。

    3)Non-Vectored IRQ

    所有Non-Vectored IRQ共享一个VICDefVectAddr寄存器,当中断被触发时,VICVectAddr寄存器自动加载VICDefVectAddr寄存器值,CPU跳转到该中断向量,然后通过读取VICIRQStatus寄存器判断具体的中断源。

    中断和中断向量

    中断包括硬件中断IRQ和FIQ,软件中断SWI。

    中断向量是指中断服务函数(ISR)在内存中的地址。

    中断被触发之后,CPU会暂停当前正在执行的任务,进行中断上下文切换,跳转到对应的中断向量执行ISR。其处理过程如下图:

    1)用户程序正常执行

    2)中断被触发

    3)VIC将中断对应的中断向量加载到VICVectAddr寄存器

    4)CPU跳转到异常向量表中IRQ或者FIQ处

    5)执行指令跳转到VICVectAddr寄存器指向的地址(即ISR所在地址)

    6)ISR执行完毕,继续执行用户程序

    从上面可以看出,CPU只用区分是FIQ还是IRQ,而不负责判断具体是哪种中断源,具体判断是哪种中断源以及对应的中断向量由VIC代劳。

    中断源

     

    寄存器描述

    VICSoftInt和VICSoftIntClear寄存器主要是调试用,软件主动触发对应的中断,实际上物理上没有中断事件产生

    VICRawIntr寄存器记录原始中断状态

    VICIntEnable和VICIntEnClear寄存器用来使能和去使能中断

    VICIntSelect寄存器用来配置对应中断源为FIQ或者IRQ

    VICIRQStatus和VICFIQStatus寄存器用来记录中断状态

    VICVectCntl0~15和VICVectAddr0~15寄存器用来配置16个Vectored IRQ

    VICDefVectAddr寄存器用来保存Non-Vectored IRQ的中断向量

    VICVectAddr寄存器只读,ARM核从该寄存器读取中断向量

    VICProtection寄存器用来设置中断访问权限

    外部中断

    32个中断源中,包括EIN0~3四个外部中断源,由以下寄存器配置

  • 相关阅读:
    私活。
    sql server 模拟数组【转】
    Updlock 与 Holdlock
    连上交换机后电脑无法上网
    linux的发展
    MySQL5.7中,用root用户登陆不进去数据库,报以下错误,然后重新修改了密码,好了。
    nginx反响代理tomcat配置ssl
    tomcat日志的切割脚本
    重启nginx报错:[error] invalid PID number "" in "/application/nginx-1.13.3/logs/nginx.pid"
    数据盘的挂载
  • 原文地址:https://www.cnblogs.com/justin-y-lin/p/12324928.html
Copyright © 2020-2023  润新知