打印

LPC2103是怎么进入中断的

[复制链接]
1997|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sfesdm|  楼主 | 2012-2-24 20:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学习LPC2103到中断时,感觉到与51的差别太大,思路转不过弯来,不理解LPC2103产生中断时的过程,按照我的思维,像51要进入中断,有关键字interrupt x来限定,比如串行中断程序

void SerialInt() interrupt 4
{
    if(RI)
    {
        …………
     }


    if(TI)
    {
       …………
    }

}

那发生串行中断产生后,PC的值变为0X0023,在0x0023处有一个跳转指令,跳转到处理串行程序的入口地址……

而LPC2103的中断,在头文件那里,有一段代码
__swi(0x00) void SwiHandle1(int Handle);

#define IRQDisable() SwiHandle1(0)
#define IRQEnable() SwiHandle1(1)
#define FIQDisable() SwiHandle1(2)
#define FIQEnable() SwiHandle1(3)

在程序当中,如果要使能IRQ中断,就直接使用IRQEnable() ;
然后有个函数void __irq Eint0IRQ(void){…………}

问:
__swi(0x00) void SwiHandle1(int Handle);是什么意思呢?
__irq是相当于51的interrupt 4之类的中断声明吗?如果是,那__swi我是不是可以理解为软件中断声明呢,那SwiHandle1(1)又怎么会跟IRQ挂上钩呢?
望各位大虾不吝赐教,谢谢了!!!

相关帖子

沙发
_Justin| | 2012-2-26 11:20 | 只看该作者
显然__irq不是相当于interrupt 4之类的~~
我用过LPC2106,应该和2103是一个内核~~
没怎么看懂你说的,可能是因为我也没涉及的启动文件吧,呵呵,我也就是用Proteus仿真了做了做硬件~~
这么说吧,NXP的单片机呢,中断是这样设置的
1.首先就是端口初始化,设置I/O工作模式~~
2.然后设置I/O的方向(如果你有用到GPIO,如果没用到那就不用这个了,因为你如果端口是用到了第二功能,I/O口的方向是器件自动设置的,不需要人工干涉~~)
3.再来就是VICIntSelect中断选择寄存器进行配置(IRQ或者FIQ中断)~~
4.紧接着就是中断使能了就是配置VICIntEnable这个寄存器(中断向量号呗)~~
5.将你所用到的中断的通道分配给IRQ Slotx(这里假设设置为IRQ中断,分配优先级)~~
6.对VICVectAddr进行赋值(就是你说的__irq,用来实现中断的转移)~~
过程是这样,那你说的如何进入中断,貌似就是根据自己配置的来进入吧~~
具体我也不太清楚哎,呵呵,用的比较少~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

346

帖子

3

粉丝