inline register_value_type read_register(Register offset) const
{
const volatile register_value_type* va = reinterpret_cast<register_value_type*>(vaddr_.get());
return *(va + offset / sizeof(*va));
}
bool axi_iic_bus::wait_busy()
{
register_value_type status;
std::chrono::milliseconds elapsed_time;
auto start_time = std::chrono::steady_clock::now();
do
{
auto stop_time = std::chrono::steady_clock::now();
elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(stop_time - start_time);
status = read_register(Register::Status);
status &= StatusBit::BusBusy;
} while (!status && elapsed_time.count() < WAIT_BUSY_TIMEOUT);
return status;
}