U-Boot配置GPIO问题 - AM5708/28 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 205|回复: 1

[已解决] U-Boot配置GPIO问题

[复制链接]

25

主题

315

帖子

2579

积分

创龙

Rank: 8Rank: 8

积分
2579
发表于 2020-1-7 17:08:44 | 显示全部楼层 |阅读模式
客户问题

现在需要解决在系统启动过程中24个输出口状态不固定的问题,使在系统启动过程中数字输出端口的状态稳定为高电平或是低电平;按现在的硬件设计需要做到开机过程中所有的输出指示灯不亮,即输出要求为高电平。请问应该如何处理呢?
我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励0 , 目前已有1人回答
最近访问 头像模式 列表模式
回复

使用道具 举报

25

主题

315

帖子

2579

积分

创龙

Rank: 8Rank: 8

积分
2579
 楼主| 发表于 2020-1-7 17:15:43 | 显示全部楼层
解决办法

       一般情况下,客户在设备树配置文件中对GPIO进行配置,是需要在linux 系统起来后,GPIO 驱动加载时才生效,加载时间随机;
      如果想要的上电过程就对配置好GPIO,比如从 uboot阶段 就开始就稳定输出状态,可以参考如下方法进行配置:
1.  根据底板原理图确定需要用的GPIO引脚



2.  查询《AM572x Sitara Processor Technical Reference Manual (Rev. J)》手册,确定对应引脚的默认模式,并将其配置为GPIO模式:




3.  配置对应IO的GPIO_OE和GPIO_SETDATAOUT寄存器输出对应电平






在 board/ti/am57xx/board.c 中 的 spl_start_uboot 函数中添加对相应 GPIO 寄存器的配置

+#define AM572X_GPIO7_BASE 0x48051000
+#define AM572X_GPIO_OE_OFF 0x134
+#define AM572X_GPIO_SETDATA_OUT_OFF 0x194

int spl_start_uboot(void)
{
+        u32 reg_val;
+
+        /* SOM-TL5728 led1: gpio7_7 */
+        reg_val = __raw_readl(AM572X_GPIO7_BASE + AM572X_GPIO_OE_OFF);
+        reg_val &= ~(BIT(7));
+        __raw_writel(reg_val, AM572X_GPIO7_BASE + AM572X_GPIO_OE_OFF);
+
+        reg_val = __raw_readl(AM572X_GPIO7_BASE + AM572X_GPIO_SETDATA_OUT_OFF);
+        reg_val|= BIT(7);
+        __raw_writel(reg_val, AM572X_GPIO7_BASE + AM572X_GPIO_SETDATA_OUT_OFF);


小工具:U-Boot下可以用md指令读取寄存器的电平状态




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则  回帖提醒

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号-1  

GMT+8, 2020-1-24 17:18 , Processed in 0.103063 second(s), 35 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表