Files

46 lines
1.5 KiB
Python

from .periph import Periph
class FMC(Periph):
BASE_ADDR = 0x5200_4000
def __init__(self):
self._BCR1 = 0x30DB
self._BCR2 = 0x30D2
self._BCR3 = 0x30D2
self._BCR4 = 0x30D2
self._PCR = 0x18
self._SDCR1 = 0x2D0
self._SDCR2 = 0x2D0
def read_mem(self, address: int, size: int) -> int:
if address == self.BASE_ADDR:
return self._BCR1
elif address == self.BASE_ADDR + 8:
return self._BCR2
elif address == self.BASE_ADDR + 16:
return self._BCR3
elif address == self.BASE_ADDR + 24:
return self._BCR4
elif address == self.BASE_ADDR + 0x80:
return self._PCR
elif address == self.BASE_ADDR + 0x140:
return self._SDCR1
elif address == self.BASE_ADDR + 0x144:
return self._SDCR2
return 0
def write_mem(self, address: int, size: int, data: int):
if address == self.BASE_ADDR:
self.set_reg('_BCR1', 0x833FFB7F, data)
elif address == self.BASE_ADDR + 8:
self.set_reg('_BCR2', 0x833FFB7F, data)
elif address == self.BASE_ADDR + 16:
self.set_reg('_BCR3', 0x833FFB7F, data)
elif address == self.BASE_ADDR + 24:
self.set_reg('_BCR4', 0x833FFB7F, data)
elif address == self.BASE_ADDR + 0x80:
return self._PCR
elif address == self.BASE_ADDR + 0x140:
return self._SDCR1
elif address == self.BASE_ADDR + 0x144:
return self._SDCR2