|
4 | 4 | #include "exec/address-spaces.h"
|
5 | 5 | #include "hw/arm/armv7m.h"
|
6 | 6 | #include "hw/arm/boot.h"
|
| 7 | +#include "hw/arm/stm32l476_exti.h" |
7 | 8 | #include "hw/arm/stm32l476_gpio.h"
|
8 | 9 | #include "hw/boards.h"
|
9 | 10 | #include "hw/loader.h"
|
|
163 | 164 | #define QSPI_R_BASE (0xA0001000UL)
|
164 | 165 |
|
165 | 166 | enum {
|
| 167 | + EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ |
| 168 | + EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ |
| 169 | + EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ |
| 170 | + EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ |
| 171 | + EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ |
| 172 | + |
| 173 | + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ |
| 174 | + |
| 175 | + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ |
| 176 | + |
166 | 177 | DMA2_Channel1_IRQn = 56, /*!< DMA2 Channel 1 global Interrupt */
|
167 | 178 | DMA2_Channel2_IRQn = 57, /*!< DMA2 Channel 2 global Interrupt */
|
168 | 179 | DMA2_Channel3_IRQn = 58, /*!< DMA2 Channel 3 global Interrupt */
|
@@ -273,7 +284,6 @@ static void stm32l467_soc_realize(DeviceState *dev_soc, Error **errp)
|
273 | 284 | sysbus_mmio_map(SYS_BUS_DEVICE(s->gpio[i]), 0, gpio_desc[i].addr);
|
274 | 285 | }
|
275 | 286 |
|
276 |
| - create_unimplemented_layer("EXTI", EXTI_BASE, 0x400); |
277 | 287 | create_unimplemented_layer("QUADSPI", QSPI_R_BASE, 0x400);
|
278 | 288 |
|
279 | 289 | memory_region_init_rom(&s->flash, OBJECT(dev_soc), "STM32L467.flash",
|
@@ -374,6 +384,20 @@ static void stm32l467_soc_realize(DeviceState *dev_soc, Error **errp)
|
374 | 384 | sysbus_mmio_map(SYS_BUS_DEVICE(&s->i2c[1]), 0, I2C2_BASE);
|
375 | 385 | sysbus_mmio_map(SYS_BUS_DEVICE(&s->i2c[2]), 0, I2C3_BASE);
|
376 | 386 |
|
| 387 | + s->exti = qdev_new(TYPE_STM32L476_EXTI); |
| 388 | + if (!sysbus_realize(SYS_BUS_DEVICE(s->exti), errp)) { |
| 389 | + return; |
| 390 | + } |
| 391 | + busdev = SYS_BUS_DEVICE(s->exti); |
| 392 | + sysbus_mmio_map(busdev, 0, EXTI_BASE); |
| 393 | + sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(armv7m, EXTI0_IRQn)); |
| 394 | + sysbus_connect_irq(busdev, 1, qdev_get_gpio_in(armv7m, EXTI1_IRQn)); |
| 395 | + sysbus_connect_irq(busdev, 2, qdev_get_gpio_in(armv7m, EXTI2_IRQn)); |
| 396 | + sysbus_connect_irq(busdev, 3, qdev_get_gpio_in(armv7m, EXTI3_IRQn)); |
| 397 | + sysbus_connect_irq(busdev, 4, qdev_get_gpio_in(armv7m, EXTI4_IRQn)); |
| 398 | + sysbus_connect_irq(busdev, 5, qdev_get_gpio_in(armv7m, EXTI9_5_IRQn)); |
| 399 | + sysbus_connect_irq(busdev, 6, qdev_get_gpio_in(armv7m, EXTI15_10_IRQn)); |
| 400 | + |
377 | 401 | system_clock_scale = 1000;
|
378 | 402 | }
|
379 | 403 |
|
|
0 commit comments