summaryrefslogtreecommitdiff
path: root/tb/interval_timer.cpp
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2023-10-05 06:31:27 -0600
committerAlejandro Soto <alejandro@34project.org>2023-10-05 13:07:57 -0600
commite2d82e8e18ebddc78a0c187c4b7501b9f3aaa9c5 (patch)
treeeb72ed72e33f3a5ef3d9843ddcff624156177647 /tb/interval_timer.cpp
parent59caca686d4d7798b617ee2a9f9d4c5d1d27b8ff (diff)
tb: move most C++ source files to tb/top/conspiracion
Diffstat (limited to 'tb/interval_timer.cpp')
-rw-r--r--tb/interval_timer.cpp104
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;
- }
-}