Skip to content

Instantly share code, notes, and snippets.

@xatier
Created July 5, 2012 06:45
Show Gist options
  • Save xatier/3051858 to your computer and use it in GitHub Desktop.
Save xatier/3051858 to your computer and use it in GitHub Desktop.
qemu/hw/stm32.c
static void stm32l152rbt6_init(ram_addr_t ram_size, const char *boot_device, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) {
//Préparation de la mémoire
MemoryRegion *address_space_mem = get_system_memory();
uint16_t flash_size = stm32_board.f_size; //128KBits
uint16_t sram_size = 0x0010; //16 KBits
//Initialisation du processeur (+ mémoire)
qemu_irq* pic = armv7m_init(address_space_mem, flash_size, sram_size, kernel_filename, cpu_model);
stm32l_sys_init(0x1FF00000, pic[28], &stm32_board); //FIXME: Vérifier l'implémentation de la sys memory
//Structures GPIO
static const uint32_t gpio_addr[NB_GPIO] = {
0x40020000, //GPIO_A
0x40020400, //GPIO_B
0x40020800, //GPIO_C
0x40020C00, //GPIO_D
0x40021000, //GPIO_E
0x40021400 //GPIO_H
};
// static const int gpio_idIrqNVIC[NB_NVIC_IRQ] = {6,7,8,9,10};
DeviceState* gpio_dev[NB_GPIO];
//Création du bouton
DeviceState* button = sysbus_create_simple("stm32_button", -1, NULL);
//Création des leds
DeviceState* led_dev6 = sysbus_create_simple("stm32_led_blue", -1, NULL);
DeviceState* led_dev7 = sysbus_create_simple("stm32_led_green", -1, NULL);
//Initialisation du GPIO_A
gpio_dev[GPIO_A] = sysbus_create_varargs("stm32_gpio_A", gpio_addr[GPIO_A], NULL); //, pic[gpio_idIrqNVIC[0]], pic[gpio_idIrqNVIC[1]], pic[gpio_idIrqNVIC[2]], pic[gpio_idIrqNVIC[3]], pic[gpio_idIrqNVIC[4]], NULL);
qemu_irq entreeBouton = qdev_get_gpio_in(gpio_dev[GPIO_A], 0);
qdev_connect_gpio_out(button, 0, entreeBouton);
//Initialisation du GPIO_B
gpio_dev[GPIO_B] = sysbus_create_varargs("stm32_gpio_B", gpio_addr[GPIO_B], NULL); //, pic[gpio_idIrqNVIC[0]], pic[gpio_idIrqNVIC[1]], pic[gpio_idIrqNVIC[2]], pic[gpio_idIrqNVIC[3]], pic[gpio_idIrqNVIC[4]], NULL);
qemu_irq entreeLED6 = qdev_get_gpio_in(led_dev6, 0);
qdev_connect_gpio_out(gpio_dev[GPIO_B], 6, entreeLED6);
qemu_irq entreeLED7 = qdev_get_gpio_in(led_dev7, 0);
qdev_connect_gpio_out(gpio_dev[GPIO_B], 7, entreeLED7);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment