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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux串口驱动支持485,修改2410的linux串口驱动,使其支持RS485

發布時間:2024/8/1 linux 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux串口驱动支持485,修改2410的linux串口驱动,使其支持RS485 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2410自帶有三個串口,但mizi linux中自帶的驅動均為RS232的,因為485是半雙工的,比232多了一個方向控制信號,所以linux的自帶驅動并不適合485,需要進行一定的修改,步驟如下。

1. 首先硬件方面肯定要改動,假設我們要改的串口為串口2,電路原理圖如下:

有圖可知,485與232相比多了一個方向控制信號nRTS0,當其為低電平時,MAX485處于接收狀態,反正為發送狀態。因此我們在修改驅動時主要就是要讓串口2發送時,nRTS0必須為低電平,接收時必須為高電平。

2. 我們要修改的linux串口驅動主要為driver/serial/serial_s3c2410.c文件. 涉及到的函數主要有s3c2410uart_startup,s3c2410uart_start_tx和s3c2410uart_stop_tx,他們的作用分別為啟動串口,開始串口接收,停止串口接收。

3.首先修改s3c2410uart_startup函數,在其初始化的最后即return 0之前添加如下代碼:

if( port!=&s3c2410_ports[2] ) { //如果初始化的是串口2

GPHCON = (GPHCON&0xfffffff3)+0x04; //將GPH1,即nRTS0設為輸出功能

GPHDAT &= 0xfffd; //將nRTS0設為低電平,使串口啟動時處于接收數據狀態。

}

4. 修改s3c2410uart_start_tx,在enable_irq語句前添加如下代碼:

if( port!=&s3c2410_ports[2] ) { //如果啟動發送的是的是串口2

GPHCON = (GPHCON&0xfffffff3)+0x04; //將GPH1,即nRTS0設為輸出功能

GPHDAT = 0x02; //將nRTS0設為高電平,使串口進入發送數據狀態。

}

5.修改s3c2410uart_stop_tx,在disable_irq語句前添加如下代碼:

if( port!=&s3c2410_ports[2] ) { //如果停止發送的是的是串口2

while( !(UART_UTRSTAT(port)&0x04) ) ; //等待串口發送完成 ,這句千萬不能少

GPHCON = (GPHCON&0xfffffff3)+0x04; //將GPH1,即nRTS0設為輸出功能

GPHDAT = 0x02; //將nRTS0設為低電平,使串口重新進入接收數據狀態。

}

其中特別需要注意的是第二行的while語句千萬不能少,否則可能導致發送的數據丟失,因為在串口沒發送完畢時就將nRTS0設為低電平會使MAX485芯片退出發送狀態,導致發送數據的丟失。

至此驅動修改完成,重新編譯內核即可。其中用于控制485發送接收狀態的信號可以是任意的空閑CPU引腳,修改原理與使用nRTS0是相同的。

6. 關于linux串口編程的文章推薦下面兩篇,注意485編程時務必將串口設為RAW MODE.

總結

以上是生活随笔為你收集整理的linux串口驱动支持485,修改2410的linux串口驱动,使其支持RS485的全部內容,希望文章能夠幫你解決所遇到的問題。

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