a64sdk開(kāi)發(fā)包說(shuō)明uart驅(qū)動(dòng)使用_第1頁(yè)
a64sdk開(kāi)發(fā)包說(shuō)明uart驅(qū)動(dòng)使用_第2頁(yè)
a64sdk開(kāi)發(fā)包說(shuō)明uart驅(qū)動(dòng)使用_第3頁(yè)
a64sdk開(kāi)發(fā)包說(shuō)明uart驅(qū)動(dòng)使用_第4頁(yè)
a64sdk開(kāi)發(fā)包說(shuō)明uart驅(qū)動(dòng)使用_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第PAGE第PAGE10共3 demo 述述編寫目適用范相關(guān)人模塊功能介紹Linux內(nèi)核中,UART驅(qū)動(dòng)的結(jié)構(gòu)2.1所示,可以分為三個(gè)層次SunxiUARTDri2.1LinuxUART體系結(jié)構(gòu)SunxiUARTDriverSUNXIUART控制器的初始化、數(shù)據(jù)通信等,也是我們要實(shí)現(xiàn)的部UARTCore,為UART驅(qū)動(dòng)提供了一套API,完成設(shè)備和驅(qū)動(dòng)的等TTYcore,實(shí)現(xiàn)了內(nèi)核中所有TTY設(shè)備的和管理相關(guān)術(shù)語(yǔ)介紹AllwinnerSOC硬件平臺(tái)UniversalAsynchronousReceiver/Transmitter,通用異步收發(fā)傳輸器eType/eTypewriters的一個(gè)老縮寫,原來(lái)指的是電傳打字機(jī),現(xiàn)在泛指和計(jì)模塊配置介紹sys_config.fex配置說(shuō)明=======在不同Sunxi硬件平臺(tái)中,UART控制器的數(shù)目也不同,每UART控制器支持的線數(shù)也不同。線=======uart2_used1表示使能,0表示不使能uart2_port,表示UART端uart2_type,UART2、4、uart2_txGPIOconfig配置說(shuō) ,執(zhí)行make config進(jìn)入配置主界面,并按以下步驟2.3DeviceDrivers配然后,選Characterdevices選項(xiàng),進(jìn)入下一級(jí)配置,如下圖所示2.4Characterdevices配置選項(xiàng)接著選擇Serialdrivers選項(xiàng),進(jìn)入下一級(jí)配置,如下圖所示:SUNXIUARTController選項(xiàng),因?yàn)閁ART0要用作調(diào)試串口,所以下面的“ConsoleonSUNXIUARTport”默認(rèn)是選中狀態(tài),且不要將UART設(shè)置成模塊的編譯方式。如下圖:源碼結(jié)構(gòu)介紹 //打開(kāi)/關(guān)閉串口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設(shè)置串口屬性#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的標(biāo)志常量定義如下K忽略輸入中的BREAK狀態(tài)如果設(shè)置IGNBRK忽BREAK。如果沒(méi)有設(shè)置,但是設(shè)置了BRKINT,那BREAK將使得輸入和輸出隊(duì)列被刷新,如果終端是一個(gè)前臺(tái)進(jìn)程組的控制終端,這個(gè)進(jìn)程組中所有進(jìn)程將收到SIGINT信號(hào)。如果既未設(shè)置IGNBRK也未設(shè)置BRKINT,BREAK將視為與NUL字符同義,除非設(shè)置了PARMRK,這種情況下它被視為序列\(zhòng)377\0\0R如果沒(méi)有設(shè)置IGNPAR,在有奇偶校驗(yàn)錯(cuò)或楨錯(cuò)誤的字符前插入\3770。如既沒(méi)有設(shè)置IGNPAR也沒(méi)有設(shè)置PARMRK,將有奇偶校驗(yàn)錯(cuò)或楨錯(cuò)誤的字符視為\0。將輸入中的回車翻譯為新行(除非設(shè)置IGNCR)(POSIX)將輸入中的大寫字母映射為小寫字母啟用輸出的XON/XOFF流控制(不屬于POSIX.1;XSI)允許任何字符來(lái)重新開(kāi)始輸出啟用輸入的XON/XOFF流控制(不屬于POSIX)當(dāng)輸入隊(duì)列滿時(shí)響零。Linux沒(méi)有實(shí)現(xiàn)c_oflag的標(biāo)志常量定義如下(POSIX)將輸出中的小寫字母映射為大寫字母(XSI)將輸出中的新行符映射為回車-換行0列輸出T(不屬于POSIX)填充字符是ASCIIDEL0177)。如果新行延時(shí)掩碼。取值為NL0和NL1回車延時(shí)掩碼。取值為CR0,CR1,CR2,或CR3YTAB3,即XTABS,將擴(kuò)展跳格為空格(每個(gè)跳格符填充8個(gè)空格)回退延時(shí)掩碼。取值為BS0或BS1。(從來(lái)沒(méi)有被實(shí)現(xiàn)過(guò)豎直跳格延時(shí)掩碼。取值為VT0或VT1FF0FF1c_cflag(POSIX)(4+1位)(POSIX)(1位)CBAUD(POSIX規(guī)定波特率在termios結(jié)構(gòu)中,并未精確指定它的位置,而是供了函數(shù)cfgetispeed()和cfsetispeed()來(lái)存取它。一些系統(tǒng)使用c_cflagCBAUD選擇的位,其他系統(tǒng)使用單獨(dú)的變量,例如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下不被支持)如果同時(shí)設(shè)置了ICANON,終端只有大\前綴的字符。輸出時(shí),大寫字符被前綴ICANONERASE擦除前一個(gè)輸入字符,WERASEICANONKILLL(不屬于POSIX)ECHO,除了TAB,NL,START,和之外的ASCII控制信號(hào)被回顯為^X,這里X是比控制信號(hào)大0x40ASCII0x08BS)^H(POSIX)ICANON和IECHOE(POSIX)ICANONKILLECHOEECHOPRTO(POSIX)(POSIX;Linux下不被支持)DISCARDSIGINT,SIGQUITSIGSUSP(POSIX;Linux下不被支持)符被重新輸出。(bash向試圖寫控制終端的進(jìn)程組發(fā)送SIGTTOU信號(hào)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#)刪除字符。刪除上一個(gè)還沒(méi)有EOFICANON(025,NAK,Ctrl-U,orCtrl-X,oralso@)EOF(004,EOT,Ctrl-D)文件尾字符。更精確地說(shuō),這個(gè)字符使得tty緩沖中的內(nèi)容被送到等待輸入的用戶程序中,而不必等到EOL。如果它是一行的第一個(gè)字符,那么用戶程序的read()將返回0,指示讀到了EOF。當(dāng)設(shè)置ICANONcanonical(0,NUL)ICANON(notinPOSIX0,NUL)ICANON(021,DC1,Ctrl-Q)開(kāi)始字符。重新開(kāi)始被Stop(023,DC3,Ctrl-S)Start(032,SUB,Ctrl-Z)SIGTSTP信號(hào)。當(dāng)設(shè)置ISIG(notinPOSIX;026,SYN,Ctrl-V)字面上的下一個(gè)。下一個(gè)輸入字符,取(notinPOSIX;027,ETB,Ctrl-W)ICANONIEXTEN(notinPOSIX;022,DC2,Ctrl-R)ICANON/*hangupBBBBBBBB【函數(shù)原型】:speed_tcfgetospeed(conststructtermios【函數(shù)原型】:intcfsetispeed(structtermios*termios_p,speed_t0,成功;-1,失敗,errnor給出具體【函數(shù)原型】:intcfsetospeed(structtermios*termios_p,speed_t0,成功;-1,失敗,errnor給出具體【函數(shù)原型】:intcfsetspeed(structtermios*termios_p,speed_t0,成功;-1,失敗,errnor給出具體【函數(shù)原型】:inttcflush(intfd,intqueue_selector,清空數(shù)據(jù)的操值】:0,成功;-1,失敗,errnor給出具體錯(cuò)誤碼參數(shù)queue_selector的取值有三個(gè):TCOFLUSH:清空輸出緩沖區(qū)的數(shù)TCIOFLUSH:同時(shí)清空輸入/輸出緩沖區(qū)的數(shù)/*Unix標(biāo)準(zhǔn)函數(shù)定義/*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數(shù)據(jù) 取值為7或者 stopbits類型int停止 取值為1或者 類型 效驗(yàn)類型取值為{ (tcgetattr( {perror("SetupSerialreturn-})/{casecasereturn-1;}switch{casecase'options.c_cflag&=~PARENB; /*Clearparityenable*/options.c_iflag&=~I /*Enableparitychecking*/case'options.c_cflag|=(PARODD|PARENB);/*設(shè)置為 options.c_iflag|=I /*Disnableparitychecking*/casecase'options.c_cflag|=PARENB; /*Enableparity*/options.c_cflag&=~PARODD; /*轉(zhuǎn)換為偶效驗(yàn)*/options.c_iflag|=I /*Disnableparitychecking*/casecase's': /*asnoparity*/options.c_cflag&=~CSTOPB;break;return-1;}/*設(shè)置停止位*/switch{casecasefprintf(stderr,"Unsupportedstopbits\n");return-1;}/*Setinputparityoption*/if(parity!='n')options.c_iflag|=I options.c_cc[VTIME]=150;/*設(shè)置超時(shí)15seconds*/options.c_cc[VMIN0;*UpdatetheoptionsanddoitNOW*/if(tcsetattr(fd,TCSANOW,&options)!=0){return-}return}voidstr_print(char*buf,i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論