[USB 控制器] cyusb3014应该怎么读写adc

[复制链接]
528|2
 楼主 | 2019-1-30 14:49 | 显示全部楼层 |阅读模式
cyusb3014通过i2c配置、读取adc(mcp3424),不知道有谁做过?不一定要是这个adc芯片,只要是adc就行,现在我的一些代码逻辑可能有问题,一直不能读取到数据。
 楼主 | 2019-1-30 14:51 | 显示全部楼层
主要用到的读写是这两个write和read
AD_Write(adc_i2c_addr_write,chal0_config);
CyU3PBusyWait(700000);
  AD_Read (adc_i2c_addr_read, buffer_0);
下面是定义:
void AD_Write (uint8_t slaveAddr,uint8_t data)

{
    CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
    CyU3PI2cPreamble_t preamble;
    uint8_t buf[1];

    buf[0] = data;
    preamble.buffer[0] = slaveAddr;
    preamble.buffer[1] = buf[0];  //一旦写入配置,配置信息字节之后的字节都将会忽略
    preamble.length    = 2;
    preamble.ctrlMask  = 0x0000;

    status = CyU3PI2cTransmitBytes (&preamble, buf, 1, 0);
    if(status == CY_U3P_SUCCESS)
            {
                    status = CyU3PI2cWaitForAck(&preamble, 0);
            }
    CyU3PBusyWait(5) ;//CyU3PThreadSleep(10);//100.200:color not right.(speed)

}



void AD_Read (uint8_t slaveAddr, uint8_t *buf)
{
    CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
    CyU3PI2cPreamble_t preamble;
    preamble.buffer[0] = slaveAddr ;
   // preamble.buffer[1] = regAddr;
    preamble.buffer[1] = slaveAddr;
    preamble.length    = 2;
    preamble.ctrlMask  = 0x0001;   /* slaveAddrPos: Send start bit after 1 byte of preamble.!! */


    status = CyU3PI2cReceiveBytes (&preamble, buf, 3, 0);

    while(buf[2] & 0x80)
            {
            status = CyU3PI2cReceiveBytes (&preamble, buf, 3, 0);
            }
    CyU3PThreadSleep (1);

}

使用特权

评论回复
 楼主 | 2019-1-30 14:51 | 显示全部楼层
两个函数的定义因为是复制来的,有一些多余的东西没有删除,但是应该不影响逻辑。至于i2c的设备地址和寄存器地址,设备地址是有的,但是寄存器地址好像没有,因为这个adc(mcp3424)的datasheet上面是说,当主器件发送读命令,adc输出转换值和配置数据。没有提到是哪个寄存器。就以下的代码来说,运行起来获取不到数据,不知为何?
还有一个问题,preamble.ctrlMask  到底是什么意思,用来干什么的,一直不太明白?希望各位献言献策,讨论一下,感谢大家!

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表