我们知道,在TIVA中,延时函数用的是SysCtlDelay(),那么这个函数的参数是如何设置的呢?
首先找到这个函数的原型,在sysctl.c中,该函数的定义如下:
#if defined(ewarm) || defined(DOXYGEN)
void
SysCtlDelay(uint32_t ui32Count)
{
__asm(" subs r0, #1\n"
" bne.n SysCtlDelay\n"
" bx lr");
}
#endif
#if defined(codered) || defined(gcc) || defined(sourcerygxx)
void __attribute__((naked))
SysCtlDelay(uint32_t ui32Count)
{
__asm(" subs r0, #1\n"
" bne SysCtlDelay\n"
" bx lr");
}
#endif
#if defined(rvmdk) || defined(__ARMCC_VERSION)
__asm void
SysCtlDelay(uint32_t ui32Count)
{
subs r0, #1;
bne SysCtlDelay;
bx lr;
}
#endif
//
不管哪种环境下,都用了三条汇编指令。那么这个函数的延时时间为uint32_t ui32Count*3*(1/系统主时钟).
我们一般在程序中的写法为 SysCtlDelay(SysCtlClockGet() / M / 3);那么延时时间的计算为(SysCtlClockGet()/3M)*3/系统主时钟=1/M(s)
即不管系统主时钟为多少,函数SysCtlDelay(SysCtlClockGet() / M / 3)的延时时间都为1/M(s).
|