ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:275.49KB ,
资源ID:5009387      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5009387.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式系统linux下触摸屏实验报告.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式系统linux下触摸屏实验报告.docx

1、嵌入式系统linux下触摸屏实验报告一 硬件平台 1、处理器:三星S3C2410,200MHZ2、内存:SDRAM,64M3、外存:NAND FLASH,64M4、LCD&触摸屏:SHARP,640480,TFT5、串口:RS232,RS485二处理器结构1、处理器核心 MMU,DCACHE,ICACHE,JTAG2、系统总线 SDRAM,FLASH,LCD,中断,USB3、外部总线 串口,USB,GPIO试验一:bootloader (ads、引导)1、熟悉ADS 1.2开发工具 创建、编译、下载、调试工程2、串口通讯 串口控制器初始化、收/发数据3、配置主机端的nfs服务器 配置主机端的n

2、fs服务器,以连接linux核心4、下载并运行linux核心 使用自己的串口程序下载并运行linux核心主要内容: 编写串口接收数据函数 编写串口发送数据函数 打印菜单,等待用户输入 下载并运行linux核心 配置主机的nfs服务器,与linux核心连接 其他部分代码从教师用机中拷贝 linux核心从教师机中拷贝主要步骤: 修改bootloader:菜单、串口收发、命令行; 使用ads1.2编译bootloader; 使用uarmjtag下载、调试bootloader; 使用axd查看变量、内存,单步跟踪; 配置超级终端,与bootloader通讯; 使用超级终端下载Linux核心映像; 启动

3、Linux核心运行,察看结果;(bootloader调试成功后再继续以下步骤) 主机重起到ubuntu,配置nfs,配置cutecom; 重新下载Linux核心映像,启动核心运行后,察看是否成功加载nfs上的root文件系统。需要补充的代码:接收串口数据并做相应处理while(1) 打印菜单并等待用户输入; switch(ch) /根据用户输入做相应处理 case 1: imgsize=xmodem_receive(char *)KERNEL_BASE, MAX_KERNEL_SIZE); if(imgsize=0) /下载出错; else /下载成功; break; case 3: nand

4、_read(unsigned char *)KERNEL_BASE, 0x00030000, 4*1024*1024); case 2: BootKernel(); /这里是不会返回的,否则出错; break; default: break; 打印菜单:Uart_puts(Menu:nr); Uart_puts(1.Load kernel via Xmodem;nr); Uart_puts(2.Boot linux; nr); Uart_puts(3.Load kernel from flash and boot; nr); Uart_puts(Make your choice.nr); do

5、 ch=Uart_getc(); while(ch!=1 & ch!=2 & ch!=3);串口读写:void Uart_putc(char c) while(!SERIAL_WRITE_READY(); (UTXH0) = (c); unsigned char Uart_getc( ) while(!SERIAL_CHAR_READY(); return URXH0; 设置Linux核心启动命令行char *linux_cmd=noinitrd init=/init root=/dev/nfs nfsroot=,tcp ip= console=ttySAC0;nfs服务器设置编辑/etc/e

6、xport文件:/home/arm_os/filesystem/rootfs 目标板ip(rw,sync)/home/arm_os/filesystem/rootfs 主机ip(rw,sync)启动nfs服务器:/etc/init.d/nfs-kernel-server restart测试nfs服务器:mount 主机ip:/home/arm_os/filesystem/rootfs /mnt 试验二:linux kernel (gcc、make)1、熟悉基本的linux命令 文件操作、文件编辑 串口工具、程序开发2、配置linux核心 make menuconfig3、交叉编译linux核心

7、 make zImage主要工作 熟悉基本的linux命令 配置linux核心 交叉编译linux核心 调试自己编译的核心 挂载nfs上的root(根目录) 编写一个小程序在目标板上运行主要步骤: 用root用户登录ubuntu (合理使用权限); 解压缩源码包到/home/下; 察看解压缩后的/home/arm_os目录:Linux核心、编译器、root等; 配置并测试nfs; 配置cutecom:115200,XModem,No line end; 配置核心:make menuconfig; 编译核心:make; 下载并运行核心,加载root文件系统; 重新设置cutecom为LF lin

8、e end; 熟悉基本的Linux命令; 编写一个小程序在目标板上运行,察看结果。 试验三:linux driver (uart)1、Linux驱动编程 基本接口 常用函数2、串口驱动 申请中断处理 串口数据读、写主要工作: 编写串口驱动初始化、释放函数; 编写串口驱动接收数据函数; 编写串口驱动发送数据函数; 编写串口驱动中断处理函数; 编写串口访问应用程序; 使用模块方式编译驱动; 使用模块方式调试驱动; 实现基本的串口数据收发。主要步骤: 填写函数:uart_init、uart_exit、uart_open、uart_ release,实现串口设备初始化、释放、打开、关闭; 填写函数:

9、irq_rev_uart、uart_write、uart_read,实现串口设备中断处理、读、写; 用模块方式编译Linux核心,生成uart.ko,启动目标板Linux核心,用insmod、rmmod等命令操作模块; 用printk打印调试串口驱动,包括中断相应,读写等; 编写应用程序:uart.c,实现打开串口设备、读写等,把主机端由comcute发过来的串口数据回传给主机; 将目标板上串口线连到串口1; 编译应用程序uart.c,实现和主机间的串口通讯。部分代码:串口设备初始化函数int ret;dev_t devno = MKDEV(uart_major, 0);if(uart_maj

10、or) ret = register_chrdev_region(devno, 1, uart);else ret = alloc_chrdev_region(&devno, 0, 1, uart); uart_major = MAJOR(devno);if(ret = UART_SIZE) return -EIO;if(*ppos + size UART_SIZE) size = UART_SIZE - *ppos;do char c; if(!loop_buffer_del(&readb, &c) copy_to_user(buf+i, &c, 1); i+; else schedule_

11、timeout(10); while(i = UART_SIZE) return -EIO;if(*ppos + size UART_SIZE) size = UART_SIZE - *ppos;copy_from_user(wmem, buf, size);for(i=0; isize; i+) while(!(_raw_readl(uart + S3C2410_UTRSTAT) & 0x4); _raw_writel(*(wmem + i), uart + S3C2410_UTXH); return size;串口访问应用程序#include #include int main() int

12、 uart_fd, i; char c; uart_fd = open(/dev/uart, O_RDWR); if(uart_fd 0) printf(Open device error!n); return -1; for(i=0; i50; i+) read(uart_fd, &c, 1); printf(%c, c); write(uart_fd, &c, 1); if(c = q) break; close(uart_fd); return 0; 试验四:linux driver (touchscreen)1、触摸屏驱动 初始化 坐标值2、触摸屏、图形系统协调工作 触摸屏校准 拨号键

13、盘LCD初始化初始化GPIO(通用输入/输出): rGPCUP=0xffffffff; rGPCCON=0xaaaaaaaa; rGPDUP=0xffffffff; rGPDCON=0xaaaaaaaa; 该步骤主要配置CPU引脚的输入输出方向和工作模式 初始化LCD控制寄存器: rLCDCON1=0x00000178; /配置成为16位颜色,TFT(真彩)模式; rLCDCON2= 0x2077c241; /行数为480; rLCDCON3=0x017A7F0F; /行宽为640;设置 LCD在内存中的起始地址: rLCDADDR1=0x1904b000; /FrameBuffer的首地址;

14、 rLCDADDR2=0x00096000; / FrameBuffer的尾地址; rLCDADDR3= 0x00000300; /虚屏行宽为640; rLCDCON1 += 1; /使能LCD,开始显示;Linux framebuffer设备操作fb_fd = open(/dev/fb0, O_RDWR);if(fb_fd 0) printf(Open fb device error!n); return -1; LCD_MEM_BASE = mmap(NULL, SCREEN_WIDTH*SCREEN_HEIGHT*2, PROT_READ|PROT_WRITE, MAP_SHARED,

15、fb_fd, 0);memset(LCD_MEM_BASE, 0, SCREEN_WIDTH*SCREEN_HEIGHT*2);画像素函数void drawpixel(int x, int y, unsigned short color_mask) unsigned int bits = (SCREEN_WIDTH*y+x)*BITS_PER_PIXEL; unsigned short *tmp; tmp = (unsigned short *)LCD_MEM_BASE+bits/16; /计算像素在内存中的地址; *tmp = color_mask; /给象素填充颜色; return ;画线

16、函数void drawline(int x, int y, int length, int flag, unsigned short color_mask) int i; if (flag=0)/画横线; for (i=0;ilength;i+) drawpixel(x+i,y,color_mask); if (flag=1)/画竖线; ? 画字符函数void draw_char (int x,int y, /字符在屏幕上的坐标 unsigned char c, /字符值 unsigned short color_mask) /字符的颜色主要工作: 编写触摸屏驱动初始化、释放函数; 编写触摸屏

17、驱动读取数据函数; 编写触摸屏驱动中断处理函数; 使用模块方式调试驱动; 编写触摸屏读取应用程序; 编写简单图形系统绘制应用程序,绘制一个数字键盘; 实现基本的触摸键盘程序。主要步骤: 填写函数:ts_init、ts_exit、ts_open、ts_ release,实现触摸屏设备初始化、释放、打开、关闭; 填写函数:ts_isr、ts_read,实现触摸屏读、中断处理 用模块方式编译Linux核心,生成ts_ads7843.ko,启动目标板Linux核心,用insmod、rmmod等操作模块; 用printk打印调试触摸屏驱动,包括中断相应,读等; 编写应用程序:ts_ads7843.c,实

18、现打开触摸屏设备、读等; 在ts_ads7843.c 中增加简单图形系统绘制函数,绘制数字键盘,对触摸屏设备数据进行校正,实现触摸键盘的功能。部分代码:触摸屏设备初始化函数int ret;dev_t devno = MKDEV(ts_major, 0);if(ts_major) ret = register_chrdev_region(devno, 1, “ts_ads7843);else ret = alloc_chrdev_region(&devno, 0, 1, ts_ads7843 ); ts_major = MAJOR(devno);if(ret 0) printk(Register

19、 chrdev region failed!n); return ret; cdev_init(&ts_cdev, &ts_fops);ret = cdev_add(&ts_cdev, devno, 1);if(ret) printk(Add c device failed!n); return ret; spi0_base = ioremap(S3C2410_PA_SPI,0x20);device_init();init_waitqueue_head(&wq);ret = request_irq(IRQ_EINT5, ts_isr, IRQF_DISABLED, ts_ads7843, NU

20、LL);if(ret) printk(Request irq failed!n); return ret; TS_OPEN_INT(); ts_time = jiffies;printk(Ts_ads7843 module init.n);return 0;触摸屏设备释放函数free_irq(IRQ_EINT5, NULL); cdev_del(&ts_cdev); unregister_chrdev_region(MKDEV(ts_major,0),1);printk(Ts_ads7843 module exit.n);触摸屏设备中断处理函数if(jiffies = sizeof(struc

21、t ts_ret) interruptible_sleep_on(&wq); ts_ret.x = x; ts_ret.y = y; ts_ret.pressure = PEN_DOWN; copy_to_user(buffer, (char *)&ts_ret, sizeof(struct ts_ret); count -= sizeof(struct ts_ret); size += sizeof(struct ts_ret); return size;触摸屏访问应用程序#include #include int main() int ts_fd, i; char c; struct ts

22、_ret ts_ret; ts_fd = open(/dev/ts_ads7843, O_RDWR); if(ts_fd 0) printf(Open ts device error!n); return -1; for(i=0; i50; i+) if(read(ts_fd, &ts_ret, sizeof(struct ts_ret) if(ts_ret.x Xmax) ts_ret.x = Xmax; if(ts_ret.y Ymax) ts_ret.y = Ymax; x = (ts_ret.x-Xmin) * SCREEN_WIDTH/(Xmax-Xmin); y = (ts_ret

23、.y-Ymin) * SCREEN_HEIGHT/(Ymax-Ymin); close(ts_fd); return 0; 试验五:GPRS综合试验 (framebuffer) 试验六:GPRS综合试验1、GPRS模块控制试验 串口控制GPRS模块 AT命令集2、综合试验 电话拨号 短消息发送串口2初始化寄存器定义:#define OSULCON2 (*(volatile unsigned char *)0x)#define OSUCON2 (*(volatile unsigned char *)0x)#define OSUFCON2 (*(volatile unsigned char *)0

24、x)#define OSUMCON2 (*(volatile unsigned char *)0x5000800C)#define OSUBRDIV2 (*(volatile unsigned short *)0x) 初始化:OSULCON0=0x03; /设置串口数据长度、停止位、奇偶校验OSUCON0=0x85; /设置串口时钟频率、中断类型等OSUFCON0=0x01; /设置串口FIFO工作模式OSUMCON0=0x00; /设置流量控制等OSUBRDIV0=0x149; /设置串口波特率为9600bpsAT命令集1 、查询无线模块状态: 发送:AT,应答:OK 2、主叫电话: 发送ATD+Dial电话号码;应答:如连接不成功:NO CARRIER 举例:发送“atdr”即主叫该号码;3、接电话: 发送:ATA,连接成功:OK,否则:NO CARRIER 4、挂断电话: 发送:ATH ,应答:OK 5、发短消息: 发送AT+CMGF=1 ,设置短信为文本模式,应答:OK. 或发送AT+CMGF=0 ,设置短信为PDU模式, 应答:OK. 发送AT+CMGS=电话号码短信内容 举例:(1)发送“at+cmgf=1r”,设为文本模式;(2) 发送“at+cmgs=r”.(3) 发送短信内容:“hello”内容以ctrl+z结束(发送字符码26,表示结束).

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1