uboot设置GPIO默认输出

最近由于项目需要,开始用海思的Hi3518ev200平台,做一个扫二维码的设备;产品要求刚加电时,一些IO口必须立即置为要求的电平状态,否则产品可能不正常。这就要求在刚进入uboot时就必须置为要求状态,如果等到内核启动了为时已晚。

从这个平台uboot的启动流程可知,它的初始化要从uboot源码目录下 board/hi3518ev200/board.c开始,所以从这个文件里设置好电平状态即可。

知道了从那启动,那么下面就着手写代码了。要设置一个GPIO口的输出,需要正确设置引脚复用状态,引脚输入输出状态,然后再置引脚电平就可以了,我们这里需要设置gpio7_6和gpio0_1为高电平输出,即输出1。下面记录下是怎么做的

阅读datasheet“Hi3518EV20X/Hi3516CV200经济型HD IP Camera Soc用户指南”,了解相应的寄存器:

一、找到引脚复用寄存器使命召唤,并找到要用到的gpio的对应寄存器



       

二,找到GPIO 寄存器对应的基地址及功能寄存器


三  写代码,如下

void gpio_muxctrl_config(unsigned long muxctrl_reg, unsigned int value)
{
unsigned long base;

	base	= IO_CONFIG_REG_BASE+muxctrl_reg;
	__raw_writel(value, base);  
}

void gpio_dir_config(unsigned long gpio_base, unsigned char gpio_offset, unsigned char flag)
{
int value;
unsigned long base;

	base	= gpio_base+GPIO_DIR;		//direction reg offset addr is 0x400
	value = __raw_readl(base);  
	if(flag)
	{
		value |= (1 << gpio_offset);
	}
	else
	{
		value &= ~(1 << gpio_offset);
	}
	__raw_writel(value, base);  
}
void gpio_output_set(unsigned long gpio_base, unsigned char gpio_offset, int value)
{
unsigned long base = gpio_base + (1 << (gpio_offset + 2));		/* PADDR[9:2]分别对应 GPIO_DATA[7:0]*/
unsigned long  l;  
unsigned long flags;  
  
    l = (__raw_readl(base) & (~(1 << gpio_offset))) | (!!value << gpio_offset);  
    __raw_writel(l, base);  

}

完整的代码在这里,大家可以参考

Hi3518ev200在uboot下设置gpio默认电平


欢迎交流 QQ:243691732 

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值