國嵌攻略 132 串列埠驅動實現

2022-07-20 23:39:21 字數 1439 閱讀 2682

如何開發linux驅動程式

一般情況下都會有現成的驅動程式,不需要從零開始開發驅動程式。所以linux驅動開發主要分為兩個步驟:1.讀得懂驅動程式;2.寫的了核心功能。

傳送中斷處理程式

傳送中斷處理函式在/drivers/serial/samsung.c的s3c24xx_serial_tx_chars

迴圈緩衝

struct circ_buf

//判斷資料傳送

struct circ_buf *xmit = &port->state->xmit;

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

//迴圈傳送資料

int count = 256

;

while(!uart_circ_empty(xmit) && (count-- > 0))

//寫入傳送資料

wr_regb(port, s3c2410_utxh, xmit->buf[xmit->tail]);

//移動緩衝位置

xmit->tail = (xmit->tail + 1) & (uart_xmit_size - 1); //

迴圈移動尾部

//修改傳送計數

port->icount.tx++;

}//喚醒阻塞程序

if(uart_circ_chars_pending(xmit) < 256)

//關閉傳送使能

if(uart_circ_empty(xmit))

return irq_handled; //

中斷處理完成

}接收中斷處理程式

接收中斷處理函式在/drivers/serial/samsung.c的s3c24xx_serial_rx_chars

static irqreturn_t s3c24xx_serial_rx_chars(int irq, void *dev_id)

//讀取錯誤狀態

unsigned int

uerstat;

uerstat =rd_regl(port, s3c2410_uerstat);

//讀取接收資料

unsigned int

ch;

ch =rd_regb(port, s3c2410_urxh);

//寫入接收緩衝

uart_insert_char(port, uerstat, s3c2410_uerstat_overrun, ch, tty_normal);

}//寫入線路規程

struct tty_struct *tty = port->state->port.tty;

tty_flip_buffer_push(tty);

return irq_handled; //

中斷處理完成

}

國嵌攻略 130 串列埠驅動分析 傳送

tty資料傳送流程 tty子系統 1.file operation中找到tty write 2.tty write找到線路規程中的n tty write 3.n tty write找到uart ops中的uart write 串列埠驅動 4.uart write找到s3c24xx serial st...

4 串列埠驅動

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

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

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