查看: 6216|回复: 9

[求助] 定时器的问题

[复制链接]

该用户从未签到

1

主题

6

帖子

0

新手上路

Rank: 1

积分
0
最后登录
1970-1-1
发表于 2011-12-21 17:38:23 | 显示全部楼层 |阅读模式
我使用的是k60n512的CPU,刚开始研究,还有许多不懂得地方,希望各位高手指点。
现在要做个这样的功能:设置一个定时器,每隔500微秒去写一个GPIO的管脚。
关于不在定时器下循环写这个GPIO管脚,我通过示波器测试通过,读数正常,并且频率可以到纳秒级。
刚开始时,定时器的精度只能是10毫秒,后来我发现MQX把小于10毫秒的时间屏蔽了,然后把 mqx\source\timer\Ti_spati.c 的122行改了之后,重新编译,测试定时器可以达到微秒级了。
但是我在定时器所执行的函数里,加入了写 GPIO的函数,通过示波器发现,只有把定时器大于等于10毫秒,示波器才能读数正常,但是小于10毫秒,就又不对了。
可能我的描述不是很详细,希望高手指点,讨论一下。谢谢。
我知道答案 目前已有8人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-12-22 15:29:39 | 显示全部楼层

    RE:定时器的问题

    请问一下,GPIO的波形是怎么样的?能不能截图说一下。我怀疑是由于任务切换导致的。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    0
    最后登录
    1970-1-1
     楼主| 发表于 2011-12-22 16:40:08 | 显示全部楼层

    回复:定时器的问题

    哈哈,终于有人回复我了,谢谢啊,真是对我很大鼓励啊。
    未标题-1.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-12-22 17:13:43 | 显示全部楼层

    RE:定时器的问题

    我看了一下,应该是你程序的问题,你是不是每次进入都会将GPIO设置一回呢?你的任务是5ms切换一次吗?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    0
    最后登录
    1970-1-1
     楼主| 发表于 2011-12-22 17:20:55 | 显示全部楼层

    回复:定时器的问题

    我是需要500微秒切换一次,只是用5毫秒来做实验。我刚刚发现了,好像定时器最小只能是10毫秒切换一次。看来只有自己写一个中断定时器了,不知道有没有其他办法?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    0
    最后登录
    1970-1-1
     楼主| 发表于 2011-12-22 17:31:24 | 显示全部楼层

    回复:定时器的问题

    我的这个CPU的任务切换时间应该是10毫秒,可是我想要有一个500微秒做一次采样的中断定时器,是不是用MQX提供的功能,貌似根本无法实现了?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-12-23 09:50:52 | 显示全部楼层

    RE:定时器的问题

    _time_add_day_to_ticks 运行时间加天
    _time_add_hour_to_ticks 运行时间加小时
    _time_add_min_to_ticks 运行时间加分钟
    _time_add_msec_to_ticks 运行时间加毫秒
    _time_add_nsec_to_ticks 运行时间加纳秒
    _time_add_psec_to_ticks 运行时间加皮秒
    _time_add_sec_to_ticks 运行时间加秒
    _time_add_usec_to_ticks 运行时间加微秒
    你看看上面哪个符合你要的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-12-23 09:52:35 | 显示全部楼层

    RE:定时器的问题

    _time_add_psec_to_ticks
    我感觉这个绝对符合你的要求。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    0
    最后登录
    1970-1-1
     楼主| 发表于 2011-12-23 10:27:00 | 显示全部楼层

    回复:定时器的问题

    谢谢你的回答。前几天我已经试过了。
    /////////////////////////////////////
    MQX_TICK_STRUCT ticks;
     MQX_TICK_STRUCT dticks;
    _timer_id on_timer;
    _timer_create_component(TIMER_TASK_PRIORITY, 1024);
     _time_init_ticks(&dticks, 0);
     _time_add_msec_to_ticks(&dticks,5);
     _time_get_ticks(&ticks);
     _time_add_msec_to_ticks(&ticks, 100);
     
     on_timer =  _timer_start_periodic_at_ticks(LED_twinkle, 0, TIMER_KERNEL_TIME_MODE, &ticks, &dticks);
    //////////////////////////////////
    // 我刚开始写的时候,发现_timer_start_periodic_at_ticks函数调用_timer_start_periodic_at_internal函数的时候把小于10毫秒的时间屏蔽了,后来我改了一下,dticks可以设小于10毫秒的时间,我设了一个计数器在LED_twinkle里,经过延时后,计数器的值是对了,后来我在LED_twinkle加入时间记录计数器,发现dticks小于10毫秒,不管是多少,LED_twinkle这个函数依然是只能每隔10毫秒才被执行,我设成5毫秒,其实是每隔10毫秒,执行LED_twinkle两次,设成500微妙,就是每隔10毫秒,执行LED_twinkle20次。任务切换时间是10毫秒,定时器也是一个任务,所以定时器不管设多小的值,都是10毫秒切换出来执行一次函数。
    现在没有头绪,估计要改内核,并且改动很大,很困难。
    我就是想每隔500毫秒执行一次采样,不知道有没有什么好的思路和想法能提供一下,谢谢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-12-23 10:41:14 | 显示全部楼层

    RE:定时器的问题

    这个是你任务切换那的问题,因为你的任务每隔10ms才进入1次。你把任务while(for(;;))里面的延时用小点。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-18 10:05 , Processed in 0.106945 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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