1 /*
2 * Copyright (C) 2022, Canaan Bright Sight Co., Ltd
3 *
4 * All enquiries to https://www.canaan-creative.com/
5 */
6
7 /*
8 * Copyright (c) 2006-2025 RT-Thread Development Team
9 *
10 * SPDX-License-Identifier: Apache-2.0
11 */
12
13 /*
14 * 本测试用例演示基于 01Studio Canmv-K230 开发板测试 gpio 的基本输入和输出功能。其中
15 * gpio_led_flashing 演示 LED 的跑马灯功能。LED 采用开发板上的 LED2(连接 LED_GPIO52)。
16 * gpio_io 演示用杜邦线将 40Pin GPIO 中的 GPIO33 和 GPIO32 连接起来,GPIO33 配
17 * 置为输出,GPIO32 配置为输入。分别用 GPIO33 产生输出给 GPIO32 读取并检查是否
18 * 和预期的输出一致。
19 */
20 #include <unistd.h>
21 #include <stdio.h>
22 #include <rtthread.h>
23 #include <rtdevice.h>
24 #include <ioremap.h>
25 #include "board.h"
26 #include "drv_pinctrl.h"
27 #include "drv_gpio.h"
28 #include "utest.h"
29
30 #define LED_PIN_NUM 52
31
32 #define OUT_PIN_NUM 33
33 #define IN_PIN_NUM 32
34
gpio_led_flashing(void)35 static void gpio_led_flashing(void)
36 {
37 int cnt = 5;
38
39 /* Use default pinmux function */
40 kd_pin_mode(LED_PIN_NUM, GPIO_DM_OUTPUT);
41
42 while(cnt--)
43 {
44 LOG_I("led ON");
45 kd_pin_write(LED_PIN_NUM, GPIO_PV_HIGH);
46 rt_thread_mdelay(1000);
47
48 LOG_I("led OFF");
49 kd_pin_write(LED_PIN_NUM, GPIO_PV_LOW);
50 rt_thread_mdelay(1000);
51 }
52 }
53
gpio_io(void)54 static void gpio_io(void)
55 {
56 int cnt = 5;
57 int level = 0xff;
58
59 rt_uint32_t val;
60
61 /* Set pinmux function */
62 k230_pinctrl_set_function(IN_PIN_NUM, IOMUX_FUNC1);
63 k230_pinctrl_set_ie(IN_PIN_NUM, 1);
64 k230_pinctrl_set_oe(IN_PIN_NUM, 0);
65
66 k230_pinctrl_set_function(OUT_PIN_NUM, IOMUX_FUNC1);
67 k230_pinctrl_set_ie(OUT_PIN_NUM, 0);
68 k230_pinctrl_set_oe(OUT_PIN_NUM, 1);
69
70 /* Set GPIO mode */
71 kd_pin_mode(OUT_PIN_NUM, GPIO_DM_OUTPUT);
72 kd_pin_mode(IN_PIN_NUM, GPIO_DM_INPUT);
73
74 while(cnt--)
75 {
76 kd_pin_write(OUT_PIN_NUM, GPIO_PV_LOW);
77 level = kd_pin_read(IN_PIN_NUM);
78 LOG_I("--> %d", level);
79 uassert_int_equal(level, GPIO_PV_LOW);
80
81 kd_pin_write(OUT_PIN_NUM, GPIO_PV_HIGH);
82 level = kd_pin_read(IN_PIN_NUM);
83 LOG_I("--> %d", level);
84 uassert_int_equal(level, GPIO_PV_HIGH);
85
86 rt_thread_mdelay(500);
87 }
88 }
89
testcase(void)90 static void testcase(void)
91 {
92 UTEST_UNIT_RUN(gpio_led_flashing);
93 UTEST_UNIT_RUN(gpio_io);
94 }
95
utest_tc_init(void)96 static rt_err_t utest_tc_init(void)
97 {
98 return RT_EOK;
99 }
utest_tc_cleanup(void)100 static rt_err_t utest_tc_cleanup(void)
101 {
102 return RT_EOK;
103 }
104
105 UTEST_TC_EXPORT(testcase, "gpio", utest_tc_init, utest_tc_cleanup, 100);