peripherals: add rtc/i2c/pwdet combo block
This undocumented block appears to do something important, but we just need to report that i2c is locked. Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
99
peripherals/ESP32S3_RTC_I2C_PWDET.cs
Normal file
99
peripherals/ESP32S3_RTC_I2C_PWDET.cs
Normal file
@ -0,0 +1,99 @@
|
||||
//
|
||||
// Copyright (c) 2010-2023 Antmicro
|
||||
// Copyright (c) 2011-2015 Realtime Embedded
|
||||
//
|
||||
// This file is licensed under the MIT License.
|
||||
// Full license text is available in 'licenses/MIT.txt'.
|
||||
//
|
||||
using System;
|
||||
using Antmicro.Renode.Peripherals.Bus;
|
||||
using Antmicro.Renode.Core;
|
||||
using Antmicro.Renode.Peripherals;
|
||||
using Antmicro.Renode.Utilities;
|
||||
using Antmicro.Renode.Logging;
|
||||
using System.Collections.Generic;
|
||||
using Antmicro.Renode.Core.Structure.Registers;
|
||||
|
||||
namespace Antmicro.Renode.Peripherals.Miscellaneous
|
||||
{
|
||||
public class ESP32S3_RTC_I2C_PWDET : IBytePeripheral, IDoubleWordPeripheral, IKnownSize
|
||||
{
|
||||
public ESP32S3_RTC_I2C_PWDET(Machine machine)
|
||||
{
|
||||
var registersMap = new Dictionary<long, DoubleWordRegister>
|
||||
{
|
||||
{(long)Registers.I2C_MST_ANA_CONF0, new DoubleWordRegister(this)
|
||||
.WithFlag(2, FieldMode.Read | FieldMode.Write, name: "BBPLL_STOP_FORCE_HIGH")
|
||||
.WithFlag(3, FieldMode.Read | FieldMode.Write, name: "BBPLL_STOP_FORCE_LOW")
|
||||
.WithFlag(24, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => true, name: "BBPLL_CAL_DONE")
|
||||
},
|
||||
// {(long)Registers.ANA_CONFIG, new DoubleWordRegister(this)
|
||||
// .WithValueField(0, 8, FieldMode.Read | FieldMode.Write, name: "CONFIG")
|
||||
// .WithFlag(17, FieldMode.Read | FieldMode.Write, name: "BBPLL")
|
||||
// .WithFlag(18, FieldMode.Read | FieldMode.Write, name: "SAR")
|
||||
// },
|
||||
// {(long)Registers.ANA_CONFIG2, new DoubleWordRegister(this)
|
||||
// .WithFlag(16, FieldMode.Read | FieldMode.Write, name: "SAR_CFG2")
|
||||
// },
|
||||
// {(long)Registers.PWDET_CONF, new DoubleWordRegister(this)
|
||||
// .WithFlag(6, FieldMode.Read | FieldMode.Write, name: "SAR_POWER_CNTL")
|
||||
// .WithFlag(7, FieldMode.Read | FieldMode.Write, name: "SAR_POWER_FORCE")
|
||||
// },
|
||||
};
|
||||
|
||||
registers = new DoubleWordRegisterCollection(this, registersMap);
|
||||
}
|
||||
|
||||
public uint ReadDoubleWord(long offset)
|
||||
{
|
||||
return registers.Read(offset);
|
||||
}
|
||||
|
||||
public byte ReadByte(long offset)
|
||||
{
|
||||
if (offset % 4 != 0)
|
||||
{
|
||||
// in the current configuration, only the lowest byte
|
||||
// contains a meaningful data
|
||||
return 0;
|
||||
}
|
||||
return (byte)ReadDoubleWord(offset);
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
// base.Reset();
|
||||
registers.Reset();
|
||||
|
||||
// UpdateInterrupts();
|
||||
}
|
||||
|
||||
public void WriteDoubleWord(long offset, uint value)
|
||||
{
|
||||
registers.Write(offset, value);
|
||||
}
|
||||
|
||||
public void WriteByte(long offset, byte value)
|
||||
{
|
||||
if (offset % 4 != 0)
|
||||
{
|
||||
// in the current configuration, only the lowest byte
|
||||
// contains a meaningful data
|
||||
return;
|
||||
}
|
||||
|
||||
WriteDoubleWord(offset, value);
|
||||
}
|
||||
|
||||
public long Size => 0x17C;
|
||||
private readonly DoubleWordRegisterCollection registers;
|
||||
|
||||
private enum Registers : long
|
||||
{
|
||||
I2C_MST_ANA_CONF0 = 0x40,
|
||||
ANA_CONFIG = 0x44,
|
||||
ANA_CONFIG2 = 0x48,
|
||||
PWDET_CONF = 0x60,
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user