88
99static rt_err_t timer_timeout_cb (rt_device_t dev , rt_size_t size )
1010{
11- rt_kprintf ("HT %d \n" , rt_tick_get () );
11+ rt_kprintf ("enter hardware timer isr \n" );
1212
1313 return 0 ;
1414}
@@ -35,7 +35,7 @@ int hwtimer(void)
3535 return -1 ;
3636 }
3737
38- rt_device_set_rx_indicate ( dev , timer_timeout_cb );
38+ /* 时间测量 */
3939 /* 计数时钟设置(默认1Mhz或支持的最小计数频率) */
4040 err = rt_device_control (dev , HWTIMER_CTRL_FREQ_SET , & freq );
4141 if (err != RT_EOK )
@@ -69,12 +69,34 @@ int hwtimer(void)
6969 rt_device_read (dev , 0 , & val , sizeof (val ));
7070 rt_kprintf ("Read: Sec = %d, Usec = %d\n" , val .sec , val .usec );
7171
72+ /* 定时执行回调函数 -- 单次模式 */
73+ /* 设置超时回调函数 */
74+ rt_device_set_rx_indicate (dev , timer_timeout_cb );
75+
76+ /* 单次模式 */
77+ mode = HWTIMER_MODE_PERIOD ;
78+ err = rt_device_control (dev , HWTIMER_CTRL_MODE_SET , & mode );
79+
80+ /* 设置定时器超时值并启动定时器 */
81+ val .sec = t ;
82+ val .usec = 0 ;
83+ rt_kprintf ("SetTime: Sec %d, Usec %d\n" , val .sec , val .usec );
84+ if (rt_device_write (dev , 0 , & val , sizeof (val )) != sizeof (val ))
85+ {
86+ rt_kprintf ("SetTime Fail\n" );
87+ goto EXIT ;
88+ }
89+
90+ /* 等待回调函数执行 */
91+ rt_thread_delay ((t + 1 )* RT_TICK_PER_SECOND );
92+
7293EXIT :
7394 err = rt_device_close (dev );
7495 rt_kprintf ("Close %s\n" , TIMER );
7596
7697 return err ;
7798}
78-
79- FINSH_FUNCTION_EXPORT (hwtimer , "Test hardware timer" );
99+ #ifdef FINSH_USING_MSH
100+ MSH_CMD_EXPORT (hwtimer , "Test hardware timer" );
80101#endif
102+ #endif /* RT_USING_HWTIMER */
0 commit comments