huangcm
2025-07-03 a76b2fadf6ad4adf86e241e3753a63efe03ef80c
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
/*
*********************************************************************************************************
*                                                AR100 SYSTEM
*                                     AR100 Software System Develop Kits
*                                                 pin module
*
*                                    (c) Copyright 2012-2016, Sunny China
*                                             All Rights Reserved
*
* File    : pin.h
* By      : Sunny
* Version : v1.0
* Date    : 2012-5-4
* Descript: pin management module public header.
* Update  : date                auther      ver     notes
*           2012-5-4 13:57:15   Sunny       1.0     Create this file.
*********************************************************************************************************
*/
 
#ifndef __PIN_H__
#define __PIN_H__
/*
------------------------------------------------------------------------------
pin groups define
------------------------------------------------------------------------------
*/
#define PIN_GRP_PL (0x1)
#define PIN_GRP_PM (0x2)
 
/*
------------------------------------------------------------------------------
pin pull status
------------------------------------------------------------------------------
*/
typedef enum pin_pull {
   PIN_PULL_DISABLE    =   0x00,
   PIN_PULL_UP     =   0x01,
   PIN_PULL_DOWN       =   0x02,
   PIN_PULL_RESERVED   =   0x03,
   PIN_PULL_DEFAULT    =   0xFF
} pin_pull_e;
 
/*
------------------------------------------------------------------------------
pin multi drive level
------------------------------------------------------------------------------
*/
typedef enum pin_multi_drive {
   PIN_MULTI_DRIVE_0       =   0x00,
   PIN_MULTI_DRIVE_1       =   0x01,
   PIN_MULTI_DRIVE_2       =   0x02,
   PIN_MULTI_DRIVE_3       =   0x03,
   PIN_MULTI_DRIVE_DEFAULT     =   0xFF
} pin_multi_drive_e;
 
/*
------------------------------------------------------------------------------
pin data bit status
------------------------------------------------------------------------------
*/
typedef enum pin_data_status {
   PIN_DATA_LOW     = 0x00,
   PIN_DATA_HIGH    = 0x01,
   PIN_DATA_DEFAULT = 0XFF
} pin_data_status_e;
 
/*
------------------------------------------------------------------------------
pin multi select functions
------------------------------------------------------------------------------
*/
typedef enum pin_multi_select {
   PIN_MULTI_SEL_INPUT  = 0x0,
   PIN_MULTI_SEL_OUTPUT = 0x1,
} pin_multi_select_t;
 
/*
------------------------------------------------------------------------------
pin int trigger mode
------------------------------------------------------------------------------
*/
typedef enum pin_int_trigger_mode {
   PIN_INT_POSITIVE_EDGE   =   0x0,
   PIN_INT_NEGATIVE_EDGE   =   0x1,
   PIN_INT_HIGN_LEVEL      =   0x2,
   PIN_INT_LOW_LEVEL       =   0x3,
   PIN_INT_DOUBLE_EDGE     =   0x4
} pin_int_trigger_mode_e;
 
/*
------------------------------------------------------------------------------
pin status
------------------------------------------------------------------------------
*/
typedef struct pin_status {
   u32 multi_sel;
   u32 pull;
   u32 driving;
   u32 data;
} pin_status_t;
 
/*
------------------------------------------------------------------------------
PIN management module interfaces
------------------------------------------------------------------------------
*/
s32 pin_init(void);
s32 pin_exit(void);
s32 pin_set_status(u32 pin_grp, u32 pin_num, struct pin_status *pstatus);
s32 pin_set_multi_sel(u32 pin_grp, u32 pin_num, u32 multi_sel);
s32 pin_set_pull(u32 pin_grp, u32 pin_num, u32 pull);
s32 pin_set_drive(u32 pin_grp, u32 pin_num, u32 drive);
s32 pin_write_data(u32 pin_grp, u32 pin_num, u32 data);
u32 pin_read_data(u32 pin_grp, u32 pin_num);
 
s32 pin_enable_int(u32 pin_grp, u32 pin_num);
s32 pin_disable_int(u32 pin_grp, u32 pin_num);
u32 pin_query_pending(u32 pin_grp, u32 pin_num);
s32 pin_clear_pending(u32 pin_grp, u32 pin_num);
s32 pin_standby_init(u32 gpio_enable_bitmap);
s32 pin_standby_exit(void);
extern u32 is_wanted_gpio_int(u32 pin_grp, u32 gpio_int_en);
 
#endif /* __PIN_H__ */