uboot中void udelay (unsigned long usec)函数

uboot中的void udelay函数用于实现微秒级别的延时操作,主要依赖于定时器的初始化和循环递减计数。在interrupt_init函数中,定时器被设置为10ms周期。udelay函数通过计算和调整定时器的数值来达到所需的延时效果。
摘要由CSDN通过智能技术生成

在uboot中会有一些需要用到延时的场景,像延时输入进入uboot中。

uboot的延时相对简单,主要是利用定时器4一直循环递减统计时间。

1、int interrupt_init (void)  定时器初始化函数。

函数对定时器进行初始化,以10ms的周期循环递减。内容如下,寄存器设置可以参考datasheet

int interrupt_init (void)
{
	S3C24X0_TIMERS * const timers = S3C24X0_GetBase_TIMERS();

	/* use PWM Timer 4 because it has no output */
	/* prescaler for Timer 4 is 16 */
	timers->TCFG0 = 0x0f00;
	if (timer_load_val == 0)
	{
		/*
		 * for 10 ms clock period @ PCLK with 4 bit divider = 1/2
		 * (default) and prescaler = 16. Should be 10390
		 * @33.25MHz and 15625 @ 50 MHz
		 */
		timer_load_val = get_PCLK()/(2 * 16 * 100);
	}
	/* load value for 10 ms timeout */
	lastdec = timers->TCNTB4 = timer_load_val;
	/* auto load, manual update of Timer 4 */
	timers->TCON = (timers->TCON & ~0x0700000) | 0x600000;
	/* auto load, start Timer 4 */
	timers->TCON = (timers-&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值