您尚未登录。

楼主 #1 2020-03-30 13:41:16

TivonLiu
会员
注册时间: 2019-12-27
已发帖子: 46
积分: 36

分享一份f1c200s定时器驱动

该驱动为HWTIMER的硬件实现部分,需要用menuconfig打开HWTIMER设备。
timer.zip

离线

#2 2020-03-30 13:48:26

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: 分享一份f1c200s定时器驱动

感谢分享,因为同步的原因要晚几分钟才能下载。





离线

#3 2020-04-02 08:19:10

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

Re: 分享一份f1c200s定时器驱动

rt_hw_interrupt_install(TIMER1_INTERRUPT, timer1_irq_handler, timer, "timer1_irq");
        rt_hw_interrupt_umask(TIMER1_INTERRUPT);

这些是RTT处理好的,估计其它系统还得进一步去阅读RTT代码。
board.c中os_clock_irq_handle就是依赖timer0的。。
libcpu上interrupt.c中
rt_hw_interrupt_init有处理这些。
这个好,让大家过来学一下RTT。

最近编辑记录 staunchheart (2020-04-02 08:20:48)

离线

#4 2020-04-22 13:07:06

834492956
会员
注册时间: 2020-01-10
已发帖子: 11
积分: 1

Re: 分享一份f1c200s定时器驱动

这个好,让大家过来学一下RTT

离线

#5 2020-04-24 09:12:30

akinggw
会员
注册时间: 2020-04-02
已发帖子: 25
积分: 34.5

Re: 分享一份f1c200s定时器驱动

终于找到一份可用的硬件定时器驱动了,下下来看看,正需要呢。

离线

#6 2020-04-24 10:30:00

guzhengstar
会员
注册时间: 2020-01-12
已发帖子: 25
积分: 14.5

Re: 分享一份f1c200s定时器驱动

这个是用RTT系统跑的定时器吗

离线

#7 2020-04-24 10:33:18

龙折翼
会员
注册时间: 2020-04-24
已发帖子: 9
积分: 9

Re: 分享一份f1c200s定时器驱动

不错,学习了,有没有尝试跑裸机程序啊?

离线

#8 2020-04-24 19:34:34

sean68
会员
注册时间: 2020-04-24
已发帖子: 7
积分: 7

Re: 分享一份f1c200s定时器驱动

这个要怎么用呀,大佬

离线

#10 2023-09-25 16:43:36

tangloong
会员
注册时间: 2023-04-11
已发帖子: 210
积分: 189

Re: 分享一份f1c200s定时器驱动

下下来发现不能使用  貌似需要用到  hwtimer
然而 hwtimer 没有实现

离线

#11 2023-09-25 16:45:50

tangloong
会员
注册时间: 2023-04-11
已发帖子: 210
积分: 189

Re: 分享一份f1c200s定时器驱动

如果需要毫秒级的定时器的话 可以用rt_thread 的软件定时器

/* 定时器的控制块 */
static rt_timer_t timer1;
static int cnt = 0;
/**
 * 定时器1超时函数 即回调
 *
 * @param parameter
 */
static void timeout1(void *parameter){
    rt_kprintf("periodic timer is timeout %d\n", cnt);
    /* 运行第10次,停止周期定时器 */
    if (cnt++ >= 9){
        rt_timer_stop(timer1);
        rt_kprintf("periodic timer was stopped! \n");
    }
}

/*
 *  函数名:timer_sample(void)
 *  输入参数:无
 *  输出参数:无
 *  返  回  值:无
 *  函数作用: 创建一个软件定时器    如果需要更细的us 需要使用硬件定时器  直接调用 timer_sample();
*/
int timer_sample(void){
    /* 创建定时器1  周期定时器 */
    //单次定时RT_TIMER_FLAG_ONE_SHOT、周期定时RT_TIMER_FLAG_PERIODIC、 硬件模式RT_TIMER_FLAG_HARD_TIMER、软件模式RT_TIMER_FLAG_SOFT_TIMER;
    //time  定时器的超时时间,单位是时钟节拍  这里是1ms 最小单位也是1ms 如果需要更细的us 需要使用硬件定时器
    timer1 = rt_timer_create("timer1", timeout1,RT_NULL,1000,RT_TIMER_FLAG_PERIODIC);
    /* 启动定时器1 */
    if (timer1 != RT_NULL) rt_timer_start(timer1);
    else rt_kprintf("timer1 error ! \n");
    return 0;
}

直接在需要的地方调用 timer_sample 即可

最近编辑记录 tangloong (2023-09-25 16:46:21)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn