我是靠谱客的博主 英俊蓝天,最近开发中收集的这篇文章主要介绍uboot中添加hi35xx的GPIO设置,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

以hi3531d为例,具体地址可以参考手册:ReleaseDoc/zh/00.hardware/chip中Hi3531DV100 H.265编解码处理器用户指南.pdf,内容中的14.外围设备–14.5 GPIO:(在文件下载中有上传实例文件,可参考 board(GPIO设置).c)

  1. 在uboot中的路径可以安排在u-boot-2010.06/board/hi35xx/中。
  2. 设置寄存器偏移含义:
#define GPIO_DIR     0x400  
#define GPIO_IS      0x404  
#define GPIO_IBE     0x408  
#define GPIO_IEV     0x40C  
#define GPIO_IE      0x410  
#define GPIO_RIS     0x414  
#define GPIO_MIS     0x418  
#define GPIO_IC      0x41C 
#define IO_CONFIG_REG_BASE   0x120F0000 
#define GPIO7_REG_BASE       0x121C0000
  1. 定义方向
//  定义复用
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);  
}
  1. 定义输入输出
// 设置输入输出
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);  
}
  1. 定义输出高低
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);  

}
  1. 调用实验
void set_gameport_gpio_default_level(void)
{
	gpio_muxctrl_config(0xF8,1);			//set gpio7_6 muxctrl_reg62,muxctrl_reg62 offset addr is 0xF8,please look datasheet
	gpio_dir_config(GPIO7_REG_BASE,6,1);		//set gpio7_6 be output   1代表输出,0代表输入
	gpio_output_set(GPIO7_REG_BASE,6,1);
}	

注:0xF8为偏移地址

最后

以上就是英俊蓝天为你收集整理的uboot中添加hi35xx的GPIO设置的全部内容,希望文章能够帮你解决uboot中添加hi35xx的GPIO设置所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部