1// Main Flash memory
2// Upper size:
3// STM32G0B1xx and STM32G0C1xx: 0x0807 FFFF; STM32G071xx and STM32G081xx: 0x0801 FFFF; STM32G051xx and
4// STM32G061xx, STM32G031xx and STM32G041xx: 0x0800 FFFF.
5flash: Memory.MappedMemory @ sysbus 0x08000000
6    size: 0x20000
7
8ram: Memory.MappedMemory @ sysbus 0x20000000
9    size: 0xC000
10
11nvic: IRQControllers.NVIC @ sysbus 0xE000E000
12    priorityMask: 0xF0
13    systickFrequency: 72000000
14    IRQ -> cpu@0
15
16// This model's registers are not compatible with the EXTI in this MCU,
17// it is currently here to support direct interrupts
18exti: IRQControllers.STM32F4_EXTI @ sysbus 0x40021800
19    numberOfOutputLines: 34
20    firstDirectLine: 19
21    [0, 1] -> nvicInput5@[0, 1]
22    [2, 3] -> nvicInput6@[0, 1]
23    [4-15] -> nvicInput7@[0-11]
24    [23] -> nvic@[23]
25    [32, 33] -> nvicInput8@[0, 1]
26    [17, 18] -> nvicInput12@[0, 1]
27
28nvicInput8: Miscellaneous.CombinedInput @ none
29    numberOfInputs: 2
30    -> nvic@8
31
32nvicInput10: Miscellaneous.CombinedInput @ none
33    numberOfInputs: 2
34    -> nvic@10
35
36nvicInput11: Miscellaneous.CombinedInput @ none
37    numberOfInputs: 9
38    -> nvic@11
39
40nvicInput12: Miscellaneous.CombinedInput @ none
41    numberOfInputs: 2
42    -> nvic@12
43
44nvicInput5: Miscellaneous.CombinedInput @ none
45    numberOfInputs: 2
46    -> nvic@5
47
48nvicInput6: Miscellaneous.CombinedInput @ none
49    numberOfInputs: 2
50    -> nvic@6
51
52nvicInput7: Miscellaneous.CombinedInput @ none
53    numberOfInputs: 12
54    -> nvic@7
55
56nvicInput29: Miscellaneous.CombinedInput @ none
57    numberOfInputs: 4
58    -> nvic@29
59
60cpu: CPU.CortexM @ sysbus
61    cpuType: "cortex-m0"
62    nvic: nvic
63
64usart1: UART.STM32F7_USART @ sysbus 0x40013800
65    frequency: 200000000
66    IRQ -> nvic@27
67
68usart2: UART.STM32F7_USART @ sysbus 0x40004400
69    frequency: 200000000
70    IRQ -> nvic@28
71
72usart3: UART.STM32F7_USART @ sysbus 0x40004800
73    frequency: 200000000
74    IRQ -> nvicInput29@0
75
76usart4: UART.STM32F7_USART @ sysbus 0x40004C00
77    frequency: 200000000
78    IRQ -> nvicInput29@1
79
80usart5: UART.STM32F7_USART @ sysbus 0x40005000
81    frequency: 200000000
82    IRQ -> nvicInput29@2
83
84usart6: UART.STM32F7_USART @ sysbus 0x40013C00
85    frequency: 200000000
86    IRQ -> nvicInput29@3
87
88gpioPortA: GPIOPort.STM32_GPIOPort @ sysbus <0x50000000, +0x400>
89    modeResetValue: 0xEBFFFFFF
90    pullUpPullDownResetValue: 0x24000000
91    numberOfAFs: 8
92    [0-15] -> exti@[0-15]
93
94gpioPortB: GPIOPort.STM32_GPIOPort @ sysbus <0x50000400, +0x400>
95    modeResetValue: 0xFFFFFFFF
96    pullUpPullDownResetValue: 0x00000000
97    numberOfAFs: 8
98    [0-15] -> exti@[0-15]
99
100gpioPortC: GPIOPort.STM32_GPIOPort @ sysbus <0x50000800, +0x400>
101    modeResetValue: 0xFFFFFFFF
102    pullUpPullDownResetValue: 0x00000000
103    numberOfAFs: 8
104    [0-15] -> exti@[0-15]
105
106gpioPortD: GPIOPort.STM32_GPIOPort @ sysbus <0x50000C00, +0x400>
107    modeResetValue: 0xFFFFFFFF
108    pullUpPullDownResetValue: 0x00000000
109    numberOfAFs: 8
110    [0-15] -> exti@[0-15]
111
112gpioPortE: GPIOPort.STM32_GPIOPort @ sysbus <0x50001000, +0x400>
113    modeResetValue:0xFFFFFFFF
114    pullUpPullDownResetValue: 0x00000000
115    numberOfAFs: 8
116    [0-15] -> exti@[0-15]
117
118gpioPortF: GPIOPort.STM32_GPIOPort @ sysbus <0x50001400, +0x400>
119    modeResetValue: 0xFFFFFFFF
120    pullUpPullDownResetValue: 0x00000000
121    numberOfAFs: 8
122    [0-15] -> exti@[0-15]
123
124i2c1: I2C.STM32F7_I2C @ sysbus 0x40005400
125    EventInterrupt -> exti@23
126
127i2c2: I2C.STM32F7_I2C @ sysbus 0x40005800
128    EventInterrupt -> exti@22
129
130spi1: SPI.STM32SPI @ sysbus 0x40013000
131    IRQ -> nvic@25
132
133spi2: SPI.STM32SPI @ sysbus 0x40003800
134    IRQ -> nvic@26
135
136spi3: SPI.STM32SPI @ sysbus 0x40003C00
137    IRQ -> nvic@26
138
139timer1: Timers.STM32_Timer @ sysbus 0x40012C00
140    frequency: 10000000
141    initialLimit: 0xFFFF
142    -> nvic@14
143
144timer2: Timers.STM32_Timer @ sysbus 0x40000000
145    frequency: 10000000
146    initialLimit: 0xFFFFFFFF
147    -> nvic@15
148
149timer3: Timers.STM32_Timer @ sysbus 0x40000400
150    frequency: 10000000
151    initialLimit: 0xFFFF
152    -> nvic@16
153
154timer4: Timers.STM32_Timer @ sysbus 0x40000800
155    frequency: 10000000
156    initialLimit: 0xFFFF
157    -> nvic@16
158
159timer6: Timers.STM32_Timer @ sysbus 0x40001000
160    frequency: 10000000
161    initialLimit: 0xFFFF
162
163timer7: Timers.STM32_Timer @ sysbus 0x40001400
164    frequency: 10000000
165    initialLimit: 0xFFFF
166    -> nvic@18
167
168timer14: Timers.STM32_Timer @ sysbus 0x40002000
169    frequency: 10000000
170    initialLimit: 0xFFFF
171    -> nvic@19
172
173timer15: Timers.STM32_Timer @ sysbus 0x40014000
174    frequency: 10000000
175    initialLimit: 0xFFFF
176    -> nvic@20
177
178timer16: Timers.STM32_Timer @ sysbus 0x40014400
179    frequency: 10000000
180    initialLimit: 0xFFFF
181    -> nvic@21
182
183timer17: Timers.STM32_Timer @ sysbus 0x40014800
184    frequency: 10000000
185    initialLimit: 0xFFFF
186    -> nvic@22
187
188fdcan1: CAN.STMCAN @ sysbus <0x40006400, +0x400>
189fdcan2: CAN.STMCAN @ sysbus <0x40006800, +0x400>
190
191rtc: Timers.STM32F4_RTC @ sysbus 0x40002800
192    AlarmIRQ -> exti@19
193
194rcc: Python.PythonPeripheral @ sysbus 0x40021000
195    size: 0x400
196    initable: true
197    script: '''
198if request.isInit:
199   lastVal = 0
200   data = {'hsion': 1, 'pllon': 0, 'sw': 0, 'lsion': 0}
201self.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)))
202
203if request.isWrite:
204    if request.offset == 0x0:
205        # HSION [doc = "Bit 8 - HSI16 clock enable"]
206        data['hsion'] = (request.value >> 8) & 0x1
207        # PLLON [doc = "Bit 24 - PLL enable"]
208        data['pllon'] = (request.value >> 24) & 0x1
209    elif request.offset == 0x8:
210        # SW_W [doc = "Bits 0:2 - System clock switch"]
211        data['sw'] = request.value & 0x7
212    elif request.offset == 0x60:
213        data['lsion'] = request.value & 0x1
214elif request.isRead:
215    lastVal = 1 - lastVal
216    if request.offset == 0x0:
217        # request.value = lastVal * 0x83
218
219        # RCC_CR [doc = "0x00 - Clock control register"]
220        # HSION_RW [doc = "Bit 8 - HSI16 clock enable flag"]
221        # HSIRDY_R [doc = "Bit 10 - HSI16 clock ready flag"] # HSIRDY == HISON for this model
222        # PLLRDY [doc = "Bit 25 - PLL clock ready flag"]
223        request.value = (data['hsion'] << 8) | (data['hsion'] << 10) | (data['pllon'] << 25)
224    elif request.offset == 0x4:
225        request.value = lastVal * 0xFFFFFFF8
226    elif request.offset == 0x24:
227        request.value = 0x0
228    elif request.offset == 0x60:
229        request.value = (data['lsion'] << 1)
230    else:
231        # RCC_CFGR [doc = "0x08 - Clock configuration register"]
232        # SWS_R [doc = "Bits 3:5 - System clock switch status"]
233        # request.value = lastVal * 0xFFFFFFFF
234        request.value = data['sw'] << 3
235
236self.NoisyLog("  0x%x (%s)" % (request.value, str(data)))
237'''
238
239dma1: DMA.STM32G0DMA @ sysbus 0x40020000
240    numberOfChannels: 7
241    0 -> nvic@9
242    [1, 2] -> nvicInput10@[0, 1]
243    [3-6] -> nvicInput11@[0-3]
244
245dma2: DMA.STM32G0DMA @ sysbus 0x40020400
246    numberOfChannels: 5
247    [0-4] -> nvicInput11@[4-8]
248
249adc: Analog.STM32G0_ADC @ sysbus 0x40012400
250    referenceVoltage: 3.3
251    externalEventFrequency: 1000
252    -> nvic@12
253
254iwdg: Timers.STM32_IndependentWatchdog @ sysbus 0x40003000
255    frequency: 32000
256
257flash_ctrl: MTD.STM32F4_FlashController @ sysbus 0x40022000
258    flash: flash
259
260sysbus:
261    init:
262        Tag <0x40002C00, 0x40002FFF> "WWDG"
263        Tag <0x40003000, 0x400033FF> "IWDG"
264        Tag <0x40005C00, 0x40005FFF> "USB "
265        Tag <0x40006C00, 0x40006FFF> "CRS"
266        Tag <0x40007000, 0x400073FF> "PWR"
267        Tag <0x40007400, 0x400077FF> "DAC"
268        Tag <0x40007800, 0x40007BFF> "CEC"
269        Tag <0x40010000, 0x400103FF> "SYSCFG"
270        Tag <0x40015800, 0x40015BFF> "DBG"
271        Tag <0x40022000, 0x400223FF> "FLASH_INTERFACE"
272        Tag <0x40023000, 0x400233FF> "CRC"
273