Browse Source

AFEs HV DACs could be controlled seperatelly.

v4.8
Arash Aletayeb 1 year ago
parent
commit
b1ca8b2eb3
  1. 2
      developHw.pro.user
  2. 7
      include/model/hardware/core/lowLevelApi/TrxBoard.h
  3. 2
      include/model/hardware/core/lowLevelApi/TrxBoardUtils/PreProcessorDef.h
  4. 1
      mainwindow.cpp
  5. 2
      mainwindow.ui
  6. 179
      src/model/hardware/core/lowLevelApi/TrxBoard.cpp

2
developHw.pro.user

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.10.0, 2024-01-21T13:54:45. -->
<!-- Written by QtCreator 4.10.0, 2024-02-07T13:55:31. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>

7
include/model/hardware/core/lowLevelApi/TrxBoard.h

@ -161,7 +161,6 @@ private:
void setAfesHeartBeat(const bool heartBeat) const;
void afesHeartBeatDisable(const bool mode) const;
void sonoLiveTimeout();
void sonoHeartBeatsEnable(void) const;
void sendPacket(void);
void delay(quint16 ms) const;
@ -211,6 +210,9 @@ signals:
public:
#ifndef DEVELOP_UI
HardwarePacketEngine packetEngine;
void scenPlayerStart(int count, bool afeHvPwrOn = false);
void readLimitedData(int count);
void scenStopAfterReadLimited();
#else
void afeAdcsSync(const quint8& slaveMounted);
void gtReadReset(void);
@ -232,6 +234,8 @@ public:
void setStbCoefficient(QVector<quint32>& stbLut);
void setDtgcLut(QVector<float>& dtgcLut);
void afesHvDacsOn(void) const;
void afesHvDacsOff(void) const;
void scenPlayerStart(bool afeHvPwrOn = false);
void scenPlayerStop(bool afeHvPwrOff = false);
//void scenPlayerPause (bool pause) const;
@ -243,6 +247,7 @@ public:
void setAfesPwr(eAfePwrdnMode pwrMode) const;
void setAfesFastPwr(eAfePwrdnMode pwrMode) const;
void sonoHeartBeatsDisable(void) const;
void sonoHeartBeatsEnable(void) const;
/////////////////////////////// Built-in Test API /////////////////////////////
void setBiteDacData(const QByteArray& iData, const QByteArray& qData) const;

2
include/model/hardware/core/lowLevelApi/TrxBoardUtils/PreProcessorDef.h

@ -2,6 +2,6 @@
#define PREPROCESSORDEF_H
#define MPS_BOARD
#define DEVELOP_UI
//#define DEVELOP_UI
#endif //PREPROCESSORDEF_H

1
mainwindow.cpp

@ -1086,6 +1086,7 @@ void MainWindow::programThreadFinish()
#ifdef DEVELOP_UI
_trx.afeAdcsSync(MOUNTED_SLAVE_FPGA);
_trx.gtReadReset();
_trx.sonoHeartBeatsEnable();
#endif
QString str = "done";

2
mainwindow.ui

@ -7933,7 +7933,7 @@
<widget class="QLabel" name="label_29">
<property name="font">
<font>
<pointsize>11</pointsize>
<pointsize>9</pointsize>
<weight>75</weight>
<italic>true</italic>
<bold>true</bold>

179
src/model/hardware/core/lowLevelApi/TrxBoard.cpp

@ -475,7 +475,6 @@ TrxBoard::TrxBoard() : _offsetSlave0(0), _offsetSlave1(0x400000), _offsetSlave2(
setFpgaOffset();
setAfeModuleOffset();
systemLutCompletion();
sonoHeartBeatsEnable();
}
TrxBoard::ScenHwRegister::ScenHwRegister()
@ -1559,6 +1558,7 @@ void TrxBoard::slaveFpgaProgram(const QString path)
#ifndef DEVELOP_UI
afeAdcsSync(MOUNTED_SLAVE_FPGA);
gtReadReset();
sonoHeartBeatsEnable();
#endif
}
@ -1567,6 +1567,177 @@ void TrxBoard::setBeamFormerMode(eClkMode mode) const
this->_clkDistributer->clockMode(CLOCK_DIVISION, mode);
}
void TrxBoard::afesHvDacsOn() const
{
setAfesPwr(afePwrdnDisable);
// setAfesFastPwr(afePwrdnDisable);
#ifdef MPS_BOARD
this->_bCtrlMngt->mpsDacsOn();
#endif
}
void TrxBoard::afesHvDacsOff() const
{
setAfesPwr(afePwrdnEnable);
// setAfesFastPwr(afePwrdnEnable);
#ifdef MPS_BOARD
this->_bCtrlMngt->mpsDacsOff();
#endif
}
#ifndef DEVELOP_UI
void TrxBoard::scenPlayerStart(int count, bool afeHvPwrOn)
{
if(_allow)
{
_run = false;
this->_beamFormerSlave0->regValid(true);
this->_beamFormerSlave1->regValid(true);
this->_beamFormerSlave2->regValid(true);
this->_misc->setGtSendMode(bfMode);
this->_misc->setSyncMode(bfSyncMode);
this->_emul->setEmulatorDis();
this->_device.resetCounter();
this->_device.startDma();
if(afeHvPwrOn)
{
this->_afeSlave0->setAfeGblPwr(afePwrdnDisable);
this->_afeSlave1->setAfeGblPwr(afePwrdnDisable);
this->_afeSlave2->setAfeGblPwr(afePwrdnDisable);
//quint32 afeFastPdn = 0x43C36C;
//this->_device.device.writeWord(BAR_REG, afeFastPdn + 0, static_cast<quint32>(0));
//this->_device.device.writeWord(BAR_REG, afeFastPdn + 0x400000,
//static_cast<quint32>(0));
//this->_device.device.writeWord(BAR_REG, afeFastPdn + 0x800000,
//static_cast<quint32>(0));
#ifdef MPS_BOARD
this->_bCtrlMngt->mpsDacsOn();
#endif
this->delay(170);
}
this->_scenPlayer->control.setCommand(true);
_sonoLiveTimer->start(5000);
_sonoHeartBeats = true;
this->_scenPlayer->control.setHeartBeats(_sonoHeartBeats);
this->setAfesHeartBeat(_sonoHeartBeats);
packetEngine.init();
_run = true;
QtConcurrent::run(this, &TrxBoard::readLimitedData, count);
//QtConcurrent::run(this, &TrxBoard::sendPacket);
}
else
{
throw SonoException("Total scenario luts and sram parameters are not written compeletely");
}
}
void TrxBoard::readLimitedData(int count)
{
int generatedFrame = 0;
preBatch = 0;
_swCounter = _device.getCounter();
do
{
auto cnt = _device.getCounter();
if(cnt == 0)
{
_hwCounter = 0;
std::this_thread::sleep_for(std::chrono::milliseconds(3));
continue;
}
else if(cnt != _hwCounter)
{
_hwCounter++;
if(_hwCounter > HW_BUFFER_NUM)
{
_hwCounter = 1;
}
_device.copy(_hwCounter - 1, _swCounter);
auto framePacket =
QByteArray::fromRawData(_device.getBufferPtr(_swCounter), BUFFER_SIZE);
auto batch = ((static_cast<quint16>(framePacket[128])) & 0x00FF) |
(((static_cast<quint16>(framePacket[129])) << 8) & 0xFF00);
auto subBbatch = ((static_cast<quint16>(framePacket[130])) & 0x00FF);
if((batch == preBatch && subBbatch - preSubBatch != 1) ||
(preSubBatch == -1 && (batch != 0 || subBbatch != 0)) ||
(batch - preBatch > 1) ||
(batch - preBatch == 1 && subBbatch != 0))
{
//throw;
}
if(batch != preBatch)
{
generatedFrame++;
}
qDebug() << "*******************batch " << batch << "|geteratedFrame " <<
generatedFrame;
preBatch = batch;
preSubBatch = subBbatch;
packetEngine.newData(framePacket);
_swCounter++;
if(_swCounter >= SW_BUFFER_NUM)
{
_swCounter = 0;
}
}
}while (generatedFrame < count);
scenStopAfterReadLimited();
}
void TrxBoard::scenStopAfterReadLimited()
{
_run = false;
this->_device.stopDma();
//uncrustify off
while(_device.isDmaBusy());
//uncrustify on
_sonoLiveTimer->stop();
_sonoHeartBeats = false;
this->_scenPlayer->control.setHeartBeats(_sonoHeartBeats);
this->setAfesHeartBeat(_sonoHeartBeats);
this->_scenPlayer->control.setCommand(false);
this->_afeSlave0->setAfeGblPwr(afePwrdnEnable);
this->_afeSlave1->setAfeGblPwr(afePwrdnEnable);
this->_afeSlave2->setAfeGblPwr(afePwrdnEnable);
//quint32 afeFastPdn = 0x43C36C;
//this->_device.device.writeWord(BAR_REG, afeFastPdn + 0, static_cast<quint32>(1));
//this->_device.device.writeWord(BAR_REG, afeFastPdn + 0x400000, static_cast<quint32>(1));
//this->_device.device.writeWord(BAR_REG, afeFastPdn + 0x800000, static_cast<quint32>(1));
#ifdef MPS_BOARD
this->_bCtrlMngt->mpsDacsOff();
#endif
QThread::msleep(140);
}
#endif
/* set afeHvPwrOn true when unfreeze happen */
void TrxBoard::scenPlayerStart(bool afeHvPwrOn)
{
@ -1597,7 +1768,9 @@ void TrxBoard::scenPlayerStart(bool afeHvPwrOn)
this->_bCtrlMngt->mpsDacsOn();
#endif
#ifdef DEVELOP_UI
this->delay(170);
#endif
}
this->_scenPlayer->control.setCommand(true);
@ -1648,7 +1821,9 @@ void TrxBoard::scenPlayerStop(bool afeHvPwrOff)
this->_bCtrlMngt->mpsDacsOff();
#endif
this->delay(140);
#ifdef DEVELOP_UI
this->delay(140);
#endif
}
}

Loading…
Cancel
Save