日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

V210 UART TX 流程

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 V210 UART TX 流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 雖然V210的uart驅動是平臺總線設備驅動模型,但實際上他還是以字符設備驅動存在,那么分析他的發送流程,

? ? 首先找到他的file_operations的write函數

? ? drivers/char/tty_io.c

? ? ? ? ?tty_write(struct file *file, const char __user *buf,?size_t count, loff_t *ppos)

2.?drivers/serial/serial_core.c

? ? ? ??uart_write(struct tty_struct *tty, const unsigned char *buf, int count)

? ? ? ? ? ? ? ?uart_start(struct tty_struct *tty)

? ? ? ? ? ? ? ? ? ? ? ??__uart_start(struct tty_struct *tty)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??if (!uart_circ_empty(&state->xmit) && state->xmit.buf &&!tty->stopped && !tty->hw_stopped)
? ? ? ? ? ? ? ? ? ? ? ? ? ?port->ops->start_tx(port);

? ?對V210來說,uart0和uart1有流控,uart2和uart3沒有流控,所以,如果應用程序對uart3設置的流控,那么

tty->hw_stopped這個參數會被置1,應用層的數據傳到這里就停止了。

3. drivers/serial/samsung.c

? ? ?static void s3c24xx_serial_start_tx(struct uart_port *port)

? ? ?這個函數執行后,會調用發送中斷處理函數

? ? ?static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)

? ? ?從打印的log看,發送中斷函數結束后,tty_write和uart_write才會返回


下面說一下log調試方法,因為uart2做為調試串口,因此,為了避免調試串口也打印log,可以在那些函數中,用

下面幾個辦法來區分

1. 對于tty_write函數來說,我們可以通過inode獲得設備文件的子設備號來區分

? ???int num = MINOR(inode->i_rdev);

2. 對于uart_write來說,我們可以通過uart_port數據結構的中斷號來區分

? ??if(port->irq != IRQ_S5P_UART_RX2)

? ? 為什么這么寫,從arch/arm/plat-s5p/dev_uart.c中可以看到4個串口的硬件資源結構體定義

? ??

? ? 另外,從drivers/serial/samsung.c里的s3c24xx_serial_init_port函數里,可以看到下面幾句

? ??res = platform_get_resource(platdev, IORESOURCE_MEM, 0);

? ??port->mapbase = res->start;
? ? port->membase = S3C_VA_UART + res->start - (S3C_PA_UART & 0xfff00000);
? ? ret = platform_get_irq(platdev, 0);

? ??port->irq = ret;
? ? ourport->rx_irq = ret;
? ? ourport->tx_irq = ret + 1;

? ? 這幾句就是在獲取uart硬件資源的內存資源和中斷資源,可以看到,platform_get_irq得到第一個中斷號資源,即

? ? 接收中斷,然后port->irq = ret, 即uart_port這個結構體的irq變量==IRQ_S5P_UART_RX2

? ? 然后s3c24xx_uart_port的rx_irq ==?IRQ_S5P_UART_RX2, tx_irq ==?IRQ_S5P_UART_TX2,因此可以通過判斷

? ? 中斷號來區分是哪個串口

3. 另外通過s3c24xx_uart_port結構體的channelnum也可以區分是哪個串口

? ? 在uart平臺總線設備驅動的probe函數(s3c24xx_serial_probe)可以看到以下賦值

? ??ourport->channelnum= dev->id

? ? 然后,從uart平臺總線設備里可以看到

? ? arch/arm/plat-samsung/dev-uart.c

? ??

? ?因此可以知道channelnum實際就是0-3,分別對應了4個uart


總結

以上是生活随笔為你收集整理的V210 UART TX 流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。