|
发表于 2015-8-21 21:25:10
|
显示全部楼层
这个是我们做的RA8875触摸部分,读取触摸数值的部分不太一样,可以试试我们的。
=============================================
/*
*********************************************************************************************************
* 函 数 名: RA8875_TouchInit
* 功能说明: 初始化触摸板
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void RA8875_TouchInit(void)
{
RA8875_WriteReg(0xF0, (1 << 2)); /* 开启触控面板中断位 */
/*
REG[71h] Touch Panel Control Register 1 (TPCR1)
Bit7 N/A
Bit6 触控面板模式设定
0 : 自动模式。
1 : 手动模式。
Bit5 触控面板控制器ADC 参考电压(Vref)来源设定
0 : 内部产生参考电压。
1 : 外部输入参考电压,ADC 参考电压准位= 1/2 VDD。
Bit4-3 N/A
Bit2 触控中断讯号的消除弹跳电路选择
0: 关闭消除弹跳电路。
1: 开启消除弹跳电路。
Bit1-0 触控面板手动模式之选择位
00b : 闲置模式。触控控制单元进入闲置模式。
01b : 侦测触摸事件发生。在此模式控制器会侦测触摸事件的发
生,事件发生可以引发中断或是由缓存器得知(REG[F1h]
Bit2)。
10b : X 轴数据撷取模式。在此模式触摸位置的X 轴数据会被储
存至 REG[72h] 和REG[74h]。
11b : Y 轴数据撷取模式。在此模式触摸位置的Y 轴数据会被储
存至REG[73h] and REG[74h]。
*/
RA8875_WriteReg(0x71, (0 << 6) | (0 << 5) | (1 << 2)); /* 选择自动模式 */
/*
REG[70h] Touch Panel Control Register 0 (TPCR0)
Bit7 触控面板功能设定
0 : 关闭。
1 : 开启。
Bit6-4 触控面板控制器取样时间设定
000b : ADC 取样时间为512 个系统频率周期。
001b : ADC 取样时间为 1024 个系统频率周期。
010b : ADC 取样时间为 2048 个系统频率周期。
011b : ADC 取样时间为 4096 个系统频率周期。
100b : ADC 取样时间为 8192 个系统频率周期。
101b : ADC 取样时间为 16384 个系统频率周期。
110b : ADC 取样时间为 32768 个系统频率周期。
111b : ADC 取样时间为65536 个系统频率周期。
Bit3 触控面板唤醒模式
0 : 关闭触控事件唤醒模式。
1 : 触控事件可唤醒睡眠模式。
Bit2-0 触控面板控制器ADC 频率设定
000b : 系统频率。
001b : 系统频率 / 2。
010b : 系统频率 / 4。
011b : 系统频率 / 8。
100b : 系统频率 / 16。
101b : 系统频率 / 32。
110b : 系统频率 / 64。
111b : 系统频率 / 128。
注 : ADC 的输入频率设定不能超过10MHz。
*/
RA8875_WriteReg(0x70, (1 << 7) | (3 << 4) | (0 << 3) | (2 << 0)); /* 开启触摸功能; */
}
/*
*********************************************************************************************************
* 函 数 名: RA8875_TouchReadX
* 功能说明: 读取X位置ADC (这个函数被定时中断服务程序调用,需要避免寄存器访问冲突 )
* 形 参: 无
* 返 回 值: ADC值,10Bit
*********************************************************************************************************
*/
uint16_t RA8875_TouchReadX(void)
{
uint16_t usAdc;
uint8_t ucRegValue;
uint8_t ucReg74;
/* 软件读取中断事件标志 */
ucRegValue = RA8875_ReadReg_Int(0xF1);
if (ucRegValue & (1 << 2))
{
ucReg74 = RA8875_ReadReg_Int(0x74);
usAdc = RA8875_ReadReg_Int(0x72); /* Bit9-2 */
usAdc <<= 2;
usAdc += (ucReg74 & 0x03);
s_usTouchX = usAdc;
usAdc = RA8875_ReadReg_Int(0x73); /* Bit9-2 */
usAdc <<= 2;
usAdc += ((ucReg74 & 0x0C) >> 2);
s_usTouchY = usAdc;
}
else
{
s_usTouchX = 0;
s_usTouchY = 0;
}
/*
bit2 写入功能?? 触控面板中断清除位
0 : 未操作。
1 : 清除触控面板中断。
读取功能?? 触控面板中断状态
0 : 未发生触控面板中断。
1 : 发生触控面板中断。
*/
/*
不要调用这个函数写寄存器,因为该函数改写了busy标志
RA8875_WriteReg(0xF1, (1 << 2)); 必须清除, 才会下次采样.
*/
RA8875_WriteCmd(0xF1);
RA8875_WriteData(1 << 2);
return s_usTouchX;
} |
|