|
|
1.1 root 1: //
2: // nono
1.1.1.4 ! root 3: // Copyright (C) 2020 nono project
! 4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #include "sysclk.h"
1.1.1.4 ! root 8: #include "mainapp.h"
1.1 root 9: #include "mpu.h"
10:
11: SysClkDevice::SysClkDevice()
12: {
13: logname = "sysclk";
14: devname = "SystemClock";
15: devaddr = 0x63000000;
16:
17: event.dev = this;
18: event.func = (DeviceCallback_t)&SysClkDevice::Callback;
19: event.code = 0;
1.1.1.2 root 20: event.SetName("System Clock");
1.1 root 21: }
22:
23: SysClkDevice::~SysClkDevice()
24: {
25: }
26:
27: bool
1.1.1.4 ! root 28: SysClkDevice::Init()
! 29: {
! 30: // クロックは機種ごとに異なる
! 31: const ConfigItem& item = gConfig->Find("!sysclk-period");
! 32: event.time = item.AsInt();
! 33: return true;
! 34: }
! 35:
! 36: bool
1.1 root 37: SysClkDevice::PowerOn()
38: {
39: // 電源オンですぐ起動
1.1.1.3 root 40: event.Start();
1.1 root 41: return true;
42: }
43:
44: uint64
1.1.1.3 root 45: SysClkDevice::Read(uint32 addr)
1.1 root 46: {
1.1.1.3 root 47: // 1 ポートしかない
48: return GetInt();
49: }
1.1 root 50:
1.1.1.3 root 51: uint64
52: SysClkDevice::Write(uint32 addr, uint32 data)
53: {
54: // 何か書き込まれたら、フラグをクリア
55: sysint = false;
56: putlog(1, "システムクロック割り込みクリア");
57: return 0;
1.1 root 58: }
59:
60: uint64
1.1.1.3 root 61: SysClkDevice::Peek(uint32 addr)
1.1 root 62: {
1.1.1.3 root 63: return GetInt();
64: }
65:
66: // 割り込み状態を取得(?)
67: uint8
68: SysClkDevice::GetInt() const
69: {
70: uint8 data = 0;
1.1 root 71:
1.1.1.3 root 72: if (sysint) {
73: data |= 0x80;
1.1 root 74: }
1.1.1.3 root 75: return data;
1.1 root 76: }
77:
78: // イベントハンドラ
79: void
80: SysClkDevice::Callback(int arg)
81: {
82: putlog(3, "システムクロック割り込み発生");
83: sysint = true;
1.1.1.4 ! root 84: gMPU->Interrupt(this, 5);
1.1.1.3 root 85: event.Start();
1.1 root 86: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.