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)
离线
这个好,让大家过来学一下RTT
离线

终于找到一份可用的硬件定时器驱动了,下下来看看,正需要呢。
离线
这个是用RTT系统跑的定时器吗
离线
不错,学习了,有没有尝试跑裸机程序啊?
离线
这个要怎么用呀,大佬
离线
下下来发现不能使用  貌似需要用到  hwtimer 
然而 hwtimer 没有实现
离线
如果需要毫秒级的定时器的话 可以用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)
离线