⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb.h

📁 smp860运动控制器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 + -