This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DLPC350: DLPC设置Pattern Sequential 模式下执行Play Once时再次设置出现I2C锁死

Part Number: DLPC350

我使用I2C对DLPC图像序列设置为单次播放模式时第一次播放成功,再次执行.Validate Sequence 时出现I2C锁死,我看见GUI程序中有一个涉及0x7D的接口 

DLPC350_StartPatLutValidate(),这个接口中使用写0x7D,写入一个字节,但是我看见手册中这个0x7D是只读的,于是我也尝试像0x7d写入00来应用图像设置,在循环播放模式是没有问题的,但是在单次播放模式
再次执行时会出现I2C通讯异常,这时候USB通讯依旧正常
  • DLPC350_StartPatLutValidate()

    这个只是验证配置数据是否有效,不是完整的pattern数据。

    需要先发送配置数据, please debug it to figure out where it stopped.

    void MainWindow::on_pushButton_ValidatePatSeq_clicked()
    {
        int i = 0;
        unsigned int status;
        bool ready;
    
    
        if((ui->radioButton_SLMode->isChecked() == false) && (ui->radioButton_VariableExpSLMode->isChecked() == false))
        {
            ShowError("Please change operating mode to Pattern Sequence before validating sequence");
            return;
        }
    
    
        //if pattern sequence is already running it must be stopped first
        emit on_pushButton_PatSeqCtrlStop_clicked();
    
    
        //Clear the flags
        ui->pushButton_PatSeqValIndExpOOR->setEnabled(false);
        ui->pushButton_PatSeqValIndPatNumOOR->setEnabled(false);
        ui->pushButton_PatSeqValIndTrigOutOverlap->setEnabled(false);
        ui->pushButton_PatSeqValIndBlkVecMiss->setEnabled(false);
        ui->pushButton_PatSeqValPatPeriodShort->setEnabled(false);
        ui->pushButton_PatSeqCtrlStart->setEnabled(false);
        ui->pushButton_PatSeqCtrlPause->setEnabled(false);
        ui->pushButton_PatSeqCtrlStop->setEnabled(false);
    
    
    
    
        if(DLPC350_StartPatLutValidate())
        {
            ShowError("Error validating LUT data");
            return;
        }
    
    
        QEventLoop loop;
    
    
        do
        {
            if(DLPC350_CheckPatLutValidate(&ready,&status) < 0)
            {
                ShowError("Error validating LUT data");
                return;
            }
    
    
            if(ready)
            {
                break;
            }
            else
            {
                QTimer::singleShot(1000, &loop, SLOT(quit()));
                loop.exec();
            }
    
    
            if(i++ > MAX_NUM_RETRIES)
                break;
        } while(1);
    
    
        ui->pushButton_PatSeqValIndExpOOR->setEnabled((status & BIT0) == BIT0);
        ui->pushButton_PatSeqValIndPatNumOOR->setEnabled((status & BIT1) == BIT1);
        ui->pushButton_PatSeqValIndTrigOutOverlap->setEnabled((status & BIT2) == BIT2);
        ui->pushButton_PatSeqValIndBlkVecMiss->setEnabled((status & BIT3) == BIT3);
        ui->pushButton_PatSeqValPatPeriodShort->setEnabled((status & BIT4) == BIT4);
        //Except BIT0 and BIT1 flags enable pattern sequence
        if(!(status & BIT0) && !(status & BIT1))
        {
            ui->pushButton_PatSeqValStatus->setEnabled(true);
            ui->pushButton_PatSeqCtrlStart->setEnabled(true);
            ui->pushButton_PatSeqCtrlPause->setEnabled(true);
            ui->pushButton_PatSeqCtrlStop->setEnabled(true);
        }
        else
        {
            ui->pushButton_PatSeqValStatus->setEnabled(false);
            ui->pushButton_PatSeqCtrlStart->setEnabled(false);
            ui->pushButton_PatSeqCtrlPause->setEnabled(false);
            ui->pushButton_PatSeqCtrlStop->setEnabled(false);
        }
    
    
    }
  • 如果我想要自己执行多次Play Once,而不是使用内置的Repeat模式呢?命令顺序应该是什么呢?每次都要重新发送pattern的配置然后验证是否有效吗?

  • 需要将上述USB命令转化为I2C命令

    x