6 #include "dt/dt_rv_timer.h"
10 #include "sw/device/lib/runtime/irq.h"
12 #include "sw/device/lib/testing/test_framework/check.h"
15 static dif_rv_timer_t timer;
16 static dt_rv_timer_t kRvTimerDt = (dt_rv_timer_t)0;
17 static_assert(kDtRvTimerCount >= 1,
18 "This test requires at least one RV Timer instance");
25 static volatile bool irq_fired =
true;
29 static const uint32_t kHart = 0;
30 static const uint32_t kComparator = 0;
32 static const uint64_t kTickFreqHz = 1000 * 1000;
34 static void test_handler(
void) {
35 CHECK(!irq_fired,
"Entered IRQ handler, but `irq_fired` was not false!");
38 CHECK_DIF_OK(dif_rv_timer_irq_is_pending(
39 &timer, kDtRvTimerIrqTimerExpiredHart0Timer0, &irq_flag));
40 CHECK(irq_flag,
"Entered IRQ handler but the expected IRQ flag wasn't set!");
44 CHECK_DIF_OK(dif_rv_timer_irq_acknowledge(
45 &timer, kDtRvTimerIrqTimerExpiredHart0Timer0));
51 void ottf_timer_isr(uint32_t *exc_info) {
52 LOG_INFO(
"Entering handler_irq_timer()");
54 LOG_INFO(
"Exiting handler_irq_timer()");
57 OTTF_DEFINE_TEST_CONFIG();
60 irq_global_ctrl(
true);
63 CHECK_DIF_OK(dif_rv_timer_init_from_dt(kRvTimerDt, &timer));
68 dt_clock_frequency(dt_rv_timer_clock(kRvTimerDt, kDtRvTimerClockClk)),
69 kTickFreqHz, &tick_params));
71 CHECK_DIF_OK(dif_rv_timer_irq_set_enabled(
74 uint64_t current_time;
82 LOG_INFO(
"Current time: %d; timer theshold: %d", (uint32_t)current_time,
83 (uint32_t)(current_time + kDeadline));