fix ads7843 data fetching
The old code forgot to drop the MSB in the very first byte retrieved from ads7843 after a control byte. This will lead to data corruption especially in 16-Clocks per conversion mode. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1781 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
parent
4f62f6e568
commit
9de3512c8a
|
@ -92,14 +92,22 @@ static void rtgui_touch_calculate()
|
||||||
rt_uint16_t tmpy[10];
|
rt_uint16_t tmpy[10];
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
/* From the datasheet:
|
||||||
|
* When the very first CLK after the control byte comes in, the
|
||||||
|
* DOUT of ADS7843 is not valid. So we could only get 7bits from
|
||||||
|
* the first SPI_WriteByte. And the got the following 5 bits from
|
||||||
|
* another SPI_WriteByte.(aligned MSB)
|
||||||
|
*/
|
||||||
for(i=0; i<10; i++)
|
for(i=0; i<10; i++)
|
||||||
{
|
{
|
||||||
CS_0();
|
CS_0();
|
||||||
WriteDataTo7843(TOUCH_MSR_X); /* read X */
|
WriteDataTo7843(TOUCH_MSR_X);
|
||||||
tmpx[i] = SPI_WriteByte(0x00)<<4; /* read MSB bit[11:8] */
|
tmpx[i] = (SPI_WriteByte(0x00) & 0x7F) << 5;
|
||||||
tmpx[i] |= ((SPI_WriteByte(TOUCH_MSR_Y)>>4)&0x0F ); /* read LSB bit[7:0] */
|
tmpx[i] |= (SPI_WriteByte(TOUCH_MSR_Y) >> 3) & 0x1F;
|
||||||
tmpy[i] = SPI_WriteByte(0x00)<<4; /* read MSB bit[11:8] */
|
|
||||||
tmpy[i] |= ((SPI_WriteByte(0x00)>>4)&0x0F ); /* read LSB bit[7:0] */
|
tmpy[i] = (SPI_WriteByte(0x00) & 0x7F) << 5;
|
||||||
|
tmpy[i] |= (SPI_WriteByte(0x00) >> 3) & 0x1F;
|
||||||
|
|
||||||
WriteDataTo7843( 1<<7 ); /* 打开中断 */
|
WriteDataTo7843( 1<<7 ); /* 打开中断 */
|
||||||
CS_1();
|
CS_1();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue