//! 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; USBDM_ErrorCode rc = BDM_RC_OK; Logging::print("DiRegisterRead(0x%X(%d))\n", dnRegNumber, dnRegNumber); CHECK_ERROR_STATE(); if (dnRegNumber>=cfv234regID_FIRST_DEBUG_REG) { dnRegNumber -= cfv234regID_FIRST_DEBUG_REG; rc = USBDM_ReadDReg(dnRegNumber,&dataValue); Logging::print("DiRegisterRead(0x%X(%s) => 0x%08X)\n", dnRegNumber, getCFVxDebugRegName(dnRegNumber), (uint32_t)dataValue); } else if (dnRegNumber >= cfv234regID_FIRST_CONTROL_REG) { dnRegNumber -= cfv234regID_FIRST_CONTROL_REG; rc = USBDM_ReadCReg(dnRegNumber,&dataValue); Logging::print("DiRegisterRead(0x%X(%s) => 0x%08X)\n", dnRegNumber, getCFVxControlRegName(dnRegNumber), (uint32_t)dataValue); } else { switch (dnRegNumber) { case cfv234regID_pc : rc = USBDM_ReadCReg(CFVx_CRegPC,&dataValue); Logging::print("DiRegisterRead(0x%X(%s) => 0x%08X)\n", CFVx_CRegPC, getCFVxControlRegName(CFVx_CRegPC), (uint32_t)dataValue); break; case cfv234regID_sr : rc = USBDM_ReadCReg(CFVx_CRegSR,&dataValue); Logging::print("DiRegisterRead(0x%X(%s) => 0x%08X)\n", CFVx_CRegSR, getCFVxControlRegName(CFVx_CRegSR), (uint32_t)dataValue); break; default : // D0-7, A0-7 if (dnRegNumber<=cfv234regID_a7) { rc = USBDM_ReadReg(dnRegNumber,&dataValue); Logging::print("DiRegisterRead(0x%X(%s) => 0x%08X)\n", dnRegNumber, getCFVxRegName(dnRegNumber), (uint32_t)dataValue); } else { Logging::print("DiRegisterRead(Illegal reg# = 0x%X (%d)\n", dnRegNumber, dnRegNumber); rc = BDM_RC_ILLEGAL_PARAMS; } break; } } if (rc != BDM_RC_OK) { Logging::print("DiRegisterRead(0x%X) => error\n", dnRegNumber); return setErrorState(DI_ERR_NONFATAL, rc); } *drvValue = (U32c)dataValue; Logging::print("0x%X(%d) => 0x%08X\n", dnRegNumber, dnRegNumber, dataValue); return setErrorState(DI_OK); }
//! 2.2.6.1 Write Value to Register //! //! @param dnRegNumber //! @param drvValue //! USBDM_GDI_API DiReturnT DiRegisterWrite ( DiUInt32T dnRegNumber, DiRegisterValueT drvValue ) { LOGGING; U32c value(drvValue); USBDM_ErrorCode rc = BDM_RC_OK; // Logging::print("DiRegisterWrite(0x%X(%d) <= 0x%08X)\n", dnRegNumber, dnRegNumber, (uint32_t)value); CHECK_ERROR_STATE(); if (dnRegNumber>cfv234regID_FIRST_DEBUG_REG) { dnRegNumber -= cfv234regID_FIRST_DEBUG_REG; Logging::print("DiRegisterWriteD(0x%X(%s) <= 0x%08X)\n", dnRegNumber, getCFVxDebugRegName(dnRegNumber), (uint32_t)value); rc = USBDM_WriteDReg(dnRegNumber,value); } else if (dnRegNumber > cfv234regID_FIRST_CONTROL_REG) { dnRegNumber -= cfv234regID_FIRST_CONTROL_REG; Logging::print("DiRegisterWriteC(0x%X(%s) <= 0x%08X)\n", dnRegNumber, getCFVxControlRegName(dnRegNumber), (uint32_t)value); rc = USBDM_WriteCReg(dnRegNumber,value); } else { switch (dnRegNumber) { case cfv234regID_pc : Logging::print("DiRegisterWrite(0x%X(%s) <= 0x%08X)\n", CFVx_CRegPC, getCFVxControlRegName(CFVx_CRegPC), (uint32_t)value); rc = USBDM_WriteCReg(CFVx_CRegPC,value); break; case cfv234regID_sr : Logging::print("DiRegisterWrite(0x%X(%s) <= 0x%08X)\n", CFVx_CRegSR, getCFVxControlRegName(CFVx_CRegSR), (uint32_t)value); rc = USBDM_WriteCReg(CFVx_CRegSR,value); break; default : // D0-7, A0-7 if (dnRegNumber<=cfv234regID_a7) { Logging::print("DiRegisterWrite(0x%X(%s) <= 0x%08X)\n", dnRegNumber, getCFVxRegName(dnRegNumber), (uint32_t)value); rc = USBDM_WriteReg(dnRegNumber,value); } else { Logging::print("DiRegisterWrite(illegal reg# = 0x%X (%d)\n", dnRegNumber, dnRegNumber); rc = BDM_RC_ILLEGAL_PARAMS; } break; } } if (rc != BDM_RC_OK) { // Logging::error("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); }
//! \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!"; }