我们知道,在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).
|