iTop-4418的GPIO初始化配置

iTop-4418的GPIO初始化配置文件位于kernel/arch/arm/plat-s5p4418/topeet/include/cfg_gpio.h,每个GPIO脚通过5组在头文件kernel/arch/arm/plat-s5p4418/topeet/include/cfg_type.h中的宏定义的或运算组合实现配置。

同时,在uBoot代码仓库u-boot/board/s5p4418/drone2/include/cfg_gpio.h中,也有格式相同的、用于GPIO配置的头文件。

第一组:PAD_MODE_XXX,用于设置GPIO为对应模式(复用功能/输入/输出/中断)。

第二组:PAD_FUNC_ALT[0:3],用于配置GPIO的复用功能。

第三组:PAD_LEVEL_XXX,用于配置GPIO输出电平或中断条件。

第四组:PAD_PULL_XX,用于配置输入模式的内部上拉或者下拉。

第五组:PAD_STRENGTH_[0..3],用于设置GPIO的驱动能力。

第一组:PAD_MODE_XXX

用于设置GPIO为对应模式,可选参数包括:

PAD_MODE_ALT配置GPIO引脚使用S5P4418手册定义的复用功能,此时GPIO引脚的功能选择由第二组宏定义选择。

PAD_MODE_IN配置GPIO引脚为输入模式。

PAD_MODE_OUT配置GPIO引脚为输出模式。

PAD_MODE_INT配置GPIO引脚为中断模式。

/* gpio mode, altfunction, gpio in/out or interrput */
enum {
    PAD_MODE_ALT    = (0 << PAD_MODE_SHIFT),
    PAD_MODE_IN     = (1 << PAD_MODE_SHIFT),
    PAD_MODE_OUT    = (2 << PAD_MODE_SHIFT),
    PAD_MODE_INT    = (3 << PAD_MODE_SHIFT),
};

第二组:PAD_FUNC_ALT[0:3]

用于配置GPIO的复用功能。这些复用功能由S5P4418手册I/O Function Description一节定义。可选参数包括:

PAD_FUNC_ALT0配置引脚使用手册定义的Alternate Function 0

PAD_FUNC_ALT1配置引脚使用手册定义的Alternate Function 1

PAD_FUNC_ALT2配置引脚使用手册定义的Alternate Function 2

PAD_FUNC_ALT3配置引脚使用手册定义的Alternate Function 3

/* gpio altfunction, refer to NX_GPIO_PADFUNC in nx_gpio.h */
enum {
    PAD_FUNC_ALT0   = (0 << PAD_FUNC_SHIFT),
    PAD_FUNC_ALT1   = (1 << PAD_FUNC_SHIFT),
    PAD_FUNC_ALT2   = (2 << PAD_FUNC_SHIFT),
    PAD_FUNC_ALT3   = (3 << PAD_FUNC_SHIFT),
};

第三组:PAD_LEVEL_XXX

用于配置GPIO输出电平或中断条件。可选参数包括:

PAD_LEVEL_LOW输出低电平或低电平中断,Alive GPIO使用异步中断。

PAD_LEVEL_HIGH输出高电平或高电平中断,Alive GPIO使用异步中断。

PAD_LEVEL_FALLINGEDGE下降沿中断,Alive GPIO使用异步中断。

PAD_LEVEL_RISINGEDGE上升沿中断,Alive GPIO使用异步中断。

PAD_LEVEL_LOW_SYNC同步低电平中断,适用于Alive GPIO,普通GPIO不支持。

PAD_LEVEL_HIGH_SYNC同步高电平中断,适用于Alive GPIO,普通GPIO不支持。

PAD_LEVEL_BOTHEDGE下降沿-上升沿中断,Alive GPIO不支持。

PAD_LEVEL_ALTGPIO使用复用功能。

/* ouput level or interrupt detect mode, refer to NX_GPIO_INTMODE in nx_gpio.h */
enum {
    PAD_LEVEL_LOW         = (0 << PAD_LEVEL_SHIFT),     /* if alive, async lowlevel */
    PAD_LEVEL_HIGH        = (1 << PAD_LEVEL_SHIFT),     /* if alive, async highlevel */
    PAD_LEVEL_FALLINGEDGE = (2 << PAD_LEVEL_SHIFT),     /* if alive, async fallingedge */
    PAD_LEVEL_RISINGEDGE  = (3 << PAD_LEVEL_SHIFT),     /* if alive, async eisingedge */
    PAD_LEVEL_LOW_SYNC    = (4 << PAD_LEVEL_SHIFT),     /* if gpio , not support */
    PAD_LEVEL_HIGH_SYNC   = (5 << PAD_LEVEL_SHIFT),     /* if gpio , not support */
    PAD_LEVEL_BOTHEDGE    = (4 << PAD_LEVEL_SHIFT),     /* if alive, not support */
    PAD_LEVEL_ALT         = (6 << PAD_LEVEL_SHIFT),     /* if pad function is alt, not set */
};

第四组:PAD_PULL_XX

用于配置输入模式的内部上拉或者下拉。可选参数包括:

PAD_PULL_DN下拉。

PAD_PULL_UP上拉。

PAD_PULL_OFF无。

enum {
    PAD_PULL_DN     = (0 << PAD_PULLUP_SHIFT),          /* Do not support Alive-GPIO */
    PAD_PULL_UP     = (1 << PAD_PULLUP_SHIFT),
    PAD_PULL_OFF    = (2 << PAD_PULLUP_SHIFT),
};

第五组:PAD_STRENGTH_[0..3]

用于设置GPIO的驱动能力。可选参数为PAD_STRENGTH_0PAD_STRENGTH_3四个等级。

enum {
    PAD_STRENGTH_0 = (0 << PAD_STRENGTH_SHIFT),
    PAD_STRENGTH_1 = (1 << PAD_STRENGTH_SHIFT),
    PAD_STRENGTH_2 = (2 << PAD_STRENGTH_SHIFT),
    PAD_STRENGTH_3 = (3 << PAD_STRENGTH_SHIFT),
};
it
除非特别注明,本页内容采用以下授权方式: Creative Commons Attribution-ShareAlike 3.0 License