概述
本文主要描述了在Qemu平台中,如何添加STM32F407的Power控制器模拟代码。
参考资料
STM32F4XX TRM手册,手册编号:RM0090
添加步骤
1、在hw/arm/Kconfig文件中添加STM32F4XX_PWR,如下所示:
+号部分为新增加内容
--- a/hw/arm/Kconfig
+++ b/hw/arm/Kconfig
@@ -340,6 +340,7 @@ config STM32F407_SOC
select STM32F4XX_EXTI
select STM32F4XX_USART
select STM32F4XX_RCC
+ select STM32F4XX_PWR
2、在include/hw/arm/stm32f407_soc.h文件中添加
+号部分为新增加内容
--- a/include/hw/arm/stm32f407_soc.h
+++ b/include/hw/arm/stm32f407_soc.h
@@ -27,6 +27,7 @@
#include "hw/misc/stm32f4xx_exti.h"
#include "hw/char/stm32f4xx_usart.h"
#include "hw/misc/stm32f4xx_rcc.h"
+#include "hw/misc/stm32f4xx_pwr.h"
#define TYPE_STM32F407_SOC "stm32f407-soc"
#define STM32F407_SOC(obj) \
@@ -44,6 +45,7 @@
#define STM32F407_USART6 0x40011400
#define RCC_BASE_ADDR 0x40023800
+#define POWER_BASE_ADDR 0x40007000
#define FLASH_BASE_ADDRESS 0x8000000
#define FLASH_SIZE 0x100000
@@ -64,6 +66,7 @@ typedef struct STM32F407State {
STM32F4xxSyscfgState syscfg;
STM32F4xxExtiState exti;
STM32F4XXRccState rcc;
+ STM32F4XXPowerState power;
STM32F4XXUsartState usart[STM_NUM_USARTS];
} STM32F407State;
3、在hw/arm/stm32f407_soc.c文件中添加如下代码片段
+号部分为新增加内容
--- a/hw/arm/stm32f407_soc.c
+++ b/hw/arm/stm32f407_soc.c
@@ -63,6 +63,9 @@ static void stm32f407_soc_initfn(Object *obj)
object_initialize(&s->rcc, sizeof(s->rcc), TYPE_STM32F4XX_RCC);
qdev_set_parent_bus(DEVICE(&s->rcc), sysbus_get_default());
+ object_initialize(&s->power, sizeof(s->power), TYPE_STM32F4XX_POWER);
+ qdev_set_parent_bus(DEVICE(&s->power), sysbus_get_default());
+
for (i = 0; i < STM_NUM_USARTS; i++) {
object_initialize(&s->usart[i], sizeof(s->usart[i]), TYPE_STM32F4XX_USART);
qdev_set_paren