mirror of
https://github.com/WeActStudio/WeActStudio.EpaperModule.git
synced 2026-08-16 13:13:45 +02:00
171 lines
4.5 KiB
C
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;
|
|
}
|