嵌入式大作业_第1页
嵌入式大作业_第2页
嵌入式大作业_第3页
嵌入式大作业_第4页
嵌入式大作业_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

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

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

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

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

5、ath,测试是否安装成功,编译程序,测试交叉工具链3) 配置超级终端minicom minicom是宿主机与目标板进行通信的终端:在宿主机Linux终端中输入:minicom-s或输入minicom然后按ctrl+A+O对超级终端minicom进行配置,再选择串口并配置串口,最后保存即可4) 建立数据共享服务:NFS服务是Linux系统中经常使用的数据文件共享服务5) 编译嵌入式系统内核:内核配置,建立依存关系,建立内核6) 制作文件系统三、给出现今有哪些用于嵌入式开发的芯片名称,他们分是哪些公司的产品?体系结构是什么?1) 基于32位RISC微处理器芯片的ARM7系列,ARM9系列,ARM9

6、E系列,ARM10E系列都是ARM公司的产品,arm9以上的体系结构是哈佛总线体系结构以下的是冯。诺依曼体系。2) TI公司的DSP处理器内核是哈佛总线体系结构。3) PowerPC公司的芯片,基于RISC结构,是哈佛总线体系结构。 4) MIPS公司的芯片,基于RISC结构,是哈佛总线体系结构。 四、现今较流行的嵌入式操作系统有哪些?1 VxWork2 Linux3 C/OS-4 windows CE5 Android五、PXA270嵌入式开发板的接口有哪些?全双工异步串行口和硬件流控制串行口,10M标准以太网接口10M/100M标准以太网接口,USB接口,红外通讯口,音频接口,存储卡口,视

7、频和触摸屏接口摄像头接口,RTC时钟接口,调试接口,下载接口,电源接口。六、请写出Nor Flash和 Nand Flash的区别。Flash是一种非易失闪存,它具有和ROM一样的掉电后数据不会丢失的特性。它主要分为Nor Flash和 Nand Flash。他们的主要区别如下所示: Nor Flash Nand Flash接口时序同SRAM,容易使用地址/数据线复用,数据位较窄读取速度较快读取速度较慢檫除速度慢,以64-128KB的块为单位檫除速度快,以8-32KB的块为单位写入速度慢(因为一般要檫除)写入速度快随机存取速度较快,支持XIP(eXecute In Place,芯片内执行),适

8、用于代码存储。在嵌入式系统中,常用于存放引导程序、根文件等顺序读取速度较快,随机存取速度慢,适用于数据存储(如大容量的多媒体应用)。在嵌入式系统中,常用于存放用户文件系统等单片容量较小为1-32MB单片容量较大为8-128MB,提高了单元密度最大檫写次数为10万次最大檫写次数为100万次七、冯。诺依曼架构与哈佛架构的区别。他们的主要区别是计算机的存储结构和总线连接形式不同。在冯·诺依曼的结构中,存储器内部的数据存储空间和程序存储空间是合在一起的,他们共享存储器总线,即数据和指令在同一条总线上通过时分复用的方式进行传输,这种结构在高速运行时,不能达到同时取指令和取操作数的目的从而形成传

9、输过程的瓶颈。在哈佛总线体系结构的芯片内部,数据存储空间和程序存储空间是分开的,所以哈佛总线体系在指令执行时可以同时存取指令(来自程序空间)和取操作数(来自数据空间),因此具有更高的执行效率,修正的哈佛总线结构还可以在程序空间和数据空间之间相互传送数据。(目前大多数DSP和ARM9以上的嵌入式系统微处理器内核都采用哈佛总线体系结构而ARM7采用的则是冯·诺依曼结构) 8、 单周期3级流水的情况下,第10个指令周期时,第几条指令执行结束?三级流水读取指令过程: 取指从存储器装载一条指令 译码识别将要被执行的指令 执行处理指令并将结果写会寄存器故ARM正在执行第1条指令的同时对第2条指令

10、进行译码,并将第3条指令从存储器中取出。所以,ARM7流水线只有在取第10条指令时,第7条指令才算完成执行。九、下面是linux下的一个简单的设备驱动程序,写出linux设备驱动常用的数据结构,同时阅读下面代码,请给出测试程序中的每条语句加以注释。设备驱动程序Keypad.c的源代码:#include <linux/module.h>/最基本的文件,支持动态添加和卸载模块。Hello World驱动要这一个文件就可以了#include <linux/fs.h> /包含了文件操作相关struct的定义,例如大名鼎鼎的struct file_operations#inclu

11、de <linux/init.h> /初始化头文件#include <linux/poll.h>/轮询文件#include <linux/types.h>/对一些特殊类型的定义,例如dev_t, off_t, pid_t.其实这些类型大部分都是unsigned int型通过一连串的typedef变过来的,只是为了方便阅读。#include <linux/rtc.h>/可以在芯片上产生周期性的中断#include <linux/delay.h>/延时头文件#include <asm/hardware.h>/与处理器相关的硬件

12、#include <asm/delay.h>/延时头文件#include <asm/uaccess.h>/与处理器相关的入口#define LEDnKEY_MAJOR 251#define KEYPAD_NAME "X-Hyper250 Keypad"#define KEYPAD_VERSION "Version 0.1"#define EXT_KEY_CS EXT_PORT2 /宏定义#define EXT_LED_CS EXT_PORT3/宏定义#define LED_SHOW 10/宏定义/*EXT_KEY_CS 为向外部L

13、ED进行数值设定,它定义在其它头文件里*/void led_off_on() int i;EXT_LED_CS = 0xff;for(i =0 ; i<8;+i)EXT_LED_CS = (1 << i) & 0xff);/*点亮相应LED灯*/udelay(30000);/调用udelay函数来延迟EXT_LED_CS = 0xff;/*应用程序用open来打开设备文件,实际上调用驱动的lednkey_open()函数*/ int lednkey_open(struct inode *inode, struct file *filp)/打开设备文件MOD_INC_U

14、SE_COUNT;/模块自身通过 MOD_INC_USE_COUNT,宏来管理自己被使用的计数。return (0); /* success */ int lednkey_release(struct inode *inode, struct file *filp) /释放设备文件led_off_on();MOD_DEC_USE_COUNT;return (0);ssize_t lednkey_read(struct file *filp, char *Putbuf, size_t length, loff_t *f_pos)/按键读取函数unsigned short BottonStatus

15、; 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);/*判断哪个按键按下*/copy_to_user( Putbuf, &Bottontmp, length);/*将数据从内核态拷贝到用户态,这是由定义在<asm/uaccess.h>里的特殊函数实现在不同的空间传输任意字节的数据*/

16、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, Getbuf, length);/*将数据从用户态拷贝到核心态*/num = ( (UsrWantLed) & 0xff );/*确定哪一位要进行设定*/EXT_LED_CS = (1 << (num-1);/点亮相应LED灯return

17、 (0);int lednkey_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,unsigned long arg)/lednkey_ioctl 接口函数,主要用于获取或者改变正在运行的设备参数switch(cmd)case LED_SHOW: if(arg)led_off_on(); break;return 0;/*以下这些驱动函数是与用户的应用程序里对设备文件操作的函数相对应的*/struct file_operations lednkey_fops = open: lednkey_open,read: le

18、dnkey_read,write: lednkey_write,ioctl: lednkey_ioctl,release: lednkey_release,;static int _init xhyper250_keypad_init(void) /初始化设备函数,在函数名之前加上这个属性之后,系统会在初始化完成之后丢弃初始化函数,收回它所占用的内存,以减小内核所占用的内存空间,它只对内建的驱动起作用int result;result = register_chrdev(LEDnKEY_MAJOR, "lednkey", &lednkey_fops);/向操作系统注

19、册一个主号为251,设备名为"lednkey",并传递设备驱动程序的指针为lednkey_fops(全局变量) ,其中register_chrdev ( )是内核提供的函数,作用是完成注册新的字符设备printf("%s %s initialized.n",KEYPAD_NAME, KEYPAD_VERSION);led_off_on();return 0;static void _exit xhyper250_keypad_exit(void)/*向操作系统卸载设备函数*/ unregister_chrdev( LEDnKEY_MAJOR, "

20、;lednkey" ); led_off_on();module_init(xhyper250_keypad_init); /显式声明初始化设备函数module_exit(xhyper250_keypad_exit); /显式声明卸载设备函数*/ 测试文件的源代码如下:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#define LED_S

21、HOW 10/宏定义int fd;static char *dev_name = "/dev/keypad"int main(int argc, char *argv)int data = 0, pre_data;fd = open( dev_name , O_RDWR );/使用函数open打开设备keypad if( !(fd >=0) )printf("%s file open failedn", dev_name );exit(-1);/打开失败,显示出错信息printf("nkeypad App : press the push

22、 button see show led - Exit Ctrl-C n",dev_name);/打开成功,提示用户输入 ioctl(fd,LED_SHOW,1);/循环显示LED,看LED是否正常while(1)dopre_data = 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 *)&am

23、p;data, sizeof(const char )data) ); /采用忙等待方式扫描用户输入,传递给write函数 close( fd );/使用函数close关闭设备keypadreturn 0;常用数据结构:(1)file_operations 结构: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 (*w

24、rite) (struct file *, const char _user *, size_t, loff_t *); ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned 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)

25、(struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_ioctl) (struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_s

26、truct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *, fl_owner_t id); int (*release) (struct inode *, struct file *); int (*fsync) (struct file *, struct dentry *, int datasync); int (*aio_fsync) (struct kiocb *, int datasync); int (*fasync) (int, struct file *, int); i

27、nt (*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)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); ssize_t (*splice_read)(struct file *, loff_t *, s

温馨提示

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

评论

0/150

提交评论