fsmcBank1: Memory.MappedMemory @ sysbus 0x60000000
    size: 0x10000000

sram: Memory.MappedMemory @ sysbus 0x20000000
    size: 0x00040000

flash: Memory.MappedMemory @ sysbus 0x08000000
    size: 0x200000

uart1: UART.STM32_UART @ sysbus <0x40011000, +0x100>
    -> nvic@37

uart2: UART.STM32_UART @ sysbus <0x40004400, +0x100>
    -> nvic@38

uart3: UART.STM32_UART @ sysbus <0x40004800, +0x100>
    -> nvic@39

uart4: UART.STM32_UART @ sysbus <0x40004C00, +0x100>
    -> nvic@52

uart5: UART.STM32_UART @ sysbus <0x40005000, +0x100>
    -> nvic@53

can0: CAN.STMCAN @ sysbus <0x40006400, +0x400>
    [0-3] -> nvic@[19-22]

nvic: IRQControllers.NVIC @ sysbus 0xE000E000
    priorityMask: 0xF0
    systickFrequency: 72000000
    IRQ -> cpu@0

cpu: CPU.CortexM @ sysbus
    cpuType: "cortex-m4"
    nvic: nvic

exti: IRQControllers.EXTI @ sysbus 0x40013C00
    [0-6] -> nvic@[6-10, 23, 40]

gpioPortA: GPIOPort.STM32F4GPIOPort @ sysbus <0x40020000, +0x400>
    modeResetValue: 0xA8000000
    pullUpPullDownResetValue: 0x64000000
    [0-15] -> exti@[0-15]

gpioPortB: GPIOPort.STM32F4GPIOPort @ sysbus <0x40020400, +0x400>
    modeResetValue: 0x00000280
    outputSpeedResetValue: 0x000000C0
    pullUpPullDownResetValue: 0x00000100
    [0-15] -> exti@[0-15]

gpioPortC: GPIOPort.STM32F4GPIOPort @ sysbus <0x40020800, +0x400>
    [0-15] -> exti@[0-15]

gpioPortD: GPIOPort.STM32F4GPIOPort @ sysbus <0x40020C00, +0x400>
    [0-15] -> exti@[0-15]

gpioPortE: GPIOPort.STM32F4GPIOPort @ sysbus <0x40021000, +0x400>
    [0-15] -> exti@[0-15]

gpioPortF: GPIOPort.STM32F4GPIOPort @ sysbus <0x40021400, +0x400>
    [0-15] -> exti@[0-15]

ethernet: Network.SynopsysEthernetMAC @ sysbus 0x40028000
    -> nvic@61

rom: Memory.MappedMemory @ sysbus 0x1FFF0000
    size: 0x10000

spi1: SPI.STM32SPI @ sysbus 0x40013000

spi2: SPI.STM32SPI @ sysbus 0x40003800

spi3: SPI.STM32SPI @ sysbus 0x40003C00

dma1: DMA.STM32DMA @ sysbus 0x40026000
    [0-7] -> nvic@[11-17,47]

dma2: DMA.STM32DMA @ sysbus 0x40026400
    [0-7] -> nvic@[56-60,68-70]

rng: Miscellaneous.STM32F4_RNG @ sysbus 0x50060800
    -> nvic@80

rtc: Timers.STM32F4_RTC @ sysbus 0x40002800
    AlarmIRQ -> nvic@41

rcc: Miscellaneous.STM32F4_RCC @ sysbus 0x40023800
    rtcPeripheral: rtc

timer1: Timers.STM32_Timer @ sysbus <0x40010000, +0x400>
    frequency: 10000000
    initialLimit: 0xFFFF

timer2: Timers.STM32_Timer @ sysbus <0x40000000, +0x400>
    -> nvic@28
    frequency: 10000000
    initialLimit: 0xFFFFFFFF

timer3: Timers.STM32_Timer @ sysbus <0x40000400, +0x400>
    -> nvic@29
    frequency: 10000000
    initialLimit: 0xFFFF

timer4: Timers.STM32_Timer @ sysbus <0x40000800, +0x400>
    -> nvic@30
    frequency: 10000000
    initialLimit: 0xFFFF

timer5: Timers.STM32_Timer @ sysbus <0x40000C00, +0x400>
    -> nvic@50
    frequency: 10000000
    initialLimit: 0xFFFFFFFF

timer6: Timers.STM32_Timer @ sysbus <0x40001000, +0x400>
    -> nvic@54
    frequency: 10000000
    initialLimit: 0xFFFF

timer7: Timers.STM32_Timer @ sysbus <0x40001400, +0x400>
    -> nvic@55
    frequency: 10000000
    initialLimit: 0xFFFF

timer8: Timers.STM32_Timer @ sysbus <0x40010400, +0x400>
    frequency: 10000000
    initialLimit: 0xFFFF

timer9: Timers.STM32_Timer @ sysbus <0x40014000, +0x400>
    -> nvic@24
    frequency: 10000000
    initialLimit: 0xFFFF

timer10: Timers.STM32_Timer @ sysbus <0x40014400, +0x400>
    -> nvic@25
    frequency: 10000000
    initialLimit: 0xFFFF

timer11: Timers.STM32_Timer @ sysbus <0x40014800, +0x400>
    -> nvic@26
    frequency: 10000000
    initialLimit: 0xFFFF

timer12: Timers.STM32_Timer @ sysbus <0x40001800, +0x400>
    -> nvic@43
    frequency: 10000000
    initialLimit: 0xFFFF

timer13: Timers.STM32_Timer @ sysbus <0x40001C00, +0x400>
    -> nvic@44
    frequency: 10000000
    initialLimit: 0xFFFF

timer14: Timers.STM32_Timer @ sysbus <0x40002000, +0x400>
    -> nvic@45
    frequency: 10000000
    initialLimit: 0xFFFF

bitbandPeripherals: Miscellaneous.BitBanding @ sysbus <0x42000000, +0x2000000>
    peripheralBase: 0x40000000

bitbandSram: Miscellaneous.BitBanding @ sysbus <0x22000000, +0x200000>
    peripheralBase: 0x20000000

sysbus:
    init:
        ApplySVD @https://dl.antmicro.com/projects/renode/svd/STM32F40x.svd.gz
        Tag <0x40021000, 0x40021003> "GPIOE_MODER" 0xFFFFFFFF
        Tag <0x40021004, 0x40021007> "GPIOE_OTYPER" 0x00000008
