MTK6577+Android GPIO

MTK6577+Android GPIO

 

1.     GPIO简介

 

MT6577提供232个通用输入/输出引脚(GPIO,GPIO0~GPIO231),通过设置它们的控制寄存器,MCU软件可以控制它们的方向(输入/输出)、输出值(低/高)和读取这些引脚的值(输入)。为了减少GPIO引脚的数量,MT6577的GPIO采用多路复用的设计机制,这点和freescale的IMX系列类似。

 

2.     GPIO特性(features)


图1

常用的寄存器如下:

(1)  GPIO_MODE寄存器组

包括有GPIO_MODE0~46、GPIO_MODE_SET0~46和GPIO_MODE_RESET0~46这些寄存器,最常用的是GPIO_MODE0~46,每个GPIO通过编程GPIO_MODE_SELx(x=0~46)命令寄存器来控制辅助模式(auxiliary mode),其实此寄存器就是用于配置GPIO模式的,比如下面我们以PWM1引脚来说明此寄存器的意义:

MTK6577+Android GPIO_第1张图片

图2

就是说PWM1引脚(232个GPIO引脚之一),在内部可以通过软件编程来选择接通GPIO67、PWM1、EINT9、IRDA_PDN、MD_TXD2、USB_DRVVBUS、DBG_OUT1[16]之一,比如如果要让PWM1引脚作为GPIO67功能,我们来看GPIO_MODE_SEL13的设置:

MTK6577+Android GPIO_第2张图片

图3

结合图2和图3,只需要设置GPIO_MODE_SEL13[8:6]=0就选通了GPIO67。

 

(2)  GPIODIR寄存器组

包括有GPIODIR0~14、GPIODIR_SET0~14和GPIODIR_RESET0~14这些寄存器,最常用的是GPIODIR0~14,每个寄存器配置一个GPIO为输入(0)/输出(1),如下图:


图4

 

(3)  PULLEN寄存器组

包括有PULLEN0~14、PULLEN_SET0~14、PULLEN_RESET0~14和PULLSEL0~14,最常用的是PULLEN0~14和PULLSEL0~14,分别用于disable(0)/enable(1)引脚上拉下拉功能,选择上拉还是下拉功能

MTK6577+Android GPIO_第3张图片

图5

 

(4)  GPIO_INV寄存器组

包括有GPI_INV0~14、GPI_INV_SET0~14和GPI_INV_RESET0~14,最常用的是GPI_INV0~14,用于控制是否反转(invert)GPIO的值,如下图:

MTK6577+Android GPIO_第4张图片

图6

 

(5)  GPO寄存器组

包括有GPO0~14、GPO_SET0~14和GPO_RESET0~14,最常用的是GPO0~14,用于控制GPIO引脚的输出电平,如下图:

MTK6577+Android GPIO_第5张图片

图7

 

(6)  GPI寄存器组

GPI0~14,通过此寄存器可以获取到连接到此IO口的输入状态,如下图:

MTK6577+Android GPIO_第6张图片

图8

 

3.     GPIO寄存器对应的一些枚举类型定义

/*----------------------------------------------------------------------------*/
#defineMAX_GPIO_PIN    232
/******************************************************************************
* Enumeration forGPIO pin
******************************************************************************/
typedef enumGPIO_PIN
{   
    GPIO_UNSUPPORTED = -1,   
       
    GPIO0 , GPIO1  , GPIO2  , GPIO3 , GPIO4  , GPIO5  , GPIO6 , GPIO7  ,
    GPIO8 , GPIO9  , GPIO10 , GPIO11 ,GPIO12 , GPIO13 , GPIO14 , GPIO15 ,
    GPIO16 , GPIO17 , GPIO18 , GPIO19 , GPIO20, GPIO21 , GPIO22 , GPIO23 ,
    GPIO24 , GPIO25 , GPIO26 , GPIO27 , GPIO28, GPIO29 , GPIO30 , GPIO31 ,
    GPIO32 , GPIO33 , GPIO34 , GPIO35 , GPIO36, GPIO37 , GPIO38 , GPIO39 ,
    GPIO40 , GPIO41 , GPIO42 , GPIO43 , GPIO44, GPIO45 , GPIO46 , GPIO47 ,
    GPIO48 , GPIO49 , GPIO50 , GPIO51 , GPIO52, GPIO53 , GPIO54 , GPIO55 ,
    GPIO56 , GPIO57 , GPIO58 , GPIO59 , GPIO60, GPIO61 , GPIO62 , GPIO63 ,
    GPIO64 , GPIO65 , GPIO66 , GPIO67 , GPIO68, GPIO69 , GPIO70 , GPIO71 ,
    GPIO72 , GPIO73 , GPIO74 , GPIO75 , GPIO76, GPIO77 , GPIO78 , GPIO79 ,
    GPIO80 , GPIO81 , GPIO82 , GPIO83 , GPIO84, GPIO85 , GPIO86 , GPIO87 ,
    GPIO88 , GPIO89 , GPIO90 , GPIO91 , GPIO92, GPIO93 , GPIO94 , GPIO95 ,
    GPIO96 , GPIO97 , GPIO98 , GPIO99 ,GPIO100, GPIO101, GPIO102, GPIO103,
    GPIO104, GPIO105, GPIO106, GPIO107,GPIO108, GPIO109, GPIO110, GPIO111,
    GPIO112, GPIO113, GPIO114, GPIO115,GPIO116, GPIO117, GPIO118, GPIO119,
    GPIO120, GPIO121, GPIO122, GPIO123,GPIO124, GPIO125, GPIO126, GPIO127,
    GPIO128, GPIO129, GPIO130, GPIO131,GPIO132, GPIO133, GPIO134, GPIO135,
    GPIO136, GPIO137, GPIO138, GPIO139,GPIO140, GPIO141, GPIO142, GPIO143,
    GPIO144, GPIO145, GPIO146, GPIO147,GPIO148, GPIO149, GPIO150, GPIO151,
    GPIO152, GPIO153, GPIO154, GPIO155,GPIO156, GPIO157, GPIO158, GPIO159,
    GPIO160, GPIO161, GPIO162, GPIO163,GPIO164, GPIO165, GPIO166, GPIO167,
    GPIO168, GPIO169, GPIO170, GPIO171,GPIO172, GPIO173, GPIO174, GPIO175,
    GPIO176, GPIO177, GPIO178, GPIO179,GPIO180, GPIO181, GPIO182, GPIO183,
    GPIO184, GPIO185, GPIO186, GPIO187,GPIO188, GPIO189, GPIO190, GPIO191,
    GPIO192, GPIO193, GPIO194, GPIO195, GPIO196,GPIO197, GPIO198, GPIO199,
    GPIO200, GPIO201, GPIO202, GPIO203,GPIO204, GPIO205, GPIO206, GPIO207,
    GPIO208, GPIO209, GPIO210, GPIO211,GPIO212, GPIO213, GPIO214, GPIO215,
    GPIO216, GPIO217, GPIO218, GPIO219,GPIO220, GPIO221, GPIO222, GPIO223,
    GPIO224, GPIO225, GPIO226, GPIO227,GPIO228, GPIO229, GPIO230, GPIO231,
   
    GPIO_MAX
}GPIO_PIN;        
 
/******************************************************************************
* Enumeration forClock output
******************************************************************************/
/* GPIO MODECONTROL VALUE*/
typedef enum {
    GPIO_MODE_GPIO  = 0,
    GPIO_MODE_00    = 0,
    GPIO_MODE_01    = 1,
    GPIO_MODE_02    = 2,
    GPIO_MODE_03    = 3,
    GPIO_MODE_04    = 4,
    GPIO_MODE_05    = 5,
    GPIO_MODE_06    = 6,
    GPIO_MODE_07    = 7,
 
    GPIO_MODE_MAX,
    GPIO_MODE_DEFAULT = GPIO_MODE_01,
} GPIO_MODE;
/*----------------------------------------------------------------------------*/
/* GPIO DIRECTION*/
typedef enum {
    GPIO_DIR_IN     = 0,
    GPIO_DIR_OUT    = 1,
 
    GPIO_DIR_MAX,
    GPIO_DIR_DEFAULT = GPIO_DIR_IN,
} GPIO_DIR;
/*----------------------------------------------------------------------------*/
/* GPIO PULLENABLE*/
typedef enum {
    GPIO_PULL_DISABLE = 0,
    GPIO_PULL_ENABLE  = 1,
 
    GPIO_PULL_EN_MAX,
    GPIO_PULL_EN_DEFAULT = GPIO_PULL_ENABLE,
} GPIO_PULL_EN;
/*----------------------------------------------------------------------------*/
/* GPIOPULL-UP/PULL-DOWN*/
typedef enum {
    GPIO_PULL_DOWN  = 0,
    GPIO_PULL_UP    = 1,
 
    GPIO_PULL_MAX,
    GPIO_PULL_DEFAULT = GPIO_PULL_DOWN
} GPIO_PULL;
/*----------------------------------------------------------------------------*/
/* GPIO INVERSION*/
typedef enum {
    GPIO_DATA_UNINV = 0,
    GPIO_DATA_INV   = 1,
 
    GPIO_DATA_INV_MAX,
    GPIO_DATA_INV_DEFAULT = GPIO_DATA_UNINV
} GPIO_INVERSION;
/*----------------------------------------------------------------------------*/
/* GPIO OUTPUT */
typedef enum {
    GPIO_OUT_ZERO = 0,
    GPIO_OUT_ONE  = 1,
 
    GPIO_OUT_MAX,
    GPIO_OUT_DEFAULT = GPIO_OUT_ZERO,
    GPIO_DATA_OUT_DEFAULT = GPIO_OUT_ZERO,  /*compatible with DCT*/
} GPIO_OUT;


4.     GPIO控制代码例子

比如我们要PWM1引脚作为GPIO67功能,用于输出低电平,控制代码如下:

mt_set_gpio_mode(GPIO67,GPIO_MODE_00);
mt_set_gpio_dir(GPIO67,GPIO_DIR_OUT);
mt_set_gpio_out(GPIO67,GPIO_OUT_ZERO);


 

你可能感兴趣的:(MTK6577+Android GPIO)