初始化寄存器集的一个方法
1 struct iomux { 2 volatile unsigned int unnames[23]; 3 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00; /* offset 0x5c */ 4 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO01; 5 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO02; 6 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03; 7 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO04; 8 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO05; 9 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO06; 10 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO07; 11 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO08; 12 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO09; 13 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_UART1_TX_DATA; 14 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_UART1_RX_DATA; 15 volatile unsigned int IOMUXC_SW_MUX_CTL_PAD_UART1_CTS_B; 16 }; 17 18 struct imx6ull_gpio { 19 volatile unsigned int dr; 20 volatile unsigned int gdir; 21 volatile unsigned int psr; 22 volatile unsigned int icr1; 23 volatile unsigned int icr2; 24 volatile unsigned int imr; 25 volatile unsigned int isr; 26 volatile unsigned int edge_sel; 27 };
像这样,我们可以将基地址相同且间隔有规律的一些寄存器放入一个结构体内,这样我们用结构体定义一个基地址就可以初始化其他寄存器的值,一个个的去 ioremap 了,当然这些连续的寄存器往往都服务于一个外设,分别为同一个外设的不同功能。
比如,我们就可以设置 struct imx6ull_gpio *gpio5 ,这样我们就可以进行一次 ioremap ,然后初始化其他相关寄存器了

浙公网安备 33010602011771号