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-10     ZhuXW             add V85XX support
10  */
11 
12 #ifndef __DRV_GPIO_H__
13 #define __DRV_GPIO_H__
14 
15 #include <rtthread.h>
16 #include <rthw.h>
17 #include <rtdevice.h>
18 #include <board.h>
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 #define __V85XX_PORT(port)  GPIO##port##_BASE
25 
26 #define GET_PIN(PORTx,PIN) (__V85XX_PORT(PORTx)==GPIOA_BASE) ? (rt_base_t)(0 + PIN):(rt_base_t)((16 * ( ((rt_base_t)__V85XX_PORT(PORTx) - (rt_base_t)GPIOB_BASE)/(0x0400UL) +1)) + PIN)
27 
28 #define PIN_NUM(port, no) (((((port) & 0xFu) << 4) | ((no) & 0xFu)))
29 #define PIN_PORT(pin) ((uint8_t)(((pin) >> 4) & 0xFu))
30 #define PIN_NO(pin) ((uint8_t)((pin) & 0xFu))
31 
32 #define PIN_V85XXPORT(pin) ((GPIO_TypeDef *)(GPIOB_BASE + (0x400u * PIN_PORT(pin))))
33 #define PIN_V85XXPIN(pin) ((uint16_t)(1u << PIN_NO(pin)))
34 
35 struct pin_irq_map
36 {
37     rt_uint16_t pinbit;
38     IRQn_Type irqno;
39 };
40 
41 #ifdef __cplusplus
42 }
43 #endif
44 
45 #endif /* __DRV_GPIO_H__ */
46 
47