//! 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);
}
Exemplo n.º 3
0
//! \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!";
}