历史上的今天
返回首页

历史上的今天

今天是:2024年08月31日(星期六)

2021年08月31日 | LPC2000系列学习笔记5--中断

2021-08-31 来源:eefocus

1.1 中断源

       LPC2000系列的向量中断控制器(VIC)支持32个中断请求输入,也即是支持32个中断源,见表5.1。这32个中断按顺序称为VIC通道0,VIC通道1,…,VIC通道31。


       每一个VIC通道都支持软件中断与硬件中断,即每个中断均可由软件或硬件中断产生,软件中断与对应通道上的硬件中断是逻辑“或”的关系。软件中断可通过置位VICSoftInt寄存器相应位来产生,也可通过置位VICSoftIntClear寄存器相应位来清除。


1.2 三种中断类型

       LPC2000具有3类中断:FIQ、向量IRQ和非向量IRQ。LPC2000系列可通过对VICIntSelect和VICVectCntlx(x=0,1,…,15)这两类寄存器的设置,将以上的32个中断源设置为这三类中断的任何一种。其中,

       快速中断请求FIQ具有最高优先级。建议只分配一个中断请求给FIQ以减少中塅处理程序的延迟。当然,VIC支持多个FIQ中断。


       向量IRQ具有中等优先级。该级别最多可分配32个请求中的16个。32个请求中的任何一个都可以分配到16个向量IRQslot中的任意一个。其中,slot0具有最高优先级,而slot15则为最低优先级。


       非向量IRQ具有最低优先级。


1.3 如何初始化某个中断源为三类中断中的一类

       通过VICIntSelect中断选择寄存器将32个中断请求分配为FIQ或IRQ(包括向量IRQ与非向量IRQ);通过VICVectCntlx(x=0,1,…,15)来选择32个中断请求中的某个为向量IRQ并设定此中断请求为IRQ slotx(x对应于VICVectCntlx中的x)。若某个中断源被设定为IRQ,但却未通过VICVectCntlx使能,则该中断源将被默认为非向量IRQ。


1.4 中断处理过程中断处理过程如下所示:

       初始化:设置中断源为3种中断源之一,设置中断地址,使能中断,然后正常运行用户程序;

       当有IRQ中断产生时,VIC将会根据中断源设置VICVectAddr寄存器为相应中断服务程序的地址,切换处理器工作模式为IRQ模式,并跳转到IRQ中断入口0x00000018处;

       异常中断向量表中0x00000018处使用“LDR PC, [PC, #-0xFF0]”,使得程序跳转到(0x00000018+8-0x00000FF0=0xFFFFF030)存储器处保存的地址。0xFFFFF030是VICVectAddr寄存器地址。也即是说:通过该指令,程序跳转到VICVectAddr寄存器所指向的中断服务程序的地址;

       中断服务程序执行相应的中断处理,清除中断。建议用__irq关键字定义中断服务程序;

       中断服务完成后,即可返回原中断点。返回时要同时切换处理器工作模式。


       注意:退出中断前,一定要对VICVectAddr寄存器写0,通知VIC中断结束;建议用__irq关键字定义中断服务程序,这样的话,该函数将自动切换处理器工作模式,但该函数不能返回参数或者数值。


1.5 IRQ中断

       IRQ中断有向量IRQ和非向量IRQ中断两种类型,当IRQ中断产生时:

       若是向量IRQ中断,由于之前VIC已经将最高优先级请求的IRQ服务程序地址VICVectAddrx(x=0,1,…,15)装入VICVectAddr,故程序跳入该中断服务程序继续执行。

       若是非向量IRQ中断,VIC提供默认服务程序地址VICDefVectAddr,IRQ中断入口程序可通过读取VIC的向量地址寄存器VICVectAddr来取得该地址,然后跳转到相应服务程序继续执行。该默认服务程序由所有非向量IRQ公用,默认服务程序可读取IRQ状态寄存器以确定哪个IRQ被激活。


1.6 关于外部中断

       外部中断的设置除了与上述各种寄存器有关外,还与EXTINT、EXTWAKE、EXTMODE和EXTPOLAR等寄存器相关。


1.7 举例

1. 初始化外部中断3(EINT3)为非向量中断,并设置为电平触发模式,然后等待外部中断。

    PINSEL1 = 3<<8;                               // 设置管脚连接,P0.20设置为EINT3

    EXTMODE = 0x00;                                         // 设置EINT3中断为电平触发模式

    /* 打开EINT3中断(使用非向量IRQ) */

    VICIntSelect = 0x00000000;               // 设置所有中断分配为IRQ中断

    VICDefVectAddr = (int)IRQ_Eint3;             // 设置中断服务程序地址

    EXTINT = 1<<3;                                      // 清除EINT3中断标志

    VICIntEnable = 1<<17;                    // 使能EINT3中断,EINT3在Bit17上


2. EINT3的中断服务子程序

void   __irq IRQ_Eint3(void)   { 

/*

用户添加

*/

    /* 等待外部中断信号恢复为高电平(若信号保持为低电平,中断标志会一直置位) */

    while( (EXTINT&1<<3)!=0 )           { 

        EXTINT = 1<<3;          // 清除EINT3中断标志,1<<3 等价于 0x08

    }

   VICVectAddr = 0;                                // 向量中断结束

}   


推荐阅读

史海拾趣

CHINFA公司的发展小趣事

在电子产品市场,品质是企业生存和发展的关键。CHINFA公司始终坚持品质至上的生产理念,从原材料采购到生产流程控制,再到产品检验和售后服务,都严格把关。公司引进了先进的生产设备和技术,建立了完善的质量管理体系,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求,使CHINFA公司的产品在市场上赢得了良好的口碑。

Econais公司的发展小趣事

为了加速产品的市场推广和应用,Econais积极寻求与行业内其他优秀企业的合作。XXXX年,Econais与Xively公司达成战略合作,共同为工业、商业和住宅市场提供一站式的物联网解决方案。通过这次合作,Econais的WiSmart Wi-Fi用户能够无缝连接到Xively云,为各种物联网应用提供强有力的支持。

普芯达电子(Chipswinner)公司的发展小趣事

普芯达电子的“中国风”系列产品是公司发展历程中的一个重要里程碑。该系列产品经过严格的质量控制和品质检测,以其优异的性能和可靠的品质赢得了市场的广泛认可。通过一系列的市场推广活动,“中国风”品牌逐渐深入人心,成为国产集成电路产品的代表之一。同时,普芯达电子还通过不断创新和优化产品,满足了客户日益增长的需求,进一步巩固了市场地位。

Crocus Technology公司的发展小趣事

在成立初期,Crocus Technology专注于IP存储模块的研发与销售。这一时期,公司通过不断的技术创新和市场调研,成功开发出了一系列具有竞争力的产品。这些产品不仅满足了市场对高性能存储解决方案的需求,还为公司积累了宝贵的市场经验和客户资源。

CDI-DIODE公司的发展小趣事

在电子行业的早期,CDI-DIODE公司以其精湛的技术研发能力崭露头角。公司通过不断投入研发,成功开发出一款高效能、低成本的二极管产品,迅速占领了市场份额。这一技术突破不仅提升了公司的竞争力,也为整个电子行业带来了革命性的变化。

DYMO公司的发展小趣事

DYMO公司成立于20世纪XX年代,由发明家XXX创立。XXX先生对标签打印技术的潜力有着深刻的洞察,他相信这项技术将极大地提高办公效率。他带领团队研发了第一款便携式标签打印机,这款产品以其易用性和便携性迅速赢得了市场的认可。DYMO公司的成功,从创始人XXX的远见和决心开始。

问答坊 | AI 解惑

微型单片机

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 各位大虾,烦请帮我解决一个关于单片机的问题,在这里先谢谢了!1。能否做成长度小于10mm,宽度小于8mm的单片机?2。是否有价格低于3元的单片机?这个单片机能控制三个元件的5种状态即可!我是 ...…

查看全部问答>

fifo

大家都在论坛上发一些fifo的论文 可是在实际设计中,怎么用? 例如:我现在要用FPGA设计一个东西 我要用一个异步fifo 可是我不可能自己设计啊 我该怎么做 是要用IP核吧 怎么用…

查看全部问答>

AT91SAM9261 65x45mm核心板

本人用四层板画滴,有需要PCB的找我. [ 本帖最后由 青叶漂零 于 2009-4-9 11:53 编辑 ]…

查看全部问答>

这个东东是串口转并口用的吗?具体怎么使用呢?

1) 这个东东是串口转并口用的吗? 2) 具体是在什么场合使用呢? 3) 如何使用呢? …

查看全部问答>

打印驱动的问题打印机的Form是不是必需的?

是这样的,我做了打印机的驱动,然后在“画笔”中打印,发现DrvEnablePDEV进去了,可是立马又调用了DrvDisablePDEV,连DrvStartDoc都没有进去,是不是因为没有AddForm导致的,还会不会有其它的问题导致这种现象?我非常渴望大家的意见。…

查看全部问答>

老师给的一个任务,开始就遇到麻烦了,请教大家如何解决呢?关于ceconfig.h的

老师拿来一个程序让我修改,是用在手机上一个软件的算法,我在编译原代码的时候发现VC++6.0出错,提示没有cecongfig.h的头文件。小弟没有搞过嵌入式开发,上网一搜才知道是windous ce 下设置环境变量的头文件。 现在问题是,我的机子又不是用windo ...…

查看全部问答>

请教:RS485通讯时用到MAX3485,它的作用是什么?

RT,请教:RS485通讯时用到MAX3485,它的作用是什么?…

查看全部问答>

请问在那里设置签名

请问在那里设置签名…

查看全部问答>

请教这个反相放大器的相移计算

大家好: 原理图的反相放大器在输入信号是 50KHZ,幅值 6.8Vp-p 时,Vout 的 幅值 也会是 6.8Vp-p,但相位超前 90度,我试着分析结果如下: 首先计算 C1 和 C2 的容抗,频率为 50KHZ,代入公式 Xc = 1 / 2Πfc 得 XC1=3.18Ω,XC2=3.18KΩ ...…

查看全部问答>

anananjjj的Beaglebone外围电路设计周计划

没想到16个人里会有我!! 还是那句话,我参加这个活动就是为了和厉害的牛人学习东西!不强求会被选上,无论结果怎样我都要把各位大侠的经验和知识学习到!持续关注这个活动,希望各位大侠能够不吝解答我的各种疑问!最后祝我们的论坛越办越好!加 ...…

查看全部问答>