打印
[ZLG-ARM]

有关中断问题

[复制链接]
1813|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangbingg|  楼主 | 2008-3-27 12:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问周工:连接到向量中断控制器的中断源中,RTC中断的计数器增加中断和报警中断们的VIC通道号均为13,如果对3.27RTC实验1稍做改动:即实现在秒中断的同时,设置报警中断(且不用实验上的查询中断标志的方式),因为它们的中断号相同,书上又说不要将相同的中断编号分配给多个使能的向量IRQslot。
那么如果用中断方式同时实现这两个功能呢???
    请周工明细,谢谢!!

相关帖子

沙发
zlgarm| | 2008-3-27 14:25 | 只看该作者

huangbingg,您好!

进入中断后,可以通过查询寄存器ILR来确定RTC产生的是什么中断。

                                                                                                     On duty: zlgarm_Zhangxiaomeng

使用特权

评论回复
板凳
txmac| | 2008-3-27 14:45 | 只看该作者

上面讲了是不用ILR查询的方式

用的是:void __irq IRQ_RCTA(void)  用来报警
       void __irq IRQ_RCTC(void)  用来秒计数
 但因为中断号为同一个中断号13,做的时候只能做优先级高的一个中断。。。实现这两个功能,请问该如何解决呢???

使用特权

评论回复
地板
txmac| | 2008-3-27 14:56 | 只看该作者

顶。。。。。

使用特权

评论回复
5
zlgarm| | 2008-3-27 15:26 | 只看该作者

txmac,您好!

无法实现。

                                                                                            On duty: zlgarm_Zhangxiaomeng

使用特权

评论回复
6
txmac| | 2008-3-27 15:44 | 只看该作者

那该如何解决来实现这两个功能呢?在计数的同时,实现报警???急。。。。。。。。。。。

使用特权

评论回复
7
zlgarm| | 2008-3-27 16:25 | 只看该作者

txmac,您好!

1、RTC所有中断共用一个中断号,所以RTC中断服务程序应该也只有一个;
2、进入中断后查询ILR寄存器,判断是哪中寄存器;如果为秒中断,那么计数加1,并清除秒中断;如果为报警中断,那么执行报警操作,并清除报警中断;
3、CPU只有一个,有先后是必然的。
                                                                                               On duty: zlgarm_Zhangxiaomeng

使用特权

评论回复
8
huangbingg|  楼主 | 2008-3-27 20:17 | 只看该作者

再追究下:

谢楼上周工,如你所说的,可能有两个问题:

1.如果两个同时一起来的,在中断程序里就要由我决定哪个先做哪个后做吧?这样如果我通过串口发液晶屏显示时,如果有报警产生,显示时间肯定会稍有延时吧?

2.要是在正常秒中断程序执行时产生报警中断,会发生啥情况???中断嵌套要出问题了吧???

使用特权

评论回复
9
teltium| | 2008-3-28 10:27 | 只看该作者

呵呵

不是问题的问题

使用特权

评论回复
10
huangbingg|  楼主 | 2008-3-28 15:36 | 只看该作者

楼上说明白点啊???

第2问我知道了,谁来评价下,骂我两句也行啊...

使用特权

评论回复
11
xcxxyc| | 2008-3-28 15:52 | 只看该作者

或许可以实现

可以这样试试,当产生一个中断,在中断里去判断另外另外一个中断的标志位这

使用特权

评论回复
12
huangbingg|  楼主 | 2008-3-28 16:15 | 只看该作者

7楼周工好

您说:"进入中断后查询ILR寄存器,判断是哪中寄存器;如果为秒中断,那么计数加1,并清除秒中断;如果为报警中断,那么执行报警操作,并清除报警中断"
好,我请教您下:

1.所谓报警,按你们书上说:就是报警器中预设值与计数器中时间值匹配才报警,换句话说:只有当某个秒中断来时,计数器加1秒刚好使时间值和报警值相等,才产生报警中断!说白了:就是,要么只有秒计数中断;要么两个中断一起来!!!    是在这两种情况判断,不是您说的:判断是报警还是秒计数!

2.当两个中断一起来时,触发报警和显示时间可以先后做没错,但这时清中断号则么办???    因为有两个!!!!这是才是关键吧
               
     是这样吗???谢周工!!

使用特权

评论回复
13
huangbingg|  楼主 | 2008-3-28 22:41 | 只看该作者

......

使用特权

评论回复
14
zlgarm| | 2008-3-29 11:55 | 只看该作者

huangbingg,您好!

1、读取RTC时间、处理数据发送至LCD也是需要时间的;
2、两个中断一起来,进入的是同一个中断服务函数,但是在系统里,就只有RTC中断。进入中断服务函数后,可以做如下处理:
__irq rtcIrq (void)
{
    if(秒中断) {
        /* 秒中断程序  */
        ILR = 0x01 << 0;//清除秒中断
    } else if (报警中断) {
        /* 报警中断程序  */
        ILR = 0x01 << 1;//清除报警中断
    }
    /* 中断结束  */
}
3、建议您仔细阅读我们提供的资料,并配合相关例程调试。
                                                                                                       By: zlgarm_Zhangxiaomeng

使用特权

评论回复
15
huangbingg|  楼主 | 2008-3-29 12:29 | 只看该作者

谢啦

!!!

使用特权

评论回复
16
huangbingg|  楼主 | 2008-3-29 18:40 | 只看该作者

则么说呢,还是一样

周工按你的意思:
void __irq IRQ_RTC(void)
{
    if(1==(ILR&0x01))
    {
       ILR|=0x01<<0;
       HC595_SendDat(~SEC);
    }
  else if(2==(ILR&0x02))
    {
       ILR|=0x01<<1;
       StartAlarm();     
       
    }   
  
    VICVectAddr=0x00;
}
报警后计数就不显示了,停了,就算不在您业务范围内,本人也诚恳请您帮个忙看看哪里不对,谢谢啊!!!!!~~   真的很郁闷。。。

使用特权

评论回复
17
huangbingg|  楼主 | 2008-3-31 19:14 | 只看该作者

顶上来

周工不要眼睁睁看我沉下去啊  呵呵...

使用特权

评论回复
18
zlgarm| | 2008-3-31 19:21 | 只看该作者

huangbingg,您好!

非常抱歉。之前程序贴错了。
请将
ILR |= 0x01<<0;
ILR |= 0x01<<1;
改为:
ILR = 0x01<<0;
ILR = 0x01<<1;


                                                                                                   By: zlgarm_Zhangxiaomeng

使用特权

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

本版积分规则

58

主题

270

帖子

0

粉丝