声明:资料归本公司同事整理提供
1.TP
LCD接口上一般有四根模拟信号管脚(X+/X-Y+/Y-)。
在TP上的触摸转换成X/Y的模拟信号,该信号通过TP IC的ADC采样后转化为触屏的(x,y)坐标值。
触屏都有X/Y两层,有的还有Z轴,用于检测触屏压力。
TP IC经常用到的是6个管脚,分别是SPI接口的DIN,DOUT,DCLK,CS管脚和指示TP IC内部是否忙碌的BUSY管脚,以及1个中断INT管脚,用于提示BB处理触屏信号到来。有些TP IC是I2C接口的,并且不带BUSY管脚。
在touch_panel_spi.h里;
#define SPI_DIN_PIN gpio_tp_spi_din_pin /*GPO*/
#define SPI_CLK_PIN gpio_tp_spi_clk_pin /*GPO*/
#define SPI_DOUT_PIN gpio_tp_spi_dout_pin /*GPI*/
#define SPI_CS_PIN gpio_tp_spi_cs_pin /*GPO*/
#define SPI_BUSY_PIN gpio_tp_spi_busy_pin /*GPI*/
#define SET_CLK_HIGH() (GPIO_WriteIO(1,SPI_CLK_PIN))
#define SET_CLK_LOW() (GPIO_WriteIO(0,SPI_CLK_PIN))
#define SET_DATA_HIGH() GPIO_WriteIO(1,SPI_DIN_PIN)
#define SET_DATA_LOW() GPIO_WriteIO(0,SPI_DIN_PIN)
#define GET_DATA_BIT() GPIO_ReadIO(SPI_DOUT_PIN)
#define GET_BUSY_BIT() GPIO_ReadIO(SPI_BUSY_PIN)
GPIO参数BUSY管脚不要上拉,因为BUSY高电平时TP IC内部为忙碌状态。
整个TP的实现简单流程:
触屏—中断—HISR—tp_task_main—tp_read_adc—MMI层—执行事件
tp_task_main在touch_panel.c里,tp_read_adc在touch_panel_custom.c里
tp有两种工作模式:点和手写。
屏幕的校准:y=kx+b 通过左上角校准点和右上角校准点的测得k和b,再用中间的校准点来验证k和b,如果在有效范围内则校准通过。当我们书写出现飞笔的时候一般的处理方式是多点平均的算法来处理。
2.Driver Tool
在工程目录里打开code/custom/drv/Drv_Tool打开DrvGen.exe和code/custom/drv/misc_drv/RATECH53_09A_BB/codegen/codegen.dws.
在这里面我们可以看到GPIO,EINT,ADC,KEYPAD设置。系统有几十个GPIO口,原理图标记出来的就对应的去修改,没有的最好保持不变。
GPIO Def.mode是指开机后gpio模块初始化后的GPIO的模式。
GPIO一般有4种模式M0/M1/M2/M3,是指在gpio模块初始化以后,我们需要选用的gpio模式的种类和个数,如GPIO0有如下M0,M1,M2,M3四种工作模式:
0:GPIO,1:CMRST,2:CLKM0,3:DSP_GPO0
PULL选项是上拉、下拉:
Def.dir:开机后gpio模块初始化后的GPIO的输入输出方向配置,
In/Out:是指gpio模块初始化以后,我们需要选用的输入或输出方向。
Varname1/2:给gpio口一个名称,这样你就可以在程序里使用初始化的名字来调用这个gpio口。
UEM GPIO Sting:作调试用,在*#9646633#的dev->GPIO里面可以检查到。
在dws里面配置gpio以后,生成gpio_var.c和gpio_drv.h。其中gpio_drv.h有所有gpio的描述,如其中的gpio模式。
#define GPIO_PORT0_MODE MODE_0
#define GPIO_PORT1_MODE MODE_0
#define GPIO_PORT2_MODE MODE_1
#define GPIO_PORT3_MODE MODE_1
#define GPIO_PORT4_MODE MODE_1
……
……
#define GPIO_PORT73_MODE MODE_2
#define GPIO_PORT74_MODE MODE_1
#define GPIO_PORT75_MODE MODE_1
不同的gpio模式,4中模式都不相同。
EINT Setting:
外部中断一般有8个,在dws里面配置。然后生成eint_var.c,如
const unsigned char AUX_EINT_NO = 0;
const unsigned char BT_EINT_NO = 1;
const unsigned char WIFI_EINT_NO = 2;
const unsigned char JOG_BALL_EINT1_NO = 3;
const unsigned char GSENSOR_EINT1_NO = 4;
const unsigned char OFN_EINT_NO = 5;
const unsigned char JOG_BALL_EINT3_NO = 6;
const unsigned char JOG_BALL_EINT4_NO = 7;
Debounce time是去抖时间。
3.Vibrator 震动马达
在文件gpio_drv.c里,一般的马达都是通过拉高拉低电平来控制马达启动或停止。
MT6253的马达控制用pwm信号来控制,可以通过调整占空比和频率来调试马达的振动强度。
PWM(脉冲宽度调制),英文全称是“Pulse Width Modulation”的缩写,简称脉宽调制,时域表现为连续的方波。
Pwms_level:占控比。
4.Speaker/音频功放:
音频功放的控制在afe.c中。
音频功放有一定的线性放大的范围,超过一定的范围就会削波失真。
音频功放的控制基本都采用gpio来打开和关断音频功放。
MP3播放流程中的数据流向:
T卡—内存—dsp解码—PCM信号—模拟基带DA转换和内部模拟增益—音频功放—喇叭输出
消除pop音原理:
开始播放时的pop音:先输出音频,延迟一段时间后,再打开音频功放
MP3播放结束时的pop音:先关掉音频功放,延迟一段时间后,再停止输出音频。