summaryrefslogtreecommitdiff
path: root/bsp/stm32
diff options
context:
space:
mode:
authorthread-liu <[email protected]>2020-12-05 14:32:57 +0800
committerthread-liu <[email protected]>2020-12-05 14:33:12 +0800
commit5de6c0defcd6bda92b4044f78f8d898dcff60a9f (patch)
tree116067a3a826a99e539cfb2f106375e3e7538b03 /bsp/stm32
parent3ecf12b5b2a13a726a32c9c0372bb461e88b49eb (diff)
[add] timer test case.
Diffstat (limited to 'bsp/stm32')
-rw-r--r--bsp/stm32/stm32mp157a-st-ev1/board/Kconfig2
-rw-r--r--bsp/stm32/stm32mp157a-st-ev1/board/SConscript3
-rw-r--r--bsp/stm32/stm32mp157a-st-ev1/board/ports/timer_sample.c160
3 files changed, 164 insertions, 1 deletions
diff --git a/bsp/stm32/stm32mp157a-st-ev1/board/Kconfig b/bsp/stm32/stm32mp157a-st-ev1/board/Kconfig
index 37a8a780ba..c69447c2f7 100644
--- a/bsp/stm32/stm32mp157a-st-ev1/board/Kconfig
+++ b/bsp/stm32/stm32mp157a-st-ev1/board/Kconfig
@@ -68,7 +68,7 @@ menu "Onboard Peripheral Drivers"
if BSP_USING_SD_CARD
config SD_USING_DFS
bool "sd card fatfs"
- default n
+ default y
endif
menuconfig BSP_USING_EMMC
diff --git a/bsp/stm32/stm32mp157a-st-ev1/board/SConscript b/bsp/stm32/stm32mp157a-st-ev1/board/SConscript
index 833ef7701c..5b4ffbfab1 100644
--- a/bsp/stm32/stm32mp157a-st-ev1/board/SConscript
+++ b/bsp/stm32/stm32mp157a-st-ev1/board/SConscript
@@ -73,6 +73,9 @@ if GetDepend(['BSP_USING_LPTIM1']):
if GetDepend(['BSP_USING_RS485']):
src += Glob('ports/drv_rs485.c')
+if GetDepend(['BSP_USING_TIM14']):
+ src += Glob('ports/timer_sample.c')
+
if GetDepend(['BSP_USING_OPENAMP']):
src += Glob('CubeMX_Config/CM4/Src/ipcc.c')
src += Glob('CubeMX_Config/CM4/Src/openamp.c')
diff --git a/bsp/stm32/stm32mp157a-st-ev1/board/ports/timer_sample.c b/bsp/stm32/stm32mp157a-st-ev1/board/ports/timer_sample.c
new file mode 100644
index 0000000000..fdbc721c8d
--- /dev/null
+++ b/bsp/stm32/stm32mp157a-st-ev1/board/ports/timer_sample.c
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2006-2022, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2020-07-27 thread-liu first version
+ */
+
+#include <board.h>
+
+#if defined(BSP_USING_TIM14) && defined(BSP_USING_ADC2)
+
+#include <rtthread.h>
+#include <rtdevice.h>
+
+#define HWTIMER_DEV_NAME "timer14"
+#define HWADC_DEV_NAME "adc2"
+#define REFER_VOLTAGE 330 /* voltage reference */
+#define CONVERT_BITS (1 << 12) /* Conversion digit */
+#define ADC_DEV_CHANNEL 6
+
+static rt_adc_device_t adc_dev = RT_NULL;
+
+static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size)
+{
+ rt_uint32_t value = 0 , vol = 0;
+
+ /* read adc value */
+ value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
+ rt_kprintf("the value is :%d \n", value);
+
+ vol = value * REFER_VOLTAGE / CONVERT_BITS;
+ rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);
+
+ return 0;
+}
+
+static int hwtimer_stop(void)
+{
+ rt_err_t ret = RT_EOK;
+ rt_device_t hw_dev = RT_NULL;
+
+ hw_dev = rt_device_find(HWTIMER_DEV_NAME);
+ if (hw_dev == RT_NULL)
+ {
+ rt_kprintf("hwtimer sample run failed! can't find %s device!\n", HWTIMER_DEV_NAME);
+ return RT_ERROR;
+ }
+
+ ret = rt_device_close(hw_dev);
+ if (ret != RT_EOK)
+ {
+ rt_kprintf("close %s device failed!\n", HWTIMER_DEV_NAME);
+ return ret;
+ }
+
+ /* close adc channel */
+ ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
+
+ return ret;
+}
+
+static int hwtimer_start(void)
+{
+ rt_err_t ret = RT_EOK;
+ rt_hwtimerval_t timeout_s;
+ rt_device_t hw_dev = RT_NULL;
+
+ rt_hwtimer_mode_t mode;
+
+ hw_dev = rt_device_find(HWTIMER_DEV_NAME);
+ if (hw_dev == RT_NULL)
+ {
+ rt_kprintf("hwtimer sample run failed! can't find %s device!\n", HWTIMER_DEV_NAME);
+ return RT_ERROR;
+ }
+
+ /* find adc dev */
+ adc_dev = (rt_adc_device_t)rt_device_find(HWADC_DEV_NAME);
+ if (adc_dev == RT_NULL)
+ {
+ rt_kprintf("hwtimer sample run failed! can't find %s device!\n", HWADC_DEV_NAME);
+ return RT_ERROR;
+ }
+
+ /* Open the device in read/write mode */
+ ret = rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR);
+ if (ret != RT_EOK)
+ {
+ rt_kprintf("open %s device failed!\n", HWTIMER_DEV_NAME);
+ return ret;
+ }
+
+ /* Set the timeout callback function */
+ rt_device_set_rx_indicate(hw_dev, timeout_cb);
+
+ /* Set the mode to periodic timer */
+ mode = HWTIMER_MODE_PERIOD;
+ ret = rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode);
+ if (ret != RT_EOK)
+ {
+ rt_kprintf("set mode failed! ret is :%d\n", ret);
+ return ret;
+ }
+
+ timeout_s.sec = 5;
+ timeout_s.usec = 0;
+
+ if (rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s)) != sizeof(timeout_s))
+ {
+ rt_kprintf("set timeout value failed\n");
+ return RT_ERROR;
+ }
+
+ rt_thread_mdelay(3500);
+
+ rt_device_read(hw_dev, 0, &timeout_s, sizeof(timeout_s));
+ rt_kprintf("Read: Sec = %d, Usec = %d\n", timeout_s.sec, timeout_s.usec);
+
+ /* enable adc channel */
+ ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
+
+ return ret;
+}
+
+static int tim_sample(int argc, char *argv[])
+{
+ if (argc > 1)
+ {
+ if (!rt_strcmp(argv[1], "start"))
+ {
+ rt_kprintf("tim14 will start\n");
+ hwtimer_start();
+ return RT_EOK;
+ }
+ else if (!rt_strcmp(argv[1], "stop"))
+ {
+ hwtimer_stop();
+ rt_kprintf("stop tim14 success!\n");
+ return RT_EOK;
+ }
+ else
+ {
+ goto _exit;
+ }
+ }
+_exit:
+ {
+ rt_kprintf("Usage:\n");
+ rt_kprintf("tim_sample start - start TIM14 \n");
+ rt_kprintf("tim_sample stop - stop TIM14 \n");
+ }
+
+ return RT_ERROR;
+}
+MSH_CMD_EXPORT(tim_sample, tim sample);
+
+#endif