打印
[ZLG-ARM]

中断问题!

[复制链接]
1699|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
graby|  楼主 | 2007-12-1 22:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI, vi, ic, ADDR, DDR
void __irq  IRQ_Time0(void)
{ uint32 time;                        
    
   if(T0IR&0x00000001 == 1){                                    // 清除中断标志   
   T0IR = 0;
   time++;}
   VICVectAddr = 0x00;                            // 通知VIC中断处理结束   
}
我早调试的时候走单步,为什么time的值不变

相关帖子

沙发
王紫豪| | 2007-12-2 06:27 | 只看该作者

楼主,你的time是什么变量?

使用特权

评论回复
板凳
graby|  楼主 | 2007-12-2 09:07 | 只看该作者

中断问题

局部变量,我调的时候是在中断里调的。

使用特权

评论回复
地板
LittleKen| | 2007-12-2 10:27 | 只看该作者

如果中断确实执行了

如果中断确实执行了,在对time的定义加上static ,如果还不行,就加上volatile防止编译器优化的时候把time优化掉。

使用特权

评论回复
5
wzj4392234| | 2007-12-2 14:32 | 只看该作者

没有清除中断标志

改:
void __irq  IRQ_Time0(void)
{ uint32 time;                        
    
   if(T0IR&0x00000001 == 1){                                    // 清除中断标志   
   T0IR = 1;
   time++;}
   VICVectAddr = 0x00;                            // 通知VIC中断处理结束   
}
 

使用特权

评论回复
6
zlgarm| | 2007-12-3 09:22 | 只看该作者

回复

这样再试一下:
void __irq  IRQ_Time0(void)
{ uint32 time;                        
    
   if((T0IR & 0x00000001) == 1){          // 清除中断标志   
   T0IR = 1;
   time++;}
   VICVectAddr = 0x00;                      // 通知VIC中断处理结束   
}
原因:&  运算符的优先级为:8
      == 运算符的优先级为:7
    从你表达的意思上看,应该是按位与运算之后,再去判断是否等于1,  所以加括号,括号的优先级最高。

使用特权

评论回复
7
qihao| | 2007-12-3 15:01 | 只看该作者

呵呵 强烈反对不加括号的写作习惯

使用特权

评论回复
8
xwj| | 2007-12-3 15:37 | 只看该作者

看,不用括号吃亏了吧?

使用特权

评论回复
9
lucidmask| | 2007-12-3 16:20 | 只看该作者

括号又不要钱,就别省了

使用特权

评论回复
10
kernel99| | 2007-12-4 09:42 | 只看该作者

T0IR

T0IR = 0;
是没意义的,应该改成T0IR = 0X01;

使用特权

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

本版积分规则

24

主题

59

帖子

0

粉丝