/******************************************************************************* * Function Name : TP_Init * Description : ADS7843端口初始化 * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ void TP_Init(void) { LPC_GPIO0->FIODIR |= (1<<6); /* P0.6 CS is output */ LPC_GPIO2->FIODIR |= (0<<13); /* P2.13 TP_INT is input */ TP_CS(1); ADS7843_SPI_Init(); }
/******************************************************************************* * Function Name : TP_Init * Description : ADS7843¶Ë¿Ú³õʼ»¯ * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ void TP_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* Configure SPI2 pins: SCK, MISO and MOSI ---------------------------------*/ RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD, ENABLE); GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_25MHz; GPIO_InitStruct.GPIO_OType=GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_15|GPIO_Pin_13|GPIO_Pin_14; GPIO_Init(GPIOB,&GPIO_InitStruct); GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2); //sclk 10 13 GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2); //mýso 11 14 GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2); //mosý 12 15 /* TP_CS */ GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_OType=GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12; // 3 GPIO_Init(GPIOB,&GPIO_InitStruct); // d /* TP_IRQ */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_OType=GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6; GPIO_Init(GPIOD,&GPIO_InitStruct); /**/ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource6); EXTI_InitStructure.EXTI_Line = EXTI_Line6; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /**/ TP_CS(1); ADS7843_SPI_Init(); }
/******************************************************************************* * Function Name : TP_Init * Description : * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ void TP_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(Open_SPI_SCK_GPIO_CLK | Open_SPI_MISO_GPIO_CLK | Open_SPI_MOSI_GPIO_CLK,ENABLE); RCC_AHB1PeriphClockCmd(Open_TP_CS_CLK | Open_TP_IRQ_CLK,ENABLE); Open_SPI_CLK_INIT(Open_RCC_SPI,ENABLE); GPIO_PinAFConfig(Open_SPI_SCK_GPIO_PORT, Open_SPI_SCK_SOURCE, Open_GPIO_AF_SPI); GPIO_PinAFConfig(Open_SPI_MISO_GPIO_PORT, Open_SPI_MISO_SOURCE, Open_GPIO_AF_SPI); GPIO_PinAFConfig(Open_SPI_MOSI_GPIO_PORT, Open_SPI_MOSI_SOURCE, Open_GPIO_AF_SPI); GPIO_InitStructure.GPIO_Pin = Open_SPI_SCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(Open_SPI_SCK_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = Open_SPI_MISO_PIN; GPIO_Init(Open_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = Open_SPI_MOSI_PIN; GPIO_Init(Open_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure); /* TP_CS */ GPIO_InitStructure.GPIO_Pin = Open_TP_CS_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(Open_TP_CS_PORT, &GPIO_InitStructure); /*TP_IRQ */ GPIO_InitStructure.GPIO_Pin = Open_TP_IRQ_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN ; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(Open_TP_IRQ_PORT, &GPIO_InitStructure); TP_CS(1); ADS7843_SPI_Init(); }
/******************************************************************************* * Function Name : TP_Init * Description : ADS7843端口初始化,触摸屏通信 * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ void TP_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE); /* Configure SPI2 pins: SCK, MISO and MOSI ---------------------------------*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); /* TP_CS */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); /* TP_IRQ */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); TP_CS(1); //x ? GPIO_SetBits(GPIOB,GPIO_Pin_5): GPIO_ResetBits(GPIOB,GPIO_Pin_5)片选端的初始化 ADS7843_SPI_Init(); //TP_CS(0); }
/******************************************************************************* * Function Name : Read_Ads7846 * Description : µÃµ½Â˲¨Ö®ºóµÄX Y * Input : None * Output : None * Return : Coordinate½á¹¹ÌåµØÖ· * Attention : None *******************************************************************************/ Coordinate *Read_Ads7846(void) { static Coordinate screen; int m0,m1,m2,TP_X[1],TP_Y[1],temp[3]; uint8_t count=0; int buffer[2][9]={{0},{0}}; /* ×ø±êXºÍY½øÐжà´Î²ÉÑù */ ADS7843_SPI_Init(); do /* Ñ»·²ÉÑù9´Î */ { TP_GetAdXY(TP_X,TP_Y); buffer[0][count]=TP_X[0]; buffer[1][count]=TP_Y[0]; count++; } while(!TP_INT_IN&& count<9); /* TP_INT_INΪ´¥ÃþÆÁÖжÏÒý½Å,µ±Óû§µã»÷´¥ÃþÆÁʱTP_INT_IN»á±»ÖÃµÍ */ if(count==9) /* ³É¹¦²ÉÑù9´Î,½øÐÐÂ˲¨ */ { /* Ϊ¼õÉÙÔËËãÁ¿,·Ö±ð·Ö3×éȡƽ¾ùÖµ */ temp[0]=(buffer[0][0]+buffer[0][1]+buffer[0][2])/3; temp[1]=(buffer[0][3]+buffer[0][4]+buffer[0][5])/3; temp[2]=(buffer[0][6]+buffer[0][7]+buffer[0][8])/3; /* ¼ÆËã3×éÊý¾ÝµÄ²îÖµ */ m0=temp[0]-temp[1]; m1=temp[1]-temp[2]; m2=temp[2]-temp[0]; /* ¶ÔÉÏÊö²îֵȡ¾ø¶ÔÖµ */ m0=m0>0?m0:(-m0); m1=m1>0?m1:(-m1); m2=m2>0?m2:(-m2); /* ÅжϾø¶Ô²îÖµÊÇ·ñ¶¼³¬¹ý²îÖµÃÅÏÞ£¬Èç¹ûÕâ3¸ö¾ø¶Ô²îÖµ¶¼³¬¹ýÃÅÏÞÖµ£¬ÔòÅж¨Õâ´Î²ÉÑùµãΪҰµã,Å×Æú²ÉÑùµã£¬²îÖµÃÅÏÞȡΪ2 */ if( m0>THRESHOLD && m1>THRESHOLD && m2>THRESHOLD ) return 0; /* ¼ÆËãËüÃǵÄƽ¾ùÖµ£¬Í¬Ê±¸³Öµ¸øscreen */ if(m0<m1) { if(m2<m0) screen.x=(temp[0]+temp[2])/2; else screen.x=(temp[0]+temp[1])/2; } else if(m2<m1) screen.x=(temp[0]+temp[2])/2; else screen.x=(temp[1]+temp[2])/2; /* ͬÉÏ ¼ÆËãYµÄƽ¾ùÖµ */ temp[0]=(buffer[1][0]+buffer[1][1]+buffer[1][2])/3; temp[1]=(buffer[1][3]+buffer[1][4]+buffer[1][5])/3; temp[2]=(buffer[1][6]+buffer[1][7]+buffer[1][8])/3; m0=temp[0]-temp[1]; m1=temp[1]-temp[2]; m2=temp[2]-temp[0]; m0=m0>0?m0:(-m0); m1=m1>0?m1:(-m1); m2=m2>0?m2:(-m2); if(m0>THRESHOLD&&m1>THRESHOLD&&m2>THRESHOLD) return 0; if(m0<m1) { if(m2<m0) screen.y=(temp[0]+temp[2])/2; else screen.y=(temp[0]+temp[1])/2; } else if(m2<m1) screen.y=(temp[0]+temp[2])/2; else screen.y=(temp[1]+temp[2])/2; return &screen; } return 0; }