1. ATK-7016
电容触摸屏一般内部有驱动IC,主控通过I2C接口读取驱动IC里的触摸坐标数据。ATK-7016使用的是FT5426,该驱动IC为15*28的数据结构,有15个感应通道,28个驱动通道,最多支持5点电容触摸。ATK-7016有4个IO连接主控,粉笔为SCL,SDA,RST和INT。可以由INT中断服务函数读取触摸数据。
FT5426的I2C设备地址为0X38。其寄存器主要包括0x00模式寄存器,0x02触摸状态寄存器,0x03-0x1E为事件标志和五个触摸点的XY坐标高低位数据(1个触摸点需要6个寄存器),0xA1/2为版本寄存器(固件版本号),0xA4为中断模式寄存器。
1.1 AFT5426初始化代码
正点原子的代码好像有问题,直接用他提供的驱动也不能实现主函数功能。
2. LCD背光调节
基本原理是利用PWM快速交替点亮熄灭背光,实现PWM调光。I.MX6U有8路PWM信号。每个PWM包含一个16位计数器和4x16的数据FIFO。
上图PWM各序号部分功能如下:
①时钟源选择器:ipg_clk,ipg_clk_highfreq,ipg_clk_32k。
②12位分频器。
③16位计数器寄存器,保存PWM的计数值。向上计数,从0x0000到PWMx_PWMPR(x=1-8)+1。
④16位周期寄存器,控制PWM的频率。
⑤16位采样寄存器,控制PWM的占空比。
PWM开始计数的时候先输出高(低)电平,然后当采样FIFO采样值和计数值比较相等的时候PWM电平反转输出,计数器继续计数,到PWMx_PWMPR+1为止,一个周期完成。采样FIFO的采样值来源于PWMx_PWMSAR。
⑥PWM中断信号。
⑦输出IO,输出PWM信号。I.MX6U的GPIO1_IO8可以复用为PWM1_OUT。
重要寄存器:
1)PWMx_SR
PWMx_PWMSAR写入采样值必须在FIFO没满的时候写入,否则会导致PWMSR的FWE(bit6)位置1,表示错误。FIFO任何时候都可以写入,但是只有在PWM使能时可以读取。PWMx_SR寄存器的FIFOAV(bit2:0)记录了当前FIFO中有多少数据。
每当从PWMSAR读取一次数据或者产生一个周期的PWM信号就会使FIFO里的数据减一。当FIFO为空时触发PWM的FIFO空中断,中断中可以进行FIFO数据写入。这样才能产生源源不断的PWM波。
2)PWMx_PWMCR
①FWM(bit27:26):FIFO水位线,设置FIFO空余位置为多少时算作为空。
0表示FIFO空余位置≥1的时候为空;1表示空余位置≥2的时候为空;类似的,还可以设置为2和3。
②POUTC(bit19:18):PWM输出控制位,用于设置PWM输出模式。
为0时PWM首先输出高电平,当采样值和计数值相等时转为低电平。为1时相反。为2为3时不输出PWM信号。这里设置为0,这样采样值越大高电平时间越长,占空比越大。
③CLKSRC(bit17:16):PWM时钟源选择。
为0关闭,为1选择ipg_clk,为2选择ipg_clk_highfreq,为3选择ipg_clk_32k。本次设置为1,因此PWM时钟频率为66MHz。
④PRESCALER(bit15:4):设置分频。0-4095对应1-4096分频。
⑤SWR(bit3):软件复位。写1复位,自动清零。
⑥REPEAT(bit2:1):重复采样设置。
用于设置FIFO中的每个数据可以使用几次。可以设为0-3表示可用1-4次。本次设为0。
⑦EN(bit0):PWM使能位。1使能0关闭。
3)PWMx_PWMIR:中断控制寄存器
①CIE(bit2):比较中断使能位。为1的时候使能,0关闭。
②RIE(bit1):翻转中断使能位。
计数值等于采样值并回滚到0x0000的时候产生的中断,1使能0关闭。
③FIE(bit0):FIFO空中断,为1使能,0关闭。
4)PWMx_PWMSR
①FWE(bit6):FIFO写错误事件。为1表示出错。
②CMP(bit5):FIFO比较事件发生标志位。为1表示发生。
③ROV(bit4):翻转事件标志位,为1表示发生。
④FE(bit3):FIFO空标志位,为1表示FIFO为空。
⑤FIFOAV(bit2:1):记录FIFO中有效数据的个数,为0-4。
5)PWMx_PWMPR:周期寄存器
只有低十六位有效。PWM频率计算公式为:PWMO(Hz)=PCLK(Hz)/(PERIOD+2)。PCLK是最终进入PWM的时钟频率,再经过PERIOD分频后得到PWMO为PWM的输出频率。
假如PCLK 的频率为1MHz,要产生一个频率为1KHz的PWM信号,可以设置PERIOD = 1000000 / 1000 – 2 = 998。
6)PWMx_PWMSAR:采样寄存器
只有低十六位有效,为采样值。计数值小于采样值输出高,大于等于输出低,小于PWMPR的PERIOD的时候也输出低。(按照我们的设置)
假如要设置50%的占空比。SAMPLE=(PERIOD+2)/2=1000/2=500。(这里PERIOD参考上个寄存器设置为998)
配置步骤:
1.配置GPIO1_IO08
2.初始化PWM1
3.设置中断
4.使能PWM1