U-Boot中OMAP3的IO操作
以蜂鸣器为例,蜂鸣器控制端口,GP131/MMC2_CMD
首先需要将MMC2_CMD/GP131配置为GPIO端口:
board/omap3/beagle/beagle.h文件:
210 MUX_VAL(CP(MMC2_CMD), (IDIS | PTD | EN | M4)) /*GPIO_131*/\
移植代码中,所有引脚都以第一功能命名。
IDIS——禁止输入
PTD——下拉
EN——激活下拉
M4——IO功能
然后在board/omap3/beagle/beagle.c文件中添加爱如下代码:
unsigned int *gpio5_base = (unsigned int *)OMAP34XX_GPIO5_BASE;
writel(~GPIO3, gpio5_base + OFFS(GPIO_OE)); //
writel(GPIO3, gpio5_base + OFFS(GPIO_SETDATAOUT)); //
udelay(100000);
writel(GPIO3, gpio5_base + OFFS(GPIO_CLEARDATAOUT));
|
GPIO3和gpio5_base的由来:
32个IO一组,131=32*4 + 3,所以得到GP131在GPIO5组。
131 - 32*4 = 3,所以得到GPIO3
编译U-Boot,将会听到蜂鸣器名叫一声。
include/asm/arch/omap3.h
/* OMAP3 GPIO registers */
#define OMAP34XX_GPIO1_BASE 0x48310000
#define OMAP34XX_GPIO2_BASE 0x49050000
#define OMAP34XX_GPIO3_BASE 0x49052000
#define OMAP34XX_GPIO4_BASE 0x49054000
#define OMAP34XX_GPIO5_BASE 0x49056000
#define OMAP34XX_GPIO6_BASE 0x49058000
阅读(452) | 评论(0) | 转发(0) |