| 
 
| 在做触摸屏实验,其中读取XPT2046触摸芯片的函数不是很懂。程序如下: 
 static uint16_t TSC2046_ReadAdc(uint8_t _ucCh)
 {
 uint16_t usAdc;
 
 TSC2046_CS_0();        /* 使能TS2046的片选 */
 
 /*
 TSC2046 控制字(8Bit)
 Bit7   = S     起始位,必须是1
 Bit6:4 = A2-A0 模拟输入通道选择A2-A0; 共有6个通道。
 Bit3   = MODE  ADC位数选择,0 表示12Bit;1表示8Bit
 Bit2   = SER/DFR 模拟输入形式,  1表示单端输入;0表示差分输入
 Bit1:0 = PD1-PD0 掉电模式选择位
 */
 SPI_ShiftByte((1 << 7) | (_ucCh << 4));            /* 选择通道1, 测量X位置 */
 
 /* 读ADC结果, 12位ADC值的高位先传,前12bit有效,最后4bit填0 */
 usAdc = SPI_ShiftByte(0x00);        /* 发送的0x00可以为任意值,无意义 */
 usAdc <<= 8;
 usAdc += SPI_ShiftByte(0x00);        /* 获得12位的ADC采样值 */
 
 usAdc >>= 3;                        /* c */
 
 TSC2046_CS_1();                    /* 禁能片选 */
 
 return (usAdc);
 }
 如上,背景颜色为黄部分语句不是很懂:
 
 疑问1:从ADC采样出来的值是12位,先读出高8位数据,然后再读出低4位数据,其中第二次读取的低字节数据最后4位为0.那为什么最后要usAdc >>= 3; 而不是向右移位4呢,不是有4个0位吗
 
 
 疑问2:第一次发送数据SPI_ShiftByte((1 << 7) | (_ucCh << 4));    是不是数据发送完,SPI的接受缓存器就已经收到了这12位 AD采样值了,而后面两次SPI_ShiftByte(0x00);      作用就是分别读高位字节和地位字节而已?
 | 
 |