Add shared emulator services, waveform generation and STM32 USB boot ports
This commit is contained in:
39
c/set-protocol/ports/stm32g474-periph/main.c
Normal file
39
c/set-protocol/ports/stm32g474-periph/main.c
Normal file
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* Точка входа прошивки. Здесь только порядок запуска и совместное обслуживание модулей.
|
||||
* Настройки оборудования находятся в 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user