晶片的pin 腳可以用作不同的功能,總結一句就是外設進行狀态和資料交換。
最常用的是作為GPIO,設定為輸出模式時,通過高低電平來控制一些外圍設定;
// 如LED,屏的電源,背光的開關,功放的靜音等等。 除了控制設定之外,還需要和外部設定傳輸資料。
pin 作為GPIO 設定為IN時,是擷取外設的高低來判斷外設的狀态,最常用的一些source 通道的detect,及一些wakeup 功能。
pin 作為SAR 口,擷取ADC值; // 如按鍵闆,參照“mstar平台SAR口使用”
pin 作為UART / SPI /SD 口;
pin 作為I2C 口;
一般來說,大部分有特殊功能的Pin腳其實都可以作為GPIO使用,但是當我們将其配置成特殊功能後,就不能同時配為GPIO。
是以當我們發現某個Pin腳我們想将其配成GPIO後,卻沒辦法改變它的高低狀态時,就要留意一下該Pin腳是否已經被誤配為特殊功能了,這時就需要我們先DISABLE 掉這個特殊功能之後,才能設定成GPIO及其狀态設定。每個chip有對應一個init GPIO配置,BD_MST{$Board}.h, drvpadconf.c.
标準GPIO口配置
總共時鐘狀态
#define GPIO_NONE 0 // Not GPIO pin (default)
#define GPIO_IN 1 // GPI
#define GPIO_OUT_LOW 2 // GPO output low
#define GPIO_OUT_HIGH 3 // GPO output high
特殊口配置
uart 口配置
特殊功能的pin 需要在BD_MST{$Board}.h 中配置。
#define DISABLE 0
#define ENABLE 1
#define CONFIG_PADMUX_MODE0 0x00
#define CONFIG_PADMUX_MODE1 0x01
#define CONFIG_PADMUX_MODE2 0x02
#define CONFIG_PADMUX_MODE3 0x03
#define CONFIG_PADMUX_MODE4 0x04
#define CONFIG_PADMUX_MODE5 0x05
#define CONFIG_PADMUX_MODE6 0x06
#define CONFIG_PADMUX_MODE7 0x07
#define CONFIG_PADMUX_MODE8 0x08
#define CONFIG_PADMUX_MODE9 0x09
#define CONFIG_PADMUX_UNKNOWN 0xFF
例如UART3,UART4 配置成了CONFIG_PADMUX_MODE1,其實也是ENABLE。接着在drvPadConf.c 檔案中設定寄存器值。
針對UART3,UART4 設定了寄存器0x1e05 的bit2,0x1e04的bit6 。這樣就配置完成了。
I2C 總線功能配置
下面我們以I2C2 為例
I2C 的clk,data 腳分别連接配接在AD16,AC16 兩個pin 上面。比較特殊的是這兩個pin 都是有複用功能的。是以我們需要disable掉其特殊功能LED/tcon。在BD_MST160D_AH_M7221.h中我們可以關閉LED功能
#define PADS_LED_MODE DISABLE
Tcon[11],Tcon[12], 未找到,屬于備用的暫不處理
寄存器設定
#ifdef PADS_LED_MODE
#if (PADS_LED_MODE != CONFIG_PADMUX_UNKNOWN)
#define _CONFIG_LED_MODE ((PADS_LED_MODE == ENABLE) ? BIT4 : 0)
_RVM1(0x1eb4, _CONFIG_LED_MODE, BIT4),
#if (PADS_LED_MODE == DISABLE)
_MEMMAP_PM_,
//reg_seperate_wol_led_is_gpio
_RVM1(0x0e39, BIT7, BIT7),
//reg_led_is_gpio
_RVM1(0x0e39, 0, BIT0),
_MEMMAP_nonPM_,
#endif
#endif
disable 掉特殊功能之後,開始配置I2C 功能
//SWI2C
#define PAD_DDCR_CK_IS_GPIO GPIO_IN //I2C-SCL (EEPROM)
#define PAD_DDCR_DA_IS_GPIO GPIO_IN //I2CM-SDA (EEPROM)
#define PAD_TGPIO0_IS_GPIO GPIO_IN //TUNER_SCL
#define PAD_TGPIO1_IS_GPIO GPIO_IN //TUNER_SDA