快速学Arm(21)--中断向量VIC控制器VIC[3]

发布者:九九归一74最新更新时间:2021-01-19 来源: eefocus关键字:Arm  中断向量  VIC  控制器 手机看文章 扫描二维码
随时随地手机看文章

说是快速学习,其实也不快,学这东西想快起来看了不太容易.

有很多中中断源都有可能产生中断,对于2400大概有下面的中断源

   中断源                       VIC通道号

   WDT                           0

   --保留给软件中断              1

    ARM Core                     2

    ARM Core                     3

   TIMER0                       4

   TIMER1                       5

    UART0                        6

   UART1                        7

   PWM0,PWM1                    8

    I2C0                         9

    SPI,SSP0                     10

    SSP1                         11

    PLL                           12

    RTC                          13

    系统控制(外部中断)           14,15,16,17

   ADC0                         18

   I2C1                         19

   BOD                          20

   Ethernet                      21

   USB                          22

   CAN                          23

   SD/MMC                       24

    GP DMA                       25

    Timer 2                      26

    Timer 3                      27

    UART 2                       28

    UART 3                       29

   I2C2                         30

   I2S                          31

    快速学Arm(21)--中断向量VIC控制器VIC[3]
我们先不来接触那些真正的接口,因为接触到真正接口的时候,如果没有这些概念,可能会很难理解.先这样浏览一下相关的知识,然后一点点的往更细致去研究,可能对理解问题更有好处.


<微控制器基础与实战>>中,对VIC使用有这样的一些事项:


如果在片内RAM当中运行代码并且引用程序需要调用中断,那么必须将中断向量重新映射到Flash地址0x0.这样做是因为所有的异常向量都位于地址0x0及以上.通过将寄存器MEMMAP(位于系统控制模块中)配置为RAM模式来实现这样一点.


虽然可以选择多个中断源来产生FIQ请求,但是只有一个专门的中断服务程序来服务响应所有的FIQ请求.因此,如果分配为FIQ的中断多于一个,FIQ中断服务程序就必须读取VICFIQStatus的内容来决定如何处理中断请求.不过还是建议只讲一个中断分配为FIQ,多个FIQ中断源会增加中断延迟.


在中断服务程序执行完后,对外设中断标志的清零会对VIC寄存器(VICRawIntr,VICFIQStatus,VICIRQStatus)当中的对应位产生影响.另外为了能够服务下次中断,必须在中断返回之前对VICVectAddr寄存器执行写操作.该写操作将清零内部中断优先级硬件当中对应的中断标志.


通常情况下要禁止VIC中断,必须清零VICIntEnClr寄存器中的对应位,该操作时VICIntEnable寄存器对应位清零.这同样应用于VICSoftInt,VICSoftIntClear.VICSoftIntClear将会是VICSoftInt中对应位清零.例如:VICSoftInt=0x0000 0005并且必须将bit0清零,则使用VICSoftIntClear=0x0000 0001即可实现操作.在执行VICSoftIntClear=0x0000 0001之前,要先执行VICSoftIntClear=0x0000 0000.记住.

 

VICIntSelect寄存器按照上面图的顺序来选择哪一个是IRQ,哪个是FIQ,但对应的位为1时此中断为FIQ,否则则是IRQ,VICIntEnable也是按照这个顺序来决定哪个中断可以使能.


在21xx系列中有向量控制寄存器VICVectCntl0~VICVectCntl15分别代表16个优先级,即VICVectCntl0代码slot0优先级(最高优先级),VICVectCntl1代表slot1优先级.在VICVectCntl寄存器中,低五位代表的是哪一个中断,例如,如果VICVectCntl0=0x0F,则从上面图中的顺序知道,ENT1即外部中断1的优先级为最高.VICVectCntl中的第6位代表IRQ是否使能,1代表使能.而在2400系列中,使用VICVectPriority0~VICVectPriority31来装载上图中对于优先级.例如如果VICVectPriority31装载的数字为0x12,即十进制的18,按上图的顺序,则AD0的优先级为31,即最低优先级.VICVectAddr0~VICVectAddr15(在2400系列中是31),每个寄存器是与VICVectCntl(VICVectPriority)向对应的.如果没有设置这组寄存器,则在210x系列中使用VICDevVectAddr寄存器,在2400中暂时没找到对应的寄存器,不过没关系,我们后面研究得时候也许会涉及到,到时候再说.


关键字:Arm  中断向量  VIC  控制器 引用地址:快速学Arm(21)--中断向量VIC控制器VIC[3]

上一篇:快速学Arm(22)--lpc2300系统时钟
下一篇:快速学Arm(20)--中断向量控制器VIC[2]

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved