Linux串列埠驅動程式 6 串列埠驅動實現

2021-09-24 10:31:57 字數 1036 閱讀 6803

在linux驅動開發中,一般都不會從0開始寫,我們做的更多的是移植和修改,有時候還需要對驅動程式進行優化。當然具備移植、修改驅動能力的基礎是能夠讀懂驅動程式,同時需要對這個驅動程式的核心功能非常了解。接下來開始編寫傳送中斷處理程式和接收中斷處理程式的**。

1.傳送中斷處理程式的設計

// 傳送中斷處理程式

static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)

// 2、判斷迴圈緩衝是否為空,或者串列埠不允許傳送,則把中斷關閉

if (uart_circ_empty(xmit) || uart_tx_stopped(port))

// 3、利用while迴圈傳送資料

while (!uart_circ_empty(xmit) && count-- > 0) // 迴圈的條件是:1.迴圈緩衝不為空,2.傳送的資料量最多為256位元組

// 4、如果迴圈緩衝裡面的資料小於wakeup_chars(256),則喚醒之前阻塞的傳送程序

if (uart_circ_chars_pending(xmit) < 256)

uart_write_wakeup(port);

// 5、同時如果迴圈緩衝為空了,把傳送中斷關閉。

if (uart_circ_empty(xmit))

s3c24xx_serial_stop_tx(port);

out:

return irq_handled; // 驅動被執行

}

2.接收中斷處理程式的設計

// 接收中斷處理程式

s3c24xx_serial_rx_chars(int irq, void *dev_id)

// 8.把串列埠驅動中的資料送到read_buf中

tty_flip_buffer_push(tty);

return irq_handled;

}

4 串列埠驅動

1 初始化gpio的模式和速度 2 配置中斷優先順序分組 3 串列埠初始化 4 串列埠服務函式編寫 我是分割線 一 gpio初始化 gpio埠設定 gpio inittypedef gpio initstructure rcc apb2periphclockcmd rcc apb2periph gp...

Linux串列埠驅動程式 1 tty驅動程式架構

1.tty概念分析 控制台終端 dev console 虛擬終端 dev tty 在linux核心中printk函式處理是交給控制台終端的,控制台終端又把它對映到串列埠終端或者螢幕終端上。而虛擬終端更多是在應用程式中使用。2.tty架構解析 3.回溯串列埠資料傳送 static void s3c24...

開發虛擬串列埠驅動程式

虛擬串列埠就是當本地並沒有對應的串列埠硬體裝置,而為應用層提供串列埠裝置一樣的系統呼叫介面,以相容原本使用本地串列埠的應用軟體的 虛 裝置。本文作者給出了一種在windows平台上實現虛擬串列埠的方法,由此實現的 串列埠 具有真實串列埠完全相同的系統呼叫介面。在很多應用中需要用到虛擬串列埠,如在mo...