打印
[STM32F1]

SPI读取触摸屏的疑问

[复制链接]
957|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guanyanqin1992|  楼主 | 2014-10-11 21:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在做触摸屏实验,其中读取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);      作用就是分别读高位字节和地位字节而已?
沙发
myxiaonia| | 2014-10-11 23:06 | 只看该作者
从程序中翻译回xpt2046得有多难,还是看手册吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

275

帖子

4

粉丝