You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
6.7 KiB
C
210 lines
6.7 KiB
C
#ifndef __USB_MUSB_REG_H__
|
|
#define __USB_MUSB_REG_H__
|
|
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include "py32f4xx_hal.h"
|
|
|
|
#define __I volatile const /* defines 'read only' permissions */
|
|
#define __O volatile /* defines 'write only' permissions */
|
|
#define __IO volatile /* defines 'read / write' permissions */
|
|
|
|
/**
|
|
* @brief Register map for USB0 peripheral (USB0)
|
|
*/
|
|
typedef struct {
|
|
__IO uint8_t ADDR ;//0X00;
|
|
__IO uint8_t POWER ;//0X01;
|
|
__IO uint8_t REV0[2] ;//0X02~03;
|
|
__IO uint8_t INT_USB ;//0X04;
|
|
__IO uint8_t INT_OUT1 ;//0X05;
|
|
__IO uint8_t INT_IN1 ;//0X06;
|
|
__IO uint8_t REV1[1] ;//0X07;
|
|
__IO uint8_t INT_USBE ;//0X08;
|
|
__IO uint8_t INT_OUT1E ;//0X09;
|
|
__IO uint8_t INT_IN1E ;//0X0A;
|
|
__IO uint8_t REV2[1] ;//0X0B;
|
|
__IO uint16_t FRAME ;//0X0C-0X0D;
|
|
__IO uint8_t INDEX ;//0X0E;
|
|
|
|
__IO uint8_t REV3[1] ;//0X0F;
|
|
__IO uint8_t EP0_CSR ;//0X10;//EP_CSR
|
|
__IO uint8_t EP0_COUNT ;//0X11; //EP_COUNT0
|
|
__IO uint8_t REV4[2] ;//0X12-0X13;
|
|
__IO uint8_t IN_CSR2 ;//0X14;
|
|
__IO uint8_t IN_CSR1 ;//0X15;
|
|
__IO uint8_t MAX_PKT_IN ;//0X16;
|
|
__IO uint8_t REV5[1] ;//0X17
|
|
__IO uint8_t OUT_CSR2 ;//0X18;
|
|
__IO uint8_t OUT_CSR1 ;//0X19;
|
|
__IO uint8_t MAX_PKT_OUT ;//0X1A;
|
|
__IO uint8_t REV6[1] ;//0X1B
|
|
|
|
__IO uint16_t OUT_COUNT ;//0X1C-0X1D;
|
|
|
|
__IO uint8_t REV7[2] ;//0X1E~1F;
|
|
__IO uint8_t FIFO_EP0 ;//0X20;
|
|
__IO uint8_t REV8[3] ;//0X21~23;
|
|
__IO uint8_t FIFO_EP1 ;//0X24;
|
|
__IO uint8_t REV9[3] ;//0X25~27;
|
|
__IO uint8_t FIFO_EP2 ;//0X28;
|
|
__IO uint8_t REV10[3] ;//0X29~2B;
|
|
__IO uint8_t FIFO_EP3 ;//0X2C;
|
|
__IO uint8_t REV11[3] ;//0X2D~2F;
|
|
__IO uint8_t FIFO_EP4 ;//0X30;
|
|
__IO uint8_t REV12[3] ;//0X31~33;
|
|
__IO uint8_t FIFO_EP5 ;//0X34;
|
|
__IO uint8_t REV13[3] ;//0X25~37;
|
|
__IO uint8_t FIFO_EP6 ;//0X38;
|
|
__IO uint8_t REV14[3] ;//0X39~3B;
|
|
__IO uint8_t FIFO_EP7 ;//0X3C;
|
|
|
|
}USB_TypeDef;
|
|
|
|
|
|
#define USB ((USB_TypeDef *)0x40005C00)
|
|
|
|
#define TRUE (1) ///< Boolean true, define to use in API parameters or return value
|
|
#define FALSE (0) ///< Boolean false, define to use in API parameters or return value
|
|
|
|
/* Interrupt register bit masks */
|
|
#define USB_INTR_SUSPEND 0x01
|
|
#define USB_INTR_RESUME 0x02
|
|
#define USB_INTR_RESET 0x04
|
|
#define USB_INTR_SOF 0x08
|
|
#define USB_INTR_EP0 0x01
|
|
|
|
/*power*/
|
|
#define USB_POWER_RESUME 0x04
|
|
#define USB_POWER_SUSPENDENB 0x01
|
|
|
|
/* CSR0 bit masks */
|
|
#define USB_CSR0_OUTPKTRDY 0x01
|
|
#define USB_CSR0_INPKTRDY 0x02
|
|
#define USB_CSR0_SENTSTALL 0x04
|
|
#define USB_CSR0_DATAEND 0x08
|
|
#define USB_CSR0_SETUPEND 0x10
|
|
#define USB_CSR0_SENDSTALL 0x20
|
|
#define USB_CSR0_SVDOUTPKTRDY 0x40
|
|
#define USB_CSR0_SVDSETUPEND 0x80
|
|
|
|
/* Endpoint CSR register bits */
|
|
#define USB_INCSR_IPR 0x01
|
|
#define USB_INCSR_FifoNotEmpty 0x02
|
|
#define USB_INCSR_UnderRun 0x04
|
|
#define USB_INCSR_FF 0x08
|
|
#define USB_INCSR_SendStall 0x10
|
|
#define USB_INCSR_SentStall 0x20
|
|
#define USB_INCSR_CDT 0x40
|
|
|
|
#define USB_INCSR2_FrcDataTog 0x08
|
|
#define USB_INCSR2_DMAEnab 0x10
|
|
#define USB_INCSR2_MODE 0x20
|
|
#define USB_INCSR2_ISO 0x40
|
|
#define USB_INCSR2_AUTOSET 0x80
|
|
|
|
#define USB_OUTCSR_OPR 0x01
|
|
#define USB_OUTCSR_FifoFull 0x02
|
|
#define USB_OUTCSR_OverRun 0x04
|
|
#define USB_OUTCSR_DataError 0x08
|
|
#define USB_OUTCSR_FF 0x10
|
|
#define USB_OUTCSR_SendStall 0x20
|
|
#define USB_OUTCSR_SentStall 0x40
|
|
#define USB_OUTCSR_CDT 0x80
|
|
|
|
#define USB_OUTCSR2_DMAMode 0x10
|
|
#define USB_OUTCSR2_DMAEnab 0x20
|
|
#define USB_OUTCSR2_ISO 0x40
|
|
#define USB_OUTCSR2_AutoClear 0x80
|
|
|
|
|
|
|
|
/* Register read/write macros */
|
|
//#define READ_REG(reg) (reg)
|
|
//#define WRITE_REG(reg,data) ((reg) = (data))
|
|
|
|
/* Define endpoint call status values */
|
|
#define USB_EP_NORMAL 0
|
|
#define USB_EP_RESET 1
|
|
|
|
/* Define device states */
|
|
#define DEVSTATE_DEFAULT 0
|
|
#define DEVSTATE_ADDRESS 1
|
|
#define DEVSTATE_CONFIG 2
|
|
|
|
#define USB_INT_OUT_EP1 (0x2)
|
|
#define USB_INT_OUT_EP2 (0x4)
|
|
#define USB_INT_OUT_EP3 (0x8)
|
|
#define USB_INT_OUT_EP4 (0x10)
|
|
#define USB_INT_OUT_EP5 (0x20)
|
|
#define USB_INT_OUT_EP6 (0x40)
|
|
#define USB_INT_OUT_EP7 (0x80)
|
|
|
|
#define USB_INT_IN_EP1 (USB_INT_OUT_EP1 << (8))
|
|
#define USB_INT_IN_EP2 (USB_INT_OUT_EP2 << (8))
|
|
#define USB_INT_IN_EP3 (USB_INT_OUT_EP3 << (8))
|
|
#define USB_INT_IN_EP4 (USB_INT_OUT_EP4 << (8))
|
|
#define USB_INT_IN_EP5 (USB_INT_OUT_EP5 << (8))
|
|
#define USB_INT_IN_EP6 (USB_INT_OUT_EP6 << (0))
|
|
#define USB_INT_IN_EP7 (USB_INT_OUT_EP7 << (8))
|
|
|
|
|
|
#define DATA_NEED (0)
|
|
#define DATA_NONEED (1)
|
|
|
|
#define CTRL_BUF_SIZE (64)
|
|
#define INT_BUF_SIZE (64)
|
|
#define BULK_BUF_SIZE (64)
|
|
#define ISO_BUF_SIZE (64)
|
|
|
|
|
|
//*****************************************************************************
|
|
//
|
|
// The following are defines for the bit fields in the USB_O_TXFIFOSZ register.
|
|
//
|
|
//*****************************************************************************
|
|
#define USB_TXFIFOSZ_DPB 0x00000010 // Double Packet Buffer Support
|
|
#define USB_TXFIFOSZ_SIZE_M 0x0000000F // Max Packet Size
|
|
#define USB_TXFIFOSZ_SIZE_8 0x00000001 // 8
|
|
#define USB_TXFIFOSZ_SIZE_16 0x00000002 // 16
|
|
#define USB_TXFIFOSZ_SIZE_24 0x00000003 // 24
|
|
#define USB_TXFIFOSZ_SIZE_32 0x00000004 // 32
|
|
#define USB_TXFIFOSZ_SIZE_40 0x00000005 // 40
|
|
#define USB_TXFIFOSZ_SIZE_48 0x00000006 // 48
|
|
#define USB_TXFIFOSZ_SIZE_56 0x00000007 // 56
|
|
#define USB_TXFIFOSZ_SIZE_64 0x00000008 // 64
|
|
|
|
|
|
//*****************************************************************************
|
|
//
|
|
// The following are values that can be passed to USBHostEndpointConfig() and
|
|
// USBDevEndpointConfigSet() as the ui32Flags parameter.
|
|
//
|
|
//*****************************************************************************
|
|
#define USB_EP_AUTO_SET 0x00000001 // Auto set feature enabled
|
|
#define USB_EP_AUTO_CLEAR 0x00000002 // Auto clear feature enabled
|
|
#define USB_EP_DMA_MODE_0 0x00000004 // Enable DMA access using mode 0
|
|
#define USB_EP_DMA_MODE_1 0x00000008 // Enable DMA access using mode 1
|
|
#define USB_EP_MODE_ISOC 0x00000010 // Isochronous endpoint
|
|
#define USB_EP_MODE_BULK 0x00000020 // Bulk endpoint
|
|
#define USB_EP_MODE_INT 0x00000040 // Interrupt endpoint
|
|
|
|
#define USB_EP_MODE_MASK 0x00000070 // Mode Mask
|
|
|
|
|
|
#ifndef NULL
|
|
#define NULL 0
|
|
#endif
|
|
|
|
//*****************************************************************************
|
|
//
|
|
// The following are defines for the Univeral Serial Bus register offsets.
|
|
//
|
|
//*****************************************************************************
|
|
|
|
void USBD_IRQHandler(void);
|
|
void usb_dc_low_level_deinit(void);
|
|
void usb_dc_low_level_init(void);
|
|
|
|
#endif
|