查看: 4593|回复: 8

[原创] lpc54608同样的代码,选用定时器不同,定时时间也不同

[复制链接]

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
发表于 2018-4-24 20:06:34 | 显示全部楼层 |阅读模式
参考LPC 54608的SDKdriver_examples\ctimer\simple_match_interrupt  这个例子里  我将主函数修改了一下如下:

#include "fsl_debug_console.h"
#include "board.h"
#include "fsl_ctimer.h"
#include "pin_mux.h"
#include <stdbool.h>
/*******************************************************************************
* Definitions
******************************************************************************/
#define CTIMER CTIMER3                  /* Timer 3 */
#define TESTCTIMER CTIMER2                  /* Timer 2 */
void taskCTimer_callback(uint32_t flags);
ctimer_callback_t taskctimer_callback_table[] = {
    taskCTimer_callback, NULL, NULL, NULL, NULL, NULL, NULL, NULL};

void taskCTimer_callback(uint32_t flags)
{
        PRINTF("taskCTimer_callback is doing\r\n");
}




static void TaskCTimerInit(void)
{
         ctimer_match_config_t matchConfig;
         ctimer_config_t taskCTimerConfig;
        SYSCON->ASYNCAPBCTRL = 1;
        /* Use 12 MHz clock for some of the Ctimers */
        CLOCK_AttachClk(kFRO12M_to_ASYNC_APB);
       
        CTIMER_GetDefaultConfig(&taskCTimerConfig);
        CTIMER_Init(TESTCTIMER, &taskCTimerConfig);
        matchConfig.enableCounterReset = true;
        matchConfig.enableCounterStop = false;
        matchConfig.matchValue = 500*12000; //500ms
        matchConfig.outControl = kCTIMER_Output_NoAction;
        matchConfig.outPinInitState = false;
        matchConfig.enableInterrupt = true;
        CTIMER_RegisterCallBack(TESTCTIMER, &taskctimer_callback_table[0], kCTIMER_SingleCallback);
        CTIMER_SetupMatch(TESTCTIMER, kCTIMER_Match_0, &matchConfig);
        CTIMER_StartTimer(TESTCTIMER);
}

int main(void)
{
        CLOCK_EnableClock(kCLOCK_InputMux);
        CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
        BOARD_InitPins();
        BOARD_BootClockFROHF96M();
        BOARD_InitDebugConsole();
        TaskCTimerInit();
        while(1)
        {}
}

发现如果采用CTIMER2定时500ms那么定时出来的时间是55ms左右

【2018-04-24 20:01:10:819】taskCTimer_callback is doing

【2018-04-24 20:01:10:874】taskCTimer_callback is doing

【2018-04-24 20:01:10:928】taskCTimer_callback is doing

【2018-04-24 20:01:10:980】taskCTimer_callback is doing

【2018-04-24 20:01:11:034】taskCTimer_callback is doing

【2018-04-24 20:01:11:087】taskCTimer_callback is doing

【2018-04-24 20:01:11:195】taskCTimer_callback is doing

【2018-04-24 20:01:11:247】taskCTimer_callback is doing

【2018-04-24 20:01:11:300】taskCTimer_callback is doing

【2018-04-24 20:01:11:353】taskCTimer_callback is doing
但是我如果用CTMIER3,也就是红色字体换成CTIMER 换成定时时间就是准确的:

大概在500ms左右
【2018-04-24 20:05:25:314】taskCTimer_callback is doing

【2018-04-24 20:05:25:813】taskCTimer_callback is doing

【2018-04-24 20:05:26:312】taskCTimer_callback is doing

【2018-04-24 20:05:26:811】taskCTimer_callback is doing

【2018-04-24 20:05:27:310】taskCTimer_callback is doing

【2018-04-24 20:05:27:808】taskCTimer_callback is doing

【2018-04-24 20:05:28:309】taskCTimer_callback is doing

【2018-04-24 20:05:28:807】taskCTimer_callback is doing

【2018-04-24 20:05:29:306】taskCTimer_callback is doing

【2018-04-24 20:05:29:806】taskCTimer_callback is doing

【2018-04-24 20:05:30:304】taskCTimer_callback is doing

【2018-04-24 20:05:30:804】taskCTimer_callback is doing





回复

使用道具 举报

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
 楼主| 发表于 2018-4-24 20:34:42 | 显示全部楼层
刚才试了下,SDK里的源码,除了选用定时器不一样,求他任何地方无修改,发现定时时间也不一样
回复 支持 反对

使用道具 举报

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
 楼主| 发表于 2018-4-25 08:48:46 | 显示全部楼层
我SDK里simple-match-interrupt这个例子里的match中断回调函数里的内容注释,只打印PRINTF("MATCH0\r\n");
PRINTF("MATCH1\r\n");
定时器配置完全一样 ,matchConfig0.enableCounterReset = true;
    matchConfig0.enableCounterStop = false;
    matchConfig0.matchValue = BUS_CLK_FREQ / 4;
    matchConfig0.outControl = kCTIMER_Output_Toggle;
    matchConfig0.outPinInitState = false;
    matchConfig0.enableInterrupt = true;
发现分别用定时器2和定时器3,定时时间结果就不一样,
定时器3出来的定时时间是1S
【2018-04-25 08:46:01:539】MATCH0
MATCH1

【2018-04-25 08:46:02:537】MATCH0
MATCH1

【2018-04-25 08:46:03:535】MATCH0
MATCH1

【2018-04-25 08:46:04:533】MATCH0
MATCH1

【2018-04-25 08:46:05:531】MATCH0
MATCH1

【2018-04-25 08:46:06:529】MATCH0
MATCH1


定时器2出来的时间是准确的250ms
【2018-04-25 08:47:52:720】MATCH0
MATCH1

【2018-04-25 08:47:52:970】MATCH0
MATCH1

【2018-04-25 08:47:53:219】MATCH0
MATCH1

【2018-04-25 08:47:53:469】MATCH0
MATCH1

【2018-04-25 08:47:53:718】MATCH0
MATCH1

【2018-04-25 08:47:53:968】MATCH0
MATCH1

【2018-04-25 08:47:54:217】MATCH0
MATCH1


请问这是什么原因?
回复 支持 反对

使用道具 举报

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
 楼主| 发表于 2018-4-25 14:08:08 | 显示全部楼层
原因已经找到:定时器时钟使能寄存器不一样
16.3 Basic configuration
• Set the appropriate bits to enable clocks to timers that will be used: CTIMER0 and
CTIMER1, and CTIMER2 in the AHBCLKCTRL1 register (Section 6.5.20), CTIMER3
and CTIMER4 in the ASYNCAPBCLKCTRL register (Section 6.5.104).
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24903
最后登录
2025-7-22
发表于 2018-4-25 14:31:07 | 显示全部楼层
好的,感谢楼主的解决经验分享!
回复 支持 反对

使用道具 举报

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
 楼主| 发表于 2018-4-25 15:13:19 | 显示全部楼层
小恩GG 发表于 2018-4-25 14:31
好的,感谢楼主的解决经验分享!

但是有个问题,定时时间太短,就不准,比如50ms甚至20 30ms不准,但是定时100 200ms就比较准,定时器的时钟是12M,这是什么原因呢
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24903
最后登录
2025-7-22
发表于 2018-4-25 15:29:12 | 显示全部楼层
paulkiyt 发表于 2018-4-25 15:13
但是有个问题,定时时间太短,就不准,比如50ms甚至20 30ms不准,但是定时100 200ms就比较准,定时器的时 ...

你怎么测试看准不准的?
回复 支持 反对

使用道具 举报

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
 楼主| 发表于 2018-4-25 15:42:23 | 显示全部楼层
小恩GG 发表于 2018-4-25 15:29
你怎么测试看准不准的?

中断里只打印 PRINTF("MATCH0\r\n");
然后看打印时间
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24903
最后登录
2025-7-22
发表于 2018-4-25 15:54:42 | 显示全部楼层
paulkiyt 发表于 2018-4-25 15:42
中断里只打印 PRINTF("MATCH0\r\n");
然后看打印时间

PRINTF还是耗较多时间的,我建议你可以使用定时翻转IO口,然后测试IO的间隔试试。
按道理,如果时钟源也准确,定时也不会有较大差距。
你先试试,如果还有问题,告诉我,我会帮你具体检查。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-22 19:51 , Processed in 0.098699 second(s), 29 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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