来源:韦东山嵌入式专栏_ARM裸机加强版维基教程
作者:韦东山

本笔墨数:2865,阅读时长:4分钟
回顾上节触摸屏利用事理
ADC电阻触摸屏硬件原
在不该用触摸屏的时候,必须要把 S1 S2 S3断开,S4 S5闭合,只有这样当我按下触摸屏,上面的电平才能从高变低,会产生一个中断旗子暗记,而当我去读取X坐标的值时
必须让S1 S3闭合,这样电流才可以通过,同时让S2 S4 S5断开,这时候YP这层膜就相称于探针一样去丈量电压
当我读取y坐标值
必须让S2 S4闭合,这样电流才可以流 下来,同时S1 S3 S5断开,这个时候XP这层膜就相称于探针一样,我可以来丈量这里的电压,从而得到Y坐标的电压值
在丈量x y坐标时,这个S5上拉电阻都要断开, 我们须要掌握这几个开关,实际上2440就供应了这几个开关的掌握方法, 打开2440的芯片手册看触摸屏时怎么操作的, 从440到450统共10页不到, 我们看有一个8:1 MUX的多路选择器,以及XP YP
442页触摸屏接口模式
正常模式,在上节视频中我们有讲解过
x y分离转换模式,
看看我们的X Y坐标事理图,可以单独转换X坐标 单独转换Y坐标
换句话说便是逐个去丈量X Y坐标;
他首先会启动X坐标的ADC转换,转换成功后数据会保存在ADCDAT0里,同时会产生一个中断,在这个中断做事程序里,就可以把X坐标读取出来,然后可以启动Y坐标的转换,转换成功后数据会保存在ADCDAT,同时会产生一个中断;
进入这个中断把Y坐标读取出来 丈量一次会产生2个中断,一个是X坐标中断,一个是Y坐标中断。
自动的或连续的X/Y坐标转换模式
也便是说不须要单独掌握,不须要单独去读取X坐标Y坐标,可以设置寄存器,让它一次性的丈量X坐标丈量Y坐标,X坐标保存在ADCDAT0 Y坐标保存在ADCDAT1,末了产生一个中断,也便是读取X/Y坐标只须要产生一次中断。
等待中断模式所谓等待中断模式,便是等待按下或者等待松开;对付下面这幅图,我按下的时候XP从高电平变为低电平,松开时,XP从低电平变为高电平,这便是按下松开都可以检测到。
我们要等待按下或者松开时 须要设置rADCTSC =0xd3这个值
Standby Mode静默模式/省电模式(我们不关心这个)
443页编程要点
AD转换数据时可以通过中断或者查询模式来得到数据,利用中断模式时,从AD转换开始,到得到数据可能会有些延迟,由于中断做事程序的进入和退出须要一定的韶光,(也便是说,如果你对数据转换的速率哀求的非常高,就可以利用查询办法),可以查询ADCCON[15]来判断是否转换结束
444页 剩下便是寄存器操作
ECFLG状态位 AD转换是否结束PRSCEN 使能ADC转换PRSCVL 设置A/D转换预分频值SEL_MUX选择输入通道,后面我们利用自动转换XY坐标,以是这里不须要设置ENABLE_START 启动转换
ADCTSC这个寄存器是主要的
UD_SEN Bit8是用来判断触摸屏是被按下还是被松开
0表明被按下,1表明被松开
YM_SEN Bit7 YM开关使能掌握S4
0表示断开 1闭合
YP_SEN Bit6 YP开关 0表示闭合 1 表示断开
寄存器位的含义不同XM_SEN Bit5 XM开关 0 断开 1 闭合
XP_SEN Bit4 XP开关
0 闭合 1 断开
PULL_UP Bit3 掌握S5开关 0 上拉(闭合)
1 断开
AUTO_PST Bit2 自动连续转换X坐标Y坐标
上节视频里我们设置是 0 正常的ADC转换如果须要连续转换ADC坐标的话,须要设置为1 ,如果须要手动转换ADC坐标的话,须要设置为0
XY_PST Bit[1:0] 对付手动转换X Y坐标我们须要手动设置XY_PST 里面的位,是丈量X坐标还是丈量Y坐标, 也可以设置这两位即是11 让其即是等待模式, 也便是等待触摸屏被按下或者被松开.
如果设置自动连续转换的话,Bit2 AUTO_PST设置为1 XY_PST设置为00
如果利用手动转换的话设置AUTO_PST为0 XY_PST设置为01 手动转换X坐标模式 或者设置为10 Y坐标转换模式
447页
ADCDATA0 ADC数据寄存器
UPDOWN Bit15 可以读取这一位去判断触摸屏是按下还是松开AUTO_PST Bit14 自动丈量XY_PST Bit[13:12] 和上面ADCTSC寄存器中 AUTO_PST Bit2 XY_PST Bit[1:0]事理相同XPDATA Bit[9:0]最低10位用来保存ADC的值
448页
ADCDAT1寄存器 和ADCDAT0功能一样的,只不过保存的数据不同
这个的低10位是用来保存 Y坐标的值
接下来是ADCUPDN触摸屏按下或者松开检讨寄存器
TST_UP Bit1 触摸屏松开中断产生TST_DN Bit0 触摸屏按下中断产生
手册看完了,涉及到中断,我们看下这个图
它会涉及两个中断,按下或者松开,触摸笔的状态中断,其余一个启动ADC往后,ADC结束时也会产生一个中断,但是这个手册里没有看到中断的使能寄存器
那我们预测一下,ADC模块或者触摸屏模块一定会发出中断首先是ADC或者触摸屏产生中断,通过中断掌握器发送中断给CPU
肯定有寄存器禁止/使能ADC或者触摸屏中断
我们看看中断掌握器芯片手册中都须要设置什么
ADC中断源
ADC结束中断或者触摸屏中断,看来他们合起来用一个中断 既然合并一定还会有一个寄存器来分辨到底是ADC还是触摸屏发生的中断变革
SRCPND寄存器 31位为ADC中断
设置Bit[31]
INTMOD寄存器 来决定是普通中断还是快中断模式
设置Bit[31]
INTMSK寄存器 用来表示是否屏蔽这个中断
设置Bit[31]
优先级我们不须要设置
INTPND
设置Bit[31]表示中断是否正在处理
INTOFFSET 设置Bit[31]
到底是ADC中断还是触摸屏中断,肯定有其他寄存器可以设置
SUBSOURCE PENDING寄存器
INT_ADC_S Bit[10]表示ADC中断INT_TC Bit[9]表示触摸屏中断
INTSUBMSK 该当也是同样的位
INT_ADC_S Bit[10]表示ADC中断激活/屏蔽INT_TC Bit[9]表示触摸屏中断激活/屏蔽
我们可以通过INTSUBMSK来屏蔽ADC中断或者TouchScreen中断 当然也可以是能某个中断 可以通过SUBSRCPND来分辨到底产生哪个中断 INTSUBMSK 和SUBSOURCPND这两个寄存器都会搜集到一起 变成一个叫做INT_ADC的中断来发送给CPU
框图便是这样
我们怎么写程序? 写出一个框架
1 初始化ADC/TouchScreen接口ADCCON时钟接口2 一开始触摸屏是没有被按下的,设置TS处于等待中断模式3 设置中断INTSUBMSK使能ADC中断和触摸屏中断,还有INTMSK设置这个寄存器使能ANT_ADC让他能够发给CPU4 按下触摸屏,进入TS中断4.1 进入自动采集模式(自动转换XY坐标)4.2 启动ADC5.转换完之后产生ADC中断5.1 读数据5.2 再次进入 “'等待中断”'模式5.3 启动定时器,处理长按或者滑动6 定时器中断 6.1 判断是否松开,若松开结束 6.2 若按下重新实行 4.2启动ADC步骤
「新品首发」STM32MP157开拓板火爆预售!
首批仅300套










