//! 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); }
//! 2.2.6.1 Write Value to Register //! //! @param dnRegNumber //! @param drvValue //! USBDM_GDI_DECLSPEC DiReturnT DiRegisterWrite ( DiUInt32T dnRegNumber, DiRegisterValueT drvValue ) { LOGGING_Q; U32c regValue(drvValue); DSC_Registers_t regNum = mapReg(dnRegNumber); USBDM_ErrorCode rc = BDM_RC_OK; log.print("(0x%lX,%s) => %lX\n", (unsigned long)dnRegNumber, getDSCRegName(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 = bdmInterface->writeReg(regNum, (uint32_t)regValue); } if (rc != BDM_RC_OK) { log.error("0x%X,%s Failed, reason= %s\n", dnRegNumber, getDSCRegName(regNum), USBDM_GetErrorString(rc)); return setErrorState(DI_ERR_NONFATAL, rc); } return setErrorState(DI_OK); }
//! \brief Maps a register # to a string //! //! @param targetType = target type (T_HC12 etc) //! @param regNo = register address //! //! @return pointer to static string describing the command //! char const *getRegName( unsigned int targetType, unsigned int regNo ){ switch (targetType) { case T_HC12 : return getHCS12RegName(regNo); case T_HCS08 : return getHCS08RegName(regNo); case T_RS08 : return getRS08RegName(regNo); break; case T_CFV1 : return getCFV1RegName(regNo); case T_CFVx : return getCFVxRegName(regNo); case T_ARM_JTAG : return getARMRegName(regNo); case T_ARM_SWD : return getARMRegName(regNo); case T_MC56F80xx: return getDSCRegName(regNo); }; return "Invalid target!"; }