Skip to content

Commit

Permalink
Misc. cleanup/refactoring I never got around to pushing (#106)
Browse files Browse the repository at this point in the history
  • Loading branch information
vintagepc authored Aug 6, 2022
1 parent ec0d250 commit 0fbb6d7
Show file tree
Hide file tree
Showing 30 changed files with 1,762 additions and 939 deletions.
2 changes: 1 addition & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/buddy-softmmu/qemu-system-buddy",
"args": ["--machine", "prusabuddy", "-kernel", "mini_debug_noboot.bin"],
"args": ["--machine", "prusa-mini", "-kernel", "mini_debug_noboot.bin"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/build/buddy-softmmu/",
"environment": [],
Expand Down
3 changes: 2 additions & 1 deletion hw/arm/prusa/parts/thermistor.c
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,11 @@ static void thermistor_set_table(ThermistorState *s) {
s->table_length = 2*HEATER_0_TEMPTABLE_LEN;
break;
case 2000:
s->table_length = AMBIENTTEMPTABLE_LEN;
s->table_length = 2*AMBIENTTEMPTABLE_LEN;
s->table = &temptable_2000[0][0];
break;
default:
printf("%s WARNING: Unhandled thermistor table %u!\n",__FILE__,s->table_index);
s->table = NULL;
s->table_length = 0;
break;
Expand Down
25 changes: 12 additions & 13 deletions hw/arm/prusa/prusa-mini.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* Prusa Buddy board machine model
*
* Copyright 2020 VintagePC <github.com/vintagepc>
* Copyright 2020-2022 VintagePC <github.com/vintagepc>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -31,6 +31,7 @@
#include "qemu/error-report.h"
#include "stm32f407/stm32f407_soc.h"
#include "hw/arm/boot.h"
#include "hw/ssi/ssi.h"
#include "hw/loader.h"
#include "utility/ArgHelper.h"
#include "sysemu/runstate.h"
Expand Down Expand Up @@ -71,7 +72,6 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
qdev_prop_set_string(dev, "cpu-type", ARM_CPU_TYPE_NAME("cortex-m4"));
qdev_prop_set_uint32(dev,"sram-size", machine->ram_size);
sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
STM32F4xxState *SOC = STM32F4XX_BASE(dev);
DeviceState* dev_soc = dev;
// We (ab)use the kernel command line to piggyback custom arguments into QEMU.
// Parse those now.
Expand All @@ -82,7 +82,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
default_flash_size <<=2; // quadruple the flash size for debug code.
}
if (arghelper_is_arg("appendix")) {
SOC->gpios[0].idr_mask |= 0x2000;
qdev_prop_set_uint32(stm32_soc_get_periph(dev_soc, STM32_P_GPIOA),"idr-mask", 0x2000);
}
int kernel_len = strlen(machine->kernel_filename);
if (kernel_len >3)
Expand Down Expand Up @@ -119,7 +119,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)

void *bus;
{
bus = qdev_get_child_bus(DEVICE(&SOC->spis[1]), "ssi");
bus = qdev_get_child_bus(stm32_soc_get_periph(dev_soc, STM32_P_SPI2), "ssi");

DeviceState *lcd_dev = ssi_create_peripheral(bus, "st7789v");
qemu_irq lcd_cs = qdev_get_gpio_in_named(lcd_dev, SSI_GPIO_CS, 0);
Expand All @@ -133,15 +133,14 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
}
DriveInfo *dinfo = NULL;
{
bus = qdev_get_child_bus(DEVICE(&SOC->spis[2]), "ssi");
bus = qdev_get_child_bus(stm32_soc_get_periph(dev_soc, STM32_P_SPI3), "ssi");
dev = qdev_new(cfg->flash_chip);
dinfo = drive_get_next(IF_MTD);
if (dinfo) {
qdev_prop_set_drive(dev, "drive",
blk_by_legacy_dinfo(dinfo));
}
qdev_realize_and_unref(dev, bus, &error_fatal);
//DeviceState *flash_dev = ssi_create_slave(bus, "w25q64jv");
qemu_irq flash_cs = qdev_get_gpio_in_named(dev, SSI_GPIO_CS, 0);
qemu_irq_raise(flash_cs);
qdev_connect_gpio_out(stm32_soc_get_periph(dev_soc, STM32_P_GPIOD), 7, flash_cs);
Expand All @@ -150,7 +149,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)

}
{
bus = qdev_get_child_bus(DEVICE(&SOC->i2cs[0]),"i2c");
bus = qdev_get_child_bus(stm32_soc_get_periph(dev_soc, STM32_P_I2C1),"i2c");
dev = qdev_new("at24c-eeprom");
qdev_prop_set_uint8(dev, "address", 0x53);
qdev_prop_set_uint32(dev, "rom-size", 64*KiB);
Expand Down Expand Up @@ -215,7 +214,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
DeviceState* split_out = qdev_new("split-irq");
qdev_prop_set_uint16(split_out, "num-lines", 4);
qdev_realize_and_unref(DEVICE(split_out),NULL, &error_fatal);
qdev_connect_gpio_out_named(DEVICE(&SOC->usarts[1]),"uart-byte-out", 0, qdev_get_gpio_in(split_out,0));
qdev_connect_gpio_out_named(stm32_soc_get_periph(dev_soc, STM32_P_UART2),"uart-byte-out", 0, qdev_get_gpio_in(split_out,0));
DeviceState* split_zmin = qdev_new("split-irq");
qdev_prop_set_uint16(split_zmin, "num-lines", 3);
qdev_realize_and_unref(DEVICE(split_zmin),NULL, &error_fatal);
Expand All @@ -234,7 +233,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
qdev_prop_set_int32(dev, "max_step", ends[i]);
qdev_prop_set_int32(dev, "fullstepspermm", stepsize[i]);
sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
qdev_connect_gpio_out_named(dev,"byte-out", 0, qdev_get_gpio_in_named(DEVICE(&SOC->usarts[1]),"uart-byte-in",0));
qdev_connect_gpio_out_named(dev,"byte-out", 0, qdev_get_gpio_in_named(stm32_soc_get_periph(dev_soc, STM32_P_UART2),"uart-byte-in",0));
qdev_connect_gpio_out(split_out,i, qdev_get_gpio_in_named(dev,"byte-in",0));
qdev_connect_gpio_out(stm32_soc_get_periph(dev_soc, STM32_P_GPIOD), step_pins[i], qdev_get_gpio_in_named(dev,"step",0));
qdev_connect_gpio_out(stm32_soc_get_periph(dev_soc, STM32_P_GPIOD), dir_pins[i], qdev_get_gpio_in_named(dev,"dir",0));
Expand Down Expand Up @@ -275,8 +274,8 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
qdev_prop_set_uint16(dev, "table_no", tables[i]);
qdev_prop_set_uint8(dev, "index", i);
sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
qdev_connect_gpio_out_named(DEVICE(&SOC->adcs[0]),"adc_read", channels[i], qdev_get_gpio_in_named(dev, "thermistor_read_request",0));
qdev_connect_gpio_out_named(dev, "thermistor_value",0, qdev_get_gpio_in_named(DEVICE(&SOC->adcs[0]),"adc_data_in",channels[i]));
qdev_connect_gpio_out_named(stm32_soc_get_periph(dev_soc, STM32_P_ADC1),"adc_read", channels[i], qdev_get_gpio_in_named(dev, "thermistor_read_request",0));
qdev_connect_gpio_out_named(dev, "thermistor_value",0, qdev_get_gpio_in_named(stm32_soc_get_periph(dev_soc, STM32_P_ADC1),"adc_data_in",channels[i]));
qdev_connect_gpio_out_named(dev, "temp_out_256x", 0, qdev_get_gpio_in_named(db2,"therm-temp",i));

}
Expand All @@ -286,7 +285,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
qdev_prop_set_uint8(dev, "thermal_mass_x10",30);
qdev_prop_set_uint8(dev,"label", 'E');
sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
qdev_connect_gpio_out_named(DEVICE(&SOC->timers[2]),"pwm_ratio_changed",3,qdev_get_gpio_in_named(dev, "pwm_in",0));
qdev_connect_gpio_out_named(stm32_soc_get_periph(dev_soc, STM32_P_TIM3),"pwm_ratio_changed",3,qdev_get_gpio_in_named(dev, "pwm_in",0));
qdev_connect_gpio_out_named(dev, "temp_out",0, qdev_get_gpio_in_named(hotend, "thermistor_set_temperature",0));
qdev_connect_gpio_out_named(dev, "pwm-out", 0, qdev_get_gpio_in_named(db2,"therm-pwm",0));
#ifdef BUDDY_HAS_GL
Expand All @@ -301,7 +300,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
qdev_prop_set_uint8(dev, "thermal_mass_x10",3);
qdev_prop_set_uint8(dev,"label", 'B');
sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
qdev_connect_gpio_out_named(DEVICE(&SOC->timers[2]),"pwm_ratio_changed",2,qdev_get_gpio_in_named(dev, "pwm_in",0));
qdev_connect_gpio_out_named(stm32_soc_get_periph(dev_soc, STM32_P_TIM3),"pwm_ratio_changed",2,qdev_get_gpio_in_named(dev, "pwm_in",0));
qdev_connect_gpio_out_named(dev, "temp_out",0, qdev_get_gpio_in_named(bed, "thermistor_set_temperature",0));
qdev_connect_gpio_out_named(dev, "pwm-out", 0, qdev_get_gpio_in_named(db2,"therm-pwm",1));
#ifdef BUDDY_HAS_GL
Expand Down
186 changes: 107 additions & 79 deletions hw/arm/prusa/stm32_chips/stm32f407xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,25 @@

#include "../stm32_common/stm32_chip_macros.h"
#include "../stm32_common/stm32_types.h"
#include "hw/misc/stm32f4xx_syscfg.h"
#include "hw/timer/stm32f2xx_timer.h"
#include "hw/misc/stm32f4xx_exti.h"
#include "hw/or-irq.h"
#include "../stm32f407/stm32f4xx_adc.h"
#include "../stm32f407/stm32f4xx_adcc.h"
#include "../stm32f407/stm32f2xx_crc.h"
#include "../stm32_common/stm32_f2xx_f4xx_dma.h"
#include "../stm32f407/stm32f2xx_gpio.h"
#include "../stm32f407/stm32f2xx_i2c.h"
#include "../stm32f407/stm32f4xx_iwdg.h"
#include "../stm32f407/stm32f2xx_pwr.h"
#include "../stm32f407/stm32f2xx_rcc.h"
#include "../stm32f407/stm32f2xx_rtc.h"
#include "../stm32f407/stm32f2xx_tim.h"
#include "../stm32f407/stm32f4xx_otp.h"
#include "../stm32f407/stm32f4xx_rng.h"
#include "../stm32f407/stm32f4xx_usb.h"
#include "../stm32f407/stm32_uart.h"
#include "stm32f4xx_irqs.h"
#include "qemu/units.h"

Expand All @@ -34,93 +53,102 @@ static const stm32_soc_cfg_t stm32f407xx_cfg =
.rcc_hse_freq = 12000000,
.rcc_lse_freq = 32768,
.rcc_lsi_freq = 32000,
.flash_base = 0x08000000,
.flash_variants = {
{TYPE_STM32F407xE_SOC, 512*KiB},
{TYPE_STM32F407xG_SOC, 1U*MiB},
{NULL},
},
.sram_variants = {{NULL}},
PER_LN(flash_memory, "flash", P_UNDEFINED, 0x08000000),
PER_LNS(sram, "sram", P_UNDEFINED, 0x20000000, 192*KiB),
PER_LNS(ccmsram, "ccmsram", P_UNDEFINED, 0x10000000, 64*KiB),
PER_LN(syscfg, TYPE_STM32F4XX_SYSCFG, P_SYSCFG, 0x40013800),
PER_ALN(adcs, TYPE_STM32F4XX_ADC,
PER_I(P_ADC1, 0x40012000, F4xx_ADC_1_2_3_IRQ),
PER_I(P_ADC2, 0x40012100, F4xx_ADC_1_2_3_IRQ),
PER_I(P_ADC3, 0x40012200, F4xx_ADC_1_2_3_IRQ)),
PER_ALN(usarts, TYPE_STM32_UART,
PER_I(P_UART1, 0x40011000, F4xx_USART1_IRQ),
PER_I(P_UART2, 0x40004400, F4xx_USART2_IRQ),
PER_I(P_UART3, 0x40004800, F4xx_USART3_IRQ),
PER_I(P_UART4, 0x40004C00, F4xx_UART4_IRQ),
PER_I(P_UART5, 0x40005000, F4xx_UART5_IRQ),
PER_I(P_UART6, 0x40011400, F4xx_USART6_IRQ)
),
PER_ALN(spis, TYPE_STM32F4XX_SPI,
PER_I(P_SPI1, 0x40013000, F4xx_SPI1_IRQ),
PER_I(P_SPI2, 0x40003800, F4xx_SPI2_IRQ),
PER_I(P_SPI3, 0x40003C00, F4xx_SPI3_IRQ)
),
PER_ALN(i2cs, TYPE_STM32F2XX_I2C,
PER_IV(P_I2C1, 0x40005400, F4xx_I2C1_EV_IRQ, F4xx_I2C1_ER_IRQ),
PER_IV(P_I2C2, 0x40005800, F4xx_I2C2_EV_IRQ, F4xx_I2C2_ER_IRQ),
PER_IV(P_I2C3, 0x40005C00, F4xx_I2C3_EV_IRQ, F4xx_I2C3_ER_IRQ)
),
PER_ALN(dmas, TYPE_STM32F4xx_DMA,
PER_IV(P_DMA1, 0x40026000,
.sram_base = 0x20000000,
.sram_variants = {
{TYPE_STM32F407xE_SOC, 192U*KiB},
{TYPE_STM32F407xG_SOC, 192U*KiB},
{NULL},
},
.ccmsram_base = 0x10000000,
.ccmssram_variants = {
{TYPE_STM32F407xE_SOC, 64U*KiB},
{TYPE_STM32F407xG_SOC, 64U*KiB},
{NULL},
},
.perhipherals = {
PER_LNI(P_FINT, TYPE_STM32F4xx_FINT, 0x40023C00, F4xx_FLASH_IRQ),

PER_LNI(P_UART1, TYPE_STM32_UART, 0x40011000, F4xx_USART1_IRQ),
PER_LNI(P_UART2, TYPE_STM32_UART, 0x40004400, F4xx_USART2_IRQ),
PER_LNI(P_UART3, TYPE_STM32_UART, 0x40004800, F4xx_USART3_IRQ),
PER_LNI(P_UART4, TYPE_STM32_UART, 0x40004C00, F4xx_UART4_IRQ),
PER_LNI(P_UART5, TYPE_STM32_UART, 0x40005000, F4xx_UART5_IRQ),
PER_LNI(P_UART6, TYPE_STM32_UART, 0x40011400, F4xx_USART6_IRQ),

PER_LNI(P_ADC1, TYPE_STM32F4XX_ADC, 0x40012000, F4xx_ADC_1_2_3_IRQ),
PER_LNI(P_ADC2, TYPE_STM32F4XX_ADC, 0x40012100, F4xx_ADC_1_2_3_IRQ),
PER_LNI(P_ADC3, TYPE_STM32F4XX_ADC, 0x40012200, F4xx_ADC_1_2_3_IRQ),

PER_LNI(P_SPI1, TYPE_STM32F4xx_SPI, 0x40013000, F4xx_SPI1_IRQ),
PER_LNI(P_SPI2, TYPE_STM32F4xx_SPI, 0x40003800, F4xx_SPI2_IRQ),
PER_LNI(P_SPI3, TYPE_STM32F4xx_SPI, 0x40003C00, F4xx_SPI3_IRQ),

PER_LNI(P_I2C1, TYPE_STM32F2XX_I2C, 0x40005400, F4xx_I2C1_EV_IRQ, F4xx_I2C1_ER_IRQ),
PER_LNI(P_I2C2, TYPE_STM32F2XX_I2C, 0x40005800, F4xx_I2C2_EV_IRQ, F4xx_I2C2_ER_IRQ),
PER_LNI(P_I2C3, TYPE_STM32F2XX_I2C, 0x40005C00, F4xx_I2C3_EV_IRQ, F4xx_I2C3_ER_IRQ),

PER_LN(P_GPIOA, TYPE_STM32F2XX_GPIO, 0x40020000),
PER_LN(P_GPIOB, TYPE_STM32F2XX_GPIO, 0x40020400),
PER_LN(P_GPIOC, TYPE_STM32F2XX_GPIO, 0x40020800),
PER_LN(P_GPIOD, TYPE_STM32F2XX_GPIO, 0x40020C00),
PER_LN(P_GPIOE, TYPE_STM32F2XX_GPIO, 0x40021000),
PER_LN(P_GPIOF, TYPE_STM32F2XX_GPIO, 0x40021400),
PER_LN(P_GPIOG, TYPE_STM32F2XX_GPIO, 0x40021800),
PER_LN(P_GPIOH, TYPE_STM32F2XX_GPIO, 0x40021C00),
PER_LN(P_GPIOI, TYPE_STM32F2XX_GPIO, 0x40022000),
PER_LN(P_GPIOJ, TYPE_STM32F2XX_GPIO, 0x40022400),
PER_LN(P_GPIOK, TYPE_STM32F2XX_GPIO, 0x40022800),

PER_LNI(P_DMA1, TYPE_STM32F4xx_DMA, 0x40026000,
F4xx_DMA1_S0_IRQ, F4xx_DMA1_S1_IRQ, F4xx_DMA1_S2_IRQ, F4xx_DMA1_S3_IRQ,
F4xx_DMA1_S4_IRQ, F4xx_DMA1_S5_IRQ, F4xx_DMA1_S6_IRQ, F4xx_DMA1_S7_IRQ),
PER_IV(P_DMA2, 0x40026400,
PER_LNI(P_DMA2, TYPE_STM32F4xx_DMA, 0x40026400,
F4xx_DMA2_S0_IRQ, F4xx_DMA2_S1_IRQ, F4xx_DMA2_S2_IRQ, F4xx_DMA2_S3_IRQ,
F4xx_DMA2_S4_IRQ, F4xx_DMA2_S5_IRQ, F4xx_DMA2_S6_IRQ, F4xx_DMA2_S7_IRQ)
),
PER_ALN(gpios, TYPE_STM32F2XX_GPIO,
PER(P_GPIOA, 0x40020000),
PER(P_GPIOB, 0x40020400),
PER(P_GPIOC, 0x40020800),
PER(P_GPIOD, 0x40020C00),
PER(P_GPIOE, 0x40021000),
PER(P_GPIOF, 0x40021400),
PER(P_GPIOG, 0x40021800),
PER(P_GPIOH, 0x40021C00),
PER(P_GPIOI, 0x40022000),
PER(P_GPIOJ, 0x40022400),
PER(P_GPIOK, 0x40022800)
),
PER_ALN(timers, TYPE_STM32F4XX_TIMER,
PER(P_TIM1, 0x40010000), // TIM1 FIXME: TIM1 is a complex timer w/ multiple IRQs
PER_I(P_TIM2, 0x40000000, F4xx_TIM2_IRQ),
PER_I(P_TIM3, 0x40000400, F4xx_TIM3_IRQ),
PER_I(P_TIM4, 0x40000800, F4xx_TIM4_IRQ),
PER_I(P_TIM5, 0x40000C00, F4xx_TIM5_IRQ),
PER_I(P_TIM6, 0x40001000, F4xx_TIM6_DAC_IRQ),
PER_I(P_TIM7, 0x40001400, F4xx_TIM7_IRQ),
PER(P_TIM8, 0x40010400),
PER_I(P_TIM9, 0x40014000, F4xx_TIM1_BRK_TIM9_IRQ),
PER_I(P_TIM10, 0x40014400, F4xx_TIM1_UP_TIM10_IRQ),
PER_I(P_TIM11, 0x40014800, F4xx_TIM1_TRG_COM_TIM11_IRQ),
PER_I(P_TIM12, 0x40001800, F4xx_TIM8_BRK_TIM12_IRQ),
PER_I(P_TIM13, 0x40001C00, F4xx_TIM8_UP_TIM13_IRQ),
PER_I(P_TIM14, 0x40002000, F4xx_TIM8_TRG_COM_TIM14_IRQ)
),
PER_LNIV(exti, TYPE_STM32F4XX_EXTI, P_EXTI, 0x40013C00,
F4xx_EXTI0_IRQ, F4xx_EXTI1_IRQ, F4xx_EXTI2_IRQ, F4xx_EXTI3_IRQ,
F4xx_EXTI4_IRQ, [5 ... 9] = F4xx_EXTI_5_9_IRQ,
[10 ... 15] = F4xx_EXTI_10_15_IRQ
),
PER_LNIV(eth, "stm32f4xx-ethernet", P_UNDEFINED, 0x40028000, F4xx_ETH_IRQ, F4xx_ETH_WKUP_IRQ),
PER_LNI(rcc, TYPE_STM32F2xx_RCC, P_RCC, 0x40023800, F4xx_RCC_IRQ),
PER_LNI(flash_if, TYPE_STM32F4xx_FINT, P_FINT, 0x40023C00, F4xx_FLASH_IRQ),
PER_LN(iwdg, TYPE_STM32F4XX_IWDG, P_IWDG, 0x40003000),
PER_LN(crc, TYPE_STM32F2XX_CRC, P_CRC, 0x40023000),
PER_LN(rtc, TYPE_STM32F2XX_RTC, P_RTC, 0x40002800),
PER_LN(itm, TYPE_STM32F4XX_ITM, P_UNDEFINED, 0xE0000000),
PER_LN(pwr, TYPE_STM32F2XX_PWR, P_PWR, 0x40007000),
PER_LNI(rng, TYPE_STM32F4XX_RNG, P_RNG, 0x50060800, F4xx_HASH_RNG_IRQ),
PER_LN(otp, TYPE_STM32F4XX_OTP, P_UNDEFINED, 0x1FFF7800),
PER_LNI(usb_hs, TYPE_STM32F4xx_USB, P_USB, 0x40040000, F4xx_OTG_HS_IRQ),
PER_LNI(usb_fs, TYPE_STM32F4xx_USB, P_USB2, 0x50000000, F4xx_OTG_FS_IRQ),
PER_LN(adc_common, TYPE_STM32F4XX_ADCC, P_UNDEFINED, 0x40012300),
F4xx_DMA2_S4_IRQ, F4xx_DMA2_S5_IRQ, F4xx_DMA2_S6_IRQ, F4xx_DMA2_S7_IRQ),

PER_LN(P_TIM1, TYPE_STM32F4XX_TIMER, 0x40010000), // TIM1 FIXME: TIM1 is a complex timer w/ multiple IRQs
PER_LNI(P_TIM2, TYPE_STM32F4XX_TIMER, 0x40000000, F4xx_TIM2_IRQ),
PER_LNI(P_TIM3, TYPE_STM32F4XX_TIMER, 0x40000400, F4xx_TIM3_IRQ),
PER_LNI(P_TIM4, TYPE_STM32F4XX_TIMER, 0x40000800, F4xx_TIM4_IRQ),
PER_LNI(P_TIM5, TYPE_STM32F4XX_TIMER, 0x40000C00, F4xx_TIM5_IRQ),
PER_LNI(P_TIM6, TYPE_STM32F4XX_TIMER, 0x40001000, F4xx_TIM6_DAC_IRQ),
PER_LNI(P_TIM7, TYPE_STM32F4XX_TIMER, 0x40001400, F4xx_TIM7_IRQ),
PER_LN(P_TIM8, TYPE_STM32F4XX_TIMER, 0x40010400),
PER_LNI(P_TIM9, TYPE_STM32F4XX_TIMER, 0x40014000, F4xx_TIM1_BRK_TIM9_IRQ),
PER_LNI(P_TIM10, TYPE_STM32F4XX_TIMER, 0x40014400, F4xx_TIM1_UP_TIM10_IRQ),
PER_LNI(P_TIM11, TYPE_STM32F4XX_TIMER, 0x40014800, F4xx_TIM1_TRG_COM_TIM11_IRQ),
PER_LNI(P_TIM12, TYPE_STM32F4XX_TIMER, 0x40001800, F4xx_TIM8_BRK_TIM12_IRQ),
PER_LNI(P_TIM13, TYPE_STM32F4XX_TIMER, 0x40001C00, F4xx_TIM8_UP_TIM13_IRQ),
PER_LNI(P_TIM14, TYPE_STM32F4XX_TIMER, 0x40002000, F4xx_TIM8_TRG_COM_TIM14_IRQ),

PER_LNI(P_EXTI, TYPE_STM32F4XX_EXTI, 0x40013C00,
F4xx_EXTI0_IRQ, F4xx_EXTI1_IRQ, F4xx_EXTI2_IRQ, F4xx_EXTI3_IRQ,
F4xx_EXTI4_IRQ, [5 ... 9] = F4xx_EXTI_5_9_IRQ,
[10 ... 15] = F4xx_EXTI_10_15_IRQ
),
PER_LNI(P_ETH, "stm32f4xx-ethernet", 0x40028000, F4xx_ETH_IRQ, F4xx_ETH_WKUP_IRQ),
PER_LNI(P_RCC, TYPE_STM32F407_RCC, 0x40023800, F4xx_RCC_IRQ),
PER_LNI(P_FINT, TYPE_STM32F40x_F41x_FINT, 0x40023C00, F4xx_FLASH_IRQ),
PER_LN(P_IWDG, TYPE_STM32F4XX_IWDG, 0x40003000),
PER_LN(P_CRC, TYPE_STM32F2XX_CRC, 0x40023000),
PER_LN(P_RTC, TYPE_STM32F2XX_RTC, 0x40002800),
PER_LN(P_ITM, TYPE_STM32F4xx_ITM, 0xE0000000),
PER_LN(P_PWR, TYPE_STM32F2XX_PWR, 0x40007000),
PER_LNI(P_RNG, TYPE_STM32F4XX_RNG, 0x50060800, F4xx_HASH_RNG_IRQ),
PER_LN(P_OTP, TYPE_STM32F4XX_OTP, 0x1FFF7800),
PER_LNI(P_USB, TYPE_STM32F4xx_USB, 0x40040000, F4xx_OTG_HS_IRQ),
PER_LNI(P_USB2, TYPE_STM32F4xx_USB, 0x50000000, F4xx_OTG_FS_IRQ),
PER_LN(P_ADCC, TYPE_STM32F4XX_ADCC, 0x40012300),

PER_LN(P_SYSCFG, TYPE_STM32F40x_F41x_SYSCFG, 0x40013800),

}
} ;

#endif // HW_ARM_PRUSA_STM32F407XX_H
2 changes: 2 additions & 0 deletions hw/arm/prusa/stm32_common/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@ arm_ss.add(when: 'CONFIG_STM32F407_SOC',
'stm32_common.c',
'stm32_rcc.c',
'stm32_f2xx_f4xx_dma.c',
'stm32_spi.c',
'stm32_syscfg.c',
))
Loading

0 comments on commit 0fbb6d7

Please sign in to comment.