SimpleKernel 1.17.0
Loading...
Searching...
No Matches
timer.cpp
Go to the documentation of this file.
1
5#include <cpu_io.h>
6#include <opensbi_interface.h>
7
8#include "arch.h"
9#include "basic_info.hpp"
10#include "interrupt.h"
11#include "kernel.h"
12#include "task_manager.hpp"
13
15namespace {
16uint64_t interval{0};
17
18auto TimerHandler(uint64_t /*cause*/, cpu_io::TrapContext* /*context*/)
19 -> uint64_t {
20 sbi_set_timer(cpu_io::Time::Read() + interval);
21 TaskManagerSingleton::instance().TickUpdate();
22 return 0;
23}
24} // namespace
25
26auto TimerInitSMP() -> void {
27 // 开启时钟中断
28 cpu_io::Sie::Stie::Set();
29
30 // 设置初次时钟中断时间
31 sbi_set_timer(cpu_io::Time::Read() + interval);
32}
33
34auto TimerInit() -> void {
35 // 计算 interval
36 interval = BasicInfoSingleton::instance().interval / SIMPLEKERNEL_TICK;
37
38 // 注册时钟中断
39 InterruptSingleton::instance().RegisterInterruptFunc(
40 cpu_io::ScauseInfo::kSupervisorTimerInterrupt,
41 InterruptDelegate::create<TimerHandler>());
42
43 // 开启时钟中断
44 cpu_io::Sie::Stie::Set();
45
46 // 设置初次时钟中断时间
47 sbi_set_timer(cpu_io::Time::Read() + interval);
48}
InterruptBase::InterruptDelegate InterruptDelegate
auto TimerInitSMP() -> void
从核的定时器初始化
Definition timer.cpp:35
auto TimerInit() -> void
初始化定时器
Definition timer.cpp:47
etl::delegate< uint64_t(uint64_t, cpu_io::TrapContext *)> InterruptDelegate
类型安全的中断处理委托