306 lines
8.8 KiB
Plaintext
306 lines
8.8 KiB
Plaintext
// Main Flash memory
|
|
// Upper size:
|
|
// STM32G0B1xx and STM32G0C1xx: 0x0807 FFFF; STM32G071xx and STM32G081xx: 0x0801 FFFF; STM32G051xx and
|
|
// STM32G061xx, STM32G031xx and STM32G041xx: 0x0800 FFFF.
|
|
flash: Memory.MappedMemory @ sysbus 0x08000000
|
|
size: 0x20000
|
|
|
|
ram: Memory.MappedMemory @ sysbus 0x20000000
|
|
size: 0xC000
|
|
|
|
nvic: IRQControllers.NVIC @ sysbus 0xE000E000
|
|
priorityMask: 0xF0
|
|
systickFrequency: 72000000
|
|
IRQ -> cpu@0
|
|
|
|
// This model's registers are not compatible with the EXTI in this MCU,
|
|
// it is currently here to support direct interrupts
|
|
exti: IRQControllers.STM32F4_EXTI @ sysbus 0x40021800
|
|
numberOfOutputLines: 34
|
|
firstDirectLine: 19
|
|
[0, 1] -> nvicInput5@[0, 1]
|
|
[2, 3] -> nvicInput6@[0, 1]
|
|
[4-15] -> nvicInput7@[0-11]
|
|
[23] -> nvic@[23]
|
|
[32, 33] -> nvicInput8@[0, 1]
|
|
[17, 18] -> nvicInput12@[0, 1]
|
|
|
|
nvicInput8: Miscellaneous.CombinedInput @ none
|
|
numberOfInputs: 2
|
|
-> nvic@8
|
|
|
|
nvicInput10: Miscellaneous.CombinedInput @ none
|
|
numberOfInputs: 2
|
|
-> nvic@10
|
|
|
|
nvicInput11: Miscellaneous.CombinedInput @ none
|
|
numberOfInputs: 9
|
|
-> nvic@11
|
|
|
|
nvicInput12: Miscellaneous.CombinedInput @ none
|
|
numberOfInputs: 2
|
|
-> nvic@12
|
|
|
|
nvicInput5: Miscellaneous.CombinedInput @ none
|
|
numberOfInputs: 2
|
|
-> nvic@5
|
|
|
|
nvicInput6: Miscellaneous.CombinedInput @ none
|
|
numberOfInputs: 2
|
|
-> nvic@6
|
|
|
|
nvicInput7: Miscellaneous.CombinedInput @ none
|
|
numberOfInputs: 12
|
|
-> nvic@7
|
|
|
|
nvicInput29: Miscellaneous.CombinedInput @ none
|
|
numberOfInputs: 4
|
|
-> nvic@29
|
|
|
|
cpu: CPU.CortexM @ sysbus
|
|
cpuType: "cortex-m0"
|
|
nvic: nvic
|
|
|
|
usart1: UART.STM32F7_USART @ sysbus 0x40013800
|
|
frequency: 200000000
|
|
IRQ -> nvic@27
|
|
|
|
usart2: UART.STM32F7_USART @ sysbus 0x40004400
|
|
frequency: 200000000
|
|
IRQ -> nvic@28
|
|
|
|
usart3: UART.STM32F7_USART @ sysbus 0x40004800
|
|
frequency: 200000000
|
|
IRQ -> nvicInput29@0
|
|
|
|
usart4: UART.STM32F7_USART @ sysbus 0x40004C00
|
|
frequency: 200000000
|
|
IRQ -> nvicInput29@1
|
|
|
|
usart5: UART.STM32F7_USART @ sysbus 0x40005000
|
|
frequency: 200000000
|
|
IRQ -> nvicInput29@2
|
|
|
|
usart6: UART.STM32F7_USART @ sysbus 0x40013C00
|
|
frequency: 200000000
|
|
IRQ -> nvicInput29@3
|
|
|
|
gpioPortA: GPIOPort.STM32_GPIOPort @ sysbus <0x50000000, +0x400>
|
|
modeResetValue: 0xEBFFFFFF
|
|
pullUpPullDownResetValue: 0x24000000
|
|
numberOfAFs: 8
|
|
invertedAFPins: [[7, 2]]
|
|
[0-15] -> exti@[0-15]
|
|
|
|
gpioPortB: GPIOPort.STM32_GPIOPort @ sysbus <0x50000400, +0x400>
|
|
modeResetValue: 0xFFFFFFFF
|
|
pullUpPullDownResetValue: 0x00000000
|
|
numberOfAFs: 8
|
|
invertedAFPins: [[0, 2], [1, 2], [6, 2], [7, 2], [13, 2], [14, 2], [15, 2]]
|
|
[0-15] -> exti@[0-15]
|
|
|
|
gpioPortC: GPIOPort.STM32_GPIOPort @ sysbus <0x50000800, +0x400>
|
|
modeResetValue: 0xFFFFFFFF
|
|
pullUpPullDownResetValue: 0x00000000
|
|
numberOfAFs: 8
|
|
[0-15] -> exti@[0-15]
|
|
|
|
gpioPortD: GPIOPort.STM32_GPIOPort @ sysbus <0x50000C00, +0x400>
|
|
modeResetValue: 0xFFFFFFFF
|
|
pullUpPullDownResetValue: 0x00000000
|
|
numberOfAFs: 8
|
|
invertedAFPins: [[2, 2], [3, 2]]
|
|
[0-15] -> exti@[0-15]
|
|
|
|
gpioPortE: GPIOPort.STM32_GPIOPort @ sysbus <0x50001000, +0x400>
|
|
modeResetValue:0xFFFFFFFF
|
|
pullUpPullDownResetValue: 0x00000000
|
|
numberOfAFs: 8
|
|
[0-15] -> exti@[0-15]
|
|
|
|
gpioPortF: GPIOPort.STM32_GPIOPort @ sysbus <0x50001400, +0x400>
|
|
modeResetValue: 0xFFFFFFFF
|
|
pullUpPullDownResetValue: 0x00000000
|
|
numberOfAFs: 8
|
|
[0-15] -> exti@[0-15]
|
|
|
|
i2c1: I2C.STM32F7_I2C @ sysbus 0x40005400
|
|
EventInterrupt -> exti@23
|
|
|
|
i2c2: I2C.STM32F7_I2C @ sysbus 0x40005800
|
|
EventInterrupt -> exti@22
|
|
|
|
spi1: SPI.STM32SPI @ sysbus 0x40013000
|
|
IRQ -> nvic@25
|
|
|
|
spi2: SPI.STM32SPI @ sysbus 0x40003800
|
|
IRQ -> nvic@26
|
|
|
|
spi3: SPI.STM32SPI @ sysbus 0x40003C00
|
|
IRQ -> nvic@26
|
|
|
|
timer1: Timers.STM32_Timer @ sysbus 0x40012C00
|
|
frequency: 10000000
|
|
initialLimit: 0xFFFF
|
|
[BreakInterrupt, UpdateInterrupt, TriggerInterrupt, CommutationInterrupt] -> nvic@[13, 13, 13, 13]
|
|
CaptureCompareInterrupt -> nvic@14
|
|
|
|
timer2: Timers.STM32_Timer @ sysbus 0x40000000
|
|
frequency: 10000000
|
|
initialLimit: 0xFFFFFFFF
|
|
-> nvic@15
|
|
|
|
timer3: Timers.STM32_Timer @ sysbus 0x40000400
|
|
frequency: 10000000
|
|
initialLimit: 0xFFFF
|
|
-> nvic@16
|
|
|
|
timer4: Timers.STM32_Timer @ sysbus 0x40000800
|
|
frequency: 10000000
|
|
initialLimit: 0xFFFF
|
|
-> nvic@16
|
|
|
|
timer6: Timers.STM32_Timer @ sysbus 0x40001000
|
|
frequency: 10000000
|
|
initialLimit: 0xFFFF
|
|
-> nvic@17
|
|
|
|
timer7: Timers.STM32_Timer @ sysbus 0x40001400
|
|
frequency: 10000000
|
|
initialLimit: 0xFFFF
|
|
-> nvic@18
|
|
|
|
timer14: Timers.STM32_Timer @ sysbus 0x40002000
|
|
frequency: 10000000
|
|
initialLimit: 0xFFFF
|
|
-> nvic@19
|
|
|
|
timer15: Timers.STM32_Timer @ sysbus 0x40014000
|
|
frequency: 10000000
|
|
initialLimit: 0xFFFF
|
|
-> nvic@20
|
|
|
|
timer16: Timers.STM32_Timer @ sysbus 0x40014400
|
|
frequency: 10000000
|
|
initialLimit: 0xFFFF
|
|
-> nvic@21
|
|
|
|
timer17: Timers.STM32_Timer @ sysbus 0x40014800
|
|
frequency: 10000000
|
|
initialLimit: 0xFFFF
|
|
-> nvic@22
|
|
|
|
fdcan1: CAN.STMCAN @ sysbus <0x40006400, +0x400>
|
|
fdcan2: CAN.STMCAN @ sysbus <0x40006800, +0x400>
|
|
|
|
rtc: Timers.STM32F4_RTC @ sysbus 0x40002800
|
|
AlarmIRQ -> exti@19
|
|
|
|
rcc: Python.PythonPeripheral @ sysbus 0x40021000
|
|
size: 0x400
|
|
initable: true
|
|
script: '''
|
|
if request.IsInit:
|
|
lastVal = 0
|
|
data = {'hsion': 1, 'pllon': 0, 'sw': 0, 'lsion': 0}
|
|
self.NoisyLog("%s on FLIPFLOP at offset 0x%x, value 0x%x, length %d, %s" % (str(request.Type), request.Offset, request.Value, request.Length, str(data)))
|
|
|
|
if request.IsWrite:
|
|
if request.Offset == 0x0:
|
|
# HSION [doc = "Bit 8 - HSI16 clock enable"]
|
|
data['hsion'] = (request.Value >> 8) & 0x1
|
|
# PLLON [doc = "Bit 24 - PLL enable"]
|
|
data['pllon'] = (request.Value >> 24) & 0x1
|
|
elif request.Offset == 0x8:
|
|
# SW_W [doc = "Bits 0:2 - System clock switch"]
|
|
data['sw'] = request.Value & 0x7
|
|
elif request.Offset == 0x60:
|
|
data['lsion'] = request.Value & 0x1
|
|
elif request.IsRead:
|
|
lastVal = 1 - lastVal
|
|
if request.Offset == 0x0:
|
|
# request.Value = lastVal * 0x83
|
|
|
|
# RCC_CR [doc = "0x00 - Clock control register"]
|
|
# HSION_RW [doc = "Bit 8 - HSI16 clock enable flag"]
|
|
# HSIRDY_R [doc = "Bit 10 - HSI16 clock ready flag"] # HSIRDY == HISON for this model
|
|
# PLLRDY [doc = "Bit 25 - PLL clock ready flag"]
|
|
request.Value = (data['hsion'] << 8) | (data['hsion'] << 10) | (data['pllon'] << 25)
|
|
elif request.Offset == 0x4:
|
|
request.Value = lastVal * 0xFFFFFFF8
|
|
elif request.Offset == 0x24:
|
|
request.Value = 0x0
|
|
elif request.Offset == 0x60:
|
|
request.Value = (data['lsion'] << 1)
|
|
else:
|
|
# RCC_CFGR [doc = "0x08 - Clock configuration register"]
|
|
# SWS_R [doc = "Bits 3:5 - System clock switch status"]
|
|
# request.Value = lastVal * 0xFFFFFFFF
|
|
request.Value = data['sw'] << 3
|
|
|
|
self.NoisyLog(" 0x%x (%s)" % (request.Value, str(data)))
|
|
'''
|
|
|
|
dma1: DMA.STM32G0DMA @ sysbus 0x40020000
|
|
numberOfChannels: 7
|
|
0 -> nvic@9
|
|
[1, 2] -> nvicInput10@[0, 1]
|
|
[3-6] -> nvicInput11@[0-3]
|
|
|
|
dma2: DMA.STM32G0DMA @ sysbus 0x40020400
|
|
numberOfChannels: 5
|
|
[0-4] -> nvicInput11@[4-8]
|
|
|
|
adc: Analog.STM32G0_ADC @ sysbus 0x40012400
|
|
referenceVoltage: 3.3
|
|
externalEventFrequency: 1000
|
|
-> nvic@12
|
|
|
|
iwdg: Timers.STM32_IndependentWatchdog @ sysbus 0x40003000
|
|
frequency: 32000
|
|
|
|
flash_ctrl: MTD.STM32F4_FlashController @ sysbus 0x40022000
|
|
flash: flash
|
|
|
|
// Alternate function mapping connections. For more details see `stm32l071.repl`.
|
|
timer1:
|
|
0 -> gpioPortA#07@2 | gpioPortA#08@2 | gpioPortB#13@2 | gpioPortD#02@2
|
|
1 -> gpioPortA#09@2 | gpioPortB#00@2 | gpioPortB#03@1 | gpioPortB#14@2 | gpioPortD#03@2
|
|
2 -> gpioPortA#10@2 | gpioPortB#01@2 | gpioPortB#06@1 | gpioPortB#15@2
|
|
3 -> gpioPortA#11@2
|
|
|
|
timer2:
|
|
0 -> gpioPortA#00@2 | gpioPortA#05@2 | gpioPortA#15@2
|
|
1 -> gpioPortA#01@2 | gpioPortB#03@2
|
|
2 -> gpioPortA#02@2 | gpioPortB#10@2 | gpioPortC#06@2
|
|
3 -> gpioPortA#03@2 | gpioPortB#11@2 | gpioPortC#07@2
|
|
|
|
timer3:
|
|
0 -> gpioPortA#06@1 | gpioPortB#04@1 | gpioPortC#06@1
|
|
1 -> gpioPortA#07@1 | gpioPortB#05@1 | gpioPortC#07@1
|
|
2 -> gpioPortB#00@1
|
|
3 -> gpioPortB#01@1
|
|
|
|
timer14:
|
|
0 -> gpioPortA#04@4 | gpioPortA#07@4 | gpioPortB#01@0 | gpioPortF#00@2
|
|
|
|
timer16:
|
|
0 -> gpioPortA#06@5 | gpioPortB#06@2 | gpioPortB#08@2 | gpioPortD#00@2
|
|
|
|
timer17:
|
|
0 -> gpioPortA#07@5 | gpioPortB#07@2 | gpioPortB#09@2 | gpioPortD#01@2
|
|
|
|
sysbus:
|
|
init:
|
|
Tag <0x40002C00, 0x40002FFF> "WWDG"
|
|
Tag <0x40003000, 0x400033FF> "IWDG"
|
|
Tag <0x40005C00, 0x40005FFF> "USB "
|
|
Tag <0x40006C00, 0x40006FFF> "CRS"
|
|
Tag <0x40007000, 0x400073FF> "PWR"
|
|
Tag <0x40007400, 0x400077FF> "DAC"
|
|
Tag <0x40007800, 0x40007BFF> "CEC"
|
|
Tag <0x40010000, 0x400103FF> "SYSCFG"
|
|
Tag <0x40015800, 0x40015BFF> "DBG"
|
|
Tag <0x40022000, 0x400223FF> "FLASH_INTERFACE"
|
|
Tag <0x40023000, 0x400233FF> "CRC"
|