a64sdk开发包说明uart驱动使用_第1页
a64sdk开发包说明uart驱动使用_第2页
a64sdk开发包说明uart驱动使用_第3页
a64sdk开发包说明uart驱动使用_第4页
a64sdk开发包说明uart驱动使用_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

第PAGE第PAGE10共3 demo 述述编写目适用范相关人模块功能介绍Linux内核中,UART驱动的结构2.1所示,可以分为三个层次SunxiUARTDri2.1LinuxUART体系结构SunxiUARTDriverSUNXIUART控制器的初始化、数据通信等,也是我们要实现的部UARTCore,为UART驱动提供了一套API,完成设备和驱动的等TTYcore,实现了内核中所有TTY设备的和管理相关术语介绍AllwinnerSOC硬件平台UniversalAsynchronousReceiver/Transmitter,通用异步收发传输器eType/eTypewriters的一个老缩写,原来指的是电传打字机,现在泛指和计模块配置介绍sys_config.fex配置说明=======在不同Sunxi硬件平台中,UART控制器的数目也不同,每UART控制器支持的线数也不同。线=======uart2_used1表示使能,0表示不使能uart2_port,表示UART端uart2_type,UART2、4、uart2_txGPIOconfig配置说 ,执行make config进入配置主界面,并按以下步骤2.3DeviceDrivers配然后,选Characterdevices选项,进入下一级配置,如下图所示2.4Characterdevices配置选项接着选择Serialdrivers选项,进入下一级配置,如下图所示:SUNXIUARTController选项,因为UART0要用作调试串口,所以下面的“ConsoleonSUNXIUARTport”默认是选中状态,且不要将UART设置成模块的编译方式。如下图:源码结构介绍 //打开/关闭串口intopen(constchar*pathname,intflags);intclose(intfd);#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>读/写串口ssize_tread(intfd,void*buf,size_tcount);ssize_twrite(intfd,constvoid*bufsize_tcount);#include设置串口属性#defineNCCSstruct#defineNCCSstructtermiostcflag_tc_iflag;tcflag_tc_oflag;tcflag_tc_cflag;tcflag_tc_lflag;cc_tc_line;cc_t/*inputmodeflags/*outputmodeflags/*controlmodeflags/*localmodeflags/*linediscipline/*controlcharacters其中,c_iflag的标志常量定义如下K忽略输入中的BREAK状态如果设置IGNBRK忽BREAK。如果没有设置,但是设置了BRKINT,那BREAK将使得输入和输出队列被刷新,如果终端是一个前台进程组的控制终端,这个进程组中所有进程将收到SIGINT信号。如果既未设置IGNBRK也未设置BRKINT,BREAK将视为与NUL字符同义,除非设置了PARMRK,这种情况下它被视为序列\377\0\0R如果没有设置IGNPAR,在有奇偶校验错或桢错误的字符前插入\3770。如既没有设置IGNPAR也没有设置PARMRK,将有奇偶校验错或桢错误的字符视为\0。将输入中的回车翻译为新行(除非设置IGNCR)(POSIX)将输入中的大写字母映射为小写字母启用输出的XON/XOFF流控制(不属于POSIX.1;XSI)允许任何字符来重新开始输出启用输入的XON/XOFF流控制(不属于POSIX)当输入队列满时响零。Linux没有实现c_oflag的标志常量定义如下(POSIX)将输出中的小写字母映射为大写字母(XSI)将输出中的新行符映射为回车-换行0列输出T(不属于POSIX)填充字符是ASCIIDEL0177)。如果新行延时掩码。取值为NL0和NL1回车延时掩码。取值为CR0,CR1,CR2,或CR3YTAB3,即XTABS,将扩展跳格为空格(每个跳格符填充8个空格)回退延时掩码。取值为BS0或BS1。(从来没有被实现过竖直跳格延时掩码。取值为VT0或VT1FF0FF1c_cflag(POSIX)(4+1位)(POSIX)(1位)CBAUD(POSIX规定波特率在termios结构中,并未精确指定它的位置,而是供了函数cfgetispeed()和cfsetispeed()来存取它。一些系统使用c_cflagCBAUD选择的位,其他系统使用单独的变量,例如sg_ispeedsg_ospeed。CS5,CS6,CS7,CS8BDmodem(挂断)Lmodem(POSIX)层阻塞输出(shl(POSIX)输入速度的掩码。CIBAUDCBAUDIBSHIFTS(POSIX)RTS/CTS硬件)c_lflagINTRQUIT,SUSP,DSUSP(canonicalmode)EOF,EOL,EOL2,KILLLNEXT,REPRINT,STATUS,WERASE(不属于POSIX;Linux下不被支持)如果同时设置了ICANON,终端只有大\前缀的字符。输出时,大写字符被前缀ICANONERASE擦除前一个输入字符,WERASEICANONKILLL(不属于POSIX)ECHO,除了TAB,NL,START,和之外的ASCII控制信号被回显为^X,这里X是比控制信号大0x40ASCII0x08BS)^H(POSIX)ICANON和IECHOE(POSIX)ICANONKILLECHOEECHOPRTO(POSIX)(POSIX;Linux下不被支持)DISCARDSIGINT,SIGQUITSIGSUSP(POSIX;Linux下不被支持)符被重新输出。(bash向试图写控制终端的进程组发送SIGTTOU信号ICANONEOL2,LNEXT,REPRINTWERASE,IUCLCc_cc(初始值)(003,ETX,Ctrl-C,oralso0177,DEL,rubout)SIGINTISIG(034,FS,Ctrl-\)SIGQUITISIG(0177,DEL,rubout,or010,BS,Ctrl-H,oralso#)删除字符。删除上一个还没有EOFICANON(025,NAK,Ctrl-U,orCtrl-X,oralso@)EOF(004,EOT,Ctrl-D)文件尾字符。更精确地说,这个字符使得tty缓冲中的内容被送到等待输入的用户程序中,而不必等到EOL。如果它是一行的第一个字符,那么用户程序的read()将返回0,指示读到了EOF。当设置ICANONcanonical(0,NUL)ICANON(notinPOSIX0,NUL)ICANON(021,DC1,Ctrl-Q)开始字符。重新开始被Stop(023,DC3,Ctrl-S)Start(032,SUB,Ctrl-Z)SIGTSTP信号。当设置ISIG(notinPOSIX;026,SYN,Ctrl-V)字面上的下一个。下一个输入字符,取(notinPOSIX;027,ETB,Ctrl-W)ICANONIEXTEN(notinPOSIX;022,DC2,Ctrl-R)ICANON/*hangupBBBBBBBB【函数原型】:speed_tcfgetospeed(conststructtermios【函数原型】:intcfsetispeed(structtermios*termios_p,speed_t0,成功;-1,失败,errnor给出具体【函数原型】:intcfsetospeed(structtermios*termios_p,speed_t0,成功;-1,失败,errnor给出具体【函数原型】:intcfsetspeed(structtermios*termios_p,speed_t0,成功;-1,失败,errnor给出具体【函数原型】:inttcflush(intfd,intqueue_selector,清空数据的操值】:0,成功;-1,失败,errnor给出具体错误码参数queue_selector的取值有三个:TCOFLUSH:清空输出缓冲区的数TCIOFLUSH:同时清空输入/输出缓冲区的数/*Unix标准函数定义/*PPSIX终端控制定义#includeenum{PT_PROGRAM_NAME=0,PT_DEV_NAME,#defineDBG(string,args...)\do{\printf("%s,%s()%u",FILE,FUNCTION,LINE);\printf(string,##args);\}whilevoid{printf("Youshouldinputas:}intOpenDev(char{intfd=open(name,O_RDWR);if(-1==fd)//|O_NOCTTY|return} 类型 类型 voidset_speed(intfd,intspeed){int struct Opt=intspeed_arr[]={B38400,B19200,B9600,B4800,B2400,B1200,B300,B38400,B19200,B9600,B4800,B2400,B1200,B300,};intname_arr[]= 300, 9600,4800,2400, 300,for(i= i<sizeof(speed_arr)/ {if(speed==name_arr[i])}tcflush(fd,TCIOFLUSH);cfsetispeed(&Opt,speed_arr[i]); &=~(ICANON|ECHO|ECHOE|ISIG); &=~OPOST; status=tcsetattr(fd,TCSANOW,&Opt); (status!=0){}} 类型 databits类型int数据 取值为7或者 stopbits类型int停止 取值为1或者 类型 效验类型取值为{ (tcgetattr( {perror("SetupSerialreturn-})/{casecasereturn-1;}switch{casecase'options.c_cflag&=~PARENB; /*Clearparityenable*/options.c_iflag&=~I /*Enableparitychecking*/case'options.c_cflag|=(PARODD|PARENB);/*设置为 options.c_iflag|=I /*Disnableparitychecking*/casecase'options.c_cflag|=PARENB; /*Enableparity*/options.c_cflag&=~PARODD; /*转换为偶效验*/options.c_iflag|=I /*Disnableparitychecking*/casecase's': /*asnoparity*/options.c_cflag&=~CSTOPB;break;return-1;}/*设置停止位*/switch{casecasefprintf(stderr,"Unsupportedstopbits\n");return-1;}/*Setinputparityoption*/if(parity!='n')options.c_iflag|=I options.c_cc[VTIME]=150;/*设置超时15seconds*/options.c_cc[VMIN0;*UpdatetheoptionsanddoitNOW*/if(tcsetattr(fd,TCSANOW,&options)!=0){return-}return}voidstr_print(char*buf,i

温馨提示

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

评论

0/150

提交评论