diff options
| author | Alejandro Soto <alejandro@34project.org> | 2023-10-05 06:31:27 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2023-10-05 13:07:57 -0600 |
| commit | e2d82e8e18ebddc78a0c187c4b7501b9f3aaa9c5 (patch) | |
| tree | eb72ed72e33f3a5ef3d9843ddcff624156177647 /tb/interval_timer.cpp | |
| parent | 59caca686d4d7798b617ee2a9f9d4c5d1d27b8ff (diff) | |
tb: move most C++ source files to tb/top/conspiracion
Diffstat (limited to 'tb/interval_timer.cpp')
| -rw-r--r-- | tb/interval_timer.cpp | 104 |
1 files changed, 0 insertions, 104 deletions
diff --git a/tb/interval_timer.cpp b/tb/interval_timer.cpp deleted file mode 100644 index 7ab15d8..0000000 --- a/tb/interval_timer.cpp +++ /dev/null @@ -1,104 +0,0 @@ -#include <cstdint> - -#include "avalon.hpp" -#include "interval_timer.hpp" - -namespace taller::avalon -{ - interval_timer::interval_timer(std::uint32_t base) noexcept - : slave(base, 32, 4) - {} - - void interval_timer::tick() noexcept - { - if(!status_run) - { - return; - } else if(count > 0) - { - --count; - } else - { - count = period; - status_to = 1; - status_run = control_cont; - } - } - - bool interval_timer::read(std::uint32_t addr, std::uint32_t &data) noexcept - { - switch(addr) - { - case 0: - data - = status_run << 1 - | status_to << 0; - - break; - - case 1: - data - = control_cont << 1 - | control_ito << 0; - - break; - - case 2: - data = period & 0xffff; - break; - - case 3: - data = period >> 16; - break; - - case 4: - data = snap & 0xffff; - break; - - case 5: - data = snap >> 16; - break; - } - - return true; - } - - bool interval_timer::write(std::uint32_t addr, std::uint32_t data, unsigned byte_enable) noexcept - { - switch(addr) - { - case 0: - status_to = 0; - break; - - case 1: - control_ito = !!(data & (1 << 0)); - control_cont = !!(data & (1 << 1)); - - status_run = (status_run && !!(data & (1 << 3))) || !!(data & (1 << 2)); - break; - - case 2: - period = (period & 0xffff'0000) | (data & 0xffff); - count = period; - break; - - case 3: - period = (period & 0xffff) | (data & 0xffff) << 16; - count = period; - break; - - case 4: - case 5: - snap = count; - break; - } - - return true; - } - - bool interval_timer::irq() noexcept - { - return control_ito && status_to; - } -} |
