1 /*
2  * Copyright (c) 2006-2022, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author            Notes
8  * 2020-12-27     iysheng           first release
9  * 2021-09-07     FuC               Suit for V85XX
10  * 2021-09-09     ZhuXW             Add GPIO interrupt
11  * 2021-09-12     ZhuXW             Suit for V85XXP
12  */
13 
14 #ifndef __DRV_GPIO_H__
15 #define __DRV_GPIO_H__
16 
17 #include <rtthread.h>
18 #include <rthw.h>
19 #include <rtdevice.h>
20 #include <board.h>
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #define __V85XXP_PORT(port)  GPIO##port##_BASE
27 
28 #define GET_PIN(PORTx,PIN) (__V85XXP_PORT(PORTx)==GPIOA_BASE) ? (rt_base_t)(0 + PIN):(rt_base_t)((16 * ( ((rt_base_t)__V85XXP_PORT(PORTx) - (rt_base_t)GPIOB_BASE)/(0x0400UL) +1)) + PIN)
29 
30 #define PIN_NUM(port, no) (((((port) & 0xFu) << 4) | ((no) & 0xFu)))
31 #define PIN_PORT(pin) ((uint8_t)(((pin) >> 4) & 0xFu))
32 #define PIN_NO(pin) ((uint8_t)((pin) & 0xFu))
33 
34 #define PIN_V85XXPPORT(pin) ((GPIO_Type *)(GPIOB_BASE + (0x400u * PIN_PORT(pin))))
35 #define PIN_V85XXPPIN(pin) ((uint16_t)(1u << PIN_NO(pin)))
36 
37 struct pin_irq_map
38 {
39     rt_uint16_t pinbit;
40     IRQn_Type irqno;
41 };
42 
43 #ifdef __cplusplus
44 }
45 #endif
46 
47 #endif /* __DRV_GPIO_H__ */
48 
49