PAN1080 Peripheral API
pan_gpio.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2021 Panchip Technology Corp. All rights reserved.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
15#ifndef __PAN_GPIO_H__
16#define __PAN_GPIO_H__
17
24#include <stdint.h>
25
26#ifdef __cplusplus
27extern "C"
28{
29#endif
30
31
32#define GPIO_PIN_MAX 8
38typedef enum _GPIO_ModeDef
39{
43 GPIO_MODE_QUASI = 0x3
51typedef enum _GPIO_IntAttrDef
52{
53 GPIO_INT_RISING = 0x00010000UL,
54 GPIO_INT_FALLING = 0x00000001UL,
55 GPIO_INT_BOTH_EDGE = 0x00010001UL,
56 GPIO_INT_HIGH = 0x01010000UL,
57 GPIO_INT_LOW = 0x01000001UL
59
66typedef enum _GPIO_ClkSrcDef
67{
68 GPIO_DBCTL_DBCLKSRC_RCL = 0x00000010UL,
69 GPIO_DBCTL_DBCLKSRC_HCLK = 0x00000000UL
78typedef enum _GPIO_ClkSelDef
79{
80 GPIO_DBCTL_DBCLKSEL_1 = 0x00000000UL,
81 GPIO_DBCTL_DBCLKSEL_2 = 0x00000001UL,
82 GPIO_DBCTL_DBCLKSEL_4 = 0x00000002UL,
83 GPIO_DBCTL_DBCLKSEL_8 = 0x00000003UL,
84 GPIO_DBCTL_DBCLKSEL_16 = 0x00000004UL,
85 GPIO_DBCTL_DBCLKSEL_32 = 0x00000005UL,
86 GPIO_DBCTL_DBCLKSEL_64 = 0x00000006UL,
87 GPIO_DBCTL_DBCLKSEL_128 = 0x00000007UL,
88 GPIO_DBCTL_DBCLKSEL_256 = 0x00000008UL,
89 GPIO_DBCTL_DBCLKSEL_512 = 0x00000009UL,
90 GPIO_DBCTL_DBCLKSEL_1024 = 0x0000000AUL,
91 GPIO_DBCTL_DBCLKSEL_2048 = 0x0000000BUL,
92 GPIO_DBCTL_DBCLKSEL_4096 = 0x0000000CUL,
93 GPIO_DBCTL_DBCLKSEL_8192 = 0x0000000DUL,
95 GPIO_DBCTL_DBCLKSEL_32768 = 0x0000000FUL
123#define GPIO_PIN_ADDR(Port, Pin) (*((volatile uint32_t *)((GPIOBIT0_BASE+(0x20*(Port))) + ((Pin)<<2))))
124#define P00 GPIO_PIN_ADDR(0, 0)
125#define P01 GPIO_PIN_ADDR(0, 1)
126#define P02 GPIO_PIN_ADDR(0, 2)
127#define P03 GPIO_PIN_ADDR(0, 3)
128#define P04 GPIO_PIN_ADDR(0, 4)
129#define P05 GPIO_PIN_ADDR(0, 5)
130#define P06 GPIO_PIN_ADDR(0, 6)
131#define P07 GPIO_PIN_ADDR(0, 7)
132#define P10 GPIO_PIN_ADDR(1, 0)
133#define P11 GPIO_PIN_ADDR(1, 1)
134#define P12 GPIO_PIN_ADDR(1, 2)
135#define P13 GPIO_PIN_ADDR(1, 3)
136#define P14 GPIO_PIN_ADDR(1, 4)
137#define P15 GPIO_PIN_ADDR(1, 5)
138#define P16 GPIO_PIN_ADDR(1, 6)
139#define P17 GPIO_PIN_ADDR(1, 7)
140#define P20 GPIO_PIN_ADDR(2, 0)
141#define P21 GPIO_PIN_ADDR(2, 1)
142#define P22 GPIO_PIN_ADDR(2, 2)
143#define P23 GPIO_PIN_ADDR(2, 3)
144#define P24 GPIO_PIN_ADDR(2, 4)
145#define P25 GPIO_PIN_ADDR(2, 5)
146#define P26 GPIO_PIN_ADDR(2, 6)
147#define P27 GPIO_PIN_ADDR(2, 7)
148#define P30 GPIO_PIN_ADDR(3, 0)
149#define P31 GPIO_PIN_ADDR(3, 1)
150#define P32 GPIO_PIN_ADDR(3, 2)
151#define P33 GPIO_PIN_ADDR(3, 3)
152#define P34 GPIO_PIN_ADDR(3, 4)
153#define P35 GPIO_PIN_ADDR(3, 5)
154#define P36 GPIO_PIN_ADDR(3, 6)
155#define P37 GPIO_PIN_ADDR(3, 7)
156#define P40 GPIO_PIN_ADDR(4, 0)
157#define P41 GPIO_PIN_ADDR(4, 1)
158#define P42 GPIO_PIN_ADDR(4, 2)
159#define P43 GPIO_PIN_ADDR(4, 3)
160#define P44 GPIO_PIN_ADDR(4, 4)
161#define P45 GPIO_PIN_ADDR(4, 5)
162#define P46 GPIO_PIN_ADDR(4, 6)
163#define P47 GPIO_PIN_ADDR(4, 7)
164#define P50 GPIO_PIN_ADDR(5, 0)
165#define P51 GPIO_PIN_ADDR(5, 1)
166#define P52 GPIO_PIN_ADDR(5, 2)
167#define P53 GPIO_PIN_ADDR(5, 3)
168#define P54 GPIO_PIN_ADDR(5, 4)
169#define P55 GPIO_PIN_ADDR(5, 5)
170#define P56 GPIO_PIN_ADDR(5, 6)
171#define P57 GPIO_PIN_ADDR(5, 7)
185__STATIC_INLINE void GPIO_ClrIntFlag(GPIO_T *gpio, uint32_t PinMask)
186{
187 gpio->INTSRC = PinMask;
188}
189
200__STATIC_INLINE void GPIO_ClrAllIntFlag(GPIO_T *gpio)
201{
202 gpio->INTSRC = gpio->INTSRC;
203}
204
215__STATIC_INLINE void GPIO_DisableDebounce(GPIO_T *gpio, uint32_t PinMask)
216{
217 gpio->DBEN &= ~PinMask;
218}
219
230__STATIC_INLINE void GPIO_EnableDebounce(GPIO_T *gpio, uint32_t PinMask)
231{
232 gpio->DBEN |= PinMask;
233}
234
245__STATIC_INLINE void GPIO_DisableDigitalPath(GPIO_T *gpio, uint32_t PinMask)
246{
247 gpio->DINOFF |= (PinMask << 16);
248}
249
260__STATIC_INLINE void GPIO_EnableDigitalPath(GPIO_T *gpio, uint32_t PinMask)
261{
262 gpio->DINOFF &= ~(PinMask << 16);
263}
264
275 __STATIC_INLINE void GPIO_DisablePullupPath(GPIO_T *gpio, uint32_t PinMask)
276{
277 gpio->DINOFF &= ~PinMask;
278}
279
290 __STATIC_INLINE void GPIO_EnablePullupPath(GPIO_T *gpio, uint32_t PinMask)
291{
292 gpio->DINOFF |= PinMask;
293}
294
305 __STATIC_INLINE void GPIO_DisablePulldownPath(GPIO_T *gpio, uint32_t PinMask)
306{
307 gpio->DINOFF &= ~(PinMask << 8);
308}
309
320 __STATIC_INLINE void GPIO_EnablePulldownPath(GPIO_T *gpio, uint32_t PinMask)
321{
322 gpio->DINOFF |= (PinMask << 8);
323}
324
335__STATIC_INLINE void GPIO_DisableDoutMask(GPIO_T *gpio, uint32_t PinMask)
336{
337 gpio->DATMSK &= ~PinMask;
338}
339
350__STATIC_INLINE void GPIO_EnableDoutMask(GPIO_T *gpio, uint32_t PinMask)
351{
352 gpio->DATMSK |= PinMask;
353}
354
366__STATIC_INLINE bool GPIO_GetIntFlag(GPIO_T *gpio, uint32_t PinMask)
367{
368 return (bool)(gpio->INTSRC & PinMask);
369}
370
390__STATIC_INLINE void GPIO_SetDebounceTime(GPIO_ClkSrcDef ClkSrc, GPIO_ClkSelDef ClkSel)
391{
392 GPIO->DBCTL = GP_DBCTL_ICLKON_Msk | ClkSrc | ClkSel;
393}
394
404__STATIC_INLINE uint32_t GPIO_GetInData(GPIO_T *gpio)
405{
406 return gpio->PIN;
407}
408
419__STATIC_INLINE void GPIO_SetOutData(GPIO_T *gpio, uint32_t data)
420{
421 gpio->DOUT = data;
422}
423
433__STATIC_INLINE uint32_t GPIO_GetOutData(GPIO_T *gpio)
434{
435 return gpio->DOUT;
436}
437
448__STATIC_INLINE void GPIO_Toggle(GPIO_T *gpio, uint32_t u32PinMask)
449{
450 GPIO_SetOutData(gpio, GPIO_GetOutData(gpio) ^ u32PinMask);
451}
452
465__STATIC_INLINE void GPIO_TogglePin(uint32_t u32Pin)
466{
467 u32Pin ^= 1;
468}
469
486__STATIC_INLINE void GPIO_EnableInt(GPIO_T *gpio, uint32_t Pin, GPIO_IntAttrDef IntAttribs)
487{
488 gpio->INTTYPE |= (((IntAttribs >> 24) & 0xFFUL) << Pin);
489 gpio->INTEN |= ((IntAttribs & 0xFFFFFFUL) << Pin);
490}
491
502__STATIC_INLINE void GPIO_DisableInt(GPIO_T *gpio, uint32_t Pin)
503{
504 gpio->INTTYPE &= ~(1UL << Pin);
505 gpio->INTEN &= ~((0x00010001UL) << Pin);
506}
507
520#define GPIO_EnableEINT0 GPIO_EnableInt
521
522
533#define GPIO_DisableEINT0 GPIO_DisableInt
534
535
548#define GPIO_EnableEINT1 GPIO_EnableInt
549
550
561#define GPIO_DisableEINT1 GPIO_DisableInt
562
563
575extern void GPIO_SetMode(GPIO_T *gpio, uint32_t PinMask, GPIO_ModeDef Mode);
576
580#ifdef __cplusplus
581}
582#endif
583
584#endif /* __PAN_GPIO_H__ */
585
enum _GPIO_ClkSelDef GPIO_ClkSelDef
_GPIO_ClkSelDef
Definition: pan_gpio.h:79
@ GPIO_DBCTL_DBCLKSEL_1
Definition: pan_gpio.h:80
@ GPIO_DBCTL_DBCLKSEL_128
Definition: pan_gpio.h:87
@ GPIO_DBCTL_DBCLKSEL_8192
Definition: pan_gpio.h:93
@ GPIO_DBCTL_DBCLKSEL_8
Definition: pan_gpio.h:83
@ GPIO_DBCTL_DBCLKSEL_2048
Definition: pan_gpio.h:91
@ GPIO_DBCTL_DBCLKSEL_16384
Definition: pan_gpio.h:94
@ GPIO_DBCTL_DBCLKSEL_256
Definition: pan_gpio.h:88
@ GPIO_DBCTL_DBCLKSEL_32
Definition: pan_gpio.h:85
@ GPIO_DBCTL_DBCLKSEL_4
Definition: pan_gpio.h:82
@ GPIO_DBCTL_DBCLKSEL_2
Definition: pan_gpio.h:81
@ GPIO_DBCTL_DBCLKSEL_16
Definition: pan_gpio.h:84
@ GPIO_DBCTL_DBCLKSEL_4096
Definition: pan_gpio.h:92
@ GPIO_DBCTL_DBCLKSEL_32768
Definition: pan_gpio.h:95
@ GPIO_DBCTL_DBCLKSEL_1024
Definition: pan_gpio.h:90
@ GPIO_DBCTL_DBCLKSEL_512
Definition: pan_gpio.h:89
@ GPIO_DBCTL_DBCLKSEL_64
Definition: pan_gpio.h:86
_GPIO_ClkSrcDef
Definition: pan_gpio.h:67
enum _GPIO_ClkSrcDef GPIO_ClkSrcDef
@ GPIO_DBCTL_DBCLKSRC_HCLK
Definition: pan_gpio.h:69
@ GPIO_DBCTL_DBCLKSRC_RCL
Definition: pan_gpio.h:68
_GPIO_IntAttrDef
Definition: pan_gpio.h:52
enum _GPIO_IntAttrDef GPIO_IntAttrDef
@ GPIO_INT_BOTH_EDGE
Definition: pan_gpio.h:55
@ GPIO_INT_RISING
Definition: pan_gpio.h:53
@ GPIO_INT_FALLING
Definition: pan_gpio.h:54
@ GPIO_INT_HIGH
Definition: pan_gpio.h:56
@ GPIO_INT_LOW
Definition: pan_gpio.h:57
_GPIO_ModeDef
Definition: pan_gpio.h:39
enum _GPIO_ModeDef GPIO_ModeDef
@ GPIO_MODE_OPEN_DRAIN
Definition: pan_gpio.h:42
@ GPIO_MODE_INPUT
Definition: pan_gpio.h:40
@ GPIO_MODE_OUTPUT
Definition: pan_gpio.h:41
@ GPIO_MODE_QUASI
Definition: pan_gpio.h:43
void GPIO_SetMode(GPIO_T *gpio, uint32_t PinMask, GPIO_ModeDef Mode)
Set GPIO Work Mode.
__STATIC_INLINE void GPIO_DisableDoutMask(GPIO_T *gpio, uint32_t PinMask)
Disable I/O DOUT mask.
Definition: pan_gpio.h:335
__STATIC_INLINE void GPIO_EnableDoutMask(GPIO_T *gpio, uint32_t PinMask)
Enable I/O DOUT mask.
Definition: pan_gpio.h:350
__STATIC_INLINE void GPIO_TogglePin(uint32_t u32Pin)
Toggle Specified GPIO pin.
Definition: pan_gpio.h:465
__STATIC_INLINE void GPIO_SetOutData(GPIO_T *gpio, uint32_t data)
Set GPIO Port OUT Data.
Definition: pan_gpio.h:419
__STATIC_INLINE void GPIO_SetDebounceTime(GPIO_ClkSrcDef ClkSrc, GPIO_ClkSelDef ClkSel)
Set De-bounce Sampling Cycle Time.
Definition: pan_gpio.h:390
__STATIC_INLINE void GPIO_DisableDebounce(GPIO_T *gpio, uint32_t PinMask)
Disable Pin De-bounce Function.
Definition: pan_gpio.h:215
__STATIC_INLINE void GPIO_ClrIntFlag(GPIO_T *gpio, uint32_t PinMask)
Clear GPIO Pin Interrupt Flag.
Definition: pan_gpio.h:185
__STATIC_INLINE void GPIO_EnablePulldownPath(GPIO_T *gpio, uint32_t PinMask)
Enable I/O Digital pull down Path.
Definition: pan_gpio.h:320
__STATIC_INLINE void GPIO_DisableInt(GPIO_T *gpio, uint32_t Pin)
Disable GPIO interrupt.
Definition: pan_gpio.h:502
__STATIC_INLINE void GPIO_Toggle(GPIO_T *gpio, uint32_t u32PinMask)
Toggle Specified GPIO pin.
Definition: pan_gpio.h:448
__STATIC_INLINE bool GPIO_GetIntFlag(GPIO_T *gpio, uint32_t PinMask)
Get GPIO Pin Interrupt Flag.
Definition: pan_gpio.h:366
__STATIC_INLINE uint32_t GPIO_GetInData(GPIO_T *gpio)
Get GPIO Port IN Data.
Definition: pan_gpio.h:404
__STATIC_INLINE void GPIO_EnablePullupPath(GPIO_T *gpio, uint32_t PinMask)
Enable I/O Digital pull up Path.
Definition: pan_gpio.h:290
__STATIC_INLINE void GPIO_DisablePulldownPath(GPIO_T *gpio, uint32_t PinMask)
Disable I/O Digital pull down Path.
Definition: pan_gpio.h:305
__STATIC_INLINE void GPIO_DisableDigitalPath(GPIO_T *gpio, uint32_t PinMask)
Disable I/O Digital Input Path.
Definition: pan_gpio.h:245
__STATIC_INLINE void GPIO_EnableDigitalPath(GPIO_T *gpio, uint32_t PinMask)
Enable I/O Digital Input Path.
Definition: pan_gpio.h:260
__STATIC_INLINE void GPIO_ClrAllIntFlag(GPIO_T *gpio)
Clear GPIO Pin Interrupt Flag.
Definition: pan_gpio.h:200
__STATIC_INLINE void GPIO_DisablePullupPath(GPIO_T *gpio, uint32_t PinMask)
Disable I/O Digital pull up Path.
Definition: pan_gpio.h:275
__STATIC_INLINE void GPIO_EnableDebounce(GPIO_T *gpio, uint32_t PinMask)
Enable Pin De-bounce Function.
Definition: pan_gpio.h:230
__STATIC_INLINE void GPIO_EnableInt(GPIO_T *gpio, uint32_t Pin, GPIO_IntAttrDef IntAttribs)
Enable GPIO interrupt.
Definition: pan_gpio.h:486
__STATIC_INLINE uint32_t GPIO_GetOutData(GPIO_T *gpio)
Get GPIO Port OUT Data.
Definition: pan_gpio.h:433