Esempio n. 1
0
void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{
	struct pios_usb_dev * usb_dev = (struct pios_usb_dev *) pios_usb_id;

	bool valid = PIOS_USB_validate(usb_dev);
	PIOS_Assert(valid);

#define FORCE_DISABLE_USB_IRQ 1
#if FORCE_DISABLE_USB_IRQ
	/* Make sure we disable the USB interrupt since it may be left on by bootloader */
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure = usb_dev->cfg->irq.init;
	NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
	NVIC_Init(&NVIC_InitStructure);
#endif

	/* Configure USB D-/D+ (DM/DP) pins */
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_OTG1_FS);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_OTG1_FS);

	/* Configure VBUS sense pin */
	GPIO_Init(usb_dev->cfg->vsense.gpio, (GPIO_InitTypeDef*)&usb_dev->cfg->vsense.init);

	/* Enable USB OTG Clock */
	RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS, ENABLE);
}
Esempio n. 2
0
/**
 * This function returns the connection status of the USB HID interface
 * \return 1: interface available
 * \return 0: interface not available
 * \note Applications shouldn't call this function directly, instead please use \ref PIOS_COM layer functions
 */
bool PIOS_USB_CheckAvailable(uint32_t id)
{
	struct pios_usb_dev * usb_dev = (struct pios_usb_dev *) pios_usb_com_id;

	if (PIOS_USB_validate(usb_dev) != 0)
		return false;

	return PIOS_USB_CableConnected(id) && transfer_possible;
}
Esempio n. 3
0
bool PIOS_USB_CableConnected(uint8_t id)
{
	struct pios_usb_dev * usb_dev = (struct pios_usb_dev *) pios_usb_com_id;

	if (PIOS_USB_validate(usb_dev) != 0)
		return false;

	return sof_seen_since_reset;
}
Esempio n. 4
0
void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{
	struct pios_usb_dev * usb_dev = (struct pios_usb_dev *) pios_usb_id;

	bool valid = PIOS_USB_validate(usb_dev);
	PIOS_Assert(valid);

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

	NVIC_Init((NVIC_InitTypeDef*)&usb_dev->cfg->irq.init);
}
Esempio n. 5
0
/**
 * This function returns the connection status of the USB interface
 * \return true: interface available
 * \return false: interface not available
 */
bool PIOS_USB_CheckAvailable(uintptr_t id)
{
	struct pios_usb_dev * usb_dev = (struct pios_usb_dev *) pios_usb_id;

	if (!PIOS_USB_validate(usb_dev))
		return false;

	if (usb_dev->cfg->vsense.gpio != NULL)
		return GPIO_ReadInputDataBit(usb_dev->cfg->vsense.gpio, usb_dev->cfg->vsense.init.GPIO_Pin) == Bit_SET;

	return transfer_possible == 1;
}
Esempio n. 6
0
bool PIOS_USB_CableConnected(uintptr_t id)
{
	struct pios_usb_dev * usb_dev = (struct pios_usb_dev *) pios_usb_com_id;

	if (PIOS_USB_validate(usb_dev) != 0)
		return false;

	if (usb_dev->cfg->vsense.gpio != NULL)
		return GPIO_ReadInputDataBit(usb_dev->cfg->vsense.gpio, usb_dev->cfg->vsense.init.GPIO_Pin) == Bit_SET;

	return sof_seen_since_reset;
}