GEX core repository.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
gex-core/platform/platform.c

92 lines
2.4 KiB

//
// Created by MightyPork on 2017/11/26.
//
#include "platform.h"
#include "usbd_core.h"
#include "USB/usb_device.h"
#include "framework/resources.h"
#include "framework/unit_registry.h"
#include "comm/interfaces.h"
#include "hw_utils.h"
#include "units_manifest.h"
extern uint32_t plat_init_resources2(void);
// TODO split this and the plat_compat files to per-platform ones stored in the platform project
void plat_init_resources(void)
{
// we use |= here, even though return values are not booleans - success is 0,
// thus any problem results in nonzero and the assert will trip.
uint32_t rv = 0;
// periphs available everywhere - enable clock
hw_periph_clock_enable(DMA1);
#ifdef DMA2
hw_periph_clock_enable(DMA2);
#endif
// EXTI are always available
rsc_free_range(NULL, R_EXTI0, R_EXTI15);
// --- platform specific resource releases and claims ---
// Units supported by the platform (known to work correctly)
// - this is a macro created in the Makefile, registering all enabled units
UNITS_REGISTER_CMD;
rv = plat_init_resources2();
assert_param(rv == 0);
}
// ---- USB reconnect ----
/**
* USB re-connect (to apply change of the LOCK jumper)
*/
void plat_usb_reconnect(void)
{
if (gActiveComport != COMPORT_USB) return;
// TODO add other reset methods available on different chips (e.g. externam FET)
USBD_LL_Reset(&hUsbDeviceFS);
#if PLAT_USB_PU_CTL
HAL_PCD_DevDisconnect(&hpcd_USB_FS);
osDelay(100);
HAL_PCD_DevConnect(&hpcd_USB_FS);
#endif
}
void plat_print_system_pinout(IniWriter *iw)
{
if (iw->count == 0) return;
iw_string(iw, "System pin-out\r\n"
"--------------\r\n");
#if PLAT_LOCK_BTN
iw_sprintf(iw, "Lock button (active="
#if PLAT_LOCK_1CLOSED
"high"
#else
"low"
#endif
"): P%c%d\r\n", LOCK_JUMPER_PORT, LOCK_JUMPER_PIN);
#else
iw_sprintf(iw, "Lock jumper (closed="
#if PLAT_LOCK_1CLOSED
"high"
#else
"low"
#endif
"): P%c%d\r\n", LOCK_JUMPER_PORT, LOCK_JUMPER_PIN);
#endif
iw_sprintf(iw, "Indicator LED (anode): P%c%d\r\n", STATUS_LED_PORT, STATUS_LED_PIN);
iw_sprintf(iw, "System clock speed: %d MHz\r\n", PLAT_AHB_MHZ);
}