分类: 嵌入式
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中断使能
}
/*
* 每次中断令4个LED改变状态
*/
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); //设置分频 1:4:8
CalcBusClk(); //计算总线频
rGPFCON = (rGPFCON | 0xFFFF) & 0xFFFFFF55; //GPF0--GPF3设置为output
rGPFUP = rGPFUP & 0xFFF0; //使能GPF上拉电阻
rGPFDAT = 0x0F; //GPF低4位初始化为1
timer0_init();
pISR_TIMER0=(unsigned)Timer0_Handle; //中断服务子程序入口地址
while(1);
}