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

📄 usb.h

📁 基于HMS7202的波形发生器源程序
💻 H
字号:
#ifndef _USB_H
#define _USB_H

#ifndef US_FIFO_SIZE
#define US_FIFO_SIZE 	8  //word
#endif

#define  FAIL  0x0
#define  OK    0x1

#define FALSE 0
#define TRUE !FALSE

#define BUFFER_MEM_BASE     0x40600000
#define USB_BUFFER_BASE     BUFFER_MEM_BASE
#define USB_BUFFER_SIZE     (512*1024)

#define MIN_BUFFER_SIZE     (4*1024)
#define MAX_BUFFER_SIZE     (500*1024)

#define US_DATASYNC 0xffff
#define US_HEARTBEAT 0xfffe
#define US_HEARTBEAT_INTERVAL 10000
#define NULL	0x0

typedef struct IRingBuffer_Struct IRingBuffer_t;
struct IRingBuffer_Struct {
	char name[16];
	int size;
	int head;
	int tail;
	int *bufp;
	int (*available)(IRingBuffer_t *);
	int (*empty)(IRingBuffer_t *);
	void (*reset)(IRingBuffer_t *);
	int (*put)(IRingBuffer_t *, int );
	int (*get)(IRingBuffer_t *, int *);
	int (*putData)(IRingBuffer_t *, int *, int);
	int (*getData)(IRingBuffer_t *, int *, int);
};
typedef struct {
	union {
		int data[US_FIFO_SIZE];
		struct {
			char nSeqNo;
			char SeqNo;
			short sync;
		} pkt;
	}u;
} USRawData_t;

typedef struct USlaveBlock_Struct USlaveBlock_t;
struct USlaveBlock_Struct {
	IRingBuffer_t rxb;//接收循环队列,64kword
	IRingBuffer_t txb;//发送循环队列,64kword

	enum {
		USL_INIT_STATE,
		USL_CMD_STATE,
		USL_RECV_STATE,
		USL_SEND_STATE,
		USL_ECHO_STATE,
		USL_GETINFO_STATE,
		USL_FLASH_STATE,
		USL_DECODE_STATE,
		USL_REPLY_CMD_STATE,
		USL_REPLY_DAT_STATE,		
		USL_EXIT_STATE
	} state;
	
	enum { RXMode, TXMode } mode;

#define O_US_NOHEARTBEAT   0
#define O_US_HEARTBEAT     1
	int HeartBeat;
	int nHeartBeat;
#define O_US_RAW     0
#define O_US_PACKET  1
	int PktMode;
	char NoTx;
	char NoRx;
	int rxerror;

	int rxmasked;
	int txmasked;

	int txunderflow;
	int rxoverflow;

	void (*reset)(USlaveBlock_t *);
	void (*start)(USlaveBlock_t *);
	void (*stop)(USlaveBlock_t *);
	void (*setTx)(USlaveBlock_t *);
	void (*setRx)(USlaveBlock_t *);
	void (*mask)(USlaveBlock_t *, int);
	void (*unmask)(USlaveBlock_t *, int);
	void (*setHeartBeat)(USlaveBlock_t *, int);
	int (*masked)(USlaveBlock_t *, int);
	int (*receive)(USlaveBlock_t *, int *, int);
	int (*send)(USlaveBlock_t *, int *, int);
};


#define USLCMD_RESET  0x0001
#define USLCMD_ECHO   0x0002
#define USLCMD_RECV   0x0003
#define USLCMD_SEND   0x0004
#define USLCMD_MEMWRITE  0x0005
#define USLCMD_MEMREAD   0x0006
#define USLCMD_FLASH  0x0007
#define USLCMD_STATUS 0x0008
#define USLCMD_RECV_NOCKSUM 0x0009
#define USLCMD_GETINFO 0x000a
#define USLCMD_END    0x0099
typedef  struct USL_PKT_STRUCT {
	short nCmd;
	short Cmd;
		
	int		Addr;
	int		Size;

#define USL_STATUS_OK 1
#define USL_STATUS_FAIL 2
#define USL_STATUS_ECHO 3
#define USL_STATUS_WAIT 4
#define USL_STATUS_FRUN 5
#define USL_STATUS_ADDRESS 6
	int     Status;
	int		Chksum4All;
	int		Pad;
	int		Chksum4Cmd;
} USL_PKT_STRUCT_t;
typedef struct {
	union {
		int buffer[US_FIFO_SIZE-1];
		struct USL_PKT_STRUCT pkt;
	} u;
} USL_PACKET_t;

extern void IRingBufferInit(IRingBuffer_t *ring, char *name, int addr, int size);
extern USlaveBlock_t * uslave7202_setup(int, int);
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -