Go to the documentation of this file.
41 #include "debug/Checkpoint.hh"
56 i2cAddr(0x00), message(0x00)
60 for (
auto d :
p->devices) {
106 d.second->i2cStart();
163 panic(
"Invalid state on posedge of clock in I2CBus::write.\n");
174 uint8_t msg = pkt->
getRaw<uint8_t>();
179 scl = (msg & 1) ? 1 :
scl;
180 sda = (msg & 2) ? 1 :
sda;
183 scl = (msg & 1) ? 0 :
scl;
184 sda = (msg & 2) ? 0 :
sda;
194 uint8_t msg = pkt->
getRaw<uint8_t>();
202 uint8_t msg = pkt->
getRaw<uint8_t>();
210 uint8_t msg = pkt->
getRaw<uint8_t>();
217 DPRINTF(Checkpoint,
"Serializing I2C bus.\n");
229 DPRINTF(Checkpoint,
"Unserializing I2C bus.\n");
239 I2CBusParams::create()
void makeAtomicResponse()
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Addr pioAddr
Address that the device listens to.
uint8_t message
8-bit buffer used to send and receive messages bit by bit.
uint8_t i2cAddr
Key used to access a device in the slave devices map.
#define UNSERIALIZE_SCALAR(scalar)
uint8_t scl
I2C clock wire (0, 1).
void updateSignals(PacketPtr pkt)
Update data (sda) and clock (scl) to match any transitions specified by pkt.
Tick read(PacketPtr pkt) override
Reads will always be to SB_CONTROLS.
void setRaw(T v)
Set the value in the data pointer to v without byte swapping.
uint8_t sda
I2C data wire (0, 1)
int currBit
Order of the bit of the current message that is being sent or received (0 - 7).
uint64_t Tick
Tick count type.
I2CBus(const I2CBusParams *p)
4KB - see e.g.
enum I2CState state
State used by I2CBus::write to determine what stage of an i2c transmission it is currently in.
#define SERIALIZE_ENUM(scalar)
bool isStart(PacketPtr pkt) const
i2c start signal check
void serialize(CheckpointOut &cp) const override
Serialize an object.
static const int SB_CONTROLS
Read [and Set] serial control bits: Bit [0] is SCL Bit [1] is SDA.
bool isEnd(PacketPtr pkt) const
i2c end signal check
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
#define SERIALIZE_SCALAR(scalar)
Tick write(PacketPtr pkt) override
The default i2c bus driver used by the realview pbx board writes to this device one bit at a time.
T getRaw() const
Get the data in the packet without byte swapping.
static const int SB_CONTROLC
Clear control bits.
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Tick pioDelay
Delay that the device experinces on an access.
std::ostream CheckpointOut
#define UNSERIALIZE_ENUM(scalar)
std::map< uint8_t, I2CDevice * > devices
All the slave i2c devices that are connected to this bus.
bool isClockSet(PacketPtr pkt) const
Clock set check.
#define panic(...)
This implements a cprintf based panic() function.
Generated on Wed Sep 30 2020 14:02:11 for gem5 by doxygen 1.8.17