天天看點

mstar 平台I2C 配置

晶片的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 為例

mstar 平台I2C 配置

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