新闻详情

新闻详情

首页 / 资讯中心 / 详情

嵌入式学习 day60:ARM汇编——触摸屏与SPI

发布时间:2026/9/30 8:41:45来源:尧图网络
嵌入式学习 day60:ARM汇编——触摸屏与SPI
一、GT9147 触摸屏GT9147 是什么GT9147 是一款电容触摸屏控制器。它负责检测触摸屏上的触摸点通过 I2C 把坐标告诉主控。主要特性参数值通信接口I2C设备地址0x14GT1151或 0x5DGT9147支持触摸点最多 5 点中断输出有触摸时产生中断复位有通过 RST 引脚复位和主控的连接I2C2SDA、SCL用来读坐标和写配置GPIO1_IO09中断引脚CT_INT触摸时产生中断GPIO5_IO09复位引脚CT_RST控制复位工作原理上电后主控通过 RST 引脚复位 GT9147主控通过 I2C 读设备 ID确认芯片型号配置 GT9147 进入读坐标模式触摸发生时GT9147 拉低中断引脚产生中断主控在中断服务函数里通过 I2C 读触摸点数量、坐标处理完后通过 I2C 清中断标志二、GT9147 的寄存器寄存器作用0x8140设备 ID4 字节0x814E触摸状态寄存器0x8150触摸点 0 坐标0x8158触摸点 1 坐标0x8160触摸点 2 坐标0x8168触摸点 3 坐标0x8170触摸点 4 坐标0x8040控制寄存器进入读坐标模式触摸状态寄存器0x814E低 4 位触摸点数量0~5bit7坐标就绪标志坐标寄存器每个触摸点的坐标占 4 字节字节 0~1X 坐标低字节在前字节 2~3Y 坐标低字节在前三、gt9147初始化1. I2C 初始化ci2c_init(I2C2);GT9147 接在 I2C2 上。2. 引脚复用cIOMUXC_SetPinMux(IOMUXC_GPIO1_IO09_GPIO1_IO09, 0); // CT_INT IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER9_GPIO5_IO09, 0); // CT_RST IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO09_GPIO1_IO09, 0x10B0); IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER9_GPIO5_IO09, 0x10B0);GPIO1_IO09中断引脚GPIO5_IO09复位引脚3. 设置方向cGPIO1-GDIR | (1 9); // 中断引脚先设为输出 GPIO5-GDIR | (1 9); // 复位引脚设为输出4. 复位 GT9147cGPIO1-DR ~(1 9); // 中断引脚拉低 GPIO5-DR ~(1 9); // 复位引脚拉低 delay_ms(50); GPIO5-DR | (1 9); // 复位引脚拉高释放复位 delay_ms(100);复位序列拉低复位引脚延时拉高延时。GT9147 复位后进入工作状态。5. 读设备 IDcunsigned char buffer[128] {0}; gt9147_read(0x8140, buffer, 4); printf(Gesture ID %s\n, buffer);读 0x8140 寄存器的 4 个字节就是芯片型号字符串。根据读到的型号选择对应的设备地址和坐标寄存器地址。6. 配置中断cIOMUXC_SetPinConfig(IOMUXC_GPIO1_IO09_GPIO1_IO09, 0x0800); // 开漏 GPIO1-GDIR ~(1 9); // 设为输入 GPIO1-ICR1 | (3 18); // 触发方式上升沿 GPIO1-IMR | (1 9); // 中断屏蔽解除电气特性改成开漏0x0800中断引脚设为输入ICR1 设置触发方式IMR 使能中断7. 配置 GICcGIC_SetPriority(GPIO1_Combined_0_15_IRQn, 0); system_interrupt_register(GPIO1_Combined_0_15_IRQn, touch_irq_hangdler); GIC_EnableIRQ(GPIO1_Combined_0_15_IRQn);和之前中断一样设置优先级、注册处理函数、使能。8. 进入读坐标模式cbuffer[0] 0; gt9147_write(0x8040, buffer, 1);写 0x8040 寄存器告诉 GT9147 进入读坐标模式。四、中断处理cvoid touch_irq_hangdler(void) { if ((GPIO1-ISR (1 9)) ! 0) { unsigned char buffer[64] {0}; gt9147_read(0x814E, buffer, 1); unsigned char num buffer[0] 0x0F; if (_gt9147.num ! num) { _gt9147.num num; int i 0; for (i 0; i num; i) { gt9147_read(pointer_add[i], buffer, 4); _gt9147.x[i] (buffer[1] 8) | (buffer[0] 0); _gt9147.y[i] (buffer[3] 8) | (buffer[2] 0); } _gt9147.vail 1; show_pointer(); } buffer[0] 0; gt9147_write(0x814E, buffer, 1); GPIO1-ISR | (1 9); } }1. 检查中断状态cif ((GPIO1-ISR (1 9)) ! 0)检查 GPIO1_IO09 的中断状态确认是触摸中断。2. 读触摸点数量cgt9147_read(0x814E, buffer, 1); unsigned char num buffer[0] 0x0F;读 0x814E 寄存器低 4 位是触摸点数量。3. 读坐标cfor (i 0; i num; i) { gt9147_read(pointer_add[i], buffer, 4); _gt9147.x[i] (buffer[1] 8) | (buffer[0] 0); _gt9147.y[i] (buffer[3] 8) | (buffer[2] 0); }每个触摸点读 4 字节X 低字节、X 高字节、Y 低字节、Y 高字节。合成 16 位坐标。4. 显示坐标cshow_pointer();打印触摸点数量和坐标。5. 清中断标志cbuffer[0] 0; gt9147_write(0x814E, buffer, 1); GPIO1-ISR | (1 9);写 0x814E 寄存器告诉 GT9147 处理完毕写 1 清 GPIO1 的中断标志位清标志是必须的不清的话中断会一直触发。五、SPI 通信SPI 是什么SPISerial Peripheral Interface串行外设接口是一种同步串行通信协议比 I2C 快。四根线线名称作用SCLK时钟主机产生MOSIMaster Out Slave In主机发从机收MISOMaster In Slave Out从机发主机收SSSlave Select片选选择从机和 I2C 的区别部分I2CSPI线数2SCL、SDA4SCLK、MOSI、MISO、SS速度较慢较快拓扑一主多从有地址一主多从有片选应答有 ACK/NACK无全双工半双工全双工SPI 的优点速度快可以到几十 MHz全双工收发可以同时进行协议简单没有地址、应答只有片选SPI 的缺点线多每个从机需要一根片选线没有应答不知道对方收没收到六、SPI 初始化1. 引脚复用cIOMUXC_SetPinMux(IOMUXC_UART2_CTS_B_ECSPI3_MOSI, 0); IOMUXC_SetPinMux(IOMUXC_UART2_RTS_B_ECSPI3_MISO, 0); IOMUXC_SetPinMux(IOMUXC_UART2_RX_DATA_ECSPI3_SCLK, 0); IOMUXC_SetPinMux(IOMUXC_UART2_TX_DATA_ECSPI3_SS0, 0);把 UART2 的四个引脚复用成 ECSPI3 的 MOSI、MISO、SCLK、SS0。2. 电气特性cIOMUXC_SetPinConfig(IOMUXC_UART2_CTS_B_ECSPI3_MOSI, 0x10B1); // ...0x10B1配置电气特性比之前用的0x10B0多一点可能开了上拉或其他特性。3. 片选引脚cGPIO1-GDIR | (1 20); GPIO1-DR | (1 20);GPIO1_IO20 用作片选设为输出默认拉高不选中。4. 配置 CONREGcECSPI3-CONREG 0; ECSPI3-CONREG | (7 20) | (14 12) | (2 8) | (1 4) | (1 3);bits 20-23PRE_DIV预分频bits 12-15POST_DIV后分频bits 8-11CHANNEL_MODE通道模式bit 4SMC开始模式控制bit 3SCLK_POL时钟极性5. 配置 CONFIGREGcECSPI3-CONFIGREG 0; ECSPI3-CONFIGREG | (1 20) | (1 4) | (1 0);bit 20SCLK_CTL时钟控制bit 4DATA_CTL数据控制bit 0SS_CTL片选控制6. 使能 SPIcECSPI3-CONREG | (1 0);CONREG 的 bit0 是ENSPI 使能位。七、收发数据cunsigned int ecspi3_write_and_read(unsigned int data) { unsigned int ret 0; while((ECSPI3-STATREG (1 0)) 0); // 等 TX FIFO 就绪 ECSPI3-TXDATA data; // 写数据 while((ECSPI3-STATREG (1 3)) 0); // 等 RX FIFO 有数据 ret ECSPI3-RXDATA; // 读数据 return ret; }SPI 是全双工的发一个字节的同时也收一个字节。流程等STATREG的 bit0TETX FIFO Empty表示可以写数据写TXDATA等STATREG的 bit3RRRX FIFO Ready表示收到数据读RXDATA注意SPI 没有只发或只收每次收发都是同时进行的。要读数据必须发一个哑字节dummy byte通常是 0xFF来产生时钟。八、今日总结今天学了 GT9147 触摸屏和 SPI 通信核心要点GT9147电容触摸屏控制器通过 I2C 通信引脚I2C2SDA、SCL、GPIO1_IO09中断、GPIO5_IO09复位初始化复位 → 读设备 ID → 配中断 → 进入读坐标模式中断处理读触摸点数量 → 读坐标 → 清中断标志坐标格式每点 4 字节X 低、X 高、Y 低、Y 高SPI同步串行通信四根线SCLK、MOSI、MISO、SS全双工收发同时进行寄存器CONREG控制、CONFIGREG配置、STATREG状态、TXDATA/RXDATA数据收发流程等 TX 就绪 → 写数据 → 等 RX 就绪 → 读数据特点速度快无应答用片选选择从机
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【NLP】大模型长文本处理技术与GLM-4-Plus评测:从上下文窗口到TaoToken统一调用 2026/9/30 13:51:19

【NLP】大模型长文本处理技术与GLM-4-Plus评测:从上下文窗口到TaoToken统一调用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
【Linux指南】动静态库系列(九):动态库如何进入进程地址空间:从磁盘 .so 到共享内存映射 2026/9/30 13:51:06

【Linux指南】动静态库系列(九):动态库如何进入进程地址空间:从磁盘 .so 到共享内存映射

文章目录一、动态库为什么比静态库更常用二、动态库也是文件三、动态库加载的整体流程四、从磁盘 .so 到物理内存五、从物理内存到进程虚拟地址空间六、多个进程如何共享同一个动态库七、共享的是代码,不是什么都共享八、为什么动态库加载地址不固定九、使用 /proc …

阅读更多 →
PSE认证证书有效期多久,产品改款后是否需要重新做认证? 2026/9/30 13:50:59

PSE认证证书有效期多久,产品改款后是否需要重新做认证?

PSE并不是一张所有产品都按统一年限有效的“永久证书”。需要先区分产品是否属于特定电气用品,以及企业持有的是符合性检查证书、检测报告还是其他合规文件。产品改款后,也不能仅凭外观变化判断是否需要重新认证,关键要看改动是否影响安全结构…

阅读更多 →
企业级AI知识库建设实战:从RAG架构到混合检索与元数据治理 2026/9/30 13:50:45

企业级AI知识库建设实战:从RAG架构到混合检索与元数据治理

开头今年上半年,我们海博团队在推进 AI-Native 研发体系的时候,发现一个特别扎心的事实:模型能力早就不是瓶颈了,真正卡住团队进度的是知识底座。代码仓库里那些散落的决策文档、写了没人看的架构说明、只有某个老员工脑子里的业务…

阅读更多 →
渲染书籍目录汇总:六大分支与学习路径全解析 2026/9/30 13:50:45

渲染书籍目录汇总:六大分支与学习路径全解析

作为常年跟渲染打交道的人,我书架上的这份“渲染书籍目录汇总”已经维护了一年多,标题里的“不断更新中”不是客套话,是真实状态。之所以维护这个目录,是因为每年都要被问同一个问题:想学渲染,到底该看哪些…

阅读更多 →
渲染书籍目录汇总:从实时渲染到引擎源码的系统学习路径 2026/9/30 13:50:45

渲染书籍目录汇总:从实时渲染到引擎源码的系统学习路径

做渲染相关工作这些年,陆陆续续收了不下五十本相关的书,真正从头翻到尾的却没几本。这次给自己定了个小目标,按照“实时渲染、离线渲染、引擎源码、工程实践”四个方向,把值得读的书和它们的目录结构重新整理了一遍,顺…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉