Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631583
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 11:12:23

原文地址:2440定时中断 作者:luozhiyong131

//======================================================================

//  工程名称: 

//  功能描述:  定时中断实现灯闪烁

//  IDE环境:   ADS v1.2 TX2440A

//  维护记录:  Lzy 2011-7-13              

//======================================================================

 

#include "string.h" 

#include "2440addr.h"

#include "2440lib.h"

 

/*

 * Timer input clock = PCLK / {prescaler value+1} / {divider value}

 * {prescaler value} = 0~255

 * {divider value} = 2, 4, 8, 16

 * 本实验的Timer0的时钟频率=50MHz/(49+1)/(16)=62500Hz

 * 设置Timer0 0.5秒钟触发一次中断:

 */

 void timer0_init(void)

 {

     rTCFG0 = 49;     // 预分频器0 = 49 

     rTCFG1  = 0x03;      // 选择16分频

     rTCNTB0 = 31250;     // 0.5秒钟触发一次中断

     rTCON   |= (1<<1);   // 手动更新

     rTCON   = 0x09;      // 自动加载,清“手动更新”位,启动定时器0

     

     EnableIrq(BIT_TIMER0);  // 定时器0中断使能

 }

 

/*

 * 每次中断令4LED改变状态

 */

void __irq Timer0_Handle(void)

{ 

    if(rINTOFFSET == 10)

    {

        rGPFDAT ^= 0xf;           //取反,灯烁       

    }

 

    ClearPending(BIT_TIMER0);   //清除中断

}

 

int Main(void)

{

   

    memcpy((unsigned char *)0x0,(unsigned char *)0x30000000,0x1000);

 

    /*初始化系统时钟*/

    SetSysFclk(FCLK_400M);      //设置系统时钟 400M    

    ChangeClockDivider(2, 1);      //设置分频 148

    CalcBusClk();                     //计算总线频

 

    rGPFCON = (rGPFCON | 0xFFFF) & 0xFFFFFF55;  //GPF0--GPF3设置为output      

   rGPFUP  = rGPFUP & 0xFFF0;                  //使能GPF上拉电阻

   rGPFDAT = 0x0F;                            //GPF4位初始化为1

   

    timer0_init();

   

    pISR_TIMER0=(unsigned)Timer0_Handle;   //中断服务子程序入口地址

 

    while(1);

}

 

阅读(112) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~