在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...