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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
/**************************************************************************//**
* @file gpio.h
* @version V1.00
* @brief N9H30 GPIO driver header file
*
* SPDX-License-Identifier: Apache-2.0
* @copyright (C) 2018 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
#ifndef __NU_GPIO_H__
#define __NU_GPIO_H__
#ifdef __cplusplus
extern "C"
{
#endif
/** @addtogroup N9H30_Device_Driver N9H30 Device Driver
@{
*/
/** @addtogroup N9H30_GPIO_Driver GPIO Driver
@{
*/
/** @addtogroup N9H30_GPIO_EXPORTED_CONSTANTS GPIO Exported Constants
@{
*/
/*---------------------------------------------------------------------------------------------------------*/
/* MODE Constant Definitions */
/*---------------------------------------------------------------------------------------------------------*/
/// @cond HIDDEN_SYMBOLS
#ifndef GPIO_ERR_PORT_BUSY
#define GPIO_ERR_PORT_BUSY -1
#define GPIO_ERR_UNSUPPORTED -2
#define GPIO_ERR_BIT_BUSY -3
#define SUCCESSFUL 0
#endif
/// @endcond HIDDEN_SYMBOLS
#define MAX_PORT 10 /*!< GPIO Port Number */
#define GPIOA_MASK 0x0000FFFF /*!< GPIO Port A Mask */
#define GPIOB_MASK 0x0000FFFF /*!< GPIO Port B Mask */
#define GPIOC_MASK 0x00007FFF /*!< GPIO Port C Mask */
#define GPIOD_MASK 0x0000FFFF /*!< GPIO Port D Mask */
#define GPIOE_MASK 0x0000FFFF /*!< GPIO Port E Mask */
#define GPIOF_MASK 0x0000FFFF /*!< GPIO Port F Mask */
#define GPIOG_MASK 0x0000FFFF /*!< GPIO Port G Mask */
#define GPIOH_MASK 0x0000FFFF /*!< GPIO Port H Mask */
#define GPIOI_MASK 0x0000FFFF /*!< GPIO Port I Mask */
#define GPIOJ_MASK 0x0000003F /*!< GPIO Port J Mask */
/// @cond HIDDEN_SYMBOLS
typedef INT32(*GPIO_CALLBACK)(UINT32 status, UINT32 userData);
typedef INT32(*EINT_CALLBACK)(UINT32 status, UINT32 userData);
/// @endcond HIDDEN_SYMBOLS
/** \brief Structure type of GPIO_PORT
*/
typedef enum
{
GPIOA = 0x000, /*!< Port A offset of GPIO base address */
GPIOB = 0x040, /*!< Port B offset of GPIO base address */
GPIOC = 0x080, /*!< Port C offset of GPIO base address */
GPIOD = 0x0C0, /*!< Port D offset of GPIO base address */
GPIOE = 0x100, /*!< Port E offset of GPIO base address */
GPIOF = 0x140, /*!< Port F offset of GPIO base address */
GPIOG = 0x180, /*!< Port G offset of GPIO base address */
GPIOH = 0x1C0, /*!< Port H offset of GPIO base address */
GPIOI = 0x200, /*!< Port I offset of GPIO base address */
GPIOJ = 0x240, /*!< Port J offset of GPIO base address */
} GPIO_PORT;
/** \brief Structure type of GPIO_DIR
*/
typedef enum
{
DIR_INPUT, /*!< GPIO Output mode */
DIR_OUTPUT /*!< GPIO Input mode */
} GPIO_DIR;
/** \brief Structure type of GPIO_PULL
*/
typedef enum
{
NO_PULL_UP, /*!< GPIO Pull-Up Disable */
PULL_UP, /*!< GPIO Pull-Up Enable */
PULL_DOWN /*!< GPIO Pull-Down Enable */
} GPIO_PULL;
/** \brief Structure type of GPIO_DRV
*/
typedef enum
{
DRV_LOW, /*!< GPIO Set to Low */
DRV_HIGH /*!< GPIO Set to High */
} GPIO_DRV;
/** \brief Structure type of GPIO_NIRQ
*/
typedef enum
{
NIRQ0 = 0, /*!< External interrupt 0 */
NIRQ1, /*!< External interrupt 1 */
NIRQ2, /*!< External interrupt 2 */
NIRQ3, /*!< External interrupt 3 */
NIRQ4, /*!< External interrupt 4 */
NIRQ5, /*!< External interrupt 5 */
NIRQ6, /*!< External interrupt 6 */
NIRQ7, /*!< External interrupt 7 */
} GPIO_NIRQ;
/** \brief Structure type of GPIO_TRIGGER_TYPE
*/
typedef enum
{
LOW, /*!< Trigger type set low */
HIGH, /*!< Trigger type set high */
FALLING, /*!< Trigger type set falling edge */
RISING, /*!< Trigger type set rising edge */
BOTH_EDGE /*!< Trigger type set falling edge and rising edge */
} GPIO_TRIGGER_TYPE;
/// @cond HIDDEN_SYMBOLS
/// @endcond HIDDEN_SYMBOLS
/*@}*/ /* end of group N9H30_GPIO_EXPORTED_CONSTANTS */
/** @addtogroup N9H30_GPIO_EXPORTED_FUNCTIONS GPIO Exported Functions
@{
*/
/* General GPIO bit function */
INT32 GPIO_OpenBit(GPIO_PORT port, UINT32 bit, GPIO_DIR direction, GPIO_PULL pull);
INT32 GPIO_CloseBit(GPIO_PORT port, UINT32 bit);
INT32 GPIO_SetBit(GPIO_PORT port, UINT32 bit);
INT32 GPIO_ClrBit(GPIO_PORT port, UINT32 bit);
INT32 GPIO_ReadBit(GPIO_PORT port, UINT32 bit);
INT32 GPIO_SetBitDir(GPIO_PORT port, UINT32 bit, GPIO_DIR direction);
INT32 GPIO_EnableTriggerType(GPIO_PORT port, UINT32 bit, GPIO_TRIGGER_TYPE triggerType);
INT32 GPIO_DisableTriggerType(GPIO_PORT port, UINT32 bit);
/* External GPIO interrupt function */
INT32 GPIO_EnableDebounce(INT32 debounceClkSel);
INT32 GPIO_DisableDebounce(void);
/*@}*/ /* end of group N9H30_GPIO_EXPORTED_FUNCTIONS */
/*@}*/ /* end of group N9H30_GPIO_Driver */
/*@}*/ /* end of group N9H30_Device_Driver */
#ifdef __cplusplus
}
#endif
#endif //__NU_GPIO_H__
|