智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 8415|回复: 22
打印 上一主题 下一主题

K60--滴答定时器(SysTick)实现精准延时,附代码

  [复制链接]

7

主题

68

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2415
威望
955
贡献
612
兑换币
613
注册时间
2013-3-20
在线时间
424 小时
跳转到指定楼层
1#
发表于 2013-12-8 21:46:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
很少发帖,语句不通请见谅。
昨天写代码时用到了延时,野火例程里面用到的低功耗定时器(LPTMR)最低只能延时1ms。那我需要的是us级的延时该怎么办呢?先分析一下LPTMR用到的时钟。野火库里面LPTMR时钟源有四种:MCGIRCLK、LPO、ERCLK32K、OSCERCLK。而他用到的是LPO-1KHz,最低延时1ms。本来是想将时钟源配置为MCGIRCLK,但编译失败了。代码如下:
void time_delay_us(uint32 us)

{
    // Make sure the clock to the LPTMR is enabled
    MCG_C2    |= MCG_C2_IRCS_MASK;       //Fast internal reference clock selected

    MCG_C1   |=  MCG_C1_IRCLKEN_MASK;   //MCGIRCLK  active

    SIM_SCGC5 |= SIM_SCGC5_LPTIMER_MASK;

    //Set the compare value to the number of us to delay
    LPTMR0_CMR = us;

    //Clock name : MCGIRCLK      Clock source : MCG   4M/4=1M
    LPTMR0_PSR = LPTMR_PSR_PRESCALE(2) | LPTMR_PSR_PCS(0) | LPTMR_PSR_PBYP_MASK  

    // Start the timer
    LPTMR0_CSR |= LPTMR_CSR_TEN_MASK;

    //Wait for counter to reach compare value
    while (!(LPTMR0_CSR & LPTMR_CSR_TCF_MASK));

    // Clear Timer Compare Flag
    LPTMR0_CSR &= ~LPTMR_CSR_TEN_MASK;

    return;
}
希望有大神能帮我看看,上面的该怎么配置。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
由于上面那种行不通,我突然想起了滴答定时器(SysTisk),查遍了芯片手册只发现这个:
为毛连个寄存器都不提!!!
嗯,先冷静一下。。。对了,MK60DZ10.h里面提到的都是寄存器。打开看看:
额。。。貌似有点多。它的寄存器名字和STM32里SysTick的寄存器名字差不多,含义也差不多,于是移植就此展开。






上面两个文件是我根据STM32里面的代码修改的。添加到野火库driver里面。接下来在include.h里面添加#include "SysTick.h"、并将其路径添加到预编译中:

然后
1、在isr.c添加中断函数
void SysTick_IRQHandler()
{
    TimingDelay_Decrement();
}
2、重新宏定义中断号,重映射中断向量表里的中断函数地址,使其指向我们所定义的中断服务函数。在isr.h中添加
#undef  VECTOR_015
#define VECTOR_015    SysTick_IRQHandler
extern void SysTick_IRQHandler();

3、由于SysTick属于内核器件,所以将其配置函数放在arm_ch4.h中:
static inline u32 SysTick_Config(u32 ticks)
{
       if (ticks > SysTick_RVR_RELOAD_MASK)  return (1);        /* Reload value impossible */
       SYST_CSR = 0x00U;  

       SYST_RVR  =      SysTick_RVR_RELOAD(ticks-1) ;            /* set reload register */

       SYST_CVR  =      SysTick_CVR_CURRENT(0);                  /* Load the SysTick Counter Value */

       SYST_CSR  =      SysTick_CSR_CLKSOURCE_MASK |
                        SysTick_CSR_TICKINT_MASK   |
                        SysTick_CSR_ENABLE_MASK;                 /* Enable SysTick IRQ and SysTick Timer */

       return (0);                                              /* Function successful */

}

4、在common.h中找到:#include "MK60DZ10.h"定义的地方   ,将其放在#include "arm_math.h"  和#include "arm_cm4.h"定义之前。
5、最后在主程序中进行初始化SysTick_Init();后,就可以使用Delay_us( x);了,精准的xus延时。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
上面使用的基础是野火K60库,已通过测试,希望对大家有帮助。有什么问题,大家一起讨论。PS:希望有大神能帮我解决开头的那个问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

7

主题

68

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2415
威望
955
贡献
612
兑换币
613
注册时间
2013-3-20
在线时间
424 小时
23#
 楼主| 发表于 2015-4-1 11:00:02 | 只看该作者
FAruba611 发表于 2015-3-31 19:46
学长,我来看你了

逗比
回复 支持 反对

使用道具 举报

1

主题

600

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4212

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1909
贡献
1277
兑换币
1181
注册时间
2013-12-22
在线时间
513 小时
毕业学校
光谷一中
22#
发表于 2015-3-31 19:46:09 | 只看该作者
学长,我来看你了
回复 支持 反对

使用道具 举报

7

主题

68

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2415
威望
955
贡献
612
兑换币
613
注册时间
2013-3-20
在线时间
424 小时
21#
 楼主| 发表于 2014-11-25 19:31:38 | 只看该作者
Xiang0v1 发表于 2014-11-16 10:12
我试验过后发现不可以,有什么办法吗?

没看明白你是怎么用的。
回复 支持 反对

使用道具 举报

3

主题

95

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2724
威望
1350
贡献
860
兑换币
881
注册时间
2013-12-14
在线时间
257 小时
毕业学校
太原科技大学
20#
发表于 2014-11-16 10:12:00 | 只看该作者
Xiang0v1 发表于 2014-11-16 10:10
楼主说的滴答定时很对, 可是 我有一个问题, 滴答定时能放在定时中断中计时吗?比如这样

我试验过后发现不可以,有什么办法吗?
回复 支持 反对

使用道具 举报

3

主题

95

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2724
威望
1350
贡献
860
兑换币
881
注册时间
2013-12-14
在线时间
257 小时
毕业学校
太原科技大学
19#
发表于 2014-11-16 10:10:47 | 只看该作者
楼主说的滴答定时很对, 可是 我有一个问题, 滴答定时能放在定时中断中计时吗?比如这样

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

7

主题

68

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2415
威望
955
贡献
612
兑换币
613
注册时间
2013-3-20
在线时间
424 小时
18#
 楼主| 发表于 2014-7-1 18:22:07 | 只看该作者
wijop 发表于 2014-7-1 18:17
真够流弊的~强

这么久的帖子都能翻出来,你也够强的。。
回复 支持 反对

使用道具 举报

5

主题

833

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6207

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章

威望
3103
贡献
1968
兑换币
1747
注册时间
2014-5-8
在线时间
568 小时
17#
发表于 2014-7-1 18:17:10 | 只看该作者
真够流弊的~强
回复 支持 反对

使用道具 举报

1

主题

128

帖子

0

精华

高级会员

Rank: 4

积分
775
威望
376
贡献
229
兑换币
254
注册时间
2013-11-4
在线时间
85 小时
16#
发表于 2013-12-9 15:00:56 | 只看该作者
楼主强!
回复 支持 反对

使用道具 举报

7

主题

68

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2415
威望
955
贡献
612
兑换币
613
注册时间
2013-3-20
在线时间
424 小时
15#
 楼主| 发表于 2013-12-9 13:06:02 | 只看该作者
new_life 发表于 2013-12-9 12:14
只感觉是大牛啊

去年调硬件,今天有个队友准备考研,软件也交给我了,亚历山大
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-20 23:27 , Processed in 0.051678 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表