📄 usb.h
字号:
#ifndef _USB_H_
#define _USB_H_
#include "def.h"
#include "44b.h"
#include "NF_GLOBAL.h"
#include "Usbd12.h"
#include "Usbhal.h"
#define USB_DEBUG 0
/*中断寄存器个种中断设置*/
/********************************************************************************************************
*USB设备请求Set_Address地址掩码 wValue *
********************************************************************************************************/
#define D12_INT_SUSPENDCHANGE 0x0080
#define D12_INT_BUSRESET 0x0040
#define D12_INT_ENDP2IN 0x0020
#define D12_INT_ENDP2OUT 0x0010
#define D12_INT_ENDP1IN 0x0008
#define D12_INT_ENDP1OUT 0x0004
#define D12_INT_ENDP0IN 0x0002
#define D12_INT_ENDP0OUT 0x0001
#define D12_SETUPPACKET 0x20
#define D12_FULLEMPTY 0x01
/**/
#define MAX_CONTROLDATA_SIZE 64
#define DEVICE_DESC_SIZE 18
#define CONFIG_DESC_TOTAL_SIZE 32
#define CONST_DATA const
#define EP0_PACKET_SIZE 0x10
#define EP1_PACKET_SIZE 0x10
#define EP2_PACKET_SIZE 0x40
/*控制buf里控制状态定义*/
enum{
USB_IDLE,
USB_PENDING,
USB_RECEIVE,
USB_TRANSMIT
};
enum{
SU_SUSPEND,
SU_NOMAL,
NO_CONNECT
};
/*
enum{
BULK_NONE,
BULK_OUT,
BULK_IN
};
*/
//typedef __packed struct _device_request
typedef __packed struct device_request
{
unsigned char bmRequestType;
unsigned char bRequest;
unsigned short wValue;
unsigned short wIndex;
unsigned short wLength;
} DEVICE_REQUEST;
typedef __packed struct ep_control
{
unsigned char state;
unsigned char suspend; /*0:正常;1:挂起*/
unsigned char request; /*1:请求包 0:非请求包*/
/*send*/
unsigned char *ep0pData;
unsigned char ep0wantlen;
unsigned short ep0sendlen;
unsigned char dataReBufer[16];
unsigned char dataSendBuf[16];
unsigned char CBW[31]; /*当前命令*/
unsigned char CbwCmd; /*当前scsi命令*/
unsigned char CbwDefault; /*默认包标志0无,1有*/
unsigned char ep5isr; /*ep5isr中断标志,表示可以发送当前数据*/
unsigned char ep4isr; /*ep5isr中断标志,表示可以发送当前数据*/
unsigned char mainData[128];
unsigned short wantlen; /*需要发送多少数据*/
unsigned short sendlen; /*已经发送的数据*/
unsigned short Pageptr; /*已传送长度或者,已读长度*/
unsigned char recflag; /*scsi 控制标志*/
unsigned short nBadBlocks[BADBLOCKNUM];/* 坏块号 BADBLOCKNUM 23 */
unsigned char nBadBlockCount;
} EP_CONTROL;
typedef __packed struct IO_REQUEST
{
unsigned short uAddressL;
unsigned char bAddressH;
unsigned short uSize;
unsigned char bCommand;
} IO_REQUEST, *PIO_REQUEST;
typedef __packed struct control_xfer
{
DEVICE_REQUEST DeviceRequest;
unsigned short wLength;
unsigned short wCount;
unsigned char *pData;
unsigned char dataBuffer[MAX_CONTROLDATA_SIZE]; //MAX_CONTROLDATA_SIZE 64
} CONTROL_XFER;
extern EP_CONTROL g_epctl;
extern DEVICE_REQUEST g_usbrequest;
extern ARMUSBFLAGS bUSBFlags;
//extern ARMUSBFLAGS bUSBFlags;
//extern CONTROL_XFER ControlData;
extern U8 Ep1Buf[EP1_PACKET_SIZE];
extern U8 Ep2Buf[EP2_PACKET_SIZE];
volatile extern U8 Ep1Len;
volatile extern U8 Ep2Len;
volatile extern U16 intcount;
volatile extern U16 isr;
volatile extern U8 irqcount;
extern U8 g_UsbConFlags[10];
extern void Delay(U32 ms) ;
extern void UsbStallEp0(void);
extern void UsbDisconnect(void);
extern void UsbConnect(void);
extern void UsbReconnect(void);
extern void UsbSingleTransmit(unsigned char* pBuf, unsigned char nLen);
extern void UsbClearAllInts(void);
/*命令接口*/
extern void UsbSetAddressEnable(unsigned char bAddress,unsigned char bEnable);
extern void UsbSetEndpointEnable(unsigned char bEnable);
extern void UsbSetMode(unsigned char bConfig, unsigned char bClkDiv);
extern void UsbSetDMA(unsigned char bMode);
extern unsigned short UsbReadInterruptRegister(void);
extern unsigned char UsbSelectEndpoint(unsigned char bEndp);
extern unsigned char UsbReadLastTransactionStatus(unsigned char bEndp);
extern unsigned char UsbReadEndpointStatus(unsigned char bEndp);
extern void UsbSetEndpointStatus(unsigned char bEndp, unsigned char bStalled);
extern void UsbSendResume(void);
extern unsigned short UsbReadCurrentFrameNumber(void);
extern void bus_reset(void);
extern unsigned char UsbReadEndpoint(unsigned char endp, unsigned char * buf, unsigned char len);
extern unsigned char UsbReadMainEndpoint(unsigned char * buf);
extern unsigned char UsbWriteEndpoint(unsigned char endp, unsigned char * buf, unsigned char len);
extern void UsbAcknowledgeEndpoint(unsigned char endp);
extern void UsbRecData(unsigned char *buf, unsigned char len);
extern void UsbmsService(void);
extern void USBInit(void);
extern void ep0_rxdone(void);
extern void ep0_txdone(void);
extern void ep1_rxdone(void);
extern void ep1_txdone(void);
extern void main_txdone(void);
extern void main_rxdone(void);
extern void Usb_irq(void);
extern void UsbOnCmd(void);
extern void CpyCSWDefault(unsigned char *SendBuf);
extern U8 CheckUsbLink(void);
extern void Usb_Stop(void);
unsigned short D12_ReadChipID(void);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -