Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1226959
  • 博文数量: 479
  • 博客积分: 12240
  • 博客等级: 上将
  • 技术积分: 4999
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 17:12
文章分类

全部博文(479)

文章存档

2014年(1)

2013年(1)

2012年(1)

2011年(95)

2010年(177)

2009年(167)

2008年(16)

2007年(21)

分类: LINUX

2009-11-17 15:08:43

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



阅读(1708) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~