Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7688926
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2011-07-13 11:13:29

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

//  工程名称: 

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

//  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);

}

 

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