huangcm
2025-09-01 53d8e046ac1bf2ebe94f671983e3d3be059df91a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#ifndef __PIN_H__
#define __PIN_H__
 
#include "ibase.h"
#include "driver.h"
 
#define PIN_GRP_PL  (0x1)
#define PIN_GRP_PM  (0x2)
 
#define GPIO_GP_PL    PIN_GRP_PL
#define GPIO_GP_PM    PIN_GRP_PM
 
#define GPIO_PIN_0    0
#define GPIO_PIN_1    1
#define GPIO_PIN_2    2
#define GPIO_PIN_3    3
#define GPIO_PIN_4    4
#define GPIO_PIN_5    5
#define GPIO_PIN_6    6
#define GPIO_PIN_7    7
#define GPIO_PIN_8    8
#define GPIO_PIN_9    9
#define GPIO_PIN_10    10
#define GPIO_PIN_11    11
#define GPIO_PIN_12    12
#define GPIO_PIN_13    13
#define GPIO_PIN_14    14
#define GPIO_PIN_15    15
#define GPIO_PIN_16    16
#define GPIO_PIN_17    17
#define GPIO_PIN_18    18
#define GPIO_PIN_19    19
#define GPIO_PIN_20    20
#define GPIO_PIN_21    21
#define GPIO_PIN_22    22
#define GPIO_PIN_23    23
#define GPIO_PIN_24    24
#define GPIO_PIN_25    25
#define GPIO_PIN_26    26
#define GPIO_PIN_27    27
#define GPIO_PIN_28    28
#define GPIO_PIN_29    29
#define GPIO_PIN_30    30
#define GPIO_PIN_31    31
 
#define GPIO_FN_0    0
#define GPIO_FN_1    1
#define GPIO_FN_2    2
#define GPIO_FN_3    3
#define GPIO_FN_4    4
#define GPIO_FN_5    5
#define GPIO_FN_6    6
#define GPIO_FN_7    7
 
#define GPIO_EXTI_DISABLE    0
#define GPIO_EXTI_ENABLE    1
 
#define GPIO_CLK_HOSC        1
#define GPIO_CLK_LOSC        0
 
#define CPUS_GPIO_PL(num)    (1 << num)
#define CPUS_GPIO_PM(num)    (1 << (num + 12))
 
 
#define GPIO_EXTI_POSITIVE_EDGE  0x0
#define GPIO_EXTI_NEGATIVE_EDGE  0x1
#define GPIO_EXTI_HIGN_LEVEL     0x2
#define GPIO_EXTI_LOW_LEVEL      0x3
#define GPIO_EXTI_DOUBLE_EDGE    0x4
 
 
typedef struct {
   u8 pin_grp;
   u8 pin_num;
   u8 pin_fn;
   u8 pin_driving;
   u8 pin_pull;
   u8 pin_exti_config;
   u8 pin_exti_ctrl;
   u8 pin_exti_pre;
   u8 pin_exti_clk;
}pin_config;
 
typedef struct {
   pin_config init_config;
   u8 pin_suspend;
   u8 pin_used;
   u8 pin_data;
   u8 pin_pending;
   __pISR_t exti_handler;
   void *owner;
}pin_typedef;
//------------------------------------------------------------------------------
//  pin pull status
//------------------------------------------------------------------------------
typedef enum pin_pull
{
   GPIO_PULL_DISABLE    =   0x00,
   GPIO_PULL_UP        =   0x01,
   GPIO_PULL_DOWN       =   0x02,
   GPIO_PULL_RESERVED   =   0x03,
   GPIO_PULL_DEFAULT    =   0xFF
} pin_pull_e;
 
//------------------------------------------------------------------------------
//  pin multi drive level
//------------------------------------------------------------------------------
typedef enum pin_multi_drive
{
   GPIO_MULTI_DRIVE_0       =   0x00,
   GPIO_MULTI_DRIVE_1       =   0x01,
}pin_multi_drive_e;
 
 
 
s32 pin_set(pin_config *config,pin_typedef **owner);
void pin_disable(pin_typedef *pin);
void pin_exti_irq_request(pin_typedef *pin, __pISR_t handler);
void pin_data_write(pin_typedef *pin,u32 data);
u32 pin_data_read(pin_typedef *pin);
u32 is_wanted_gpio_int(u32 pin_grp, u32 gpio_int_en);
u32 is_cpux_gpio_pending(void);
u32 pin_query_pending(pin_typedef *pin);
u32 pin_clear_pending(pin_typedef *pin);
s32 pin_enable_int(pin_typedef *pin);
s32 pin_disable_int(pin_typedef *pin);
s32 pl_irq_handler(void *p_arg,u32 intno);
s32 pm_irq_handler(void *p_arg,u32 intno);
 
s32 pin_wakeup_init(void *parg);
s32 pin_wakeup_exit(void *parg);
s32 default_pin_wakeup_init(void *parg);
s32 default_pin_wakeup_exit(void *parg);
s32 pinl_init(void);
s32 pinm_init(void);
 
s32 pin_suspend(arisc_device *dev);
s32 pin_resume(arisc_device *dev);
 
void pin_exit(void);
typedef struct {
   arisc_device dev;
   arisc_driver *dri;
}pin_device;
 
#endif