diff options
| author | Bernard Xiong <[email protected]> | 2015-09-24 17:23:00 +0800 |
|---|---|---|
| committer | Bernard Xiong <[email protected]> | 2015-09-24 17:23:00 +0800 |
| commit | 9413a61499a98cd86df0e4abb39da9f681dbdd81 (patch) | |
| tree | b794148debd7b1668a8c7fbfdf67571cb608ea25 /examples | |
| parent | 6a7638599ca0d23d5e40f7a36a13d8be3e47543a (diff) | |
| parent | a8dc960ba1f1bbe7758cd8db24b886d96ae2c96c (diff) | |
Merge branch 'master' of https://git.coding.net/RT-Thread/rt-thread
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 |
