资源描述:
《第六章-串口UART驱动程序开发-2.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章串口UART驱动程序开发驱动程序的框架及其例子Makefile文件的基本语法串口驱动程序的开发1971.驱动程序的基本框架198模块的加载和卸装199一个2.6内核字符设备驱动书上的例子是基于linux2.4内核的,2.6内核在具体实现细节上有了新的变化。书上的例子不能直接在2.6内核上运行。这里给出一个具体可以运行的基于2.6内核的驱动程序和测试代码。200一个2.6内核字符设备驱动File_operations是应用程序和驱动程序的接口,file_operation把系统调用和驱动程序关联起来的关键数据结构。
2、这个结构的每一个成员都对应着一个系统调用201Makefile202Test.c203UART介绍RS232-C异步串行接口,传统上采用专用的集成电路即通用异步收发器(UniversalAsynchronousReceiverandTransmitter,UART)实现,UART作为计算机I/O接口中的重要组成部分,主要用于进行串行和并行数据流之间的变换。收发双方取得同步的方法是采用固定的串行数据格式,即在数据格式设置中分别加起始位和停止位,来标志一个数据帧的开始和结束。其串行数据格式如图2所示,包括1位起始位,5~8
3、位数据位,1位奇偶校验位(可选),1位停止位。204UART硬件实现205UART硬件实现206驱动开发所要了解的知识实现这么复杂,我真要去了解吗?????我应该知道哪些知识??驱动开发人员不用去关心硬件如何实现,只要关心硬件实现的结果是什么。硬件把结果写在寄存器里面所以驱动开发人员只要了解如何使用寄存器就可以了,207UART中的寄存器UART2数据寄存器UARTDR对应的地址:0xff001480RXdata是要接收和发送8位读写数据。208UART中的寄存器UART2波特率和行控制器UBRLCR2对应的地址:0x
4、ff0014c0本例里中对其设置0x00070001。*(volatileunsignedlong*)0xff0014c0=0x00070001WRDLEN=2’b11;FIFOEN=1’b1;BitRateDivisor=12’b1;209UART中的寄存器UART2系统标志寄存器SYSFLG对应的地址:0xff001140URXFE2:UART2接收FIFO空标志URXFF2:UART2发送FIFO满标志该寄存器的读取:inti=*(volatileunsignedlong*)0xff001140210UART2驱
5、动程序设计Uart是字符备,在linux设备中是比较简单的。应用程序可以利用它提供给文件系统的接口对它进行操作,包括对设备的打开、读/写及关闭。字符设备对数据的操作以字节库单位,它可以发送或接收一个字符流。驱动程序的几大部分:1.初始化和释放2.与应用程序的接口设计,file_operations3.内部函数的实现211初始化和释放在使用uart2之前,必须保证已经对它进行了注册。在设备初始化函数intuart2_kernel_init(void)中调用regiset_chrdev()函数完成这项工作Register_
6、chrdev(UART2_MAJOR,”uart2_ep7312”,&uart2_fops)在uart2_kernel_exit(void)函数中调用unregister完成此项工作。Unregister_chrdev(UART2_MAJOR,“uart2_ep7312)212与应用程序的接口设计,file_operationsUart2的基本入口点位于驱动程序的file_operations结构中。Structfile_operationsUart2_fops={open:uart2_kernel_open,//打开
7、设备文件ioctl:uart2_kernel_ioctl,//设备文件的其它操作}Structfile_operationsUart2_fops={.open=uart2_kernel_open,//打开设备文件.ioctl:=uart2_kernel_ioctl,//设备文件的其它操作}213内部函数的实现214串口通信实现Vioduart_2(char*s){intfd,rt;if((fd=open(“/dev/uart2”,0))<0){printf(“cannotopen/dev/uart2”)exit(0
8、);}printf(“pleaseinput0-9”);Delay(15000);rt=ioctl(fd,4,s);s[1]=‘ ’;close(fd);}215