2 zhang0564 zhang0564 于 2015.06.30 07:16 提问

如何编写延时函数,求指点迷津

cpu频率为400MHz,如何编写延时为1us的延时函数?请大哥门指点下。cpu为armv7架构的s5pv210处理器

2个回答

lzp_lrp
lzp_lrp   Ds   Rxr 2015.06.30 08:18

振荡频率为16MHZ,则Tcy=0.0625us。
编写us级延时函数如下:
void Delay_us(unsigned char nCount)
{
while(--nCount);
}
函数反汇编后如下:
push a
OFST: set 0
L13: dec(OFST+1,SP)
jrne L13
pop a
ret

主要是计算nCount

smils
smils   2015.09.06 20:01

400MHZ=400000000HZ,就是一秒钟震动的次数,
1S=1000ms=1000000μs,
1S/400MHZ=1000000μs/400000000HZ=0.0025μs,就是说一个频率周期需要0.0025μs,
那么,你要知道的是s5pv210芯片多少个时钟周期是一个机器周期,假设 是4个
那么一个机器周期等于4*0.0025μs=0.01us
你要求 延时1us 只需要 100个机器周期就行了
你循环里面的代码 转换成 100条汇编指令 就延时 1us了 ,
需要注意的是 取消编译器优化

Csdn user default icon
上传中...
上传图片
插入图片