国产久操视频-国产久草视频-国产久热精品-国产久热香蕉在线观看-青青青青娱乐-青青青青在线成人视99

  • 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

嵌入式 | LINUX的串口非標(biāo)準(zhǔn)波特率更改

2022/08/01
751
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

LINUX的庫提供的波特率是標(biāo)準(zhǔn)波特率,應(yīng)用時(shí)有時(shí)會用到非標(biāo)準(zhǔn)的波特率。以下試驗(yàn)使用的xilinx的zynq7020,linux內(nèi)核是4.14版本。以增加波特率100k為例。看了一些直接在應(yīng)用端改的一些方法,已經(jīng)取消了,所以更改了內(nèi)核

第一步,內(nèi)核需要更改兩個地方,一是/drivers/tty/tty_baudrate.c,另一個是/include/uapi/asm-generic/termbits.h

先看第二個,這個CBAUD原來是0010017改為0030017,見圖1,是用來做掩碼計(jì)算的。

圖1

 

這兩個是新加的,如圖2

圖2

 

這個頭文件一共更改這三個地方。先說為什么增加波特率使用0020001而不在B4000000后面遞增使用0010020,這是因?yàn)檫@個低位的20已經(jīng)被占用了,如下圖3,所以找了沒被占用的位置,0020000的中2這個bit位置在c_cflag中沒被占用(c_cflag是用于設(shè)置波特率和其他一些信息的)。第一處的0030017也是這個原因,就是將波特率即可使用的這些宏定義包含進(jìn)去。

圖3

 

第二步,更改文件/drivers/tty/tty_baudrate.c,這個文件就是獲取波特率具體數(shù)值的文件,應(yīng)用端的數(shù)據(jù)傳入到內(nèi)核,內(nèi)核解析并獲得100k波特率這個數(shù)值就是在這個文件,

先在文件頭部的波特率列表中增加所需數(shù)值,如圖4,其中的100000和B100000為新增加。

圖4

 

修改函數(shù)speed_t tty_termios_baud_rate(struct ktermios *termios),圖5

圖5

 

其中圈起來的地方是新加的,這就是根據(jù)剛才新加的部分進(jìn)行波特率修改,新的0020001,與CBAUDEX2進(jìn)行運(yùn)算判斷高位位置,之所以cbaud+=30是因?yàn)榍懊嬉呀?jīng)有了30個波特率了,見圖5。這樣內(nèi)核就修改完了。

第三步,應(yīng)用端的配置,應(yīng)用端通常使用tcsetattr這個函數(shù)進(jìn)行配置,在使能之前,對齊c_cflag進(jìn)行賦值就可

struct termios , termios_new;

termios_new.c_cflag |= 0020001;

(其余配置省略)

tcsetattr(fdcom, TCSANOW, &termios_new);

這樣串口波特率即更改為100k,如需其他波特率在頭文件處增加,應(yīng)用端賦值對應(yīng)數(shù)值即可。

相關(guān)推薦

奉化市| 阿荣旗| 睢宁县| 布拖县| 武威市| 高平市| 共和县| 江阴市| 横峰县| 遵义市| 乳山市| 达尔| 西乡县| 济源市| 韶山市| 论坛| 平南县| 赫章县| 乌拉特中旗| 谷城县| 永仁县| 洛浦县| 嘉黎县| 夏津县| 邵武市| 定安县| 太谷县| 洛川县| 临江市| 洱源县| 汶上县| 台安县| 湖州市| 林西县| 波密县| 中方县| 新宾| 肇源县| 民权县| 乌海市| 射洪县|