ARM学习 基于S3C2440定时器的使用

这篇博客介绍了如何在嵌入式系统中配置定时器,包括设置预分频系数、除数因子以及计数器值,以实现特定时钟频率。通过定时器中断服务函数`__irqtimer0_handler`处理中断,更新计数器并在达到一定阈值时改变GPIO状态。同时,`timer0_init`函数用于初始化定时器,并在`timer0_test`函数中展示了计数器的使用,输出计数值并控制GPIO输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定时器的使用,定时器挂载在APB系统总线上,APB总线的时钟频率为PCLK=50Mhz,在定时器使用时,需要设置定时器的时钟频率clk = PCLK/(预分频系数+1)*div

rTCFG0: 设置预分频系数
rTCFG1: 设置除数因子
rTCON: 计数器控制寄存器
rTCNTB0: 计数器预存储器

static void __irq timer0_handler(void)
{
	timer_count ++;
	ClearPending(BIT_TIMER0); //SRCPND INTPND
}

void timer0_init(void)
{
	ClearPending(BIT_TIMER0); //SRCPND INTPND
	pISR_TIMER0 = (U32)timer0_handler;
	
	rTCFG0 &= ~0xff;
	rTCFG0 |= 249; //prescaler = 249+1  //0xf9
	
	rTCFG1 &= ~0xf;
	rTCFG1 |= 3; //mux = 1/16
	
	//50M/250/16=12500hz  
	
	rTCNTB0 = 6250;//比较缓冲值  6250*(1/12500) = 0.5
	
	rTCON &= ~0x1f;
	rTCON |= 0x02;//更新TCNTB1和TCMPB1
	//自动重载
	rTCON = 0x09;
	EnableIrq(BIT_TIMER0); //INTMSK
}

void timer0_test(void)
{
	U32 data;
	U32 flag;
	//timer_count = 0;
	rGPBCON = 0x155555;
	//data = 0x06;
	timer0_init();
	//rGPBDAT = (data<<5);
	rGPBDAT = 0x0000;
	flag = 2;
	
	while(1)
	{
		Uart_Printf("%d\n",timer_count);
		if(timer_count>=10)
		{
			flag++;
			if(flag%2==0)
				rGPBDAT = 0x0000;
			else
				rGPBDAT = 0x01F0;
				
			timer_count = 0;
		}
	}
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值