// ----------------------------------------------------------------------------
// Copyright (c) 2020-2025 RVX contributors
//
// This work is licensed under the MIT License, see LICENSE file for details.
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------

#include "libsteel.h"

#define DEFAULT_UART (UartController *)0x80000000
#define DEFAULT_MTIMER (MTimerController *)0x80010000

// Overrides the standard interrupt handler for Machine Timer interrupts
__NAKED void mti_irq_handler()
{
  mtimer_clear_counter(DEFAULT_MTIMER);
  uart_write_string(DEFAULT_UART, "Time elapsed: 1 sec\n");
  __ASM_VOLATILE("mret");
}

int main(void)
{
  uart_write_string(DEFAULT_UART, "MTimer demo started running...\n");
  mtimer_set_compare(DEFAULT_MTIMER, CPU_FREQUENCY);
  mtimer_clear_counter(DEFAULT_MTIMER);
  mtimer_enable(DEFAULT_MTIMER);
  csr_enable_vectored_mode_irq();
  CSR_SET(CSR_MIE, MIP_MIE_MASK_MTI);
  csr_global_enable_irq();
  while (1)
    ;
}
