• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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