diff options
| author | Bernard Xiong <[email protected]> | 2015-09-09 22:30:45 +0800 |
|---|---|---|
| committer | Bernard Xiong <[email protected]> | 2015-09-09 22:30:45 +0800 |
| commit | 342e8d688dfb355a64f6fe95424c30d370a7ccd5 (patch) | |
| tree | 929db08ebc07c51e24bfee0cf61619ae15f2a2c6 /examples | |
| parent | f43a861e4c39aa4edad1df30fe9f5307dcd97372 (diff) | |
| parent | 984a7ba05128992d8b89fc689f5f5e4f135e2f1b (diff) | |
Merge pull request #546 from heyuanjie87/ForPullRequest
[DeviceDrivers] Add hardware timer framework
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/test/hwtimer_test.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/examples/test/hwtimer_test.c b/examples/test/hwtimer_test.c new file mode 100644 index 0000000000..8f69c4ef87 --- /dev/null +++ b/examples/test/hwtimer_test.c @@ -0,0 +1,80 @@ +#include <rtthread.h> +#include <rtdevice.h> +#include <finsh.h> + +#ifdef RT_USING_HWTIMER + +#define TIMER "timer0" + +static rt_err_t timer_timeout_cb(rt_device_t dev, rt_size_t size) +{ + rt_kprintf("HT %d\n", rt_tick_get()); + + return 0; +} + +int hwtimer(void) +{ + rt_err_t err; + rt_hwtimerval_t val; + rt_device_t dev = RT_NULL; + rt_tick_t tick; + rt_hwtimer_mode_t mode; + int freq = 10000; + int t = 5; + + if ((dev = rt_device_find(TIMER)) == RT_NULL) + { + rt_kprintf("No Device: %s\n", TIMER); + return -1; + } + + if (rt_device_open(dev, RT_DEVICE_OFLAG_RDWR) != RT_EOK) + { + rt_kprintf("Open %s Fail\n", TIMER); + return -1; + } + + rt_device_set_rx_indicate(dev, timer_timeout_cb); + /* ����ʱ������(Ĭ��1Mhz��֧�ֵ���С����Ƶ��) */ + err = rt_device_control(dev, HWTIMER_CTRL_FREQ_SET, &freq); + if (err != RT_EOK) + { + rt_kprintf("Set Freq=%dhz Fail\n", freq); + goto EXIT; + } + + /* ����ģʽ */ + mode = HWTIMER_MODE_PERIOD; + err = rt_device_control(dev, HWTIMER_CTRL_MODE_SET, &mode); + + tick = rt_tick_get(); + rt_kprintf("Start Timer> Tick: %d\n", tick); + /* ���ö�ʱ����ʱֵ��������ʱ�� */ + val.sec = t; + val.usec = 0; + rt_kprintf("SetTime: Sec %d, Usec %d\n", val.sec, val.usec); + if (rt_device_write(dev, 0, &val, sizeof(val)) != sizeof(val)) + { + rt_kprintf("SetTime Fail\n"); + goto EXIT; + } + rt_kprintf("Sleep %d sec\n", t); + rt_thread_delay(t*RT_TICK_PER_SECOND); + + /* ֹͣ��ʱ�� */ + err = rt_device_control(dev, HWTIMER_CTRL_STOP, RT_NULL); + rt_kprintf("Timer Stoped\n"); + /* ��ȡ���� */ + rt_device_read(dev, 0, &val, sizeof(val)); + rt_kprintf("Read: Sec = %d, Usec = %d\n", val.sec, val.usec); + +EXIT: + err = rt_device_close(dev); + rt_kprintf("Close %s\n", TIMER); + + return err; +} + +FINSH_FUNCTION_EXPORT(hwtimer, "Test hardware timer"); +#endif |
