diff --git a/developHw.pro.user b/developHw.pro.user index e9c707d..cd133a6 100644 --- a/developHw.pro.user +++ b/developHw.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -283,6 +283,11 @@ -F true 4096 + false + false + 0 + + true false false diff --git a/include/model/hardware/core/lowLevelApi/TrxBoard.h b/include/model/hardware/core/lowLevelApi/TrxBoard.h index 1c5134d..060b515 100644 --- a/include/model/hardware/core/lowLevelApi/TrxBoard.h +++ b/include/model/hardware/core/lowLevelApi/TrxBoard.h @@ -357,6 +357,9 @@ public: /////////////////////////////// DMA Data Packet /////////////////////////////// void readData(); + + QList getDmaAddr(void); + void setDmaAddr(QList addr); }; #endif //TRXBOARD_H diff --git a/include/model/hardware/core/lowLevelApi/TrxBoardUtils/PreProcessorDef.h b/include/model/hardware/core/lowLevelApi/TrxBoardUtils/PreProcessorDef.h index ed2d061..2063672 100644 --- a/include/model/hardware/core/lowLevelApi/TrxBoardUtils/PreProcessorDef.h +++ b/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 diff --git a/include/model/hardware/device/SonoDevice.h b/include/model/hardware/device/SonoDevice.h index 2704e01..8bec493 100644 --- a/include/model/hardware/device/SonoDevice.h +++ b/include/model/hardware/device/SonoDevice.h @@ -25,6 +25,8 @@ public: bool isDmaBusy (); void copy(int srcIndex, int dstIndex); const char* getBufferPtr(int index); + QList readDmaAddr(); + void writeDmaAddr(QList addr); }; #endif //SONODEVICE_H diff --git a/include/model/hardware/device/SonoDeviceConstant.h b/include/model/hardware/device/SonoDeviceConstant.h index a2b3f9f..5716c4e 100644 --- a/include/model/hardware/device/SonoDeviceConstant.h +++ b/include/model/hardware/device/SonoDeviceConstant.h @@ -36,4 +36,9 @@ #define BUSY_MASK 0x80000000 +#define DMA_UPPER_ADDR_ORIGIN 0x00002060 +#define DMA_LOWER_ADDR_ORIGIN 0x00002064 +#define DMA_UPPER_ADDR_LAST 0x000020D8 +#define DMA_LOWER_ADDR_LAST 0x000020DC + #endif //SONODEVICECONSTANT_H diff --git a/src/model/hardware/core/lowLevelApi/TrxBoard.cpp b/src/model/hardware/core/lowLevelApi/TrxBoard.cpp index facac5a..5eb1b3a 100644 --- a/src/model/hardware/core/lowLevelApi/TrxBoard.cpp +++ b/src/model/hardware/core/lowLevelApi/TrxBoard.cpp @@ -125,6 +125,21 @@ void TrxBoard::readData() } } +QList TrxBoard::getDmaAddr() +{ + return (this->_device.readDmaAddr()); +} + +void TrxBoard::setDmaAddr(QList addr) +{ + if(addr.size() != HW_BUFFER_NUM) + { + throw HardwareException(DMA_XFER_ERROR, "DMA address number is not match with hardware buffer number."); + } + + this->_device.writeDmaAddr(addr); +} + void TrxBoard::sramClear(eSramClear clearMode) { quint32 num(0); diff --git a/src/model/hardware/device/SonoDevice.cpp b/src/model/hardware/device/SonoDevice.cpp index c68304f..aa41b73 100644 --- a/src/model/hardware/device/SonoDevice.cpp +++ b/src/model/hardware/device/SonoDevice.cpp @@ -65,5 +65,36 @@ void SonoDevice::copy(int srcIndex, int dstIndex) const char* SonoDevice::getBufferPtr(int index) { - return _buffers[index]; + return _buffers[index]; +} + +QList SonoDevice::readDmaAddr() +{ + quint64 bigEndianDmaAddr(0); + QList addrStack; + + for(quint8 idx = 0; idx < HW_BUFFER_NUM; idx++) + { + quint64 upperAddr = device.readWord(BAR_BRAM, (DMA_UPPER_ADDR_ORIGIN + 8 * idx)); + quint64 lowerAddr = device.readWord(BAR_BRAM, (DMA_LOWER_ADDR_ORIGIN + 8 * idx)); + bigEndianDmaAddr = (upperAddr << 32) + lowerAddr & 0xFFFFFFFF; + addrStack.append(bigEndianDmaAddr); + } + + return addrStack; +} + +void SonoDevice::writeDmaAddr(QList addr) +{ + quint32 upperAddr; + quint32 lowerAddr; + + for(quint8 idx = 0; idx < HW_BUFFER_NUM; idx++) + { + upperAddr = addr.at(idx) >> 32; + lowerAddr = addr.at(idx) & 0xFFFFFFFF; + + device.writeWord(BAR_BRAM, (DMA_UPPER_ADDR_ORIGIN + 8 * idx), upperAddr); + device.writeWord(BAR_BRAM, (DMA_LOWER_ADDR_ORIGIN + 8 * idx), lowerAddr); + } }