触摸屏模块应用#

例程相关文件夹:lcd_touch

Vivado工程在vivado.zip压缩包中:lcd_touch

例程资料中给出了vivado工程,petalinux工程,本实验还是在前面HDMI实验的Petalinux工程基础上进行修改的,需要先掌握前面的实验内容。

vivado工程简介#

  1. 触摸屏中断处理,由于触摸屏默认中断是低电平,而PS来自PL的中断只能是高电平或上升沿,这里加一个非门反相。中断连接到PS的第一个中断管脚,后面我们可以根据这些信息推断Linux下中断号,Linux下中断编号可以参考Xilinx文档UG585

../_images/image1183.png
  1. 液晶屏时钟处理,由于液晶屏是下降沿采样,这里使用非门把时钟反相输出,后面的与门没有什么作用,仅仅用于信号的连接。

../_images/image2159.png
  1. 液晶屏背光设置为一直高电平,就是最亮状态,可能会让液晶屏发热较多

  2. IIC用于读取液晶屏触摸信息

../_images/image3135.png

触摸屏驱动#

  1. alinx_ts.c为芯驿电子提供的触摸屏驱动,位于内核目录drivers/input/touchscreen中

../_images/image498.png
  1. 触摸屏还要配套编码器才能工作,ax_lcd_encoder.c是芯驿电子提供的DRM编码器驱动,位于内核drivers/gpu/drm/xilinx

../_images/image579.png

内核驱动配置#

内核驱动中涉及到drm显示的部分请参考第八章HDMI显示的内核配置,可以在HDMI显示的工程基础上添加下列配置,也可以用BSP包重新生成工程。

  1. Device Drivers > Input device support > [*] Touchscreens使能触摸屏

../_images/image674.png
  1. 选择 <*> Alinx_ts I2C Touchscreen support

../_images/image767.png
  1. 在Device Drivers > Graphics support中选择<*> ALINX LCD DRM Encoder Driver,

../_images/image866.png
  1. 在Device Drivers > Common Clock Framework中选择<*> Digilent axi_dynclk Driver

../_images/image956.png
  1. 如果用到其他外设,请更加需要配置驱动

设备树配置#

在i2c0下挂触摸屏模块,设备地址为0x5D(7bit地址)。详细设备树可以参考例程petalinux工程目录下project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi文件

../_images/image1049.png

触摸屏测试#

  1. 用例程给的petalinux工程生成的BOOT.BIN和image.ub,放入SD卡

  2. 挂载NFS,运行前面例程的QT测试程序

mount -t nfs -o nolock 192.168.1.55:/home/alinx/work /mnt

cd /mnt

mkdir /tmp/qt

mount qt_lib.img /tmp/qt

cd /tmp/qt

source ./qt_env_set.sh

cd /mnt

cd build-qt_test-ZYNQ-Debug

./qt_test

  1. 运行效果

../_images/image111.jpeg ../_images/image1249.png

AX7021硬件连接(J15扩展口)请忽略显示内容

../_images/image1345.png

AX7020/AX7010硬件连接(J11扩展口)请忽略显示内容