1 /*
2 * Copyright (c) 2022 HPMicro
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <ohos_init.h>
16 #include <stdio.h>
17 #include <los_task.h>
18 #include <stdint.h>
19 #include <log.h>
20 #include <gpio_if.h>
21 #include <hpm_soc.h>
22 #include <hpm_clock_drv.h>
23
24 #define LOG_TAG "HPM_GPIO_OUT"
25
26 #define GPIOA(pin) (pin)
27 #define GPIOB(pin) (pin + 32)
28 #define GPIOC(pin) (pin + 32 * 2)
29 #define GPIOD(pin) (pin + 32 * 3)
30 #define GPIOE(pin) (pin + 32 * 4)
31 #define GPIOF(pin) (pin + 32 * 5)
32 #define GPIOY(pin) (pin + 32 * 14)
33 #define GPIOZ(pin) (pin + 32 * 15)
34
GpioDriverInTestTask(unsigned int arg)35 static void *GpioDriverInTestTask(unsigned int arg)
36 {
37 HILOG_INFO(HILOG_MODULE_APP, "GpioDriverInTestTask");
38
39 HPM_BIOC->PAD[IOC_PAD_PZ02].FUNC_CTL = IOC_PZ02_FUNC_CTL_SOC_PZ_02;
40 HPM_BIOC->PAD[IOC_PAD_PZ02].PAD_CTL = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1) | IOC_PAD_PAD_CTL_SMT_SET(1);
41 HPM_BIOC->PAD[IOC_PAD_PZ03].FUNC_CTL = IOC_PZ03_FUNC_CTL_SOC_PZ_03;
42 HPM_BIOC->PAD[IOC_PAD_PZ03].PAD_CTL = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1) | IOC_PAD_PAD_CTL_SMT_SET(1);
43
44 HPM_IOC->PAD[IOC_PAD_PZ02].FUNC_CTL = 0;
45 HPM_IOC->PAD[IOC_PAD_PZ02].PAD_CTL = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1) | IOC_PAD_PAD_CTL_SMT_SET(1);
46
47 HPM_IOC->PAD[IOC_PAD_PZ03].FUNC_CTL = 0;
48 HPM_IOC->PAD[IOC_PAD_PZ03].PAD_CTL = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1) | IOC_PAD_PAD_CTL_SMT_SET(1);
49
50 GpioSetDir(GPIOZ(2), GPIO_DIR_IN);
51 GpioSetDir(GPIOZ(3), GPIO_DIR_IN);
52
53 uint32_t pz02_flag = GPIO_VAL_HIGH;
54 uint32_t pz03_flag = GPIO_VAL_HIGH;
55
56 while (1) {
57 uint16_t val;
58 GpioRead(GPIOZ(2), &val);
59 if (val == GPIO_VAL_LOW && pz02_flag == GPIO_VAL_HIGH) {
60 pz02_flag = GPIO_VAL_LOW;
61 HILOG_INFO(HILOG_MODULE_APP, "GPIOZ(2) DOWN");
62 } else if (val == GPIO_VAL_HIGH && pz02_flag == GPIO_VAL_LOW) {
63 pz02_flag = GPIO_VAL_HIGH;
64 HILOG_INFO(HILOG_MODULE_APP, "GPIOZ(2) UP");
65 }
66
67 GpioRead(GPIOZ(3), &val);
68 if (val == GPIO_VAL_LOW && pz03_flag == GPIO_VAL_HIGH) {
69 pz03_flag = GPIO_VAL_LOW;
70 HILOG_INFO(HILOG_MODULE_APP, "GPIOZ(3) DOWN");
71 } else if (val == GPIO_VAL_HIGH && pz03_flag == GPIO_VAL_LOW) {
72 pz03_flag = GPIO_VAL_HIGH;
73 HILOG_INFO(HILOG_MODULE_APP, "GPIOZ(3) UP");
74 }
75
76 LOS_TaskDelay(50);
77 }
78 return NULL;
79 }
80
GpioDriverTest(void)81 static void GpioDriverTest(void)
82 {
83 TSK_INIT_PARAM_S taskInitParam = {0};
84
85 taskInitParam.pcName = "gpio_in_test";
86 taskInitParam.pfnTaskEntry = GpioDriverInTestTask;
87 taskInitParam.stackAddr = 0;
88 taskInitParam.uwStackSize = 8192;
89 taskInitParam.usTaskPrio = 20;
90 taskInitParam.uwArg = 0x66;
91 UINT32 taskID;
92 LOS_TaskCreate(&taskID, &taskInitParam);
93 }
94
95 APP_FEATURE_INIT(GpioDriverTest);
96