主题 : 大家帮忙找下错误,一个简单的定时器0的裸机程序,很蛋疼啊,希望大侠指点 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 92861
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2013-06-08
最后登录: 2013-08-09
楼主  发表于: 2013-08-08 01:27

 大家帮忙找下错误,一个简单的定时器0的裸机程序,很蛋疼啊,希望大侠指点

#include"2440addr.h"
void delay(int n)
{
    while(n)
    n--;
}
void led_init()
{
    rGPBCON &=~((3<<10)|(3<<12)|(3<<14)|(3<<16));
    rGPBCON |=(1<<10)|(1<<12)|(1<<14)|(1<<16);                    //配置为输出口
    rGPBDAT |=(1<<5)|(1<<6)|(1<<7)|(1<<8);                        //全灭
}

void clk_init()
{
    rMPLLCON = (0x92<<12)|(0x01<<4)|(0x01);                      //FCLK=400MHz
    rCLKDIVN = 0x03;                                           //预分频为1:2:4,PCLK=100MHz
}

void timer0_init()
{
    rTCFG0 = 99;        //(100MHz/99+1)=1MHz
    rTCFG1 = 0x03;        //16分频,1MHz/16=62500Hz
    rTCNTB0= 62500/2;    //0.5s产生一次中断
    rTCMPB0=0;            //将比较寄存器的初值设为0,即不产生翻转
    rTCON |= 1<<1;        //第一次手动启动
    rTCON |= 0x09;    

}

void int_init()
{
    
    rINTMOD =0;
    rSRCPND |=(1<<10);
    rINTMSK &=(~(1<<10));                            //中断初始化
    rINTPND |=(1<<10);
    
}

static void __irq Handle_TIMER0_int(void)                //中断服务函数
{
    if(rINTPND&(0x1<<10))
    rGPBDAT &=(~((1<<6)|(1<<7)));                        //亮灯
    delay(100000);
    rSRCPND |=(1<<10);
    rINTPND |=(1<<10);                                //清中断

}
void chuli()
{    
    pISR_TIMER0 = (U32)Handle_TIMER0_int;            //中断处理入口
}
int Main()
{
    led_init();
    clk_init();
    timer0_init();
    int_init();
    chuli();
    while(1);
    return 0;
}
思来想去找不到问题,不知道哪位大侠能帮我找出错误