版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 4928-2026啤酒分析方法
- 酒精蒸餾工崗前績(jī)效目標(biāo)考核試卷含答案
- 電動(dòng)自行車裝配工保密意識(shí)考核試卷含答案
- 井下出礦工安全生產(chǎn)知識(shí)評(píng)優(yōu)考核試卷含答案
- 電子絕緣材料上膠工保密意識(shí)能力考核試卷含答案
- 橋面鋪裝質(zhì)量培訓(xùn)課件
- 銀行合規(guī)披露制度
- 酒店客房銷售與收益最大化制度
- 酒店餐飲成本控制制度
- 年產(chǎn)200萬(wàn)平方米柔性電子元器件項(xiàng)目可行性研究報(bào)告模板-備案審批
- 義務(wù)教育均衡發(fā)展迎檢路線及解說(shuō)詞2
- 2026中國(guó)電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會(huì)成熟人才招聘?jìng)淇碱}庫(kù)及參考答案詳解1套
- 思政教師培訓(xùn)心得課件
- 2026國(guó)家國(guó)防科技工業(yè)局所屬事業(yè)單位第一批招聘62人備考題庫(kù)及參考答案詳解
- 大型船舶拆除方案范本
- LoRa技術(shù)教學(xué)課件
- 小作坊衛(wèi)生規(guī)范制度
- 2025中央廣播電視總臺(tái)招聘144人筆試歷年題庫(kù)附答案解析
- 急性高原疾病課件
- 牧業(yè)公司生產(chǎn)安全預(yù)案
- GB/T 13609-2025天然氣氣體取樣
評(píng)論
0/150
提交評(píng)論