Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19565
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-30 21:50
个人简介

让技术进行到底

文章分类
文章存档

2016年(5)

我的朋友

分类: 嵌入式

2016-09-24 11:29:37

SysTick定时器:系统滴答定时器是一个非常基本的倒计时定时器,每隔一定的时间产生一个中断,即使是系统在睡眠模式下也能工作,它使得OS在各CM3器件间的移植过程中不必修改系统定时器的代码,将移植变得简单。滴答定时器被捆绑在NVIC中,用于产生SYSTICK异常。
功能:大多数操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。比如,为多个任务给予不同数目的时间片,确保没有一个任务能一直抢占CPU;或者将每个定时器周期的某个时间范围赐予特定的任务,为系统提供各种定时功能。
下面来看一下SysTick相关的几个寄存器:

在V3.5库函数中,有关SysTick的相关配置在core_cm3.h中:

点击(此处)折叠或打开

  1. /**
  2.  * @brief Initialize and start the SysTick counter and its interrupt.
  3.  *
  4.  * @param ticks number of ticks between two interrupts
  5.  * @return 1 = failed, 0 = successful
  6.  *
  7.  * Initialise the system tick timer and its interrupt and start the
  8.  * system tick timer / counter in free running mode to generate
  9.  * periodical interrupts.
  10.  */
  11. static __INLINE uint32_t SysTick_Config(uint32_t ticks)
  12. {
  13.   if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
  14.                                                                
  15.   SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
  16.   NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
  17.   SysTick->VAL = 0; /* Load the SysTick Counter Value */
  18.   SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
  19.                    SysTick_CTRL_TICKINT_Msk |
  20.                    SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
  21.   return (0); /* Function successful */
  22. }
从上面可以看出,V3.5库函数默认使用HCLK作为SysTick时钟,如想用SysTick计一个很长的值,可以选用HCLK/8作为其时钟,滴答定时器的校准值固定为9000,当时钟设置为9MHZ(HCLK/8)产生1ms的时间基准。


阅读(4213) | 评论(0) | 转发(0) |
0

上一篇:空闲任务和统计任务

下一篇:没有了

给主人留下些什么吧!~~