DM36x IO口设置笔记

 内核是2.6.37.

1.在dm365.c文件中定义了dm365_pins结构体

 

static const struct mux_config dm365_pins[] = {

#ifdef CONFIG_DAVINCI_MUX

MUX_CFG(DM365, MMCSD0, 0,   24,     1,  0, false)

 

MUX_CFG(DM365, SD1_CLK, 0,   16,    3,  1, false)

MUX_CFG(DM365, SD1_CMD, 4,   30,    3,  1, false)

MUX_CFG(DM365, SD1_DATA3, 4,   28,    3,  1, false)

MUX_CFG(DM365, SD1_DATA2, 4,   26,    3,  1, false)

MUX_CFG(DM365, SD1_DATA1, 4,   24,    3,  1, false)

MUX_CFG(DM365, SD1_DATA0, 4,   22,    3,  1, false)

……

}

2.MUX_CFG宏定义是在arch\arm\mach-davinci\Mux.h中

 

#define MUX_CFG(soc, desc, muxreg, mode_offset, mode_mask, mux_mode, dbg)\

[soc##_##desc] = { \

.name =  #desc, \

.debug = dbg, \

.mux_reg_name = "PINMUX"#muxreg, \

.mux_reg = PINMUX(muxreg), \

.mask_offset = mode_offset, \

.mask = mode_mask, \

.mode = mux_mode, \

},

意思就是把引脚复用寄存器muxreg的第mode_offset位先与~mode_mask取与运算,再和mux_mode取或运算。具体的实现是在arch\arm\mach-davinci\Mux.c中实现的

3.具体寄存器操作实现代码在mux.c文件中的davinci_cfg_reg函数中。对davinci_soc_info操作。而davinci_soc_info中包含结构体const struct mux_config *pinmux_pins;其值就是结构体dm365_pins。具体赋值是在dm365.c文件中的static struct davinci_soc_info davinci_soc_info_dm365的结构体定义时进行的。

 

4.在dm365.c中通过调用davinci_cfg_reg函数实现对IO口的配置

从而完成了对复用寄存器的设置。

 

 

 

你可能感兴趣的:(dm36x,引脚复用)