LINUX串列埠驅動(8250)的編寫與除錯

2021-05-25 01:51:44 字數 1467 閱讀 3372

串列埠控制器都是大同小異,用3條位址線就可以完全對串列埠控制器進行控制。針對st554晶元來說,控制暫存器主要有thr(傳送保持暫存器),rhr(接收保持暫存器),ier(中斷使能暫存器),fcr(緩衝控制暫存器),lcr(控制暫存器),lsr(狀態暫存器),mcr(模式控制暫存器),msr(模式狀態暫存器),dll,dlm和測試暫存器等。

**演示為linux-2.6.18。一般情況下,我們只要修改結構體uart_8250_port的賦值和中斷處理函式。在uart_8250_port中的uart_port結構是比較重要的,有些變數需要根據自己的需求進行修改,如下所示。

up->port.iobase = old_serial_port[i].port;

up->port.irq = irq_canonicalize(old_serial_port[i].irq);

up->port.uartclk = old_serial_port[i].baud_base * 16;

up->port.flags = old_serial_port[i].flags;

up->port.hub6 = old_serial_port[i].hub6;

up->port.membase = old_serial_port[i].iomem_base;

up->port.iotype = old_serial_port[i].io_type;

up->port.regshift = old_serial_port[i].iomem_reg_shift;

其中包括串列埠裝置在虛擬位址中的位址對映起始位址,物理起始位址,中斷號,始終頻率等引數。注意如果需要申請多個同樣的串列埠時,
只要修改nr_uarts變數和uart_nr就可以了。
struct uart_8250_port ;

串列埠中的驅動分兩層,首先是基於控制台的驅動,即下面的serial8250_console,還有乙個就是基於uart的驅動,也就是我

們在實際使用串列埠時,使用的驅動**,如串列埠的設定set_termios,讀寫stop_tx,start_tx,stop_rx等函式。
static struct uart_ops

serial8250_pops = ;

static struct uart_driver

serial8250_reg = ;

在串列埠的操作中,除了一些初始化的操作外,最重要的就是串列埠的讀和寫了。串列埠的寫有兩種方式,一種是查詢方式,另外一種是中斷
方式,當上層傳送寫的請求時,串列埠驅動先檢查(看lsr中te和the)是否符合串列埠的寫,如果符合寫的條件,開始寫入串列埠控制器的fifo,
寫完一次等待傳送中斷,表示上一次的資料已經傳送成功,可以繼續送入傳送的資料。
而在串列埠的讀操作中,是通過中斷方式實現,如果有資料接收到,串列埠控制器會傳送接收中斷,驅動在中斷處理函式中接收到資料,返回
上層。

linux驅動之終端控制體系與串列埠驅動程式設計

終端概述 控制台偽終端 終端體系 串列埠驅動描述 串列埠驅動註冊 uart埠描述 操作串列埠 新增埠串列埠驅動程式設計 在介紹終端控制體系之前,要先普及 一下資料通訊的基本方式。資料通訊的基本方式可分為並行通訊與序列通訊兩種 非同步通訊是以字元為傳輸單位,通訊中兩個字元間的時間間隔是不固定的,然而同...

Linux系統串列埠接收資料編

之前基於ibm deveplopworks社群的 做了串列埠初始化和傳送的程式,今天在此基礎上新增了讀取串列埠資料的程式。首先是最簡單的迴圈讀取程式,第二個是通過軟中斷方式,使用訊號signal機制讀取串列埠,這裡需要注意的是硬體中斷是裝置驅動層級的,而讀寫串列埠是使用者級行為,只能通過訊號機制模擬...

linux下串列埠(serial)和串列埠驅動

pc上的串列埠一般是ttys,板子上linux的串列埠一般叫做ttysac,是usb口轉串列埠的是ttyusb 外插串列埠卡的話預設是dev下的ttys 一般ttys0對應com1,ttys1對應com2 1.檢視串列埠的驅動資訊 cat proc tty driver serial 2.檢視串列埠...