查看: 5397|回复: 13

[评测分享] 【SAMV71精讲精练系列】3、System Tick详解

  [复制链接]
  • TA的每日心情
    开心
    2016-3-22 09:25
  • 签到天数: 115 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2015-11-14 21:58:18 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 _烟酒僧_ 于 2015-11-14 23:34 编辑

    下午出去放松了一下,晚上继续学习SAMV71

    科学家研究发现,一个人对事物认知的最高程度,是能用语言或者文字,
    把它的逻辑详尽透彻、有条理地表述出来。
    别说这个真有道理,很多东西,你感觉自己明白了,但是说出来可能完全
    是两回事,甚至听者也觉得不知所谓,那说明你对这个东西的认知还没有
    达到透彻的程度。

    所以本次学习贴,尽量详尽一点,很显然我也有这个需求来把SAMV71这个
    东西了解得更透彻。这有别于之前连载的XMEGA学习教程,XMEGA是我拿来
    做过几个项目的芯片,讲太细于己来说绝对是浪费时间。而SAMV71是一款
    全新的芯片,所以权当为以后的项目未雨绸缪,储备点知识,与各位共同进步。

    稍微谈谈前几贴的学习体会,很大的感触是,太熟悉了!有些貌似新鲜的
    术语,仿佛以前便使用过一般,并且,因为这款IC的性能太强劲了,外设之
    丰富让人叹为观止,所以应用于实际项目上,会有更大的灵活度和操作
    空间。小资源的片子在时间和空间两个维度之间精雕细琢是太常见的事情,
    而这个如果不上系统,简直就可以让你随便嗨……呵呵

    但是,提醒一点,作为码农,切忌因为硬件强悍而随意写出超烂的乐色!
    否则以后绝对可是要吃暗亏的。

    扯远了,正式步入正题。

    单片机新手,特别喜欢使用指令延时,实际上很多时候这是拖慢MCU效率
    的一个很大的元凶。稍有经验的,很容易想到,用定时器来做一个标记,
    显然这要高明得多,避免了MCU的“死等”。

    SAMV71更是把这样一个算作是技巧性的处理,提升到了另外一个高度,
    把它做成了一个单独的中断源,只要你愿意,这个Tick将会一直存活在
    你程序的生命周期里!

    解析一下如下库函数 - 配置系统TICK
    __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
    {
      if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */

      SysTick->LOAD  = ticks - 1;                                  /* set reload register */
      NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */
      SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
      SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                       SysTick_CTRL_TICKINT_Msk   |
                       SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
      return (0);                                                  /* Function successful */
    }
    调用这个函数便完成了系统TICK配置,
    如果我们想要配置系统TICK每毫秒中断一次,只需要像如下这样调用即可;SysTick_Config(sysclk_get_cpu_hz() / 1000);
    然后,我们自然需要在中断函数里作一个毫秒计数,如下
    volatile uint32_t systemTickCounter;
    void SysTick_Handler(void)
    {
            systemTickCounter++;
    }

    顺便提醒一下volatile这个关键字,我建议你加上,否则……你懂得!
    只有严密的程序才能达到理想的效果,任何寄希望于编译器或者IDE优化的想法都是在给自己“埋地雷”!

    程序烧录进去之后的效果如下
    VID_20151114_224932.mp4_1447512839.gif

    main.c全部测试代码:
    游客,如果您要查看本帖隐藏内容请回复









    (END)
    回复

    使用道具 举报

  • TA的每日心情

    2017-3-26 16:00
  • 签到天数: 141 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-11-15 09:37:18 | 显示全部楼层
    还不错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2014-11-28 09:29
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-11-16 10:08:18 | 显示全部楼层
    顶顶顶
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-11-16 10:10:25 | 显示全部楼层
    提醒一点,作为码农,切忌因为硬件强悍而随意写出超烂的乐色!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-3-26 16:00
  • 签到天数: 141 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-11-16 10:13:21 | 显示全部楼层
    多谢分享
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-11-17 18:12:33 | 显示全部楼层
    只有严密的程序才能达到理想的效果
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-5-12 14:34:02 | 显示全部楼层
    学习一下啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-5-21 20:47:45 | 显示全部楼层
    非常棒!thanks!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2017-5-12 15:36:33 | 显示全部楼层
    参考一下,学习。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-19 19:38 , Processed in 0.228037 second(s), 35 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.