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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Linux下编写GT911触摸驱动(Download)

發布時間:2023/12/24 综合教程 45 生活家
生活随笔 收集整理的這篇文章主要介紹了 Linux下编写GT911触摸驱动(Download) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題一:資源獲取Gt911數據手冊

在韋老師給的資料里,路徑為\06_Datasheet\Extend_modules\7寸LCD模塊\電容觸控芯片GT911 Datasheet_121120(海威思.pdf

問題二:需要準備哪些知識

1.能夠修改設備樹

2.能夠編寫字符設備驅動

3.能夠在linux下編寫中斷程序

4.能夠在linux下編寫IIC收發程序

5.了解input子系統

6.移植tslib(用于校準,測試觸摸屏)

gt911硬件連接(韋老師的板子):

可以看到gt911只需要4個IO來控制

SDA:IIC數據線———–UART5_RXD

SCL:IIC時鐘線———–UART5_TXD

RST:復位引腳———–SNVS_TAMPER2

INT:中斷引腳————GPIO1_IO05

問題三:如何修改設備樹

UART5_RXD和UART5_TXD引腳屬于IIC2,在原廠的設備樹中已經幫我們做好了IIC2的初始化,因此我們需要在i2c2節點下添加gt911設備

&i2c2{

clock_frequency=<100000>;

pinctrl-names=“default”;

pinctrl-0=<&pinctrl_i2c2>;

status=“okay”;

codec:wm8960@1a{

compatible=“wlf,wm8960”;

reg=<0x1a>;

clocks=<&clksIMX6UL_CLK_SAI2>;

clock-names=“mclk”;

wlf,shared-lrclk;

};

gt9xx@5d{

compatible=“goodix,gt9xx”;

reg=<0x5d>;

pinctrl-names=“default”;

pinctrl-0=<&pinctrl_tsc_gt9xx>;

interrupt-parent=<&gpio1>;

interrupts=<5IRQ_TYPE_EDGE_FALLING>;

reset-gpios=<&gpio52GPIO_ACTIVE_LOW>;

irq-gpios=<&gpio15GPIO_ACTIVE_LOW>;

irq-flags=<2>;/*1:rising2:falling*/

/*7*/

goodix,cfg-group0=[

002003E001050D000108

280F5032030500000000

000000000000008A2A0C

45470C0800000002022D

00000000000364320000

00286494C50207000004

9C2C008F3400843F007C

4C00775B007700000000

00000000000000000000

00000000000000000000

00000000000000000000

000018161412100E0C0A

08060402FFFF00000000

00000000000000000000

000016181C1D1E1F2021

22241312100F0A080604

0200FFFFFFFFFFFF0000

00000000000000000000

000000002401

];

status=“okay”;

};

reg:IIC從設備地址

pinctrl-0:使用的引腳(中斷引腳和復位引腳)

goodix,cfg-group0:gt911需要配置的寄存器的默認值

然后我們還需要在設備樹中添中斷引腳的復位引腳

在iomux節點下添加以下內容

pinctrl_tsc_gt9xx:gt9xx_tscgrp{

fsl,pins=<

MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO020x10B0

MX6UL_PAD_GPIO1_IO05__GPIO1_IO050x10B0

>;

};

其中中斷引腳和復位引腳都配置為上拉模式

問題四:gt911初始化流程

gt911地址配置

gt911地址可以配置為0x28和0xBA

這里我們選擇0xBA地址,因此上電時序為

INT=0

RST=0

延時10ms

RST=1

延時10ms

依據手冊,還有一步是要將INT腳轉為懸浮輸入態

由于linux的IIC地址在低7位,因此gt911的實際地址是0xBA>1=0x5d,這就是為什么我們在設備樹中將GT911的地址配置為0x5d

gt911需要配置的寄存器

gt911需要配置186個寄存器,分別為0x8047-0x8100

在配置流程為

軟件復位

配置寄存器0x8047-0x8100

結束軟件復位

其中軟件復位由0x8040寄存器控制:

寫入 2 即可復位 GT911,在硬復位之后,一般要往該寄存器寫 2 實行軟復位。然后寫入 0,即可正常讀取坐標數據(并且會結束軟復位)。

0x8047-0x8100寄存器中以下寄存器比較重要

這里共186個寄存器,用于配置GT9147的各個參數,這些配置一般由廠家提供給我們(一個數組),所以我們只需要將廠家給我們的配置,寫入到寄存器中即可。

3.初始化中斷

寄存器配置過后我們需要將INT引腳初始化為中斷模式,下降沿觸發。

4.讀取坐標

坐標寄存器地址為0x8140-0x8177

0x8140~0x8143 是產品ID寄存器,用于保存產品ID,對于GT9147,這4個寄存器讀出來是:9、1、4、7四個字符(ASCII碼格式)。一次可以通過這四個寄存器的值來判斷驅動IC的型號,從而判斷是OTT2001A還是GT9147,以便執行不同的初始化。

其中0x814E (狀態寄存器) 比較重要,

我們僅關心最高位和最低四位,最高位用于表示buffer狀態,如果有數據(坐標/按鍵),buffer就會是1,最低四位用于表示有效觸點的個數,范圍是:0~5,0表示沒有觸摸,5表示有5點觸摸。

當中斷發生時我們需要讀取這個寄存器的值,bit7告訴我們是否可以讀取,當我們讀取完成之后還要將bit7清零,否則中斷一直觸發。

0x814F-0x8177(共30個寄存器)為坐標點,讀取相應的寄存器即可獲取坐標。

這里共分成5組(5個點),每組6個寄存器存儲數據,以觸點1的坐標數據寄存器組為例,一般只用到觸點的x,y坐標,所以只需要讀取0x8150~0x8153的數據,組合即可得到觸點坐標。其他4組分別是:0x8158 0x8160 0x8168 和0x8171等開頭的16個寄存器組成,分別針對觸點2~4的坐標。同樣GT9147也支持寄存器地址自增,只需要發送寄存器的首地址,然后連續讀取即可,GT9147會地址自增,從而提高讀取速度。

結語:其實網上由gt911的官方庫,可以很方便的移植,但是由于這個驅動相對簡單,所以自己寫收獲會更多。

參考于:http://bbs.100ask.net/article/35

總結

以上是生活随笔為你收集整理的Linux下编写GT911触摸驱动(Download)的全部內容,希望文章能夠幫你解決所遇到的問題。

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