Exynos4412设备驱动和测试程序设计 .docx
- 格式:docx
- 大小:60.13 KB
- 文档页数:11
Exynos4412特殊功能寄存器的封装特殊功能寄存器英文缩写为SFR,是Special Function Register的缩写。
特殊功能寄存器是芯片功能实现的载体,可以理解为芯片厂商留给嵌入式开发人员的控制接口,用于控制片内外设,比如GPIO、UART、ADC等等。
每个片内外设都有对应的特殊寄存器,用于存放相应功能部件的控制命令,数据或者状态。
对于特殊功能寄存器的封装是每个嵌入式工程师都应该掌握的。
那如何封装芯片的特殊控制寄存器呢,我们以Exynos4412的GPIO片内外设为例说明。
(1)查看Exynos4412芯片的地址映射表查看Exynos4412芯片手册的第二章2 Memory Map(30页)地址映射表,我们可以看到Exynos4412的特殊功能寄存器绝大部分都放到了0x1000_0000到0x1400_0000的地址空间。
(2)查看GPIO模块的寄存器描述表查看芯片手册,第四章4 General Purpose Input/Output (GPIO) Control,4.3节(41页)寄存器描述,有完整的GPIO模块的寄存器描述表。
我们可以得到GPIO模块的基地址和每个寄存器相对基地址的偏移量。
GPIO模块的基地址是:0x1140_0000GPA0组的配置寄存器GPA0CON的地址是: 基地址 + 偏移量0x11400000 + 0x0000 = 0x11400000(3)封装寄存器的第一种方式是直接一对一封装例如:#define GPA0CON (*(volatile unsigned int *)0x11400000)分析:这是一个宏定义,宏定义在预处理阶段进行直接替换,为了方便理解,我们可以先把volatile去掉,关键是理解(*(unsigned int *)0x11400000)。
0x11400000 是一个16进制的数据,前面用(unsigned int *)修饰,表示把0x11400000强制转换成了一个指向unsigned int型变量的指针。
ASTM E1444-01磁粉检验方法1适用范围1.1本标准规定了用于铁磁材料表面或近表面缺陷检验的磁粉检验方法的最低要求。
ASTM E709可同时作为本标准的教程。
注:本标准代替MIL-STD-1949。
1.2 磁粉检验方法用于检验铁磁材料表面或近表面的裂纹、折叠、褶皱、夹杂物和其他不连续性缺陷。
磁粉检验方法可适用于原材料、钢坯、精加工和半精加工材料、焊缝以及在役零件。
磁粉检验方法不适用于非铁磁性金属和合金例如奥氏体不锈钢。
附加说明参见附录X5。
1.3 本标准的各项内容均需在供应商和工程认可机构之间确认,或符合工程认可机构的特殊规定。
1.4 本标准的宗旨不在于论述与使用有关的安全问题。
使用本标准者在使用前有责任制订相应的安全防护与健康措施,并制定有关范围的管理条例。
2参考文献2.1下列文献通过引用而共同构成为本标准条文:2.2ASTM标准:A275/A275M 钢锻件的磁粉检验方法;A456 大型曲轴锻件的磁粉检验规范;D1966 生亚麻油渣滓检测方法;E543 无损检测评测机构准则;E709 磁粉检验方法指南;E1316 无损检测术语;2.3ASNT文件:SNT-TC-1A 推荐标准——“无损检测人员资格与评定”;ANSI/ASNT CP-189 无损检测人员的资格与鉴定标准;2.4 汽车工程师协会(SAE)-AMS 文件:AMS 2300 特种航空优等钢纯净度的磁粉检验规程;AMS 2301 航空优等钢纯净度的磁粉检验规程;AMS 2303 航空优等马氏体不锈钢纯净度的磁粉检验规程;AMS 2641 车辆磁粉检验;AMS 3040 非荧光干法磁粉;AMS 3041 油基湿法非荧光成品磁粉;AMS 3042 非荧光湿法用干磁粉;AMS 3043 非荧光油基湿法气溶胶式包装磁粉;AMS 3044 荧光湿法用干磁粉;AMS 3045 荧光油基湿法成品磁粉;AMS 3046 荧光油基湿法气溶胶式包装磁粉;AMS 5062 钢、低碳钢棒材、锻件、管材、薄板、带钢及板材(最大碳含量为0.25)AMS 5355 熔模铸件;AMS I-83387 磁性橡胶检验规程;sAS4792 水基磁粉检验用水软化剂;AS 5282 磁粉检验用环形工具钢标准试块;AS 5371 磁粉检验用槽型标准试片;2.5 联邦政府标准:FED-STD-313材料安全数据表的准备及提交;2.6 军用文件:MIL-STD-1907 材料、工件及焊缝完善性的液体渗透及磁粉检验;MIL-STD-2175 铸件检验及分级;A-A-59230 磁粉悬浮液的检验;2.7 OSHA文件:29CFR 1910.1200 传染性危害;2.8 ANSI文件:ANSI/NCSL Z540-1 校准实验室及测量测试设备的通用要求;2.9 ISO文件:ISO 10012-1 测量设备的质量保证要求;2.10 AIA文件:NAS410 无损检测人员资格及认证;2.11 国防部文件—-除非特别说明,国防部采用的文件的版本列在国防部出版的DoDISS (国防部规格及标准索引)上有说明。
Linux下高清MIPI差分摄像头的软硬件设计李宇成;葛正中【摘要】以Exynos4412为处理平台,设计了以MIPI差分接口摄像头为采集端的高清系统硬件,进行了MIPI接口和DVP接口信号完整性仿真,设计了Linux下摄像头驱动程序,给出了软件架构的UML图.通过硬、软件调试和实验验证,成功实现Linux系统下的高清摄像系统.摄像头前端采集采用MIPI接口后,性能可达720p/60 fps,相比于传统DVP接口摄像头,不仅传输帧率提高1倍以上,而且运行稳定,信噪比大幅度提高.【期刊名称】《单片机与嵌入式系统应用》【年(卷),期】2016(016)009【总页数】6页(P35-40)【关键词】Exynos4412;MIPI差分摄像头驱动;信号完整性仿真【作者】李宇成;葛正中【作者单位】北方工业大学电气与控制学院,北京100144;北方工业大学电气与控制学院,北京100144【正文语种】中文【中图分类】TP277随着信息技术的高速发展,远程视频教学[1]、远程视频会议[2]、远程监控等与摄像头相关的应用越来越多,新一代的监控设备正在向高分辨率、小型化、低功耗、高稳定性的方向发展[3]。
随着互联网的普及和物联网概念的推广,多样化的用户定制设计逐渐成为监控市场的主流[4]。
市面的摄像头一般都做成模组,由镜头、滤镜、CMOS传感器、PCB板和加强筋组成,与应用处理器的接口有DVP和MIPI两种[5]。
目前,国内一般民用监控产品[6]大多低于200万像素,采用DVP接口[7],质量不稳定,且信噪比和抗干扰性较差。
笔者通过对市面上常见的并行接口摄像头进行研究和比较,实现了差分MIPI接口摄像头的视频监控解决方案。
目前,虽然有一些嵌入式Linux下摄像头设计的介绍论文[8],但都是关于DVP 接口摄像头的,缺乏嵌入式Linux下MIPI接口摄像头驱动设计与实现方面的公开论文和资料,个别网上资料也仅仅是点到为止,因此,给相关的设计和应用工作带来不便。
exynos 4412 Framebuffer驱动详解1,帧缓冲设备在Linux中也可以看做是一个完整的子系统,大体由fbmem.c和xxxfb.c(对应我们的s3cfb.c)组成。
向上给应用程序提供完善的设备文件操作接口(即对FrameBuffer设备进行read、write、ioctl等操作),接口在Linux提供的fbmem.c文件中实现;向下提供了硬件操作的接口,只是这些接口Linux并没有提供实现,因为这要根据具体的LCD控制器硬件进行设置,所以这就是我们要做的事情了(即s3c-fb.c 部分的实现)。
exynos 4412的驱动代码里,framebuffer主要代码在driver/video/,文件名是s3c-fb.cexynos 4412显示控制器可以控制0~5个windows,代码中分给它们分别编号win0,win1,win2......这里一个window就对应一个独立的驱动控制个体, 每个framebuffer有自己的一个FBI (fb_info)结构,显示控制器对应的抽象结构是s3c_fb结构体,window对应的抽象结构是s3c_fb_win结构体。
2. 数据结构及接口函数从帧缓冲设备驱动程序结构看,该驱动主要跟fb_info结构体有关,该结构体记录了帧缓冲设备的全部信息,包括设备的设置参数、状态以及对底层硬件操作的函数指针。
在Linux中,每一个帧缓冲设备都必须对应一个fb_info,fb_info在/linux/fb.h中的定义如下:(只列出重要的一些)[java]view plain copy1.struct fb_info {2.int node;3.int flags;4.struct fb_var_screeninfo var;/*LCD可变参数结构体*/5.struct fb_fix_screeninfo fix;/*LCD固定参数结构体*/6.struct fb_monspecs monspecs; /*LCD显示器标准*/7.struct work_struct queue; /*帧缓冲事件队列*/8.struct fb_pixmap pixmap; /*图像硬件 mapper*/9.struct fb_pixmap sprite; /*光标硬件 mapper*/10.struct fb_cmap cmap; /*当前的颜色表*/11.struct fb_videomode *mode; /*当前的显示模式*/12.#ifdef CONFIG_FB_BACKLIGHT13.struct backlight_device *bl_dev;/*对应的背光设备*/14.struct mutex bl_curve_mutex;15.u8 bl_curve[FB_BACKLIGHT_LEVELS];/*背光调整*/16.#endif17.#ifdef CONFIG_FB_DEFERRED_IO18.struct delayed_work deferred_work;19.struct fb_deferred_io *fbdefio;20.#endif21.struct fb_ops *fbops; /*对底层硬件操作的函数指针*/22.struct device *device;23.struct device *dev; /*fb设备*/24.int class_flag;25.#ifdef CONFIG_FB_TILEBLITTING26.struct fb_tile_ops *tileops; /*图块Blitting*/27.#endif28.char __iomem *screen_base; /*虚拟基地址*/29.unsigned long screen_size; /*LCD IO映射的虚拟内存大小*/30.void *pseudo_palette; /*伪 16色颜色表*/31.#define FBINFO_STATE_RUNNING 032.#define FBINFO_STATE_SUSPENDED 133.u32 state; /*LCD的挂起或恢复状态*/34.void *fbcon_par;35.void *par;36.};其中,比较重要的成员有struct fb_var_screeninfo var、struct fb_fix_screeninfo fix和struct fb_ops*fbops,他们也都是结构体。
《Exynos4412设备驱动
及测试程序设计》实验报告
15281099刘梓麟
计算机科学与技术
2018年4月15日
一、实验目的
1.理解Text LCD设备在4412系统中的设备端口定义
2.学握用户程序借助于系统调用对Text LCD控制的原理
3.掌握TextLCD驱动程序设计的主要内容
4.完成TextLCD测试程序设计
二、实验原理
1.TextLCD驱动程序 1.1功能及原理
①定义Text LCD设备地址值。
012: ^define TEXTLCD.ADDRESS 0x05000010
013: ^define TEXTLCD_ADDRESS_RANGE 0x1000
②为了控制Text LCD,定义ioctlO函数中使用的命令参数。
③runCommand()按照时序,向Text LCD发送控制命令。
38行的数据为0x0100表示EN(enable)信号。
044: void writeCharacter(char ch)
045: {
046: unsigned short int data;
047: data 二ch & OxOOFF;
048: *textlcd_ioremap = 0x0400;
049: udelay(1000);
050: *textlcd_ioremap = data | 0x0500;
051: udelay(1000);
052: *textlcd_ioremap = data 0x0400;
053: udelay (1000);
054: }
④向Text LCD写显示数据。
第48行,RS为1,写数据寄存器;第50行,使能EN为1, 同时送出数据;第52行,EN变为0。
⑤控制Text LCD函数
56: clearDisplayO清屏,并把光标返回到HOME位置。
62:不改变DD RAM (显示)内容,只把光标放到Home的位置。
68:当读或写LCD数据时,要决定增加(I/D=l)或减少(1/0=0)光标位置,还要决定卷屏(S=l)或不卷屏(S=0) o
75:设置D显示文本,C显示光标,或C闪烁光标。
82:决定把画面(S/C=l)或光标(S/C=O)向右(R/Z=l)或向右(R/L=O)移动。
89:设置接口的数据传输长度为8比特(DL=1)或4比特(DL=O):设置显示行数为2行(21) 或者1行(N=0),并且把字符字体指定为5X10点阵(21)或者5X7点阵(F=0)。
当TextLCD模块连接电源后,需要50ms的复位时间,所以,向TextLCD发送命令,要在加电后等待一段时间(大于50ms)。
另外,当接口使用4位传输数据时,要先传送高位4位,再传送低4位。
103:指定显示存储器DDRam的地址。
110:读LCD模块内部忙标Busy Flag(BF)以及读取地址计数器对应的内容。
LCD模块执行
056: void clearDisplay(void)
062: void returnllomc(void)
068: void entryModeSet(int increase, int shift)
075: void displayOnOffControl(int display, int cursor, int blink)
082: void cursorOrDisplayshift(int serecnOrCursor, int rightOrLeft)
089: void setFunctionSet(int dataLcngth, int row, int font)
//096: void setCGRamAddress(int address)
103: void setDDRamAddress(int address)
110: void readBusyFlagAndAddrcss(int *pBusyFlag, int *pAddressCounter)
每个操作控制命令时需要一定的时间,所以当MCU发出一个操作控制命令后,可以通过读取BF的方式,提高传输效率。
当MCU读到BF为1时,需要等待;直到BF为0后,才发送下一个控制命令。
⑥initializeTextLcd()
136:接口传输数据的长度:8;显示线数:2;字符点阵:5X7o
137:把display设置为on,不显示光标,光标不闪烁。
139:读写一数据后,地址自动增加。
不滚屏显示。
2.TextLCD测试程序
2.1功能及原理
①打开设备文件
打开TextLcd设备驱动程序。
驱动程序的路径是“/dev/fpga_textlcd”。
Fd为设备文件
024: fd = open(〃/dev/fpga_textlccT, 0_WR0NLY); 标识符。
OJVRONLY表示以只写的形式打开。
②TextLCD初始化和关闭操作
015: ioctl(fd, TEXTLCD_INIT);
035: ioctl(fd, TEXTLCD_OFF);\
339
③ TextLCD 显示输出
028: ioctl (fd, TEXTLCD CLEAR); 029: ioctl (fd, TEXTLCD_LINE1);
030: write(fd, msgs[Oj, strlen(msgs[0])); 031: ioctl (fd, TEXTLCD_LINE2); 032: write (fd, msgs[1], strlen(msgs[l])); 28:清屏。
29-31:通过操作命令,设置Text LCD 显示格式。
32:使用write()函数输出显示字符串。
3・KeyPad 原理 M3 Deivce (DipSW Dot. OLED . etc.)
CS9
S4412 图2-3-1 M3楔块的keypad 和4412的连接关系
FPGA Chip 。
图2-3-2 M3模块的keypad 原理图。