天嵌 ARM开发社区

 找回密码
 注册
查看: 2665|回复: 0

有关定时器中断进不去的问题

[复制链接]
695808764 发表于 2017-3-27 11:08:20 | 显示全部楼层 |阅读模式
写了个定时器中断的程序,但是运行起来没反应,硬件是没问题的,同样的硬件运行uart中断什么的都能正常,唯独定时器中断进不去,请教一下各位,能给指点一下吗?下面是我写的程序。


#include "2440addr.h"
#include "def.h"
#include <stdarg.h>
//#define _ISR_STARTADDRESS         0x33ffff00

static unsigned int flag = 1;

/*****************************************************************/
/* LED部分 */
/*****************************************************************/
#define Led1_Off()      {rGPADAT &= (~(1 << 5));}
#define Led1_On()     {rGPADAT |= (1 << 5);}
#define Led2_Off()      {rGPADAT &= (~(1 << 4));}
#define Led2_On()     {rGPADAT |= (1 << 4);}
#define Led3_Off()      {rGPADAT &= (~(1 << 3));}
#define Led3_On()     {rGPADAT |= (1 << 3);}
#define Led4_Off()      {rGPADAT &= (~(1 << 2));}
#define Led4_On()     {rGPADAT |= (1 << 2);}


void Led_Init(void)
{
        rGPACON &= ~(0xf <<2);
}

/*****************************************************************/
/* 定时器部分 */
/*****************************************************************/
/*
* 启动代码中已经设置了系统时钟,PCLK = 50M
* 若TIMER0获得25KHZ的时钟源,选择分频50M/25K = 2000
* 2000 = 250 * 8 ,所以prescaler等于249,divider等于8
* TCFG0控制预分频,TCFG1控制分频
* TCNTB0/TCMPB0定时器0计数缓冲寄存器和比较缓冲寄存器
* 详细参看S3C2440寄存器手册
*/
void Timer0_Init(void)
{
        rTCFG0 &= ~(0xff) ;
        rTCFG0 |= 249 ;
        rTCFG1 &=  ~(0xf) ;
        rTCFG1 |=  0x02 ;
        rTCNTB0 =  12500 ;//0.5s中断一次
       
        rTCON |= (1 << 1) ;//手动更新
        rTCON &= ~(1 << 1) ;
        rTCON |=  0x09 ; //自动加载,清除手动更新位,启动定时器       
}




/*****************************************************************/
/* 中断部分: */
/*****************************************************************/
/*
* 开启定时器0中断INTMSK第10位是TIMER0的标志位
*/
void Timer0_Interrupt_Init(void)
{
       
        rINTMSK &= ~(1 << 10) ;
}

/*****************************************************************/

/*****************************************************************/
/*
* 中断处理:关闭LED1,记得清除中断
*/
void __irq Timer0_Isr(void)
{
        rSRCPND |= 1 << 10 ;
        rINTPND |= 1 << 10 ;
        flag=!flag;

        if (flag)
        {
                Led1_On();
        }
        else
        {
                Led1_Off();
        }
       
}



void Isr_Init(void)
{
        pISR_TIMER0 = (U32)Timer0_Isr ;       
}
/*****************************************************************/



int Main()
{
        Led_Init() ;
        Timer0_Interrupt_Init();
        Timer0_Init();
        Isr_Init() ;
       
while(1)
{
        ;
}
  
        return 0;       
}

本帖被以下淘专辑推荐:

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-19 21:33 , Processed in 1.062500 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表