生活随笔
收集整理的這篇文章主要介紹了
                                
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引腳來說明此寄存器的意義:
 
 
 
 
 
 
 圖2
 
 就是說PWM1引腳(232個GPIO引腳之一),在內部可以通過軟件編程來選擇接通GPIO67、PWM1、EINT9、IRDA_PDN、MD_TXD2、USB_DRVVBUS、DBG_OUT1[16]之一,比如如果要讓PWM1引腳作為GPIO67功能,我們來看GPIO_MODE_SEL13的設置:
 
 
 
 
 
 
 圖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)引腳上拉下拉功能,選擇上拉還是下拉功能
 
 
 
 
 
 
 圖5
 
 ?
 
 (4)??GPIO_INV寄存器組
 
 包括有GPI_INV0~14、GPI_INV_SET0~14和GPI_INV_RESET0~14,最常用的是GPI_INV0~14,用于控制是否反轉(invert)GPIO的值,如下圖:
 
 
 
 
 
 
 圖6
 
 ?
 
 (5)??GPO寄存器組
 
 包括有GPO0~14、GPO_SET0~14和GPO_RESET0~14,最常用的是GPO0~14,用于控制GPIO引腳的輸出電平,如下圖:
 
 
 
 
 
 
 圖7
 
 ?
 
 (6)??GPI寄存器組
 
 GPI0~14,通過此寄存器可以獲取到連接到此IO口的輸入狀態,如下圖:
 
 
 
 
 
 
 圖8
 
 ?
 
 3.?????GPIO寄存器對應的一些枚舉類型定義
 
 
 
   [cpp]?view plaincopy     
 ?? #defineMAX_GPIO_PIN????232?? ? ? ?? 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;?????????? ??? ? ? ?? ?? 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;?? ?? ?? typedef?enum?{?? ????GPIO_DIR_IN?????=?0,?? ????GPIO_DIR_OUT????=?1,?? ??? ????GPIO_DIR_MAX,?? ????GPIO_DIR_DEFAULT?=?GPIO_DIR_IN,?? }?GPIO_DIR;?? ?? ?? typedef?enum?{?? ????GPIO_PULL_DISABLE?=?0,?? ????GPIO_PULL_ENABLE??=?1,?? ??? ????GPIO_PULL_EN_MAX,?? ????GPIO_PULL_EN_DEFAULT?=?GPIO_PULL_ENABLE,?? }?GPIO_PULL_EN;?? ?? ?? typedef?enum?{?? ????GPIO_PULL_DOWN??=?0,?? ????GPIO_PULL_UP????=?1,?? ??? ????GPIO_PULL_MAX,?? ????GPIO_PULL_DEFAULT?=?GPIO_PULL_DOWN?? }?GPIO_PULL;?? ?? ?? typedef?enum?{?? ????GPIO_DATA_UNINV?=?0,?? ????GPIO_DATA_INV???=?1,?? ??? ????GPIO_DATA_INV_MAX,?? ????GPIO_DATA_INV_DEFAULT?=?GPIO_DATA_UNINV?? }?GPIO_INVERSION;?? ?? ?? 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,???? }?GPIO_OUT; ?
                            總結
                            
                                以上是生活随笔為你收集整理的MTK6577+Android GPIO的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。