nt9856x/loader/Include/Driver/GPIO.h

317 lines
14 KiB
C
Executable File

/**
General Purpose I/O controller header file
General Purpose I/O controller header file
@file GPIO.h
@ingroup mIIOGPIO
@note Nothing
Copyright Novatek Microelectronics Corp. 2012. All rights reserved.
*/
#ifndef _GPIO_H
#define _GPIO_H
#include "IOReg.h"
#define ENUM_DUMMY4WORD(name) E_##name = 0x10000000
/**
@addtogroup mIDrvIO_GPIO
*/
//@{
/**
GPIO direction
GPIO direction definition for gpio_setDir() and gpio_getDir()
*/
typedef enum {
GPIO_DIR_INPUT = 0, ///< GPIO is input direction
GPIO_DIR_OUTPUT = 1, ///< GPIO is output direction
ENUM_DUMMY4WORD(GPIO_DIR)
} GPIO_DIR;
/**
GPIO interrupt type
GPIO interrupt type definition for type argument of gpio_setIntTypePol()
*/
typedef enum {
GPIO_INTTYPE_EDGE = 0, ///< GPIO interrupt is edge trigger
GPIO_INTTYPE_LEVEL = 1, ///< GPIO interrupt is level trigger
ENUM_DUMMY4WORD(GPIO_INTTYPE)
} GPIO_INTTYPE;
/**
GPIO interrupt polarity
GPIO interrupt polarity definition for pol argument of gpio_setIntTypePol()
*/
typedef enum {
GPIO_INTPOL_POSHIGH = 0, ///< GPIO interrupt polarity is \n
///< - @b positvie edge for edge trigger
///< - @b high level for level trigger
GPIO_INTPOL_NEGLOW = 1, ///< GPIO interrupt polarity is \n
///< - @b negative edge for edge trigger
///< - @b low level for level trigger
GPIO_INTPOL_BOTHEDGE = 2, ///< GPIO interrupt polarity is \n
///< - @b both edge for edge trigger
ENUM_DUMMY4WORD(GPIO_INTPOL)
} GPIO_INTPOL;
/**
@name GPIO pins ID
GPIO pins ID definition
For detail GPIO pin out, please refer to NT96520 data sheet.
*/
//@{
/*Storage GPIO - CGPIO*/
#define C_GPIO_0 0 ///< C_GPIO[0]
#define C_GPIO_1 1 ///< C_GPIO[1]
#define C_GPIO_2 2 ///< C_GPIO[2]
#define C_GPIO_3 3 ///< C_GPIO[3]
#define C_GPIO_4 4 ///< C_GPIO[4]
#define C_GPIO_5 5 ///< C_GPIO[5]
#define C_GPIO_6 6 ///< C_GPIO[6]
#define C_GPIO_7 7 ///< C_GPIO[7]
#define C_GPIO_8 8 ///< C_GPIO[8]
#define C_GPIO_9 9 ///< C_GPIO[9]
#define C_GPIO_10 10 ///< C_GPIO[10]
#define C_GPIO_11 11 ///< C_GPIO[11]
#define C_GPIO_12 12 ///< C_GPIO[12]
#define C_GPIO_13 13 ///< C_GPIO[13]
#define C_GPIO_14 14 ///< C_GPIO[14]
#define C_GPIO_15 15 ///< C_GPIO[15]
#define C_GPIO_16 16 ///< C_GPIO[16]
#define C_GPIO_17 17 ///< C_GPIO[17]
#define C_GPIO_18 18 ///< C_GPIO[18]
#define C_GPIO_19 19 ///< C_GPIO[19]
#define C_GPIO_20 20 ///< C_GPIO[20]
#define C_GPIO_21 21 ///< C_GPIO[21]
#define C_GPIO_22 22 ///< C_GPIO[22]
/*Peripheral GPIO - PGPIO*/
#define P_GPIO_SHIFT_BASE 32
#define P_GPIO_0 (0 +P_GPIO_SHIFT_BASE) ///< P_GPIO[0]
#define P_GPIO_1 (1 +P_GPIO_SHIFT_BASE) ///< P_GPIO[1]
#define P_GPIO_2 (2 +P_GPIO_SHIFT_BASE) ///< P_GPIO[2]
#define P_GPIO_3 (3 +P_GPIO_SHIFT_BASE) ///< P_GPIO[3]
#define P_GPIO_4 (4 +P_GPIO_SHIFT_BASE) ///< P_GPIO[4]
#define P_GPIO_5 (5 +P_GPIO_SHIFT_BASE) ///< P_GPIO[5]
#define P_GPIO_6 (6 +P_GPIO_SHIFT_BASE) ///< P_GPIO[6]
#define P_GPIO_7 (7 +P_GPIO_SHIFT_BASE) ///< P_GPIO[7]
#define P_GPIO_8 (8 +P_GPIO_SHIFT_BASE) ///< P_GPIO[8]
#define P_GPIO_9 (9 +P_GPIO_SHIFT_BASE) ///< P_GPIO[9]
#define P_GPIO_10 (10+P_GPIO_SHIFT_BASE) ///< P_GPIO[10]
#define P_GPIO_11 (11+P_GPIO_SHIFT_BASE) ///< P_GPIO[11]
#define P_GPIO_12 (12+P_GPIO_SHIFT_BASE) ///< P_GPIO[12]
#define P_GPIO_13 (13+P_GPIO_SHIFT_BASE) ///< P_GPIO[13]
#define P_GPIO_14 (14+P_GPIO_SHIFT_BASE) ///< P_GPIO[14]
#define P_GPIO_15 (15+P_GPIO_SHIFT_BASE) ///< P_GPIO[15]
#define P_GPIO_16 (16+P_GPIO_SHIFT_BASE) ///< P_GPIO[16]
#define P_GPIO_17 (17+P_GPIO_SHIFT_BASE) ///< P_GPIO[17]
#define P_GPIO_18 (18+P_GPIO_SHIFT_BASE) ///< P_GPIO[18]
#define P_GPIO_19 (19+P_GPIO_SHIFT_BASE) ///< P_GPIO[19]
#define P_GPIO_20 (20+P_GPIO_SHIFT_BASE) ///< P_GPIO[20]
#define P_GPIO_21 (21+P_GPIO_SHIFT_BASE) ///< P_GPIO[21]
#define P_GPIO_22 (22+P_GPIO_SHIFT_BASE) ///< P_GPIO[22]
#define P_GPIO_23 (23+P_GPIO_SHIFT_BASE) ///< P_GPIO[23]
#define P_GPIO_24 (24+P_GPIO_SHIFT_BASE) ///< P_GPIO[24]
#define P_GPIO_25 (25+P_GPIO_SHIFT_BASE) ///< P_GPIO[25]
/*Sensor GPIO - SGPIO*/
#define S_GPIO_SHIFT_BASE 64
#define S_GPIO_0 (0 +S_GPIO_SHIFT_BASE) ///< S_GPIO[0]
#define S_GPIO_1 (1 +S_GPIO_SHIFT_BASE) ///< S_GPIO[1]
#define S_GPIO_2 (2 +S_GPIO_SHIFT_BASE) ///< S_GPIO[2]
#define S_GPIO_3 (3 +S_GPIO_SHIFT_BASE) ///< S_GPIO[3]
#define S_GPIO_4 (4 +S_GPIO_SHIFT_BASE) ///< S_GPIO[4]
#define S_GPIO_5 (5 +S_GPIO_SHIFT_BASE) ///< S_GPIO[5]
#define S_GPIO_6 (6 +S_GPIO_SHIFT_BASE) ///< S_GPIO[6]
#define S_GPIO_7 (7 +S_GPIO_SHIFT_BASE) ///< S_GPIO[7]
#define S_GPIO_8 (8 +S_GPIO_SHIFT_BASE) ///< S_GPIO[8]
#define S_GPIO_9 (9 +S_GPIO_SHIFT_BASE) ///< S_GPIO[9]
#define S_GPIO_10 (10+S_GPIO_SHIFT_BASE) ///< S_GPIO[10]
#define S_GPIO_11 (11+S_GPIO_SHIFT_BASE) ///< S_GPIO[11]
#define S_GPIO_12 (12+S_GPIO_SHIFT_BASE) ///< S_GPIO[11]
/*LCD GPIO - LGPIO*/
#define L_GPIO_SHIFT_BASE 96
#define L_GPIO_0 (0 +L_GPIO_SHIFT_BASE) ///< L_GPIO[0]
#define L_GPIO_1 (1 +L_GPIO_SHIFT_BASE) ///< L_GPIO[1]
#define L_GPIO_2 (2 +L_GPIO_SHIFT_BASE) ///< L_GPIO[2]
#define L_GPIO_3 (3 +L_GPIO_SHIFT_BASE) ///< L_GPIO[3]
#define L_GPIO_4 (4 +L_GPIO_SHIFT_BASE) ///< L_GPIO[4]
#define L_GPIO_5 (5 +L_GPIO_SHIFT_BASE) ///< L_GPIO[5]
#define L_GPIO_6 (6 +L_GPIO_SHIFT_BASE) ///< L_GPIO[6]
#define L_GPIO_7 (7 +L_GPIO_SHIFT_BASE) ///< L_GPIO[7]
#define L_GPIO_8 (8 +L_GPIO_SHIFT_BASE) ///< L_GPIO[8]
#define L_GPIO_9 (9 +L_GPIO_SHIFT_BASE) ///< L_GPIO[9]
#define L_GPIO_10 (10+L_GPIO_SHIFT_BASE) ///< L_GPIO[10]
#define L_GPIO_11 (11+L_GPIO_SHIFT_BASE) ///< L_GPIO[11]
#define L_GPIO_12 (12+L_GPIO_SHIFT_BASE) ///< L_GPIO[12]
#define L_GPIO_13 (13+L_GPIO_SHIFT_BASE) ///< L_GPIO[13]
#define L_GPIO_14 (14+L_GPIO_SHIFT_BASE) ///< L_GPIO[14]
#define L_GPIO_15 (15+L_GPIO_SHIFT_BASE) ///< L_GPIO[15]
#define L_GPIO_16 (16+L_GPIO_SHIFT_BASE) ///< L_GPIO[16]
#define L_GPIO_17 (17+L_GPIO_SHIFT_BASE) ///< L_GPIO[17]
#define L_GPIO_18 (18+L_GPIO_SHIFT_BASE) ///< L_GPIO[18]
#define L_GPIO_19 (19+L_GPIO_SHIFT_BASE) ///< L_GPIO[19]
#define L_GPIO_20 (20+L_GPIO_SHIFT_BASE) ///< L_GPIO[20]
#define L_GPIO_21 (21+L_GPIO_SHIFT_BASE) ///< L_GPIO[21]
#define L_GPIO_22 (22+L_GPIO_SHIFT_BASE) ///< L_GPIO[22]
#define L_GPIO_23 (23+L_GPIO_SHIFT_BASE) ///< L_GPIO[23]
#define L_GPIO_24 (24+L_GPIO_SHIFT_BASE) ///< L_GPIO[24]
/*Dedicated GPIO - DGPIO*/
// In order to backward comaptible, DGPIO is used as " GPIO_IS_DGPIO | D_GPIO_* "
#define D_GPIO_SHIFT_BASE 128
#define D_GPIO_0 (0 +D_GPIO_SHIFT_BASE) ///< DGPIO[0]
#define D_GPIO_1 (1 +D_GPIO_SHIFT_BASE) ///< DGPIO[1]
#define D_GPIO_2 (2 +D_GPIO_SHIFT_BASE) ///< DGPIO[2]
#define D_GPIO_3 (3 +D_GPIO_SHIFT_BASE) ///< DGPIO[3]
#define D_GPIO_4 (4 +D_GPIO_SHIFT_BASE) ///< DGPIO[4]
#define D_GPIO_5 (5 +D_GPIO_SHIFT_BASE) ///< DGPIO[5]
#define D_GPIO_6 (6 +D_GPIO_SHIFT_BASE) ///< DGPIO[6]
#define D_GPIO_7 (7 +D_GPIO_SHIFT_BASE) ///< DGPIO[7]
#define D_GPIO_8 (8 +D_GPIO_SHIFT_BASE) ///< DGPIO[8]
#define D_GPIO_9 (9 +D_GPIO_SHIFT_BASE) ///< DGPIO[9]
#define D_GPIO_10 (10+D_GPIO_SHIFT_BASE) ///< DGPIO[10]
#define D_GPIO_16 (16 +D_GPIO_SHIFT_BASE) ///< D_GPIO[16] (USB Wakeup) (No pad instance)
/*GPIO HSI Data register(High speed interface)*/
#define H_GPIO_SHIFT_BASE 160
#define H_GPIO_0 (0 +H_GPIO_SHIFT_BASE) ///< HSI_GPIO[0]
#define H_GPIO_1 (1 +H_GPIO_SHIFT_BASE) ///< HSI_GPIO[1]
#define H_GPIO_2 (2 +H_GPIO_SHIFT_BASE) ///< HSI_GPIO[2]
#define H_GPIO_3 (3 +H_GPIO_SHIFT_BASE) ///< HSI_GPIO[3]
#define H_GPIO_4 (4 +H_GPIO_SHIFT_BASE) ///< HSI_GPIO[4]
#define H_GPIO_5 (5 +H_GPIO_SHIFT_BASE) ///< HSI_GPIO[5]
#define H_GPIO_6 (6 +H_GPIO_SHIFT_BASE) ///< HSI_GPIO[6]
#define H_GPIO_7 (7 +H_GPIO_SHIFT_BASE) ///< HSI_GPIO[7]
#define H_GPIO_8 (8 +H_GPIO_SHIFT_BASE) ///< HSI_GPIO[8]
#define H_GPIO_9 (9 +H_GPIO_SHIFT_BASE) ///< HSI_GPIO[9]
#define H_GPIO_10 (10+H_GPIO_SHIFT_BASE) ///< HSI_GPIO[10]
#define H_GPIO_11 (11+H_GPIO_SHIFT_BASE) ///< HSI_GPIO[11]
/*GPIO ADC Data register*/
#define A_GPI_SHIFT_BASE 192
#define A_GPIO_0 (0 + A_GPI_SHIFT_BASE) ///< A_GPIO[0]
#define A_GPIO_1 (1 + A_GPI_SHIFT_BASE) ///< A_GPIO[1]
#define A_GPIO_2 (2 + A_GPI_SHIFT_BASE) ///< A_GPIO[2]
#define DSI_GPIO_2 0xE2
//@}
/*For temporary usage as passing build codes*/
#define C_GPIO_23 23
#define C_GPIO_24 24
#define C_GPIO_25 25
#define C_GPIO_26 26
#define C_GPIO_27 27
#define C_GPIO_28 28
#define C_GPIO_29 29
#define C_GPIO_30 30
#define C_GPIO_31 31
#define C_GPIO_32 32
#define C_GPIO_33 33
#define L_GPIO_30 (30+L_GPIO_SHIFT_BASE)
#define L_GPIO_31 (31+L_GPIO_SHIFT_BASE)
#define L_GPIO_32 (32+L_GPIO_SHIFT_BASE)
#define GPIO_INT_USBPLUGIN (GPIO_INT_39)
/**
@name GPIO Interrupt ID
GPIO interrupt ID definition
GPIO interrupt ID for interrupt related APIs.
*/
//@{
#define GPIO_INT_00 0 ///< GPIO INT[0]: C_GPIO[3]
#define GPIO_INT_01 1 ///< GPIO INT[1]: C_GPIO[5]
#define GPIO_INT_02 2 ///< GPIO INT[2]: C_GPIO[7]
#define GPIO_INT_03 3 ///< GPIO INT[3]: C_GPIO[9]
#define GPIO_INT_04 4 ///< GPIO INT[4]: C_GPIO[12]
#define GPIO_INT_05 5 ///< GPIO INT[5]: C_GPIO[14]
#define GPIO_INT_06 6 ///< GPIO INT[6]: C_GPIO[16]
#define GPIO_INT_07 7 ///< GPIO INT[7]: C_GPIO[18]
#define GPIO_INT_08 8 ///< GPIO INT[8]: C_GPIO[20]
#define GPIO_INT_09 9 ///< GPIO INT[9]: C_GPIO[22]
#define GPIO_INT_10 10 ///< GPIO INT[10]: H_GPIO[0]
#define GPIO_INT_11 11 ///< GPIO INT[11]: H_GPIO[11]
#define GPIO_INT_12 12 ///< GPIO INT[12]: S_GPIO[1]
#define GPIO_INT_13 13 ///< GPIO INT[13]: S_GPIO[4]
#define GPIO_INT_14 14 ///< GPIO INT[14]: S_GPIO[6]
#define GPIO_INT_15 15 ///< GPIO INT[15]: S_GPIO[10]
#define GPIO_INT_16 16 ///< GPIO INT[16]: S_GPIO[12]
#define GPIO_INT_17 17 ///< GPIO INT[17]: P_GPIO[3]
#define GPIO_INT_18 18 ///< GPIO INT[18]: P_GPIO[7]
#define GPIO_INT_19 19 ///< GPIO INT[19]: P_GPIO[8]
#define GPIO_INT_20 20 ///< GPIO INT[20]: P_GPIO[9]
#define GPIO_INT_21 21 ///< GPIO INT[21]: P_GPIO[11]
#define GPIO_INT_22 22 ///< GPIO INT[22]: P_GPIO[15]
#define GPIO_INT_23 23 ///< GPIO INT[23]: P_GPIO[17]
#define GPIO_INT_24 24 ///< GPIO INT[24]: P_GPIO[18]
#define GPIO_INT_25 25 ///< GPIO INT[25]: P_GPIO[24]
#define GPIO_INT_26 26 ///< GPIO INT[26]: L_GPIO[1]
#define GPIO_INT_27 27 ///< GPIO INT[27]: L_GPIO[6]
#define GPIO_INT_28 28 ///< GPIO INT[28]: L_GPIO[11]
#define GPIO_INT_29 29 ///< GPIO INT[29]: L_GPIO[14]
#define GPIO_INT_30 30 ///< GPIO INT[30]: P_GPIO[18]
#define GPIO_INT_31 31 ///< GPIO INT[31]: L_GPIO[22]
#define GPIO_INT_32 32 ///< DGPIO INT[0]: D_GPIO[0]
#define GPIO_INT_33 33 ///< DGPIO INT[1]: D_GPIO[1]
#define GPIO_INT_34 34 ///< DGPIO INT[2]: D_GPIO[2]
#define GPIO_INT_35 35 ///< DGPIO INT[3]: D_GPIO[3]
#define GPIO_INT_36 36 ///< DGPIO INT[4]: D_GPIO[4]
#define GPIO_INT_37 37 ///< DGPIO INT[5]: D_GPIO[5]
#define GPIO_INT_38 38 ///< DGPIO INT[6]: D_GPIO[6]
#define GPIO_INT_39 39 ///< DGPIO INT[7]: D_GPIO[7]
#define GPIO_INT_48 48 ///< DGPIO INT[16]: USB wakeup
#define GPIO_INT_USBWAKEUP (GPIO_INT_48) ///< DGPIO INT[16]: USB wakeup
//@}
// In order to backward comaptible, DGPIO is used as " GPIO_IS_DGPIO | D_GPIO_* " or "D_GPIO_*"
#define GPIO_IS_DGPIO (128)
//
// The general api for the GPIO device driver
//
extern void gpio_setDir(UINT32 pin, UINT32 dir);
extern UINT32 gpio_getDir(UINT32 pin);
extern void gpio_setPin(UINT32 pin);
extern void gpio_clearPin(UINT32 pin);
extern UINT32 gpio_getPin(UINT32 pin);
extern void gpio_pullSet(UINT32 pin);
extern void gpio_pullClear(UINT32 pin);
extern UINT32 gpio_readData(UINT32 dataidx);
extern void gpio_writeData(UINT32 dataidx, UINT32 value);
//extern UINT32 gpio_readDir(UINT32 dataidx);
//extern void gpio_writeDir(UINT32 dataidx, UINT32 value);
extern UINT32 dgpio_readData(void);
extern void dgpio_writeData(UINT32 value);
extern UINT32 top_get_bs(void);
//extern UINT32 dgpio_readDir(void);
//extern void dgpio_writeDir(UINT32 value);
//@}
#endif