Esempio n. 1
0
        // read aligned word (the size is in words)
        public virtual List <UInt32> _readBlock32(UInt32 addr, UInt16 size)
        {
            var num = this.dp.next_access_number;

            if (DebugAccessPort.LOG_DAP)
            {
                Trace.TraceInformation("_readBlock32:%06d (addr=0x%08x, size=%d) {", num, addr, size);
            }
            // put address in TAR
            this.write_reg(DebugAccessPort.AP_REG["CSW"], CSW_VALUE | CSW_SIZE32);
            this.write_reg(DebugAccessPort.AP_REG["TAR"], addr);
            List <UInt32> resp;

            try
            {
                REG_APnDP_A3_A2 reg = DebugAccessPort._ap_addr_to_reg((this.ap_num << DebugAccessPort.APSEL_SHIFT) | DebugAccessPort.READ | DebugAccessPort.AP_ACC | DebugAccessPort.AP_REG["DRW"]);
                resp = this.link.reg_read_repeat(size, reg)();
            }
            catch (Exception error)
            {
                // Annotate error with target address.
                this._handle_error(error, num);
                throw new Exception(string.Format("Fault Address {0:X8}", addr), error); // error.fault_address = addr;
            }
            if (DebugAccessPort.LOG_DAP)
            {
                Trace.TraceInformation("_readBlock32:%06d }", num);
            }
            return(resp);
        }
Esempio n. 2
0
        // write aligned word ("data" are words)
        public virtual void _writeBlock32(UInt32 addr, List <UInt32> data)
        {
            var num = this.dp.next_access_number;

            if (DebugAccessPort.LOG_DAP)
            {
                Trace.TraceInformation("_writeBlock32:%06d (addr=0x%08x, size=%d) {", num, addr, data.Count);
            }
            // put address in TAR
            this.write_reg(DebugAccessPort.AP_REG["CSW"], CSW_VALUE | CSW_SIZE32);
            this.write_reg(DebugAccessPort.AP_REG["TAR"], addr);
            try
            {
                REG_APnDP_A3_A2 reg = DebugAccessPort._ap_addr_to_reg(this.ap_num << DebugAccessPort.APSEL_SHIFT | DebugAccessPort.WRITE | DebugAccessPort.AP_ACC | DebugAccessPort.AP_REG["DRW"]);
                this.link.reg_write_repeat((UInt16)data.Count, reg, data);
            }
            catch (Exception error)
            {
                // Annotate error with target address.
                this._handle_error(error, num);
                throw new Exception(string.Format("Fault Address {0:X8}", addr), error); // error.fault_address = addr;
            }
            if (DebugAccessPort.LOG_DAP)
            {
                Trace.TraceInformation("_writeBlock32:%06d }", num);
            }
        }