//! 2.2.6.1 Write Value to Register //! //! @param dnRegNumber //! @param drvValue //! USBDM_GDI_API DiReturnT DiRegisterWrite ( DiUInt32T dnRegNumber, DiRegisterValueT drvValue ) { LOGGING; U32c regValue(drvValue); DSC_Registers_t regNum = mapReg(dnRegNumber); USBDM_ErrorCode rc = BDM_RC_OK; Logging::print("DiRegisterWrite(0x%lX,%s) => %lX\n", (unsigned long)dnRegNumber, DSC_GetRegisterName(regNum), (unsigned long)regValue); CHECK_ERROR_STATE(); if ((regNum == DSC_RegPC) && !pcWritten) { pcWritten = true; pcResetValue = regValue; } if (regNum == DSC_UnknownReg) { // rc = BDM_RC_OK; rc = BDM_RC_ILLEGAL_PARAMS; } else { rc = DSC_WriteRegister(regNum, (uint32_t)regValue); } if (rc != BDM_RC_OK) { Logging::print("DiRegisterWrite(0x%X,%s) Failed, reason= %s\n", dnRegNumber, DSC_GetRegisterName(regNum), USBDM_GetErrorString(rc)); return setErrorState(DI_ERR_NONFATAL, rc); } return setErrorState(DI_OK); }
//! 2.2.6.2 Read Value from Register //! //! @param dnRegNumber //! @param drvValue //! USBDM_GDI_API DiReturnT DiRegisterRead ( DiUInt32T dnRegNumber, pDiRegisterValueT drvValue ) { unsigned long dataValue = 0xDEADBEEF; DSC_Registers_t regNum = mapReg(dnRegNumber); USBDM_ErrorCode rc = BDM_RC_OK; // Logging::print("DiRegisterRead(reg# 0x%X(%d))\n", regNum, regNum); // Logging::print("DiRegisterRead(%s)\n", DSC_GetRegisterName(regNum)); CHECK_ERROR_STATE(); if (regNum == DSC_UnknownReg) { dataValue = dnRegNumber; // rc = BDM_RC_OK; rc = BDM_RC_ILLEGAL_PARAMS; } else { rc = DSC_ReadRegister(regNum, &dataValue); } if (rc != BDM_RC_OK) { Logging::print("DiRegisterRead(0x%X,%s) Failed, reason= %s\n", dnRegNumber, DSC_GetRegisterName(regNum), USBDM_GetErrorString(rc)); return setErrorState(DI_ERR_NONFATAL, rc); } *drvValue = (U32c)dataValue; Logging::print("DiRegisterRead(0x%X,%s) => %lX\n", dnRegNumber, DSC_GetRegisterName(regNum), dataValue); return setErrorState(DI_OK); }
//! 2.2.6.2 Read Value from Register //! //! @param dnRegNumber //! @param drvValue //! USBDM_GDI_DECLSPEC DiReturnT DiRegisterRead ( DiUInt32T dnRegNumber, pDiRegisterValueT drvValue ) { LOGGING; unsigned long dataValue = 0xDEADBEEF; DSC_Registers_t regNum = mapReg(dnRegNumber); USBDM_ErrorCode rc = BDM_RC_OK; log.print("0x%X(%d)\n", dnRegNumber, dnRegNumber); // log.print("DiRegisterRead(%s)\n", DSC_GetRegisterName(regNum)); CHECK_ERROR_STATE(); if (regNum == DSC_UnknownReg) { dataValue = dnRegNumber; // rc = BDM_RC_OK; rc = BDM_RC_ILLEGAL_PARAMS; } else { rc = bdmInterface->readReg(regNum, &dataValue); } if (rc != BDM_RC_OK) { log.print("DiRegisterRead(0x%X,%s) Failed, reason= %s\n", dnRegNumber, getDSCRegName(regNum), USBDM_GetErrorString(rc)); return setErrorState(DI_ERR_NONFATAL, rc); } *drvValue = (U32c)dataValue; log.print("(0x%X,%s) => %8lX\n", dnRegNumber, getDSCRegName(regNum), dataValue); return setErrorState(DI_OK); }