Linux核心標頭檔中關於s3c2410 GPIO的宏

來源:互聯網
上載者:User

 Linux核心標頭檔中關於s3c2410 GPIO的宏

一、GPIO寄存器定義
1.#define GPCON(x)  __REG2(0x56000000, (x) * 0x10)
這句是定義2410的GPIO的控制寄存器,注意:__REG2的參數是寄存器的物理地址,這個物理地址經_REG2宏轉換為虛擬位址,對照2410的手冊可以得到一下對應關係:
GPCON(1) ------ PORT A  0x56000000
GPCON(2) ------ PORT B  0x56000010
GPCON(3) ------ PORT C  0x56000020
  .          .          .        .
  .          .          .        .
  .          .          .        .
GPCON(8) ------ PORT H  0x56000070
2.#define GPDAT(x)  __REG2(0x56000004, (x) * 0x10)
這句是定義2410的GPIO的資料寄存器,定義方法同GPCON宏。
GPDAT(1) ------ PORT A  0x56000004
GPDAT(2) ------ PORT B  0x56000014
GPDAT(3) ------ PORT C  0x56000024
  .          .          .        .
  .          .          .        .
  .          .          .        .
GPDAT(8) ------ PORT H  0x56000074
3.#define GPUP(x)      __REG2(0x56000008, (x) * 0x10)
這句是定義2410的GPIO的上拉電阻屏蔽/啟用寄存器,定義方法同GPCON宏。
GPUP(1) ------ PORT A  0x56000008
GPUP(2) ------ PORT B  0x56000018
GPUP(3) ------ PORT C  0x56000028
  .          .          .        .
  .          .          .        .
  .          .          .        .
GPUP(8) ------ PORT H  0x56000078
二、GPIO連接埠號碼定義
以GPIO_G12來說明在核心標頭檔$(KERNEL_INCLUDE)/asm-arm/arch/s3c2410.h中是如何來定義IO port的連接埠號碼的。定義GPIO連接埠主要涉及到以下幾個宏:
#define MAKE_GPIO_NUM(p, o) ((p << GPIO_PORT_SHIFTT) | (o << GPIO_OFS_SHIFT))#define GPIO_G12              MAKE_GPIO_NUM(PORTG_OFS, 12)GPIO_PORT_SHIFTT值為8,代表GPIO組號在整個GPIO連接埠號碼(如GPIO_G12)欄位中的位移
GPIO_OFS_SHIFT值為0,代表GPIO組內位移號在整個GPIO連接埠號碼(如GPIO_G12)欄位中的位移
  s3c2410有117個多功能input/output port pins。分為以下八組:
— Port A (GPA): 23-output port                    #define PORTA_OFS                0
— Port B (GPB): 11-input/output port              #define PORTB_OFS                1
— Port C (GPC): 16-input/output port              #define PORTC_OFS            2
— Port D (GPD): 16-input/output port              #define PORTD_OFS                3
— Port E (GPE): 16-input/output port                #define PORTE_OFS          4
— Port F (GPF): 8-input/output port                #define PORTF_OFS          5
— Port G (GPG): 16-input/output port              #define PORTG_OFS            6
— Port H (GPH): 11-input/output port                #define PORTH_OFS          7

GPG12屬於G組,組內位移為12,從上述兩個宏定義中,我們可以很清楚地看出GPIO_G12結構:


                    圖1  GPIO連接埠號碼結構圖
連接埠一共有8組,從上面的宏定義可以看出,連接埠組號p的範圍:0~7。而組內位移各組不盡相同,Port A有23個輸出口,因此它的組內位移o為0~22,Port G有16個IO口,它的組內位移o為0~15,其他組的GPIO以此類推。
三、write_gpio_bit(x,v)宏分析
write_gpio_bit宏傳入兩個參數,第一個為GPIO連接埠號碼,如GPIO_G12;第二個參數為1或0,為相應IO口設定高電平或低電平輸出。具體宏展開如下:
#define write_gpio_bit(x, v) /
                            ({  /
GPDAT(GRAB_PORT((x))) &= ~(0x1 x))); /
                              GPDAT(GRAB_PORT((x))) |= ((v) x))); /
})
GRAB_PORT宏的參數是GPIO連接埠號碼,功能是從GPIO連接埠號碼中解析出組號,具體定義如下:
#define GRAB_PORT(x)              (((x) & GPIO_PORT_MASK) >> GPIO_PORT_SHIFTT)
其中GPIO_PORT_MASK是組號的掩碼,值為0x0000ff00,從圖1中也可看出。
GRAB_OFS宏和GRAB_PORT類似,它的功能是從GPIO連接埠號碼中解析出組內位移:
#define GRAB_OFS(x)            (((x) & GPIO_OFS_MASK) >> GPIO_OFS_SHIFT)
其中位移值掩碼GPIO_OFS_MASK=0x000000ff。
現在我們結合上述說明來分析write_gpio_bit(GPIO_G12,1)這條語句:由GPIO_G12的宏定義可計算出其值為0x0000060C,GRAB_PORT(GPIO_G12)解析得到所操作的IO屬於G組,組號為6;GRAB_OFS(GPIO_G12)解析得到此IO口為G組的第12個引腳(從0開始算起),為GPG12,運算式值為12。則write_gpio_bit(GPIO_G12,1)等價於下面兩條語句:
GPDAT(6) &= ~(0x112);  //GPGDAT寄存器第12位清零
GPDAT(6) | = 112;      // 向GPGDAT寄存器第12位寫入‘1’
到此,我們知道了write_gpio_bit(GPIO_G12,1)這條語句是將GPG12這個引腳拉成高電平。
四、set_gpio_ctrl(x)宏分析
#define set_gpio_ctrl(x) /
      ({ GPCON(GRAB_PORT((x))) &= ~(0x3
          GPCON(GRAB_PORT(x)) |= (GRAB_MODE(x)
          GPUP(GRAB_PORT((x))) &= ~(1
          GPUP(GRAB_PORT((x))) |= (GRAB_PULLUP((x))
完成了對write_gpio_bit宏的分析,現在來看set_gpio_ctrl就很簡單了!在它的宏展開中只多了GRAB_MODE(x)和 GRAB_PULLUP(x)分別表示從參數x中解析出IO口的模式和使能/屏蔽此連接埠的上拉電阻。值得注意的是set_gpio_ctrl的參數x不僅僅表示GPIO連接埠號碼,其高16位還帶有模式狀態和上拉電阻控制資訊,參數x的結構如:

圖2 set_gpio_ctrl的參數欄位結構圖

    低16位即為前面所述的GPIO的連接埠號碼,高16位中的R欄位用來屏蔽/使能IO口的上拉電阻功能。R=0,上拉電阻使能;R=1,上拉電阻失效。M欄位用來設定IO口的工作模式,M=0,IO口為輸入連接埠;M=1,IO口為輸出連接埠;M=2,可選功能1;M=3,可選功能2。
set_gpio_ctrl宏就是通過寫相應GPIO所在組的GPXCON(X為A~H)的相應位來設定IO口模式(GPACON每一個位控制一個IO口,而GPBCON~GPHCON都是兩個位控制一個IO口的模式),通過寫GPXUP(X為A~H)來決定是否啟用上拉電阻。典型的set_gpio_ctrl調用方式如下:
set_gpio_ctrl(GPIO_MODE_OUT | GPIO_PULLUP_DIS | GPIO_G12);
這條語句是將GPG12設定成輸出模式,並且不使用連接埠的上拉電阻。
五、結束
以上主要結合《S3C2410X 32-BIT RISC MICROPROCESSOR USER'S MANUAL》分析了$(LINUX_KERNEL_INCLUDE)/asm-arm/arch/s3c2410.h中所定義的對2410GPIO進行操作的幾個宏,除了文中提及的幾個宏,除此還有read_gpio_bit(x)、read_gpio_reg(x) 、write_gpio_reg(x, v)等,實現方法和上述類似,在此不再一一贅述! ///////////////////////////////////////////////#define GPCON(x)__REG2(0x56000000, (x) * 0x10)<br />#define GPDAT(x)__REG2(0x56000004, (x) * 0x10)<br />#define GPUP(x) __REG2(0x56000008, (x) * 0x10)</p><p>#define GPIO_OFS_SHIFT0<br />#define GPIO_PORT_SHIFTT8<br />#define GPIO_PULLUP_SHIFT16<br />#define GPIO_MODE_SHIFT24<br />#define GPIO_OFS_MASK0x000000ff<br />#define GPIO_PORT_MASK0x0000ff00<br />#define GPIO_PULLUP_MASK0x00ff0000<br />#define GPIO_MODE_MASK0xff000000<br />#define GPIO_MODE_IN(0 << GPIO_MODE_SHIFT)<br />#define GPIO_MODE_OUT(1 << GPIO_MODE_SHIFT)<br />#define GPIO_MODE_ALT0(2 << GPIO_MODE_SHIFT)<br />#define GPIO_MODE_ALT1(3 << GPIO_MODE_SHIFT)<br />#define GPIO_PULLUP_EN(0 << GPIO_PULLUP_SHIFT)<br />#define GPIO_PULLUP_DIS(1 << GPIO_PULLUP_SHIFT) </p><p>#define PORTA_OFS0<br />#define PORTB_OFS1<br />#define PORTC_OFS2<br />#define PORTD_OFS3<br />#define PORTE_OFS4<br />#define PORTF_OFS5<br />#define PORTG_OFS6<br />#define PORTH_OFS7</p><p>#define MAKE_GPIO_NUM(p, o)((p << GPIO_PORT_SHIFTT) | (o << GPIO_OFS_SHIFT))</p><p>#define GRAB_MODE(x)(((x) & GPIO_MODE_MASK) >> GPIO_MODE_SHIFT)<br />#define GRAB_PULLUP(x)(((x) & GPIO_PULLUP_MASK) >> GPIO_PULLUP_SHIFT)<br />#define GRAB_PORT(x)(((x) & GPIO_PORT_MASK) >> GPIO_PORT_SHIFTT)<br />#define GRAB_OFS(x)(((x) & GPIO_OFS_MASK) >> GPIO_OFS_SHIFT)</p><p>#define set_gpio_ctrl(x) /<br />({ GPCON(GRAB_PORT((x))) &= ~(0x3 << (GRAB_OFS((x))*2)); /<br /> GPCON(GRAB_PORT(x)) |= (GRAB_MODE(x) << (GRAB_OFS((x))*2)); /<br /> GPUP(GRAB_PORT((x))) &= ~(1 << GRAB_OFS((x))); /<br /> GPUP(GRAB_PORT((x))) |= (GRAB_PULLUP((x)) << GRAB_OFS((x))); })<br />#define set_gpio_pullup(x) /<br />({ GPUP(GRAB_PORT((x))) &= ~(1 << GRAB_OFS((x))); /<br /> GPUP(GRAB_PORT((x))) |= (GRAB_PULLUP((x)) << GRAB_OFS((x))); })<br />#define set_gpio_pullup_user(x, v) /<br />({ GPUP(GRAB_PORT((x))) &= ~(1 << GRAB_OFS((x))); /<br /> GPUP(GRAB_PORT((x))) |= ((v) << GRAB_OFS((x))); })<br />#define set_gpio_mode(x) /<br />({ GPCON(GRAB_PORT((x))) &= ~(0x3 << (GRAB_OFS((x))*2)); /<br /> GPCON(GRAB_PORT((x))) |= (GRAB_MODE((x)) << (GRAB_OFS((x))*2)); })<br />#define set_gpio_mode_user(x, v) /<br />({ GPCON(GRAB_PORT((x))) &= ~(0x3 << (GRAB_OFS((x))*2)); /<br /> GPCON(GRAB_PORT((x))) |= ((v) << (GRAB_OFS((x))*2)); })<br />#define set_gpioA_mode(x) /<br />({ GPCON(GRAB_PORT((x))) &= ~(0x1 << GRAB_OFS((x))); /<br /> GPCON(GRAB_PORT((x))) |= (GRAB_MODE((x)) << GRAB_OFS((x))); })<br />#define read_gpio_bit(x)((GPDAT(GRAB_PORT((x))) & (1<<GRAB_OFS((x)))) >> GRAB_OFS((x)))<br />#define read_gpio_reg(x)(GPDAT(GRAB_PORT((x)))<br />#define write_gpio_bit(x, v) /<br />({ GPDAT(GRAB_PORT((x))) &= ~(0x1 << GRAB_OFS((x))); /<br /> GPDAT(GRAB_PORT((x))) |= ((v) << GRAB_OFS((x))); })<br />#define write_gpio_reg(x, v)(GPDAT(GRAB_PORT((x))) = (v))</p><p>#define GPIO_A0MAKE_GPIO_NUM(PORTA_OFS, 0)<br />#define GPIO_A1MAKE_GPIO_NUM(PORTA_OFS, 1)<br />#define GPIO_A2MAKE_GPIO_NUM(PORTA_OFS, 2)<br />#define GPIO_A3MAKE_GPIO_NUM(PORTA_OFS, 3)<br />#define GPIO_A4MAKE_GPIO_NUM(PORTA_OFS, 4)<br />#define GPIO_A5MAKE_GPIO_NUM(PORTA_OFS, 5)<br />#define GPIO_A6MAKE_GPIO_NUM(PORTA_OFS, 6)<br />#define GPIO_A7MAKE_GPIO_NUM(PORTA_OFS, 7)<br />#define GPIO_A8MAKE_GPIO_NUM(PORTA_OFS, 8)<br />#define GPIO_A9MAKE_GPIO_NUM(PORTA_OFS, 9)<br />#define GPIO_A10MAKE_GPIO_NUM(PORTA_OFS, 10)<br />#define GPIO_A11MAKE_GPIO_NUM(PORTA_OFS, 11)<br />#define GPIO_A12MAKE_GPIO_NUM(PORTA_OFS, 12)<br />#define GPIO_A13MAKE_GPIO_NUM(PORTA_OFS, 13)<br />#define GPIO_A14MAKE_GPIO_NUM(PORTA_OFS, 14)<br />#define GPIO_A15MAKE_GPIO_NUM(PORTA_OFS, 15)<br />#define GPIO_A16MAKE_GPIO_NUM(PORTA_OFS, 16)<br />#define GPIO_A17MAKE_GPIO_NUM(PORTA_OFS, 17)<br />#define GPIO_A18MAKE_GPIO_NUM(PORTA_OFS, 18)<br />#define GPIO_A19MAKE_GPIO_NUM(PORTA_OFS, 19)<br />#define GPIO_A20MAKE_GPIO_NUM(PORTA_OFS, 20)<br />#define GPIO_A21MAKE_GPIO_NUM(PORTA_OFS, 21)<br />#define GPIO_A22MAKE_GPIO_NUM(PORTA_OFS, 22)</p><p>#define GPIO_B0MAKE_GPIO_NUM(PORTB_OFS, 0)<br />#define GPIO_B1MAKE_GPIO_NUM(PORTB_OFS, 1)<br />#define GPIO_B2MAKE_GPIO_NUM(PORTB_OFS, 2)<br />#define GPIO_B3MAKE_GPIO_NUM(PORTB_OFS, 3)<br />#define GPIO_B4MAKE_GPIO_NUM(PORTB_OFS, 4)<br />#define GPIO_B5MAKE_GPIO_NUM(PORTB_OFS, 5)<br />#define GPIO_B6MAKE_GPIO_NUM(PORTB_OFS, 6)<br />#define GPIO_B7MAKE_GPIO_NUM(PORTB_OFS, 7)<br />#define GPIO_B8MAKE_GPIO_NUM(PORTB_OFS, 8)<br />#define GPIO_B9MAKE_GPIO_NUM(PORTB_OFS, 9)<br />#define GPIO_B10MAKE_GPIO_NUM(PORTB_OFS, 10)</p><p>#define GPIO_C0MAKE_GPIO_NUM(PORTC_OFS, 0)<br />#define GPIO_C1MAKE_GPIO_NUM(PORTC_OFS, 1)<br />#define GPIO_C2MAKE_GPIO_NUM(PORTC_OFS, 2)<br />#define GPIO_C3MAKE_GPIO_NUM(PORTC_OFS, 3)<br />#define GPIO_C4MAKE_GPIO_NUM(PORTC_OFS, 4)<br />#define GPIO_C5MAKE_GPIO_NUM(PORTC_OFS, 5)<br />#define GPIO_C6MAKE_GPIO_NUM(PORTC_OFS, 6)<br />#define GPIO_C7MAKE_GPIO_NUM(PORTC_OFS, 7)<br />#define GPIO_C8MAKE_GPIO_NUM(PORTC_OFS, 8)<br />#define GPIO_C9MAKE_GPIO_NUM(PORTC_OFS, 9)<br />#define GPIO_C10MAKE_GPIO_NUM(PORTC_OFS, 10)<br />#define GPIO_C11MAKE_GPIO_NUM(PORTC_OFS, 11)<br />#define GPIO_C12MAKE_GPIO_NUM(PORTC_OFS, 12)<br />#define GPIO_C13MAKE_GPIO_NUM(PORTC_OFS, 13)<br />#define GPIO_C14MAKE_GPIO_NUM(PORTC_OFS, 14)<br />#define GPIO_C15MAKE_GPIO_NUM(PORTC_OFS, 15)</p><p>#define GPIO_D0MAKE_GPIO_NUM(PORTD_OFS, 0)<br />#define GPIO_D1MAKE_GPIO_NUM(PORTD_OFS, 1)<br />#define GPIO_D2MAKE_GPIO_NUM(PORTD_OFS, 2)<br />#define GPIO_D3MAKE_GPIO_NUM(PORTD_OFS, 3)<br />#define GPIO_D4MAKE_GPIO_NUM(PORTD_OFS, 4)<br />#define GPIO_D5MAKE_GPIO_NUM(PORTD_OFS, 5)<br />#define GPIO_D6MAKE_GPIO_NUM(PORTD_OFS, 6)<br />#define GPIO_D7MAKE_GPIO_NUM(PORTD_OFS, 7)<br />#define GPIO_D8MAKE_GPIO_NUM(PORTD_OFS, 8)<br />#define GPIO_D9MAKE_GPIO_NUM(PORTD_OFS, 9)<br />#define GPIO_D10MAKE_GPIO_NUM(PORTD_OFS, 10)<br />#define GPIO_D11MAKE_GPIO_NUM(PORTD_OFS, 11)<br />#define GPIO_D12MAKE_GPIO_NUM(PORTD_OFS, 12)<br />#define GPIO_D13MAKE_GPIO_NUM(PORTD_OFS, 13)<br />#define GPIO_D14MAKE_GPIO_NUM(PORTD_OFS, 14)<br />#define GPIO_D15MAKE_GPIO_NUM(PORTD_OFS, 15)</p><p>#define GPIO_E0MAKE_GPIO_NUM(PORTE_OFS, 0)<br />#define GPIO_E1MAKE_GPIO_NUM(PORTE_OFS, 1)<br />#define GPIO_E2MAKE_GPIO_NUM(PORTE_OFS, 2)<br />#define GPIO_E3MAKE_GPIO_NUM(PORTE_OFS, 3)<br />#define GPIO_E4MAKE_GPIO_NUM(PORTE_OFS, 4)<br />#define GPIO_E5MAKE_GPIO_NUM(PORTE_OFS, 5)<br />#define GPIO_E6MAKE_GPIO_NUM(PORTE_OFS, 6)<br />#define GPIO_E7MAKE_GPIO_NUM(PORTE_OFS, 7)<br />#define GPIO_E8MAKE_GPIO_NUM(PORTE_OFS, 8)<br />#define GPIO_E9MAKE_GPIO_NUM(PORTE_OFS, 9)<br />#define GPIO_E10MAKE_GPIO_NUM(PORTE_OFS, 10)<br />#define GPIO_E11MAKE_GPIO_NUM(PORTE_OFS, 11)<br />#define GPIO_E12MAKE_GPIO_NUM(PORTE_OFS, 12)<br />#define GPIO_E13MAKE_GPIO_NUM(PORTE_OFS, 13)<br />#define GPIO_E14MAKE_GPIO_NUM(PORTE_OFS, 14)<br />#define GPIO_E15MAKE_GPIO_NUM(PORTE_OFS, 15)</p><p>#define GPIO_F0MAKE_GPIO_NUM(PORTF_OFS, 0)<br />#define GPIO_F1MAKE_GPIO_NUM(PORTF_OFS, 1)<br />#define GPIO_F2MAKE_GPIO_NUM(PORTF_OFS, 2)<br />#define GPIO_F3MAKE_GPIO_NUM(PORTF_OFS, 3)<br />#define GPIO_F4MAKE_GPIO_NUM(PORTF_OFS, 4)<br />#define GPIO_F5MAKE_GPIO_NUM(PORTF_OFS, 5)<br />#define GPIO_F6MAKE_GPIO_NUM(PORTF_OFS, 6)<br />#define GPIO_F7MAKE_GPIO_NUM(PORTF_OFS, 7)</p><p>#define GPIO_G0MAKE_GPIO_NUM(PORTG_OFS, 0)<br />#define GPIO_G1MAKE_GPIO_NUM(PORTG_OFS, 1)<br />#define GPIO_G2MAKE_GPIO_NUM(PORTG_OFS, 2)<br />#define GPIO_G3MAKE_GPIO_NUM(PORTG_OFS, 3)<br />#define GPIO_G4MAKE_GPIO_NUM(PORTG_OFS, 4)<br />#define GPIO_G5MAKE_GPIO_NUM(PORTG_OFS, 5)<br />#define GPIO_G6MAKE_GPIO_NUM(PORTG_OFS, 6)<br />#define GPIO_G7MAKE_GPIO_NUM(PORTG_OFS, 7)<br />#define GPIO_G8MAKE_GPIO_NUM(PORTG_OFS, 8)<br />#define GPIO_G9MAKE_GPIO_NUM(PORTG_OFS, 9)<br />#define GPIO_G10MAKE_GPIO_NUM(PORTG_OFS, 10)<br />#define GPIO_G11MAKE_GPIO_NUM(PORTG_OFS, 11)<br />#define GPIO_G12MAKE_GPIO_NUM(PORTG_OFS, 12)<br />#define GPIO_G13MAKE_GPIO_NUM(PORTG_OFS, 13)<br />#define GPIO_G14MAKE_GPIO_NUM(PORTG_OFS, 14)<br />#define GPIO_G15MAKE_GPIO_NUM(PORTG_OFS, 15)</p><p>#define GPIO_H0MAKE_GPIO_NUM(PORTH_OFS, 0)<br />#define GPIO_H1MAKE_GPIO_NUM(PORTH_OFS, 1)<br />#define GPIO_H2MAKE_GPIO_NUM(PORTH_OFS, 2)<br />#define GPIO_H3MAKE_GPIO_NUM(PORTH_OFS, 3)<br />#define GPIO_H4MAKE_GPIO_NUM(PORTH_OFS, 4)<br />#define GPIO_H5MAKE_GPIO_NUM(PORTH_OFS, 5)<br />#define GPIO_H6MAKE_GPIO_NUM(PORTH_OFS, 6)<br />#define GPIO_H7MAKE_GPIO_NUM(PORTH_OFS, 7)<br />#define GPIO_H8MAKE_GPIO_NUM(PORTH_OFS, 8)<br />#define GPIO_H9MAKE_GPIO_NUM(PORTH_OFS, 9)<br />#define GPIO_H10MAKE_GPIO_NUM(PORTH_OFS, 10)</p><p>#define GPIO_MODE_TOUTGPIO_MODE_ALT0<br />#define GPIO_MODE_nXBACKGPIO_MODE_ALT0<br />#define GPIO_MODE_nXBREQGPIO_MODE_ALT0<br />#define GPIO_MODE_nXDACKGPIO_MODE_ALT0<br />#define GPIO_MODE_nXDREQGPIO_MODE_ALT0<br />#define GPIO_MODE_LENDGPIO_MODE_ALT0<br />#define GPIO_MODE_VCLKGPIO_MODE_ALT0<br />#define GPIO_MODE_VLINEGPIO_MODE_ALT0<br />#define GPIO_MODE_VFRAMEGPIO_MODE_ALT0<br />#define GPIO_MODE_VMGPIO_MODE_ALT0<br />#define GPIO_MODE_LCDVFGPIO_MODE_ALT0<br />#define GPIO_MODE_VDGPIO_MODE_ALT0<br />#define GPIO_MODE_IICSDAGPIO_MODE_ALT0<br />#define GPIO_MODE_IICSCLGPIO_MODE_ALT0<br />#define GPIO_MODE_SPICLKGPIO_MODE_ALT0<br />#define GPIO_MODE_SPIMOSIGPIO_MODE_ALT0<br />#define GPIO_MODE_SPIMISOGPIO_MODE_ALT0<br />#define GPIO_MODE_SDDATGPIO_MODE_ALT0<br />#define GPIO_MODE_SDCMDGPIO_MODE_ALT0<br />#define GPIO_MODE_SDCLKGPIO_MODE_ALT0<br />#define GPIO_MODE_I2SSDOGPIO_MODE_ALT0<br />#define GPIO_MODE_I2SSDIGPIO_MODE_ALT0<br />#define GPIO_MODE_CDCLKGPIO_MODE_ALT0<br />#define GPIO_MODE_I2SSCLKGPIO_MODE_ALT0<br />#define GPIO_MODE_I2SLRCKGPIO_MODE_ALT0<br />#define GPIO_MODE_I2SSDI_ABNORMALGPIO_MODE_ALT1<br />#define GPIO_MODE_nSSGPIO_MODE_ALT1<br />#define GPIO_MODE_EINTGPIO_MODE_ALT0<br />#define GPIO_MODE_nYPONGPIO_MODE_ALT1<br />#define GPIO_MODE_YMONGPIO_MODE_ALT1<br />#define GPIO_MODE_nXPONGPIO_MODE_ALT1<br />#define GPIO_MODE_XMONGPIO_MODE_ALT1<br />#define GPIO_MODE_UARTGPIO_MODE_ALT0<br />#define GPIO_MODE_TCLK_ABNORMALGPIO_MODE_ALT1<br />#define GPIO_MODE_SPICLK_ABNORMALGPIO_MODE_ALT1<br />#define GPIO_MODE_SPIMOSI_ABNORMALGPIO_MODE_ALT1<br />#define GPIO_MODE_SPIMISO_ABNORMALGPIO_MODE_ALT1<br />#define GPIO_MODE_LCD_PWRDNGPIO_MODE_ALT1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.