Linux

串口速度控制源碼

  • July 30, 2017

假設我們有/dev/ttyS0一個預設速度為 9600 bps 的串列設備。

比如說,我們已經將其速度更改為,例如,使用cfsetospeed.

現在,寫入線路的速度必須更慢。

執行此操作的原始碼在哪裡?作業系統的哪個部分控制這個速度?自定義驅動程序,tty 驅動程序還是什麼?以及如何通過設置時鐘速度或延遲?

它可能在驅動程序中,但我找不到。例如,誰能告訴我RocketPort驅動程序中的位置?

我也找不到tty driver

串列埠速度通常由硬體本身處理,並由硬體驅動程序配置。

所以要遵循的鍊是TCSETSioctl 呼叫,它呼叫tty_set_termios(). tty_ioctl.c如果您在 RocketPort 驅動程序中遵循該鏈,它將呼叫rp_set_termios()which 本身呼叫configure_r_port().

這會計算一些配置設置以發送到 RocketPort 晶片(例如除數設置),最終呼叫sSetBaud(定義在 中rocket_int.h),它只是將字節輸出到晶片。

因此,核心本身不會對串列線路進行“位撞擊”來確定波特率;UART晶片為我們完成了所有艱苦的工作。我們只需要對晶片進行程式:-)

引用自:https://unix.stackexchange.com/questions/382760