U16 xpix ,ypix ,zpix,z1,z2 ;
int data[10]={0};
int receive_data[10]={0};
/******************************************************************
*函数名:Delay10MicroSeconds
*入口参数:
*返回参数:无
*函数功能:延时
*******************************************************************/
void Delay(int n)
{
int i;
for(i=0;i
return ;
}
/******************************************************************
*函数名:TouchpanelInit
*入口参数:无
*返回参数:无
*函数功能:初始化touchpanel
*******************************************************************/
void TouchpanelInit(void)
{
*(RP)SSI2_SSI2ENR = 0x0; //设置前紧禁止能SSI
// *(RP)SSI2_CONTROL0 = 0x07; //SPI协议,数据帧长度为8,停止位为低电平
*(RP)SSI2_CONTROL0 = 0x47;
*(RP)SSI2_CONTROL1 = 0x00; //数据帧数量为1
*(RP)SSI2_BAUDR = 0x1000; //设置波特率
*(RP)SSI2_TXFTLR = 0x1; //发送阈值为1
*(RP)SSI2_RXFTLR = 0x0; //接受阈值为1
*(RP)SSI2_TXFLR =0x1;
*(RP)SSI2_RXFLR =0x1;
// *(RP)SSI_IMR = 0x1f; // 不屏蔽中断
*(RP)SSI2_IMR = 0x0; //屏蔽中断
*(RP)SSI2_DMACR =0x0;//未使能DMA
*(RP)SSI2_DR =0x0;
*(RP)SSI2_SER =0x1;
*(RP)SSI2_SSI2ENR = 0x1; //设置完使能ssi
*(RP)GPIO_PORTI_DIR &=~(1<<11);
*(RP)GPIO_PORTI_SEL |=(1<<11);
*(RP)GPIO_PORTI_INTSEL |=(1<<11);
*(RP)GPIO_PORTI_INTLEL |= (1<<11);
*(RP)GPIO_PORTI_INTPOL &= ~(1<<11);
*(RP)GPIO_PORTI_INTCLR |=(1<<11);
*(RP)GPIO_PORTI_INTCLR &= 0x000; //清除中断
return ;
}
/******************************************************************
*函数名:SendCommand
*入口参数:ADCommand
*返回参数:data
*函数功能:向AR1020输入命令,获返回位置参数
*******************************************************************/
unsigned short SendCommand (U8 ADCommand)
{
U16 location;
int date = 0;
*(RP)SSI2_DR=ADCommand;
while (!(*(RP)SSI2_SR & 0x4));
while (*(RP)SSI2_SR & 0x1);
date = *(RP)SSI2_DR;
while ((*(RP)SSI2_SR & 0x8));
while (*(RP)SSI2_SR & 0x1);
return date;
}
void Readxy(void)
{
U16 xpix, ypix,z1,z2;
int i;
// int data[15] = {0};
*(RP)SSI2_SSI2ENR = 0x0; //设置前紧禁止能SSI
Delay(10);
*(RP)SSI2_SSI2ENR = 0x1; //设置前紧禁止能SSI
data[0]=SendCommand(0x00);
data[1]=SendCommand(0x00);
data[2]=SendCommand(0x00);
data[3]=SendCommand(0x00);
data[4]=SendCommand(0x00);
z1=data[0];
xpix=((data[2]<<7)+data[1]);
ypix=((data[4]<<7)+data[3]);
// printf("X :%d,Y :%d,updown is 0x:%x\n",xpix,ypix,z1);
return;
}
大概的数据流程是,进入main函数后,等待触摸,当你触摸屏后,会转到SPI_INT函数处理,在SPI_INT函数里调用了Readxy(void)函数,通过SendCommand(0x00)向AR1020提供时钟,读取AR1020返回的坐标数据,在坐标数据里处理,得到坐标,linux下吧坐标给上层处理,关于配置寄存器的,直接在main函数里SendCommand数据就可以了,我屏蔽掉的就是。仅放这里作为自己的工作周记而已。