第4季3:Hi3518e的sensor接口引脚复用设置(load3518e文件)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

在第2、3季的内容中,在板载系统的配置脚本即/etc/profile文件中,都有如下这句代码:

./load3518e -i -sensor ar0130 -osmem 32 -total 64

在第4季1:将AR0130摄像头更换为OV9712摄像头中提到,Hi3518E_SDK_V1.0.3.0/mpp/ko目录下的load3518e文件是一个shell脚本,主要用来设置Hi3518E的引脚中那些与sensor有关的引脚的复用。

本文将详细分析 load3518e 这个脚本文件的内容,尤其是设置引脚复用的方法。

一、分析load3518e文件

(1)首先定义了一些变量:

#!/bin/shSNS_TYPE=ar0230             # sensor type
mem_total=64;               # 64M, total mem
mem_start=0x80000000;       # phy mem start
os_mem_size=32;             # 32M, os mem
mmz_start=0x82000000;       # mmz start addr
mmz_size=32M;               # 32M, mmz size

(2)然后定义了一些函数:

(3)然后通过判断一些变量的值来决定是否执行(2)中的某些函数:

 

重点关注一下insert_ko函数,当在板载系统的/etc/profile文件中执行load3518e脚本时,如果参数中有“ -i ”选项,则“for arg in $@”这段代码会将变量b_arg_insmod赋值为1,则会执行insert_ko函数。

我们来看一下insert_ko函数中的内容,主要完成一些驱动模块即ko文件的安装。在安装这些驱动模块的时候,会显示一些安装信息,这也就是为啥执行load3518e脚本时,SCRT上显示诸多信息的原因,“==== Your input Sensor type is ar0130 ====”也是在这函数中打印的。

insert_ko()
{# sys configsys_config;# driver loadinsmod mmz.ko mmz=anonymous,0,$mmz_start,$mmz_size anony=1 || report_errorinsmod hi_media.koinsmod hi3518e_base.koinsmod hi3518e_sys.ko vi_vpss_online=$b_arg_online sensor=$SNS_TYPEif [[ $? -ne 0 ]]; then exit;fi  insmod hi3518e_tde.koinsmod hi3518e_region.koinsmod hi3518e_vgs.koinsert_isp;insmod hi3518e_viu.ko detect_err_frame=10;insmod hi3518e_vpss.ko rfr_frame_comp=1;insmod hi3518e_vou.ko#insmod hi3518e_vou.ko transparentTransmit=1 #enable transparentTransmitinsmod hifb.ko video="hifb:vram0_size:1620"     # default palinsmod hi3518e_rc.koinsmod hi3518e_venc.ko insmod hi3518e_chnl.ko ChnlLowPower=1insmod hi3518e_h264e.koinsmod hi3518e_jpege.koinsmod hi3518e_ive.ko save_power=0;
#	insmod hi3518e_ive.ko	insmod extdrv/sensor_i2c.koecho "==== Your input Sensor type is $SNS_TYPE ===="insmod extdrv/pwm.koinsmod extdrv/piris.ko#insert_sns > /dev/null
#重点关注一些insert_sns这个函数insert_snsinsert_audioinsmod hi_mipi.koecho "==== Your input Sensor type is $SNS_TYPE ===="
}

(4)在insert_ko函数的内容中,我们重点关注一下insert_sns这个函数,因为它涉及到本文主题即如何设置引脚复用的内容。insert_sns函数的内容如下所示。从中可知,该函数会根据sensor的不同型号来执行不同的操作,这里的操作主要是设置Hi3518e和sensor之间的引脚复用,其中用到了海思自己的设置工具himm,比如“himm 0x200f0040 0x2”表示将地址为0x200f0040的寄存器的值设置为0x2。

insert_sns()
{case $SNS_TYPE inar0130|9m034)himm 0x200f0040 0x2;                            # I2C0_SCLhimm 0x200f0044 0x2;                            # I2C0_SDA#cmos pinmuxhimm 0x200f007c 0x1;                            # VI_DATA13himm 0x200f0080 0x1;                            # VI_DATA10himm 0x200f0084 0x1;                            # VI_DATA12himm 0x200f0088 0x1;                            # VI_DATA11himm 0x200f008c 0x2;                            # VI_VShimm 0x200f0090 0x2;                            # VI_HShimm 0x200f0094 0x1;                            # VI_DATA9himm 0x2003002c 0xb4001;                        # sensor unreset, clk 27MHz, VI 99MHz;;#省略部分代码ov9712)himm 0x200f0040 0x2;                            # I2C0_SCLhimm 0x200f0044 0x2;                            # I2C0_SDA#cmos pinmuxhimm 0x200f007c 0x1;                            # VI_DATA13himm 0x200f0080 0x1;                            # VI_DATA10himm 0x200f0084 0x1;                            # VI_DATA12himm 0x200f0088 0x1;                            # VI_DATA11himm 0x200f008c 0x2;                            # VI_VShimm 0x200f0090 0x2;                            # VI_HShimm 0x200f0094 0x1;                            # VI_DATA9himm 0x2003002c 0xc4001;                        # sensor unreset, clk 24MHz, VI 99MHz;;#省略部分代码
}

二、设置引脚复用的方法

引脚资源是有限的,需要根据情况进行引脚复用,即一个引脚可能具备诸多功能,需要根据实际情况来设置这个引脚的功能。如何设置引脚复用呢?不同的SoC可能有不同的设置方法,比如S5PV210使用专门的控制寄存器来配置某个引脚的作用,其实Hi3518E也是如此。

一般设置引脚复用的步骤如下。

(1)查看引脚定义框图

比如在《Hi3518EV20X/Hi3516CV200经济型HD IP Camera Soc用户指南》文档中,大概第37页的地方有如下的内容。这图是这样理解的:物理引脚A1的功能(之一)是VSS;物理引脚C4的功能(之一)是JTAG_TDO……

接下来我们看一下Hi3518E的开发板原理图。比如在开发板原理图中查看引脚C4,如下所示。该引脚功能之一是JTAG_TDO,其他的功能有SPI1_SDO、I2C1_SDA、GPIO7_0。

(2)找到配置这个引脚功能的设置寄存器

比如我们想配置C4引脚的复用功能。我们在《Hi3518EV20X/Hi3516CV200经济型HD IP Camera Soc用户指南》文档中搜索“C4”或者“JTAG_TDO”,找到相关的描述如下,可以得知设置C4这个引脚复用功能的寄存器是PADCTRL_REG67 。

我们在文档中搜索“PADCTRL_REG67 ”,可以得知这个寄存器的地址(基址+偏移地址)为0x200F_090C。

 

 我们点击该寄存器的页码,可以得知这个寄存器的bit设置含义。

(3)利用himm工具设置寄存器的值

在步骤(2)中,我们得知设置C4这个引脚复用功能的寄存器的信息,包括寄存器的名字、寄存器的地址、寄存器的bit含义。根据这些信息,我们可以利用海思提供的himm命令(这个命令已经部署在根文件系统中,直接使用即可)对寄存器进行赋值操作,进而配置这个引脚起什么作用。

比如load3518e文件中的insert_sns函数里,就利用himm命令对相关引脚的复用功能进行了配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS游戏开发 几个有利工具

2019独角兽企业重金招聘Python工程师标准>>> iOS游戏开发 几个有利工具 本文介绍的是iOS游戏开发 几个有利工具,为友们介绍几款开发工具,游戏爱好者记住了!先来看内容。 AD: iOS游戏开发 几个有利工具是本文要介绍的内…

关于editor网页编辑器ueditor.config.js 配置图片上传

最近公司项目在做一个门户网站,其中新闻和简介等部分使用到了ueditor编辑器,但是上级明确指示需要图片上传这个功能,这时却发现图片上传功能不能正常使用,上传时一直报错,网上收了好几个处理办法,都说的不够…

[歪谈]拽一个贵人出来给你当炮架子

[歪谈]拽一个贵人出来给你"当炮架子" 我们在古装神话剧中经常会听到某个“先知”对前来算命的人说:你会在某某时刻遇到你的贵人。而这个贵人会在事业上助你一臂之力。 这里有个问题:贵人到底是什么?我们怎样去寻找我们的贵人。 前几…

【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理

1 LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr SS:SP!!! 2 MOV ES:[BX2], SS ;将当前SS(栈的基地址)寄存器值存放至当前任务控制块的2,3内存单元 3 …

J2SE J2EE J2ME的区别

J2SE J2EE J2ME的区别 J2SE J2EE J2ME的区别多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用。 Java2平台包括…

配置ssh

首先肯定要先更改ssh的端口号,比如:8899 以及安全选项 gedit /etc/ssh/sshd_configPermitRootLogin noMaxAuthTries 3AllowUsers ***** 更改Port参数 Port8899 然后更改services文件ssh端口号 gedit /etc/services 更改对应ssh的tcp和udp端口 都为8899 s…

第6季1:H264编码原理与基本概念

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 参考博客 (1)H264 编码基本原理_ByteSaid的博客-CSDN博客_h264编码原理 (2)H264 编码简介_mydear_11000的博客-CSDN博客 (3)什么是I帧…

pureMVC简单示例及其原理讲解四(Controller层)

本节将讲述pureMVC示例中的Controller层。 Controller层有以下文件组成: AddUserCommand.asDeleteUserCommand.asModelPrepCommand.asViewPrepCommand.asStartupCommand.asAddUserCommand 。顾名思义,它是添加用户命令。让我们首先看看代码。 Addusercom…

ActiveMQ学习笔记(2)——JMS消息模型

2019独角兽企业重金招聘Python工程师标准>>> 1.1 JMS模型简介 JMS支持两种消息通信模型: 点对点模型(Point to Point,P2P)发布者/订阅者模型(publish/subscribe, pub/sub)P2P模型中,Sender把一…

C# 图片盖章功能实现,支持拖拽-旋转-放缩-保存

实现图片盖章功能,在图片上点击,增加“图章”小图片,可以拖拽“图章”到任意位置,也可以点击图章右下角园框,令图片跟着鼠标旋转和放缩。 操作方法:1.点击增加“图章”2.选中移动图标3.点中右下角放缩旋转图…

《Effective Objective-C 2.0》1、熟悉Objective-C

该系列是《Effective Objective-C 2.0——编写高质量iOS与OS X代码的52个有效方法》的读书笔记。 第一条:了解Objective-C语言的起源 同C类似,Objective-C也是C语言进行面相对象化的扩展。二者存在一个根本性的区别: C是一种基于函数调用的语…

图像编码的必要性、可行性、技术分类、评价指标

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 1、图像编码的必要性 图像的数据量非常大,为了有效地传输和存储图像,有必要压缩图像的数据量。随着现代通信技术的发展,要求传输的图像信息的种类和数据量愈来愈大。若不…

【一周一算法】算法2:邻居好说话——冒泡排序

【啊哈!算法】    简化版的桶排序不仅仅有上一节所遗留的问题,更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请2100000001个变量,也就是说要写成int a[2100000001]。…

用TextPaint来绘制文字

TextPaint是paint的子类,用它可以很方便的进行文字的绘制,一般情况下遇到绘制文字的需求时,我们一般用TextPaint所提供的方法。开始学习如何绘制文字之前,我们必须要先了解下android中文字是怎么绘制到屏幕上的,文字的…

第二季4:初始化MPP系统(step12)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 前言 本文将详细介绍博文第二季3:sample_venc.c的整体分析中提及的“初始化MPP系统”。 MPP系统的初始化包括以下步骤: 配置VB:HI_MPI_VB_SetConf函数 初始化…

存储过程——介绍(一)

由于工作缘故,在工作中用到储存过程较少,在下班之余出于对学习的热情,以下分享下学习储存过程心得,往大牛们指点迷津: 储存过程:官方解释为可以将一些预先编译的sql语句集中起来有sql service数据库服务器来…

《人月神话》观后感

1.外科手术队伍 项目经理在项目的初期必须清楚的估计项目的人月运作模式(时间、人力在项目各阶段的分配),例如什么时候需要出什么样成果,决定了什么时候需要什么样的人加入项目,这是项目经理的责任。 2.贵族专制…

第二季5:配置视频捕获模块(step3:VI模块)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 前言 本文将详细介绍博文第二季3:sample_venc.c的整体分析提及的“配置视频捕获模块”。 分析方法上,我们首先介绍VI模块相关的宽动态、设备、通道等概念,然后…

git 代理设置

git 代理设置: git config --global http.proxy http://proxy.com:8080git config --global https.proxy http://proxy.com:8080git config --global http.sslverify false 转载于:https://www.cnblogs.com/lizhanglong/p/3642152.html

简化Java中的异常处理

为什么80%的码农都做不了架构师?>>> #1. 不需要Checked异常 Java中的Checked异常,可以说有弊无利,它除了能带来一系列的麻烦,能干的事情Unchecked异常都能干。 ##1.1. 代码污染 首先,当一个方法声明抛出一…