|
用RA8875自带的触摸调试无反应;不知道什么问题引起的;
主函数为触摸的初始化:
int main (void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200);//初始化串口波特率为115200
bsp_InitSPIBus(); /* 配置SPI总线 */
LCD_InitHard();
TOUCH_InitHard();
RA8875_DispBmpInFlash(0, 0, 480, 800, g_RA8875Addr_800x480[2]);
while(1)
{
TOUCH_Scan();
delay_ms(1000);
}
}
其中TOUCH_InitHard();函数为:
void TOUCH_InitHard(void)
{
g_tTP.Enable = 0;
g_tTP.Write = g_tTP.Read = 0;
RA8875_TouchInit();
g_tTP.usMaxAdc = 1023; /* 10位ADC */
TOUCH_LoadParam(); /* 读取校准参数 */
g_tTP.Write = g_tTP.Read = 0;
g_tTP.Enable = 1;
}
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的函数中读取到的F1寄存器值为0x0B,感觉没有进入触摸中断,这个中断应该是RA8875产生的啊,不需要用到TP_INT引脚,奇怪为啥进入不了中断呢? |
|