打印
[AVR单片机]

GCC中断问题请教

[复制链接]
2736|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Fisher_zyg|  楼主 | 2007-4-23 22:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位高手好!

小弟在使用GCC作AVR开发时,中断程序总是出现问题,现象是跟踪汇编代码发现进入中断的第一条指令就是SEI开中断,这样在串口中断标志没有清除的情况下,又进入了中断,程序进入了死循环,不知道怎么避免?请各位指教,谢谢!

相关帖子

沙发
没灵魂| | 2007-4-24 08:31 | 只看该作者

用信号标签

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
void main(void)
{
 ...
}

//********************************
//uart interrupt
//********************************
SIGNAL(SIG_UART0_RECV)      //SIG_UART_RECV)
{

}

使用特权

评论回复
板凳
Fisher_zyg|  楼主 | 2007-4-24 12:23 | 只看该作者

非常感谢 “没灵魂”

问题已经解决,非常感谢!我以前一直用汇编,很少用C来写程序,用起来不是很习惯。
还有一个问题,需要老兄指教。我通过观看函数的汇编代码,发现所有程序在进入前,都先对EEPROM的寄存器进行保护,我不知道这是为什么?又什么意义吗,能否去掉呢?谢谢!

+00000349:   B7CD        IN      R28,0x3D         In from I/O location
+0000034A:   B7DE        IN      R29,0x3E         In from I/O location
+0000034B:   9723        SBIW    R28,0x03         Subtract immediate from word
+0000034C:   B60F        IN      R0,0x3F          In from I/O location
+0000034D:   94F8        CLI                      Global Interrupt Disable
+0000034E:   BFDE        OUT     0x3E,R29         Out to I/O location
+0000034F:   BE0F        OUT     0x3F,R0          Out to I/O location
+00000350:   BFCD        OUT     0x3D,R28         Out to I/O location

使用特权

评论回复
地板
没灵魂| | 2007-4-24 14:11 | 只看该作者

并非EEPROM的地址

***先保护堆栈指针SP****
IN      R28,0x3D   完全等效于LDS R28,0x5D 这可是SPL的地址
IN      R29,0X3E   完全等效于LDS R28,0x5E 这可是SPH的地址
***恢复堆栈指针SP****
OUT     0x3E,R29   
OUT     0x3D,R28 

使用特权

评论回复
5
lbk708| | 2007-4-24 18:16 | 只看该作者

谢谢天谢谢地

谢谢天谢谢地,终于调通了,谢谢所有热心的朋友!

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝