diff --git a/src/PRDevice.cpp b/src/PRDevice.cpp index 02949ac..d2acf62 100644 --- a/src/PRDevice.cpp +++ b/src/PRDevice.cpp @@ -1347,100 +1347,107 @@ int PRDevice::GetVersionInfo(uint16_t *verPtr, uint16_t *revPtr, uint16_t *combi PRResult PRDevice::PRLEDColor(PRLED * pLED, uint8_t color) { - uint32_t data[2]; + const int bufferWords = 2; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, data); - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeColor, color, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeColor, color, &buffer[1]); - return WriteDataRaw(3, 0xc00, 2, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDFade(PRLED * pLED, uint8_t fadeColor, uint16_t fadeRate) { - uint32_t data[4]; + const int bufferWords = 4; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, data); - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &buffer[1]); - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, &data[2]); - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor, &data[3]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, &buffer[2]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor, &buffer[3]); - return WriteDataRaw(3, 0xc00, 4, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDFadeColor(PRLED * pLED, uint8_t fadeColor) { - uint32_t data[2]; + const int bufferWords = 2; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, data); - FillLEDWriteCommand(pLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->LEDIndex, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor, &buffer[1]); - return WriteDataRaw(3, 0xc00, 2, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDFadeRate(uint8_t boardAddr, uint16_t fadeRate) { - uint32_t data[2]; + const int bufferWords = 2; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, data); - FillLEDWriteCommand(boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &buffer[1]); - return WriteDataRaw(3, 0xc00, 2, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDRGBColor(PRLEDRGB * pLED, uint32_t color) { - uint32_t data[6]; + const int bufferWords = 6; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, data); - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeColor, (color >> 16) & 0xFF, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeColor, (color >> 16) & 0xFF, &buffer[1]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &data[2]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeColor, (color >> 8) & 0xFF, &data[3]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &buffer[2]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeColor, (color >> 8) & 0xFF, &buffer[3]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &data[4]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeColor, color & 0xFF, &data[5]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &buffer[4]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeColor, color & 0xFF, &buffer[5]); - return WriteDataRaw(3, 0xc00, 6, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDRGBFade(PRLEDRGB * pLED, uint32_t fadeColor, uint16_t fadeRate) { - uint32_t data[12]; + const int bufferWords = 12; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, data); - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &buffer[1]); - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, &data[2]); - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, &data[3]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, &buffer[2]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, &buffer[3]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[4]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[5]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &buffer[4]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &buffer[5]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &data[6]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &data[7]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &buffer[6]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &buffer[7]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &data[8]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &data[9]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeRateLow, fadeRate & 0xFF, &buffer[8]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeRateHigh, (fadeRate >> 8) & 0xFF, &buffer[9]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &data[10]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &data[11]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &buffer[10]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &buffer[11]); - return WriteDataRaw(3, 0xc00, 12, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } PRResult PRDevice::PRLEDRGBFadeColor(PRLEDRGB * pLED, uint32_t fadeColor) { - uint32_t data[6]; + const int bufferWords = 6; + uint32_t buffer[bufferWords]; - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, data); - FillLEDWriteCommand(pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, &data[1]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pRedLED->LEDIndex, buffer); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pRedLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 16) & 0xFF, &buffer[1]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &data[2]); - FillLEDWriteCommand(pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &data[3]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pGreenLED->LEDIndex, &buffer[2]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pGreenLED->boardAddr, kPRLEDRegisterTypeFadeColor, (fadeColor >> 8) & 0xFF, &buffer[3]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &data[4]); - FillLEDWriteCommand(pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &data[5]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeLEDIndex, pLED->pBlueLED->LEDIndex, &buffer[4]); + FillPDBCommand(P_ROC_DRIVER_PDB_WRITE_COMMAND, pLED->pBlueLED->boardAddr, kPRLEDRegisterTypeFadeColor, fadeColor & 0xFF, &buffer[5]); - return WriteDataRaw(3, 0xc00, 6, data); + return WriteDataRaw(P_ROC_BUS_DRIVER_CTRL_SELECT, P_ROC_DRIVER_PDB_ADDR, bufferWords, buffer); } diff --git a/src/PRHardware.cpp b/src/PRHardware.cpp index 257988c..4b2abd2 100644 --- a/src/PRHardware.cpp +++ b/src/PRHardware.cpp @@ -344,9 +344,12 @@ int32_t CreateJTAGShiftTDODataBurst ( uint32_t * burst, uint16_t numBits, bool_t return kPRSuccess; } -void FillLEDWriteCommand(uint8_t boardAddr, PRLEDRegisterType reg, uint8_t value, uint32_t * pData) +void FillPDBCommand(uint8_t command, uint8_t boardAddr, PRLEDRegisterType reg, uint8_t data, uint32_t * buffer) { - pData[0] = (0x1 << 24) | (boardAddr << 16) | (reg << 8) | value; + buffer[0] = (command << P_ROC_DRIVER_PDB_COMMAND_SHIFT) | + (boardAddr << P_ROC_DRIVER_PDB_BOARD_ADDR_SHIFT) | + (reg << P_ROC_DRIVER_PDB_REGISTER_SHIFT) | + (data << P_ROC_DRIVER_PDB_DATA_SHIFT); } diff --git a/src/PRHardware.h b/src/PRHardware.h index bc06fbd..3e8192e 100644 --- a/src/PRHardware.h +++ b/src/PRHardware.h @@ -254,6 +254,19 @@ const uint32_t P_ROC_DMD_RCLK_LOW_CYCLES_SHIFT = 24; const uint32_t P_ROC_DMD_DOT_TABLE_BASE_ADDR = 0x1000; +const uint32_t P_ROC_DRIVER_PDB_ADDR = 0xC00; +const uint32_t P_ROC_DRIVER_PDB_COMMAND_SHIFT = 24; +const uint32_t P_ROC_DRIVER_PDB_BOARD_ADDR_SHIFT = 16; +const uint32_t P_ROC_DRIVER_PDB_REGISTER_SHIFT = 8; +const uint32_t P_ROC_DRIVER_PDB_DATA_SHIFT = 0; +const uint32_t P_ROC_DRIVER_PDB_READ_COMMAND = 0x00; +const uint32_t P_ROC_DRIVER_PDB_WRITE_COMMAND = 0x01; +const uint32_t P_ROC_DRIVER_PDB_CLEAR_ALL_COMMAND = 0x07; +const uint32_t P_ROC_DRIVER_PDB_BROADCAST_ADDR = 0x3F; + +const uint32_t p_ROC_DRIVER_PDB_REGISTER_BANK_A = 0; +const uint32_t p_ROC_DRIVER_PDB_REGISTER_BANK_B = 1; + typedef enum PRLEDRegisterType { kPRLEDRegisterTypeLEDIndex = 0, kPRLEDRegisterTypeColor = 1, @@ -299,7 +312,7 @@ int32_t CreateJTAGLatchOutputsBurst ( uint32_t * burst, PRJTAGOutputs *jtagOutpu int32_t CreateJTAGForceOutputsBurst ( uint32_t * burst, PRJTAGOutputs *jtagOutputs); int32_t CreateJTAGShiftTDODataBurst ( uint32_t * burst, uint16_t numBits, bool_t dataBlockComplete); -void FillLEDWriteCommand(uint8_t boardAddr, PRLEDRegisterType reg, uint8_t value, uint32_t * pData); +void FillPDBCommand(uint8_t command, uint8_t boardAddr, PRLEDRegisterType reg, uint8_t value, uint32_t * pData); PRResult PRHardwareOpen(); void PRHardwareClose();