9 #include "sw/device/lib/runtime/irq.h"
11 #include "sw/device/lib/testing/rv_plic_testutils.h"
12 #include "sw/device/lib/testing/test_framework/check.h"
16 #include "sensor_ctrl_regs.h"
17 #include "sw/device/lib/testing/autogen/isr_testutils.h"
19 OTTF_DEFINE_TEST_CONFIG();
29 static dif_sensor_ctrl_t sensor_ctrl;
30 static dif_rv_plic_t plic;
31 static plic_isr_ctx_t plic_ctx = {.rv_plic = &plic,
34 static sensor_ctrl_isr_ctx_t sensor_ctrl_isr_ctx = {
35 .sensor_ctrl = &sensor_ctrl,
36 .plic_sensor_ctrl_start_irq_id =
38 .expected_irq = kDifSensorCtrlIrqIoStatusChange,
39 .is_only_irq =
false};
44 void ottf_external_isr(uint32_t *exc_info) {
45 dif_sensor_ctrl_irq_t irq_id;
48 isr_testutils_sensor_ctrl_isr(plic_ctx, sensor_ctrl_isr_ctx, &peripheral,
53 "IRQ peripheral: %d is incorrect", peripheral);
54 CHECK(irq_id == kDifSensorCtrlIrqIoStatusChange,
"IRQ ID: %d is incorrect",
59 uint32_t iterations = 10;
60 uint32_t io_mask = (1 << SENSOR_CTRL_PARAM_NUM_IO_RAILS) - 1;
64 irq_global_ctrl(
true);
65 irq_external_ctrl(
true);
68 CHECK_DIF_OK(dif_rv_plic_init(
72 CHECK_DIF_OK(dif_sensor_ctrl_init(
77 rv_plic_testutils_irq_range_enable(
83 CHECK_DIF_OK(dif_sensor_ctrl_irq_acknowledge_all(&sensor_ctrl));
86 CHECK_DIF_OK(dif_sensor_ctrl_irq_set_enabled(
89 last_io_status = io_mask;
90 for (uint32_t i = 0; i < iterations; ++i) {
96 last_io_status = curr_io_status;