理论教育 VIC使用注意事项-基于Proteus和IAREWARM

VIC使用注意事项-基于Proteus和IAREWARM

时间:2023-11-03 理论教育 版权反馈
【摘要】:VIC使用中需要注意以下几点:1)如果在片内RAM中运行用户代码并且应用程序需要使用中断,那么必须将异常向量重新映射到片内Flash地址0x00000000。3)中断服务程序执行完毕后,对外设中断标志的清零将会对VIC寄存器当中的对应位产生影响。4)为了禁止VIC中断,必须清零VICIntEnClr寄存器中的对应位,该操作使VICIntEnable寄存器的对应位清零。唯一的方法是通过VICIntEnClr禁止VIC中断,来实现中断返回。一旦产生UART0请求,VICVectAddr和VICVectAddr0相同。

VIC使用注意事项-基于Proteus和IAREWARM

VIC使用中需要注意以下几点:

1)如果在片内RAM中运行用户代码并且应用程序需要使用中断,那么必须将异常向量重新映射到片内Flash地址0x00000000。这样做是因为所有的异常向量都位于地址0x00000000及以上。通过配置MEMMAP寄存器(位于系统控制模块当中),为用户RAM模式来实现这一点。另外,用户程序代码在编译链接时,应使用异常向量表装载到0x40000000。

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

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

4)为了禁止VIC中断,必须清零VICIntEnClr寄存器中的对应位,该操作使VICIntEnable寄存器的对应位清零。这同样可应用于VICSoftInt和VICSoftIntClear,VICSoftIntClear将会使VICSoftInt中的对应位清零。例如,如果VICSoftInt=0x00000005,并且需要清零bit0,那么执行ICSoftIntClear=0x00000001即可实现该操作。

5)如果看门狗只在溢出或无效喂狗时产生中断,那么无法清除中断。唯一的方法是通过VICIntEnClr禁止VIC中断,来实现中断返回。(www.daowen.com)

下面给出一个多中断设置的例子。

假设UART0和SPI0产生中断请求,它们被分配为向量IRQ(UART0的 优先级高于SPI0),而UART1和I2C产生非向量IRQ,下面就是一种VIC可能的设置:

在任何IRQ请求(SPI0、I2C、UART0或UART1)产生之后,处理器跳转到地址0x00000018执行代码。对于向量和非向量IRQ,可在地址0x18放入下面指令:

该指令将VICVectAddr寄存器中保存的地址装入PC中。

一旦产生UART0请求,VICVectAddr和VICVectAddr0相同。如果产生SPI0请求,中断服务程序的地址保存在VICVectAddr1中。如果UART0和SPI0都没有产生IRQ请求,而UART1和/或I2C产生请求,那么VICVectAddr的内容与VICDefVectAddr相同。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈