UART配置流程

2021-07-05 05:19:20 字數 2590 閱讀 5143

常用的串列埠一般都rs232和rs485,在linux中,所有的裝置檔案一般都位於「/dev」下,其中串列埠1和串列埠2對應的裝置名依次為「/dev/ttys0」和「/dev/ttys1」,而且usb轉串列埠的裝置名通常為「/dev/ttyusb0」。

下面以指紋識別系統為例介紹下串列埠的操作流程:

1、儲存原先串列埠配置,使用tcgetattr(fd,&oldtio)函式         

struct termios newtio,oldtio;          

tcgetattr(fd,&oldtio);     

2、啟用選項,有clocal 和cread,用於本地連線和接收使能。

newtio.c_cflag |= clocal | cread        

3、設定波特率,使用函式cfsetispeed、cfsetospeed。      

cfsetipeed(&newtio, b115200);      

cfsetospeed(&newtio, b115200);    

4、設定資料位,需要使用掩碼設定。        

newtio.c_cflag &= ~csize;         

newtio.c_cflag |= cs8;     

5、設定奇偶校驗位,使用c_cflag和c_iflag。      

設定奇校驗:             

newtio.c_cflag |= parenb;         

newtio.c_cflag |= parodd;           

newtio.c_iflag |= (inpck | istrip);          

設定偶校驗:            

newtio.c_iflag |= (inpck | istrip);        

newtio.c_cflag |= parenb;       

newtio.c_cflag &= ~parodd;     

6、設定停止位,通過啟用c_cflag中的cstopb實現。

若停止位為1,則清除cstopb。

newtio.c_cflag &= ~cstopb;   

若停止位為2,則  啟用cstopb。            

newtio.c_cflag |= cstopb;   

7、設定最少字元和等待時間,對於接受字元和等待時間沒有特別要求時,可設為0。     

newtio.c_cc[vmin] = 0;  

newtio.c_cc[vtime] = 0; 

8、處理要寫入的引用物件        

tcflush函式刷清(拋棄)輸入快取(終端驅動程式已接收到,但使用者程式尚未讀)

或輸出快取(使用者程式已寫,但尚未傳送)。         

int tcflush(int filedes, int queue)         

queue數應當是下列三個常數之一:          

tciflush 刷清輸入佇列。       

tcoflush 刷清輸出佇列。        

tcioflush 刷清輸入、輸出佇列。     

9、啟用配置。在完成配置後,需啟用配置使其生效。      

使用tsettattr()函式。原型:            

int tcgetattr(int filedes, struct termios *termptr);           

int tcgetattr(int filedes, int opt, const struct termios * termptr);            

tcsetattr的引數opt使我們可以指定在什麼時候新的終端屬性才起作用。

opt可以指定wei下列常數中的一  個:            

tcsanow 更改立即發生。     

tcsadrain 傳送了所有輸出後更改才發生。若更改輸出引數則應使用此選擇項。         

tcsaflush 傳送了所有輸出後更改才發生。更進一步,在更改發生時未讀的宋有輸入資料都被刪除(刷清)              

使用如:tcsetattr(fd, tcsanow, &newtio)   開啟串列埠       

f d = open("/dev/ttys0", o_rdwr|o_noctty|o_ndelay);     

open函式中除普通引數外,另有兩個引數o_noctty和o_ndelay。       

o_noctty:通知linux系統,這個程式不會成為這個埠的控制終端。    

o_ndelay:通知linux系統不關心dcd訊號線所處的狀態(埠的另一端是否啟用或者停止)  

然後,恢復串列埠的狀態為阻塞狀態,用於等待串列埠資料的讀入。用fcntl函式: 

fcntl(fd, f_setfel, 0);             

接著, 測試開啟的檔案描述符是否引用乙個終端裝置,以進一步確認串列埠是否正確開啟.        

isatty(stdin_fileno);   

串列埠讀寫 :           

口的讀寫與普通檔案的讀寫是一樣的,使用read,write函式。

51 UART配置流程

step1 設定txd rxd pin的輸入輸出屬性,根據各晶元定義設定 例 p2cr 0xfb p2 1 uart txd,p2 2 uart rxd step2 設定uart工作方式 設定scon暫存器。例,sh88f02設定為工作方式1,scon 0x40 在sh88f02應用中發現,必須先配...

V210 UART 整體流程

2.6核心以後,多數驅動都是以平台匯流排的方式編寫,因此對於這種型別的驅動,實際就是要分成兩個流程來分析 平台匯流排裝置的構造,平台匯流排驅動的構造。1.arch arm mach s5pv210 mach x210.c smdkc110 map io s3c24xx init uarts smdk...

6410之uart的配置

主程式start.s define config periport base 0x70000000 define config periport size 0x13 define wtcon 0x7e004000 global start start 告訴cpu 外設的位址 ldr r0,confi...