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)
离线