41 lines
1.1 KiB
C
41 lines
1.1 KiB
C
#pragma once
|
|
|
|
#include "hw/sysbus.h"
|
|
#include "hw/hw.h"
|
|
#include "hw/registerfields.h"
|
|
|
|
#define TYPE_ESP32_GPIO "esp32.gpio"
|
|
#define ESP32_GPIO(obj) OBJECT_CHECK(Esp32GpioState, (obj), TYPE_ESP32_GPIO)
|
|
#define ESP32_GPIO_GET_CLASS(obj) OBJECT_GET_CLASS(Esp32GpioClass, obj, TYPE_ESP32_GPIO)
|
|
#define ESP32_GPIO_CLASS(klass) OBJECT_CLASS_CHECK(Esp32GpioClass, klass, TYPE_ESP32_GPIO)
|
|
|
|
REG32(GPIO_STRAP, 0x0038)
|
|
|
|
#define ESP32_STRAP_MODE_FLASH_BOOT 0x12
|
|
#define ESP32_STRAP_MODE_UART_BOOT 0x0f
|
|
|
|
#define ESP32_GPIO_COUNT 32
|
|
#define ESP32_GPIO_INPUT "gpio-in"
|
|
#define ESP32_GPIO_OUTPUT "gpio-out"
|
|
|
|
typedef struct Esp32GpioState {
|
|
SysBusDevice parent_obj;
|
|
|
|
MemoryRegion iomem;
|
|
qemu_irq irq;
|
|
qemu_irq output_lines[ESP32_GPIO_COUNT];
|
|
uint32_t strap_mode;
|
|
uint32_t input_level;
|
|
uint32_t output_level;
|
|
uint32_t output_enable;
|
|
uint32_t interrupt_status;
|
|
uint32_t pin_config[ESP32_GPIO_COUNT];
|
|
hwaddr pin_config_base;
|
|
} Esp32GpioState;
|
|
|
|
typedef struct Esp32GpioClass {
|
|
SysBusDeviceClass parent_class;
|
|
} Esp32GpioClass;
|
|
|
|
void esp32_gpio_set_input_level(Esp32GpioState *s, int pin, bool level);
|