主题 : 定时器中断没反应 复制链接 | 浏览器收藏 | 打印
勺饮不器盛沧海,拳石频移磊泰山
级别: 侠客
UID: 15752
精华: 0
发帖: 71
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2010-03-09
最后登录: 2010-10-19
楼主  发表于: 2010-05-27 08:43

 定时器中断没反应

各位大侠:小弟将按键的外部中断做好后,在研究内部中断。其实内部中断相对来说更为简单,但是定时器中断的问题,我始终没有解决。我要求“每隔2秒蜂鸣器响一次,持续时间为0.5秒,并伴随着LED亮”。通过AXD查看系统寄存器的配置,都没有问题,这里用的的MMU.c文件是做按键中断时修改好的,也没问题,就是没实验结果。我将源代码奉上,请各位仁兄指点!
//中断方式实现精确延时
#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"    
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"      
//================================

void __irq Timer4_ISR(void)

{
    static int count;
    count++;
    rSRCPND = rSRCPND|(0x1<<14);
    rINTPND = rINTPND|(0x1<<14);
    //每隔2秒蜂鸣器响一次,持续时间为0.5秒,并伴随着LED亮
    if (count % 4 ==0)
        rGPBDAT = ~0x1e0;            //蜂鸣器响,LED亮
    else if (count % 4 ==1)
        rGPBDAT = 0x1e0;      //蜂鸣器不响,LED灭

}
int Main(int argc, char **argv)
{
    
    U32 mpll_val=0;
  
    mpll_val = (92<<12)|(1<<4)|(1);
    
    //init FCLK=400M, so change MPLL first
    ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
    ChangeClockDivider(14, 12);    
    MMU_Init();
    Port_Init();
    rGPBCON = 0x155555;
    rGPBUP = 0x7ff;
    rGPBDAT = 0x1e0;//蜂鸣器不响,LED灭

    rSRCPND = rSRCPND|(0x1<<14);
    rINTPND = rINTPND|(0x1<<14);
    rINTMSK = ~(0x1<<14); //打开定时器4中断
    
    rTCFG0 &= 0xFF00FF;
    rTCFG0 |= 0xf900;        // Timer4的prescaler=249
    rTCFG1 &= ~0xF0000;    
    rTCFG1 |= 0x20000;     //Timer的divider=8,则设置定时器4的时钟频率为25kHz
    rTCNTB4 = 12500;              //让定时器4每隔0.5秒中断一次

    rTCON &= ~0xF00000;
    rTCON |=  0x700000;
    rTCON &= ~0x200000;//启动定时器
    pISR_TIMER4=(U32)Timer4_ISR;
    while(1)
    {
        ;
    }

   return 0;
}
勺饮不器盛沧海,拳石频移磊泰山
级别: 侠客
UID: 4843
精华: 0
发帖: 102
金钱: 810 两
威望: 554 点
综合积分: 204 分
注册时间: 2009-03-31
最后登录: 2012-11-14
1楼  发表于: 2010-05-29 20:57
至少的,你给我的工程,依然是连接顺序有问题。

至少的,你在while循环中可以加入一些信息输出,用以检验程序是否正常运行。

为什么不在你的工程中设置输出list文件呢?
级别: 侠客
UID: 4843
精华: 0
发帖: 102
金钱: 810 两
威望: 554 点
综合积分: 204 分
注册时间: 2009-03-31
最后登录: 2012-11-14
2楼  发表于: 2010-06-03 20:54
今天终于弄好了新的usb转串口,把你的程序下载进去,又有光,又有声,说明确实只是链接顺序的问题。
级别: 新手上路
UID: 22983
精华: 0
发帖: 16
金钱: 90 两
威望: 18 点
综合积分: 32 分
注册时间: 2010-06-10
最后登录: 2010-08-09
3楼  发表于: 2010-06-10 16:52

 回 楼主(云鹤九霄) 的帖子

楼主这个问题解决没,我遇到同样的问题

怎么解决啊
级别: 新手上路
UID: 22848
精华: 0
发帖: 42
金钱: 210 两
威望: 42 点
综合积分: 84 分
注册时间: 2010-06-08
最后登录: 2010-12-27
4楼  发表于: 2010-06-11 18:41
我遇到同样的问题,盼楼主尽快解决,
勺饮不器盛沧海,拳石频移磊泰山
级别: 侠客
UID: 15752
精华: 0
发帖: 71
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2010-03-09
最后登录: 2010-10-19
5楼  发表于: 2010-07-01 09:03
很抱歉,最近遇到点其他的事情,没能及时回帖。我的问题解决了,就像1楼说的那样,连接顺序不对,程序没有问题。
勺饮不器盛沧海,拳石频移磊泰山
级别: 新手上路
UID: 24904
精华: 0
发帖: 38
金钱: 205 两
威望: 41 点
综合积分: 76 分
注册时间: 2010-07-16
最后登录: 2017-09-13
6楼  发表于: 2010-07-26 22:14
我的程序更糟糕,编译都不能通过,说pISR_TIMER4没定义,pISR_TIMER4究竟在哪里定义的呢?
级别: 新手上路
UID: 25871
精华: 0
发帖: 10
金钱: 50 两
威望: 10 点
综合积分: 20 分
注册时间: 2010-07-30
最后登录: 2010-09-29
7楼  发表于: 2010-08-24 15:23

 回 6楼(鱼鱼) 的帖子

是啊,是啊,我也在找这个东西呀
级别: 新手上路
UID: 28040
精华: 0
发帖: 25
金钱: 125 两
威望: 25 点
综合积分: 50 分
注册时间: 2010-09-04
最后登录: 2017-09-13
8楼  发表于: 2010-09-04 19:46
我的也是没反应啊,就在while里了,我在wile中写了输出,可是就是中断不了!!
级别: 新手上路
UID: 28160
精华: 0
发帖: 29
金钱: 145 两
威望: 29 点
综合积分: 58 分
注册时间: 2010-09-06
最后登录: 2012-03-23
9楼  发表于: 2010-10-22 12:34

 回 5楼(云鹤九霄) 的帖子

我也遇到同样的问题。大哥,你说链接顺序的问题。能不能说详细一点。到底是什么顺序才是正确的。总不能让我们排序吧