RTEMS 的 AT91SAM9260 移植(6): 杂项函数

杂项函数在 BSP 中也是非常重要的。我为了图省事,全部都放置在了:c/src/lib/libcpu/arm/at91sam9260/pmc/pmc.c中。

主要是获取CPU当前的频率和系统主时钟的频率。

前几篇连载中,我们在串口和时钟驱动里都是用了获取主时钟频率的函数。

 

另外一个就是 udelay 函数。udelay函数原来是posix的标准函数,但是rtems并没有实现,

我们不可能用时钟节拍去做微秒级别的时间延时。

许多驱动程序必须要延迟一定的时间才能工作,这里我给出了一个简单的实现方式。

启动定时器1,采用计数方式,选择一个合适的时钟平率,我选择的是主时钟的 32 分之一,一个脉冲大约是300ns。然后

给定时器一个初值,测量一段空循环的时间。得出循环多少次正好是1微秒。

这是通过 calc_delay 来实现的。实际实现中,为了防止除法的精度不够,还做了一下微调。

我是在c/src/lib/libbsp/arm/at9260/startup/bspstart.c中的bsp_start_default函数中调用这个函数,bsp_start_default会在bootcard函数一开始就调用。不用担心定时器1会和别的驱动冲突。只调用calc_delay一次,不要再调用,就绝对不会冲突。

 

 

闲话少说,看pmc.c的全部代码:

 

这里,杂项函数我们就搞定了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值