打印

程序跑飞了!?

[复制链接]
3402|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jianwenwu|  楼主 | 2008-3-15 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚整了个简单的定时器中断程序,却发现程序下载后运行的结果怪怪的。
主程序很简单,如下:
void Main(void)
{
MMU_Init();
    ChangeClockDivider(1,1);          
    ChangeMPllValue(0xa1,0x3,0x1);  
         Isr_Init();
         Port_Init();
         Timer1_init();
         Timer1INT_Init();    
         ledflash();//流水灯程序,死循环。
}
定时器1中断子程序如下:
void __irq Timer1_ISR( void )

   ledflash();
}
定时器中断初始化程序:
void Timer1INT_Init(void)                
{
     if ((rINTPND & BIT_TIMER1))     
        {
        rSRCPND |= BIT_TIMER1;
        }
    pISR_TIMER1 = (int) Timer1_ISR
    rINTMSK  &= ~(BIT_TIMER1);  //开中断;    
}
也就是说不管有没有进入定时器1中断,程序都应该是执行流水灯程序。
结果却是流水灯程序运行了一段时间就停止了。
这是什么问题呢?难道是程序进入了别的中断?但是我试过改定时器1的装载时间,它对流水灯停止的时间是对应的,但却不是进入定时器1中断。这种现象怎么解释呢?

相关帖子

沙发
Ice_River| | 2008-3-15 17:08 | 只看该作者

好像冲入的次数不少!

ledflash() 正在运行,然后中断调用ledflash(),又正在运行此时中断又调用ledflash(),你看看调用多少次?

使用特权

评论回复
板凳
jianwenwu|  楼主 | 2008-3-15 18:54 | 只看该作者

是有问题

这样调用会产生什么问题?我也用过让一个灯亮来指示有没有进程序的办法,但是结果还是没有。

使用特权

评论回复
地板
armfan| | 2008-3-15 20:03 | 只看该作者

re

你的中断程序里面是不是应该加上
rSRCPND = 0x00000400  ; 
rINTPND = 0x00000400 ;

类似这样的语句

使用特权

评论回复
5
jianwenwu|  楼主 | 2008-3-15 22:07 | 只看该作者

谢谢armfan

是有这样的语句,只是我调用了ledflash()以后,就把这些语句删了.因为ledflash()里是一个流水灯的死循环.

使用特权

评论回复
6
jianwenwu|  楼主 | 2008-3-17 14:14 | 只看该作者

搞了很久,还是不懂,有哪位大虾指点下/

使用特权

评论回复
7
阿南| | 2008-3-17 18:55 | 只看该作者

测试一下有无顺利的进入到中断处理程序Timer1_ISR

如果在0x0处的中断向量表有问题,当产生中断后程序会跑飞的.

使用特权

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

应该是跑飞

谢谢阿南!

我在中断里加了句串口显示字符语句,但是还是没显示,说明程序确实没有进入到定时器1中断.想来想去最有可能是跑飞了,但是又不知道问题出在哪。下面是中断入口:

_ISR_STARTADDRESS    EQU 0x33ffff00

pISR_TIMER1    EQU  (_ISR_STARTADDRESS+0x4c)

pISR_TIMER1 = (int)Timer1_ISR;

与之相对应的ADS哪些方面要作必要的设定呢?

使用特权

评论回复
9
armecos| | 2008-3-17 20:25 | 只看该作者

你看下万能中断模板吧,

中断的写法有严格的顺序要求,清除、应答、使能/去使能、创建/删除、高低电平/上下边沿模式配置,特别是外部为电平触发时要注意先撤除外部电平事件再开对应中断。

检查一下,你是否反复陷入了中断,类似于死机但不是死机,你不能在中断里用打印语句调试,因为此时可能已经影响了串口,你无法看到调试信息。

下面的《ecos中断处理》一文全面地概括了中断处理的所有过程和细节,你只要按照这个顺序书写中断ISR就不会有任何问题,这个处理过程适合所有CPU架构。另外,你这样写中断暴露了硬件寄存器,最好按照**里说的那样,把中断处理函数抽象成几个API接口,细节在里面实现,外部接口保持统一。
《ecos中断处理》

使用特权

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

本版积分规则

7

主题

20

帖子

0

粉丝