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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

V210 UART TX 流程

發(fā)布時(shí)間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 V210 UART TX 流程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 雖然V210的uart驅(qū)動(dòng)是平臺(tái)總線設(shè)備驅(qū)動(dòng)模型,但實(shí)際上他還是以字符設(shè)備驅(qū)動(dòng)存在,那么分析他的發(fā)送流程,

? ? 首先找到他的file_operations的write函數(shù)

? ? 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);

? ?對(duì)V210來(lái)說(shuō),uart0和uart1有流控,uart2和uart3沒(méi)有流控,所以,如果應(yīng)用程序?qū)art3設(shè)置的流控,那么

tty->hw_stopped這個(gè)參數(shù)會(huì)被置1,應(yīng)用層的數(shù)據(jù)傳到這里就停止了。

3. drivers/serial/samsung.c

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

? ? ?這個(gè)函數(shù)執(zhí)行后,會(huì)調(diào)用發(fā)送中斷處理函數(shù)

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

? ? ?從打印的log看,發(fā)送中斷函數(shù)結(jié)束后,tty_write和uart_write才會(huì)返回


下面說(shuō)一下log調(diào)試方法,因?yàn)閡art2做為調(diào)試串口,因此,為了避免調(diào)試串口也打印log,可以在那些函數(shù)中,用

下面幾個(gè)辦法來(lái)區(qū)分

1. 對(duì)于tty_write函數(shù)來(lái)說(shuō),我們可以通過(guò)inode獲得設(shè)備文件的子設(shè)備號(hào)來(lái)區(qū)分

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

2. 對(duì)于uart_write來(lái)說(shuō),我們可以通過(guò)uart_port數(shù)據(jù)結(jié)構(gòu)的中斷號(hào)來(lái)區(qū)分

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

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

? ??

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

? ??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硬件資源的內(nèi)存資源和中斷資源,可以看到,platform_get_irq得到第一個(gè)中斷號(hào)資源,即

? ? 接收中斷,然后port->irq = ret, 即uart_port這個(gè)結(jié)構(gòu)體的irq變量==IRQ_S5P_UART_RX2

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

? ? 中斷號(hào)來(lái)區(qū)分是哪個(gè)串口

3. 另外通過(guò)s3c24xx_uart_port結(jié)構(gòu)體的channelnum也可以區(qū)分是哪個(gè)串口

? ? 在uart平臺(tái)總線設(shè)備驅(qū)動(dòng)的probe函數(shù)(s3c24xx_serial_probe)可以看到以下賦值

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

? ? 然后,從uart平臺(tái)總線設(shè)備里可以看到

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

? ??

? ?因此可以知道channelnum實(shí)際就是0-3,分別對(duì)應(yīng)了4個(gè)uart


總結(jié)

以上是生活随笔為你收集整理的V210 UART TX 流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。