Files
WeActStudio.EpaperModule/Example/EpaperModuleTest_CH32V103/Peripheral/src/ch32v10x_usb.c
T
2022-08-06 13:35:32 +08:00

171 lines
4.5 KiB
C

/********************************** (C) COPYRIGHT *******************************
* File Name : ch32v10x_usb.c
* Author : WCH
* Version : V1.0.0
* Date : 2020/04/30
* Description : This file provides all the USB firmware functions.
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* SPDX-License-Identifier: Apache-2.0
*******************************************************************************/
#include "ch32v10x_usb.h"
#include "ch32v10x_rcc.h"
#include "debug.h"
/******************************** USB DEVICE **********************************/
/* Endpoint address */
PUINT8 pEP0_RAM_Addr;
PUINT8 pEP1_RAM_Addr;
PUINT8 pEP2_RAM_Addr;
PUINT8 pEP3_RAM_Addr;
PUINT8 pEP4_RAM_Addr;
PUINT8 pEP5_RAM_Addr;
PUINT8 pEP6_RAM_Addr;
PUINT8 pEP7_RAM_Addr;
/*********************************************************************
* @fn USB_DeviceInit
*
* @brief Initializes USB device.
*
* @return none
*/
void USB_DeviceInit(void)
{
R8_USB_CTRL = 0x00;
R8_UEP4_1_MOD = RB_UEP4_RX_EN | RB_UEP4_TX_EN | RB_UEP1_RX_EN | RB_UEP1_TX_EN;
R8_UEP2_3_MOD = RB_UEP2_RX_EN | RB_UEP2_TX_EN | RB_UEP3_RX_EN | RB_UEP3_TX_EN;
R8_UEP5_6_MOD = RB_UEP5_RX_EN | RB_UEP5_TX_EN | RB_UEP6_RX_EN | RB_UEP6_TX_EN;
R8_UEP7_MOD = RB_UEP7_RX_EN | RB_UEP7_TX_EN;
R16_UEP0_DMA = (UINT16)(UINT32)pEP0_RAM_Addr;
R16_UEP1_DMA = (UINT16)(UINT32)pEP1_RAM_Addr;
R16_UEP2_DMA = (UINT16)(UINT32)pEP2_RAM_Addr;
R16_UEP3_DMA = (UINT16)(UINT32)pEP3_RAM_Addr;
R16_UEP4_DMA = (UINT16)(UINT32)pEP4_RAM_Addr;
R16_UEP5_DMA = (UINT16)(UINT32)pEP5_RAM_Addr;
R16_UEP6_DMA = (UINT16)(UINT32)pEP6_RAM_Addr;
R16_UEP7_DMA = (UINT16)(UINT32)pEP7_RAM_Addr;
R8_UEP0_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK;
R8_UEP1_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK;
R8_UEP2_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK;
R8_UEP3_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK;
R8_UEP4_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK;
R8_UEP5_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK;
R8_UEP6_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK;
R8_UEP7_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK;
R8_USB_INT_FG = 0xFF;
R8_USB_INT_EN = RB_UIE_SUSPEND | RB_UIE_BUS_RST | RB_UIE_TRANSFER;
R8_USB_DEV_AD = 0x00;
R8_USB_CTRL = RB_UC_DEV_PU_EN | RB_UC_INT_BUSY | RB_UC_DMA_EN;
R8_UDEV_CTRL = RB_UD_PD_DIS | RB_UD_PORT_EN;
}
/*********************************************************************
* @fn DevEP1_IN_Deal
*
* @brief Device endpoint1 IN
*
* @param l: IN length(<64B)
*
* @return none
*/
void DevEP1_IN_Deal(UINT8 l)
{
R8_UEP1_T_LEN = l;
R8_UEP1_CTRL = (R8_UEP1_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK;
}
/*********************************************************************
* @fn DevEP2_IN_Deal
*
* @brief Device endpoint2 IN
*
* @param l: IN length(<64B)
*
* @return none
*/
void DevEP2_IN_Deal(UINT8 l)
{
R8_UEP2_T_LEN = l;
R8_UEP2_CTRL = (R8_UEP2_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK;
}
/*********************************************************************
* @fn DevEP3_IN_Deal
*
* @brief Device endpoint3 IN
*
* @param l: IN length(<64B)
*
* @return none
*/
void DevEP3_IN_Deal(UINT8 l)
{
R8_UEP3_T_LEN = l;
R8_UEP3_CTRL = (R8_UEP3_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK;
}
/*********************************************************************
* @fn DevEP4_IN_Deal
*
* @brief Device endpoint4 IN
*
* @param l: IN length(<64B)
*
* @return none
*/
void DevEP4_IN_Deal(UINT8 l)
{
R8_UEP4_T_LEN = l;
R8_UEP4_CTRL = (R8_UEP4_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK;
}
/*********************************************************************
* @fn DevEP5_IN_Deal
*
* @brief Device endpoint5 IN
*
* @param l: IN length(<64B)
*
* @return none
*/
void DevEP5_IN_Deal(UINT8 l)
{
R8_UEP5_T_LEN = l;
R8_UEP5_CTRL = (R8_UEP5_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK;
}
/*********************************************************************
* @fn DevEP6_IN_Deal
*
* @brief Device endpoint6 IN
*
* @param l: IN length(<64B)
*
* @return none
*/
void DevEP6_IN_Deal(UINT8 l)
{
R8_UEP6_T_LEN = l;
R8_UEP6_CTRL = (R8_UEP6_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK;
}
/*********************************************************************
* @fn DevEP7_IN_Deal
*
* @brief Device endpoint7 IN
*
* @param l: IN length(<64B)
*
* @return none
*/
void DevEP7_IN_Deal(UINT8 l)
{
R8_UEP7_T_LEN = l;
R8_UEP7_CTRL = (R8_UEP7_CTRL & ~MASK_UEP_T_RES) | UEP_T_RES_ACK;
}