MSP432滴答定时器(SysTick)说明和配置

嵌入式 TOMORROW 2年前 (2017-07-18) 1961次浏览 3个评论 扫描二维码

本文来自TOMORROW 星辰博客。

原文链接:https://www.tomorrow.wiki/2017/07/18/msp432 滴答定时器(systick)说明和配置/

 

 

MSP432是 TI 的一款基于 arm cortex-M4 内核的 32 位低功耗处理器。低功耗表现十分优越。但是由于上市的时间较短,网上能查找到的相关资料是极其稀少的。所以作者想在此分享一些MSP432的相关学习经验。

 

首先要学习使用MSP432必需要有一份很重要的官方文档:

MSP432P4xx Family Technical Reference Manual.pdf

所有关于 432 这款芯片的技术问题都可以从中找到解决方法,当然前提是能看懂,目前还没有发现有中文版的。

 

好了,接下来就直奔这篇文章的主题滴答定时器了。

MSP432的滴答定时器实质就是一个 24 位的自减计数器,在参考文档 2.2.1(P70)可以找到相关说明。

Cortex-M4 includes an integrated system timer, SysTick, which provides a simple, 24-bit clear-on-write, decrementing, wrap-on-zero counter with a flexible control mechanism. 

 

那么何为 24 位的自减计数器呢?

24 位表明计数能达到的最大值为 2^24=16777216 。

自减则是说每当检测到一个时钟信号的时候计数器的值减 1。一直减到到 0。

减到到零之后呢?减到零之后就会产生一个中断信号,并且重置计数器的值为重载寄存器 STRVR 的值,然后接着重复上面的过程。这样就可以实现一个定时的过程。

SysTick Reload Value Register (STRVR): The reload value for the counter, used to provide the counter's wrap value.

When enabled, the timer counts down on each clock from the reload value to zero, reloads (wraps) to the value in the STRVR register on the next clock edge, then decrements on subsequent clocks. Clearing the STRVR register disables the counter on the next wrap. When the counter reaches zero, the COUNT status bit is set. The COUNT bit clears on reads.

 

另外重要的一点是,MSP432的滴答定时器的时钟源是和 CPU 是一样的,而 CPU 的时钟源是MCLK 。

Consequently, the CLKSOURCE bit in the SYSTICK Control and Status register must always be written as 1 (to indicate CPU clock as reference clock) .(2.2.1 P70)

MCLK: Master clock. MCLK is software selectable as LFXTCLK, VLOCLK, REFOCLK, DCOCLK, MODCLK, or HFXTCLK. MCLK can be divided by 1, 2, 4, 8, 16, 32, 64, or 128. MCLK is used by the CPU and peripheral module interfaces, as well as, used directly  by some peripheral modules.(5.2 P292)

 

下面就是具体的代码实现(基于 TI 官方的函数库)。

 

//配置 MCLK 的时钟为 3MHz
MAP_CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1 );

 

//配置滴答定时器的周期,也就是重置寄存器的值为 3M
MAP_SysTick_setPeriod(3000000);

 

//使能滴答定时器
MAP_SysTick_enableModule();

 

//使能滴答定时器中断
MAP_SysTick_enableInterrupt();

 

//使能总中断
MAP_Interrupt_enableMaster();

 

上面的代码把滴答定时器的时钟源配置为了 3MHz , 也就是每经过 1/3000000 秒计数器就会减一,然后重装值为 3000000 ,也就是说每数 3000000 就会产生一个中断信号,那么每(1/3000000) * 3000000 = 1 秒 就会产生一次中断。

相关的中断函数需要在中断向量表里声明,并且自己定义功能代码,这样就实现了滴答定时器的定时器的功能。

滴答定时器可以作为实时系统(RTOS)的心跳,也可以作为一个简单的计数器或者高速定时器使用。

 

以上的就是作者想分享的关于MSP432的滴答定时器的全部内容。关于 MSP432 的其他内容(函数库,中断等)可以参考本博客其他文章。

 

 

 

本文来自TOMORROW 星辰博客。

原文链接:https://www.tomorrow.wiki/2017/07/18/msp432 滴答定时器(systick)说明和配置/


TOMORROW 星辰 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MSP432 滴答定时器(SysTick)说明和配置
喜欢 (0)
TOMORROW
关于作者:
一个从石头坑掉到泥坑里的攻城狮。
单薄的保温杯发表我的评论  请填写正确的 个人信息
取消评论
表情 加粗 斜体 签到
(3)个小伙伴在吐槽
  1. Pfizer Viagra Cheap Side Effects Of Amoxicillin In Child Online Generic Viagra generic cialis Is Keflex A Diuretic
    Franfom2019-05-31 21:56 回复 Windows 7 | Chrome 66.0.3359.181
  2. 好文章!666,学习了
    caacmo2019-05-05 20:48 回复 Windows 7 | 未知浏览器
  3. 哇塞,居然是沙发?留个名
    daadxc2019-05-05 20:04 回复 Windows 7 | 未知浏览器