24
24
25
25
#include "../stm32_common/stm32_chip_macros.h"
26
26
#include "../stm32_common/stm32_types.h"
27
+ #include "hw/misc/stm32f4xx_syscfg.h"
28
+ #include "hw/timer/stm32f2xx_timer.h"
29
+ #include "hw/misc/stm32f4xx_exti.h"
30
+ #include "hw/or-irq.h"
31
+ #include "../stm32f407/stm32f4xx_adc.h"
32
+ #include "../stm32f407/stm32f4xx_adcc.h"
33
+ #include "../stm32f407/stm32f2xx_crc.h"
34
+ #include "../stm32_common/stm32_f2xx_f4xx_dma.h"
35
+ #include "../stm32f407/stm32f2xx_gpio.h"
36
+ #include "../stm32f407/stm32f2xx_i2c.h"
37
+ #include "../stm32f407/stm32f4xx_iwdg.h"
38
+ #include "../stm32f407/stm32f2xx_pwr.h"
39
+ #include "../stm32f407/stm32f2xx_rcc.h"
40
+ #include "../stm32f407/stm32f2xx_rtc.h"
41
+ #include "../stm32f407/stm32f2xx_tim.h"
42
+ #include "../stm32f407/stm32f4xx_otp.h"
43
+ #include "../stm32f407/stm32f4xx_rng.h"
44
+ #include "../stm32f407/stm32f4xx_usb.h"
45
+ #include "../stm32f407/stm32_uart.h"
27
46
#include "stm32f4xx_irqs.h"
28
47
#include "qemu/units.h"
29
48
@@ -34,93 +53,102 @@ static const stm32_soc_cfg_t stm32f407xx_cfg =
34
53
.rcc_hse_freq = 12000000 ,
35
54
.rcc_lse_freq = 32768 ,
36
55
.rcc_lsi_freq = 32000 ,
56
+ .flash_base = 0x08000000 ,
37
57
.flash_variants = {
38
58
{TYPE_STM32F407xE_SOC , 512 * KiB },
39
59
{TYPE_STM32F407xG_SOC , 1U * MiB },
40
60
{NULL },
41
61
},
42
- .sram_variants = {{NULL }},
43
- PER_LN (flash_memory , "flash" , P_UNDEFINED , 0x08000000 ),
44
- PER_LNS (sram , "sram" , P_UNDEFINED , 0x20000000 , 192 * KiB ),
45
- PER_LNS (ccmsram , "ccmsram" , P_UNDEFINED , 0x10000000 , 64 * KiB ),
46
- PER_LN (syscfg , TYPE_STM32F4XX_SYSCFG , P_SYSCFG , 0x40013800 ),
47
- PER_ALN (adcs , TYPE_STM32F4XX_ADC ,
48
- PER_I (P_ADC1 , 0x40012000 , F4xx_ADC_1_2_3_IRQ ),
49
- PER_I (P_ADC2 , 0x40012100 , F4xx_ADC_1_2_3_IRQ ),
50
- PER_I (P_ADC3 , 0x40012200 , F4xx_ADC_1_2_3_IRQ )),
51
- PER_ALN (usarts , TYPE_STM32_UART ,
52
- PER_I (P_UART1 , 0x40011000 , F4xx_USART1_IRQ ),
53
- PER_I (P_UART2 , 0x40004400 , F4xx_USART2_IRQ ),
54
- PER_I (P_UART3 , 0x40004800 , F4xx_USART3_IRQ ),
55
- PER_I (P_UART4 , 0x40004C00 , F4xx_UART4_IRQ ),
56
- PER_I (P_UART5 , 0x40005000 , F4xx_UART5_IRQ ),
57
- PER_I (P_UART6 , 0x40011400 , F4xx_USART6_IRQ )
58
- ),
59
- PER_ALN (spis , TYPE_STM32F4XX_SPI ,
60
- PER_I (P_SPI1 , 0x40013000 , F4xx_SPI1_IRQ ),
61
- PER_I (P_SPI2 , 0x40003800 , F4xx_SPI2_IRQ ),
62
- PER_I (P_SPI3 , 0x40003C00 , F4xx_SPI3_IRQ )
63
- ),
64
- PER_ALN (i2cs , TYPE_STM32F2XX_I2C ,
65
- PER_IV (P_I2C1 , 0x40005400 , F4xx_I2C1_EV_IRQ , F4xx_I2C1_ER_IRQ ),
66
- PER_IV (P_I2C2 , 0x40005800 , F4xx_I2C2_EV_IRQ , F4xx_I2C2_ER_IRQ ),
67
- PER_IV (P_I2C3 , 0x40005C00 , F4xx_I2C3_EV_IRQ , F4xx_I2C3_ER_IRQ )
68
- ),
69
- PER_ALN (dmas , TYPE_STM32F4xx_DMA ,
70
- PER_IV (P_DMA1 , 0x40026000 ,
62
+ .sram_base = 0x20000000 ,
63
+ .sram_variants = {
64
+ {TYPE_STM32F407xE_SOC , 192U * KiB },
65
+ {TYPE_STM32F407xG_SOC , 192U * KiB },
66
+ {NULL },
67
+ },
68
+ .ccmsram_base = 0x10000000 ,
69
+ .ccmssram_variants = {
70
+ {TYPE_STM32F407xE_SOC , 64U * KiB },
71
+ {TYPE_STM32F407xG_SOC , 64U * KiB },
72
+ {NULL },
73
+ },
74
+ .perhipherals = {
75
+ PER_LNI (P_FINT , TYPE_STM32F4xx_FINT , 0x40023C00 , F4xx_FLASH_IRQ ),
76
+
77
+ PER_LNI (P_UART1 , TYPE_STM32_UART , 0x40011000 , F4xx_USART1_IRQ ),
78
+ PER_LNI (P_UART2 , TYPE_STM32_UART , 0x40004400 , F4xx_USART2_IRQ ),
79
+ PER_LNI (P_UART3 , TYPE_STM32_UART , 0x40004800 , F4xx_USART3_IRQ ),
80
+ PER_LNI (P_UART4 , TYPE_STM32_UART , 0x40004C00 , F4xx_UART4_IRQ ),
81
+ PER_LNI (P_UART5 , TYPE_STM32_UART , 0x40005000 , F4xx_UART5_IRQ ),
82
+ PER_LNI (P_UART6 , TYPE_STM32_UART , 0x40011400 , F4xx_USART6_IRQ ),
83
+
84
+ PER_LNI (P_ADC1 , TYPE_STM32F4XX_ADC , 0x40012000 , F4xx_ADC_1_2_3_IRQ ),
85
+ PER_LNI (P_ADC2 , TYPE_STM32F4XX_ADC , 0x40012100 , F4xx_ADC_1_2_3_IRQ ),
86
+ PER_LNI (P_ADC3 , TYPE_STM32F4XX_ADC , 0x40012200 , F4xx_ADC_1_2_3_IRQ ),
87
+
88
+ PER_LNI (P_SPI1 , TYPE_STM32F4xx_SPI , 0x40013000 , F4xx_SPI1_IRQ ),
89
+ PER_LNI (P_SPI2 , TYPE_STM32F4xx_SPI , 0x40003800 , F4xx_SPI2_IRQ ),
90
+ PER_LNI (P_SPI3 , TYPE_STM32F4xx_SPI , 0x40003C00 , F4xx_SPI3_IRQ ),
91
+
92
+ PER_LNI (P_I2C1 , TYPE_STM32F2XX_I2C , 0x40005400 , F4xx_I2C1_EV_IRQ , F4xx_I2C1_ER_IRQ ),
93
+ PER_LNI (P_I2C2 , TYPE_STM32F2XX_I2C , 0x40005800 , F4xx_I2C2_EV_IRQ , F4xx_I2C2_ER_IRQ ),
94
+ PER_LNI (P_I2C3 , TYPE_STM32F2XX_I2C , 0x40005C00 , F4xx_I2C3_EV_IRQ , F4xx_I2C3_ER_IRQ ),
95
+
96
+ PER_LN (P_GPIOA , TYPE_STM32F2XX_GPIO , 0x40020000 ),
97
+ PER_LN (P_GPIOB , TYPE_STM32F2XX_GPIO , 0x40020400 ),
98
+ PER_LN (P_GPIOC , TYPE_STM32F2XX_GPIO , 0x40020800 ),
99
+ PER_LN (P_GPIOD , TYPE_STM32F2XX_GPIO , 0x40020C00 ),
100
+ PER_LN (P_GPIOE , TYPE_STM32F2XX_GPIO , 0x40021000 ),
101
+ PER_LN (P_GPIOF , TYPE_STM32F2XX_GPIO , 0x40021400 ),
102
+ PER_LN (P_GPIOG , TYPE_STM32F2XX_GPIO , 0x40021800 ),
103
+ PER_LN (P_GPIOH , TYPE_STM32F2XX_GPIO , 0x40021C00 ),
104
+ PER_LN (P_GPIOI , TYPE_STM32F2XX_GPIO , 0x40022000 ),
105
+ PER_LN (P_GPIOJ , TYPE_STM32F2XX_GPIO , 0x40022400 ),
106
+ PER_LN (P_GPIOK , TYPE_STM32F2XX_GPIO , 0x40022800 ),
107
+
108
+ PER_LNI (P_DMA1 , TYPE_STM32F4xx_DMA , 0x40026000 ,
71
109
F4xx_DMA1_S0_IRQ , F4xx_DMA1_S1_IRQ , F4xx_DMA1_S2_IRQ , F4xx_DMA1_S3_IRQ ,
72
110
F4xx_DMA1_S4_IRQ , F4xx_DMA1_S5_IRQ , F4xx_DMA1_S6_IRQ , F4xx_DMA1_S7_IRQ ),
73
- PER_IV (P_DMA2 , 0x40026400 ,
111
+ PER_LNI (P_DMA2 , TYPE_STM32F4xx_DMA , 0x40026400 ,
74
112
F4xx_DMA2_S0_IRQ , F4xx_DMA2_S1_IRQ , F4xx_DMA2_S2_IRQ , F4xx_DMA2_S3_IRQ ,
75
- F4xx_DMA2_S4_IRQ , F4xx_DMA2_S5_IRQ , F4xx_DMA2_S6_IRQ , F4xx_DMA2_S7_IRQ )
76
- ),
77
- PER_ALN (gpios , TYPE_STM32F2XX_GPIO ,
78
- PER (P_GPIOA , 0x40020000 ),
79
- PER (P_GPIOB , 0x40020400 ),
80
- PER (P_GPIOC , 0x40020800 ),
81
- PER (P_GPIOD , 0x40020C00 ),
82
- PER (P_GPIOE , 0x40021000 ),
83
- PER (P_GPIOF , 0x40021400 ),
84
- PER (P_GPIOG , 0x40021800 ),
85
- PER (P_GPIOH , 0x40021C00 ),
86
- PER (P_GPIOI , 0x40022000 ),
87
- PER (P_GPIOJ , 0x40022400 ),
88
- PER (P_GPIOK , 0x40022800 )
89
- ),
90
- PER_ALN (timers , TYPE_STM32F4XX_TIMER ,
91
- PER (P_TIM1 , 0x40010000 ), // TIM1 FIXME: TIM1 is a complex timer w/ multiple IRQs
92
- PER_I (P_TIM2 , 0x40000000 , F4xx_TIM2_IRQ ),
93
- PER_I (P_TIM3 , 0x40000400 , F4xx_TIM3_IRQ ),
94
- PER_I (P_TIM4 , 0x40000800 , F4xx_TIM4_IRQ ),
95
- PER_I (P_TIM5 , 0x40000C00 , F4xx_TIM5_IRQ ),
96
- PER_I (P_TIM6 , 0x40001000 , F4xx_TIM6_DAC_IRQ ),
97
- PER_I (P_TIM7 , 0x40001400 , F4xx_TIM7_IRQ ),
98
- PER (P_TIM8 , 0x40010400 ),
99
- PER_I (P_TIM9 , 0x40014000 , F4xx_TIM1_BRK_TIM9_IRQ ),
100
- PER_I (P_TIM10 , 0x40014400 , F4xx_TIM1_UP_TIM10_IRQ ),
101
- PER_I (P_TIM11 , 0x40014800 , F4xx_TIM1_TRG_COM_TIM11_IRQ ),
102
- PER_I (P_TIM12 , 0x40001800 , F4xx_TIM8_BRK_TIM12_IRQ ),
103
- PER_I (P_TIM13 , 0x40001C00 , F4xx_TIM8_UP_TIM13_IRQ ),
104
- PER_I (P_TIM14 , 0x40002000 , F4xx_TIM8_TRG_COM_TIM14_IRQ )
105
- ),
106
- PER_LNIV (exti , TYPE_STM32F4XX_EXTI , P_EXTI , 0x40013C00 ,
107
- F4xx_EXTI0_IRQ , F4xx_EXTI1_IRQ , F4xx_EXTI2_IRQ , F4xx_EXTI3_IRQ ,
108
- F4xx_EXTI4_IRQ , [5 ... 9 ] = F4xx_EXTI_5_9_IRQ ,
109
- [10 ... 15 ] = F4xx_EXTI_10_15_IRQ
110
- ),
111
- PER_LNIV (eth , "stm32f4xx-ethernet" , P_UNDEFINED , 0x40028000 , F4xx_ETH_IRQ , F4xx_ETH_WKUP_IRQ ),
112
- PER_LNI (rcc , TYPE_STM32F2xx_RCC , P_RCC , 0x40023800 , F4xx_RCC_IRQ ),
113
- PER_LNI (flash_if , TYPE_STM32F4xx_FINT , P_FINT , 0x40023C00 , F4xx_FLASH_IRQ ),
114
- PER_LN (iwdg , TYPE_STM32F4XX_IWDG , P_IWDG , 0x40003000 ),
115
- PER_LN (crc , TYPE_STM32F2XX_CRC , P_CRC , 0x40023000 ),
116
- PER_LN (rtc , TYPE_STM32F2XX_RTC , P_RTC , 0x40002800 ),
117
- PER_LN (itm , TYPE_STM32F4XX_ITM , P_UNDEFINED , 0xE0000000 ),
118
- PER_LN (pwr , TYPE_STM32F2XX_PWR , P_PWR , 0x40007000 ),
119
- PER_LNI (rng , TYPE_STM32F4XX_RNG , P_RNG , 0x50060800 , F4xx_HASH_RNG_IRQ ),
120
- PER_LN (otp , TYPE_STM32F4XX_OTP , P_UNDEFINED , 0x1FFF7800 ),
121
- PER_LNI (usb_hs , TYPE_STM32F4xx_USB , P_USB , 0x40040000 , F4xx_OTG_HS_IRQ ),
122
- PER_LNI (usb_fs , TYPE_STM32F4xx_USB , P_USB2 , 0x50000000 , F4xx_OTG_FS_IRQ ),
123
- PER_LN (adc_common , TYPE_STM32F4XX_ADCC , P_UNDEFINED , 0x40012300 ),
113
+ F4xx_DMA2_S4_IRQ , F4xx_DMA2_S5_IRQ , F4xx_DMA2_S6_IRQ , F4xx_DMA2_S7_IRQ ),
114
+
115
+ PER_LN (P_TIM1 , TYPE_STM32F4XX_TIMER , 0x40010000 ), // TIM1 FIXME: TIM1 is a complex timer w/ multiple IRQs
116
+ PER_LNI (P_TIM2 , TYPE_STM32F4XX_TIMER , 0x40000000 , F4xx_TIM2_IRQ ),
117
+ PER_LNI (P_TIM3 , TYPE_STM32F4XX_TIMER , 0x40000400 , F4xx_TIM3_IRQ ),
118
+ PER_LNI (P_TIM4 , TYPE_STM32F4XX_TIMER , 0x40000800 , F4xx_TIM4_IRQ ),
119
+ PER_LNI (P_TIM5 , TYPE_STM32F4XX_TIMER , 0x40000C00 , F4xx_TIM5_IRQ ),
120
+ PER_LNI (P_TIM6 , TYPE_STM32F4XX_TIMER , 0x40001000 , F4xx_TIM6_DAC_IRQ ),
121
+ PER_LNI (P_TIM7 , TYPE_STM32F4XX_TIMER , 0x40001400 , F4xx_TIM7_IRQ ),
122
+ PER_LN (P_TIM8 , TYPE_STM32F4XX_TIMER , 0x40010400 ),
123
+ PER_LNI (P_TIM9 , TYPE_STM32F4XX_TIMER , 0x40014000 , F4xx_TIM1_BRK_TIM9_IRQ ),
124
+ PER_LNI (P_TIM10 , TYPE_STM32F4XX_TIMER , 0x40014400 , F4xx_TIM1_UP_TIM10_IRQ ),
125
+ PER_LNI (P_TIM11 , TYPE_STM32F4XX_TIMER , 0x40014800 , F4xx_TIM1_TRG_COM_TIM11_IRQ ),
126
+ PER_LNI (P_TIM12 , TYPE_STM32F4XX_TIMER , 0x40001800 , F4xx_TIM8_BRK_TIM12_IRQ ),
127
+ PER_LNI (P_TIM13 , TYPE_STM32F4XX_TIMER , 0x40001C00 , F4xx_TIM8_UP_TIM13_IRQ ),
128
+ PER_LNI (P_TIM14 , TYPE_STM32F4XX_TIMER , 0x40002000 , F4xx_TIM8_TRG_COM_TIM14_IRQ ),
129
+
130
+ PER_LNI (P_EXTI , TYPE_STM32F4XX_EXTI , 0x40013C00 ,
131
+ F4xx_EXTI0_IRQ , F4xx_EXTI1_IRQ , F4xx_EXTI2_IRQ , F4xx_EXTI3_IRQ ,
132
+ F4xx_EXTI4_IRQ , [5 ... 9 ] = F4xx_EXTI_5_9_IRQ ,
133
+ [10 ... 15 ] = F4xx_EXTI_10_15_IRQ
134
+ ),
135
+ PER_LNI (P_ETH , "stm32f4xx-ethernet" , 0x40028000 , F4xx_ETH_IRQ , F4xx_ETH_WKUP_IRQ ),
136
+ PER_LNI (P_RCC , TYPE_STM32F407_RCC , 0x40023800 , F4xx_RCC_IRQ ),
137
+ PER_LNI (P_FINT , TYPE_STM32F40x_F41x_FINT , 0x40023C00 , F4xx_FLASH_IRQ ),
138
+ PER_LN (P_IWDG , TYPE_STM32F4XX_IWDG , 0x40003000 ),
139
+ PER_LN (P_CRC , TYPE_STM32F2XX_CRC , 0x40023000 ),
140
+ PER_LN (P_RTC , TYPE_STM32F2XX_RTC , 0x40002800 ),
141
+ PER_LN (P_ITM , TYPE_STM32F4xx_ITM , 0xE0000000 ),
142
+ PER_LN (P_PWR , TYPE_STM32F2XX_PWR , 0x40007000 ),
143
+ PER_LNI (P_RNG , TYPE_STM32F4XX_RNG , 0x50060800 , F4xx_HASH_RNG_IRQ ),
144
+ PER_LN (P_OTP , TYPE_STM32F4XX_OTP , 0x1FFF7800 ),
145
+ PER_LNI (P_USB , TYPE_STM32F4xx_USB , 0x40040000 , F4xx_OTG_HS_IRQ ),
146
+ PER_LNI (P_USB2 , TYPE_STM32F4xx_USB , 0x50000000 , F4xx_OTG_FS_IRQ ),
147
+ PER_LN (P_ADCC , TYPE_STM32F4XX_ADCC , 0x40012300 ),
148
+
149
+ PER_LN (P_SYSCFG , TYPE_STM32F40x_F41x_SYSCFG , 0x40013800 ),
150
+
151
+ }
124
152
} ;
125
153
126
154
#endif // HW_ARM_PRUSA_STM32F407XX_H
0 commit comments