打印

TIVA 中关于SysCtlDelay()函数的解析

[复制链接]
2733|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xyz549040622|  楼主 | 2015-11-11 23:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我们知道,在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).

相关帖子

沙发
Thor9| | 2015-11-12 19:00 | 只看该作者
__asm()
这是嵌入了汇编,是吗

使用特权

评论回复
板凳
FireRiver9| | 2015-11-12 22:14 | 只看该作者
  subs  r0,#1;  // 使用了16位的Thumb指令,无条件更新标志位。S后缀的使用要担心,16位的Thunb指令有可能会无条件更新标志位,也有可能不会。所以,但你需要更新标志位时,一定不要忘了加上S后缀。
   bne SysCtlDelay;  //  无条件跳转指令有两条,B和BX,  BNE中的NE即NotEqual,对应于标志位Z==0;
  表示不等的时候无条件转移到SysCtlDelay处对应的地址;
   bx    lr;  //执行这条指令后,把返回地址存储到LR(R14)中;

使用特权

评论回复
地板
sunmeat| | 2015-11-13 16:45 | 只看该作者
Thor9 发表于 2015-11-12 19:00
__asm()
这是嵌入了汇编,是吗

对的,精简的三条指令。三个时钟周期

使用特权

评论回复
5
nameligang| | 2015-12-5 19:45 | 只看该作者
那个大M是什么意思?

使用特权

评论回复
6
尤彼卡| | 2015-12-10 22:08 | 只看该作者
那个大M是什么意思?

哪有大M

使用特权

评论回复
7
shenmu2012| | 2015-12-11 12:58 | 只看该作者
这个是直接采用汇编语言实现的?

使用特权

评论回复
8
lcb813| | 2016-2-11 22:33 | 只看该作者
不需要用汇编写的,因为TivaC芯片的运行频率都比较高了,不差这点运行时间,为了提高几纳秒的时间而将程序做的这么负杂,几乎没可移植性,有点得不偿失
我都用C++写程序了,包括中断函数,几万行代码的一个工程都运行的很好

使用特权

评论回复
9
Garen2| | 2016-2-13 20:48 | 只看该作者
函数SysCtlDelay(SysCtlClockGet() / M / 3)的延时时间为1/M(s

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2789

主题

19276

帖子

104

粉丝