📄 hal.h
字号:
#define INT8 unsigned char
#define INT16 unsigned short
#define INT32 unsigned int
#define WordSwap(input) (((input&0x00FF)<<8)|((input&0xFF00)>>8))
#define DWordSwap(input) ((input&0xFF)<<24|(input&0xFF00)<<8|(input&0xFF0000)>>8|(input&0xFF000000)>>24)
typedef struct
{
unsigned p0:1;
unsigned p1:1;
unsigned p2:1;
}PORTDATA;
void SL811ReSet(void);
int SL811Read(int a);
void SL811Write(int a, int d);
void SL811_Init(void);
#define SL811_ADDR_PORT 0x08000000
#define SL811_DATA_PORT 0x08000004
#define EP0Control 0x00
#define EP0Address 0x01
#define EP0XferLen 0x02
#define EP0Status 0x03
#define EP0Counter 0x04
//0x07寄存器保留
#define EP1Control 0x08
#define EP1Address 0x09
#define EP1XferLen 0x0a
#define EP1Status 0x0b
#define EP1Counter 0x0c
#define CtrlReg 0x05
#define IntEna 0x06
#define IntStatus 0x0d
#define cDATASet 0x0e
#define cSOFcnt 0x0f
#define USB_A_DONE 0x01
#define USB_B_DONE 0x02
#define BABBLE_DETECT 0x04
#define INT_RESERVE 0x08
#define SOF_TIMER 0x10
#define INSERT_REMOVE 0x20
#define USB_RESET 0x40
#define USB_DPLUS 0x80
#define INT_CLEAR 0xFF
#define MAX_EP 0x05 // maximum number of endpoints (Ep0 + max of 4 data endpoints)
#define DEVICE 0x01
#define CONFIGURATION 0x02
#define STRING 0x03
#define INTERFACE 0x04
#define ENDPOINT 0x05
#define GET_STATUS 0x00
#define CLEAR_FEATURE 0x01
#define SET_FEATURE 0x03
#define SET_ADDRESS 0x05
#define GET_DESCRIPTOR 0x06
#define SET_DESCRIPTOR 0x07
#define GET_CONFIG 0x08
#define SET_CONFIG 0x09
#define GET_INTERFACE 0x0a
#define SET_INTERFACE 0x0b
#define SYNCH_FRAME 0x0c
#define DATA0_WR 0x07 // 0000 0111 ( Data0 + OUT + Enable + Arm)
#define sDATA0_WR 0x27 // 0010 0111 ( Data0 + SOF + OUT + Enable + Arm)
//#define pDATA0_WR 0x87 // 1000 0111 (Pre + Data0 + OUT + Enable + Arm)
//#define psDATA0_WR 0xA7 // 1010 0111 (Pre + Data0 + SOF + OUT + Enable + Arm)
#define DATA0_RD 0x03 // 0000 0011 ( Data0 + IN + Enable + Arm)
#define sDATA0_RD 0x23 // 0010 0011 ( Data0 + SOF + IN + Enable + Arm)
//#define pDATA0_RD 0x83 // 1000 0011 (Pre + Data0 + IN + Enable + Arm)
//#define psDATA0_RD 0xA3 // 1010 0011 (Pre + Data0 + SOF + IN + Enable + Arm)
#define PID_SETUP 0xD0
#define PID_IN 0x90
#define PID_OUT 0x10
#define EP0_Buf 0x10 // define start of EP0 64-byte buffer
#define EP1_Buf 0x40 // define start of EP1 64-byte buffer
#define EP0_ACK 0x01 // EPxStatus bits mask during a read
#define EP0_ERROR 0x02
#define EP0_TIMEOUT 0x04
#define EP0_SEQUENCE 0x08
#define EP0_SETUP 0x10
#define EP0_OVERFLOW 0x20
#define EP0_NAK 0x40
#define EP0_STALL 0x80
#define TIMEOUT_RETRY 0x06 // Maximum no. of timeout retry during USB xfer
/*
// SPC-2 commands
*/
#define SPC_CMD_INQUIRY 0x12
#define SPC_CMD_MODESELECT6 0x15
#define SPC_CMD_MODESENSE6 0x1A
#define SPC_CMD_PERSISTANTRESERVIN 0x5E
#define SPC_CMD_PERSISTANTRESERVOUT 0x5F
#define SPC_CMD_PRVENTALLOWMEDIUMREMOVAL 0x1E
#define SPC_CMD_RELEASE6 0x17
#define SPC_CMD_REQUESTSENSE 0x03
#define SPC_CMD_RESERVE6 0x16
#define SPC_CMD_TESTUNITREADY 0x00
#define SPC_CMD_WRITEBUFFER 0x3B
#define SPC_CMD_READLONG 0x23
typedef union _XXG_FLAGS
{
struct _FLAGS
{
unsigned SLAVE_IS_ATTACHED :1;
unsigned SLAVE_REMOVED :1;
unsigned SLAVE_FOUND :1; // Slave USB device found
unsigned SLAVE_ENUMERATED :1; // slave USB device enumeration done
unsigned SLAVE_ONLINE :1;
unsigned TIMEOUT_ERR :1; // timeout error during data endpoint transfer
unsigned DATA_STOP :1; // device unplugged during data transfer
unsigned bData1 :1;
unsigned bUartInDone :1;
unsigned bMassDevice :1;
} bits;
//unsigned short nValue;
} XXGFLAGS;
#define WORD unsigned short
#define BYTE unsigned char
typedef struct
{
WORD wVID, wPID; // Vendor ID and Product ID
BYTE bClass; //
BYTE bNumOfEPs; // actual number endpoint from slave
BYTE iMfg; // Manufacturer ID
BYTE iPdt; // Product ID
BYTE bId1;
BYTE bId2;
BYTE bEPAddr[MAX_EP]; // bit 7 = 1 = use PID_IN,
BYTE bAttr[MAX_EP]; // ISO | Bulk | Interrupt | Control
WORD wPayLoad[MAX_EP]; // ISO range: 1-1023, Bulk: 1-64, etc
WORD bInterval[MAX_EP]; // polling interval (for LS)
BYTE bData1[MAX_EP]; // DataToggle value
} pUSBDEV, *PUSBDEV;
// USB specific request
typedef struct
{
BYTE bmRequest;
BYTE bRequest;
WORD wValue;
WORD wIndex;
WORD wLength;
} SetupPKG, *pSetupPKG;
typedef struct
{
unsigned char usbaddr;
unsigned char endpoint;
unsigned char pid;
unsigned char wPayload;
unsigned int wLen;
unsigned char *buffer;
SetupPKG setup;
unsigned char epbulkin;
unsigned char epbulkout;
} XXGPKG, *pXXGPKG;
// Standard Device Descriptor
typedef struct
{ BYTE bLength;
BYTE bDescriptorType;
WORD bcdUSB;
BYTE bDeviceClass;
BYTE bDeviceSubClass;
BYTE bDeviceProtocol;
BYTE bMaxPacketSize0;
WORD idVendor;
WORD idProduct;
WORD bcdDevice;
BYTE iManufacturer;
BYTE iProduct;
BYTE iSerialNumber;
BYTE bNumConfigurations;
} sDevDesc, *pDevDesc;
// Standard Configuration Descriptor
typedef struct
{
BYTE bLength; // Size of descriptor in Byte
BYTE bType; // Configuration
WORD wLength; // Total length
BYTE bNumIntf; // Number of interface
BYTE bCV; // bConfigurationValue
BYTE bIndex; // iConfiguration
BYTE bAttr; // Configuration Characteristic
BYTE bMaxPower; // Power config
} sCfgDesc, *pCfgDesc;
// Standard Interface Descriptor
typedef struct
{ BYTE bLength;
BYTE bType;
BYTE iNum;
BYTE iAltString;
BYTE bEndPoints;
BYTE iClass;
BYTE iSub;
BYTE iProto;
BYTE iIndex;
} sIntfDesc, *pIntfDesc;
// Standard EndPoint Descriptor
typedef struct
{ BYTE bLength;
BYTE bType;
BYTE bEPAdd;
BYTE bAttr;
WORD wPayLoad; // low-speed this must be 0x08
BYTE bInterval;
} sEPDesc, *pEPDesc;
#define NULL 0
#define TRUE 1
#define FALSE 0
#define UARTBUF_LENGTH 16384
#define BUFFER_LENGTH 8192
#define MAX_READ_LENGTH 16384
#define MAX_WRITE_LENGTH 2048
typedef union {
struct
{
unsigned char Type;
unsigned char Index;
} Descriptor;
struct
{
unsigned char tx0; // MSB for 8051 Keil C
unsigned char tx1;
unsigned char endp;
unsigned char c0; // LSB for 8051 Keil C
} chars;
struct
{
unsigned char c3; // MSB for 8051 Keil C
unsigned char c2;
unsigned char c1;
unsigned char c0; // LSB for 8051 Keil C
} chars0;
struct
{
unsigned short i1; // MSW for 8051 keil C
unsigned short i0; // LSW for 8051 Keil C
} ints;
unsigned int u0;
} FLEXI_INT32;
typedef union {
struct
{
unsigned char c1; // MSB for 8051 Keil C
unsigned char c0; // LSB for 8051 Keil C
} chars;
unsigned short i0;
} FLEXI_INT16, * PFLEXI_INT16;
/* RBC commands */
#define RBC_CMD_FORMAT 0x04
#define RBC_CMD_READ10 0x28
#define RBC_CMD_READCAPACITY 0x25
#define RBC_CMD_STARTSTOPUNIT 0x1B
#define RBC_CMD_SYNCCACHE 0x35
#define RBC_CMD_VERIFY10 0x2F
#define RBC_CMD_WRITE10 0x2A
/*
// SPC-2 commands
*/
#define SPC_CMD_INQUIRY 0x12
#define SPC_CMD_MODESELECT6 0x15
#define SPC_CMD_MODESENSE6 0x1A
#define SPC_CMD_PERSISTANTRESERVIN 0x5E
#define SPC_CMD_PERSISTANTRESERVOUT 0x5F
#define SPC_CMD_PRVENTALLOWMEDIUMREMOVAL 0x1E
#define SPC_CMD_RELEASE6 0x17
#define SPC_CMD_REQUESTSENSE 0x03
#define SPC_CMD_RESERVE6 0x16
#define SPC_CMD_TESTUNITREADY 0x00
#define SPC_CMD_WRITEBUFFER 0x3B
#define SPC_CMD_READLONG 0x23
/*
// ATAPI Command Descriptor Block
*/
typedef struct _READ_10 {
unsigned char OperationCode;
unsigned char Reserved1;
unsigned char LBA_3;
unsigned char LBA_2;
unsigned char LBA_1;
unsigned char LBA_0;
unsigned char Reserved2;
unsigned char XferLen_1;
unsigned char XferLen_0;
unsigned char Reserved3[3];
} READ_10, * PREAD_10;
typedef struct _WRITE_10 {
unsigned char OperationCode;
unsigned char Reserved1;
unsigned char LBA_3;
unsigned char LBA_2;
unsigned char LBA_1;
unsigned char LBA_0;
unsigned char Reserved2;
unsigned char XferLen_1;
unsigned char XferLen_0;
unsigned char Reserved3[3];
} WRITE_10, *PWRITE_10;
typedef struct _MODE_SENSE_10 {
unsigned char OperationCode;
unsigned char Reserved1;
unsigned PageCode : 6;
unsigned Pc : 2;
unsigned char Reserved2[4];
unsigned char ParameterListLengthMsb;
unsigned char ParameterListLengthLsb;
unsigned char Reserved3[3];
} MODE_SENSE_10, *PMODE_SENSE_10;
typedef struct _MODE_SELECT_10 {
unsigned char OperationCode;
unsigned Reserved1 : 4;
unsigned PFBit : 1;
unsigned Reserved2 : 3;
unsigned char Reserved3[5];
unsigned char ParameterListLengthMsb;
unsigned char ParameterListLengthLsb;
unsigned char Reserved4[3];
} MODE_SELECT_10, *PMODE_SELECT_10;
typedef struct _GENERIC_CDB {
unsigned char OperationCode;
unsigned char Reserved[15];
} GENERIC_CDB,*PGENERIC_CDB;
typedef struct _GENERIC_RBC {
unsigned char OperationCode;
unsigned char Reserved[8];
unsigned char Control;
} GENERIC_RBC,*PGENERIC_RBC;
typedef struct _FORMAT_RBC {
unsigned char OperationCode; /* 04H */
unsigned char VendorSpecific;
unsigned Increment : 1;
unsigned PercentorTime : 1;
unsigned Progress : 1;
unsigned Immediate : 1;
unsigned VendorSpecific1 : 4;
unsigned char Reserved2[2];
unsigned char Control;
} FORMAT_RBC, *PFORMAT_RBC;
/* Read Command */
typedef struct _READ_RBC {
unsigned char OperationCode; /* 10H */
unsigned char VendorSpecific;
union{
struct
{
unsigned char LBA_3;
unsigned char LBA_2;
unsigned char LBA_1;
unsigned char LBA_0;
} LBA_W8 ;
unsigned int LBA_W32;
}LBA;
unsigned char Reserved;
unsigned short XferLength;
unsigned char Control;
//INT8 Reserved1[3];
} READ_RBC, *PREAD_RBC;
/* Read Capacity Data - returned in Big Endian format*/
typedef struct _READ_CAPACITY_DATA {
unsigned char LBA_3;
unsigned char LBA_2;
unsigned char LBA_1;
unsigned char LBA_0;
unsigned char BlockLen_3;
unsigned char BlockLen_2;
unsigned char BlockLen_1;
unsigned char BlockLen_0;
} READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;
typedef struct _READ_LONG_CMD{
unsigned char OperationCode;
unsigned LogicalUnitNum :3;
unsigned RES_1 :5;
unsigned char RES_2;
unsigned char RES_3;
unsigned char RES_4;
unsigned char RES_5;
unsigned char RES_6;
unsigned short AllocationLen;
unsigned char RES_7;
unsigned char RES_8;
unsigned char RES_9;
}READ_LONG_CMD, *PREAD_LONG_CMD;
typedef struct _READ_LONG {
unsigned char RES_1;
unsigned char RES_2;
unsigned char RES_3;
unsigned char CAP_LIST_LEN;
unsigned char LBA_3;
unsigned char LBA_2;
unsigned char LBA_1;
unsigned char LBA_0;
unsigned char Descripter;
unsigned char BlockLen_2;
unsigned char BlockLen_1;
unsigned char BlockLen_0;
} READ_LONG, *PREAD_LONG;
/* Read Capacity command */
typedef struct _READ_CAPACITY_RBC {
unsigned char OperationCode; /* 10H */
union {
FLEXI_INT32 l0[2];
unsigned int l[2];
READ_CAPACITY_DATA CapData; /* Reserved area, here is used as temp*/
} tmpVar;
unsigned char Control;
} READ_CAPACITY_RBC, *PREAD_CAPACITY_RBC;
typedef struct _READ_CAPACITY_RSP {
unsigned int LastLBA;
unsigned int BlockSize;
} READ_CAPACITY_RSP, *PREAD_CAPACITY_RSP;
/*
// START_STOP_UNIT
*/
typedef struct _START_STOP_RBC {
unsigned char OperationCode; /*1BH*/
unsigned Immediate: 1;
unsigned Reserved1 : 7;
unsigned char Reserved2[2];
union _START_STOP_FLAGS
{
struct
{
unsigned Start : 1;
unsigned LoadEject : 1;
unsigned Reserved3 : 2;
unsigned PowerConditions: 4;
} bits0;
struct
{
unsigned MediumState : 2;
unsigned Reserved3 : 2;
unsigned PowerConditions: 4;
} bits1;
} Flags;
unsigned char Control;
} START_STOP_RBC, *PSTART_STOP_RBC;
/*
// Synchronize Cache
*/
typedef struct _SYNCHRONIZE_CACHE_RBC {
unsigned char OperationCode; /* 0x35 */
unsigned char Reserved[8];
unsigned char Control;
} SYNCHRONIZE_CACHE_RBC, *PSYNCHRONIZE_CACHE_RBC;
/* Write Command */
typedef struct _WRITE_RBC {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -