void main(void) { GPIO_OFF(E_NRST); unstick_i2c(); GPIO_ON(E_NRST); setup_clocks((int)info_get(boot_table, INFO_HSE_FREQ)); iwdg_start(4, 0xFFF); watchdog_main = watchdog_net = 5; ASSERT(xTaskCreate(main_thread, "main", MAIN_STACK_SIZE, NULL, THREAD_PRIO_MAIN, &thread_main)); vTaskStartScheduler(); }
PinName port_pin(PortName port, int pin_n) { MBED_ASSERT((port <= Port7) && (pin_n < 32)); int offset = 0; // Lookup table only maps pins 0 to 15 if (pin_n > 15) { return NC; } // Lookup SCU offset if (port < Port4) { offset = _scu_off[port][pin_n]; } else { offset = _scu_off2[port - Port4][pin_n]; offset = ((offset & 0xf0) << 1) | (offset & 0x0f); } // Return pin name return (PinName)((offset << 18) | GPIO_OFF(port, pin_n)); }
static void main_thread(void *pdata) { QueueSetHandle_t qs; QueueSetMemberHandle_t active; ASSERT((qs = xQueueCreateSet(SERIAL_RX_SIZE * 3))); serial_start(cli_serial, 115200, qs); serial_start(&Serial4, 57600, qs); serial_start(&Serial5, cfg.gps_baud_rate ? cfg.gps_baud_rate : 57600, qs); cli_set_output(cli_serial); log_start(cli_serial); cl_enabled = 1; load_eeprom(); cfg.flags &= ~FLAG_HOLDOVER_TEST; if (cfg.flags & FLAG_GPSEXT) { gps_serial = &Serial5; } else { gps_serial = &Serial4; } if (!cfg.holdover) { cfg.holdover = 60; } if (!cfg.loopstats_interval) { cfg.loopstats_interval = 60; } ppscapture_start(); vtimer_start(); tcpip_start(); test_reset(); cli_banner(); if (!(cfg.flags & FLAG_GPSEXT)) { ublox_configure(); if (HAS_FEATURE(PPSEN) && (cfg.flags & FLAG_PPSEN)) { GPIO_OFF(PPSEN); } } cl_enabled = 0; while (1) { watchdog_main = 5; active = xQueueSelectFromSet(qs, pdMS_TO_TICKS(1000)); if (active == cli_serial->rx_q) { int16_t val = serial_get(cli_serial, TIMEOUT_NOBLOCK); ASSERT(val >= 0); cli_feed(val); } else if (active == gps_serial->rx_q) { int16_t val = serial_get(gps_serial, TIMEOUT_NOBLOCK); ASSERT(val >= 0); gps_byte_received(val); if (cfg.flags & FLAG_GPSOUT) { char tmp = val; serial_write(&Serial5, &tmp, 1); } #if 0 } else if (active == Serial5.rx_q) { char tmp = serial_get(&Serial5, TIMEOUT_NOBLOCK); serial_write(&Serial4, &tmp, 1); #endif } } }
static void try_flash(void) { int16_t rc; FIL fp; UINT nread; const char *errmsg; static uint8_t buf[512]; SPI3_Dev.cs_pad = SDIO_CS_PAD; SPI3_Dev.cs_pin = SDIO_CS_PNUM; spi_start(&SPI3_Dev, 0); mmc_start(); GPIO_OFF(SDIO_PDOWN); vTaskDelay(pdMS_TO_TICKS(100)); serial_puts(&Serial1, "Bootloader version: " VERSION "\r\n"); rc = mmc_connect(); if (rc == EERR_OK) { serial_puts(&Serial1, "SD connected\r\n"); } else if (rc == EERR_TIMEOUT) { serial_puts(&Serial1, "Timed out waiting for SD\r\n"); return; } else { serial_puts(&Serial1, "Failed to connect to SD\r\n"); return; } serial_puts(&Serial1, "Mounting SD filesystem\r\n"); if (f_mount(0, &MMC_FS) != FR_OK) { serial_puts(&Serial1, "ERROR: Unable to mount filesystem\r\n"); return; } serial_puts(&Serial1, "Opening file " MMC_FIRMWARE_FILENAME "\r\n"); if (f_open(&fp, MMC_FIRMWARE_FILENAME, FA_READ) != FR_OK) { serial_puts(&Serial1, "Error opening file, maybe it does not exist\r\n"); return; } serial_puts(&Serial1, "Comparing file to current flash contents\r\n"); bootloader_start(); while (bootloader_status == BLS_FLASHING) { if (f_read(&fp, buf, sizeof(buf), &nread) != FR_OK) { serial_puts(&Serial1, "Error reading file\r\n"); break; } if (nread == 0) { serial_puts(&Serial1, "Error: premature end of file\r\n"); break; } errmsg = bootloader_feed(buf, nread); if (errmsg != NULL) { serial_puts(&Serial1, "Error flashing firmware: "); serial_puts(&Serial1, errmsg); serial_puts(&Serial1, "\r\n"); break; } } if (bootloader_status == BLS_DONE) { if (bootloader_was_changed()) { serial_puts(&Serial1, "New firmware successfully loaded\r\n"); } else { serial_puts(&Serial1, "Firmware is up-to-date\r\n"); } } else { serial_puts(&Serial1, "ERROR: Reset to try again or load last known good firmware\r\n"); HALT(); } }