嵌入式大作业_第1页
嵌入式大作业_第2页
嵌入式大作业_第3页
嵌入式大作业_第4页
嵌入式大作业_第5页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2015 嵌入式大作业一、叙述JTAG接口在嵌入式开发中的作用。JTAG是一种国际标准测试协议主要用于芯片内部测试,JTAG接口的主要作用如下所述:它最初用来对电路和芯片进行边界扫描测定,它的基本原理是在器件内部定义一个测试是访问口( Test AccessPort),通过JTAG专用的测试工具对器件内部节点进行测 试。通过电路的边界扫描测试技术,用具有边界扫描功能的芯片构成的印制板电路, 可通过相应的测试设备检测芯 片功能,检测电路连接的正确性同时检测它是否有预定的 逻辑功能,从而对这块印制电路进行故障检测和故障定 位。JTAG接口可以对目标板进行测试,还可以对目标板系统 的存储单元编程,经

2、常通过 JTAG接口直接烧写嵌入式系 统Flash存储器。JTAG的引脚定义1. TCK为TAP提供一个独立基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。2. TMS用来控制TAP状态机的转换,通过TMS新号可以控制 TAP在不同的状态间转换,TMS信号在TCK信号的上升沿 有效。3. TDI是数据输入的接口,所有输入到特定寄存器的数据都 要通过TDI 一位一位串行输出。4. TDO 数据输出的接口所有从特定寄存器输出的数据都要 通过TDC一位一位串行输出。5. TRST可以用来对TAPController 进行复位,该信号线可 选,TMS也可以对其进行复位。6. VTREF接

3、口信号电平参考电压一般直接接V(supply),这个可以用来确定 ARM勺JTAG的接口逻辑电平。7. RTCK可选项,由目标端反馈给仿真器的时钟信号,用来 同步TCK信号的产生,不使用时直接接地。8. System Reset 可选项,与目标板上的系统复位信号相 连,可以直接对目标系统复位, 同时可以检测目标系统的 复位情况, 为了防止误触发应在目标端加上适当的上位电 阻。9. USER IN用户自定义输入,可以接到一个IO口上,用 来接收上位机的控制。10. USER OUT用户自定义输出,可以接到一个IO口 上,用来向上位机反馈一个状态。二、叙述嵌入式平台的搭建过程,以 linux 为例

4、。1) 一 : 建立宿主机开发环境 建立交叉编译的环境即在宿主机上安装与开发板相 应的编译器及库函数, 以便能够在宿主机上应用开发工具编 译在目标板上运行的 Linux 引导程序,内核,文件系统和应 用程序交叉编译:在特殊的环境下,把嵌入式程序代码编译成不同的CPU所对应的机器代码。开发时使用宿主机上的交叉编译, 汇编及链接工具形成可执 行的二进制代码(该代码只能在开发板上执行) ,然后下载 到开发板上运行2) 下载和安装 arm-Linux-gcc 编译工具链下载最新的 arm-Linux-gcc 并解压至当前目录下 在系统配置文件 profile 中设置环境变量 方法:直接在 profil

5、e 文件中加入搜索路径 立即使新的环境变量生效: 运行 source 命令,检查是否将路径加入到 path ,测试是否 安装成功,编译程序,测试交叉工具链3) 配置超级终端 minicom minicom 是宿主机与目标板进行通 信的终端:在宿主机 Linux 终端中输入: minicom-s 或输 入 minicom 然后按 ctrl+A+O 对超级终端 minicom 进行配 置,再选择串口并配置串口,最后保存即可4) 建立数据共享服务:NFS服务是Linux系统中经常使用的 数据文件共享服务5) 编译嵌入式系统内核: 内核配置, 建立依存关系, 建立内 核6) 制作文件系统 三、给出现今

6、有哪些用于嵌入式开发的芯片名称,他们分是哪些公司的产品?体系结构是什么?1) 基于32位RISC微处理器芯片的 ARM7系列,ARM9系列, ARM9E系列,ARM10E系列都是 ARM公司的产品,arm9以 上的体系结构是哈佛总线体系结构以下的是冯。 诺依曼体 系。2) TI公司的DSP处理器内核是哈佛总线体系结构。3) PowerPC公司的芯片,基于 RISC结构,是哈佛总线体系 结构。4) MIPS公司的芯片,基于RISC结构,是哈佛总线体系结构。四、现今较流行的嵌入式操作系统有哪些?VxWorkLinux卩 c/os- nwindows CEAndroid五、PXA270嵌入式开发板的

7、接口有哪些?全双工异步串行口和硬件流控制串行口, 10M 标准以太网接 口 10M/100M标准以太网接口, USB接口,红外通讯口,音频 接口,存储卡口,视频和触摸屏接口摄像头接口,RTC时钟接口,调试接口,下载接口,电源接口。六、请写出 Nor Flash 和 Nand Flash 的区别。Flash是一种非易失闪存,它具有和ROMH样的掉电后数据不会丢失的特性。它主要分为Nor Flash 和Nand Flash他们的主要区别如下所示:Nor FlashNand Flash接口时序同SRA M容易使用地址/数据线复用,数据位较 窄读取速度较快读取速度较慢檫除速度慢,以64-128KB的块

8、为 单位檫除速度快,以8-32KB的块为单位写入速度慢(因为 般要檫除)写入速度快随机存取速度较快,支持XIP(execute In Place ,芯片内执 行),适用于代码存储。在嵌入式 系统中,常用于存放引导程序、 根文件等顺序读取速度较快,随机存取 速度慢,适用于数据存储(如 大容量的多媒体应用)。在嵌 入式系统中,常用于存放用户 文件系统等单片容量较小为 1-32MB单片容量较大为 8-128MB,提高了单元密度最大檫写次数为10万次最大檫写次数为100万次七、冯。诺依曼架构与哈佛架构的区别。他们的主要区别是计算机的存储结构和总线连接形式不同。在冯诺依曼的结构中,存储器内部的数据存储空

9、间和程序存储空间是合在一起的,他们共享存储器总线,即数据和指 令在同一条总线上通过时分复用的方式进行传输,这种结构 在高速运行时, 不能达到同时取指令和取操作数的目的从而 形成传输过程的瓶颈。在哈佛总线体系结构的芯片内部, 数据存储空间和程序存储 空间是分开的, 所以哈佛总线体系在指令执行时可以同时存 取指令(来自程序空间)和取操作数(来自数据空间) ,因 此具有更高的执行效率, 修正的哈佛总线结构还可以在程序 空间和数据空间之间相互传送数据。 (目前大多数 DSP 和ARM9以上的嵌入式系统微处理器内核都采用哈佛总线体系 结构而ARM7采用的则是冯诺依曼结构)八、单周期 3 级流水的情况下,

10、第 10 个指令周期时,第几 条指令执行结束?三级流水读取指令过程: 取指从存储器装载一条指令 译码识别将要被执行的指令 执行处理指令并将结果写会寄存器故ARMS在执行第1条指令的同时对第 2条指令进行译码, 并将第3条指令从存储器中取出。 所以,ARM7流水线只有在 取第 10 条指令时,第 7 条指令才算完成执行。九、下面是 linux 下的一个简单的设备驱动程序, 写出 linux 设备驱动常用的数据结构,同时阅读下面代码,请给出测试 程序中的每条语句加以注释。设备驱动程序 Keypad.c 的源代码:#include <linux/module.h>/最基本的文件,支持动态

11、添加和卸载模块。 Hello World 驱动要这一个文件就可以了 #include <linux/fs.h> /包含了文件操作相关 struct 的定义,例如大名鼎鼎的 struct file_operations#include <linux/init.h> / 初始化头文件#include <linux/poll.h>/ 轮询文件#include <linux/types.h>/ 对一些特殊类型的定义,例如 dev_t, off_t, pid_t. 其实这些类型大部分都是 unsigned int 型通过一连串的 typedef 变过来的,

12、只是为了方便阅读。 #include <linux/rtc.h>/ 可以在芯片上产生周期性的中断 #include <linux/delay.h>/ 延时头文件#include <asm/hardware.h>/ 与处理器相关的硬件#include <asm/delay.h>/ 延时头文件#include <asm/uaccess.h>/ 与处理器相关的入口#define LEDnKEY_MAJOR 251#define KEYPAD_NAME "X-Hyper250 Keypad"#define KEYPAD_V

13、ERSION "Version 0.1"#define EXT_KEY_CS EXT_PORT2 / 宏定义#define EXT_LED_CS EXT_PORT3/ 宏定义#define LED_SHOW 10/ 宏定义/*EXT_KEY_CS为向外部LED进行数值设定,它定义在其它头 文件里 */void led_off_on()int i;EXT_LED_CS = 0xff;for(i =0 ; i<8;+i)EXT_LED_CS = (1 << i) & Oxff);/*点亮相应 LED灯*/udelay(30000); 调用udelay函

14、数来延迟EXT_LED_CS = 0xff;/*应用程序用open来打开设备文件,实际上调用驱动的lednkey_open ()函数 */int lednkey_open(struct inode *inode, struct file*filp)/打开设备文件MOD_INC_USE_COUNT模块自身通过MOD_INC_USE_COU宏来管理自己被使用的计数。return (0);/* success */int lednkey_release(struct inode *inode, struct file*filp) / 释放设备文件led_off_on();MOD_DEC_USE_CO

15、UNT;return (0);ssize_t lednkey_read(struct file *filp, char size_t length, loff_t *f_pos)/ 按键读取函数 unsigned short BottonStatus;unsigned char Bottontmp = 0;int i;BottonStatus = ( EXT_KEY_CS & 0xff ); /*/for(i = 0 ; i < 8; +i)if( (BottonStatus >> i) & 1) = 0 )Bottontmp = (i+1);/* 判断哪个按

16、键按下 */ copy_to_user( Putbuf, &Bottontmp, length);/*Putbuf,按键状态将数据从内核态拷贝到用户态,这是由定义在 <asm/uaccess.h>里的特殊函数实现在不同的空间传输任意字节的数据*/return length;ssize_t lednkey_write(struct file *filp, const char*Getbuf, size_t length, loff_t *f_pos)int num;unsigned char UsrWantLed;copy_from_user( &UsrWantLed

17、, Getbuf, length);/* 将 数据从用户态拷贝到核心态 */num = ( (UsrWantLed) & 0xff );/* 确定哪一位要进行 设定 */EXT_LED_CS =(1 << (num-1);/ 点亮相应 LED丁return (0);int lednkey_ioctl(struct inode *inode, struct file*filp, unsigned int cmd,unsigned longarg)/lednkey_ioctl 接口函数, 主要用于获取或者改变正 在运行的设备参数switch(cmd)case LED_SHOW:

18、 if(arg) led_off_on();break; return 0;/* 以下这些驱动函数是与用户的应用程序里对设备文件操 作的函数相对应的 */struct file_operations lednkey_fops = open: lednkey_open, read: lednkey_read, write: lednkey_write, ioctl: lednkey_ioctl, release: lednkey_release,;初始static int _init xhyper250_keypad_init(void) /化设备函数,在函数名之前加上这个属性之后,系统会在初

19、始化完成之后丢弃初始化函数,收回它所占用的内存,以减 小内核所占用的内存空间,它只对内建的驱动起作用 int result;result = register_chrdev(LEDnKEY_MAJOR, "lednkey", &lednkey_fops);/ 向操作系统注册一个主号为 251,设备名 为 "lednkey" ,并传递设备驱动程序的指针为 lednkey_fops (全局变量) ,其中 register_chrdev ( )是内核提供的 函数,作用是完成注册新的字符设备printf("%s %s initialized.n

20、",KEYPAD_NAME, KEYPAD_VERSION);led_off_on();return 0;static void _exit xhyper250_keypad_exit(void)/* 向操 作系统卸载设备函数 */unregister_chrdev( LEDnKEY_MAJOR, "lednkey" );led_off_on();module_init(xhyper250_keypad_init); 设备函数 module_exit(xhyper250_keypad_exit); 备函数 */ 测试文件的源代码如下: #include<st

21、dio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h>/ 显式声明初始化/ 显式声明卸载设#define LED_SHOW 10/ 宏定义int fd;static char *dev_name = "/dev/keypad"int main(int argc, char *argv)int data = 0, pre_data;fd = open( de

22、v_name , O_RDWR );/使用函数 open 打开设备 keypadif( !(fd >=0) )printf("%s file open failedn", dev_name );exit(-1);/ 打开失败,显示出错信息printf("nkeypad App : press the push button see show led - Exit Ctrl-C n",dev_name);/ 打开成功,提 示用户输入ioctl(fd,LED_SHOW,1);循环显示 LED,看 LED是否正常while(1)dopre_data =

23、data;read( fd, (char * )&data, sizeof(data) );data = (data & 0xff);while(data = 0);if( pre_data = 0) printf("Write %d LEDn",data);write( fd, (const char *)&data,sizeof(constchar )data) ); /采用忙等待方式扫描用户输入,传递给write 函数close( fd );/使用函数 close 关闭设备 keypadreturn 0;常用数据结构:(1)file_opera

24、tions 结构:struct file_operations struct module *owner;loff_t (*llseek) (struct file *, loff_t, int);ssize_t (*read) (struct file *, char _user *,size_t, loff_t *);ssize_t (*write) (struct file *, const char _user*, size_t, loff_t *);ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned

25、long, loff_t);ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);int (*readdir) (struct file *, void *, filldir_t);unsigned int (*poll) (struct file *, structpoll_table_struct *);int (*ioctl) (struct inode *, struct file *,unsigned int, unsigned long);long (*unlocked_

26、ioctl) (struct file *, unsignedint, unsigned long);long (*compat_ioctl) (struct file *, unsigned int, unsigned long);int (*mmap) (struct file *, struct vm_area_struct*);int (*open) (struct inode *, struct file *);int (*flush) (struct file *, fl_owner_t id);int (*release) (struct inode *, struct file

27、 *);int (*fsync) (struct file *, struct dentry *, intdatasync);int (*aio_fsync) (struct kiocb *, int datasync);int (*fasync) (int, struct file *, int);int (*lock) (struct file *, int, struct file_lock*);ssize_t (*sendpage) (struct file *, struct page *,int, size_t, loff_t *, int);unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);int (*check_flags)(int);int (*flock) (struct file *, int, struct file_lock*);ssize_t (*splice_write)(structpipe_inodenfo*,struct file *, loff_t *, size_t, unsigned int);ssize

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论