|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2018 [email protected] ! 4: // ! 5: ! 6: #include "sysclk.h" ! 7: #include "mpu.h" ! 8: ! 9: SysClkDevice::SysClkDevice() ! 10: { ! 11: logname = "sysclk"; ! 12: devname = "SystemClock"; ! 13: devaddr = 0x63000000; ! 14: ! 15: event.dev = this; ! 16: event.func = (DeviceCallback_t)&SysClkDevice::Callback; ! 17: event.code = 0; ! 18: event.time = 16.666667_msec; ! 19: event.name = "System Clock"; ! 20: } ! 21: ! 22: SysClkDevice::~SysClkDevice() ! 23: { ! 24: } ! 25: ! 26: bool ! 27: SysClkDevice::PowerOn() ! 28: { ! 29: // 電源オンですぐ起動 ! 30: gScheduler->AddEvent(&event); ! 31: return true; ! 32: } ! 33: ! 34: uint64 ! 35: SysClkDevice::Read8(uint32 addr) ! 36: { ! 37: uint32 an = addr - devaddr; ! 38: ! 39: if (an == 0) { ! 40: uint8 data = 0; ! 41: if (sysint) { ! 42: data |= 0x80; ! 43: } ! 44: return data; ! 45: } else { ! 46: // それ以外のポートがどう見えるかとか未調査 ! 47: return 0xff; ! 48: } ! 49: } ! 50: ! 51: uint64 ! 52: SysClkDevice::Write8(uint32 addr, uint32 data) ! 53: { ! 54: uint32 an = addr - devaddr; ! 55: ! 56: if (an == 0) { ! 57: // 何か書き込まれたら、フラグをクリア ! 58: sysint = false; ! 59: putlog(1, "システムクロック割り込みクリア"); ! 60: } else { ! 61: // それ以外 (特に +1, +2, +3) で何が起きるかは未調査 ! 62: } ! 63: return 0; ! 64: } ! 65: ! 66: // イベントハンドラ ! 67: void ! 68: SysClkDevice::Callback(int arg) ! 69: { ! 70: putlog(3, "システムクロック割り込み発生"); ! 71: sysint = true; ! 72: gMPU->Interrupt(5); ! 73: gScheduler->AddEvent(&event); ! 74: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.