1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
|
// **** Auto-generated using genfx2hrd.sh from CY3684 EZ USB FX2LP Development Kit headers
//-----------------------------------------------------------------------------
// File: FX2.h
// Contents: EZ-USB FX2/FX2LP/FX1 constants, macros, datatypes, globals, and library
// function prototypes.
//
// $Archive: /USB/Target/Inc/Fx2.h $
// $Date: 3/23/05 2:30p $
// $Revision: 16 $
//
// Copyright (c) 2005 Cypress Semiconductor, All rights reserved
//-----------------------------------------------------------------------------
#ifndef FX2_H //Header sentry
#define FX2_H
#define INTERNAL_DSCR_ADDR 0x0080 // Relocate Descriptors to 0x80
#define bmSTRETCH 0x07
#define FW_STRETCH_VALUE 0x0 // Set stretch to 0 in frameworks
//-----------------------------------------------------------------------------
// Constants
//-----------------------------------------------------------------------------
#define TRUE 1
#define FALSE 0
#define bmBIT0 0x01
#define bmBIT1 0x02
#define bmBIT2 0x04
#define bmBIT3 0x08
#define bmBIT4 0x10
#define bmBIT5 0x20
#define bmBIT6 0x40
#define bmBIT7 0x80
#define DEVICE_DSCR 0x01 // Descriptor type: Device
#define CONFIG_DSCR 0x02 // Descriptor type: Configuration
#define STRING_DSCR 0x03 // Descriptor type: String
#define INTRFC_DSCR 0x04 // Descriptor type: Interface
#define ENDPNT_DSCR 0x05 // Descriptor type: End Point
#define DEVQUAL_DSCR 0x06 // Descriptor type: Device Qualifier
#define OTHERSPEED_DSCR 0x07 // Descriptor type: Other Speed Configuration
#define bmBUSPWR bmBIT7 // Config. attribute: Bus powered
#define bmSELFPWR bmBIT6 // Config. attribute: Self powered
#define bmRWU bmBIT5 // Config. attribute: Remote Wakeup
#define bmEPOUT bmBIT7
#define bmEPIN 0x00
#define EP_CONTROL 0x00 // End Point type: Control
#define EP_ISO 0x01 // End Point type: Isochronous
#define EP_BULK 0x02 // End Point type: Bulk
#define EP_INT 0x03 // End Point type: Interrupt
#define SUD_SIZE 8 // Setup data packet size
//////////////////////////////////////////////////////////////////////////////
//Added for HID
#define SETUP_MASK 0x60 //Used to mask off request type
#define SETUP_STANDARD_REQUEST 0 //Standard Request
#define SETUP_CLASS_REQUEST 0x20 //Class Request
#define SETUP_VENDOR_REQUEST 0x40 //Vendor Request
#define SETUP_RESERVED_REQUEST 0x60 //Reserved or illegal request
//////////////////////////////////////////////////////////////////////////////
#define SC_GET_STATUS 0x00 // Setup command: Get Status
#define SC_CLEAR_FEATURE 0x01 // Setup command: Clear Feature
#define SC_RESERVED 0x02 // Setup command: Reserved
#define SC_SET_FEATURE 0x03 // Setup command: Set Feature
#define SC_SET_ADDRESS 0x05 // Setup command: Set Address
#define SC_GET_DESCRIPTOR 0x06 // Setup command: Get Descriptor
#define SC_SET_DESCRIPTOR 0x07 // Setup command: Set Descriptor
#define SC_GET_CONFIGURATION 0x08 // Setup command: Get Configuration
#define SC_SET_CONFIGURATION 0x09 // Setup command: Set Configuration
#define SC_GET_INTERFACE 0x0a // Setup command: Get Interface
#define SC_SET_INTERFACE 0x0b // Setup command: Set Interface
#define SC_SYNC_FRAME 0x0c // Setup command: Sync Frame
#define SC_ANCHOR_LOAD 0xa0 // Setup command: Anchor load
#define GD_DEVICE 0x01 // Get descriptor: Device
#define GD_CONFIGURATION 0x02 // Get descriptor: Configuration
#define GD_STRING 0x03 // Get descriptor: String
#define GD_INTERFACE 0x04 // Get descriptor: Interface
#define GD_ENDPOINT 0x05 // Get descriptor: Endpoint
#define GD_DEVICE_QUALIFIER 0x06 // Get descriptor: Device Qualifier
#define GD_OTHER_SPEED_CONFIGURATION 0x07 // Get descriptor: Other Configuration
#define GD_INTERFACE_POWER 0x08 // Get descriptor: Interface Power
#define GD_HID 0x21 // Get descriptor: HID
#define GD_REPORT 0x22 // Get descriptor: Report
#define GS_DEVICE 0x80 // Get Status: Device
#define GS_INTERFACE 0x81 // Get Status: Interface
#define GS_ENDPOINT 0x82 // Get Status: End Point
#define FT_DEVICE 0x00 // Feature: Device
#define FT_ENDPOINT 0x02 // Feature: End Point
#define I2C_IDLE 0 // I2C Status: Idle mode
#define I2C_SENDING 1 // I2C Status: I2C is sending data
#define I2C_RECEIVING 2 // I2C Status: I2C is receiving data
#define I2C_PRIME 3 // I2C Status: I2C is receiving the first byte of a string
#define I2C_STOP 5 // I2C Status: I2C waiting for stop completion
#define I2C_BERROR 6 // I2C Status: I2C error; Bit Error
#define I2C_NACK 7 // I2C Status: I2C error; No Acknowledge
#define I2C_OK 8 // I2C positive return code
#define I2C_WAITSTOP 9 // I2C Status: Wait for STOP complete
/*-----------------------------------------------------------------------------
Macros
-----------------------------------------------------------------------------*/
#define MSB(word) (BYTE)(((WORD)(word) >> 8) & 0xff)
#define LSB(word) (BYTE)((WORD)(word) & 0xff)
#define SWAP_ENDIAN(word) ((BYTE*)&word)[0] ^= ((BYTE*)&word)[1];\
((BYTE*)&word)[1] ^= ((BYTE*)&word)[0];\
((BYTE*)&word)[0] ^= ((BYTE*)&word)[1]
#define EZUSB_IRQ_ENABLE() EUSB = 1
#define EZUSB_IRQ_DISABLE() EUSB = 0
#define EZUSB_IRQ_CLEAR() EXIF &= ~0x10 // IE2_
#define EZUSB_STALL_EP0() EP0CS |= bmEPSTALL
// WRITEDELAY() has been replaced by SYNCDELAY; macro in fx2sdly.h
// ...it is here for backwards compatibility...
// the WRITEDELAY macro compiles to the time equivalent of 3 NOPs.
// It is used in the frameworks to allow for write recovery time
// requirements of certain registers. This is only necessary for
// EZ-USB FX parts. See the EZ-USB FX TRM for
// more information on write recovery time issues.
#define WRITEDELAY() {char writedelaydummy = 0;}
// if this firmware will never run on an EZ-USB FX part replace
// with:
// #define WRITEDELAY()
// macro to reset and endpoint data toggle
#define EZUSB_RESET_DATA_TOGGLE(ep) TOGCTL = (((ep & 0x80) >> 3) + (ep & 0x0F));\
TOGCTL |= bmRESETTOGGLE
#define EZUSB_ENABLE_RSMIRQ() (EICON |= 0x20) // Enable Resume Interrupt (EPFI_)
#define EZUSB_DISABLE_RSMIRQ() (EICON &= ~0x20) // Disable Resume Interrupt (EPFI_)
#define EZUSB_CLEAR_RSMIRQ() (EICON &= ~0x10) // Clear Resume Interrupt Flag (PFI_)
#define EZUSB_GETI2CSTATUS() (I2CPckt.status)
#define EZUSB_CLEARI2CSTATUS() if((I2CPckt.status == I2C_BERROR) || (I2CPckt.status == I2C_NACK))\
I2CPckt.status = I2C_IDLE;
#define EZUSB_ENABLEBP() (BREAKPT |= bmBPEN)
#define EZUSB_DISABLEBP() (BREAKPT &= ~bmBPEN)
#define EZUSB_CLEARBP() (BREAKPT |= bmBREAK)
#define EZUSB_BP(addr) BPADDRH = (BYTE)(((WORD)addr >> 8) & 0xff);\
BPADDRL = (BYTE)addr
#define EZUSB_EXTWAKEUP() (((WAKEUPCS & bmWU2) && (WAKEUPCS & bmWU2EN)) ||\
((WAKEUPCS & bmWU) && (WAKEUPCS & bmWUEN)))
#define EZUSB_HIGHSPEED() (USBCS & bmHSM)
//-----------------------------------------------------------------------------
// Datatypes
//-----------------------------------------------------------------------------
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef bit BOOL;
#define INT0_VECT 0
#define TMR0_VECT 1
#define INT1_VECT 2
#define TMR1_VECT 3
#define COM0_VECT 4
#define TMR2_VECT 5
#define WKUP_VECT 6
#define COM1_VECT 7
#define USB_VECT 8
#define I2C_VECT 9
#define INT4_VECT 10
#define INT5_VECT 11
#define INT6_VECT 12
typedef struct
{
BYTE length;
BYTE type;
}DSCR;
typedef struct // Device Descriptor
{
BYTE length; // Descriptor length ( = sizeof(DEVICEDSCR) )
BYTE type; // Decriptor type (Device = 1)
BYTE spec_ver_minor; // Specification Version (BCD) minor
BYTE spec_ver_major; // Specification Version (BCD) major
BYTE dev_class; // Device class
BYTE sub_class; // Device sub-class
BYTE protocol; // Device sub-sub-class
BYTE max_packet; // Maximum packet size
WORD vendor_id; // Vendor ID
WORD product_id; // Product ID
WORD version_id; // Product version ID
BYTE mfg_str; // Manufacturer string index
BYTE prod_str; // Product string index
BYTE serialnum_str; // Serial number string index
BYTE configs; // Number of configurations
}DEVICEDSCR;
typedef struct // Device Qualifier Descriptor
{
BYTE length; // Descriptor length ( = sizeof(DEVICEQUALDSCR) )
BYTE type; // Decriptor type (Device Qualifier = 6)
BYTE spec_ver_minor; // Specification Version (BCD) minor
BYTE spec_ver_major; // Specification Version (BCD) major
BYTE dev_class; // Device class
BYTE sub_class; // Device sub-class
BYTE protocol; // Device sub-sub-class
BYTE max_packet; // Maximum packet size
BYTE configs; // Number of configurations
BYTE reserved0;
}DEVICEQUALDSCR;
typedef struct
{
BYTE length; // Configuration length ( = sizeof(CONFIGDSCR) )
BYTE type; // Descriptor type (Configuration = 2)
WORD config_len; // Configuration + End Points length
BYTE interfaces; // Number of interfaces
BYTE index; // Configuration number
BYTE config_str; // Configuration string
BYTE attrib; // Attributes (b7 - buspwr, b6 - selfpwr, b5 - rwu
BYTE power; // Power requirement (div 2 ma)
}CONFIGDSCR;
typedef struct
{
BYTE length; // Interface descriptor length ( - sizeof(INTRFCDSCR) )
BYTE type; // Descriptor type (Interface = 4)
BYTE index; // Zero-based index of this interface
BYTE alt_setting; // Alternate setting
BYTE ep_cnt; // Number of end points
BYTE class; // Interface class
BYTE sub_class; // Interface sub class
BYTE protocol; // Interface sub sub class
BYTE interface_str; // Interface descriptor string index
}INTRFCDSCR;
typedef struct
{
BYTE length; // End point descriptor length ( = sizeof(ENDPNTDSCR) )
BYTE type; // Descriptor type (End point = 5)
BYTE addr; // End point address
BYTE ep_type; // End point type
BYTE mp_L; // Maximum packet size
BYTE mp_H;
BYTE interval; // Interrupt polling interval
}ENDPNTDSCR;
typedef struct
{
BYTE length; // String descriptor length
BYTE type; // Descriptor type
}STRINGDSCR;
typedef struct
{
BYTE cntrl; // End point control register
BYTE bytes; // End point buffer byte count
}EPIOC;
typedef struct
{
BYTE length;
BYTE *dat;
BYTE count;
BYTE status;
}I2CPCKT;
//-----------------------------------------------------------------------------
// Globals
//-----------------------------------------------------------------------------
extern code BYTE USB_AutoVector;
extern WORD pDeviceDscr;
extern WORD pDeviceQualDscr;
extern WORD pHighSpeedConfigDscr;
extern WORD pFullSpeedConfigDscr;
extern WORD pConfigDscr;
extern WORD pOtherConfigDscr;
extern WORD pStringDscr;
extern code DEVICEDSCR DeviceDscr;
extern code DEVICEQUALDSCR DeviceQualDscr;
extern code CONFIGDSCR HighSpeedConfigDscr;
extern code CONFIGDSCR FullSpeedConfigDscr;
extern code STRINGDSCR StringDscr;
extern code DSCR UserDscr;
extern I2CPCKT I2CPckt;
//-----------------------------------------------------------------------------
// Function Prototypes
//-----------------------------------------------------------------------------
extern void EZUSB_Renum(void);
extern void EZUSB_Discon(BOOL renum);
extern void EZUSB_Susp(void);
extern void EZUSB_Resume(void);
extern void EZUSB_Delay1ms(void);
extern void EZUSB_Delay(WORD ms);
extern CONFIGDSCR xdata* EZUSB_GetConfigDscr(BYTE ConfigIdx);
extern INTRFCDSCR xdata* EZUSB_GetIntrfcDscr(BYTE ConfigIdx, BYTE IntrfcIdx, BYTE AltSetting);
extern STRINGDSCR xdata* EZUSB_GetStringDscr(BYTE StrIdx);
extern DSCR xdata* EZUSB_GetDscr(BYTE index, DSCR* dscr, BYTE type);
extern void EZUSB_InitI2C(void);
extern BOOL EZUSB_WriteI2C_(BYTE addr, BYTE length, BYTE xdata *dat);
extern BOOL EZUSB_ReadI2C_(BYTE addr, BYTE length, BYTE xdata *dat);
extern BOOL EZUSB_WriteI2C(BYTE addr, BYTE length, BYTE xdata *dat);
extern BOOL EZUSB_ReadI2C(BYTE addr, BYTE length, BYTE xdata *dat);
extern void EZUSB_WaitForEEPROMWrite(BYTE addr);
extern void modify_endpoint_stall(BYTE epid, BYTE stall);
#endif // FX2_H
|