46 lines
2.4 KiB
C
46 lines
2.4 KiB
C
/*
|
|
* Точка входа примера периферийного стенда STM32G474. Инициализация платы предшествует
|
|
* обслуживанию транспорта и сервисов; этот файл связывает переносимую библиотеку с жизненным
|
|
* циклом прошивки.
|
|
*/
|
|
|
|
/**
|
|
* Точка входа прошивки. Здесь только порядок запуска и совместное обслуживание модулей.
|
|
* Настройки оборудования находятся в board.c, обмен — в transport.c, генератор — в wave_hal.c.
|
|
* Все модели и разбор команд выполняются в главном цикле; ISR обслуживают HAL и передачу байтов.
|
|
*/
|
|
#include "board.h"
|
|
#include "transport.h"
|
|
#include "emulator.h"
|
|
#include "usb_cdc.h"
|
|
#include "wave_output.h"
|
|
#include "stm32g4xx_hal.h"
|
|
|
|
#if defined(EMU_USB_BOOT_ENABLE)
|
|
#include "boot_port.h"
|
|
#endif
|
|
|
|
int main(void)
|
|
{
|
|
uint32_t serviced;
|
|
/* HAL запускает миллисекундный SysTick до настройки PLL: его счётчик нужен таймаутам HAL. */
|
|
if (HAL_Init()!=HAL_OK) board_fatal(3);
|
|
/* Сначала создаём модели и значения по умолчанию, затем настраиваем плату с этими параметрами. */
|
|
emu_init(); board_init();
|
|
/* Начинаем модельное время после настройки платы, не отрабатывая задержки её инициализации. */
|
|
serviced=HAL_GetTick();
|
|
/* USB использует отдельный HSI48 с CRS: внешний кварц для USB не нужен. */
|
|
if (board_usb_ready()) usb_cdc_init();
|
|
for (;;) {
|
|
uint32_t now=HAL_GetTick();
|
|
/* Один пропущенный миллисекундный шаг за проход. Между шагами всегда обслуживаем связь,
|
|
* чтобы догоняющая обработка модели не вытесняла UART/CAN/USB. */
|
|
if (serviced!=now) { ++serviced; board_tick(); }
|
|
transport_uart_poll(now); transport_can_poll(now);
|
|
usb_cdc_poll(now); wave_output_poll();
|
|
#if defined(EMU_USB_BOOT_ENABLE)
|
|
g474_reset_poll(now);
|
|
#endif
|
|
}
|
|
}
|