EZ-USB FX TechRefManual
EZ-USB FX TechRefManual
Technical Reference
Manual
Table of Contents
Chapter 1. Introducing EZ-USB FX - - - - - - - - - - - - - - - - - - - - 1-1
1.1
1.2
1.3
1.4
1.5
(Table of Contents)
Chapter 2. EZ-USB FX CPU - - - - - - - - - - - - - - - - - - - - - - - - 2-1
2.1 Introduction................................................................................................... 2-1
2.2 8051 Enhancements ..................................................................................... 2-1
2.3 EZ-USB FX Enhancements .......................................................................... 2-2
2.4 EZ-USB FX Register Interface ..................................................................... 2-2
2.5 EZ-USB FX Internal RAM.............................................................................. 2-3
2.6 I/O Ports......................................................................................................... 2-3
2.7 Interrupts ....................................................................................................... 2-4
2.8 Power Control ............................................................................................... 2-5
2.9 SFRs............................................................................................................... 2-5
2.10 Internal Bus ................................................................................................. 2-7
2.11 Reset ............................................................................................................ 2-7
Introduction................................................................................................... 4-1
I/O Ports......................................................................................................... 4-2
Input/Output Port Registers......................................................................... 4-4
Port Configuration Tables............................................................................ 4-8
I2C-Compatible Controller ......................................................................... 4-14
8051 I2C-Compatible Controller ................................................................ 4-14
Control Bits ................................................................................................. 4-16
4.7.1 START .............................................................................................. 4-16
4.7.2 STOP ................................................................................................ 4-16
4.7.3 LASTRD ........................................................................................... 4-17
4.8 Status Bits ................................................................................................... 4-17
4.8.1 DONE ............................................................................................... 4-17
4.8.2 ACK .................................................................................................. 4-17
4.8.3 BERR................................................................................................ 4-17
4.8.4 ID1, ID0 ............................................................................................ 4-18
ii
Table of Contents
(Table of Contents)
4.9 Sending I2C-Compatible Data.................................................................... 4-18
4.10 Receiving I2C-Compatible Data ............................................................... 4-18
4.11 I2C-Compatible Boot Loader.................................................................... 4-19
4.12 SFR Addressing ........................................................................................ 4-21
4.13 SFR Control of PORTs A-E....................................................................... 4-25
Table of Contents
iii
(Table of Contents)
6.15 Enumeration Note..................................................................................... 6-19
6.16 The Autopointer ........................................................................................ 6-19
iv
Table of Contents
(Table of Contents)
7.2.17 B-OUT FIFO Pin Programmable Flag ............................................. 7-34
7.2.18 Output FIFOs A/B Toggle CTL and Flags ....................................... 7-35
7.2.19 Output FIFOs A/B Interrupt Enables ............................................... 7-37
7.2.20 Output FIFOs A/B Interrupt Requests ............................................. 7-39
7.2.21 FIFO A/B Setup............................................................................... 7-40
7.2.22 FIFO A/B Control Signal Polarities.................................................. 7-43
7.2.23 FIFO Flag Reset.............................................................................. 7-44
7.3 FIFO Timing ................................................................................................. 7-45
Table of Contents
(Table of Contents)
8.5.7 FIFO Operation Trigger Registers .................................................... 8-28
8.5.8 Transaction Count Registers ............................................................ 8-29
8.5.9 READY Register ............................................................................... 8-30
8.5.10 CTLOUTCFG Register ................................................................... 8-31
8.5.11 IDLE State Registers ...................................................................... 8-32
8.5.12 Address Register GPIFADRL ......................................................... 8-34
8.5.13 GPIF_ABORT Register .................................................................. 8-35
vi
Table of Contents
(Table of Contents)
10.5 Isochronous Transfer Speed ................................................................... 10-7
10.6 Other Isochronous Registers................................................................... 10-9
10.6.1 Disable ISO ..................................................................................... 10-9
10.6.2 Zero Byte Count Bits ..................................................................... 10-10
10.7 ISO IN Response with No Data .............................................................. 10-10
10.8 Restrictions Near SOF ............................................................................ 10-11
Table of Contents
vii
(Table of Contents)
12.14 I2C-Compatible STOP Complete Interrupt ......................................... 12-13
12.15 Slave FIFO Interrupt (INT4) .................................................................. 12-15
Introduction............................................................................................... 14-1
Suspend..................................................................................................... 14-2
Resume...................................................................................................... 14-3
Remote Wakeup........................................................................................ 14-5
viii
Table of Contents
(Table of Contents)
15.2.12 FIFO A Write Data......................................................................... 15-8
15.2.13 A-OUT FIFO Byte Count ............................................................... 15-8
15.2.14 A-OUT FIFO Programmable Flag ................................................. 15-9
15.2.15 A-OUT FIFO Pin Programmable Flag ........................................... 15-9
15.2.16 B-OUT FIFO Write Data.............................................................. 15-10
15.2.17 B-OUT FIFO Byte Count ............................................................. 15-10
15.2.18 B-OUT FIFO Programmable Flag ............................................... 15-11
15.2.19 B-OUT FIFO Pin Programmable Flag ......................................... 15-11
15.2.20 Output FIFOs A/B Toggle CTL and Flags ................................... 15-12
15.2.21 Output FIFOs A/B Interrupt Enables ........................................... 15-12
15.2.22 Output FIFOs A/B Interrupt Requests ......................................... 15-12
15.2.23 FIFO A/B Setup........................................................................... 15-13
15.2.24 FIFO A/B Control Signal Polarities.............................................. 15-13
15.2.25 FIFO Flag Reset.......................................................................... 15-14
15.3 Waveform Selector.................................................................................. 15-14
15.4 GPIF Done, GPIF IDLE Drive Mode........................................................ 15-15
15.5 Inactive Bus, CTL States ........................................................................ 15-15
15.6 GPIF Address LSB .................................................................................. 15-16
15.7 FIFO A IN Transaction Count ................................................................. 15-16
15.8 FIFO A OUT Transaction Count ............................................................. 15-17
15.9 FIFO A Transaction Trigger.................................................................... 15-17
15.10 FIFO B IN Transaction Count ............................................................... 15-18
15.11 FIFO B OUT Transaction Count ........................................................... 15-18
15.12 FIFO B Transaction Trigger.................................................................. 15-19
15.13 GPIF Data H (16-bit mode only) ........................................................... 15-19
15.14 Read or Write GPIF Data L and Trigger Read Transaction ............... 15-19
15.15 Read GPIF Data L, No Read Transaction Trigger............................... 15-20
15.16 Internal READY, Sync/Async, READY Pin States .............................. 15-20
15.17 Abort GPIF Cycles................................................................................. 15-20
15.18 General Purpose I/F Interrupt Enable.................................................. 15-21
15.19 Generic Interrupt Request.................................................................... 15-21
15.20 Input/Output Port Registers D and E................................................... 15-22
15.20.1 Port D Outputs ............................................................................ 15-22
15.20.2 Input Port D Pins ......................................................................... 15-22
15.20.3 Port D Output Enable .................................................................. 15-22
15.20.4 Port E Outputs............................................................................. 15-23
Table of Contents
ix
(Table of Contents)
15.20.5 Input Port E Pins......................................................................... 15-23
15.20.6 Port E Output Enable.................................................................. 15-23
15.21 PORTSETUP.......................................................................................... 15-24
15.22 Interface Configuration ........................................................................ 15-24
15.23 PORTA and PORTC Alternate Configurations ................................... 15-27
15.23.1 Port A Alternate Configuration #2 ............................................... 15-27
15.23.2 Port C Alternate Configuration #2............................................... 15-28
15.24 DMA Registers ...................................................................................... 15-31
15.24.1 Source, Destination, Transfer Length Address Registers........... 15-31
15.24.2 DMA Start and Status Register .................................................. 15-32
15.24.3 DMA Synchronous Burst Enables Register ................................ 15-33
15.24.4 Select 8051 A/D busses as External FIFO ................................. 15-33
15.25 Slave FIFO Interrupt (INT4) .................................................................. 15-34
15.25.1 Interrupt 4 Autovector ................................................................. 15-34
15.25.2 Interrupt 4 Autovector ................................................................. 15-34
15.26 Waveform Descriptors ......................................................................... 15-35
15.27 Bulk Data Buffers.................................................................................. 15-35
15.28 Isochronous Data FIFOs ...................................................................... 15-37
15.29 Isochronous Byte Counts .................................................................... 15-39
15.30 CPU Registers....................................................................................... 15-41
15.31 Port Configuration ................................................................................ 15-42
15.32 Input/Output Port Registers A - C ....................................................... 15-44
15.32.1 Outputs ....................................................................................... 15-44
15.32.2 Pins............................................................................................. 15-45
15.32.3 Output Enables ........................................................................... 15-46
15.33 Isochronous Control/Status Registers ............................................... 15-47
15.34 I2C-Compatible Registers..................................................................... 15-48
15.35 Interrupts ............................................................................................... 15-51
15.36 Endpoint 0 Control and Status Registers........................................... 15-58
15.37 Endpoint 1-7 Control and Status Registers ....................................... 15-60
15.38 Global USB Registers........................................................................... 15-65
15.39 Fast Transfers ....................................................................................... 15-71
15.39.1 AUTOPTRH/L ............................................................................. 15-73
15.39.2 AUTODATA ................................................................................ 15-73
15.40 SETUP Data ........................................................................................... 15-74
Table of Contents
(Table of Contents)
15.41 Isochronous FIFO Sizes ....................................................................... 15-74
Table of Contents
xi
(Table of Contents)
18.3
18.4
18.5
18.6
xii
Table of Contents
List of Figures
Figure 1-1.
Figure 1-2.
Figure 1-3.
Figure 1-4.
Figure 1-5.
Figure 1-6.
Figure 1-7.
Figure 1-8.
Figure 2-1.
Figure 3-1.
Figure 3-2.
Figure 3-3.
Unused Bulk Endpoint Buffers (Shaded) Used as Data Memory ...................... 3-3
Figure 3-4.
Figure 3-5.
Figure 4-1.
Figure 4-2.
Figure 4-3.
Figure 4-4.
Figure 4-5.
Figure 4-6.
Figure 4-7.
Figure 4-8.
Figure 4-9.
Figure 4-10.
Figure 4-11.
Figure 4-12.
Figure 4-13.
Figure 4-14.
Figure 5-1.
Figure 5-2.
Figure 5-3.
xiii
(List of Figures)
Figure 5-4.
Figure 6-1.
Figure 6-2.
Figure 6-3.
Figure 6-4.
Figure 6-5.
Figure 6-6.
Figure 6-7.
Figure 6-8.
Figure 6-9.
Figure 6-10.
Background Program Transfers Endpoint 6-OUT Data to Endpoint 6-IN ....... 6-17
Figure 6-11.
Figure 6-12.
Figure 6-13.
Figure 7-1.
The Four 64-Byte Slave FIFOs Configured for 16-Bit Mode ............................. 7-1
Figure 7-2.
Figure 7-3.
Figure 7-4.
Figure 7-5.
Figure 7-6.
Figure 7-7.
Figure 7-8.
Figure 7-9.
Figure 7-10.
Figure 7-11.
Figure 7-12.
Figure 7-13.
Figure 7-14.
Figure 7-15.
Figure 7-16.
Figure 7-17.
Figure 7-18.
Figure 7-19.
Figure 7-20.
8051 FIFO Toggle Mode vs. Normal Mode Diagram ...................................... 7-18
Figure 7-21.
xiv
List of Figures
(List of Figures)
Figure 7-22.
Figure 7-23.
Figure 7-24.
Figure 7-25.
Figure 7-26.
Figure 7-27.
Figure 7-28.
Figure 7-29.
Figure 7-30.
Figure 7-31.
Figure 7-32.
Figure 7-33.
Figure 7-34.
Figure 7-35.
Figure 7-36.
Figure 7-37.
Figure 7-38.
Figure 7-39.
Figure 7-40.
8051 FIFO Toggle Mode vs. Normal Mode Diagram ...................................... 7-35
Figure 7-41.
Figure 7-42.
Figure 7-43.
Figure 7-44.
Figure 7-45.
Figure 7-46.
Figure 7-47.
Figure 7-48.
Figure 7-49.
Figure 7-50.
Figure 7-51.
Figure 8-1.
Figure 8-2.
Figure 8-3.
Figure 8-4.
One Decision Point: Wait States Inserted Until RDY0 Goes Low ................... 8-13
List of Figures
xv
(List of Figures)
Figure 8-5.
One Decision Point: No Wait States Inserted:
RDY0 is Already Low at Decision Point l1 ....................................................................... 8-13
Figure 8-6.
Figure 8-7.
Figure 8-8.
Figure 9-1.
Figure 9-2.
Figure 9-3.
Figure 9-4.
Figure 9-5.
Using Setup Data Pointer (SUDPTR) for Get_Descriptor Requests ............... 9-13
Figure 10-1.
Figure 10-2.
Figure 10-3.
Figure 10-4.
Figure 10-5.
Figure 10-6.
Figure 10-7.
Figure 10-8.
Figure 10-9.
Figure 11-1.
Figure 11-2.
Figure 11-3.
Figure 11-4.
Figure 11-5.
DMA Transfer Length (0=256 Bytes, 1=1 Byte, ... 255=255 Bytes) ................ 11-3
Figure 11-6.
Figure 11-7.
Figure 11-8.
Figure 11-9.
Figure 11-10. Effect of the RB Bit on DMA Mode 1 Reads ................................................... 11-8
Figure 11-11. Effect of the WB Bit on DMA Mode 0 Writes ................................................... 11-9
Figure 11-12. DMAEXTFIFO Register. Data is Dont Care. ................................................ 11-9
Figure 11-13. DMA Write Strobe Timing: 4 Modes Selected by FASTXFR[4..3] ................ 11-11
Figure 11-14. DMA Read Strobe Timing: 4 Modes Selected by FASTXFR[4..3] ................ 11-12
Figure 12-1.
Figure 12-2.
xvi
List of Figures
(List of Figures)
Figure 12-3.
Figure 12-4.
Figure 12-5.
Figure 12-6.
Figure 12-7.
Figure 12-8.
Figure 12-9.
Figure 14-1.
Figure 14-2.
Figure 14-3.
Figure 14-4.
Figure 14-5.
Figure 15-1.
Figure 15-2.
Figure 15-3.
Figure 15-4.
Figure 15-5.
Figure 15-6.
Figure 15-7.
Figure 15-8.
Figure 15-9.
Figure 15-10. Input FIFOs A/B Toggle CTL and Flags .......................................................... 15-7
Figure 15-11. Input FIFOs A/B Interrupt Enables .................................................................. 15-7
Figure 15-12. Input FIFOs A/B Interrupt Requests ................................................................ 15-7
Figure 15-13. FIFO A Write Data ........................................................................................... 15-8
Figure 15-14. Input FIFOs A/B Interrupt Requests ................................................................ 15-8
Figure 15-15. Input FIFOs A/B Interrupt Requests ................................................................ 15-9
Figure 15-16. A-OUT FIFO Pin Programmable Flag ............................................................. 15-9
Figure 15-17. B-OUT FIFO Write Data ................................................................................ 15-10
List of Figures
xvii
(List of Figures)
Figure 15-18. B-OUT FIFO Byte Count ............................................................................... 15-10
Figure 15-19. B-OUT FIFO Programmable Flag ................................................................. 15-11
Figure 15-20. B-OUTFIFO Pin Programmable Flag ............................................................ 15-11
Figure 15-21. Output FIFOs A/B Toggle CTL and Flags ..................................................... 15-12
Figure 15-22. Output FIFOs A/B Interrupt Enables ............................................................. 15-12
Figure 15-23. Output FIFOs A/B Interrupt Requests ........................................................... 15-12
Figure 15-24. FIFO A/B Setup ............................................................................................. 15-13
Figure 15-25. FIFO A/B Control Signal Polarities ................................................................ 15-13
Figure 15-26. FIFO Flag Reset ............................................................................................ 15-14
Figure 15-27. Waveform Selector ........................................................................................ 15-14
Figure 15-28. GPIF Done, GPIF IDLE Drive Mode ............................................................. 15-15
Figure 15-29. Inactive Bus, CTL States ............................................................................... 15-15
Figure 15-30. CTLOUT Pin Drive ........................................................................................ 15-15
Figure 15-31. GPIF Address Low ........................................................................................ 15-16
Figure 15-32. FIFO A IN Transaction Count ........................................................................ 15-16
Figure 15-33. FIFO A OUT Transaction Count .................................................................... 15-17
Figure 15-34. FIFO A Transaction Trigger .......................................................................... 15-17
Figure 15-35. FIFO B IN Transaction Count ........................................................................ 15-18
Figure 15-36. FIFO B OUT Transaction Count .................................................................... 15-18
Figure 15-37. FIFO B Transaction ....................................................................................... 15-19
Figure 15-38. GPIF Data H (16-bit mode only) .................................................................... 15-19
Figure 15-39. Read or Write GPIF Data L and Trigger Read Transaction .......................... 15-19
Figure 15-40. Read GPIF Data L, No Read Transaction Trigger ........................................ 15-20
Figure 15-41. Internal READY, Sync/Async, READY Pin States ........................................ 15-20
Figure 15-42. Abort GPIF Cycles ........................................................................................ 15-20
Figure 15-43. Generic Interrupt Enable ............................................................................... 15-21
Figure 15-44. Generic Interrupt Request ............................................................................. 15-21
Figure 15-45. Port D Outputs .............................................................................................. 15-22
Figure 15-46. Input Port D Pins ........................................................................................... 15-22
Figure 15-47. Port D Output Enable Register ...................................................................... 15-22
Figure 15-48. Port E Outputs ............................................................................................... 15-23
Figure 15-49. Input Port E Pins ........................................................................................... 15-23
Figure 15-50. Port E Output Enable Register ...................................................................... 15-23
Figure 15-51. PORTSETUP ................................................................................................ 15-24
Figure 15-52. Interface Configuration .................................................................................. 15-24
xviii
List of Figures
(List of Figures)
Figure 15-53. Port A Alternate Configuration #2 ................................................................. 15-27
Figure 15-54. Port C Alternate Configuration #2 ................................................................. 15-28
Figure 15-55. Upper Byte of the DMA Source Address ....................................................... 15-31
Figure 15-56. Lower Byte of the DMA Source Address ....................................................... 15-31
Figure 15-57. Upper Byte of the DMA Destination Address ................................................ 15-31
Figure 15-58. Lower Byte of the DMA Destination Address ................................................ 15-32
Figure 15-59. DMA Transfer Length (0=256 Bytes, 1=1 Byte, ... 255=255 Bytes) .............. 15-32
Figure 15-60. DMA Start and Status Register ..................................................................... 15-32
Figure 15-61. Synchronous Burst Enables .......................................................................... 15-33
Figure 15-62. Dummy Register ........................................................................................... 15-33
Figure 15-63. Interrupt 4 Autovector .................................................................................... 15-34
Figure 15-64. Interrupt 4 Setup ........................................................................................... 15-34
Figure 15-65. Waveform Descriptors ................................................................................... 15-35
Figure 15-66. Bulk Data Buffers .......................................................................................... 15-35
Figure 15-67. Isochronous Data FIFOs ............................................................................... 15-37
Figure 15-68. Isochronous Byte Counts .............................................................................. 15-39
Figure 15-69. CPU Control and Status Register ................................................................. 15-41
Figure 15-70. I/O Port Configuration Registers ................................................................... 15-42
Figure 15-71. Port A Outputs ............................................................................................... 15-44
Figure 15-72. Port B Outputs ............................................................................................... 15-44
Figure 15-73. Port C Outputs .............................................................................................. 15-44
Figure 15-74. Port A Pins .................................................................................................... 15-45
Figure 15-75. Port B Pins .................................................................................................... 15-45
Figure 15-76. Port C Pins .................................................................................................... 15-45
Figure 15-77. Port A Output Enable .................................................................................... 15-46
Figure 15-78. Port B Output Enable .................................................................................... 15-46
Figure 15-79. Port C Output Enable .................................................................................... 15-46
Figure 15-80. Isochronous OUT Endpoint Error Register ................................................... 15-47
Figure 15-81. Isochronous Control Register ........................................................................ 15-47
Figure 15-82. Zero Byte Count Register .............................................................................. 15-48
Figure 15-83. I2C-Compatible Transfer Registers ............................................................... 15-48
Figure 15-84. I2C-Compatible Mode Register ..................................................................... 15-50
Figure 15-85. Interrupt Vector Register ............................................................................... 15-51
Figure 15-86. IN/OUT Interrupt Request (IRQ) Registers ................................................... 15-51
Figure 15-87. USB Interrupt Request (IRQ) Registers ........................................................ 15-52
List of Figures
xix
(List of Figures)
Figure 15-88. IN/OUT Interrupt Enable Registers ............................................................... 15-54
Figure 15-89. USB Interrupt Enable Register ...................................................................... 15-54
Figure 15-90. Breakpoint and Autovector Register ............................................................. 15-55
Figure 15-91. IN Bulk NAK Interrupt Request Register ....................................................... 15-56
Figure 15-92. IN Bulk NAK Interrupt Enable Register ......................................................... 15-57
Figure 15-93. IN/OUT Interrupt Enable Registers ............................................................... 15-57
Figure 15-94. Port Configuration Registers ......................................................................... 15-58
Figure 15-95. IN Control and Status Registers .................................................................... 15-61
Figure 15-96. IN Byte Count Registers ................................................................................ 15-62
Figure 15-97. OUT Control and Status Registers ................................................................ 15-63
Figure 15-98. OUT Byte Count Registers ............................................................................ 15-64
Figure 15-99. Setup Data Pointer High/Low Registers ........................................................ 15-65
Figure 15-100. USB Control and Status Registers ................................................................ 15-66
Figure 15-101. Data Toggle Control Register ........................................................................ 15-67
Figure 15-102. USB Frame Count High/Low Registers ......................................................... 15-68
Figure 15-103. Function Address Register ............................................................................ 15-68
Figure 15-104. USB Endpoint Pairing Register ..................................................................... 15-69
Figure 15-105. IN/OUT Valid Bits Register ............................................................................ 15-70
Figure 15-106. Isochronous IN/OUT Endpoint Valid Bits Register ........................................ 15-71
Figure 15-107. Fast Transfer Control Register ...................................................................... 15-71
Figure 15-108. Auto Pointer Registers .................................................................................. 15-73
Figure 15-109. SETUP Data Buffer ....................................................................................... 15-74
Figure 15-110. SETUP Data Buffer ....................................................................................... 15-74
Figure 16-1.
Figure 16-2.
Figure 17-1.
Figure 17-2.
Figure 18-3.
Figure 18-4.
Figure 18-5.
Figure 18-6.
Figure 18-7.
Figure 18-8.
Figure 18-9.
Serial Port Mode 0 Receive Timing - Low Speed Operation ......................... 18-17
Figure 18-10. Serial Port Mode 0 Receive Timing - High Speed Operation ........................ 18-17
xx
List of Figures
(List of Figures)
Figure 18-11. Serial Port Mode 0 Transmit Timing - Low Speed Operation ........................ 18-18
Figure 18-12. Serial Port Mode 0 Transmit Timing - High Speed Operation ....................... 18-18
Figure 18-13. Serial Port 0 Mode 1 Transmit Timing ........................................................... 18-22
Figure 18-14. Serial Port 0 Mode 1 Receive Timing ............................................................ 18-23
Figure 18-15. Serial Port 0 Mode 2 Transmit Timing ........................................................... 18-24
Figure 18-16. Serial Port 0 Mode 2 Receive Timing ............................................................ 18-25
Figure 18-17. Serial Port 0 Mode 3 Transmit Timing ........................................................... 18-26
Figure 18-18. Serial Port 0 Mode 3 Receive Timing ............................................................ 18-26
List of Figures
xxi
xxii
List of Figures
List of Tables
Table 1-1.
Table 1-2.
Table 2-1.
Table 2-2.
Table 4-1.
Table 4-2.
Table 4-3.
Table 4-4.
Table 4-5.
Table 4-6.
Table 4-7.
Table 4-8.
Table 5-1.
Table 5-2.
How the USB Core Handles EP0 Requests When RENUM=0 . . . . . . . . . . . . . 5-3
Table 5-3.
Table 5-4.
Table 5-5.
Table 5-6.
Table 5-7.
Table 5-8.
Table 5-9.
Table 5-10.
Table 5-11.
Table 5-12.
Table 5-13.
Table 5-14.
Table 5-15.
Table 5-16.
Table 5-17.
Table 5-18.
Table 5-19.
xxiii
(List of Tables)
Table 6-1.
Table 6-2.
Table 6-3.
Table 6-4.
Table 6-5.
Table 7-1.
Table 7-2.
Table 7-3.
Table 7-4.
Table 7-5.
Table 7-6.
Table 7-7.
Table 7-8.
Table 7-9.
Table 7-10.
Table 8-1.
Table 8-2.
Table 8-3.
Table 8-4.
Table 8-5.
Table 8-6.
Table 8-7.
Table 8-8.
Table 9-1.
Table 9-2.
Table 9-3.
Table 9-4.
Table 9-5.
Table 9-6.
Table 9-7.
Table 9-8.
Table 9-9.
Table 9-10.
Table 9-11.
Table 9-12.
xxiv
List of Tables
(List of Tables)
Table 9-13.
Table 9-14.
Table 9-15.
Table 9-16.
Table 9-17.
Table 9-18.
Set Interface (Actually, Set Alternate Setting AS for Interface IF) . . . . . . . . . . 9-20
Table 9-19.
Get Interface (Actually, Get Alternate Setting AS for interface IF) . . . . . . . . . 9-21
Table 9-20.
Table 9-21.
Table 9-22.
Table 10-1.
Table 10-2.
Table 11-1.
Table 11-2.
Table 11-3.
Table 11-4.
Table 11-5.
Table 12-1.
Table 12-2.
Table 12-3.
Table 12-4.
Table 12-5.
Table 13-1.
Table 13-2.
Table 13-3.
Table 13-4.
Table 15-1.
Table 15-2.
Table 15-3.
Table 15-4.
Table 15-5.
Table 15-6.
Table 15-7.
Table 15-8.
Table 15-9.
List of Tables
xxv
(List of Tables)
Table 15-10.
Table 15-11.
Table 15-12.
Table 15-13.
Table 15-14.
Table 15-15.
Table 15-16.
Table 15-17.
Table 16-1.
Table 16-2.
Table 17-1.
Table 17-2.
Table 17-3.
Table 17-4.
Table 17-5.
Table 17-6.
Table 18-7.
Table 18-8.
Table 18-9.
Table 18-10.
Table 18-11.
Table 18-12.
Table 18-13.
Table 18-14.
Table 18-15.
Table 18-16.
Timer 1 Reload Values for Common Serial Port Mode 1 Baud Rates . . . . . 18-20
Table 18-17.
Timer 2 Reload Values for Common Serial Port Mode 1 Baud Rates . . . . . 18-21
Table 18-18.
Table 18-19.
Table 18-20.
Table 18-21.
Table 18-22.
Table 18-23.
Table 18-24.
Table 18-25.
Table 18-26.
xxvi
List of Tables
1.1
Introduction
Like a well designed automobile or appliance, a USB peripherals outward simplicity hides internal
complexity. Theres a lot going on under the hood of a USB device, which gives the user a new
level of convenience. For example:
A USB device can be plugged in anytime, even when the PC is turned on.
When the PC detects that a USB device has been plugged in, it automatically interrogates
the device to learn its capabilities and requirements. From this information, the PC automatically loads the devices driver into the operating system. When the device is
unplugged, the operating system automatically logs it off and unloads its driver.
USB devices do not use DIP switches, jumpers, or configuration programs. There is never
an IRQ, DMA, MEMORY, or I/O conflict with a USB device.
USB is defined in the Universal Serial Bus Specification Version 1.1, a 268-page document
describing in elaborate detail all aspects of a USB device. The USB Specification is available at
http://usb.org. The EZ-USB FX Technical Reference Manual describes the EZ-USB FX chip along
with USB topics that provide help in understanding the USB Specification.
The Cypress Semiconductor EZ-USB FX is a compact, integrated circuit that provides a highly
integrated solution for a USB peripheral device. Three key EZ-USB FX features are:
The EZ-USB FX family provides a soft (RAM-based) solution that allows unlimited configuration and upgrades.
The EZ-USB FX family delivers full USB throughput. Designs that use EZ-USB FX are not
limited by number of endpoints, buffer sizes, or transfer speeds.
The EZ-USB FX family does much of the USB housekeeping in the USB core, simplifying
code and accelerating the USB learning curve.
Page 1-1
1.2
+5V
D+
D-
Serial
Interface
Engine
(SIE)
GND
USB
Connector
USB
Transceiver
EZ-USB
bytes
bytes
USB
Interface
Program &
Data
RAM
IO Ports
General
Purpose
Microprocessor
GPIF
Slave FIFOs
16
Page 1-2
+5V
Serial
Interface
Engine
(SIE)
D+
D-
bytes
USB
Interface
Program &
Data
RAM
General
Purpose
Microprocessor
GND
USB
Connector
bytes
USB
Transceiver
EZ-USB
GPIF
IO Ports
Address Bus
External
Memory
Data Bus
Slave FIFOs
16
1.3
The Universal Serial Bus Specification Version 1.1 is available on the Internet at http://usb.org.
Published in January 1998, the USB Specification is the work of a founding committee of seven
industry heavyweights: Compaq, DEC, IBM, Intel, Microsoft, NEC, and Northern Telecom. This
impressive list of developers secures USB as the low-to-medium speed PC connection method of
the future.
A glance at the USB Specification makes it immediately apparent that USB is not nearly as simple
as the customary serial or parallel port. The USB Specification uses new terms like endpoint, isochronous, and enumeration, and finds new uses for old terms like configuration, interface,
and interrupt. Woven into the USB fabric is a software abstraction model that deals with things
such as pipes. The USB Specification also contains detail about the connector types and wire
colors.
Page 1-3
1.4
In this manual, statements like the following appear: When the host sends an IN token..., or The
device responds with an ACK. What do these terms mean? A USB transaction consists of data
packets identified by special codes called Packet IDs or PIDs. A PID signifies what kind of packet
is being transmitted. There are four PID types, shown in Table 1-1.
Table 1-1. USB PIDs
PID Type
A E
O
D N
U
D D
T
R P
C
R
C
5
D
A
T
A
1
PID Name
Token
Data
DATA0, DATA1
Handshake
Special
PRE
Payload
Data
C
R
C
1
6
A
C
K
A E
O
D N
U
D D
T
R P
C
R
C
5
D
A
T
A
0
Payload
Data
C
R
C
1
6
A
C
K
Token Packet
Data Packet
H/S Pkt
Token Packet
Data Packet
H/S Pkt
Page 1-4
SETUP tokens are unique to CONTROL transfers. They preface eight bytes of data from which the
peripheral decodes host Device Requests.
SOF tokens occur once per millisecond, denoting a USB frame.
There are three handshake PIDs: ACK, NAK, and STALL.
NAK means busy, try again. Its tempting to assume that NAK means error, but it
doesnt. A USB device indicates an error by not responding.
STALL means that something unforeseen went wrong (probably as a result of miscommunication or lack of cooperation between the software and firmware writers). A device sends
the STALL handshake to indicate that it doesnt understand a device request, that something went wrong on the peripheral end, or that the host tried to access a resource that
wasnt there. Its like HALT, but better, because USB provides a way to recover from a
stall.
A PRE (Preamble) PID precedes a low-speed (1.5 Mbps) USB transmission. The EZ-USB FX family supports high-speed (12 Mbps) USB transfers only. It ignores PRE packets and the resultant
low-speed transfer.
1.5
Host is Master
This is a fundamental USB concept. There is exactly one master in a USB system: the host computer. USB devices respond to host requests. USB devices cannot send information between
themselves, as they could if USB were a peer-to-peer topology.
However, there is one case where a USB device can initiate signaling without prompting from the
host. After being put into a low-power suspend mode by the host, a device can signal a remote
wakeup. A Remote Wakeup is the only method in which the USB becomes the initiator. Everything
else happens because the host makes device requests, and the device responds to them.
Theres an excellent reason for this host-centric model. The USB architects were keenly mindful of
cost, and the best way to make low-cost peripherals is to put most of the smarts into the host side,
the PC. If USB had been defined as peer-to-peer, every USB device would have required more
intelligence, raising cost.
Here are two important consequences of the host is master concept:
Page 1-5
1.6
USB Direction
Once you accept that the host is the bus master, its easy to remember USB direction: OUT means
from the host to the device, and IN means from the device to the host. EZ-USB FX nomenclature
uses this naming convention. For example, an endpoint that sends data to the host is an IN endpoint. This can be confusing at first, because the 8051 sends data by loading an IN endpoint
buffer. Keep in mind that an 8051out is an IN to the host.
1.7
Frame
The USB host provides a time base to all USB devices by transmitting a SOF (Start Of Frame)
packet every millisecond. The SOF packet includes an incrementing, 11-bit frame count. The 8051
can read this frame count from two EZ-USB FX registers. SOF-time has significance for isochronous endpoints; its the time that the ping-ponging buffers switch places. The USB core provides
the 8051 with an SOF interrupt request for servicing isochronous endpoint data.
1.8
USB defines four transfer types. These match the requirements of different data types delivered
over the bus. ("EZ-USB FX Endpoints" explains how the EZ-USB FX family supports the four
transfer types.)
Page 1-6
A E
I D N
N D D
R P
C
R
C
5
Token Packet
D
A
T
A
1
C
R
C
1
6
Payload
Data
Data Packet
A E
O
D N
U
D D
T
R P
A
C
K
D
A
T
A
0
C
R
C
5
Token Packet
H/S Pkt
Payload
Data
Data Packet
C
R
C
1
6
A
C
K
H/S Pkt
A E
I D N
N D D
R P
C
R
C
5
Token Packet
D
A
T
A
1
Payload
Data
C
R
C
1
6
Data Packet
A
C
K
H/S Pkt
A E
I D N
N D D
R P
C
R
C
5
Token Packet
D
A
T
A
0
Payload
Data
C
R
C
1
6
Data Packet
Page 1-7
1.8.4
Control Transfers
S
A E C
E
D N R
T
D D C
U
R P 5
P
Token Packet
A E
I D N
N D D
R P
C
R
C
5
Token Packet
A E
O
D N
U
D D
T
R P
C
R
C
5
Token Packet
D
A
T
A
0
8 bytes
Setup
Data
Data Packet
D
A
T
A
1
Payload
Data
Data Packet
D C
A R
T C
A 1
1 6
Data Pkt
A
C
K
C
R
C
1
6
A
C
K
SETUP
Stage
H/S Pkt
C
R
C
1
6
A
C
K
DATA
Stage
(optional)
H/S Pkt
STATUS
Stage
H/S Pkt
1.9
Enumeration
Your computer is ON. You plug in a USB device, and the Windows cursor switches to an hourglass, and then back to a cursor. Magically, your device is connected, and its Windows driver is
loaded! Anyone who has installed a sound card into a PC and had to configure countless jumpers,
drivers, and IO/Interrupt/DMA settings knows that a USB connection is miraculous. Weve all
heard about Plug and Play, but USB delivers the real thing.
Page 1-8
How does all this happen automatically? Inside every USB device is a table of descriptors. This
table is the sum total of the devices requirements and capabilities. When you plug into USB, the
host goes through a sign-on sequence:
1. The host sends a Get_Descriptor/Device request to address zero (devices must respond to
address zero when first attached).
2. The device responds to the request by sending ID data back to the host to define itself.
3. The host sends the device a Set_Address request, which gives it a unique address to distinguish it from the other devices connected to the bus.
4. The host sends more Get_Descriptor requests, asking more device information. From this, it
learns everything else about the device, like how many endpoints the device has, its power
requirements, what bus bandwidth it requires, and what driver to load.
This sign-on process is called Enumeration.
A E
O
D N
U
D D
T
R P
C
R
C
5
D
A
T
A
1
Payload
Data
Token Packet
Data Packet
C
R
C
1
6
A
C
K
H/S Pkt
A E
O
D N
U
D D
T
R P
C
R
C
5
D
A
T
A
0
Token Packet
Payload
Data
Data Packet
C
R
C
1
6
A
C
K
H/S Pkt
Payload
Data
Serial
Interface
Engine
(SIE)
D+
D-
USB
Tranceiver
Payload
Data
A
C
K
Page 1-9
Throughout this manual, the SIE and its enhancements are referred to as the USB Core.
48-MHz clock.
DMA for 48 MB/second memory-to-memory transfers. Dual data pointers for improved
XDATA access.
Two UARTs.
Page 1-10
Three counter-timers.
Standard 8051 instruction setif you know the 8051, you know EZ-USB FX.
The enhanced 8051 core uses on-chip RAM as program and data memory, giving EZ-USB FX its
soft feature. Chapter 3. "EZ-USB FX Memory" describes the various memory options.
The 8051 communicates with the SIE using a set of registers, occupying the top of the on-chip
RAM address space. These registers are grouped and described by function in individual chapters
of this reference manual and summarized in register order in Chapter 15. "EZ-USB FX Registers".
The EZ-USB 8051 has two duties. First, it participates in the protocol defined in the Universal
Serial Bus Specification Version 1.1, Chapter 9, USB Device Framework. Thanks to EZ-USB FX
enhancements to the SIE and USB interface, the 8051 firmware associated with USB overhead is
simplified, leaving code space and bandwidth available for the 8051s primary duty, to help implement your device. On the device side, abundant input/output resources are available, including I/O
ports, UARTs, and an I 2C-compatible bus master controller. These resources are described in
Chapter 4. "EZ-USB FX Input/Output"
1.12 ReNumeration
Because the EZ-USB FX chip is soft, it can take on the identities of multiple distinct USB devices.
The first device downloads your 8051 firmware and USB descriptor tables over the USB cable
when the peripheral device is plugged in. Once downloaded, another device comes on as a totally
different USB peripheral as defined by the downloaded information. This patented two-step process, called ReNumeration, happens instantly when the device is plugged in, with no hint that
the initial load step has occurred.
Chapter 5. "EZ-USB FX Enumeration & ReNumeration" describes this feature in detail, along
with other EZ-USB FX boot (startup) modes.
Page 1-11
SETUP
HANDSHAKE
Eight bytes of data in the SETUP portion of the CONTROL transfer have special USB significance,
as defined in the Universal Serial Bus Specification Version 1.1, Chapter 9. A USB device must
respond properly to the requests described in this chapter to pass USB compliance testing
(referred to as the USB Chapter Nine Test).
Endpoint zero is the only CONTROL endpoint in the EZ-USB FX chip. The 8051 responds to
device requests issued by the host over endpoint zero. The USB core is significantly enhanced to
simplify the 8051 code required to service these requests. Chapter 9. "EZ-USB FX Endpoint Zero"
provides a detailed roadmap for writing compliant USB Chapter 9 8051 code.
Page 1-12
1.14 Interrupts
EZ-USB FX adds seven interrupt sources to the standard 8051 interrupt system. Three of the
added interrupts are available on device pins: INT4, INT5#, and INT6. The other four are used
internally: INT2 is used for all USB interrupts, INT3 is used by the I 2C-compatible interface, INT4 is
used by the FIFOs and GPIF, and the remaining interrupt is used for remote wakeup indication.
The USB core automatically supplies jump vectors (Autovectors) for its USB and FIFO interrupts to
save the 8051 from having to test bits to determine the source of the interrupt. Each INT2 and
INT4 interrupt source has its own vector. When an interrupt requires service, the proper ISR (interrupt service routine) is automatically invoked. Chapter 12. "EZ-USB FX Interrupts" describes the
EZ-USB FX interrupt system.
Page 1-13
Power-On-Reset (POR)
8051 reset
USB Disconnect/Re-connect
The functions of the various EZ-USB FX resets are described in Chapter 13. "EZ-USB FX Resets"
A USB peripheral may be put into a low power state when the host signals a suspend operation.
The USB Specification states that a bus-powered device cannot draw more than 500 A of current
from the VBUS wire while in suspend. The EZ-USB FX chip contains logic to turn off its internal
oscillator and enter a sleep state. A special interrupt, triggered by a wakeup pin or wakeup signaling on the USB bus, starts the oscillator and interrupts the 8051 to resume operation.
Low power operation is described in Chapter 14. "EZ-USB FX Power Management".
Page 1-14
at 48 MHz. The GPIF program can modify the CTL0-5 lines, branch on the RDY0-5 inputs, and
control FIFO data movement.
The GPIF is used to implement many standard interfaces available for the FX, including:
IDE (ATAPI)
Utopia
Package
Ram
ISO
Support
CY7C64601-52NC
52-pin PQFP
4K
No
16
8 Bits
No
CY7C64603-52NC
52-pin PQFP
8K
No
18
8 Bits
No
CY7C64613-52NC
52-pin PQFP
8K
Yes
18
8 Bits
No
CY7C64603-80NC
80-pin PQFP
8K
No
32
16 Bits
No
CY7C64613-80NC
80-pin PQFP
8K
Yes
32
16 Bits
No
CY7C64603-128NC
128-pin PQFP
8K
No
40
16 Bits
Yes
CY7C64613-128NC
128-pin PQFP
8K
Yes
40
16 Bits
Yes
Page 1-15
Page 1-16
2.1
Introduction
The EZ-USB FX built-in microprocessor, an enhanced 8051 core, is fully described in Chapter 16.
"8051 Introduction" , Chapter 17. "8051 Architectural Overview" and Chapter 18. "8051 Hardware
Description." This chapter introduces the processor, its interface to the USB core, and describes
architectural differences from a standard 8051.
2.2
8051 Enhancements
The enhanced 8051 core uses the standard 8051 instruction set. Instructions execute faster than
with the standard 8051 due to two features:
Wasted bus cycles are eliminated. A bus cycle uses four clocks, as compared to 12 clocks
with the standard 8051.
In addition to speed improvement, the enhanced 8051 core also includes architectural enhancements:
A second UART
3.3V operation.
Page 2--1
2.3
EZ-USB FX Enhancements
DMA Module
Breakpoint Facility.
2.4
The 8051 communicates with the USB core through a set of memory mapped registers. These
registers are grouped as follows:
Slave FIFOs
8051 control
I/O ports
DMAEXTFIFO
I 2C-Compatible Controller
Interrupts
USB Functions
GPIF
These registers and their functions are described throughout this manual. A full description of
every register and bit appears in Chapter 15. "EZ-USB FX Registers."
Page 2-2
2.5
FF
80
7F
00
Upper 128
bytes
Indirect Addr
SFR Space
Direct Addr
Lower 128
bytes
Direct Addr
2.6
I/O Ports
A standard 8051 communicates with its I/O ports 0-3 through four Special Function Registers
(SFRs). The USB core implements I/O ports differently than a standard 8051, as described in
Chapter 4. "EZ-USB FX Input/Output." The USB core implements a flexible I/O system that is controlled via SFRs or via the EZ-USB FX register set. Although 8051 SFR bits may be used to control
the I/O pins, their addresses and functions are different than in a standard 8051. Each EZ-USB FX
I/O pin functions identically, having the following resources:
A register (PINSn) that indicates the state of the I/O pins, regardless of its configuration
(input or output).
An output enable register (OEn) that causes the I/O pin to be driven from the output latch.
Page 2-3
2.7
Interrupts
All standard 8051 interrupts are supported in the enhanced 8051 core. Table 2-1 shows the existing and added 8051 interrupts, and indicates how the added ones are used.
Enhanced
8051
Interrupts
Used As
INT0
INT1
Timer 0
Internal, Timer 0
Timer 1
Internal, Timer 1
Internal, UART0
INT2
Internal, USB
INT3
INT4
INT5
INT6
WAKEUP
Internal, UART1
Timer 2
Internal, Timer 2
The EZ-USB FX chip uses 8051 INT2 for 22 different USB interrupts: 17 bulk endpoints plus SOF,
Suspend, SETUP Data, SETUP Token, and USB Bus Reset. To help the 8051 determine which
interrupt is active, the USB core provides a feature called Autovectoring. The core inserts an
address byte into the low byte of the 3-byte jump instruction found at the 8051 INT2 vector
address. This second level of vectoring automatically transfers control to the appropriate USB
ISR. The Autovector mechanism, as well as the EZ-USB FX interrupt system is the subject of
Chapter 12. "EZ-USB FX Interrupts."
Page 2-4
2.8
Power Control
The USB core implements a power-down mode that allows it to be used in USB bus-powered
devices that must draw no more than 500 A when suspended. Power control is accomplished
using a combination of 8051 and USB core resources. The mechanism by which EZ-USB FX powers down for suspend, and then re-powers to resume operation, is described in detail in Chapter
14. "EZ-USB FX Power Management."
EZ-USB FX responds to USB suspend using three 8051 resources: the idle mode and two interrupts. A USB suspend operation is indicated by a lack of bus activity for 3 ms. The USB core
detects this, and asserts an interrupt request via the USB interrupt (8051 INT2). The ISR (Interrupt
Service Routine) turns off external sub-systems that draw power. When ready to suspend operation, the 8051 sets an SFR bit, PCON.0. This bit causes the 8051 to suspend, waiting for an interrupt.
When the 8051 sets PCON.0, a control signal from the 8051 to the USB core causes the core to
shut down the 12-MHz oscillator and internal PLL. This stops all internal clocks to allow the USB
core and 8051 to enter a very low power mode.
The suspended EZ-USB FX chip can be awakened two ways: USB bus activity may resume, or an
EZ-USB FX pin (WAKEUP#) can be asserted to activate a USB Remote Wakeup. Either event
triggers the following chain of events:
The USB core re-starts the 12-MHz oscillator and PLL, and waits for the clocks to stabilize.
The USB core asserts a high-priority 8051 interrupt to signal a resume interrupt.
The 8051 vectors to the resume ISR and, upon completion, resumes executing code at the
instruction following the instruction that set the PCON.0 bit to 1.
2.9
SFRs
The EZ-USB FX family was designed to keep 8051 coding as standard as possible, to allow easy
integration of existing 8051 software development tools. The added 8051 SFR registers and bits
are summarized in Table 2-2.
Page 2-5
8051
Enhancements
SFR
Addr
Function
DPL0
DPH0
0x82
0x83
DPL1
DPH1
0x84
0x85
DPS
MPAGE
0x86
0x92
T2CON.6-7
0xC8
RCAP2L
RCAP2H
0xCA
0xCB
T2 Capture/Reload Value L
T2 Capture/Reload Value H
T2L
T2H
0xCC
0xCD
T2 Count L
T2 Count H
IE.5
IP.5
0xA8
0xB8
SCON1.0-1
SBUF1
0xC0
0xC1
IE.6
IP.6
0xA8
0xB8
EICON.7
0xD8
EXIF
EIE
0x91
0xE8
EIP.0-3
EICON.3
0xF8
0xD8
EIE.4
EIP.4
0xE8
0xF8
EICON.4
EICON.5
0xD8
0xD8
IOA
0x80
Input/Output A
IOB
IOC
0x90
0xA0
Input/Output B
Input/Output C
IOD
IOE
0xB0
0xB1
Input/Output D
Input/Output E
Interrupt Clears
INT2CLR
INT4CLR
0xA1
0xA2
Interrupt 2 Clear
Interrupt 4 Clear
Enables
SOEA
SOEB
0xB2
0xB3
Output Enable A
Output Enable B
SOEC
0xB4
Output Enable C
Timer 2
UART1
Interrupts
INT2-INT5
INT6
WAKEUP#
Expanded SFRs
I/O Registers
Page 2-6
8051
Enhancements
Idle Mode
SFR
Addr
Function
SOED
SOEE
0xB5
0xB6
Output Enable D
Output Enable E
PCON.0
0x87
Members of the EZ-USB FX family that supply pins to expand 8051 memory provide separate nonmultiplexed 16-bit address and 8-bit data busses. This differs from the standard 8051, which multiplexes eight device pins between three sources: I/O port 0, the external data bus, and the low byte
of the address bus. A standard 8051 system with external memory requires a de-multiplexing
address latch, strobed by the 8051 ALE (Address Latch Enable) pin. The external latch is not
required by the non-multiplexed EZ-USB FX chip, and no ALE signal is provided. In addition to
eliminating the customary external latch, the non-multiplexed bus saves one cycle per memory
fetch cycle, further improving 8051 performance.
2.11 Reset
The internal 8051 RESET signal is not directly controlled by the EZ-USB FX RESET pin. Instead, it
is controlled by an EZ-USB FX register bit accessible to the USB host. When the EZ-USB FX chip
is powered, the 8051 is held in reset. Using the default USB device (enumerated by the USB core),
the host downloads code into RAM. Finally, the host clears an EZ-USB FX register bit that takes
the 8051 out of reset.
The EZ-USB FX family also operates with external non-volatile memory, in which case the 8051
exits the reset state automatically at power-on. The various EZ-USB FX resets and their effects
are described in Chapter 13. "EZ-USB FX Resets."
Page 2-7
Page 2-8
3.1
Introduction
EZ-USB FX devices divide RAM into two regions: one for code and data, and the other for USB
buffers and control registers.
7FFF
Registers/Bulk Buffers
7800
27FF
2000
1FFF/7FFF
1F40/7F40
1F3F/7F3F
16 x 64-byte
Bulk Endpoint Buffers
(1,024 bytes)
1FFF
Registers/Bulk Buffers
1B 40/7B 40
7B 3F
1B 40
1B 3F
Control Registers
(832 Bytes)
7800
0000
Page 3-1
7FFF
Registers/Bulk Buffers
7800
7FFF
7F40
7F3F
16 x 64-byte
Bulk Endpoint Buffers
(1,024 bytes)
7B40
7B3F
Control Registers
(832 bytes)
0FFF
Code(PSEN) and
Data (RD/W R) RAM
(4,096 bytes)
7800
0000
3.2
8051 Memory
Figure 3-1 illustrates the two internal EZ-USB FX RAM regions. 6,976 bytes of general-purpose
RAM occupy addresses 0x0000-0x1B3F. This RAM is loadable by the USB core or I 2C-compatible bus EEPROM, and contains 8051 code and data.
The EZ-USB FX EA (External Access) pin controls the placement of the bottom segment of code
(PSEN) memory inside (EA=0) or outside (EA=1) the EZ-USB FX chip. If the EA pin is tied low,
the USB core internally ORs the two 8051 read signals PSEN and RD for this region, so that code
and data share the 0x0000-0x1B3F memory space. If EA=1, all code (PSEN) memory is external.
3.2.1
The 8051 partitions its memory spaces into code memory and data memory. The 8051 reads
code memory using the signal PSEN# (Program Store Enable), reads data memory using the signal RD# (Data Read), and writes data memory using the signal WR# (Data Write). The 8051
MOVX (move external) instruction generates RD# or WR# strobes.
On EZ-USB FX, PSEN# is a dedicated pin, while the RD# and WR# signals share pins with two IO
port signals: PC7/RD and PC6/WR. Therefore, if expanded memory is used, the port pins PC7
and PC6 are not available to the system.
1,024 bytes of RAM at 0x7B40-0x7F3F implement the sixteen bulk endpoint buffers. 192 additional bytes at 0x7F40-0x7FFF contain the USB control registers. The 8051 reads and writes this
memory using the MOVX instruction. In the 8-KB RAM version of EZ-USB FX, the 1,024 bulk endpoint buffer bytes at 0x7B40-0x7F3F also appear at 0x1B40-0x1F3F. This aliasing allows unused
Page 3-2
bulk endpoint buffer memory to be added contiguously to the data memory, as illustrated Figure 33. The memory space at 0x1B40-0x1FFF should not be used.
Even though the 8051 can access EZ-USB FX endpoint buffers at either 0x1B40 or 0x7B40, write
the firmware to access this memory only at 0x7B40-0x7FFF to maintain compatibility with future
versions of EZ-USB FX that contain more than 8 KB of RAM. Future versions will have the bulk
buffer space at 0x7B40-0x7F3F, only.
1F40
1F00
1EC0
1E80
1E40
1E00
1DC0
1D80
1D40
1D00
1CC0
1C80
1C40
1C00
1BC0
1B80
1B40
1B3F
EP0IN
EP0OUT
EP1IN
EP1OUT
EP2IN
EP2OUT
EP3IN
EP3OUT
EP4IN
EP4OUT
EP5IN
EP5OUT
EP6IN
EP06UT
EP7IN
EP07OUT
Code/Data
RAM
0000
Figure 3-3. Unused Bulk Endpoint Buffers (Shaded) Used as Data Memory
In the example shown in Figure 3-3, only endpoints 0-IN through 3-IN are used for the USB function, so the data RAM (shaded) can be extended to 0x1D7F.
If an application uses none of the 16 EZ-USB FX isochronous endpoints, the 8051 can set the
ISODISAB bit in the ISOCTL register to disable all 16 isochronous endpoints and make the 2-KB of
isochronous FIFO RAM available as 8051 data RAM at 0x2000-0x27FF. 8051 code cannot run
in this memory region.
Setting ISODISAB=1 is an all or nothing choice, as all 16 isochronous endpoints are disabled. An
application that sets this bit must never attempt to transfer data over an isochronous endpoint.
The memory map figures in the remainder of this chapter assume that ISODISAB=0, the default
(and normal) case.
Page 3-3
3.3
The 128-pin EZ-USB FX package provides a 16-bit address bus, an 8-bit bus, and memory control
signals PSEN#, RD#, and WR#. These signals are used to expand EZ-USB FX memory.
FFFF
Inside EZ-USB
Outside EZ-USB
External
D ata
M em ory
(R D ,W R )
8000
7800
R egisters(R D ,W R )
(N ote 1)
External
C ode
M em ory
(PSEN )
External
D ata
M em ory
(R D , W R )
2000
1FFF
1F3F
1B40
0000
(N ote 1)
(N ote 2)
Page 3-4
The internal block at 0x7B40-0x7FFF (labeled Registers) contains the bulk buffer memory and
EZ-USB FX control registers. As previously mentioned, they are aliased at 0x1B40-0x1FFF to
allow adding unused bulk buffer RAM to general-purpose memory. 8051 code should access this
memory only at the 0x7B40-0x7BFF addresses. External RAM may be added from 0x0000 to
0xFFFF, but the regions shown by Note 1 in Figure 3-4 are ignored; no external strobes or select
signals are generated when the 8051 executes a MOVX instruction that addresses these regions.
3.4
The USB core gates the standard 8051 RD# and WR# signals to exclude selection of external
memory that exists internal to the EZ-USB FX part. The PSEN# signal is also available on a pin
for connection to external code memory.
Some 8051 systems implement external memory that is used as both data and program memory.
These systems must logically OR the PSEN# and RD# signals to qualify the chip enable and output enable signals of the external memory. To save this logic, the USB core provides two additional control signals, CS# and OE#. The equations for these signals are as follows:
Because the RD#, WR#, and PSEN# signals are already qualified by the addresses allocated to
external memory, these strobes are active only when external memory is accessed.
Page 3-5
FFFF
Inside EZ-USB
Outside EZ-USB
External
Data
Memory
(RD,WR)
8000
7B40
Registers(RD,WR)
(Note 1)
External
Code
Memory
(PSEN)
External
Data
Memory
(RD, WR)
2000
1FFF
1F3F
1B40
(Note 1)
Data (RD,WR)
0000
Note 1: OK to populate data memory here--RD#, WR#, CS# and OE# are inactive.
Figure 3-4 and Figure 3-5 assume that the EZ-USB FX chip uses isochronous endpoints, and
therefore that the ISODISAB bit (ISOCTL.0) is LO. If ISODISAB=1, additional data RAM appears
internally at 0x2000-0x27FF, and the RD#, WR#, CS#, and OE# signals are modified to exclude
this memory space from external data memory.
Page 3-6
4.1
Introduction
This chapter describes the programmable I/O pins, and shows how they are shared by a variety of
8051 and EZ-USB FX alternate functions, such as UART and timer and interrupt signals. This
chapter provides both the programming information for the 8051 I 2C-compatible interface, and the
operating details of the I 2C-compatible boot loader. The role of the boot loader is described in
Chapter 5. "EZ-USB FX Enumeration & ReNumeration".
The I 2C-compatible controller uses the SCL and SDA pins, and performs two functions:
Pullup resistors are required on the SDA and SCL lines, even if nothing is connected to the I 2Ccompatible bus. Each line should be pulled-up to Vcc through a 2.2K ohm resistor.
Page 4-1
4.2
I/O Ports
OE
OUT
reg
Pin
PINS
If you are using a small package version of EZ-USB FX, it is important to recognize that I/O ports
exist inside the part that are not pinned out. Because I/O ports power-up as inputs, the 8051 code
should initialize all of the unused ports as outputs to prevent floating internal nodes. Also, users of
the 52-pin package should set IFCONFIG.7 (register 784A.7) to 1 to drive other internal nodes to
their lowest power states.
To configure a pin as an input, the 8051 sets OE=0 to turn off the output buffer. To configure a pin
as an output, the 8051 sets OE=1 to turn on the output buffer, and writes data to the OUT register.
The PINS bit reflects the actual pin value, regardless of the value of OE.
A fourth control bit (in PORTACFG, PORTBCFG, PORTCCFG registers) determines whether a
port pin is general-purpose Input/Output (GPIO), as shown in Figure 4-1, or connected to an alternate 8051 or EZ-USB FX function. Each bit of PORTA, PORTB, and PORTC has a corresponding
control bit in PORTACFG, PORTBCFG, and PORTCCFG, respectively. Figure 4-1 shows the registers and bits associated with the I/O ports shown in Table 4-1 through Table 4-4.
Page 4-2
Depending on whether the alternate function is an input or output, the I/O logic is slightly different,
as shown in Figure 4-2 (output) and Figure 4-3 (input).
OE
OE
Pin
OUT
reg
Pin
PINS
OUT
reg
PINS
PORTCFG=0 (port)
OE
OE
Pin
OUT
reg
Pin
PINS
OUT
reg
PINS
PORTCFG=0 (port)
Page 4-3
4.3
The port control bits (OUT, OE, and PINS) are contained in the six registers shown in Figures Figure 4-4 through Figure 4-6. Section 4.12, "SFR Addressing" explains how this basic structure is
enhanced to add SFR access to the I/O pins.
The OUTn registers provide the data that drives the port pin when OE=1 and the pin is configured
for port output. If the port pin is selected as an input (OE=0), the value stored in the corresponding
OUTn bit is stored in an output latch but not used.
The OE registers control the output enables on the tri-state drivers connected to the port pins,
unless the corresponding PORTnCFG bit is set to a 1. When a PORTnCFG bit is set to a 1, the
value of the corresponding OE bit has no effect upon the port pin or the alternate function input.
When the corresponding PORTnCFG bit is 0 and OE=1, the corresponding value of OUTn is
output to the pin.
When the corresponding PORTnCFG bit is 0 and OE=0, the corresponding value of OUTn is
not output to the pin; it is tri-stated.
Page 4-4
OUTA
Port A Outputs
7F96
b7
b6
b5
b4
b3
b2
b1
b0
OUTA7
OUTA6
OUTA5
OUTA4
OUTA3
OUTA2
OUTA1
OUTA0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OUTB
Port B Outputs
7F97
b7
b6
b5
b4
b3
b2
b1
b0
OUTB7
OUTB6
OUTB5
OUTB4
OUTB3
OUTB2
OUTB1
OUTB0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OUTC
Port C Outputs
7F98
b7
b6
b5
b4
b3
b2
b1
b0
OUTC7
OUTC6
OUTC5
OUTC4
OUTC3
OUTC2
OUTC1
OUTC0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OUTD
Port D Outputs
7841
b7
b6
b5
b4
b3
b2
b1
b0
OUTD7
OUTD6
OUTD5
OUTD4
OUTD3
OUTD2
OUTD1
OUTD0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OUTE
Port E Outputs
7845
b7
b6
b5
b4
b3
b2
b1
b0
OUTE7
OUTE6
OUTE5
OUTE4
OUTE3
OUTE2
OUTE1
OUTE0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 4-5
PINSA
Port A Pins
7F99
b7
b6
b5
b4
b3
b2
b1
b0
PINA7
PINA6
PINA5
PINA4
PINA3
PINA2
PINA1
PINA0
PINSB
Port B Pins
7F9A
b7
b6
b5
b4
b3
b2
b1
b0
PINB7
PINB6
PINB5
PINB4
PINB3
PINB2
PINB1
PINB0
PINSC
Port C Pins
7F9B
b7
b6
b5
b4
b3
b2
b1
b0
PINC7
PINC6
PINC5
PINC4
PINC3
PINC2
PINC1
PINC0
PINSD
Port D Pins
7842
b7
b6
b5
b4
b3
b2
b1
b0
PIND7
PIND6
PIND5
PIND4
PIND3
PIND2
PIND1
PIND0
PINSE
Port E Pins
7846
b7
b6
b5
b4
b3
b2
b1
b0
PINE7
PINE6
PINE5
PINE4
PINE3
PINE2
PINE1
PINE0
Page 4-6
The PINSn registers contain the current value of the port pins, whether they are selected as I/O
ports or as alternate functions.
OEA
7F9C
b7
b6
b5
b4
b3
b2
b1
b0
OEA7
OEA6
OEA5
OEA4
OEA3
OEA2
OEA1
OEA0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OEB
7F9D
b7
b6
b5
b4
b3
b2
b1
b0
OEB7
OEB6
OEB5
OEB4
OEB3
OEB2
OEB1
OEB0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OEC
7F9E
b7
b6
b5
b4
b3
b2
b1
b0
OEC7
OEC6
OEC5
OEC4
OEC3
OEC2
OEC1
OEC0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OED
7843
b7
b6
b5
b4
b3
b2
b1
b0
OED7
OED6
OED5
OED4
OED3
OED2
OED1
OED0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OEE
7847
b7
b6
b5
b4
b3
b2
b1
b0
OEE7
OEE6
OEE5
OEE4
OEE3
OEE2
OEE1
OEE0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 4-7
4.4
PORTACFG.3=0
Port pin PA3
I/O
Page 4-8
IFCONFIG.3=1
GSTATE[0]
O
IFCONFIG.3=1
GSTATE[1]
O
IFCONFIG.3=1
GSTATE[2]
O
PORTA Bit 3
PORTACFG.3=1
CS#
O
PORTACFG.4=0
PORTACF2.4=0
FWR#
O
PORTACF2.4=1
IFCONIFCONFIG[1..0]=10
FIG[1..0]=11
RDY4
SLWR
I
I
PORTA Bit 5
PORTACFG.5=1
PORTACFG.5=0
PORTACF2.5=0
FRD#
O
PORTACF2.5=1
IFCONIFCONFIG[1..0]=10
FIG[1..0]=11
RDY5
SLRD
I
I
PORTA Bit 6
PORTACFG.6=1
PORTACFG.6=0
Port pin PA6
I/O
RxD0out
O
PORTA Bit 7
PORTACFG.7=1
PORTACFG.7=0
Port pin PA7
I/O
RxD1out
O
PORTBCFG.0=1
T2
I
IFCONFIG[1..0]=00
PORTBCFG.1=0
Port pin PB1
I/O
PORTBCFG.1=1
T2EX
I
PORTB Bit 0
IFCONFIG[1..0]=01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
D[0]
I/O
GDA[0]
I/O
AFI[0]
I/O
PORTB Bit 1
IFCONFIG[1..0]=01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
D[1]
I/O
GDA[1]
I/O
AFI[1]
I/O
Page 4-9
PORTBCFG.2=1
RxD1
I
IFCONFIG[1..0]=00
PORTBCFG.3=0
Port pin PB3
I/O
PORTBCFG.3=1
TxD1
O
IFCONFIG[1..0]=00
PORTBCFG.4=0
Port pin PB4
I/O
PORTBCFG.4=1
INT4
I
IFCONFIG[1..0]=00
PORTBCFG.5=0
Port pin PB5
I/O
PORTBCFG.5=1
INT5#
I
IFCONFIG[1..0]=00
PORTBCFG.6=0
Port pin PB6
I/O
PORTBCFG.6=1
INT6
I
IFCONFIG[1..0]=00
PORTBCFG.7=0
Port pin PB7
I/O
Page 4-10
PORTBCFG.7=1
T2OUT
O
PORTB Bit 2
IFCONFIG[1..0]=01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
D[2]
I/O
GDA[2]
I/O
AFI[2]
I/O
PORTB Bit 3
IFCONFIG[1..0]=01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
D[3]
I/O
GDA[3]
I/O
AFI[3]
I/O
PORTB Bit 4
IFCONFIG[1..0]=01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
D[4]
I/O
GDA[4]
I/O
AFI[4]
I/O
PORTB Bit 5
IFCONFIG[1..0]=01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
D[5]
I/O
GDA[5]
I/O
AFI[5]
I/O
PORTB Bit 6
IFCONFIG[1..0]=01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
D[6]
I/O
GDA[6]
I/O
AFI[6]
I/O
PORTB Bit 7
IFCONFIG[1..0]=01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
D[7]
I/O
GDA[7]
I/O
AFI[7]
I/O
PORTCCFG.0=0
PORTCCF2.0=0
RxD0
I
PORTC Bit 1
PORTCCFG.1=1
PORTCCFG.1=0
PORTCCF2.1=0
TxD0
O
INT0#
I
PORTC Bit 3
PORTCCFG.3=1
PORTCCFG.3=0
PORTCCF2.3=0
INT1#
I
PORTCCF2.4=0
PORTCCF2.3=1
IFCON00, 01, 11 not
FIG[1..0]=10
valid
RDY3
X
I
PORTC Bit 4
PORTCCFG.4=1
PORTCCFG.4=0
PORTCCF2.1=1
IFCON00, 01, 11 not
FIG[1..0]=10
valid
RDY1
X
I
PORTC Bit 2
PORTCCFG.2=1
PORTCCFG.2=0
Port pin PC3
I/O
PORTCCF2.0=1
IFCON00, 01, 11 not
FIG[1..0]=10
valid
RDY0
X
I
T0
I
PORTCCF2.4=1
IFCON00, 01, 11 not
FIG[1..0]=10
valid
CTL1
X
O
Page 4-11
PORTCCFG.5=0
PORTCCF2.5=0
T1
I
PORTC Bit 6
PORTCCFG.6=1
PORTCCFG.6=0
PORTCCF2.6=0
WR#
O
PORTCCF2.6=1
IFCON00, 01, 11 not
FIG[1..0]=10
valid
CTL4
X
O
PORTC Bit 7
PORTCCFG.7=1
PORTCCFG.7=0
PORTCCF2.7=0
PORTCCF2.5=1
IFCON00, 01, 11 not
FIG[1..0]=10
valid
CTL3
X
O
RD#
O
PORTCCF2.7=1
IFCON00, 01, 11 not
FIG[1..0]=10
valid
CTL5
X
O
IFCONFIG[1..0]=01
IFCONFIG.2=0
IFCONFIG.2=1
IFCONFIG.2=0
IFCONFIG.2=1
Port pins
PD[7..0]
Port pins
PD[7..0]
Port pins
PD[7..0]
GDB[7..0]
Port pins
PD[7..0]
BFI[7..0]
I/O
I/O
I/O
I/O
I/O
I/O
Page 4-12
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
adr0
BOUTFLAG
I/O
IFCONFIG[1..0]=00, 01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
adr1
AINFULL
I/O
Port E Bit 1
Port E Bit 2
IFCONFIG[1..0]=00, 01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
adr2
BINFULL
I/O
IFCONFIG[1..0]=00, 01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
adr3
AOUTEMTY
I/O
Port E Bit 3
Port E Bit 4
IFCONFIG[1..0]=00, 01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
adr4
BOUTEMTY
I/O
IFCONFIG[1..0]=00, 01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
CTL3
I/O
I/O
Port E Bit 5
Port E Bit 6
IFCONFIG[1..0]=00, 01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
CTL4
I/O
I/O
IFCONFIG[1..0]=00, 01
IFCONFIG[1..0]=10
IFCONFIG[1..0]=11
CTL5
I/O
I/O
Port E Bit 7
Page 4-13
4.5
I2C-Compatible Controller
The USB core contains an I 2C-compatible controller for boot loading and general-purpose I 2Ccompatible bus interface. This controller uses the SCL (Serial Clock) and SDA (Serial Data) pins.
I2C-compatible controller describes how the boot load operates at power-on to read the contents
of an external serial EEPROM to determine the initial EZ-USB FX configuration. The boot loader
operates automatically, while the 8051 is held in reset. The last section of this chapter describes
the operating details of the boot loader.
After the boot sequence completes and the 8051 is brought out of reset, the general-purpose I 2Ccompatible controller is available to the 8051 for interface to external I 2C-compatible devices,
such as other EEPROMS, I/O chips, audio/video control chips, etc.
For I 2C-compatible peripherals that support it, the EZ-USB FX I 2C-compatible bus can run at 400
KHz. For compatibility, the EZ-USB FX powers-up at the 100-KHz frequency.
4.6
start
stop
SDA
D7
D6
D5
D4
D3
D2
D1
D0
ACK
SCL
Page 4-14
Multiple I 2C-Compatible Bus Masters The EZ-USB FX chip acts only as an I 2C-compatible bus master, never a slave. However, the 8051 can detect a second master by
checking for BERR=1 (Section 4.8, "Status Bits").
start
SDA
SA3
SA2
SA1
SA0
DA2
DA1
DA0
R/W
ACK
D7
D6
SCL
10
11
Page 4-15
I2CS
7FA5
b7
b6
b5
b4
b3
b2
b1
b0
START
STOP
LASTRD
ID1
ID0
BERR
ACK
DONE
R/W
R/W
R/W
I2DAT
7FA6
I 2C-Compatible Data
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
4.7
Control Bits
4.7.1 START
The 8051 sets the START bit to 1 to prepare an I 2C-compatible bus transfer. If START=1, the next
8051 load to I2DAT generates the start condition followed by the serialized byte of data in I2DAT.
The 8051 loads data in the format shown in Figure 4-7 after setting the START bit. The I 2C-compatible controller clears the START bit during the ACK interval (clock 9 in Figure 4-7).
4.7.2 STOP
The 8051 sets STOP=1 to terminate an I 2C-compatible bus transfer. The I 2C-compatible controller
clears the STOP bit after completing the STOP condition. If the 8051 sets the STOP bit during a
byte transfer, the STOP condition generates immediately following the ACK phase of the byte
transfer. If no byte transfer is occurring when the STOP bit is set, the STOP condition is carried out
immediately on the bus. Data should not be written to I2CS or I2DAT until the STOP bit returns
low. In most versions of CY7C646x3-128NC, an interrupt request is available to signal that STOP
bit transmission is complete.
Page 4-16
4.7.3 LASTRD
To read data over the I 2C-compatible bus, an I 2C-compatible master floats the SDA line and
issues clock pulses on the SCL line. After every eight bits, the master drives SDA low for one clock
to indicate ACK. To signal the last byte of the read transfer, the master floats SDA at ACK time to
instruct the slave to stop sending. This is controlled by the 8051 by setting LASTRD=1 before
reading the last byte of a read transfer. The I 2C-compatible controller clears the LASTRD bit at the
end of the transfer (at ACK time).
Setting LASTRD does not automatically generate a STOP condition. The 8051 should also set the
STOP bit at the end of a read transfer.
4.8
Status Bits
After a byte transfer, the I 2C-compatible controller updates the three status bits BERR, ACK, and
DONE. If no STOP condition was transmitted, they are updated at ACK time. If a STOP condition
was transmitted they are updated after the STOP condition is transmitted.
4.8.1 DONE
The I 2C-compatible controller sets this bit whenever it completes a byte transfer, right after the
ACK stage. The controller also generates an I 2C-compatible interrupt request (8051 INT3) when it
sets the DONE bit. The I 2C-compatible controller clears the DONE bit when the 8051 reads or
writes the I2DAT register, and it clears the I 2C-compatible interrupt request bit whenever the 8051
reads or writes the I 2CS or I2DAT register.
4.8.2 ACK
Every ninth SCL of a write transfer, the slave indicates reception of the byte by asserting ACK. The
I 2C-compatible controller floats SDA during this time, samples the SDA line, and updates the ACK
bit with the complement of the detected value. ACK=1 indicates acknowledge, and ACK=0 indicates not-acknowledge. The I 2C-compatible controller updates the ACK bit at the same time it sets
DONE=1. The ACK bit should be ignored for read transfers on the bus.
4.8.3 BERR
This bit indicates an I 2C-compatible bus error. BERR=1 indicates that there was bus contention,
which results when an outside device drives the bus LO when it shouldnt, or when another bus
Page 4-17
4.9
To send a multiple byte data record over the I 2C-compatible bus, follow these steps:
1. Set the START bit.
2. Write the peripheral address and direction=0 (for write) to I2DAT.
3. Wait for DONE=1*. If BERR=1 or ACK=0, go to step 7.
4. Load I2DAT with a data byte.
5. Wait for DONE=1*. If BERR=1 or ACK=0 go to step 7.
6. Repeat steps 4 and 5 for each byte until all bytes have been transferred.
7. Set STOP=1.
* If the I 2C-compatible interrupt (8051 INT3) is enabled, each Wait for DONE=1 step can be interrupt
driven, and handled by an interrupt service routine. See Chapter 12. "EZ-USB FX Interrupts" for more
details regarding the I 2C-compatible interrupt.
Page 4-18
9. Read the data from I2DAT. With LASTRD=1, this initiates the final byte read on the I 2C-compatible bus.
10. Wait for DONE=1*. If BERR=1, terminate by setting STOP=1.
11. Set STOP=1.
12. Read the last byte from I2DAT immediately (the next instruction) after setting the STOP bit.
This retrieves the last data byte without initiating an extra read transaction (nine more SCL
pulses) on the I 2C-compatible bus.
* If the I 2C-compatible interrupt (8051 INT3) is enabled, each Wait for DONE=1 step can be interruptdriven, and handled by an interrupt service routing. See Chapter 12. "EZ-USB FX Interrupts" for more
details regarding the I 2C-compatible interrupt.
EEPROMs with address A[7..4]=1010 that use an 8-bit address, (example: 24LC00,
24LC01/B, 24LC02/B).
EEPROMs with address A[7..4]=1010 that use a 16-bit address, (example: 24AA64,
24LC128, 24AA256).
EEPROMs with densities up to 256 bytes require loading a single address byte. Larger EEPROMs
require loading two address bytes.
The EZ-USB FX I 2C-compatible controller needs to determine which EEPROM type is connectedone or two address bytesso that it can properly reset the EEPROM address pointer to
zero before reading the EEPROM. For the single-byte address part, it must send a single zero byte
of address, and for the two-byte address part it must send two zero bytes of address.
Because there is no direct way to detect which EEPROM typesingle or double addressis connected, the I 2C-compatible controller uses the EEPROM address pins A2, A1, and A0 to determine whether to send out one or two bytes of address. This algorithm requires that the EEPROM
Page 4-19
Example
EEPROM
A2
A1
A0
16
24LC00*
N/A
N/A
N/A
128
24LC01
256
24LC02
4K
24LC32
8K
24LC64
The I 2C-compatible controller performs a three-step test at power-on to determine whether a onebyte-address or a two-byte-address EEPROM is attached. This test proceeds as follows:
1. The I 2C-compatible controller sends out a read current address command to I 2C-compatible
sub-address 000 (10100001). If no ACK is returned, the controller proceeds to step 2. If ACK
is returned, the one-byte-address device is indicated. The controller discards the data and
proceeds to step 3.
2. The I 2C-compatible controller sends out a read current address command to I 2C-compatible
sub-address 001 (10100011). If ACK is returned, the two-byte-address device is indicated.
The controller discards the data and proceeds to step 3. If no ACK is returned, the controller
assumes that a valid EEPROM is not connected, assumes the No Serial EEPROM mode,
and terminates the boot load.
3. The I 2C-compatible controller resets the EEPROM address pointer to zero (using the appropriate number of address bytes), then reads the first EEPROM byte. If it does not read 0xB4 or
0xB6, the controller assumes the No Serial EEPROM mode. If it reads either 0xB4 or 0xB6,
the controller copies the next six bytes into internal storage. If it reads 0xB6, it proceeds to
load the EEPROM contents into internal RAM.
The results of this power-on test are reported in the ID1 and ID0 bits, as shown in
Table 4-7.
Page 4-20
ID0
Meaning
No EEPROM detected
Not used
Other EEPROM devices (with device address of 1010) can be attached to the I 2C-compatible bus
for general purpose 8051 use, as long as they are strapped for address other than 000 or 001. If a
24LC00 EEPROM is used, no other EEPROMS with device address 1010 may be used because
the 24LC00 responds to all eight sub-addresses.
Page 4-21
80
90
A0
B0
C0
D0
E0
F0
IOA
IOB
IOC
IOD
SCON1
PSW
ACC
SBUF1
EICON
EIE
EIP
SP
EXIF
INT2CLR
IOE
DPL0
MPAGE
INT4CLR
SOEA
DPH0
SOEB
DPL1
SOEC
DPH1
SOED
DPS
SOEE
PCON
TCON
SCON0
SBUF0
IE
IP
T2CON
TMOD
TL0
RCAP2L
TL1
RCAP2H
TH0
TL2
TH1
TH2
CKCON
* 8051 enhancements appear in bold. EZ-USB FX SFRs are shaded. Bit-addressable registers (rows 0
and 8) are highlighted.
In the standard 8051, ports 0-3 are addressed using SFRs 80, 90, A0, and B0. Because these
ports are not implemented in EZ-USB FX, the SFRs are available. The EZ-USB FX chip maps the
input-output data for four of its I/O ports, A-D, into these registers. Also, the I/O register for PORT
E and the port output enable registers are mapped into non-bit-addressable SFRs as shown in
Table 4-8.
INT2CLR and INT4CLR are dummy registers (no data) that provide a fast method for clearing
IRQ2 and IRQ4 flags. The 8051 writes any value to these registers to clear the IRQ2 or IRQ4 interrupt request flags.
INT2 is used for all USB interrupts. INT4 is used for all slave FIFO and GPIF interrupts.
Two enable bits turn on the SFR interrupt clearing:
Page 4-22
The two code examples (Figure 4-10 and Figure 4-11) illustrate the speed advantage gained by
using the INT2CLR SFR to clear a pending USB interrupt request for endpoint 6 OUT. The first
example uses the EZ-USB FX method, and the second example uses the new SFR method to
clear an interrupt request for bulk endpoint EP6OUT.
EP6OUT_ISR_A:
push
push
push
push
push
push
dps
dpl
dph
dpl1
dph1
acc
mov
clr
mov
a,EXIF
acc.4
EXIF,a
mov
mov
movx
dptr,#OUT07IRQ
a,#01000000b
@dptr,a
;
; clear INT2 (USB) IRQ flag
;
; clear OUT6 IRQ bit by writing 1
Page 4-23
init:
movx
movx
setb
movx
dptr,#USBBAV
a,@dptr
acc.4
@dptr,a
push
mov
clr
mov
acc
a,EXIF
acc.4
EXIF,a
;
EP6OUT_ISR_B:
; clear INT2 (USB) IRQ flag
;
mov
INT2CLR,a
;
; Do interrupt processing here
;
pop
acc
reti
Page 4-24
OE
OUT
pin
Enab
output register
bit set
bit clear
PORTSETUP.0
bit toggle
bit test
PINS
Figure 4-12. EZ-USB FX I/O Structure
Figure 4-12 shows a block diagram of the EZ-USB FX I/O structure. The signals in rectangles, OE,
OUT, and PINS, represent the memory mapped register bits that access I/O bits using 8051 MOVX
instructions. The ovals represent access via the SFRs. The 8051 sets a single bit, PORTSETUP.0,
to enable SFR access to all of the I/O pins.
When PORTSETUP.0=1, both I/O access methods operate simultaneously. Both the MOVX
method and SFR addressing method can be used to set the state of an output pin. To elaborate,
the following code example sets PA0 using a MOVX instruction, clears it using a bit clear instruction, and then toggles it using a bit toggle instruction.
mov
movx
setb
movx
dptr,#OUTA
a,@dptr
acc.0
@dptr,a
;
;
;
;
clrb
IOA.0
cpl
IOA.0
;
;
Page 4-25
For the bit-addressable registers IOA, IOB, IOC, or IOD, the bit test instructions (jb, jnb) may be
used on individual input pins. Bit test instructions may not be used with IOE (at 0xB1) because it is
not bit-addressable. However, SFR access is still faster for the IOE register than MOVX access.
The 8051 can read an I/O pin using SFRs, regardless of the state of the PORTSETUP.0 bit.
The following example code tests the state of PORTC bit 2, and jumps to two different routines
depending on the result.
checkbit:
jb
jmp
Page 4-26
5.1
Introduction
The EZ-USB FX chip is soft. 8051 code and data is stored in internal RAM, which is loaded from
the host using the USB interface. Peripheral devices that use the EZ-USB FX chip can operate
without ROM, EPROM, or FLASH memory, shortening production lead times and making firmware
updates a breeze.
To support the soft feature, the EZ-USB FX chip enumerates automatically as a USB device without firmware, so the USB interface itself can download 8051 code and descriptor tables. The USB
core performs this initial (power-on) enumeration and code download while the 8051 is held in
RESET. This initial USB device, which supports code download, is called the Default USB
Device.
After the code descriptor tables have been downloaded from the host to EZ-USB FX RAM, the
8051 is brought out of reset and begins executing the device code. The EZ-USB FX device enumerates again, this time as the loaded device. This patented enumeration process is called ReNumeration. The EZ-USB FX chip accomplishes ReNumeration by electrically simulating a
physical disconnection and re-connection to the USB.
An EZ-USB FX control bit called RENUM (ReNumerated) determines which entity, the core or the
8051, handles device requests over endpoint zero. At power-on, the RENUM bit (USBCS.1) is
zero, indicating that the USB core automatically handles device requests. Once the 8051 is running, it can set RENUM to 1 to indicate that user 8051 code handles subsequent device requests
using its downloaded firmware. Chapter 9. "EZ-USB FX Endpoint Zero" describes how the 8051
handles device requests while RENUM=1.
It is also possible for the 8051 to run with RENUM=0 and have the USB core handle certain endpoint zero requests. (See Info Box below).
This chapter deals with the various EZ-USB FX startup modes, and describes the default USB
device that is created at initial enumeration.
Page 5-1
5.2
The Default USB Device consists of a single USB configuration containing one interface (interface
0) with three alternate settings, 0, 1, and 2. The endpoints reported for this device are shown in
Table 5-1. Note that alternate setting zero consumes no interrupt or isochronous bandwidth, as
recommended by the USB Specification.
Type
Alternate Setting
0
Page 5-2
CTL
64
64
64
1-IN
INT
16
64
2-IN
BULK
64
64
2-OUT
BULK
64
64
4-IN
BULK
64
64
4-OUT
BULK
64
64
6-IN
BULK
64
64
6-OUT
BULK
64
64
8-IN
ISO
16
256
8-OUT
ISO
16
256
9-IN
ISO
16
16
9-OUT
ISO
16
16
10-IN
ISO
16
16
10 OUT
ISO
16
16
For the purpose of downloading 8051 code, the Default USB Device requires only CONTROL endpoint zero. Nevertheless, the USB default machine is enhanced to support other endpoints as
shown in Figure 5-2 (note the alternate settings 1 and 2). This enhancement is provided to allow
the developer to get a head start generating USB traffic and learning the USB system. All the
descriptors are handled automatically by the USB core, so the developer can immediately start
writing code to transfer data over USB using these pre-configured endpoints.
When the USB core establishes the Default USB Device, it also sets the proper endpoint configuration bits to match the descriptor data supplied by the USB core. For example, bulk endpoints 2,
4, and 6 are implemented in the Default USB Device, so the USB core sets the corresponding
EPVAL bits. Chapter 6. "EZ-USB FX Bulk Transfers" contains a detailed explanation of the EPVAL
bits.
Tables 5-9 through 5-13 show the various descriptors returned to the host by the USB core when
RENUM=0. These tables describe the USB endpoints defined in Table 5-1, along with other USB
details. These tables should help you understand the structure of USB descriptors.
5.3
Table 5-2 shows how the USB core responds to endpoint zero requests when RENUM=0.
Table 5-2. How the USB Core Handles EP0 Requests When RENUM=0
bRequest
Name
Action: RENUM=0
0x00
Get Status/Device
0x00
Get Status/Endpoint
0x00
Get Status/Interface
0x01
Clear Feature/Device
None
0x01
Clear Feature/Endpoint
0x02
(reserved)
None
0x03
Set Feature/Device
None
0x03
Set Feature/Endpoint
0x04
(reserved)
None
0x05
Set Address
0x06
Get Descriptor
0x07
Set Descriptor
None
0x08
Get Configuration
0x09
Set Configuration
0x0A
Get Interface
0x0B
Set Interface
Page 5-3
Name
Sync Frame
Action: RENUM=0
None
Vendor Requests
0xA0
Firmware Load
Upload/Download RAM
0xA10xAF
Reserved
all other
None
Set_Address
Get_Descriptor
Set_Configuration (to 1)
As shown in Table 5-2, after enumeration, the USB core responds to the following host requests:
To ensure the 8051 processor can access the external SRAM (including the Keil Monitor), do not
change the following bits from 1:
To ensure that no bits are unintentionally changed, all writes to the PORTxCFG registers should
use a read-modify-write series of instructions.
Page 5-4
5.4
Firmware Load
The USB Specification provides for vendor-specific requests to be sent over CONTROL endpoint
zero. The EZ-USB FX chip uses this feature to transfer data between the host and EZ-USB FX
RAM. The USB core responds to two Firmware Load requests, as shown in Tables 5-3 and 5-4.
Table 5-3. Firmware Download
Byte
Field
Value
Meaning
8051
Response
bmRequest
0x40
None
required
bRequest
0xA0
Firmware Load
wValueL
wValueH
AddrH
wIndexL
0x00
wIndexH
0x00
wLenghtL
LenL
wLengthH
LenH
Number of Bytes
Field
Value
Meaning
8051
Response
None
required
bmRequest
0xC0
Vendor Request, IN
bRequest
0xA0
Firmware Load
wValueL
wValueH
AddrH
wIndexL
0x00
wIndexH
0x00
wLengthL
LenL
wLengthH
LenH
Number of Bytes
These requests are always handled by the USB core (RENUM=0 or 1). The bRequest value 0xA0
is reserved by the EZ-USB FX chip. It should never be used for a vendor request. Cypress Semiconductor also reserves bRequest values 0xA1 through 0xAF. Your system should not use these
bRequest values.
Page 5-5
5.5
Enumeration Modes
When the EZ-USB FX chip comes out of RESET, the USB core decides how to enumerate based
on the contents of an external EEPROM on its I 2C-compatible bus. Table 5-5 shows the choices.
In Table 5-5, PID means Product ID, VID means Version ID, and DID means Device ID.
0xB4
0xB6
If no EEPROM is present, or if one is present but the first byte is neither 0xB4 nor 0xB6, the USB
core enumerates using internally stored descriptor data, which contains the Cypress Semiconductor VID, PID, and DID. These ID bytes cause the host operating system to load a Cypress Semi-
Page 5-6
conductor device driver. The USB core also establishes the Default USB device. This mode is only
used for code development and debug.
If a serial EEPROM is attached to the I 2C-compatible bus and its first byte is 0xB4, the USB core
enumerates with the same internally stored descriptor data as for the no-EEPROM case, but with
one difference. It supplies the PID/VID/DID data from six bytes in the external EEPROM rather
than from the USB core. The custom VID/PID/DID in the EEPROM causes the host operating system to load a device driver that is matched to the EEPROM VID/PID/DID. This EZ-USB FX operating mode provides a soft USB device using ReNumeration.
If a serial EEPROM is attached to the I 2C-compatible bus and its first byte is 0xB6, the USB core
transfers the contents of the EEPROM into internal RAM. The USB core also sets the RENUM bit
to 1 to indicate that the 8051 (and not the USB core) responds to device requests over CONTROL
endpoint zero (see the Info Box on page 5-6). Therefore, all descriptor data, including VID/DID/PID
values, are supplied by the 8051 firmware. The last byte loaded from the EEPROM (to the CPUCS
register) releases the 8051 reset signal, allowing the EZ-USB FX chip to come up as a fully, custom device with firmware in RAM.
The following sections discuss these enumeration methods in detail.
The Other Half of the I 2C-Compatible Story
The EZ-USB FX I 2C-compatible controller serves two purposes. First, as described in this
chapter, it manages the serial EEPROM interface that operates automatically at power-on to
determine the enumeration method. Second, once the 8051 is up and running, the 8051 can
access the I 2C-compatible controller for general-purpose use. This makes a wide range of
standard I 2C-compatible peripherals available to an EZ-USB FX system.
Other I 2C-compatible devices can be attached to the SCL and SDA lines of the I 2C-compatible bus as long as there is no address conflict with the serial EEPROM described in this
chapter. Chapter 4. "EZ-USB FX Input/Output" describes the general-purpose nature of the
I 2C-compatible interface.
5.6
No Serial EEPROM
In the simplest scenario, no serial EEPROM is present on the I 2C-compatible bus or an EEPROM
is present, but its first byte is not 0xB4 or 0xB6. In this case, descriptor data is supplied by a table
internal to the USB core. The EZ-USB FX chip comes on as the USB Default Device, with the ID
bytes shown in Table 5-6.
Pullup resistors are required on SCL/SDA, even if no device is connected. The resistors are
required to allow EZ-USB FX to detect the no-EEPROM condition.
Page 5-7
Product ID
Device
Release
The USB host queries the device during enumeration, reads the device descriptor, and uses the
bytes described in Table 5-6 to determine which software driver to load into the operating system.
This is a major USB feature drivers are dynamically matched with devices and automatically
loaded when a device is plugged in.
The no EEPROM scenario is the simplest configuration, and also the most limiting. This mode is
used only for code development, utilizing Cypress software tools matched to the ID values in Table
5-6.
Reminder
The USB core uses the data in Table 5-6 for enumeration only if the RENUM bit is zero. If
RENUM=1, enumeration data is supplied by 8051 code.
5.7
Page 5-8
Contents
0xB4
Vendor ID (VID) L
Vendor ID (VID) H
Product ID (PID) L
Product ID (PID) H
Device ID (DID) L
Device ID (DID) H
Config 0
If at power-on, the USB core detects an EEPROM connected to its I 2C-compatible port with the
value 0xB4 at address 0, the USB core copies the Vendor ID (VID), Product ID (PID), and Device
ID (DID) from the EEPROM (Table 5-7) into internal storage. The USB core then supplies these
bytes to the host as part of the Get_Descriptor-Device request. (These six bytes replace only the
VID/PID/DID bytes in the default USB device descriptor.) This causes a driver matched to the VID/
PID/DID values in the EEPROM, instead of those in the USB core, to be loaded into the OS.
After initial enumeration, the driver downloads 8051 code and USB descriptor data into EZ-USB
FX RAM and starts the 8051. The code then ReNumerates and comes on as the fully, custom
device.
A recommended EEPROM for this application is the Microchip 24LC00, a small (5-pin SOT package) inexpensive 16-byte serial EEPROM. A 24LC01 (128 bytes) or 24LC02 (256 bytes) may be
substituted for the 24LC00, but as with the 24LC00, only the first nine bytes are used.
5.8
If at power-on, the USB core detects an EEPROM connected to its I 2C-compatible port with the
value 0xB6 at address 0, the USB core loads the EEPROM data into EZ-USB FX RAM. It also sets
the RENUM bit to 1, causing device requests to be fielded by the 8051 instead of the USB core.
The EEPROM data format is shown in Table 5-8.
Table 5-8. EEPROM Data Format for B6 Load
EEPROM
Address
Contents
0xB6
1*
Vendor ID (VID) L
2*
Vendor ID (VID) H
3*
Product ID (PID) L
4*
Product ID (PID) H
5*
Device ID (DID) L
6*
Device ID (DID) H
Config 0
Reserved (set to
0x00)
Length H
10
Length L
11
StartAddr H
12
StartAddr L
---
Data block
---
Page 5-9
Contents
---
Length H
---
Length L
---
StartAddr H
---
StartAddr L
---
Data block
-----
0x80
---
0x01
---
0x7F
---
0x92
Last
00000000
The first byte tells the USB core to copy EEPROM data into RAM. The next six bytes are ignored
(See the Info Box below).
One or more data records follow, starting at EEPROM address 9. The maximum value of Length H
is 0x03, allowing a maximum of 1,023 bytes per record. Each data record consists of a length, a
starting address, and a block of data bytes. The last data record must have the MSB of its Length
H byte set to 1. The last data record consists of a single-byte load to the CPUCS register at
0x7F92. Only the LSB of this byte is significant8051RES (CPUCS.0) is set to zero to bring the
8051 out of reset.
Serial EEPROM data can be loaded into two EZ-USB FX RAM spaces only.
VID/PID/DID in a B6 EEPROM
Bytes 1-6 of a B6 EEPROM can be loaded with VID/PID/DID bytes if it is desired at some
point to run the 8051 program with RENUM=0 (USB core handles device requests), using the
EEPROM VID/PID/DID rather than the Cypress Semiconductor values built into the USB
core.
5.9
Configuration Byte 0
The first configuration byte, Config 0, is valid for both EEPROM load formats; B4 and B6.
Page 5-10
Config 0
b7
b6
b5
b4
b3
b2
b1
b0
48MHZ
CLKINV
400KHZ
Bit 2:
48MHZ
If 48MHZ=1, the 8051 operates at a clock rate of 48 MHz, and the CLKOUT pin is a 48-MHz
square wave. If 48MHZ=0 the 8051 operates at a clock rate of 24 MHz, and the CLKOUT pin is
a 24-MHz square wave. This bit is copied to the CPUCS Register (Bit 3, 24/48), which is
read-only to the 8051. Thus the 8051 clock rate is fixed at 24 or 48 MHz at boot time according
to the EEPROM contents, and cannot be changed subsequently by the 8051.
If no EEPROM is present the default value is zero, selecting 24-MHz operation.
Bit 1:
CLKINV
If CLKINV=0, the CLKOUT signal is not inverted (as shown in all timing diagrams in this manual). If CLKINV=1, the CLKOUT signal is inverted. This bit is copied to the CPUCS Register Bit
2, which is read-only to the 8051. Thus, the CLKOUT polarity is set to invert or non-invert at
boot time according to the EEPROM contents, and cannot be changed subsequently by the
8051.
If no EEPROM is present the default value is zero, selecting non-inverting operation.
Bit 0:
400KHZ
If 400KHZ=0, the I 2C-compatible bus operates at approximately 100 KHz. If 400KHZ=1, the
I 2C-compatible bus operates at approximately 400 KHz. This bit is copied to the I 2CMODE
register bit 0, which is read-write to the 8051. Thus the I 2C-compatible bus speed is initially set
by the EEPROM bit, and may be changed subsequently by the 8051.
When the EZ-USB FX comes out of RESET, the I 2C-compatible bus operates at 100 KHz mode,
ensuring that a 100 KHz device can be used as the boot EEPROM.
5.10 ReNumeration
Three EZ-USB FX control bits in the USBCS (USB Control and Status) Register control the ReNumeration process: DISCON, DISCOE, and RENUM.
Page 5-11
USBCS
7FD6
b7
b6
b5
b4
b3
b2
b1
b0
WAKESRC
DISCON
DISCOE
RENUM
SIGRSUME
R/W
R/W
R/W
R/W
R/W
Internal Logic
DISCON
DISCON#
pin
DISCOE
Figure 5-3. Disconnect Pin Logic
The logic for the DISCON and DISCOE bits is shown in Figure 5-3. To simulate a USB disconnect,
the 8051 writes the value 00001010 to USBCS. This floats the DISCON# pin, and provides an
internal DISCON=1 signal to the USB core that causes it to perform disconnect housekeeping.
To re-connect to USB, the 8051 writes the value 00000110 to USBCS. This presents a logic HI to
the DISCON# pin, enables the output buffer, and sets the RENUM bit HI to indicate that the 8051
(and not the USB core) is now in control for USB transfers. This arrangement allows connecting
the 1,500-ohm resistor directly between the DISCON# pin and the USB D+ line (Figure 5-4).
DISCON#
EZ-USB
To 3.3V regulator
1500
J1
VCC
DD+
GND
1
2
3
4
DD+
USB-B
Page 5-12
Field
Description
Value
bLength
12H
bDescriptorType
01H
bcdUSB (L)
10H
bcdUSB (H)
01H
bDeviceClass
FFH
bDeviceSubClass
FFH
bDeviceProtocol
FFH
bMaxPacketSize0
40H
idVendor (L)
Vendor ID (L)
47H
idVendor (H)
Vendor ID (H)
10
idProduct (L)
Product ID (L)
11
idProduct (H)
Product ID (H)
22H
12
bcdDevice (L)
xxH
13
bcdDevice (H)
YYH
14
iManufacturer
00H
15
iProduct
00H
16
iSerialNumber
00H
17
05H
EZ-USB FX = 2235H
35H
01H
The Device Descriptor specifies a MaxPacketSize of 64 bytes for endpoint 0, contains Cypress
Semiconductor Vendor, Product and Release Number IDs, and uses no string indices. Release
Number IDs (XX and YY) are found in individual Cypress Semiconductor data sheets. The USB
core returns this information response to a Get_Descriptor/Device host request.
Page 5-13
Field
Description
Value
bLength
09H
bDescriptorType
02H
wTotalLength (L)
DAH
wTotalLength (H)
00H
bNumInterfaces
01H
bConfigurationValue
01H
iConfiguration
00H
bmAttributes
80H
MaxPower
32H
The configuration descriptor includes a total length field (offset 2-3) that encompasses all interface
and endpoint descriptors that follow the configuration descriptor. This configuration describes a
single interface (offset 4). The host selects this configuration by issuing a Set_Configuration
requests specifying configuration #1 (offset 5).
Table 5-11. USB Default Interface 0, Alternate Setting 0 Descriptor
Offset
Field
Description
Value
bLength
09H
bDescriptorType
04H
bInterfaceNumber
00H
bAlternateSetting
00H
bNumEndpoints
00H
bInterfaceClass
FFH
bInterfaceSubClass
FFH
bInterfaceProtocol
FFH
iInterface
00H
Interface 0, Alternate Setting 0 describes endpoint 0 only. This setting consumes zero bandwidth. The interface has no string index.
Page 5-14
Field
Description
Value
bLength
09H
bDescriptorType
04H
bInterfaceNumber
00H
bAlternateSetting
01H
bNumEndpoints
0DH
bInterfaceClass
FFH
bInterfaceSubClass
FFH
bInterfaceProtocol
FFH
iInterface
00H
Interface 0, Alternate Setting 1 has thirteen endpoints, whose individual descriptors follow the
interface descriptor. The alternate settings have no string indices.
Table 5-13. Default Interface 0, Alternate Setting 1, INT Endpoint Descriptor
Offset
Field
Description
Value
bLength
07H
bDescriptorType
05H
bEndpointAddress
81H
bmAttributes
03H
wMaxPacketSize (L)
10H
wMaxPacketSize (H)
00H
bInterval
0AH
Interface 0, Alternate Setting 1 has one interrupt endpoint, IN1, which has a maximum packet
size of 16 and a polling interval of 10 ms.
Page 5-15
Page 5-16
Field
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
Description
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN2
XFR Type = BULK
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT2
XFR Type = BULK
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN4
XFR Type = BULK
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT4
XFR Type = BULK
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN6
XFR Type = BULK
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT6
XFR Type = BULK
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Value
07H
05H
82H
02H
40H
00H
00H
07H
05H
02H
02H
40H
00H
00H
07H
05H
84H
02H
40H
00H
00H
07H
05H
04H
02H
40H
00H
00H
07H
05H
86H
02H
40H
00H
00H
07H
05H
06H
02H
40H
00H
00H
Interface 0, Alternate Setting 1 has six bulk endpoints with max packet sizes of 64 bytes. Even
numbered endpoints were chosen to allow endpoint pairing. For more on endpoint pairing, see
Chapter 6. "EZ-USB FX Bulk Transfers".
Table 5-15. Default Interface 0, Alternate Setting 1, ISO Endpoint Descriptors
Offset
0
1
2
3
4
5
6
0
1
2
3
4
5
6
0
1
2
3
4
5
6
0
1
2
3
4
5
6
0
1
2
3
4
5
6
0
1
2
3
4
5
6
Field
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
Description
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN8
XFR Type = ISO
Maximum Packet Size = 16 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT8
XFR Type = ISO
Maximum Packet Size = 16 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN9
XFR Type = ISO
Maximum Packet Size = 16 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT9
XFR Type = ISO
Maximum Packet Size = 16 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN10
XFR Type = ISO
Maximum Packet Size = 16 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT10
XFR Type = ISO
Maximum Packet Size = 16 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Value
07H
05H
88H
01H
10H
00H
01H
07H
05H
08H
01H
10H
00H
01H
07H
05H
89H
01H
10H
00H
01H
07H
05H
09H
01H
10H
00H
01H
07H
05H
8AH
01H
10H
00H
01H
07H
05H
0AH
01H
10H
00H
01H
Page 5-17
Field
bLength
Description
Length of the Interface Descriptor
Value
09H
04H
bInterfaceNumber
00H
02H
bNumEndpoints
0DH
bInterfaceClass
FFH
bInterfaceSubClass
FFH
bInterfaceProtocol
FFH
iInterface
00H
Interface 0, Alternate Setting 2 has thirteen endpoints, whose individual descriptors follow the
interface descriptor. Alternate Setting 2 differs from Alternate Setting 1 in the maximum packet
sizes of its interrupt endpoint and two of its isochronous endpoints (EP8IN and EP8OUT).
Table 5-17. Default Interface 0, Alternate Setting 1, INT Endpoint Descriptor
Offset
Field
Description
Value
bLength
07H
bDescriptorType
05H
bEndpointAddress
81H
bmAttributes
03H
wMaxPacketSize (L)
40H
wMaxPacketSize (H)
00H
bInterval
0AH
Alternate Setting 2 for the Interrupt 1-IN increases the maximum packet size for the interrupt
endpoint to 64.
Page 5-18
Field
bLength
bDescriptor Type
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
Description
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN2
XFR Type = BULK
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT2
XFR Type = BULK
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN4
XFR Type = BULK
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT4
XFR Type = ISO
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN6
XFR Type = BULK
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT6
XFR Type = BULK
Maximum Packet Size = 64 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds
Value
07H
05H
82H
02H
40H
00H
00H
07H
05H
02H
02H
40H
00H
00H
07H
05H
84H
02H
40H
00H
00H
07H
05H
04H
02H
40H
00H
00H
07H
05H
86H
02H
40H
00H
00H
07H
05H
06H
02H
40H
00H
00H
Page 5-19
Page 5-20
Field
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
bLength
bDescriptorType
bEndpointAddress
bmAttributes
wMaxPacketSize (L)
wMaxPacketSize (H)
bInterval
Description
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN8
XFR Type = ISO
Maximum Packet Size = 256 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT8
XFR Type = ISO
Maximum Packet Size = 256 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN9
XFR Type = ISO
Maximum Packet Size = 16 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT9
XFR Type = ISO
Maximum Packet Size = 16 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = IN10
XFR Type = ISO
Maximum Packet Size = 16 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Length of this Endpoint Descriptor
Descriptor Type = Endpoint
Endpoint Direction (1 is in) and Address = OUT10
XFR Type = ISO
Maximum Packet Size = 16 Bytes
Maximum Packet Size - High
Polling Interval in Milliseconds (1 for iso)
Value
07H
05H
88H
01H
00H
01H
01H
07H
05H
08H
01H
00H
01H
01H
07H
05H
89H
01H
10H
00H
01H
07H
05H
09H
01H
10H
00H
01H
07H
05H
8AH
01H
10H
00H
01H
07H
05H
0AH
01H
10H
00H
01H
The only differences between Alternate Settings 1 and 2 are the maximum packet sizes for EP8IN
and EP8OUT. This is a high-bandwidth setting.
Page 5-21
Page 5-22
6.1
Introduction
A E
I D N
N D D
R P
C
R
C
5
Token Packet
D
A
T
A
0
Payload
Data
C
R
C
1
6
Data Packet
A
C
K
H/S Pkt
A E
I D N
N D D
R P
C
R
C
5
D
A
T
A
1
Token Packet
Payload
Data
Data Packet
C
R
C
1
6
A
C
K
H/S Pkt
Direction
Bidir
IN
OUT
IN
OUT
IN
OUT
IN
OUT
IN
OUT
IN
OUT
IN
OUT
Type
Control
Bulk/Int
Bulk/Int
Bulk/Int
Bulk/Int
Bulk/Int
Bulk/Int
Bulk/Int
Bulk/Int
Bulk/Int
Bulk/Int
Bulk/Int
Bulk/Int
Bulk/Int
Bulk/Int
Size
64/64
64
64
64
64
64
64
64
64
64
64
64
64
64
64
The USB Specification allows maximum packet sizes of 8, 16, 32, or 64 bytes for bulk data, and 1 64 bytes for interrupt data. EZ-USB FX provides the maximum 64 bytes of buffer space for each of
Page 6-1
The 8051 should never read or write an endpoint buffer or byte count register while the
endpoints busy bit is set.
When an endpoint becomes ready for 8051 service, the USB core sets an interrupt request bit.
The EZ-USB FX vectored interrupt system separates the interrupt requests by endpoint to automatically transfer control to the ISR (Interrupt Service Routine) for the endpoint requiring service.
Chapter 12. "EZ-USB FX Interrupts" fully describes this mechanism.
Figure 6-2 illustrates the registers and bits associated with bulk transfers.
Page 6-2
Initialization
IN07VAL
Data transfer
2
IN2BUF
USBPAIR
o67
o45
o23
i67
i45
64 Byte
Endpoint
Buffer
i23
IN07IEN
IN2BC
Byte Count
Interrupt Control
IN2CS
IN07IRQ
Initialization
OUT07VAL
Data transfer
2
OUT4BUF
USBPAIR
o67
o45
o23
i67
i45
64 Byte
Endpoint
Buffer
i23
OUT07IEN
OUT4BC
Byte Count
Interrupt Control
B
OUT07IRQ
Page 6-3
Bulk IN Transfers
...
A
I D
N D
R
E
N
D
P
D
A
T
A
1
C
R
C
5
Token Packet
C
R
C
1
6
Payload
Data
Data Packet
...
H
A E
I D N
N D D
R P
C
R
C
5
Token Packet
A E
I D N
N D D
R P
A
C
K
C
R
C
5
Token Packet
H/S Pkt
(INnBC loaded)
4
..
.
N
A
K
H/S Pkt
N
A
K
A E
I D N
N D D
R P
...
H/S Pkt
Load INnBC
C
R
C
5
Token Packet
H
D
A
T
A
0
Payload
Data
Data Packet
C
R
C
1
6
A
C
K
6.2
H/S Pkt
Page 6-4
loads the endpoints byte count register (INnBC) with the number of bytes in the packet (6). Loading the byte count re-arms the given endpoint. When the next IN token arrives (7) the USB core
transfers the next data packet (8).
6.3
Interrupt Transfers
6.4
Suppose 220 bytes are to be transferred to the host using endpoint 6-IN. Further assume that
MaxPacketSize of 64 bytes for endpoint 6-IN has been reported to the host during enumeration.
Because the total transfer size exceeds the maximum packet size, the 8051 divides the 220-byte
transfer into four transfers of 64, 64, 64, and 28 bytes.
After loading the first 64 bytes into IN6BUF (at 0x7C00), the 8051 loads the byte count register
IN6BC with the value 64. Writing the byte count register instructs the EZ-USB core to respond to
the next host IN token by transmitting the 64 bytes in the buffer. Until the byte count register is
loaded to arm the IN transfer, any IN tokens issued by the host are answered by EZ-USB FX with
NAK (Not-Acknowledge) tokens, telling the USB host that the endpoint is not yet ready with data.
The host continues to issue IN tokens to endpoint 6-IN until data is ready for transferwhereupon
the USB core replaces NAKs with valid data.
When the 8051 initiates an IN transfer by loading the endpoints byte count register, the EZ-USB
core sets a busy bit to instruct the 8051 to hold off loading IN6BUF until the USB transfer is finished. When the IN transfer is complete and successfully acknowledged, the EZ-USB core resets
the endpoint 6-IN busy bit and generates an endpoint 6-IN interrupt request. If the endpoint 6-IN
interrupt is enabled, program control automatically vectors to the data transfer routine for further
action (Autovectoring is enabled by setting AVEN=1. Refer to Chapter 12. "EZ-USB FX Interrupts").
The 8051 now loads the next 64 bytes into IN6BUF and then loads the EPINBC Register with 64
for the next two transfers. For the last portion of the transfer, the 8051 loads the final 28 bytes into
IN6BUF, and loads IN6BC with 28. This completes the transfer.
Page 6-5
6.5
USB bulk OUT data travels from host to device. The host requests an OUT transfer by issuing an
OUT token to EZ-USB FX, followed by a packet of data. The USB core then responds with an
ACK, if it correctly received the data. If the endpoint buffer is not ready to accept data, the USB
core discards the hosts OUT data and returns a NAK token, indicating not ready. In response,
the host continues to send OUT tokens and data to the endpoint until the USB core responds with
an ACK.
A E
O
D N
U
D D
T
R P
D
A
T
A
1
C
R
C
5
Payload
Data
(OUTnBC loaded,
OUTnBSY=1)
4
A E
O
D N
U
D D
T
R P
C
R
C
5
Token Packet
H
C
R
C
5
D
A
T
A
0
Token Packet
H/S Pkt
Payload
Data
C
R
C
1
6
Data Packet
N
A
K
H/S Pkt
EPnOUT Interrupt,
OUTnBSY=0
6
D
A
T
A
0
A E
O
D N
U
D D
T
R P
A
C
K
Data Packet
Token Packet
..
.
C
R
C
1
6
C
R
C
1
6
Payload
Data
Data Packet
N
A
K
H/S Pkt
A E
O
D N
U
D D
T
R P
C
R
C
5
Token Packet
D
A
T
A
0
D
Payload
Data
Data Packet
C
R
C
1
6
A
C
K
..
.
...
H/S Pkt
EPnOUT Interrupt,
OUTnBSY=0
Page 6-6
Each EZ-USB FX bulk OUT endpoint has a byte count register, which serves two purposes. The
8051 reads the byte count register to determine how many bytes were received during the last
OUT transfer from the host. The 8051 writes the byte count register (with any value) to tell the
USB core that is has finished reading bytes from the buffer, making the buffer available to accept
the next OUT transfer. The OUT endpoints come up (after reset) armed, so the byte count register
writes are required only for OUT transfers after the first one.
In the bulk OUT transfer illustrated in Figure 6-4, the 8051 has previously loaded the endpoints
byte count register with any value to arm receipt of the next OUT transfer. Loading the byte count
register causes the EZ-USB core to set the OUT endpoints busy bit to 1, indicating that the 8051
should not use the endpoints buffer.
The host issues an OUT token (1), followed by a packet of data (2), which the USB core acknowledges, clears the endpoints busy bit and generates an interrupt request (3). This notifies the 8051
that the endpoint buffer contains valid USB data. The 8051 reads the endpoints byte count register
to find out how many bytes were sent in the packet, and transfers that many bytes out of the endpoint buffer.
In a multi-packet transfer, the host then issues another OUT token (4) along with the next data
packet (5). If the 8051 has not finished emptying the endpoint buffer, the EZ-USB FX host issues a
NAK, indicating busy (6). The data at (5) is shaded to indicate that the USB core discards it, and
does not over-write the data in the endpoints OUT buffer.
The host continues to send OUT tokens (4, 5, and 6) that are greeted by NAKs until the buffer is
ready. Eventually, the 8051 empties the endpoint buffer data, and then loads the endpoints byte
count register (7) with any value to re-arm the USB core. Once armed and when the next OUT
token arrives (8) the USB core accepts the next data packet (9).
Initializing OUT Endpoints
When the EZ-USB FX chip comes out of reset, or when the USB host issues a bus reset, the
USB core arms OUT endpoints 1-7 by setting their busy bits to 1. Therefore, they are initially
ready to accept one OUT transfer from the host. Subsequent OUT transfers are NAKd until
the appropriate OUTnBC Register is loaded to re-arm the endpoint.
The EZ-USB core takes care of USB housekeeping chores such as CRC checks and data toggle
PIDs. When an endpoint 6-OUT interrupt occurs and the busy bit is cleared, the user is assured
that the data in the endpoint buffer was received error-free from the host. The USB core automatically checks for errors, and requests the host to re-transmit data if it detects any errors using the
built-in USB error checking mechanisms (CRC checks and data toggles).
Page 6-7
6.6
Endpoint Pairing
Table 6-2. Endpoint Pairing Bits (in the USB PAIR Register)
Bit
Name
PR6OUT PR4OUT
PR2OUT
PR6IN
PR4IN
PR2IN
Paired
6 OUT
4 OUT
2 OUT
6 IN
4 IN
2 IN
Endpoints
7 OUT
5 OUT
3 OUT
7 IN
5 IN
3 IN
The 8051 sets endpoint pairing bits to 1 to enable double-buffering of the bulk endpoint buffers.
With double-buffering enabled, the 8051 can operate on one data packet while another is being
transferred over USB. The endpoint busy and interrupt request bits function identically, so the
8051 code requires little code modification to support double-buffering.
When an endpoint is paired, the 8051 uses only the even-numbered endpoint of the pair. The
8051 should not use the paired odd endpoint. For example, suppose it is desired to use endpoint
2-IN as a double-buffered endpoint. This pairs the IN2BUF and IN3BUF buffers, although the
8051 accesses the IN2BUF buffer only. The 8051 sets PR2IN=1 (in the USBPAIR Register) to
enable pairing; sets IN2VAL=1 (in the IN07VAL Register) to make the endpoint valid; and then
uses the IN2BUF buffer for all data transfers. The 8051 should not write the IN3VAL Bit, enable
IN3 interrupts, access the EP3IN buffer, or load the IN3BC byte count register.
6.7
INnBSY=1 indicates that both endpoint buffers are in use, and the 8051 should not load new IN
data into the endpoint buffer. When INnBSY=0, either one or both of the buffers is available for
loading by the 8051. The 8051 can keep an internal count that increments on EPnIN interrupts
and decrements on byte count loads to determine whether one or two buffers are free. Or, the
8051 can simply check for INnBSY=0 after loading a buffer (and loading its byte count register to
re-arm the endpoint) to determine if the other buffer is free.
If an IN endpoint is paired and it is desired to clear the busy bit for that endpoint, do the
following: (a) write any value to the even endpoints byte count register twice, and (b) clear
the busy bit for both endpoints in the pair. This is the only code difference between paired
and unpaired use of an IN endpoint.
A bulk IN endpoint interrupt request is generated whenever a packet is successfully transmitted
over USB. The interrupt request is independent of the busy bit. If both buffers are filled and one is
sent, the busy bit transitions from 1 to 0. If one buffer is filled and then sent, the busy bit starts and
remains at 0. In either case, an interrupt request is generated to tell the 8051 that a buffer is free.
Page 6-8
6.8
OUTnBSY=1 indicates that both endpoint buffers are empty, and no data is available to the 8051.
When OUTnBSY=0, either one or both of the buffers holds USB OUT data. The 8051 can keep an
internal count that increments on EPnOUT interrupts and decrements on byte count loads to determine whether one or two buffers contain data. Or, the 8051 can simply check for OUTnBSY=0
after unloading a buffer (and loading its byte count register to re-arm the endpoint) to determine if
the other buffer contains data.
6.9
Address
Mirrored
7F00-7F3F
7EC0-7EFF
7E80-7EBF
7E40-7E7F
7E00-7E3F
7DC0-7DFF
7D80-7DBF
7D40-7D7F
7D00-7D3F
7CC0-7CFF
7C80-7CBF
7C40-7C7F
7C00-7C3F
7BC0-7BFF
7B80-7BBF
7B40-7B7F
1F00-1F3F
1EC0-1EFF
1E80-1EBF
1E40-1E7F
1E00-1E3F
1DC0-1DFF
1D80-1DBF
1D40-1D7F
1D00-1D3F
1CC0-1CFF
1C80-1CBF
1C40-1C7F
1C00-1C3F
1BC0-1BFF
1B80-1BBF
1B40-1B7F
Table 6-3 shows the RAM locations for the sixteen 64-byte buffers for endpoints 0-7 IN and OUT.
These buffers are positioned at the bottom of the EZ-USB FX register space so that any buffers not
used for endpoints can be reclaimed as general purpose data RAM. The top of memory for the 8KB EZ-USB FX part is at 0x1B3F. However, if the endpoints are allocated in ascending order, starting with the lowest numbered endpoints, the higher numbered unused endpoints can effectively
move the top of memory to utilize the unused endpoint buffer RAM as data memory. For example,
an application that uses endpoint 1-IN, 2-IN/OUT (paired), 4-IN and 4-OUT can use 0x1B400x1CBF as data memory. Chapter 3. "EZ-USB FX Memory" provides full details of the EZ-USB FX
memory map.
Page 6-9
Uploads or Downloads to unused bulk memory can be done only at the Mirrored (low)
addresses shown in Table 6-3.
In these cases, the 8051 can directly clear the data toggle for each of the bulk/interrupt/control
endpoints, using the TOGCTL Register (Figure 6-5).
TOGCTL
7FD7
b7
b6
b5
b4
b3
b2
b1
b0
IO
EP2
EP1
EP0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Currently, there appears to be no reason to set a data toggle to DATA1. The S Bit is provided for generality.
Page 6-10
To clear an endpoints data toggle, the 8051 performs the following sequence:
1. Selects the endpoint by writing the value 000D0EEE binary to the TOGCTL Register, where D
is the direction and EEE is the endpoint number.
2. Clears the toggle bit by writing the value 001D0EEE binary to the TOGCTL Register.
After Step 1, the 8051 may read the state of the data toggle by reading the TOGCTL Register
checking Bit 7.
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
start:
fill:
mov
mov
mov
mov
movx
inc
djnz
SP,#STACK-1
dptr,#IN2BUF
r7,#64
a,r7
@dptr,a
dptr
r7,fill
; set stack
; fill EP2IN buffer with
; decrementing counter
mov
mov
mov
mov
movx
r1,#0
r2,#0
dptr,#IN2BC
a,#40h
@dptr,a
;
;
;
;
;
mov
a,@dptr
jnb
mov
movx
jb
dptr,#IN2CS
acc.1,serviceIN2
dptr,#OUT2CS
a,@dptr
acc.1,loop
inc
mov
movx
sjmp
r2
dptr,#OUT2BC
@dptr,a
loop
inc
mov
mov
movx
inc
r1
dptr,#IN2BUF
a,r1
@dptr,a
dptr
; IN packet counter
; update the first data byte
; in EP2IN buffer
;
loop:
movx
r1 is IN token counter
r2 is OUT token counter
Point to EP2 Byte Count Register
64-byte transfer
arm the IN2 transfer
;
serviceOUT2:
;
serviceIN2:
Page 6-11
mov
movx
mov
mov
movx
sjmp
a,r2
@dptr,a
dptr,#IN2BC
a,#40h
@dptr,a
loop
END
Page 6-12
Op-Code
02
AddrH
AddrL*
Instruction
LJMP
The byte inserted by the EZ-USB core at address 0x45 depends on which bulk endpoint requires
service. Table 6-5 shows all INT2 vectors, with the bulk endpoint vectors shaded.
Table 6-5. Byte Inserted by USB Core at Location 0x45 if AVEN=1
Interrupt
SUDAV
SOF
SUTOK
SUSPEND
USBRES
Reserved
EP0-IN
EP0-OUT
EP1-IN
EP1OUT
EP2IN
EP2OUT
EP3-IN
EP3-OUT
EP4-IN
EP4-OUT
EP5-IN
EP5-OUT
EP6-IN
EP6-OUT
EP7-IN
EP7-OUT
Inserted Byte at
0x45
0x00
0x04
0x08
0x0C
0x10
0x14
0x18
0x1C
0x20
0x24
0x28
0x2C
0x30
0x34
0x38
0x3C
0x40
0x44
0x48
0x4C
0x50
0x54
The vector values are four bytes apart. This allows the programmer to build a jump table to each of
the interrupt service routines. Note that the jump table must begin on a page (256 byte) boundary
Page 6-13
Any USB ISR should clear the 8051 INT2 interrupt request bit before clearing any of the
EZ-USB FX endpoint IRQ bits, to avoid losing interrupts. Interrupts are discussed in more
detail in Chapter 12. "EZ-USB FX Interrupts"
Individual interrupt request bits are cleared by writing 1 to them to simplify code. For
example, to clear the endpoint 2-IN IRQ, simply write 0000100 to IN07IRQ. This will not
disturb the other interrupt request bits. Do not read the contents of IN07IRQ, logical-OR
the contents with 01, and write it back. This clears all other pending interrupts because
you are writing 1s to them.
Page 6-14
CSEG
AT 300H
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
ljmp
db
SUDAV_ISR
0
SOF_ISR
0
SUTOK_ISR
0
SUSP_ISR
0
URES_ISR
0
IBN_ISR
0
EP0IN_ISR
0
EP0OUT_ISR
0
EP1IN_ISR
0
EP1OUT_ISR
0
EP2IN_ISR
0
EP2OUT_ISR
0
EP3IN_ISR
0
EP3OUT_ISR
0
EP4IN_ISR
0
EP4OUT_ISR
0
EP5IN_ISR
0
EP5OUT_ISR
0
EP6IN_ISR
0
EP6OUT_ISR
0
EP7IN_ISR
0
EP7OUT_ISR
0
USB_Jump_Table:
Page 6-15
43h
USB_Jump_Table
Page 6-16
loop:
jnb
clr
got_EP6_data,loop
got_EP6_data
; clear my flag
;
; The user sent bytes to OUT6 endpoint using the USB Control Panel.
; Find out how many bytes were sent.
;
mov
dptr,#OUT6BC
; point to OUT6 byte count register
movx
a,@dptr
; get the value
mov
r7,a
; stash the byte count
mov
r6,a
; save here also
;
; Transfer the bytes received on the OUT6 endpoint to the IN6 endpoint
; buffer. Number of bytes in r6 and r7.
;
mov
dptr,#OUT6BUF
; first data pointer points to EP2OUT buffer
inc
dps
; select the second data pointer
mov
dptr,#IN6BUF
; second data pointer points to EP2IN buffer
inc
dps
; back to first data pointer
transfer: movx
a,@dptr
; get OUT byte
inc
dptr
; bump the pointer
inc
dps
; second data pointer
movx
@dptr,a
; put into IN buffer
inc
dptr
; bump the pointer
inc
dps
; first data pointer
djnz
r7,transfer
;
; Load the byte count into IN6BC. This arms in IN transfer
;
mov
dptr,#IN6BC
mov
a,r6
; get other saved copy of byte count
movx
@dptr,a
; this arms the IN transfer
;
; Load any byte count into OUT6BC. This arms the next OUT transfer.
;
mov
dptr,#OUT6BC
movx
@dptr,a
; use whatever is in acc
sjmp
loop
; start checking for another OUT6 packet
Figure 6-10. Background Program Transfers Endpoint 6-OUT Data to Endpoint 6-IN
The main program loop tests the got_EP6_data flag, waiting until it is set by the endpoint 6
OUT interrupt service routine in Figure 6-10. This indicates that a new data packet has arrived
in OUT6BUF. Then the service routine is entered, where the flag is cleared in line 2. The number of bytes received in OUT6BUF is retrieved from the OUT6BC Register (Endpoint 6 Byte
Count) and saved in Registers R6 and R7 in lines 7-10.
The dual data pointers are initialized to the source (OUT6BUF) and destination (IN6BUF) buffers for the data transfer in lines 15-18. These labels represent the start of the 64-byte buffers
for endpoint 6-OUT and endpoint 6-IN, respectively. Each byte is read from the OUT6BUF
buffer and written to the IN6BUF buffer in lines 19-25. The saved value of OUT6BC is used as
a loop counter in R7 to transfer the exact number of bytes that were received over endpoint 6OUT.
Page 6-17
DMA cannot be used for this Loopback since the source and destination would be in the
same RAM block.
5. Initialize the endpoints and enable the interrupts.
start:
mov
SP,#STACK-1
; set stack
;
; Enable USB interrupts and Autovector
;
mov
dptr,#USBBAV
; enable Autovector
movx
a,@dptr
setb
acc.0
; AVEN bit is bit 0
movx
@dptr,a
;
movx
dptr,#USBBAV
movx
a, @dptr
setb
acc.4
; enable the SFR-clearing feature
movx
@dptr, a
; for INT2
;
mov
dptr,#OUT07IEN
; EP0-7 OUT int enables Register
;
mov
a,#01000000b
; set bit 6 for EP6OUT interrupt enable
movx
@dptr,a
; enable EP6OUT interrupt
;
; Enable INT2 and 8051 global interrupts
;
setb
ex2
; enable int2 (USB interrupt)
setb
EA
; enable 8051 interrupts
clr
got_EP6_data
; clear my flag
Page 6-18
AUTOPTRH
7FE3
b7
b6
b5
b4
b3
b2
b1
b0
A15
A14
A13
A12
A11
A10
A9
A8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
AUTOPTRL
7FE4
b7
b6
b5
b4
b3
b2
b1
b0
A7
A6
A5
A4
A3
A2
A1
A0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 6-19
AUTODATA
Autopointer Data
7FE5
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Init:
;
loop:
mov
mov
movx
mov
mov
movx
mov
mov
mov
dptr,#AUTOPTRH
a,#HIGH(OUT4BUF)
@dptr,a
dptr,#AUTOPTRL
a,#LOW(OUT4BUF)
@dptr,a
dptr,#AUTODATA
r0,#80H
r2,#8
movx
mov
inc
a,@dptr
@r0,a
r0
djnz
r2,loop
;
;
;
;
;
The Autopointer works only with internal program/data RAM. It does not work with memory outside the chip, or with internal RAM that is made available when ISODISAB=1. See
Section 10.6.1. "Disable ISO" for a description of the ISODISAB bit.
Page 6-20
The EZ-USB FX chip should never be a speed bottleneck in a USB system since it can DMA Data
at 24Mhz. It also gives the 8051 ample time for other processing duties between endpoint buffer
loads.
The Autopointer can be used to quickly move data anywhere in RAM, not just the bulk endpoint
buffers. For example, it can be used to good effect in an application that calls for transferring a
block of data into RAM, processing the data, and then transferring the data to a bulk endpoint
buffer.
Page 6-21
Page 6-22
7.1
Introduction
8051 Registers
Slave FIFOS
Device Pins
ASEL
sel
AOUTDATA
Aout
AINDATA
Ain
BSEL
sel
BOUTDATA
Bout
BINDATA
Bin
SLRD
SLWR
XCLK
Figure 7-1. The Four 64-Byte Slave FIFOs Configured for 16-Bit Mode
Figure 7-1 illustrates the four slave FIFOs in EZ-USB FX. The slave FIFOs, each 64 bytes in
length, serve as general-purpose buffers between external logic and 8051 registers. They are
called slave FIFOs because the outside logic can supply the timing signals. The FIFOs are
Page 7-1
SynchronousSLRD and SLWR pins are enables for the XCLK clock pin.
External logic accesses the FIFOs through two 8-bit data buses, which double as general-purpose
I/O ports PORTB and PORTD. When used for FIFO access, the data buses are bi-directional, with
output drivers controlled by the AOE and BOE pins.
Two FIFO select signals, ASEL and BSEL, are used to select the FIFO in two modes that use both
FIFOs: 8-bit mode, and double-byte mode. These modes and the role of the ASEL and BSEL pins
are illustrated in Figure 7-2 and Figure 7-3.
Page 7-2
Aout
CS
ASEL
AFI[7..0] (PORTB pins)
Ain
Bout
CS
CS
AOE
BSEL
PD[7..0] (PORTD pins)
or
Bin
CS
BFI[7..0]for
forGPIF
GPIF
GDB[7..0]
XCLK
SLRD
SLWR
Page 7-3
Aout
CS
ASEL
L
Ain
CS
M
"LO"
The IN FIFO receives 16-bit data as double bytes, interleaved from PORTD first and then
from PORTB. The data interleaving is automatic, with two bytes written to the FIFO per
external write strobe. The interleave order input from the ports is the same whether the
destination FIFO is A-IN or B-IN.
The OUT FIFO transmits two bytes, the first to PORTD and the second to PORTB, per
external read strobe. The interleave order output to the ports is the same whether the
source FIFO is A-OUT or B-OUT.
Page 7-4
Data registers give the 8051/DMA access to IN FIFO and OUT FIFO data.
Instruction
0x53
LJMP
0x54
AddrH
0x55 *
AddrL
Notes
Loc 53-55 are the INT4 Interrupt Vector.
EZ-USB FX logic replaces this byte when
AV4EN=1.
Page 7-5
Source
Meaning
0x40
0x80
AINPF
0x44
0x84
BINPF
0x48
0x88
AOUTPF
0x4C
0x8C
BOUTPF
0x50
0x90
AINEF
0x54
0x94
BINEF
0x58
0x98
AOUTEF
0x5C
0x9C
BOUTEF
0x60
0xA0
AINFF
0x64
0xA4
BINFF
0x68
0xA8
AOUTFF
0x6C
0xAC
BOUTFF
0x70
0xB0
GPIFDONE
0x74
0xB4
GPIFWF
0x78
0xB8
The first column shows the value in the IVEC4 Register for each FIFO interrupt source.
If two or more INT4 interrupt requests occur simultaneously, they are serviced in the order shown
in Table 7-2, with AINPF having the highest priority and DMADONE the lowest. Interrupt requests
remain pending while a higher level interrupt is serviced.
7.2
In the following FIFO diagrams, the 8051-access side is on the left, and the external pins are on
the right.
Page 7-6
AOUTPF
AOUTEF
AOUTPF
AOUTPFPIN
AOUTFF
AOUTFLAG
ABOUTTF
AOUTEMTY
AOUTDATA
AFI[7..0] (PORTB)
Aout
AOE
AOUTBC
ABPOLAR
AINBC
AINDATA
Ain
AINFULL
ABINTF
AINFLAG
AINFF
AINEF
AINPF
AINPFPIN
AINPF
AINDATA
7800
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
Page 7-7
AOUTPF
AOUTEF
AOUTPF
AOUTPFPIN
AOUTFF
AOUTFLAG
ABOUTTF
AOUTEMTY
AOUTDATA
AFI[7..0] (PORTB)
Aout
AOE
AOUTBC
ABPOLAR
AINBC
AINDATA
Ain
AINFULL
ABINTF
AINFLAG
AINFF
AINEF
AINPF
AINPFPIN
AINPF
AINBC
7801
b7
b6
b5
b4
b3
b2
b1
b0
D6
D5
D4
D3
D2
D1
D0
Page 7-8
AOUTPF
AOUTEF
AOUTPF
AOUTPFPIN
AOUTFF
AOUTFLAG
ABOUTTF
AOUTEMTY
AOUTDATA
AFI[7..0] (PORTB)
Aout
AOE
AOUTBC
ABPOLAR
AINBC
AINDATA
Ain
AINFULL
ABINTF
AINFLAG
AINFF
AINEF
AINPF
AINPFPIN
AINPF
7802
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Another register, AINPFPIN (Section 7.2.3.3. "A-IN FIFO Pin Programmable Flag") corresponds to an A-IN FIFO programmable flag that drives an output pin, not an internal flag
bit.
Page 7-9
Bit 7:
LTGT
If LTGT=0, the AINPF flag goes true, when the number of bytes in the FIFO is less than or
equal to the programmed value in D[6..0].
If LTGT=1, the AINPF flag goes true, when the number of bytes in the FIFO is greater than or
equal to the value programmed into D[6..0].
Bit 6-0:
PFVAL
This value, along with the LTGT Bit, determines when the programmable flag for the A-IN
FIFO becomes active. The 8051 programs this register to indicate various degrees of A-IN
FIFO fullness to suit the application. The following two sections show the interaction of the
LTGT Bit and the programmed value for two cases, a filling FIFO and an emptying FIFO.
D[6..0]
Bytes
in
FIFO
AINPF
48
45
48
46
48
47
48
48
48
49
48
50
Page 7-10
D[6..0]
Bytes
in
FIFO
AINPF
48
51
48
50
48
49
48
48
48
47
48
46
AOUTPF
AOUTEF
AOUTPF
AOUTPFPIN
AOUTFF
AOUTFLAG
ABOUTTF
AOUTEMTY
AOUTDATA
AFI[7..0] (PORTB)
Aout
AOE
AOUTBC
ABPOLAR
AINBC
AINDATA
Ain
AINFULL
ABINTF
AINFLAG
AINFF
AINEF
AINPF
AINPF
AINPFPIN
Page 7-11
AINPFPIN
7803
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 7-12
BOUTPF
BOUTEF
BOUTPF
BOUTPFPIN
BOUTFF
BOUTFLAG
ABOUTTF
BOUTEMTY
BOUTDATA
BFI[7..0] (PORTD)
Bout
BOE
BOUTBC
ABPOLAR
BINBC
BINDATA
Bin
BINFULL
ABINTF
BINFLAG
BINFF
BINEF
BINPF
BINPFPIN
BINPF
7805
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
Page 7-13
BOUTPF
BOUTEF
BOUTPF
BOUTPFPIN
BOUTFF
BOUTFLAG
ABOUTTF
BOUTEMTY
BOUTDATA
BFI[7..0] (PORTD)
Bout
BOE
BOUTBC
ABPOLAR
BINBC
BINDATA
Bin
BINFULL
ABINTF
BINFLAG
BINFF
BINEF
BINPF
BINPFPIN
BINPF
7806
b7
b6
b5
b4
b3
b2
b1
b0
D6
D5
D4
D3
D2
D1
D0
Page 7-14
BOUTPF
BOUTEF
BOUTPF
BOUTPFPIN
BOUTFF
BOUTFLAG
ABOUTTF
BOUTEMTY
BOUTDATA
BFI[7..0] (PORTD)
Bout
BOE
BOUTBC
ABPOLAR
BINBC
BINDATA
Bin
BINFULL
ABINTF
BINFLAG
BINFF
BINEF
BINPF
BINPFPIN
BINPF
7807
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Another register, BINPFPIN (Section 7.2.7. "B-IN FIFO Pin Programmable Flag") corresponds to a B-IN FIFO programmable flag that drives an output pin, not an internal flag bit.
Page 7-15
Bit 7:
LTGT
If LTGT=0, the BINPF flag goes true when the number of bytes in the FIFO is less than or
equal to the programmed value in D[6..0].
If LTGT=1, the BINPF flag goes true when the number of bytes in the FIFO is greater than or
equal to the value programmed into D[6..0].
Bit 6-0:
PFVAL
This value, along with the LTGT Bit, determines when the programmable flag for the B-FIFO
becomes active. The 8051 programs this register to indicate various degrees of B-FIFO fullness to suit the application. The following two sections in this chapter show the interaction of
the LTGT Bit and the programmed value for two cases, a filling FIFO and an emptying FIFO.
D[6..0]
Bytes
in
FIFO
BINPF
48
45
48
46
48
47
48
48
48
49
48
50
Page 7-16
D[6..0]
Bytes
in
FIFO
BINPF
48
51
48
50
48
49
48
48
48
47
48
46
BOUTPF
BOUTEF
BOUTPF
BOUTPFPIN
BOUTFF
BOUTFLAG
ABOUTTF
BOUTEMTY
BOUTDATA
BFI[7..0] (PORTD)
Bout
BOE
BOUTBC
ABPOLAR
BINBC
BINDATA
Bin
BINFULL
ABINTF
BINFLAG
BINFF
BINEF
BINPF
BINPF
BINPFPIN
Page 7-17
BINPFPIN
7808
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
ABOUTTF
1
AOUTDATA
Aout
AOUTDATA
AINDATA
Ain
AINDATA
Aout
1
0
Ain
ABINTF
BOUTDATA
Bout
BOUTDATA
Bout
BINDATA
Bin
BINDATA
Bin
Figure 7-20. 8051 FIFO Toggle Mode vs. Normal Mode Diagram
Page 7-18
ABINCS
780A
b7
b6
b5
b4
b3
b2
b1
b0
INTOG
INSEL
AINPF
AINEF
AINFF
BINPF
BINEF
BINFF
R/W
R/W
Bit 7:
INTOG
A special FIFO toggle mode switches automatically between the A-IN and B-IN FIFOs each
time the 8051 reads data from the AINDATA Register. The toggle mechanism works only for
programmed 8051 transfers, not DMA transfers.
When INTOG=0, the A-IN and B-IN FIFOs operate in Normal Mode, as illustrated in diagram
(a) in Figure 7-20 on the previous page.
When INTOG=1, the FIFOs operate in Toggle Mode, as illustrated in diagram (b) in Figure 720. The selected FIFO switches between the A-IN and B-IN FIFOs after every 8051 read of the
AINDATA Register. The selected FIFO is indicated by the INSEL Bit (Bit 6).
Bit 6:
INSEL
This bit selects IN FIFO A or B when the 8051 reads the AINDATA Register. When
INSEL=0, the B-IN FIFO is read. When INSEL=1, the A-IN FIFO is read. When INTOG=1,
this bit complements automatically (toggles) after every 8051 read of AINDATA. This has
the effect of automatically toggling between the A-IN and B-IN FIFOs for successive reads
of AINDATA.
The 8051 can directly write this bit to select manually the A-IN or B-IN FIFO. More commonly, the Toggle Mode will be used since it allows 16-bit transfers using the 8051 without
requiring the 8051 to switch between the FIFOs.
Bit 5:
AINPF
AINPF=1 when the A-IN FIFO byte count satisfies the conditions programmed into the programmable FIFO flag register AINPF; otherwise, AINPF=0. A zero-to-one transition of this flag
sets the interrupt request bit AINPFIR.
Page 7-19
AINEF
AINEF=1 when the A-IN FIFO is empty; otherwise, AINEF=0. The flag goes active after the
8051 or DMA system reads the last byte in the A-IN FIFO. A zero-to-one transition of this flag
sets the interrupt request bit AINEFIR.
AINFF=1 when the A-IN FIFO is full; otherwise, AINFF=0. The flag goes active after external
logic writes the 64th byte into the A-IN FIFO. A zero-to-one transition of this flag sets the interrupt request bit AINFFIR.
Bit 2:
BINPF
BINPF=1 when the number of bytes in the B-IN FIFO satisfies the requirements programmed
into the BINPF Register; otherwise, BINPF=0. A zero-to-one transition of this flag sets the
interrupt request bit BINPFIR.
Bit 1:
BINEF
BINEF=1 when the B-IN FIFO is empty; otherwise, BINEF=0. The flag goes active after the
8051 or DMA system reads the last byte in the B-IN FIFO. A zero-to-one transition of this flag
sets the interrupt request bit BINEFIR.
Bit 0:
BINFF
BINFF=1 when the B-IN FIFO is full. The flag goes valid after external logic writes the 64th
byte into the B-IN FIFO. A zero-to-one transition of this flag sets the interrupt request bit BINFFIR.
780B
b7
b6
b5
b4
b3
b2
b1
b0
AINPFIE
AINEFIE
AINFFIE
BINPFIE
BINEFIE
BINFFIE
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bit 5:
AINPFIE
The 8051 sets AINPFIE=1 to enable an INT4 interrupt when the AINPFIR interrupt request bit
makes a zero-to-one transition. This transition indicates that the A-IN FIFO byte count has satisfied the fullness level programmed into the programmable FIFO flag register AINPF. The
Page 7-20
8051 clears AINPFIE to prevent the associated interrupt request bit from causing an INT4
interrupt.
Bit 4:
AINEFIE
The 8051 sets AINEFIE=1 to enable an INT4 interrupt when the AINEFIR interrupt request bit
makes a zero-to-one transition. This indicates an A-IN FIFO byte count of zero. The 8051
clears AINEFIE to prevent the associated interrupt request bit from causing an INT4 interrupt.
Bit 3:
AINFFIE
The 8051 sets AINFFIE=1 to enable an INT4 interrupt when the AINFFIR interrupt request bit
makes a zero-to-one transition. This indicates an A-IN FIFO byte count of 64. The 8051 clears
AINFFIE to prevent the associated interrupt request bit from causing an INT4 interrupt.
Bit 2:
BINPFIE
The 8051 sets BINPFIE=1 to enable an INT4 interrupt when the BINPFIR interrupt request bit
makes a zero-to-one transition. This transition indicates that the B-IN FIFO byte count has satisfied the fullness level programmed into the programmable FIFO flag register BINPF. The
8051 clears BINPFIE to prevent the associated interrupt request bit from causing an INT4
interrupt.
Bit 1:
BINEFIE
The 8051 sets BINEFIE=1 to enable an INT4 interrupt when the BINEFIR interrupt request bit
makes a zero-to-one transition. This indicates a B-IN FIFO byte count of zero. The 8051 clears
BINEFIE to prevent the associated interrupt request bit from causing an INT4 interrupt.
Bit 0:
BINFFIE
The 8051 sets BINFFIE=1 to enable an INT4 interrupt when the BINFFIR interrupt request bit
makes a zero-to-one transition. This indicates a B-IN FIFO byte count of 64. The 8051 clears
BINFFIE to prevent the associated interrupt request bit from causing an INT4 interrupt.
Page 7-21
780C
b7
b6
b5
b4
b3
b2
b1
b0
AINPFIR
AINEFIR
AINFFIR
BINPFIR
BINEFIR
BINFFIR
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bit 5:
AINPFIR
AINPFIR makes a zero-to-one transition when the A-IN FIFO byte count satisfies the required
condition programmed into the programmable FIFO flag register AINPF. If enabled by the AINPFIE Bit, this transition causes an INT4 interrupt request.
The 8051 writes a 1 to this bit to clear the interrupt request. The 8051 should clear the 8051
INT4 Bit (EXIF.6) before clearing the AINPFIR Bit in the interrupt service routine to guarantee
that pending INT4 interrupts will be recognized.
Bit 4:
AINEFIR
AINEFIR makes a zero-to-one transition when the A-IN FIFO byte count reaches zero (FIFO
empty). If enabled by the AINEFIE Bit, this transition causes an INT4 interrupt request.
The 8051 writes 1 to this bit to clear the interrupt request. The 8051 should clear the 8051
INT4 Bit (EXIF.6) before clearing the AINEFIR Bit in the interrupt service routine to guarantee
that pending INT4 interrupts will be recognized.
Bit 3:
AINFFIR
AINFFIR makes a zero-to-one transition when the A-IN FIFO byte count reaches 64 (FIFO
full). If enabled by the AINFFIE Bit, this transition causes an INT4 interrupt request.
The 8051 writes a 1 to this bit to clear the interrupt request. The 8051 should clear the 8051
INT4 Bit (EXIF.6) before clearing the AINFFIR Bit in the interrupt service routine to guarantee
that pending INT4 interrupts will be recognized.
Bit 2:
BINPFIR
BINPFIR makes a zero-to-one transition when the B-IN FIFO byte count satisfies the required
condition programmed into the programmable FIFO flag register BINPF. If enabled by the BINPFIE Bit, this transition causes an INT4 interrupt request.
Page 7-22
The 8051 writes a 1 to this bit to clear the interrupt request. The 8051 should clear the 8051
INT4 Bit (EXIF.6) before clearing the BINPFIR Bit in the interrupt service routine to guarantee
that pending INT4 interrupts will be recognized.
Bit 1:
BINEFIR
BINEFIR makes a zero-to-one transition when the B-IN FIFO byte count reaches zero (FIFO
empty). If enabled by the BINEFIE Bit, this transition causes an INT4 interrupt request.
The 8051 writes a 1 to this bit to clear the interrupt request. The 8051 should clear the 8051
INT4 Bit (EXIF.6) before clearing the BINEFIR Bit in the interrupt service routine to guarantee
that pending INT4 interrupts will be recognized.
Bit 0:
BINFFIR
BINFFIR makes a zero-to-one transition when the B-IN FIFO byte count reaches 64 (FIFO
full). If enabled by the BINFFIE Bit, this transition causes an INT4 interrupt request.
The 8051 writes a 1 to this bit to clear the interrupt request. The 8051 should clear the 8051
INT4 Bit (EXIF.6) before clearing the BINFFIR Bit in the interrupt service routine to guarantee
that pending INT4 interrupts will be recognized.
Page 7-23
AOUTPF
AOUTEF
AOUTPF
AOUTPFPIN
AOUTFF
AOUTFLAG
ABOUTTF
AOUTEMTY
AOUTDATA
AFI[7..0] (PORTB)
Aout
AOE
AOUTBC
ABPOLAR
AINBC
AINDATA
Ain
AINFULL
ABINTF
AINFLAG
AINFF
AINEF
AINPF
AINPFPIN
AINPF
780E
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
Page 7-24
AOUTPF
AOUTEF
AOUTPF
AOUTPFPIN
AOUTFF
AOUTFLAG
ABOUTTF
AOUTEMTY
AOUTDATA
AFI[7..0] (PORTB)
Aout
AOE
AOUTBC
ABPOLAR
AINBC
AINDATA
Ain
AINFULL
ABINTF
AINFLAG
AINFF
AINEF
AINPF
AINPFPIN
AINPF
AOUTBC
780F
b7
b6
b5
b4
b3
b2
b1
b0
D6
D5
D4
D3
D2
D1
D0
Page 7-25
AOUTPF
AOUTEF
AOUTPF
AOUTPFPIN
AOUTFF
AOUTFLAG
ABOUTTF
AOUTEMTY
AOUTDATA
AFI[7..0] (PORTB)
Aout
AOE
AOUTBC
ABPOLAR
AINBC
AINDATA
Ain
AINFULL
ABINTF
AINFLAG
AINFF
AINEF
AINPF
AINPFPIN
AINPF
7810
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 7-26
Bit 7:
LTGT
If LTGT=0, the AOUTPF flag goes true when the number of bytes in the FIFO is less than or
equal to the programmed value in D[6..0].
If LTGT=1, the AOUTPF flag goes true when the number of bytes in the FIFO is greater than or
equal to the value programmed into D[6..0].
Bit 6-0:
PFVAL
This value, along with the LTGT Bit, determines when the programmable flag for the A-OUT
FIFO becomes active. The 8051 programs this register to indicate various degrees of A-OUT
FIFO fullness to suit the application. The following two sections in this chapter show the interaction of the LTGT Bit and the programmed value for two cases, a filling FIFO and an emptying
FIFO.
D[6..0]
Bytes
in
FIFO
AOUTPF
48
45
48
46
48
47
48
48
48
49
48
50
Page 7-27
D[6..0]
Bytes
in
FIFO
AOUTPF
48
51
48
50
48
49
48
48
48
47
48
46
AOUTPF
AOUTEF
AOUTPF
AOUTPFPIN
AOUTFF
AOUTFLAG
ABOUTTF
AOUTEMTY
AOUTDATA
AFI[7..0] (PORTB)
Aout
AOE
AOUTBC
ABPOLAR
AINBC
AINDATA
Ain
AINFULL
ABINTF
AINFLAG
AINFF
AINEF
AINPF
AINPF
AINPFPIN
Page 7-28
AOUTPFPIN
7811
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 7-29
BOUTPF
BOUTPFPIN
BOUTFF
BOUTFLAG
ABOUTTF
BOUTEMTY
BOUTDATA
BFI[7..0] (PORTD)
Bout
BOE
BOUTBC
ABPOLAR
BINBC
BINDATA
Bin
BINFULL
ABINTF
BINFLAG
BINFF
BINEF
BINPF
BINPFPIN
BINPF
BOUTDATA
7813
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
Page 7-30
BOUTPF
BOUTEF
BOUTPF
BOUTPFPIN
BOUTFF
BOUTFLAG
ABOUTTF
BOUTEMTY
BOUTDATA
BFI[7..0] (PORTD)
Bout
BOE
BOUTBC
ABPOLAR
BINBC
BINDATA
Bin
BINFULL
ABINTF
BINFLAG
BINFF
BINEF
BINPF
BINPFPIN
BINPF
BOUTBC
7814
b7
b6
b5
b4
b3
b2
b1
b0
D6
D5
D4
D3
D2
D1
D0
Page 7-31
BOUTPF
BOUTEF
BOUTPF
BOUTPFPIN
BOUTFF
BOUTFLAG
ABOUTTF
BOUTEMTY
BOUTDATA
BFI[7..0] (PORTD)
BOE
Bout
BOUTBC
ABPOLAR
BINBC
BINDATA
Bin
BINFULL
ABINTF
BINFLAG
BINFF
BINEF
BINPF
BINPFPIN
BINPF
BOUTPF
7815
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 7-32
Bit 7:
LTGT
If LTGT=0, the BOUTPF flag goes true when the number of bytes in the FIFO is less than or
equal to the programmed value in D[6..0].
If LTGT=1, the BOUTPF flag goes true when the number of bytes in the FIFO is greater than or
equal to the value programmed into D[6..0].
Bit 6-0:
PFVAL
This value, along with the LTGT Bit, determines when the programmable flag for the B-FIFO
becomes active. The 8051 programs this register to indicate various degrees of B-FIFO fullness to suit the application. The following two sections of this chapter show the interaction of
the LTGT Bit and the programmed value for two cases, a filling FIFO and an emptying FIFO.
D[6..0]
Bytes
in
FIFO
BOUTPF
48
45
48
46
48
47
48
48
48
49
48
50
Page 7-33
D[6..0]
Bytes
in
FIFO
BOUTPF
48
51
48
50
48
49
48
48
48
47
48
46
BOUTPF
BOUTEF
BOUTPF
BOUTPFPIN
BOUTFF
BOUTFLAG
ABOUTTF
BOUTEMTY
BOUTDATA
BFI[7..0] (PORTD)
Bout
BOE
BOUTBC
ABPOLAR
BINBC
BINDATA
Bin
BINFULL
ABINTF
BINFLAG
BINFF
BINEF
BINPF
BINPF
BINPFPIN
Page 7-34
BOUTPFPIN
7816
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
ABOUTTF
1
AOUTDATA
Aout
AOUTDATA
AINDATA
Ain
AINDATA
Aout
1
0
Ain
ABINTF
BOUTDATA
Bout
BOUTDATA
Bout
BINDATA
Bin
BINDATA
Bin
Figure 7-40. 8051 FIFO Toggle Mode vs. Normal Mode Diagram
Page 7-35
ABOUTCS
7818
b7
b6
b5
b4
b3
b2
b1
b0
OUTTOG
OUTSEL
AOUTPF
AOUTEF
AOUTFF
BOUTPF
BOUTEF
BOUTFF
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bit 7:
OUTTOG
A special FIFO toggle mode switches automatically between the A-OUT and B-OUT FIFOs
each time the 8051 writes data to the AOUTDATA Register. The toggle mechanism works only
for programmed 8051 transfers, not DMA transfers.
When OUTTOG=0, the A-OUT and B-OUT FIFOs operate in Normal Mode, as shown by diagram (a) in Figure 7-40 on the previous page.
When OUTTOG=1, the FIFOs operate in Toggle Mode, as shown by diagram (b) in Figure 740. The selected FIFO switches between the A-OUT and B-OUT FIFOs after every 8051 write
to the AOUTDATA Register. The selected FIFO is indicated by the OUTSEL Bit (Bit 6).
Bit 6:
OUTSEL
This bit selects OUT FIFO A or B when the 8051 writes to the AOUTDATA Register. When
OUTSEL=0, the B-OUT FIFO is written. When OUTSEL=1, the A-OUT FIFO is written.
When OUTTOG=1, this bit complements automatically (toggles) after every 8051 write to
AOUTDATA. This has the effect of automatically toggling between the A-OUT and B-OUT
FIFOs for successive 8051 writes to AOUTDATA.
The 8051 can directly write this bit to select manually the A-OUT or B-OUT FIFO. More
commonly, the Toggle Mode is used, since it allows 16-bit transfers using the 8051 without
requiring the 8051 to switch between the FIFOs.
Bit 5:
AOUTPF
AOUTPF=1 when the number of bytes in the A-OUT FIFO satisfies the requirements programmed into the AOUTPF Register; otherwise, AOUTPF=0. This bit may be tested by the
Page 7-36
8051and/or used to generate an interrupt request. A zero-to-one transition of this flag sets the
interrupt request bit AOUTPFIR.
Bit 4:
AOUTEF
AOUTEF=1 when the A-OUT FIFO is empty; otherwise, AOUTEF=0. The flag goes valid after
external logic reads the last byte in the A-OUT FIFO. This bit may be tested by the 8051, and/
or used to generate an interrupt request. A zero-to-one transition of this flag sets the interrupt
request bit AOUTEFIR.
Bit 3:
AOUTFF
AOUTFF=1 when the A-OUT FIFO is full; otherwise, AOUTFF=0. The flag goes valid after the
8051/DMA writes the 64th byte into the A-OUT FIFO. A zero-to-one transition of this flag sets
the interrupt request bit AOUTFFIR.
Bit 2:
BOUTPF
BOUTPF=1 when the number of bytes in the B-OUT FIFO satisfies the requirements programmed into the BOUTPF Register; otherwise, BOUTPF=0. A zero-to-one transition of this
flag sets the interrupt request bit BOUTPFIR.
Bit 1:
BOUTEF
BOUTEF=1 when the B-OUT FIFO is empty; otherwise, BOUTEF=0. The flag goes valid after
external logic reads the last byte in the B-OUT FIFO. A zero-to-one transition of this flag sets
the interrupt request bit BOUTEFIR.
Bit 0:
BOUTFF
BOUTFF=1 when the B-OUT FIFO is full; otherwise, BOUTFF=0. The flag goes valid after the
8051/DMA writes the 64th byte into the B-OUT FIFO. A zero-to-one transition of this flag sets
the interrupt request bit BOUTFFIR.
b4
b3
b2
7819
b7
b6
b1
b0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 7-37
AOUTPFIE
The 8051 sets AOUTPFIE=1 to enable an INT4 interrupt when the AOUTPFIR interrupt
request bit makes a zero-to-one transition. This transition indicates that the A-OUT FIFO byte
count has satisfied the fullness level programmed into the programmable FIFO flag register
AOUTPF.
Bit 4:
AOUTEFIE
The 8051 sets AOUTEFIE=1 to enable an INT4 interrupt when the AOUTEFIR interrupt
request bit makes a zero-to-one transition. This indicates an A-OUT FIFO byte count of zero
(FIFO empty).
Bit 3:
AOUTFFIE
The 8051 sets AOUTFFIE=1 to enable an INT4 interrupt when the AOUTFFIR interrupt
request bit makes a zero-to-one transition. This indicates an A-OUT FIFO byte count of 64
(FIFO full).
Bit 2:
BOUTPFIE
The 8051 sets BOUTPFIE=1 to enable an INT4 interrupt when the BOUTPFIR interrupt
request bit makes a zero-to-one transition. This indicates a B-OUT FIFO byte count has satisfied the fullness level programmed into the programmable FIFO flag register BOUTPF.
Bit 1:
BOUTEFIE
The 8051 sets BOUTEFIE=1 to enable an INT4 interrupt when the BOUTEFIR interrupt
request bit makes a zero-to-one transition. This indicates a B-OUT FIFO byte count of zero
(FIFO empty).
Bit 0:
BOUTFFIE
The 8051 sets BOUTFFIE=1 to enable an INT4 interrupt when the BOUTFFIR interrupt
request bit makes a zero-to-one transition. This indicates a B-OUT FIFO byte count of 64
(FIFO full).
Page 7-38
b4
b3
b2
781A
b7
b6
b1
b0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bit 5:
AOUTPFIR
AOUTPFIR makes a zero-to-one transition when the A-OUT FIFO byte count satisfies the
required condition programmed into the programmable FIFO flag register AOUTPF. If enabled
by the AOUTPFIE Bit, this transition causes an INT4 interrupt request.
The 8051 writes a 1 to this bit to clear the interrupt request. The 8051 should clear the 8051
INT4 Bit (EXIF.6) before clearing the AOUTPFIR Bit in the interrupt service routine to guarantee that pending INT4 interrupts will be recognized.
Bit 4:
AOUTEFIR
AOUTEFIR makes a zero-to-one transition when the A-OUT FIFO byte count reaches zero
(FIFO empty). If enabled by the AOUTEFIE Bit, this transition causes an INT4 interrupt
request.
The 8051 writes 1 to this bit to clear the interrupt request. The 8051 should clear the 8051
INT4 Bit (EXIF.6) before clearing the AOUTEFIR Bit in the interrupt service routine to guarantee that pending INT4 interrupts will be recognized.
Bit 3:
AOUTFFIR
AOUTFFIR makes a zero-to-one transition when the A-OUT FIFO byte count reaches 64
(FIFO full). If enabled by the AOUTFFIE Bit, this transition causes an INT4 interrupt request.
The 8051 writes a 1 to this bit to clear the interrupt request. The 8051 should clear the 8051
INT4 Bit (EXIF.6) before clearing the AOUTFFIR Bit in the interrupt service routine to guarantee that pending INT4 interrupts will be recognized.
Page 7-39
BOUTPFIR
BOUTPFIR makes a zero-to-one transition when the B-OUT FIFO byte count satisfies the
required condition programmed into the programmable FIFO flag register BOUTPF. If enabled
by the BOUTPFIE Bit, this transition causes an INT4 interrupt request.
The 8051 writes a 1 to this bit to clear the interrupt request. The 8051 should clear the 8051
INT4 Bit (EXIF.6) before clearing the BOUTPFIR Bit in the interrupt service routine to guarantee that pending INT4 interrupts will be recognized.
Bit 1:
BOUTEFIR
BOUTEFIR makes a zero-to-one transition when the B-OUT FIFO byte count reaches zero
(FIFO empty). If enabled by the BOUTEFIE Bit, this transition causes an INT4 interrupt
request.
The 8051 writes a 1 to this bit to clear the interrupt request. The 8051 should clear the 8051
INT4 Bit (EXIF.6) before clearing the BOUTEFIR Bit in the interrupt service routine to guarantee that pending INT4 interrupts will be recognized.
Bit 0:
BOUTFFIR
BOUTFFIR makes a zero-to-one transition when the B-OUT FIFO byte count reaches 64 (FIFO
full). If enabled by the BOUTFFIE Bit, this transition causes an INT4 interrupt request.
The 8051 writes a 1 to this bit to clear the interrupt request. The 8051 should clear the 8051 INT4
Bit (EXIF.6) before clearing the BOUTFFIR Bit in the interrupt service routine to guarantee that
pending INT4 interrupts will be recognized.
781C
b7
b6
b5
b4
b3
b2
b1
b0
ASYNC
DBLIN
OUTDLY
DBLOUT
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bit 5:
ASYNC
The ASYNC Bit controls how external logic synchronizes accesses to the A and B FIFOs.
Page 7-40
When the 8051 sets ASYNC=1, the A and B FIFOs operate asynchronously, whereby the
SLRD (Slave FIFO-READ) and SLWR (Slave FIFO-WRITE) pins are used as direct read and
write strobes.
When the 8051 sets ASYNC=0, the A and B FIFOs operate synchronously, whereby the SLRD
and SLWR pins are used as enable signals for the externally supplied FIFO clock XCLK. The
polarity of the enables, active-high or active-low, is controlled by the ABPOLAR Register (Section 7.2.22. "FIFO A/B Control Signal Polarities").
ASEL=1
AOE=LO
AFI [7..0] (PORTB pins)
Ain
CS
M
LO
XCLK
SLW R
Bit 4:
DBLIN
The 8051 sets DBLIN=1 to turn on the IN-FIFO double-byte mode. Figure 7-45 illustrates the
double-byte mode for the A-IN FIFO. The B-IN FIFO may also use this mode, in which case
the outside logic sets ASEL=0 and BSEL=1. For this illustration, signals ASEL, BSEL, AOE,
and BOE are programmed to be active high polarity.
In double-byte mode, external logic writes 16 bits of data into the A-IN or B-IN FIFO each time
it asserts the SLWR signal. The double-byte mode automatically writes two bytes for every
SLWR pulse in ASYNC mode or two bytes for every clock pulse in SYNC mode. The bytes are
taken from PORTD and PORTB, in that order. This provides a very efficient mechanism for
transferring 16-bit data into the 8-bit slave FIFOs.
If synchronous clocking is used in double-byte mode, consecutive writes must be separated by
at least one XCLK period to give the internal logic time to write both bytes into the FIFO. This
clocking restriction applies only to the double-byte mode. In normal operation, one byte per
clock can be loaded into a slave IN-FIFO.
Page 7-41
OUTDLY=0
OUTDLY=1
XCLK
ASEL
SLRD
AOE
D[7..0]
N+1
N+2
Bit 2:
OUTDLY
The OUTDLY Bit affects only synchronous reads of a slave FIFO. When OUTDLY=0, output
data is valid on the clock edge that corresponds to the SLRD signal being valid. When OUTDLY=1, the output data is valid one clock later.
Figure 7-46 shows two synchronous reads of the A-OUT FIFO, with the OUTDLY Bit first
equal to 0, then equal to 1. For this example, the SLRD, AOE, and ASEL signals are programmed to be active low.
Page 7-42
Bout
CS
BSEL=HI
AFI[7..0] (PORTB pins)
AOE=HI
L
ASEL
LO
BFI[7..0] (PORTD pins)
BOE=HI
XCLK
SLRD
Figure 7-47. B-OUT FIFO Double-Byte Mode
Bit 0:
DBLOUT
The 8051 sets DBLOUT=1 to turn on the OUT-FIFO double-byte mode. Figure 7-47 illustrates the
double-byte mode for the B-OUT FIFO. The A-OUT FIFO may also use this mode, in which case
the outside logic sets ASEL=1 and BSEL=0. For this illustration, signals ASEL, BSEL, AOE, and
BOE are programmed to be active high polarity.
The double-byte mode automatically provides two FIFO bytes on PORTDand PORTB, in that
order, for every SLRD pulse in ASYNC mode or two bytes for every clock pulse in SYNC mode.
This provides a very efficient mechanism for transferring 16-bit data out of the 8-bit slave FIFOs.
In SYNC mode, consecutive reads must be separated by at least one XCLK period, to give the
internal logic time to retrieve both bytes from the FIFO.
781D
b7
b6
b5
b4
b3
b2
b1
b0
BOE
AOE
SLRD
SLWR
ASEL
BSEL
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 7-43
781E
b7
b6
b5
b4
b3
b2
b1
b0
Page 7-44
7.3
FIFO Timing
Synchronous Write
XCLK
ASEL#
SLWR#
OEA#
AFI[7..0]*
2 x
3 x
4 x
AINFULL
* Data 4 is the 64th byte; data 5 is not written
AOUTEMTY
Page 7-45
L
x
BFI[7..0]
x
H
L
X
L
H
Page 7-46
8.1
What is GPIF?
The General Programmable InterFace (GPIF) is an extremely flexible 8- or 16-bit parallel interface
that allows designers to reduce system costs by providing a glueless interface between the EZUSB FX and many different types of external peripherals.
The GPIF allows the EZ-USB FX to perform local bus mastering to external peripherals using a
wide variety of protocols. For example, EIDE/ATAPI, printer parallel port (IEEE P1284), Utopia,
and other interfaces can be supported using the GPIF block of the EZ-USB FX.
To support a wide range of applications, the GPIF implements an extensive feature set that can be
modified to suit the design. As with other highly configurable chips, some initialization steps are
required. To support a range of interface styles, the GPIF provides multiple programmable I/O pins
and multiple registers to configure those pins.
This chapter provides an overview of GPIF, discusses external connections, and explains the operation of the GPIF engine.
Figure 8-1 presents a block diagram illustrating GPIFs place in the FX System.
Page 8-1
7900
GPIFADRL
GPIF
Counter
Program
GPIF
ADR
RDY
CTL
797F
USB
Data
Data
UIA
DMA
EP Buffers
Clock
Flags
AFI
BFI
FIFOs
8051
SGLDAT
R/W
8.2
GPIF Tool A Windows application that assists GPIF firmware development. The GPIF
Tool can be found on the EZ-USB FX Developers Kit CD.
Page 8-2
8.3
The GPIF allows the EZ-USB FX connect directly to external peripherals such as ASICs, DSPs, or
other digital logic that uses an 8- or 16-bit parallel interface.
The GPIF provides external pins that can operate as outputs (CTL0 to CTL5), inputs (RDY0 to
RDY5), Data bus (GDA[7..0] and GDB[7..0]), and Address Lines (ADR0 to ADR5).
A Waveform Descriptor in internal RAM describes the behavior of each of the GPIF signals. The
Waveform Descriptor is loaded into the GPIF registers by the 8051 firmware during initialization,
and it is then used throughout the execution of the 8051 code to perform transactions over the
GPIF interface.
Figure 8-2 shows a block diagram of a typical interface between the EZ-USB FX and a peripheral
function.
EZ-USB FX
Control Outputs
Ready Inputs
GPIF
Peripheral
Addresses
Data Bus
Page 8-3
8.4
IN/OUT
Description
ADR[5:0]
Address outputs
GDA[7:0]
I/O
GDB[7..0]
I/O
CTL[5:0]
RDY[5:0]
Refer to the figure EZ-USB FX 128-pin Package on p. 13 of the CY7C64603/613 Data Sheet.
The Control Outputs (CTL0 to CTL5) are intended to be strobes, read/write lines, and other nonbused outputs.
The Ready Inputs (RDY0 to RDY5) sample a signal to allow a transaction to wait (inserting wait
states), continue, or repeat until the signal is at the appropriate level.
The GPIF Data Bus is a collection of the GDA[7..0] and GDB[7..0] pins.
The GPIF Address lines (ADR0 to ADR5) can generate an automatically incrementing address
during a burst transaction. For non-burst transactions, these address lines remain static. For
higher-order address lines that may be needed, other non-GPIF I/O signals should be used.
The GPIF Clock can be either an internal 48MHz clock, or an externally-supplied clock from the
XCLK pin. If the XCLK_SEL pin is tied high, the GPIF clock is the XCLK pin. Otherwise, the GPIF
clock is the 48 MHz internal clock.
Page 8-4
Result
Connection Made
8 bits.
Connect GDA[7..0] to
D0..D7 of the EPROM.
No connection.
16 bits of address.
Connect ADR0..ADR5 to
A0..A5 and other I/O
ports to A6..A15.
The process is the same for larger and more complicated interfaces.
Page 8-5
8.5
GPIF Configuration Registers These registers configure the general settings and
report the status of the interface to the 8051, a total of 18 registers from 0x7824 to
0x783C. See the EZ-USB FX Register Summary and the remainder of this chapter for
details.
Waveform Memories A block of registers loaded by the 8051 with the Waveform
Descriptors that program the GPIF interface, a total of 128 bytes from 0x7900 to 0x797F.
The GPIF has 4 Waveform Memories. Each Waveform Memory holds a GPIF program containing up to 7 programmed Intervals. Each Interval is a 32-bit instruction for the GPIF Engine.
The 8051 must load these registers before initiating GPIF operation.
Refer to the figure EZ-USB FX 128-pin Package on p. 13 of the CY7C64603/613 Data Sheet.
CTL0 to CTL3 can actively drive CMOS levels 1 and 0, be open-drain, or tristate.
CTL4 and CTL5 can actively drive CMOS levels 1 and 0, or be open-drain.
If CTL0 to CTL3 are configured to be tristate-able, CTL4 and CTL5 are not available.
Page 8-6
CTLOUTCFG[6..0]
CTL0[3..0]
CTL[5..4]
0, 1, or tristate
Not Available
0 or open-drain
Open-drain
0, 1, or tri-stateable
Not Available
0 or 1
CMOS
Important: The TRICTL Bit controls the meaning of the OUTPUT field in all currently loaded
Waveform Programs.
The synchronous/asynchronous mode is selected via the SAS Bit (Bit 6) of the READY Register:
If SAS = 1, the RDY[5..0] Inputs are synchronous to the GPIF Clock, sampled at only one
rising edge of the GPIF Clock.
If SAS = 0, the RDY[5..0] Inputs are sampled at two rising edges of the GPIF Clock before the
appropriate GPIF Branch is taken.
Page 8-7
If DONE is 1, the GPIF is Done (GPIF is in the IDLE state), ready for the 8051 to start the
next GPIF transaction.
Important: It is illegal to initiate any operation (except aborting the current transaction) when the
GPIF is Busy. Doing so yields indeterminate behavior, likely to cause data corruption.
Page 8-8
8.5.3.1.1
During the IDLE state, the GPIF Data Bus (GDA[7..0] and GDB[7..0]) can be either driven or
tristated, depending on how the 8051 program has set the IDLEDRV bit (bit 0) of the IDLE_CS
Register.
If IDLEDRV is 1, the GPIF Data Bus is actively driven during IDLE. The value driven is the
last value driven by any GPIF Waveform program.
TRICTL Bit (Bit 7) in the CTLOUTCFG Register (as described in the previous Control Output Modes.
The combination of TRICTL and IDLE_CTLOUT[5..0] define CTL[5..0] during IDLE as follows:
If TRICTL is 0, IDLE_CTLOUT[5..0] is the output state of CTL[5..0] during the IDLE state.
If TRICTL is 1, IDLE_CTLOUT[7..4] are the Output Enables for the CTL0 to CTL3 signals,
and IDLE_CTLOUT[3..0] are the Output values for CTL0 to CTL3.
CTLOUTCFG.7
TRICTL
IDLE_CTLOUT
Output Bit
CTL0
Not Available
Bit 0 (CTL0)
Bit 4 (OE0)
CTL1
Not Available
Bit 5 (OE1)
CTL2
Not Available
Bit 6 (OE2)
CTL3
Not Available
Bit 7 (OE3)
CTL4
Not Available
Not Available
Not Available
CTL5
Not Available
Bit 5 (CTL5)
Not Available
Not Available
Bit 1 (CTL1)
Bit 2 (CTL2)
Bit 3 (CTL3)
Bit 4 (CTL4)
Page 8-9
If the IDLE_CTLOUT Register and TRICTL Bit indicate that a 1 is to be driven, then a 1 in
the corresponding bit in the CTLOUTCFG Register makes the output an open-drain.
If the IDLE_CTLOUT Register and TRICTL Bit indicate that a 0 is to be driven, then a 0 in
the corresponding bit in the CTLOUTCFG Register makes the output actively drive a
CMOS high level.
It is possible to change only selected bytes of a Waveform Program. It is not necessary to reload
the entire program if only a few bytes change. Hence, the 8051 can quickly reconfigure the GPIF
when it is not Busy.
8.5.3.2.1 Non-Decision Point (NDP) Intervals
For NDP intervals, the control outputs (CTLn) are defined by the GPIF instruction to be either 1, 0,
or tristated during the entire interval. These types of intervals have a programmable fixed duration
in units of XCLK cycles.
For write waveforms, the data bus is either driven or tristated during the interval.
For read waveforms, the data bus is either sampled and stored as the read data or not sampled
during the interval.
Figure 8-3 below illustrates the basic concept for NDP intervals. A write waveform is shown, and
for simplicity all the intervals are shown with equal spacing. There are a total of six programmable
outputs, but only one (CTL 0) is shown in the Figure 8-3.
Remember that the 4-byte Waveform Descriptor defines the characteristics of each interval. For a
detailed definition of the 4-byte Waveform Descriptor, see Section 8.5.5.5. "Waveform Selector".
Page 8-10
I0
I1
I2
I3
I4
I5
I6
ADR[5..0]
GDA[7..0]
'Z'
VALID
'Z'
CTL0
Page 8-11
The user then specifies a logic function (AND, OR, or XOR) to apply to the two selected signals.
To select only one signal, simply select the same signal twice and specify the logic function as
AND.
In the Waveform Descriptor for the DP interval, the user then specifies which interval to branch to
if the resultant logic expression is a 0, and which interval to branch to if the resultant logic expression is a 1.
Below is an example waveform created using one decision point interval (I1) and non-decision
point intervals for the rest of the waveform.
Page 8-12
I0
I1
I2
I3
I4
I5
I6
ADR[5..0]
GDA[7..0]
'Z'
'Z'
VALID
CTL0
RDY0
Figure 8-4. One Decision Point: Wait States Inserted Until RDY0 Goes Low
I1
I0
I2
I3
I4
I5
I6
ADR[5..0]
GDA[7..0]
'Z'
VALID
'Z'
CTL0
RDY0
Page 8-13
LENGTH/BRANCH
OPCODE
LOGIC FUNCTION
OUTPUT.
Notice that there are 2 definitions for the Waveform Descriptors depending on whether the interval
is a decision point (DP = 1) or a non-decision point (DP = 0).
8.5.3.3.1 Non-Decision Point Waveform Descriptor
LENGTH/BRANCH
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
OPCODE
7
GINT
INCAD
NEXT
DATA
DP = 0
LOGIC FUNCTION
7
Not Used
OE3
OE2
OE1
OE0
CTL3
CTL2
CTL1
CTL0
CTL5
CTL4
CTL3
CTL2
CTL1
CTL0
Page 8-14
Bit 6
Bit 5
1BRANCH
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
0BRANCH
OPCODE
7
GINT
INCAD
NEXT
DATA
DP = 1
LOGIC FUNCTION
7
LFUNC
TERMA
TERMB
OE3
OE2
OE1
OE0
CTL3
CTL2
CTL1
CTL0
CTL5
CTL4
CTL3
CTL2
CTL1
CTL0
Page 8-15
Page 8-16
OUTPUT Register: This register controls the state of the 6 control outputs (CTL5-0) during the
entire interval corresponding to this Waveform Descriptor. For the following example, refer to
8.5.10 "CTLOUTCFG Register".
OEn Bit: specifies if the corresponding CTL output signal is tristated.
1 = drive CTLn:
If the CTLn Bit in the CTLOUTCFG Register is set to 1, the output driver will be
and open-drain.
If the CTLn Bit in the CTLOUTCFG Register is set to 0, the output driver will be
driven to CMOS levels.
0 = Tri-state CTLn.
CTLn Bit: specifies the state to set each CTL signal to during this entire interval.
1 = high level
0 = low level
LOGIC FUNCTION Register: This register is used only for decision point Waveform Descriptors. It
specifies the inputs (TERMA and TERMB) and the Logic Function (LFUN) to apply to those inputs.
Together these define which Branch to take in the LENGTH/BRANCH Register.
TERMA and TERMB Bits:
= 000 : RDY0
= 001 : RDY1
= 010 : RDY2
= 011 : RDY3
= 100 : RDY4
= 101 : RDY5
= 110 : Internal programmable FIFO flag
= 111 : INTERNAL_READY (Bit 7 of the READY Register)
LFUN:
= 00 : perform logical AND on selected inputs
= 01 : perform logical OR on selected inputs
= 10 : perform logical XOR on selected inputs
= 11 : perform logical XOR on selected inputs
The Inputs are sampled at each rising edge of the GPIF Clock (XCLK).
Page 8-17
For DP = 0 this is a LENGTH field the fixed duration of this Interval in units of XCLK
(48MHz for internal clocking, XCLK if externally clocked). A value of 0 means an interval
length of 256 clocks.
For DP = 1 this is a BRANCH field - determines the next interval to branch to.
1BRANCH: specifies which interval to branch to if the logic expression equates to a 1. 0 to
6, or 7 (IDLE)
0BRANCH: specifies which interval to branch to if the logic expression equates to a 0. 0 to
6, or 7 (IDLE)
8051
Base XDATA Address
0x7900
0x7920
0x7940
0x7960
Within each Waveform Memory, the Waveform Descriptors are packed as described in Table 8-6,
Waveform Memory Descriptors". Waveform Memory 0 is shown as an example. The other Waveform Memories follow exactly the same structure but at higher XDATA addresses.
Page 8-18
Contents
0x7900
0x7901
0x7902
LENGTH/BRANCH[2]
0x7903
LENGTH/BRANCH[3]
0x7904
LENGTH/BRANCH[4]
0x7905
LENGTH/BRANCH[5]
0x7906
LENGTH/BRANCH[6]
0x7907
0x7908
0x7909
0x790A
OPCODE[2]
0x790B
OPCODE[3]
0x790C
OPCODE[4]
0x790D
OPCODE[5]
0x790E
OPCODE[6]
0x790F
0x7910
0x7911
0x7912
OUTPUT[2]
0x7913
OUTPUT[3]
0x7914
OUTPUT[4]
0x7915
OUTPUT[5]
0x7916
OUTPUT[6]
0x7917
0x7918
0x7919
0x791A
LOGIC FUNCTION[2]
0x791B
LOGIC FUNCTION[3]
0x791C
LOGIC FUNCTION[4]
0x791D
LOGIC FUNCTION[5]
0x791E
LOGIC FUNCTION[6]
0x791F
Page 8-19
Important: The following sections are critical to understanding how the GPIF works.
The 8051 can trigger four types of GPIF Transactions:
Single Transactions produce a single data transfer using one of the GPIF Waveforms you have
designed. Single Transactions are typically used to access a control register of a device connected to the GPIF.
FIFO Transactions involve the A and B FIFOs. Multiple bytes of data can be written to a FIFO and
a transaction can be started that transfers all of the data using the GPIF Waveforms you have
designed. FIFO Transactions are typically used to move bursts of data to or from a device connected to the GPIF.
reading SGLDATLTRIG, which reads the least significant byte and starts another Single
Read Transaction.
reading SGLDATLNTRIG, which reads the least significant byte but does not start
another Read Transaction.
Page 8-20
The following C program fragment illustrates how to perform a single Read transaction in 8-bit
mode:
// Declare some byte-wide variables.
unsigned char dummy, inDataLow, inDataHigh ;
// Initiate a (previously set up) GPIF Read transaction by reading
// the SGLDATLTRIG Register (into the variable dummy).
dummy = SGLDATLTRIG;
// Note: we are not yet ready to get the data; this register read
// merely initiates the Read transaction by starting a GPIF
// microcode routine.
//
//
//
//
If the GPIF microcode can take longer than one 8051 instruction,
we must wait for it to complete.
Otherwise, when reading the data below, we would be reading it
prematurely, and it would probably be garbage.
// Get the LS data byte, but do not start a new Read transaction.
inDataLow = SGLDATLNTRIG;
Page 8-21
In 16-bit mode, the most significant byte of the data is first written to the SGLDATH Register.
In both 8- and 16-bit modes, the 8051 starts a Single Write Transaction by writing to the
SGLDATLTRIG Register.
3. Program the 8051 to wait for the GPIF to indicate the transaction is complete.
A Transaction is complete when either DONE = 1 (in the IDLE_CS Register) or a GPIF Complete interrupt is generated.
Important: For GPIF transactions only, the GPIF is master to the slave FIFOs.
From the FIFOs point of view, the GPIF is the master that an external FIFO master circuit
would have been.
From the point of view of the GPIF, the GPIF is the master of the slave FIFOs.
AINPFPIN
AOUTPFPIN
BINPFPIN
BOUTPFPIN
One of these flags is selected to control a given GPIF transaction. The selected flag is called the
GPIF_PF flag.
Page 8-22
The GPIF_PF flag is selected by the context of the trigger for the GPIF transaction.
Table 8-7. Selecting the GPIF_PF Flag
If the GPIF transaction is triggered by . . .
Reading ATRIG
AINPF flag
Writing ATRIG
AOUTPF flag
Reading BTRIG
BINPF flag
Writing BTRIG
BOUTPF flag
direct I/O
direct I/O
2. Program the 8051 to either write the ATRIG or the BTRIG Register, depending on which FIFO
has received the data in Step 1.
3. Program the 8051 to detect completion of the Transaction. As with all GPIF Transactions, Bit 7
of the IDLE_STATE Register (the DONE bit) signals the completeness of the Transaction (See
Step 2 of Section 8.5.4.1. "Performing a Single Read Transaction".)
Page 8-23
Bit 7 of the transaction count registers determine which method to use for the appropriate operation.
There are four Burst Transaction types:
AIN
AOUT
BIN
BOUT.
Page 8-24
WF_SELECTOR
b7
b6
b5
b4
b3
7824
b2
b1
SNGL_WR_WF
SNGL_RD_WF
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bits 7-6:
SNGL_WR_WF
FIWR_WF
b0
FIRD_WF
Index to the Waveform Program to run when a Single Write is triggered by the 8051.
Bits 5-4:
SNGL_RD_WF
Index to the Waveform Program to run when a Single Read is triggered by the 8051.
Bits 3-2:
FIWR_WF
Index to the Waveform Program to run when a FIFO Write is triggered by the 8051.
Bits 1-0:
FIRD_WF
Index to the Waveform Program to run when a FIFO Read is triggered by the 8051.
The default for this register is 11 10 01 00, which points each waveform index to the next Waveform Memory. In most applications, it is unnecessary to ever access the WF_SELECTOR Register,
provided the Waveform Memories are loaded with Waveform Programs in a logical way. (0 is
loaded with FIFO Read, 1 is loaded with FIFO Write, etc.).
Here is an example:
If: the 0th Waveform Memory is loaded with a Waveform Program (Waveform0) and the
WF_SELECTOR Register is never accessed (all fields set to their defaults)
Then Waveform0 runs when FIFO Read is triggered by the 8051.
Page 8-25
SGLDATH
b7
7834
b6
b5
b4
b3
b2
b1
b0
D14
D13
D12
D11
D10
D9
D8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
D15
Bits 7-0:
16-bit mode: contains the data that gets written to the GDB]7..0] pins
8-bit mode: not used
SGLDATLTRIG
b7
7835
b6
b5
b4
b3
b2
b1
b0
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
D7
Bits 7-0:
Page 8-26
SGLDATLNTRIG
b7
7836
b6
b5
b4
b3
b2
b1
b0
D6
D5
D4
D3
D2
D1
D0
D7
Bits 7-0:
This register contains the data that was read, and mirrors the data in the SGLDATLTRIG Register.
Using this register does Not cause additional read transactions to take place, unlike the SGLDATLTRIG Register.
Page 8-27
ATRIG
b7
Reserved
b6
b5
b4
b3
b2
782E
b1
b0
BTRIG
b7
Reserved
b6
b5
b4
b3
b2
7832
b1
b0
Bits 7-0:
Page 8-28
Register
Name
Description
0x782C
AIN_TC
0x782D
AOUT_TC
0x7830
BIN_TC
0x7831
BOUT_TC
AIN_TC, AOUT_TC,
BIN_TC, BOUT_TC
b7
782C, 782D,
7830, 7831
b6
b5
FITC
b4
b3
b2
b1
b0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bits 7:
FITC
FIFO T.C.
Bits 6-0:
Transaction Count
For information on how the GPIF_PF flag is determined by the FIFO trigger Register, which
starts the transactions(s), see Section 8.5.5.1. "The GPIF_PF Flag".
Page 8-29
READY
b7
7838
b6
b5
b4
b3
b2
b1
SAS
RDY5
RDY4
RDY3
RDY2
RDY1
INTRDY
b0
RDY0
Bits 7:
INTERNAL_RDY
Bit to allow the 8051 to force a RDY condition to control a Waveform Instruction.
This bit is writable by the 8051. It is one of the bits that can be selected by a DP Instruction to
feed TERM_A or TERM_B of a DP Instructions LOGIC FUNCTION.
Bits 6:
SAS
Bits 5-0:
RDY_IN[5:0]
The current state of the RDY[5:0] pins, sampled at each rising edge of the GPIF Clock.
Page 8-30
CTLOUTCFG
b7
7827
b6
b5
b4
b3
b2
b1
b0
CTL5
CTL4
CTL3
CTL2
CTL1
CT0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
TRICTL
Bits 7:
TRICTL
This bit controls how many of the CTL[5:0] outputs are active (4 or 6), and whether those outputs can be tristated. (Tri-stating is only available only if using 4 CTL outputs).
This bit controls the meaning of the OUTPUT field in all currently loaded Waveform Programs.
If this bit is 1, Use only the four CTL[3:0] pins, where each of the four Outputs can be either
driven or tri-stated.
OUTPUT[7:4] of each Waveform Instruction:
OUTPUT[3:0] of each Waveform Instruction. Contains the value of the corresponding four
CTL[3:0] output.
If this bit is 0: Use all six CTL_OUTx signals, none tri-stateable.
See the discussion of the OUTPUT field in Section 8.5.10. "CTLOUTCFG Register".
Bits 6:
Reserved
Reserved
Bits 5-0:
CTL 5-0
Page 8-31
IDLE_CS
7825
b7
b6
b5
b4
b3
b2
b1
b0
DONE
IDLEDRV
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bits 7:
DONE
0 = Transaction in progress.
1 = Transaction Done (GPIF is idle, hence GPIF is ready for next Transaction). Fires IRQ4 if
enabled.
Bits 6-1:
Reserved
Reserved
Bits 0:
IDLEDRV
IDLE_CTLOUT
b7
7826
b6
b5
b4
b3
b2
b1
b0
CTL5
CTL4
CTL3
CTL2
CTL1
CTL0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bits 7-6:
Page 8-32
Reserved
Reserved
Bits 5-0:
CTL[5..0]
Important: the IDLE_OUT_CTL Register contains the default states of the CTL_OUTx signals.
The IDLE_CS Register contains the done indication that tells the user that it is OK to go ahead
with another bus transaction. It also knows whether the data bus is tri-stated or driven when the
bus is not currently in use.
Note well: It is illegal to initiate any operation (except aborting the current transaction) when the
done Bit (IDLE_CS[7]) is 0. Doing so yields indeterminate behavior, likely to cause data corruption.
Page 8-33
GPIFADRL
b7
782A
b6
b5
b4
b3
b2
b1
b0
Reserved
ADR5
ADR4
ADR3
ADR2
ADR1
ADR0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Reserved
Bits 7-6:
Reserved
Reserved
Bits 5-0:
ADR[5..0]
Data written to the Register appears as the bus address on the ADR[5:0] pins during a GPIF
transaction.
This address does not change until a GPIF program is running. Specifically, the new value
does not appear on the Address Bus pins until one of the following is written:
SGLDATLTRIG Register
ATRIG Register
BTRIG Register.
Page 8-34
GPIF_ABORT
b7
Reserved
b6
b5
b4
b3
7839
b2
b1
b0
Bits 7-0:
D7-D0
Writing to the GPIF_ABORT Register aborts the current transaction on the bus, returns the
DONE Bit to 1, and causes the outputs to go to the state as defined in the IDLE_STATE Register. This is useful in debugging, and in systems that have a bus time-out or watchdog timer.
Page 8-35
Page 8-36
9.1
Introduction
Endpoint Zero has special significance in a USB system. It is a CONTROL endpoint, and it is
required by every USB device. Only CONTROL endpoints accept special SETUP tokens that the
host uses to signal transfers that deal with device control. The USB host sends a suite of standard
device requests over endpoint zero. These standard requests are fully defined in Chapter 9 of the
USB Specification. This chapter describes how the EZ-USB FX chip handles endpoint zero
requests.
Because EZ-USB FX must enumerate without firmware (see Chapter 5. "EZ-USB FX Enumeration
& ReNumeration"), the USB core contains logic to perform enumeration on its own. This hardware assist of endpoint zero operations is made available to the 8051, simplifying the code
required to service device requests. This chapter deals with 8051 control of endpoint zero
(RENUM=1, Chapter 5. "EZ-USB FX Enumeration & ReNumeration"), and describes EZ-USB
FX resources, such as the Setup Data Pointer, that simplify 8051 code handling endpoint zero
requests.
Endpoint zero is the only CONTROL endpoint in EZ-USB FX. Although CONTROL endpoints are
bi-directional, the EZ-USB FX chip provides separate 64-byte buffers, IN0BUF and OUT0BUF,
which the 8051 handles exactly like bulk endpoint buffers for the data stages of a CONTROL transfer. A second 8-byte buffer, SETUPDAT, which is unique to endpoint zero, holds data that arrives in
the SETUP stage of a CONTROL transfer. This relieves the 8051 programmer of tracking of the
three CONTROL transfer phasesSETUP, DATA, and STATUS. The USB core also generates
separate interrupt requests for the various transfer phases, further simplifying code.
The IN0BUF and OUT0BUF Buffers have two special properties that result from being used by
CONTROL endpoint zero:
Endpoints 0-IN and 0-OUT are always valid. The valid bits (LSB of IN07VAL and
OUT07VAL Registers) are permanently set to 1. Writing any value to these two bits has no
effect. Reading these bits always returns a 1.
Endpoint 0 cannot be paired with endpoint 1, so there is no pairing bit in the USBPAIR
Register for endpoint 0 or 1.
Page 9-1
9.2
SETUP Stage
S
A E C
E
D N R
T
D D C
U
R P 5
P
Token Packet
D
A
T
A
0
C
R
C
1
6
8 bytes
Setup
Data
Data Packet
A
C
K
H/S Pkt
SUTOK Interrupt
Core sets HSNAK=1
SUDAV Interrupt
DATA Stage
A E
I D N
N D D
R P
C
R
C
5
D
A
T
A
1
C
R
C
1
6
Payload
Data
Data Packet
Token Packet
A E
I D N
N D D
R P
A
C
K
C
R
C
5
D
A
T
A
0
Token Packet
H/S Pkt
Payload
Data
Data Packet
EP0-IN Interrupt
C
R
C
1
6
A
C
K
H/S Pkt
EP0-IN Interrupt
STATUS Stage
A E
O
D N
U
D D
T
R P
C
R
C
5
Token Packet
D
A
T
A
1
Data
C
R
C
1
6
Pkt
S
N
Y
A
N
K
C
H/S Pkt
....
A E
O
D N
U
D D
T
R P
C
R
C
5
Token Packet
D
A
T
A
1
Data
C
R
A
C
C
1
K
6
Pkt H/S Pkt
Page 9-2
The STATUS stage consists of an empty data packet with the opposite direction of the data stage,
or an IN if there was no data stage. This empty data packet gives the device a chance to ACK or
NAK the entire CONTROL transfer. The 8051 writes a 1 to a bit call HSNAK (Handshake NAK) to
clear it and instruct the USB core to ACK the STATUS stage.
The HSNAK Bit holds off completing the CONTROL transfer until the device has had time to
respond to a request. For example, if the host issues a Set_Interface Request, the 8051 performs
various housekeeping chores, such as adjusting internal modes and re-initializing endpoints. During this time, the host issues handshake (STATUS stage) packets to which the USB core responds
with NAKs, indicating busy. When the 8051 completes the desired operation, it sets HSNAK=1
(by writing a 1 to the bit) to terminate the CONTROL transfer. This handshake prevents the host
from attempting to use a partially configured interface.
To perform an endpoint stall for the DATA or STATUS stage of an endpoint zero transfer (the
SETUP stage can never stall), the 8051 must set both the STALL and HSNAK Bits for endpoint
zero.
Some CONTROL transfers do not have a DATA stage. Therefore, the 8051 code that processes
the SETUP data should check the length field in the SETUP data (in the 8-byte buffer at SETUPDAT) and arm endpoint zero for the DATA phase (by loading IN0BC or OUT0BC) only if the length
field is non-zero.
Two 8051 interrupts provide notification that a SETUP packet has arrived, as shown in Figure 9-2.
SETUP Stage
S
A E C
E
D N R
T
D D C
U
R P 5
P
Token Packet
SUTOK
Interrupt
D
A
T
A
0
8 bytes
Setup
Data
Data Packet
C
R
C
1
6
A
C
K
SETUPDAT
8 RAM
bytes
H/S Pkt
SUDAV
Interrupt
Page 9-3
Data transfer
SETUPDAT
USBIEN
8 Bytes of
SETUP Data
Global Enable:
T=Setup Token SUTOKIE
D=Setup Data SUDAVIE
Interrupt Control
USBIRQ
Interrupt Request:
T=Setup Token SUTOKIR
D=Setup Data SUDAVIR
SUDPTRH
15
14
13
12
11
10
SUDPTRL
Page 9-4
9.3
USB Requests
The Universal Serial Bus Specification Version 1.1, Chapter 9, "USB Device Framework" defines a
set of Standard Device Requests. When the 8051 is in control (RENUM=1), the USB core handles
one of these requests (Set Address) directly, and relies on the 8051 to support all of the others.
The 8051 acts on device requests by decoding the eight bytes contained in the SETUP packet and
available at SETUPDAT (see Table 9-2). Table 9-1 defines these eight bytes.
Field
Meaning
bRequest
wValueL
wValueH
wIndexL
wIndexH
wLengthL
wLengthH
The Byte column in the previous table shows the byte offset from SETUPDAT. The Field column
shows the different bytes in the request, where the bm prefix means bit-map, b means byte, and
w means word (16 bits). Table 9-2 shows the different values defined for bRequest, and how the
8051 responds to each request. The remainder of this chapter describes each of the requests in
Table 9-2 in detail.
Table 9-2 applies when RENUM=1, signifying that the 8051, and not the USB core, handles device
requests. Table 9-2 shows how the core handles each of these device requests when RENUM=0,
for example when the chip is first powered and the 8051 is not running.
Page 9-5
Table 9-2. How the 8051 Handles USB Device Requests (RENUM=1)
bReques
Name
t
0x00
Get Status
0x01
Clear Feature
0x02
(reserved)
0x03
Set Feature
0x04
(reserved)
0x05
Set Address
0x06
Get Descriptor
0x07
Set Descriptor
0x08
Get Configuration
0x09
Set Configuration
0x0A
Get Interface
0x0B
Set Interface
0x0C
Sync Frame
Vendor Requests
0xA0 (Firmware Load)
0xA1 - 0xAF
All except 0xA0
Action
8051 Response
SUDAV Interrupt
SUDAV Interrupt
none
SUDAV Interrupt
none
Update FNADDR Register
SUDAV Interrupt
SUDAV Interrupt
SUDAV Interrupt
SUDAV Interrupt
SUDAV Interrupt
SUDAV Interrupt
SUDAV Interrupt
Up/Download RAM
SUDAV Interrupt
SUDAV Interrupt
In the ReNumerated condition (RENUM=1), the USB core passes all USB requests, except Set
Address, onto the 8051 via the SUDAV interrupt. This, in conjunction with the USB disconnect/
connect feature, allows a completely new and different USB device (yours) to be characterized by
the downloaded firmware.
The USB core implements one vendor-specific request, namely Firmware Load, 0xA0. (The
bRequest value of 0xA0 is valid only if byte 0 of the request, bmRequestType, is also x10xxxxx,
indicating a vendor-specific request.) The load request is valid at all times, so even after ReNumeration the load feature may be used. If your application implements vendor-specific USB
requests, and you do not wish to use the Firmware Load feature, be sure to refrain from using the
bRequest value 0xA0 for your custom requests. The Firmware Load feature is fully described in
Chapter 5. "EZ-USB FX Enumeration & ReNumeration".
To avoid future incompatibilities, vendor requests A0-AF (hex) are reserved by Cypress Semiconductor.
Page 9-6
The USB core activates the SUDAV interrupt request to tell the 8051 to decode the SETUP packet
and supply the appropriate status information.
SETUP Stage
S
A E C
E
D N R
T
D D C
U
R P 5
P
Token Packet
D
A
T
A
0
C
R
C
1
6
8 bytes
Setup
Data
Data Packet
SUTOK
Interrupt
A
C
K
SETUPDAT
8 RAM
bytes
H/S Pkt
SUDAV
Interrupt
DATA Stage
A E
I D N
N D D
R P
C
R
C
5
Token Packet
D
C
A
R
2
T
C
Bytes
A
1
1
6
Data Packet
A
C
K
H/S Pkt
IN0BUF
64-byte
Buffer
STATUS Stage
A E
O
D N
U
D D
T
R P
C
R
C
5
Token Packet
D C
A R
T C
A 1
1 6
Data Pkt
A
C
K
IN0BC
H/S Pkt
Page 9-7
Field
Value
Meaning
bmRequestType
0x80
IN, Device
bRequest
0x00
Get Status
wValueL
0x00
wValueH
0x00
wIndexL
0x00
wIndexH
0x00
wLengthL
0x02
wLengthH
0x00
8051 Response
Load two bytes into IN0BUF
Byte 0 : bit 0 = Self Powered Bit
: bit 1 = Remote Wakeup
Byte 1 : zero.
Get_Status-Device queries the state of two bits, Remote Wakeup and Self-Powered. The Remote
Wakeup Bit indicates whether or not the device is currently enabled to request remote wakeup.
Remote wakeup is explained in Chapter 14. "EZ-USB FX Power Management." The Self-Powered
Bit indicates whether or not the device is self-powered (as opposed to USB bus-powered).
The 8051 returns these two bits by loading two bytes into IN0BUF, and then loading a byte count
of two into IN0BC.
Table 9-4. Get Status-Endpoint (Stall Bits)
Byte
Field
Value
bmRequestType
0x82
IN, Endpoint
bRequest
0x00
Get Status
wValueL
0x00
wValueH
0x00
wIndexL
EP
wIndexH
0x00
wLengthL
0x02
wLengthH
0x00
Meaning
8051 Response
Byte 1 : zero
Endpoint Number
EP(n):
0x00-0x07: OUT0-OUT7
Each bulk endpoint (IN or OUT) has a STALL Bit in its Control and Status Register (bit 0). If the
CPU sets this bit, any requests to the endpoint return a STALL handshake rather than ACK or
NAK. The Get Status-Endpoint Request returns the STALL state for the endpoint indicated in byte
4 of the request. Note that bit 7 of the endpoint number EP (byte 4) specifies direction.
Endpoint zero is a CONTROL endpoint, which by USB definition is bi-directional. Therefore, it has
only one stall bit.
Page 9-8
About STALL
The USB STALL handshake indicates that something unexpected has happened. For
instance, if the host requests an invalid, alternate setting or attempts to send data to a nonexistent endpoint, the device responds with a STALL handshake over endpoint zero instead
of ACK or NAK.
Stalls are defined for all endpoint types except ISOCHRONOUS, which do not employ handshakes. Every EZ-USB FX bulk endpoint has its own stall bit. The 8051 sets the stall condition for an endpoint by setting the stall bit in the endpoints CS Register. The host tells the
8051 to set or clear the stall condition for an endpoint using the Set_Feature/Stall and
Clear_Feature/Stall Requests.
An example of the 8051 setting a stall bit is a routine that handles endpoint zero device
requests. If an undefined or non-supported request is decoded, the 8051 should stall EP0.
(EP0 has a single stall bit because it is a bi-directional endpoint.)
Once the 8051 stalls an endpoint, it should not remove the stall until the host issues a
Clear_Feature/Stall Request. An exception to this rule is endpoint 0, which reports a stall
condition only for the current transaction, and then automatically clears the stall condition.
This prevents endpoint 0, the default CONTROL endpoint, from locking out device requests.
Page 9-9
Field
Value
Meaning
8051 Response
bmRequestType
0x81
IN, Endpoint
bRequest
0x00
Get Status
Byte 0 : zero
wValueL
0x00
wValueH
0x00
wIndexL
0x00
wIndexH
0x00
wLengthL
0x02
wLengthH
0x00
Byte 1 : zero
Get_Status/Interface is easy: the 8051 returns two zero bytes through IN0BUF and clears the
HSNAK Bit. The requested bytes are shown as Reserved (Reset to zero) in the USB Specification.
Field
Value
Meaning
bmRequestType
0x00
OUT, Device
bRequest
0x03
Set Feature
wValueL
0x01
Feature Selector:
Remote Wakeup
wValueH
0x00
wIndexL
0x00
wIndexH
0x00
wLengthL
0x00
wLengthH
0x00
8051 Response
Set the Remote Wakeup Bit
The only Set_Feature/Device Request presently defined in the USB Specification is to set the
remote wakeup bit. This is the same bit reported back to the host as a result of a Get StatusDevice Request (Table 9-3). The host uses this bit to enable or disable remote wakeup by the
device.
Page 9-10
wValueH
wIndexL
wIndexH
wLengthL
wLengthH
Value
Meaning
0x02 OUT, Endpoint
0x03 Set Feature
0x00 Feature Selector:
STALL
0x00
EP
0x00
0x00
0x00
8051 Response
Set the STALL Bit for the
indicated endpoint:.
EP(n):
0x00-0x07: OUT0-OUT7
0x80-0x87: IN0-IN7
The only Set_Feature/Endpoint Request presently defined in the USB Specification is to stall an
endpoint. The 8051 should respond to this request by setting the stall bit in the Control and Status
Register for the indicated endpoint EP (byte 4 of the request). The 8051 can either stall an endpoint on its own or in response to the device request. Endpoint stalls are cleared by the host
Clear_Feature/Stall Request.
The 8051 should respond to the Set_Feature/Stall Request by performing the following tasks:
1. Set the stall bit in the indicated endpoints CS Register.
2. Reset the data toggle for the indicated endpoint.
3. For an IN endpoint, clear the busy bit in the indicated endpoints CS Register.
4. For an OUT endpoint, load any value into the endpoints byte count register.
5. Clear the HSNAK Bit in the EP0CS Register (by writing 1 to it) to terminate the Set_Feature/
Stall CONTROL transfer.
Steps 3 and 4 restore the stalled endpoint to its default condition, ready to send or accept data
after the stall condition is removed by the host (using a Clear_Feature/Stall Request). These steps
are also required when the host sends a Set_Interface Request.
Data Toggles
The USB core automatically maintains the endpoint toggle bits to ensure data integrity for
USB transfers. The 8051 should directly manipulate these bits only for a very limited set of
circumstances:
Set_Feature/Stall
Set_Configuration
Set_Interface
Page 9-11
Field
bmRequestType
Value
Meaning
0x00
OUT, Device
bRequest
0x01
Clear Feature
wValueL
0x01
Feature Selector:
Remote Wakeup
wValueH
0x00
wIndexL
0x00
wIndexH
0x00
wLengthL
0x00
wLengthH
0x00
8051 Response
Clear the remote wakeup bit.
Field
Value
Meaning
8051 Response
OUT, Endpoint
0x01
Clear Feature
indicated endpoint:.
0x00
Feature Selector:
STALL
bmRequestType
0x02
bRequest
wValueL
wValueH
0x00
wIndexL
EP
wIndexH
0x00
0x00-0x07: OUT0-OUT7
wLengthL
0x00
0x80-0x87: IN0-IN7
wLengthH
0x00
EP(n):
If the USB device supports remote wakeup (reported in its descriptor table when the device enumerates), the Clear_Feature/Remote Wakeup Request disables the wakeup capability.
The Clear_Feature/Stall removes the stall condition from an endpoint. The 8051 should respond
by clearing the stall bit in the indicated endpoints CS Register.
Page 9-12
such information as what device driver to load, how many endpoints it has, its different configurations, alternate settings it may use, and informative text strings about the device.
The USB core provides a special Setup Data Pointer to simplify 8051 service for Get_Descriptor
Requests. The 8051 loads this 16-bit pointer with the beginning address of the requested descriptor, clears the HSNAK Bit (by writing 1 to it), and the USB core does the rest.
SETUP Stage
S
A E C
E
D N R
T
D D C
U
R P 5
P
Token Packet
D
A
T
A
0
8 bytes
Setup
Data
C
R
C
1
6
Data Packet
A
C
K
SETUPDAT
8 RAM
bytes
H/S Pkt
SUDAV Interrupt
DATA Stage
A E
I D N
N D D
R P
C
R
C
5
Token Packet
D
A
T
A
1
Payload
Data
Data Packet
C
R
C
1
6
A
C
K
H/S Pkt
A E
I D N
N D D
R P
C
R
C
5
Token Packet
EP0IN
Interrupt
STATUS Stage
A E
O
D N
U
D D
T
R P
C
R
C
5
Token Packet
D C
A R
A
T C
C
A 1
K
1 6
Data Pkt H/S Pkt
D
A
T
A
0
C
R
C
1
6
Payload
Data
Data Packet
A
C
K
H/S Pkt
EP0IN
Interrupt
SUDPTRH/L
64 bytes
27 bytes
Figure 9-5. Using Setup Data Pointer (SUDPTR) for Get_Descriptor Requests
Figure 9-5 illustrates use of the Setup Data Pointer. This pointer is implemented as two registers,
SUDPTRH and SUDPTRL. Most Get_Descriptor Requests involve transferring more data than fits
into one packet. In the Figure 9-5 example, the descriptor data consists of 91 bytes.
The CONTROL transaction starts in the usual way, with the USB core transferring the eight bytes
in the SETUP packet into RAM at SETUPDAT and activating the SUDAV interrupt request. The
8051 decodes the Get_Descriptor Request, and responds by clearing the HSNAK Bit (by writing
1 to it), and then loading the SUDPTR Registers with the address of the requested descriptor.
Loading the SUDPTRL Register causes the USB core to automatically respond to two IN transfers
Page 9-13
Field
Value
Meaning
8051 Response
Set SUDPTR H-L to start of
bmRequestType
0x80
IN, Device
bRequest
0x06
wValueL
0x00
wValueH
0x01
wIndexL
0x00
wIndexH
0x00
wLengthL
LenL
wLengthH
LenH
Descriptor Type:
Device
As illustrated in Figure 9-5, the 8051 loads the 2-byte SUDPTR with the starting address of the
Device Descriptor table. When SUDPTRL is loaded, the USB core performs the following operations:
1. Reads the requested number of bytes for the transfer from bytes 6 and 7 of the SETUP packet
(LenL and LenH in Table 9-10).
2. Reads the requested descriptors length field to determine the actual descriptor length.
3. Sends the smaller of (a) the requested number of bytes or (b) the actual number of bytes in
the descriptor, over IN0BUF using the Setup Data Pointer as a data table index. This constitutes the second phase of the three-phase CONTROL transfer. The core packetizes the data
into multiple data transfers, as necessary.
4. Automatically checks for errors and re-transmits data packets if necessary.
5. Responds to the third (handshake) phase of the CONTROL transfer to terminate the operation.
The Setup Data Pointer can be used for any Get_Descriptor Request; for example,
Get_Descriptor-String. It can also be used for vendor-specific requests (you define), as long as
bytes 6-7 contain the number of bytes in the transfer (Step 1).
It is possible for the 8051 to do manual CONTROL transfers, directly loading the IN0BUF Buffer
with the various packets and keeping track of which SETUP phase is in effect. This is a good USB
Page 9-14
training exercise, but not necessary due to the hardware support built into the USB core for CONTROL transfers.
For DATA stage transfers of fewer than 64 bytes, moving the data into the IN0BUF Buffer and then
loading the EP0INBC Register with the byte count would be equivalent to loading the Setup Data
Pointer. However, this would waste 8051 overhead because the Setup Data Pointer requires no
byte transfers into the IN0BUF Buffer.
Field
Value
Meaning
8051 Response
Set SUDPTR H-L to start of
bmRequestType
0x80
IN, Device
bRequest
0x06
wValueL
CFG
Config Number
wValueH
0x02
Descriptor Type:
Configuration
wIndexL
0x00
wIndexH
0x00
wLengthL
LenL
wLengthH
LenH
table in RAM
Field
Value
Meaning
8051 Response
Set SUDPTR H-L to start of
bmRequestType
0x80
IN, Device
bRequest
0x06
wValueL
STR
String Number
wValueH
0x03
Descriptor Type:
String
wIndexL
0x00
(Language ID L)
wIndexH
0x00
(Language ID H)
wLengthL
LenL
wLengthH
LenH
in RAM.
Configuration and string descriptors are handled similarly to device descriptors. The 8051 firmware
reads byte 2 of the SETUP data to determine which configuration or string is being requested, then
loads the corresponding table pointer into SUDPTRH-L. The USB core does the rest.
Page 9-15
Value
Meaning
bmRequestType
Field
0x00
OUT, Device
Set_Descriptor
OUT0BUF.
bRequest
0x07
wValueL
0x00
wValueH
0x01
wIndexL
0x00
wIndexH
0x00
wLengthL
LenL
wLengthH
LenH
8051 Response
Descriptor Type:
Device
Page 9-16
Field
Value
Meaning
8051 Response
bmRequestType
0x00
OUT, Device
bRequest
0x07
Set_Descriptor
wValueL
0x00
wValueH
0x02
wIndexL
0x00
wIndexH
0x00
wLengthL
LenL
wLengthH
LenH
Descriptor Type:
Configuration
Field
Value
Meaning
IN, Device
8051 Response
Read string descriptor data over
bmRequestType
0x00
bRequest
0x07
Get_Descriptor OUT0BUF.
wValueL
0x00
Config Number
wValueH
0x03
Descriptor Type:
String
wIndexL
0x00
(Language ID L)
wIndexH
0x00
(Language ID H)
wLengthL
LenL
wLengthH
LenH
The 8051 handles Set_Descriptor Requests by clearing the HSNAK Bit (by writing 1 to it), then
reading descriptor data directly from the OUT0BUF Buffer. The USB core keeps track of the number of byes transferred from the host into OUT0BUF, and compares this number with the length
field in bytes 6 and 7. When the proper number of bytes has been transferred, the USB core automatically responds to the status phase, which is the third and final stage of the CONTROL transfer.
The 8051 controls the flow of data in the Data Stage of a Control Transfer. After the 8051 processes each OUT packet, it loads any value into the OUT endpoints byte count register to re-arm
the endpoint.
Page 9-17
A USB device has one or more configurations. Only one configuration is active
at any time.
A configuration has one or more interfaces, all of which are concurrently
active. Multiple interfaces allow different
host-side device drivers to be associated
with different portions of a USB device.
Device
Config 1
High Power
Interface 0
CDROM
control
Alt Setting
0
Interface 1
audio
Config 2
Low Power
Interface 3
data
storage
Interface 2
video
Alt Setting
1
Alt Setting
3
ep
ep
O ne at a tim e
Concurrent
O ne at a tim e
ep
This structure is a software model; the USB core takes no action when these settings
change. However, the 8051 must re-initialize endpoints when the host changes configurations or interfaces alternate settings.
As far as 8051 firmware is concerned, a configuration is simply a byte variable that indicates
the current setting.
The host issues a Set_Coniguration Request to select a configuration, and a
Get_Configuration Request to determine the current configuration.
Page 9-18
Field
Value
Meaning
8051 Response
Read and stash byte 2, change
bmRequestType
0x00
OUT, Device
bRequest
0x09
wValueL
CFG
Config Number
wValueH
0x00
wIndexL
0x00
wIndexH
0x00
wLengthL
0x00
wLengthH
0x00
When the host issues the Set_Configuration Request, the 8051 saves the configuration number
(byte 2 in Table 9-16), performs any internal operations necessary to support the configuration,
and finally clears the HSNAK Bit (by writing 1 to it) to terminate the Set_Configuration CONTROL
transfer.
After setting a configuration, the host issues Set_Interface commands to set up the various interfaces contained in the configuration.
Field
Value
Meaning
8051 Response
bmRequestType
0x80
IN, Device
bRequest
0x08
Get_Configuration
re-configuring.
wValueL
0x00
wValueH
0x00
wIndexL
0x00
wIndexH
0x00
wLengthL
LenL
wLengthH
LenH
The 8051 returns the current configuration number. It loads the configuration number into EP0IN,
loads a byte count of one into EP0INBC, and finally clears the HSHAK Bit (by writing 1 to it) to
terminate the Set_Configuration CONTROL transfer.
Page 9-19
Table 9-18. Set Interface (Actually, Set Alternate Setting AS for Interface IF)
Byte
0
Field
Value
bmRequestType
0x00
bRequest
0x0B
wValueL
AS
wValueH
0x00
wIndexL
IF
wIndexH
0x00
wLengthL
0x00
wLengthH
0x00
Meaning
8051 Response
OUT, Device
Set_Interface
Interface IF in firmware.
The 8051 should respond to a Set_Interface Request by performing the following steps:
1. Perform the internal operation requested (such as adjusting a sampling rate).
2. Reset the data toggles for every endpoint in the interface.
3. For an IN endpoint, clear the busy bit for every endpoint in the interface.
4. For an OUT endpoint, load any value into the byte count register for every endpoint in the
interface.
5. Clear the HSNAK Bit (by writing 1 to it) to terminate the Set_Feature/Stall CONTROL transfer.
Page 9-20
Field
Value
Meaning
8051 Response
bmRequestType
0x81
IN, Device
bRequest
0x0A
Get_Interface
OUT0BUF (1 byte).
wValueL
0x00
wValueH
0x00
wIndexL
IF
wIndexH
0x00
wLengthL
LenL
wLengthH
LenH
The 8051 simply returns the alternate setting for the requested interface IF, and clears the HSNAK
Bit by writing 1 to it.
Page 9-21
Field
Value
Meaning
8051 Response
bmRequestType
0x82
IN, Endpoint
Sync_Frame
bRequest
0x0C
wValueL
0x00
wValueH
0x00
wIndexL
EP
EP
Endpoint number
wIndexH
0x00
wLengthL
LenL
EP(n):
0x08-0x0F: OUT8-OUT15
wLengthH
LenH
0x88-0x8F: IN8-IN15
The Sync_Frame Request is used to establish a marker in time so the host and USB device can
synchronize multi-frame transfers over isochronous endpoints.
Suppose an isochronous transmission consists of a repeating sequence of five 300 byte packets
transmitted from host to device over EP8-OUT. Both host and device maintain sequence counters
that count repeatedly from 1 to 5 to keep track of the packets inside a transmission. To start up in
sync, both host and device need to reset their counts to 0 at the same time (in the same frame).
To get in sync, the host issues the Sync_Frame Request with EP=EP-OUT (byte 4). The 8051
firmware responds by loading IN0BUF with a two-byte frame count for some future time; for example, the current frame plus 20. This marks frame current+20 as the sync frame, during which
both sides initialize their sequence counters to 0. The 8051 reads the current frame count in the
USBFRAMEL and USBFRAMEH Registers.
Multiple isochronous endpoints can be synchronized in this manner. The 8051 would keep separate internal sequence counts for each endpoint.
Page 9-22
Field
bmRequestType
Value
Meaning
0x40
bRequest
0xA0
Firmware Load
wValueL
AddrL
Starting address
wValueH
AddrH
wIndexL
0x00
wIndexH
0x00
wLengthL
LenL
wLengthH
LenH
8051 Response
None required.
Number of bytes
Field
Value
Meaning
8051 Response
bmRequestType
0xC0
bRequest
0xA0
Firmware Load
wValueL
AddrL
Starting address
wValueH
AddrH
wIndexL
0x00
wIndexH
0x00
wLengthL
LenL
wLengthH
LenH
Number of Bytes
The USB core responds to two endpoint zero vendor requests, RAM Download and RAM Upload.
These requests are active in all modes (RENUM=0 or 1).
Because bit 7 of the first byte of the SETUP packet specifies direction, only one bRequest value
(0xA0) is required for the upload and download requests. These RAM load commands are available to any USB device that uses the EZ-USB FX chip.
A host loader program typically writes 0x01 to the CPUCS Register to put the 8051 into RESET,
loads all or part of the EZ-USB FX internal RAM with 8051 code, and finally reloads the CPUCS
Register with 0 to take the 8051 out of RESET. The CPUCS Register is the only USB register that
can be written using the Firmware Download command.
Page 9-23
Page 9-24
10.1 Introduction
Isochronous endpoints typically handle time-critical, streamed data delivered or consumed in bytesequential order. Examples are audio data sent to a DAC over USB or teleconferencing video data
sent from a camera to the host. Due to the byte-sequential nature of this data, the EZ-USB FX chip
makes isochronous data available as a single byte that represents the head or tail of an endpoint
FIFO.
The EZ-USB FX chips that support isochronous transfers implement sixteen isochronous endpoints, IN8-IN15 and OUT8-OUT15. 1,024 bytes of FIFO memory can be distributed over the 16
endpoint addresses. FIFO sizes for the isochronous endpoints are programmable.
OUTnDATA Register
(n=8-15)
8051 FIFO
SOF
USB FIFO
INnDATA Register
(n=8-15)
USB
OUT
Data
8051 FIFO
SOF
USB FIFO
USB
IN
Data
Page 10-1
Initialization
INISOVAL
15
14
13
12
Data transfer
11
10
IN8DATA
IN8ADDR
A9
A8
A7
A6
A5
A4
Data to USB
0
USBPAIR
USBIRQ
USBIEN
SOFIE (1=enabled)
10.2.1 Initialization
To initialize an isochronous IN endpoint, the 8051 performs the following:
1. Sets the endpoint valid bit for the endpoint.
2. Sets the endpoints FIFO size by loading a starting address (Section 10.4. "Setting Isochronous FIFO Sizes").
3. Sets the ISOSEND0 Bit in the USBPAIR Register for the desired response.
Page 10-2
4. Enables the SOF Interrupt. All isochronous endpoints are serviced in response to the SOF
Interrupt.
5. Sets the INT2SFR Bit in USBBAV to enable INT 2 clearing via the INT2CLR SFR Register.
The USB core uses the ISOSEND0 Bit to determine what to do if:
The 8051 does not load any bytes to an INnDATA Register during the previous frame, and
If ISOSEND0=0 (the default value), the USB core does not respond to the IN token. If
ISOSEND0=1, the USB core sends a zero-length data packet in response to the IN token. The
action to take depends on the overall system design. The ISOSEND0 Bit applies to all of the isochronous IN endpoints, EP8IN through EP15IN.
Page 10-3
Data transfer
Initialization
OUTISOVAL
14
15
13
12
11
10
OUT15DATA
A9
A8
A7
A6
A5
A4
USBIEN
OUT15ADDR
USBIRQ
SOFIE (1=enabled)
OUT15BCH
OUT15BCL
ISOERR
15
14
13
12
11
10
10.3.1 Initialization
To initialize an isochronous OUT endpoint, the 8051:
Sets the endpoints FIFO size by loading a starting address (Section 10.4. "Setting Isochronous FIFO Sizes").
Enables the SOF Interrupt. All isochronous endpoints are serviced in response to the SOF
Interrupt.
Sets the INT2SFR Bit in USBBAV to enable INT 2 clearing via the INT2CLR SFR.
Page 10-4
To respond to the SOF Interrupt, the 8051 clears the USB Interrupt (8051 INT2), and clears the
SOFIR Bit by writing 1 to it. Then, the 8051 reads data from the appropriate OUTnDATA FIFO
Register(s). The 8051 can check an error bit in the ISOERR Register to determine if a CRC error
occurred for the endpoint data. Isochronous data is never re-sent, so the firmware must decide
what to do with bad-CRC data.
Address
A9
A8
A7
A6
A5
A4
Register
Figure 10-4. FIFO Start Address Format
Page 10-5
Function
OUT8ADDR
OUT9ADDR
b7
b6
b5
b4
b3
b2
b1
b0
A9
A8
A7
A6
A5
A4
A9
A8
A7
A6
A5
A4
A9
A8
A7
A6
A5
A4
A9
A8
A7
A6
A5
A4
A9
A8
A7
A6
A5
A4
A9
A8
A7
A6
A5
A4
A9
A8
A7
A6
A5
A4
A9
A8
A7
A6
A5
A4
IN8ADDR
A9
A8
A7
A6
A5
A4
IN9ADDR
A9
A8
A7
A6
A5
A4
IN10ADDR
A9
A8
A7
A6
A5
A4
IN11ADDR
A9
A8
A7
A6
A5
A4
IN12ADDR
A9
A8
A7
A6
A5
A4
IN13ADDR
A9
A8
A7
A6
A5
A4
IN14ADDR
A9
A8
A7
A6
A5
A4
IN15ADDR
A9
A8
A7
A6
A5
A4
Page 10-6
0100
0100
0010
0010
0010
0010
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
;
0000
0040
0044
0048
0048
0048
0048
0048
0048
0088
008C
0090
0090
0090
0090
0090
EP8INSZ
EP8OUTSZ
EP9INSZ
EP9OUTSZ
EP10INSZ
EP10OUTSZ
EP11INSZ
EP11OUTSZ
EP12INSZ
EP12OUTSZ
EP13INSZ
EP13OUTSZ
EP14INSZ
EP14OUTSZ
EP15INSZ
EP15OUTSZ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
256
256
16
16
16
16
0
0
0
0
0
0
0
0
0
0
8OUTAD
9OUTAD
10OUTAD
11OUTAD
12OUTAD
13OUTAD
14OUTAD
15OUTAD
8INAD
9INAD
10INAD
11INAD
12INAD
13INAD
14INAD
15INAD
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
0
8OUTAD
9OUTAD
10OUTAD
11OUTAD
12OUTAD
13OUTAD
14OUTAD
15OUTAD
8INAD
9INAD
10INAD
11INAD
12INAD
13INAD
14INAD
Page 10-7
mov
mov
movx
mov
clr
movx
mov
mov
movx
mov
mov
movx
mov
dptr, #DMASRCH
a, #080h
@dptr, a
dptr, #DMASRCL
a
@dptr, a
dptr, #DMADESTH
a, #low(IN8DATA)
@dptr, a
dptr, #DMADESTL
a, #hi(IN8DATA)
@dptr, a
dptr, #DMALEN
mov
movx
mov
a, #nbytes
@dptr, a
dptr, #DMAGO
movx
@dptr, a
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
Page 10-8
ISOCTL
Isochronous Control
7FA1
b7
b6
b5
b4
b3
b2
b1
b0
PPSTAT
MBZ
MBZ
ISODISAB
RD#, WR#
0
(default)
20007B40,
8000-FFFF
28007B40,
8000-FFFF
ISOCTL Register bits listed as MBZ (must be zero) in Figure 10-7 must be written with zeros. The
PPSTAT Bit toggles every SOF, and may be written with any value (no effect). Therefore, to disable
the isochronous endpoints, the 8051 should write the value 0x01 to the ISOCTL Register.
Caution! If you use this option, be absolutely certain that the host never sends isochronous
data to your device. Isochronous data directed to a disabled isochronous endpoint system causes
unpredictable operation.
Page 10-9
The Autopointer is not usable from 0x2000-0x27FF (the reclaimed ISO buffer RAM) when ISODISAB=1.
7FA2
b7
b6
b5
b4
b3
b2
b1
b0
EP15
EP14
EP13
EP12
EP11
EP10
EP9
EP8
USBPAIR
7FDD
b7
b6
b5
b4
b3
b2
b1
b0
ISOEND0
PR6OUT
PR4OUT
PR2OUT
PR6IN
PR4IN
PR2IN
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 10-10
Page 10-11
Page 10-12
11.1 Introduction
The EZ-USB FX incorporates a Direct Memory Access (DMA) system that transfers byte data
between on-chip or off-chip resources without 8051 intervention. Data can be transferred very
quickly (as fast as one byte per 48-MHz clock) using the following sources and destinations:
External FIFOs
Internal RAM
External RAM.
The 8051 sets up a DMA transfer by initializing registers with a source address, a destination
address, and a byte transfer count. Up to 256 bytes can be programmed per transfer. Then the
8051 writes a control register to initiate the DMA transfer. The DMA unit signals end-of-transfer
with a vectored DMADONE Interrupt request through 8051 INT4.
Most source-destination pairs are supported. The exceptions are explained in this chapter.
Normally a RAM or ROM is connected to the EZ-USB FX address and data bus, which uses the
RD# and WR# pins for strobes. It is also possible to connect an external FIFO to the data bus and
use a second set of strobe signals, FRD# (Fast Read) and FWR# (Fast Write).
Page 11-1
784F
b7
b6
b5
b4
b3
b2
b1
b0
A15
A14
A13
A12
A11
A10
A9
A8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
DMASRCL
7850
b7
b6
b5
b4
b3
b2
b1
b0
A7
A6
A5
A4
A3
A2
A1
A0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
DMADESTH
7851
b7
b6
b5
b4
b3
b2
b1
b0
A15
A14
A13
A12
A11
A10
A9
A8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 11-2
DMADESTL
7852
b7
b6
b5
b4
b3
b2
b1
b0
A7
A6
A5
A4
A3
A2
A1
A0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
DMALEN
7854
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Figure 11-5. DMA Transfer Length (0=256 Bytes, 1=1 Byte, ... 255=255 Bytes)
There are some restrictions on DMA source-destination pairs. Table 11-1 shows all possible
sources and destinations, and which transfers are permitted. The main restriction is that transfers
may not occur in the same 2-KB RAM block in which the 8051 code is running.
To elaborate, the internal 8-KB RAM is divided into four 2-KB blocks, as follows:
Block0
0000-07FF
Block1
0800-0FFF
Block2
1000-17FF
Block3
1800-1FFF
Because the internal RAM combines 8051 program and data RAM, the 8051 is normally running in
(fetching code from) one of these RAM blocks. The RAM block in which the 8051 code is running
during a DMA transfer may not be used simultaneously as a DMA source or destination.
Block 3 has some special considerations. While doing DMA transfers in or out of Block 3 (a common case, because Block 3 contains the endpoint buffers), you may not simultaneously run code
in this block, or access the following resources:
Page 11-3
Block 3 RAM
Some care should be exercised to observe the rule that you cant run 8051 code in RAM that is
simultaneously involved in a DMA transfer. For example, if the 8051 is running code in Block 1 and
doing a DMA transfer to/from Block 0, an 8051 interrupt would skip to Block 0 to fetch the interrupt
vector, and violate the rule.
The safest way to do internal RAM DMA transfers is to put your data buffer into Block 2 or Block 3,
and the background code (which runs during the DMA transfer) in Block 0 or Block 1.
This restriction applies only when internal RAM is used as a DMA source or destination.
Table 11-1. DMA Sources and Destinations
RAM
0
RAM RAM
1
2
RAM3/
WF
Bulk
Desc
Buffers
ISO
IN
EXT
MEM
Recl
ISO
AOUT
FIFO
BOUT
FIFO
EXT
FIFO
RAM1
RAM2
RAM3/Bulk
Buffers
ISO OUT
EXT MEM
Reclaimed ISO
AIN FIFO
BIN FIFO
EXT FIFO
DMA Source
RAM0
A cell with an asterisk is permitted as long as the 8051 is not executing code in either the
source or destination memory block.
N A shaded cell with an N is not permitted. The results are unpredictable.
*
DMA transfers involving mixed internal and external access are not permitted. For example, transferring across the 0x2800 boundary with ISODISAB=1 is illegal. So is transferring across the
0xFFFF (external) to 0x00 (internal) boundary and crossing the 7FFF to 8000 boundary.
Page 11-4
Table 11-1 shows all DMA source and destinations, and indicates which DMA transfers are permitted. Table 11-2 explains the legends used in Table 11-1.
A blank cell indicates a legal source and destination under all conditions.
RAM3 contains the bulk buffers. Executing code RAM3 precludes DMA access to the bulk
buffers. The bulk buffer area may not be used as program space.
Description
RAM0
RAM1
RAM2
RAM3
Bulk Buffers
EXT MEM
Reclaimed ISO
AIN FIFO
Source only. Slave FIFO A-IN. FIFO register is at XDATA 7800 (AINDATA).
AOUT FIFO
BIN FIFO
Source only. Slave FIFO B-IN. FIFO register is at XDATA 7805 (BINDATA).
BOUT FIFO
EXT FIFO
Page 11-5
7855
b7
b6
b5
b4
b3
b2
b1
b0
DONE
R/W
DONE
This read-only bit indicates that the DMA transfer specified by the source and destination
addresses and byte count has completed. DONE=0 indicates DMA is in progress; DONE=1
indicates completion. If enabled, a vectored INT4 Interrupt request is generated on a zero-toone transition of the DONE Bit.
7FE2
b7
b6
b5
b4
b3
b2
b1
b0
FISO
FBLK
RPOL
RMOD1
RMOD0
WPOL
WMOD1
WMOD0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
DMABURST
7857
b7
b6
b5
b4
b3
b2
b1
b0
DSTR2
DSTR1
DSTR0
RB
WB
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 11-6
This register enables synchronous burst reads and writes on the 8051 address/data bus (RB and
WB), and selects cycle stretch values for the read and write strobes (DSTR[2..0]). Refer to Section
11.4.1. "DMA External Writes" and Section 11.4.2. "DMA External Reads" for more information on
DMA Stretch.
Bit 4-2:
DSTR[2..0]
DMA Stretch
The read and write strobes used in external DMA transfers are controlled by the following bits:
For DMA Reads:
One of four read strobe waveforms (synonymous with modes) is selected by the
RMOD[1..0] Bits in the FASTXFR Register.
Read strobe polarity is set by the RPOL Bit in the FASTXFR Register.
Read strobe duration is set by the DMA Stretch Bits (DSTR[2..0]) in the DMABURST Register. This overrides the 8051 stretch bits in PCON that set RD/WR pulse widths (DMA
only).
One of four write strobe waveforms is selected by the WMOD[1..0] Bits in the FASTXFR
Register.
Write strobe polarity is set by the WPOL Bit in the FASTXFR Register.
Write strobe duration is set by the DSTR[2..0] Bits in the DMABURST Register.
The external DMA read and write stretch values are the same, as set by the DSTR[2..0] Bits.
Bit 1:
RB
When RB=1, a burst read DMA transfer is performed over the EZ-USB FX data bus. The term
burst means that the read strobe stays low during multiple-byte transfers, and the CLKOUT
signal (CLK24/48 in Figure 11-8. and Figure 11-9.) synchronizes the data. DMA burst reads
work only for two read waveforms, Mode 0 and Mode 1. The stretch value DSTR[2..0] has no
effect in burst read mode.
Page 11-7
tCL
41.66 ns
or 20.83 ns
CLK24/48
In
D[7..0]
In
FRD/RD
(RB=0)
In
D[7..0]
In
In
FRD/RD
(RB=1)
tCL
41.66 ns
or 20.83 ns
CLK24/48
In
D[7..0]
In
FRD/RD
(RB=0)
In
D[7..0]
In
In
FRD/RD
(RB=1)
WB
When WB=1, a burst write DMA transfer is performed over the EZ-USB FX data bus. The term
burst means that the write strobe stays low during multiply-byte transfers, and the CLKOUT
signal (shown as CLK24/48 in Figure 11-10.) synchronizes the output data. DMA burst writes
Page 11-8
work only for the Mode 0 waveform (WMOD[1..0] must be programmed to 00). The DMA
stretch value DSTR[2..0] has no effect in burst write.
CLK24/48
D[7..0]
Output
Output
Output
WR/FWR
(WB=0)
(DMAWB=0)
CLK24/48
D[7..0]
out
out
out
out
out
out
out
WR/FWR
(WB=1)
(DMAWB=1)
DMAEXTFIFO
7858
b7
b6
b5
b4
b3
b2
b1
b0
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
Page 11-9
The FRD# or FWR# pins are used as strobes instead of the RD# and WR# pins.
The address bus follows the 8051 program counter rather than incrementing.
The typical use for this transfer type is to connect a FIFO to the EZ-USB FX data bus.
Active
Strobes
Address Bus
RD#, WR#
Increments
DMAEXTFIFO (0x7858)
FRD#, FWR#
Follows 8051 PC
For external DMA transfers, the timing of the DMA strobe signals is governed by two registers,
FASTXFR and DMABURST, as previously described. Internal DMA transfers (both source and
destination inside the EZ-USB FX), occur at one byte per clock, independent of stretch value or
settings of the FASTXFR or DMABURST Registers.
For normal (non-DMA) 8051 external transfers (these use the MOVX instruction), the timing of the
RD# and WR# strobes is governed by the stretch value programmed into the 8051 CKCON Register CKCON[2..0].
Page 11-10
tCL
41.66 ns
or 20.83 ns
CLK24/48
Note
D[7..0]
Output
Note
Mode 00
Note
Mode 01
Note
Mode 10
Note
Mode 11
Note: These edges extend in time for stretch values greater than 000
Page 11-11
000
3 clocks
001
6 clocks
Add 2 clocks
010
10 clocks
Add 6 clocks
011
14 clocks
Add 10 clocks
100
18 clocks
Add 14 clocks
101
22 clocks
Add 18 clocks
110
26 clocks
Add 22 clocks
111
30 clocks
Add 26 clocks
tCL
41.66 ns
or 20.83 ns
CLK24/48
D[7..0]
In
Mode 0
D[7..0]
In
Mode 1
Note
D[7..0]
In
Note
Mode 2
Note
D[7..0]
In
Note
Mode 3
Note: These edges extend in time for stretch values greater than 000
Page 11-12
The DMA Read strobes (RD# or FRD#) exhibit the four basic waveforms shown in Figure 11-14.
for the four modes selected by FASTXFR[4..3].
Mode 2 Read
Strobe Width
Mode 3 Read
Strobe Width
000
2 clocks
3 clocks
001
4 clocks
5 clocks
010
8 clocks
9 clocks
011
12 clocks
13 clocks
100
16 clocks
17 clocks
101
20 clocks
21 clocks
110
24 clocks
25 clocks
111
28 clocks
29 clocks
Page 11-13
Page 11-14
12.1 Introduction
The EZ-USB FX enhanced 8051 responds to the interrupts shown in Table 12-1. Interrupt sources
that are not present in the standard 8051 are marked with an X in the New column of the table.
The three interrupts used by the USB core are shown in bold type.
Source
Vector
(hex)
Natural
Priority
IE0
INT0# Pin
03
TF0
Timer 0 Overflow
0B
IE1
INT1# Pin
13
TF1
Timer 1 Overflow
1B
UART0 Rx & Tx
23
TF2
Timer 2 Overflow
2B
Resume (WAKEUP)
33
UART1 Rx & Tx
3B
USB (INT2)
USB Core
43
I2C-compatible (INT3)
USB Core
4B
IE4 (FIFOs)
53
10
IE5
INT5# Pin
5B
11
IE6
INT6 Pin
63
12
The Natural Priority column in Table 12-1 shows the 8051 interrupt priorities. As explained in
Chapter 18. "8051 Hardware Description", the 8051 can assign each interrupt to a high or low priority group. The 8051 resolves priorities within the groups using the natural priorities.
Page 12-1
Wakeup After the EZ-USB FX chip detects USB suspend and the 8051 has entered its
idle state, the USB core responds to an external signal on its WAKEUP# pin or resumption
of USB bus activity by re-starting the EZ-USB FX oscillator and resuming 8051 operation.
USB Signaling These include 16 bulk endpoint interrupts, three interrupts not specific
to a particular endpoint (SOF, Suspend, USB Reset), and two interrupts for CONTROL
transfers (SUTOK, SUDAV). These interrupts share the USB interrupt (INT2). Also
included is an interrupt indicating that a bulk packet was NAKd.
Page 12-2
EZ-USB
00
SUDAV
01
SOF
02
SUTOK
03
SUSP
04
URES
05
IBN
06
EP0-IN
07
EP0-OUT
08
EP1-IN
09
EP1-OUT
0A
EP2-IN
0B
EP2-OUT
0C
EP3-IN
0D
EP3-OUT
0E
EP4-IN
0F
EP4-OUT
10
EP5-IN
11
EP5-OUT
12
EP6-IN
13
EP6-OUT
14
EP7-IN
8051
EIE.0
8051 "USB"
Interrupt
S
R
EXIF.4(rd)
EXIF.4(0)
OUT07IEN.7
15
EP7-OUT
IN07IRQ.7(1)
IN07IRQ.7 (rd)
AVEC
IV4
IV3
IV2
IV1
IV0
Page 12-3
Important
It is important in any USB Interrupt Service Routine (ISR) to clear the 8051 INT2 Interrupt
before clearing the particular USB interrupt request latch. This is because as soon as the
USB interrupt is cleared, any pending USB interrupt will pulse the 8051 INT2 Input. If the
INT2 Interrupt Request latch has not been previously cleared the pending interrupt is lost.
Page 12-4
USB_ISR:
push
push
push
push
push
push
dps
dpl
dph
dpl1
dph1
acc
mov
clr
mov
a,EXIF
acc.4
EXIF,a
mov
mov
movx
dptr,#IN07IRQ
a,#00000100b
@dptr,a
; Note:
;
; (perform interrupt routine stuff)
;
pop
acc
pop
dph1
pop
dpl1
pop
dph
pop
dpl
pop
dps
;
reti
7FA9
b7
b6
b5
b4
b3
b2
b1
b0
IN7IR
IN6IR
IN5IR
IN4IR
IN3IR
IN2IR
IN1IR
IN0IR
OUT07IRQ
7FAA
b7
b6
b5
b4
b3
b2
b1
b0
OUT7IR
OUT6IR
OUT5IR
OUT4IR
OUT3IR
OUT2IR
OUT1IR
OUT0IR
Page 12-5
USBIRQ
7FAB
b7
b6
b5
b4
b3
b2
b1
b0
IBNIR
URESIR
SUSPIR
SUTOKIR
SOFIR
SUDAVIR
IN07IEN
7FAC
b7
b6
b5
b4
b3
b2
b1
b0
IN7IEN
IN6IEN
IN5IEN
IN4IEN
IN3IEN
IN2IEN
IN1IEN
IN0IEN
OUT07IEN
7FAD
b7
b6
b5
b4
b3
b2
b1
b0
OUT7IEN
OUT6IEN
OUT5IEN
OUT4IEN
OUT3IEN
OUT2IEN
OUT1IEN
OUT0IEN
USBIEN
7FAE
b7
b6
b5
b4
b3
b2
b1
b0
IBNIE
URESIE
SUSPIE
SUTOKIE
SOFIE
SUDAVIE
Page 12-6
SETUP Stage
S
A E C
E
D N R
T
D D C
U
R P 5
P
Token Packet
D
A
T
A
0
8 bytes
Setup
Data
C
R
C
1
6
Data Packet
SUTOK
Interrupt
A
C
K
H/S Pkt
SUDAV
Interrupt
F C
S
R R
O
N C
F
O 5
Token Pkt
Page 12-7
Page 12-8
Jump
0x02
0044
AddrH
0xHH
0045
AddrL
0xLL
If Autovectoring is enabled (AVEN=1 in the USBBAV register), the USB core substitutes its IVEC
Byte for the byte at address 0x0045. Therefore, if the programmer pre-loads the high byte (page)
of a jump table address at location 0x0044, the core-inserted byte at 0x45 will automatically direct
the JUMP to one of 21 addresses within the page. In the jump table, the programmer then puts a
series of jump instructions to each particular ISR.
Page 12-9
Instruction
00
JMP SUDAV_ISR
04
JMP SOF_ISR
08
JMP SUTOK_ISR
0C
JMP SUSPEND_ISR
10
JMP USBRESET_ISR
14
JMP IBN_ISR
18
1C
JMP EP0OUT_ISR
20
JMP IN1BUF_ISR
24
JMP EP1OUT_ISR
28
JMP EP2IN_ISR
2C
JMP EP2OUT_ISR
30
JMP EP3IN_ISR
34
JMP EP3OUT_ISR
38
JMP EP4IN_ISR
3C
JMP EP4OUT_ISR
40
JMP EP5IN_ISR
44
JMP EP5OUT_ISR
48
JMP EP6IN_ISR
4C
JMP EP6OUT_ISR
50
JMP EP7IN_ISR
54
JMP EP7OUT_ISR
Page 12-10
8051 USB
Interrupt
Vector
0043
LJMP
0044
0045
(00)2C
USB_Jmp_Table:
0400
04
USB core
AVEC
2C
042C
042D
042E
LJMP EP2OUT_ISR
01
EP2OUT_ISR:
19
0119
Page 12-11
EZ-USB
8051
EIE.1
DONE
RD or WR
I2DAT register
I2C Interrupt
Request
I2CS
I2DAT
8051 I 2C
Interrupt
(INT3)
EXIF.5(rd)
EXIF.5(0)
START
STOP
LASTRD
ID1
ID0
BERR
ACK
DONE
D7
D6
D5
D4
D3
D2
D1
D0
Page 12-12
point, indicates that an IN endpoint just sent a NAK to the host. This happens when the host sends
an IN token and the IN endpoint does not have data (yet) for the host. This set of interrupts is
called IBN (IN Bulk NAK). Its INT2 Autovector is 05, which was previously reserved in the EZUSB family.
The IBN Interrupt Requests and enables are controlled by two registers:
IBNIRQ
7FB0
b7
b6
b5
b4
b3
b2
b1
b0
EP7IR
EP6IR
EP5IR
EP4IR
EP3IR
EP2IR
EP1IR
EP0IR
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
IBNEN
7FB1
b7
b6
b5
b4
b3
b2
b1
b0
EP7IE
EP6IE
EP5IE
EP4IE
EP3IE
EP2IE
EP1IE
EP0IE
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
I2CMODE
7FA7
I2C-Compatible Mode
b7
b6
b5
b4
b3
b2
b1
b0
STOPIE
400KHZ
R/W
R/W
Page 12-13
I2CS
7FA5
b7
b6
b5
b4
b3
b2
b1
b0
START
STOP
LASTRD
ID1
ID0
BERR
ACK
DONE
R/W
R/W
R/W
I2DAT
7FA6
I2C-Compatible Data
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
The 8051 concludes I2C-compatible transfers by setting the STOP Bit (I2CS.6). When the STOP
condition has been sent over the I2C-compatible bus, the I2C-compatible controller resets I2CS.6
to zero. During the time the I2C-compatible controller is generating the stop condition, it ignores
accesses to the I2CS and I2DAT registers. The 8051 code should therefore check the STOP Bit
for zero before writing new data to I2CS or I2DAT.
The STOP Bit completion interrupt is enabled by setting I2CMODE.1 to 1.
Page 12-14
INT4IVEC
Interrupt 4 Autovector
785D
b7
b6
b5
b4
b3
b2
b1
b0
I4V3
I4V2
I4V1
I4V0
INT4SETUP
Interrupt 4 Setup
785E
b7
b6
b5
b4
b3
b2
b1
b0
INT4SFR
INTRNL
AV4EN
R/W
R/W
R/W
AV4EN
To streamline the 8051 code that deals with the FIFO interrupts, the 8051 INT4 vector locations use the same autovectoring mechanism as the USB (INT2) Interrupt when the AV4EN Bit
(INT4SETUP.0) is set. Referring to Table 12-4, when a FIFO flag interrupt occurs with
AV4EN=1, internal logic replaces the third byte of the jump instruction at location 0x53 with a
different address for each FIFO interrupt source.
Table 12-4. Autovector for INT4*
8051
Addr
Instruction
Notes
0x53
LJMP
0x54
AddrH
0x55
AddrL
Page 12-15
Byte
Inserted
at 0x55
0x40
0x80
AINPF
0x44
0x84
BINPF
0x48
0x88
AOUTPF
0x4C
0x8C
BOUTPF
0x50
0x90
AINEF
0x54
0x94
BINEF
0x58
0x98
AOUTEF
0x5C
0x9C
AINEF
0x60
0xA0
AINFF
0x64
0xA4
BINFF
0x68
0xA8
AOUTFF
0x6C
0xAC
BOUTFF
0x70
0xB0
GPIFDONE
0x74
0xB4
GPIFWR
0x78
0xB8
DMADONE
Source
Meaning
Note that the bytes inserted for the INT4 autovector start at0x80, rather that 0x00. This is because
another EZ-USB FX autovector, for INT2 (used for all USB interrupts), uses jump table offsets
from 0x00 to 0x57. The autovector jump table must start on a page boundary (8051 address
XX00). Therefore, separating the two groups of jumps allows a single page of 8051 memory to be
used for both INT2 and INT4 jump tables. The INT2 jump table can start at 0x00, and the INT4
jump table can start at 0x80, sharing the same page.
If two or more INT4 Interrupt Requests occur simultaneously, they are serviced in the order shown
in Table 12-5, with AINPF having the highest priority and DMADONE the lowest. Pending interrupt
requests remain pending while a higher level interrupt is serviced.
Page 12-16
As with the USB (INT2) Interrupts, the INT4 Interrupt Request must be cleared in the ISR (Interrupt
Service Routine) before clearing the individual slave FIFO interrupt request bit.
Bit 1:
INTRNL
INT4 Source
This bit selects the interrupt source for 8051 INT4. If INTRNL=0, INT4 is supplied from the EZUSB FX INT4 pin. If INTRNL=1, INT4 is supplied from the slave FIFO interrupt unit, with the
interrupt sources shown in Table 12-5.
INT4SFR
The 8051 sets INT4SFR=1 to enable clearing of the pending INT4 Interrupt Request currently
being serviced by writing any value to INT4CLR (SFR at 0xA2).
Page 12-17
Page 12-18
13.1 Introduction
The EZ-USB FX chip has three resets:
A Power-On Reset (POR), which turns on the EZ-USB FX chip in a known state.
RES
8051
Vcc
CPUCS.0
(1 at PW R ON)
RES
RESET
EZ-USB FX Core
24 MHz
USB Bus
Reset
48 MHz
XIN
12
MHz
O s c illa to r
PLL
XOUT
2
CLKOUT
Page 13-1
Default
Value
Endpoint Data
xxxxxxxx
Byte Counts
xxxxxxxx
CPUCS
rrrr0011
PORT Configs
00000000
PORT Registers
xxxxxxxx
PORT OEs
00000000
Inputs
Interrupt Enables
00000000
Disabled
Interrupt Reqs
00000000
Cleared
Item
Comment
Bulk IN C/S
00000000
10
00000000
11
Toggle Bits
00000000
Data toggles = 0
12
USBCS
00000100
13
FNADDR
00000000
14
IN07VAL
01010111
EP0,1,2,4,6 IN valid
15
OUT07VAL
01010101
16
INISOVAL
00000111
EP8,9,10 IN valid
17
OUTISOVAL
00000111
18
USBPAIR
0x000000
19
USBBAV
00000000
20
Configuration
00000000
21
Alternate Setting
00000000
Page 13-2
* In this state (8051 reset) an OUT endpoint ACKs all OUT requests.
* When the 8051 is released from reset, the EZ-USB FX automatically
arms the Bulk OUT endpoints by setting their CS Registers to
000000010b. This causes the next OUT request to be ACKd and subsequent OUT transfers to be NAKd until the 8051 loads the endpoint byte
count register.
Table 13-1 documents the following summary list of states at power on.
The 8051 is held in reset, and the CLKOUT pin is enabled (3).
USB interrupts are disabled, and USB interrupt requests are cleared (7-8).
Bulk IN and OUT endpoints are unarmed, and their stall bits are cleared (9). The USB
core will NAK IN tokens and ACK OUT tokens while the 8051 is reset. OUT endpoints are
enabled for one OUT transfer when the 8051 is released from reset.
The RENUM Bit is cleared. This means that the USB core, and not the 8051, initially
responds to USB device requests (12).
The endpoint valid bits are set to match the endpoints used by the default USB device (1417).
Page 13-3
Automatically, at the end of an EEPROM load (assuming the EEPROM is correctly programmed).
The other bit in the CPUCS Register, CLKOUTOE, is writable only by the 8051. The host writing a
zero byte to this register does not turn off the CLKOUT signal.
Under these conditions, the USB core also sets the RENUM Bit to 1, giving USB control to the
8051.
Page 13-4
called an 8051 Reset, and should not be confused with the POR described in Section 13.2. "EZUSB FX Power-On Reset (POR)". This discussion applies only to the condition where the EZ-USB
FX chip is powered, and the 8051 is reset by the host setting the CPUCS Register to 0.
The basic USB device configuration remains intact through an 8051 reset. Valid endpoints remain
valid, the USB function address remains the same, and the I/O ports retain their configurations and
values. Stalled endpoints remain stalled, and data toggles dont change. The only effects of an
8051 reset are as follows:
USB (INT2) interrupts are disabled, but pending interrupt requests remain pending.
When the 8051 comes out of reset, pending interrupts are kept pending, but disabled. This
gives the firmware writer the choice of acting on pre-8051-reset USB events, or ignoring
them by clearing the pending interrupt(s) before enabling INT2.
During the 8051 Reset, all bulk IN endpoints are unarmed, causing the USB core to NAK
IN tokens; OUT tokens are ACKd.
After the 8051 Reset is removed, the OUT bulk endpoints are automatically armed. OUT
endpoints are thus ready to accept one OUT packet before 8051 intervention is required.
The other bits in the USBBAV Register are unaffected. The RENUM Bit is not affected by an 8051
reset.
Page 13-5
Register
Default
Value
Endpt Data
uuuuuuuu
Byte Counts
uuuuuuuu
CPUCS
uuuuuuuu
PORT Configs
uuuuuuuu
PORT Registers
uuuuuuuu
PORT OEs
uuuuuuuu
Interrupt Enables
uuuuuuuu
Interrupt Reqs
uuuuuuuu
Comment
u = unchanged
Bulk IN C/S
00000000
unarm
10
uuuuuuuu
11
Toggle Bits
00000000
12
USBCS
uuuuuuuu
13
FNADDR
00000000
14
IN07VAL
uuuuuuuu
15
OUT07VAL
uuuuuuuu
16
INISOVAL
uuuuuuuu
17
OUTISOVAL
uuuuuuuu
18
USBPAIR
uuuuuuuu
19
Configuration
00000000
20
Alternate Setting
00000000
A USB bus reset leaves most EZ-USB FX resources unchanged. From Table 13-2, after USB bus
reset:
The USB core unarms all Bulk IN endpoints (9). Data loaded by the 8051 into an IN endpoint buffer remains there, and the 8051 firmware can either re-send it by loading the endpoint byte count register to re-arm the transfer, or send new data by re-loading the IN
buffer before re-arming the endpoint.
Bulk OUT endpoints retain their busy states (10). Data sent by the host to an OUT endpoint buffer remains in the buffer, and the 8051 firmware can either read the data or reject
it as stale simply by not reading it. In either case, the 8051 loads a dummy value to the
endpoint byte count Register to re-arm OUT transfers.
Page 13-6
Note from item 12 of Table 13-2 that the RENUM Bit is unchanged after a USB bus reset. Therefore, if a device has ReNumerated and loaded a new personality, it retains the new personality
through a USB bus reset.
Register
Default Value
Comment
Endpt Data
uuuuuuuu
u = unchanged
Byte Counts
uuuuuuuu
CPUCS
uuuuuuuu
PORT Configs
uuuuuuuu
PORT Registers
uuuuuuuu
PORT OEs
uuuuuuuu
Interrupt Enables
uuuuuuuu
Interrupt Reqs
uuuuuuuu
Bulk IN C/S
00000000
10
00000010
11
Toggle Bits
00000000
reset
12
USBCS
uuuuuuuu
13
FNADDR
00000000
14
IN07VAL
uuuuuuuu
15
OUT07VAL
uuuuuuuu
16
INISOVAL
uuuuuuuu
17
OUTISOVAL
uuuuuuuu
18
USBPAIR
uuuuuuuu
19
Configuration
00000000
20
Alternate Setting
00000000
Although not strictly a reset, when the EZ-USB FX simulates a disconnect-reconnect to ReNumerate, there are effects on the USB core:
Bulk IN endpoints are unarmed, and bulk OUT endpoints are armed (9-10).
Page 13-7
USB Bus
Reset
Disconnect
8051 Reset
8051 Reset
reset
N/A
EP0-7 IN EPs
unarm
unarm
unarm
unarm
Resource
arm
arm
Breakpoint
reset
reset
Stall Bits
reset
reset
Interrupt Enables
reset
reset
Interrupt Reqs
reset
run
Data Toggles
reset
reset
reset
Function Address
reset
reset
reset
CLKOUT
Configuration
ReNum
The I 2C-compatible controller is not reset for any of the conditions laid out in Table 13-4. Only the
EZ-USB FX RESET pin resets it.
Page 13-8
14.1 Introduction
The USB host can suspend a device to put it into power-down mode. When the USB signals a
SUSPEND operation, the EZ-USB FX chip goes through a sequence of steps to allow the 8051 to
first turn off external power-consuming subsystems, and then enter an ultra-low-power mode by
turning off its oscillator, its D+ and D- drivers, and other SIE circuits. Once suspended, the EZ-USB
FX chip is awakened either by resumption of USB bus activity or by assertion of its WAKEUP# pin.
This chapter describes the suspend-resume mechanism.
12 MHz
WAKEUP# pin
USB RESUME
START
STOP
Oscillator
PLL
48 MHz
Restart
Delay
div by
2
CLK24
PCON.0
"RESUME" INT
No USB activity
for 3 msec.
8051
Signal
Resume
(USBCS.0)
USB
"SUSPEND"
Interrupt
Page 14-1
14.2 Suspend
12 MHz
STOP
Oscillator
PLL
48 MHz
div by 2
Mux
CLKOUT
PCON.0
8051
INT2
No USB activity
for 3 msec.
USB
"SUSPEND"
Interrupt
Page 14-2
For bus-powered devices, the 8051 code must respond to the SUSPEND Interrupt by taking the
following steps:
1. Perform any necessary housekeeping, such as shutting off external power-consuming
devices.
2. Set bit 0 of the PCON SFR (Special Function Register). This has two effects:
The 8051 sends an internal signal to the USB core, causing it to turn off the oscillator and
PLL.
These actions put the EZ-USB FX chip into a low-power mode, as required by the USB Specification.
Self-powered devices may perform the above power saving steps, but it is not required by the USB
Specification.
14.3 Resume
12 MHz
WAKEUP# pin
USB Resume
START
Oscillator
PLL
48 MHz
Restart
Delay
div by 2
Mux
CLKOUT
Resume INT
8051
Signal
Resume
(USBCS.0)
Page 14-3
From "RESTART
DELAY"
8051
"RESUME"
Interrupt
S
R
EICON.4(0)
EICON.4(rd)
EICON.5
The 8051 can read the RESUME Interrupt request bit in EICON.4.
The 8051 clears the interrupt request bit by writing a zero to EICON.4.
Resume_isr:
clr
EICON.4
reti
After an oscillator stabilization time, the USB core asserts the 8051 Resume Interrupt. (See Figure
12-1). This causes the 8051 to exit its idle mode. The Resume Interrupt is the highest priority 8051
Page 14-4
interrupt. It is always enabled, unaffected by the EA Bit. However, it is affected by the EICON.5 Bit
(ERESI).
The resume ISR clears the interrupt request flag, and executes a reti (return from interrupt)
instruction. This causes the 8051 to continue program execution at the instruction following the
one that set PCON.0 to initiate the suspend operation.
USBCS
7FD6
b7
b6
b5
b4
b3
b2
b1
b0
WAKESRC
DISCON
DISCOE
RENUM
SIGRSUME
Page 14-5
Holding WAKEUP# low prevents the Suspend Flop from ever setting. (As it says
above, Holding the WAKEUP#pin low inhibits the FX chip from suspending.)
This applies especially to self-powered devices where the designer elects to not save power
during suspend, devices such as those powered from a wall transformer (as opposed to a
battery.) You should tie the WAKEUP#pin low for these power-rich devices that will signal a
remote wakeup.
In summary, for all devices that wish to assert a K-state wakeup pulse to the host (Remote
Wakeup), the Suspend Flop must be cleared before asserting the K-state wakep pulse.
When a USB device is suspended, the upstream driver is tri-stated, and the bus pullup and pulldown resistors cause the bus to assume the J, or idle state. A suspended device signals a
remote wakeup by asserting the K state for 1-15 ms. The 8051 controls this using the SIGRSUME Bit in the USBCS Register.
If the 8051 finds WAKESRC=1 after exiting the idle mode, it must drive the K state for 1-15 ms to
signal the USB remote wakeup. It does this by setting SIGRSUME=1, waiting 10-15 ms, and then
setting SIGRSUME=0. The resume routine should also write a 1 to the WAKESRC Bit to clear it.
Page 14-6
J and K States
The USB Specification uses differential data signals D+ and D-. Instead of defining a logical
1 and 0, it defines the J and K states. For a high speed device, the J state means
(D+ > D-).
The USB Default device does not support remote wakeup. This fact is reported at enumeration
time in byte 7 of the built-in Configuration Descriptor (Table 5-10).
The device must report that it is capable of signaling a remote wakeup in the bAttributes field of its Configuration Descriptor. For an example of this description, see
Table 5-10.
The host must issue a Set_Feature/Device request with the feature selector field
set to 0x01 to enable remote wakeup. For a detailed request, see Table 9-6.
Page 14-7
Page 14-8
15.1 Introduction
This section describes the EZ-USB FX registers in the order they appear in the EZ-USB FX memory map. The registers are named according to the following conventions.
Most registers deal with endpoints. The general register format is DDDnFFF, where:
DDD
FFF
BC, BCL, and BCH are byte count registers. BC is used for single byte counts, and
BCL/H are used as the low and high bytes of 16-bit byte counts.
Page 15-1
OUT07IRQ is the register containing interrupt request bits for OUT endpoints 0-7.
ADDR
Is an address.
VAL
Means valid.
Is an address pointer.
Register Name
Register Function
Address
b7
b6
b5
b4
b3
b2
b1
b0
bitname
bitname
bitname
bitname
bitname
bitname
bitname
bitname
R, W access
R, W access
R, W access
R, W access
R, W access
R, W access
R, W access
R, W access
Default val
Default val
Default val
Default val
Default val
Default val
Default val
Default val
The top line shows the register name, functional description, and address in the EZ-USB
FX memory.
The third line shows the name of each bit in the register.
The fifth line shows the default value. These values apply after a Power-On-Reset (POR).
Page 15-2
7800
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
7801
b7
b6
b5
b4
b3
b2
b1
b0
D6
D5
D4
D3
D2
D1
D0
Page 15-3
7802
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
7803
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-4
7805
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
7806
b7
b6
b5
b4
b3
b2
b1
b0
D6
D5
D4
D3
D2
D1
D0
Page 15-5
7807
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
7808
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-6
780A
b7
b6
b5
b4
b3
b2
b1
b0
INTOG
INSEL
AINPF
AINEF
AINFF
BINPF
BINEF
BINFF
R/W
R/W
780B
b7
b6
b5
b4
b3
b2
b1
b0
AINPFIE
AINEFIE
AINFFIE
BINPFIE
BINEFIE
BINFFIE
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
780C
b7
b6
b5
b4
b3
b2
b1
b0
AINPFIR
AINEFIR
AINFFIR
BINPFIR
BINEFIR
BINFFIR
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-7
780E
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
780F
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
Page 15-8
7810
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
7811
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-9
7813
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
7814
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
Page 15-10
7815
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
7816
b7
b6
b5
b4
b3
b2
b1
b0
LTGT
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-11
7818
b7
b6
b5
b4
b3
b2
b1
b0
OUTINTOG
OUTSEL
AOUTPF
AOUTEF
AOUTFF
BOUTPF
BOUTEF
BOUTFF
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
b4
b3
b2
7819
b7
b6
b1
b0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
b4
b3
b2
781A
b7
b6
b1
b0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-12
For information about this register, including a list of bit descriptions, see Section 7.2.20. "Output
FIFOs A/B Interrupt Requests."
781C
b7
b6
b5
b4
b3
b2
b1
b0
ASYNC
DBLIN
OUTDLY
DBLOUT
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
781D
b7
b6
b5
b4
b3
b2
b1
b0
BOE
AOE
SLRD
SLWR
ASEL
BSEL
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-13
781E
b7
b6
b5
b4
b3
b2
b1
b0
WFSELECT
b7
Waveform Selector
b6
b5
b4
7824
b3
b2
b1
FIFOWR0-3
b0
SINGLEWR0-3
SINGLERD0-3
FIFORD0-3
Page 15-14
IDLECS
7825
b7
b6
b5
b4
b3
b2
b1
b0
DONE
IDLEDRV
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
b7
b6
b5
b4
IOE3
IOE2
R/W
R/W
R/W
7826
b3
b2
b1
b0
CTL3
CTL2
CTL1
CTL0
R/W
R/W
R/W
R/W
R/W
IOE1/CTL5 IOE0/CTL4
CTLOUTCFG
7827
b7
b6
b5
b4
b3
b2
b1
b0
TRICTL
CTL5
CTL4
CTL3
CTL2
CTL1
CTL0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-15
GPIFADRL
782A
b7
b6
b5
b4
b3
b2
b1
b0
A5
A4
A3
A2
A1
A0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
AINTC
782C
b7
b6
b5
b4
b3
b2
b1
b0
FITC
AINTC6
AINTC5
AINTC4
AINTC3
AINTC2
AINTC1
AINTC0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-16
AOUTTC
782D
b7
b6
b5
b4
b3
b2
b1
b0
FITC
AOUTTC6
AOUTTC5
AOUTTC4
AOUTTC3
AOUTTC2
AOUTTC1
AOUTTC0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
ATRIG
782E
b7
b6
b5
b4
b3
b2
b1
b0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-17
BINTC
7830
b7
b6
b5
b4
b3
b2
b1
b0
BINTC7
BINTC6
BINTC5
BINTC4
BINTC3
BINTC2
BINTC1
BINTC0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
BOUTTC
7831
b7
b6
b5
b4
b3
b2
b1
b0
BOUTTC7
BOUTTC6
BOUTTC5
BOUTTC4
BOUTTC3
BOUTTC2
BOUTTC1
BOUTTC0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-18
BTRIG
7832
b7
b6
b5
b4
b3
b2
b1
b0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
SGLDATH
7834
b7
b6
b5
b4
b3
b2
b1
b0
D15
D14
D13
D12
D11
D10
D9
D8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
SGLDATLTRIG
7835
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Figure 15-39. Read or Write GPIF Data L and Trigger Read Transaction
Page 15-19
SGLDATLNTRIG
7836
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
READY
7838
b7
b6
b5
b4
b3
b2
b1
b0
INTRDY
SAS
RDY5
RDY4
RDY3
RDY2
RDY1
RDY0
R/W
R/W
ABORT
7839
b7
b6
b5
b4
b3
b2
b1
b0
Page 15-20
GENIE
783B
b7
b6
b5
b4
b3
b2
b1
b0
DMADONE
GPIFWF
GPIFDONE
GENIRQ
783C
b7
b6
b5
b4
b3
b2
b1
b0
DMADONE
GPIFWF
GPIFDONE
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-21
Port D Outputs
7841
b7
b6
b5
b4
b3
b2
b1
b0
OUTD7
OUTD6
OUTD5
OUTD4
OUTD3
OUTD2
OUTD1
OUTD0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Port D Pins
7842
b7
b6
b5
b4
b3
b2
b1
b0
PIND7
PIND6
PIND5
PIND4
PIND3
PIND2
PIND1
PIND0
7843
b7
b6
b5
b4
b3
b2
b1
b0
OED7
OED6
OED5
OED4
OED3
OED2
OED1
OED0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-22
Port E Outputs
7845
b7
b6
b5
b4
b3
b2
b1
b0
OUTE7
OUTE6
OUTE5
OUTE4
OUTE3
OUTE2
OUTE1
OUTE0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Port E Pins
7846
b7
b6
b5
b4
b3
b2
b1
b0
PINE7
PINE6
PINE5
PINE4
PINE3
PINE2
PINE1
PINE0
7847
b7
b6
b5
b4
b3
b2
b1
b0
OEE7
OEE6
OEE5
OEE4
OEE3
OEE2
OEE1
OEE0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-23
15.21 PORTSETUP
PORTSETUP
7849
b7
b6
b5
b4
b3
b2
b1
b0
TOCLK
SFRPORT
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
IFCONFIG
Interface Configuration
784A
b7
b6
b5
b4
b3
b2
b1
b0
52ONE
GSTATE
BUS16
IF1
IF0
R/W
R/W
R/W
R/W
R/W
Bit 7:
52ONE
This bit must be set to 1 for the 52-pin versions of EZ-USB FX. This ensures that certain signals that are driven properly for EZ-USB FX low power operation.
Bit 6-4:
Reserved
Bit 3:
GSTATE
Output GSTATE
When GSTATE=1, three bits in Port A take on the signals shown in Table 15-1. The GSTATE
bits, which indicate GPIF states, are used for diagnostic purposes.
Page 15-24
Bit 2:
IO
Pin
Alternate
Function
PA0
GSTATE[0]
PA1
GSTATE[1]
PA2
GSTATE[2]
BUS16
This bit selects 8-bit (BUS16=0) or 16-bit (BUS16=1) operation for slave FIFOs A and B. See
Chapter 7. "EZ-USB FX Slave FIFOs" for full details.
Bit 1-0:
Interface Select
These bits, along with the BUS16 bit, select different groups of signals for various EZ-USB FX
pins. Table 15-2 shows the selections.
Page 15-25
01
10
11
BUS16=1
BUS16=0
BUS16=1
BUS16-=0
PE0
PE0
adr0
adr0
BOUTFLAG
BOUTFLAG
PE1
PE1
adr1
adr1
AINFULL
AINFULL
PE2
PE2
adr2
adr2
BINFULL
BINFULL
PE3
PE3
adr3
adr3
AOUTEMTY
AOUTEMTY
PE4
PE4
adr4
adr4
BOUTEMTY
BOUTEMTY
PE5
PE5
CTL3
CTL3
PE5
PE5
PE6
PE6
CTL4
CTL4
PE6
PE6
PE7
PE7
CTL5
CTL5
PE7
PE7
NC
NC
CTL0
CTL0
AINFLAG
AINFLAG
NC
NC
CTL1
CTL1
BINFLAG
BINFLAG
NC
NC
CTL2
CTL2
AOUTFLAG
AOUTFLAG
Strap
Strap
RDY0
RDY0
ASEL
ASEL
Strap
Strap
RDY1
RDY1
BSEL
BSEL
Strap
Strap
RDY2
RDY2
AOE
AOE
Strap
Strap
RDY3
RDY3
BOE
BOE
Strap
Strap
RDY4
RDY4
SLWR
SLWR
Strap
Strap
RDY5
RDY5
SLRD
SLRD
Strap
Strap
adr5
adr5
Strap
Strap
XCLK
XCLK
XCLK
XCLK
PORTB
D[7..0]
GDA[7..0]
GDA7..0]
AFI[7..0]
AFI[7..0]
PORTD
PORTD
GDB[7..0]
PORTD
BFI[7..0]
PORTD
Page 15-26
784B
b7
b6
b5
b4
b3
b2
b1
b0
SLRD
SLWR
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bit 5:
SLRD
This bit, in conjunction with the PORTACFG.5 Bit and the IFCONFIG[1..0] bits, determines the
function of PA5, as shown in Table 15-3.
Table 15-3. Port A Bit 5
PORTA Bit 5
PORTACFG.5=1
PORTACFG.5=0
PORTACF2.5=0
Port pin PA5
Bit 4:
FRD#
SLWR
PORTACF2.5=1
IFCONFIG[1..0]=10 IFCONFIG[1..0]=11
RDY5
SLRD
This bit, in conjunction with the PORTACFG.4 Bit and the IFCONFIG[1..0] bits, determines the
function of PA4, as shown in Table 15-4.
Table 15-4. Port A Bit 4
PORTA Bit 4
PORTACFG.4=1
PORTACFG.4=0
PORTACF2.4=0
Port pin PA4
FWR#
PORTACF2.4=1
IFCONFIG[1..0]=10 IFCONFIG[1..0]=11
RDY4
SLWR
Page 15-27
784C
b7
b6
b5
b4
b3
b2
b1
b0
CTL5
CTL4
CTL3
CTL1
RDY3
RDY1
RDY0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bit 7:
CTL5
This bit, in conjunction with the PORTCCFG.7 Bit, determines the function of PC7, as shown
in Table 15-5.
Table 15-5. Port C Bit 7
PORTCCFG.7=0
Bit 6:
CTL4
PORTC Bit 7
PORTCCFG.7=1
PORTCCF2.7=0
PORTCCF2.7=1
IFCONFIG[1..0]=10 00, 01, 11 not valid
RD#
CTL5
X
This bit, in conjunction with the PORTCCFG.6 Bit, determines the function of PC6, as shown
in Table 15-6.
Table 15-6. Port C Bit 6
PORTCCFG.6=0
Page 15-28
PORTC Bit 6
PORTCCFG.6=1
PORTCCF2.6=0
PORTCCF2.6=1
IFCONFIG[1..0]=10 00, 01, 11 not valid
WR#
CTL4
X
Bit 5:
CTL3
This bit, in conjunction with the PORTCCFG.5 Bit, determines the function of PC5, as shown in
Table 15-7.
Table 15-7. Port C Bit 5
PORTCCFG.5=0
Bit 4:
CTL1
PORTC Bit 5
PORTCCFG.5=1
PORTCCF2.5=0
PORTCCF2.5=1
IFCONFIG[1..0]=10 00, 01, 11 not valid
T1
CTL3
X
This bit, in conjunction with the PORTCCFG.4 Bit, determines the function of PC4, as shown in
Table 15-8.
Table 15-8. Port C Bit 4
PORTCCFG.4=0
Bit 3:
RDY3
PORTC Bit 4
PORTCCFG.4=1
PORTCCF2.4=0
PORTCCF2.4=1
IFCONFIG[1..0]=10 00, 01, 11 not valid
T0
CTL1
X
This bit, in conjunction with the PORTCCFG.3 Bit, determines the function of PC3, as shown in
Table 15-9.
Table 15-9. Port C Bit 3
PORTCCFG.3=0
PORTC Bit 3
PORTCCFG.3=1
PORTCCF2.3=0
PORTCCF2.3=1
IFCONFIG[1..0]=10 00, 01, 11 not valid
INT1
RDY3
X
Page 15-29
Reserved
Reads as 0
Bit 1:
RDY1
This bit, in conjunction with the PORTCCFG.1 Bit, determines the function of PC1, as shown
in Table 15-10.
Table 15-10. Port C Bit 1
PORTCCFG.1=0
Bit 0:
CTL5
PORTC Bit 1
PORTCCFG.1=1
PORTCCF2.1=0
PORTCCF2.1=1
IFCONFIG[1..0]=10 00, 01, 11 not valid
TxD0
RDY1
X
This bit, in conjunction with the PORTCCFG.0 Bit, determines the function of PC0, as shown
in Table 15-11.
Table 15-11. Port C Bit 0
PORTCCFG.0=0
Page 15-30
PORTC Bit 0
PORTCCFG.0=1
PORTCCF2.0=0
PORTCCF2.0=1
IFCONFIG[1..0]=10 00, 01, 11 not valid
RxD0
RDY0
X
784F
b7
b6
b5
b4
b3
b2
b1
b0
A15
A14
A13
A12
A11
A10
A9
A8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
DMASRCL
7850
b7
b6
b5
b4
b3
b2
b1
b0
A7
A6
A5
A4
A3
A2
A1
A0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
DMADESTH
7851
b7
b6
b5
b4
b3
b2
b1
b0
A15
A14
A13
A12
A11
A10
A9
A8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-31
DMADESTL
7852
b7
b6
b5
b4
b3
b2
b1
b0
A7
A6
A5
A4
A3
A2
A1
A0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
DMALEN
7854
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Figure 15-59. DMA Transfer Length (0=256 Bytes, 1=1 Byte, ... 255=255 Bytes)
DMAGO
7855
b7
b6
b5
b4
b3
b2
b1
b0
DONE
R/W
Page 15-32
7857
b7
b6
b5
b4
b3
b2
b1
b0
DSTR2
DSTR1
DSTR0
BR
BW
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
7858
b7
b6
b5
b4
b3
b2
b1
b0
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
Page 15-33
Interrupt 4 Autovector
785D
b7
b6
b5
b4
b3
b2
b1
b0
I4V3
I4V2
I4V1
I4V0
Interrupt 4 Setup
785E
b7
b6
b5
b4
b3
b2
b1
b0
INT4FC
INTRNL
AV4EN
R/W
R/W
R/W
Page 15-34
WFDESC
Waveform Descriptors
7900
b7
b6
b5
b4
b3
b2
b1
b0
7B40-7F3F*
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-35
Address
Name
Size
1F00-1F3F
7F00-7F3F
IN0BUF
64
1EC0-1EFF
7EC0-7EFF
OUT0BUF
64
1E80-1EBF
7E80-7EBF
IN1BUF
64
1E40-1E7F
7E40-7E7F
OUT1BUF
64
1E00-1E3F
7E00-7E3F
IN2BUF
64
1DC0-1DFF
7DC0-7DFF
OUT2BUF
64
1D80-1DBF
7D80-7DBF
IN3BUF
64
1D40-1D7F
7D40-7D7F
OUT3BUF
64
1D00-1D3F
7D00-7D3F
IN4BUF
64
1CC0-1CFF
7CC0-7CFF
OUT4BUF
64
1C80-1CBF
7C80-7CBF
IN5BUF
64
1C40-1C7F
7C40-7C7F
OUT5BUF
64
1C00-1C3F
7C00-7C3F
IN6BUF
64
1BC0-1BFF
7BC0-7BFF
OUT6BUF
64
1B80-1BBF
7B80-7BBF
IN7BUF
64
1B40-1B7F
7B40-7B7F
OUT7BUF
64
Sixteen 64-byte bulk data buffers appear at 0x1B40 and 0x7B40 in the 8K version of EZ-USB FX.
The endpoints are ordered to permit the reuse of the buffer space as contiguous RAM when the
higher numbered endpoints are not used. These registers default to unknown states.
Page 15-36
OUTnDATA
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
INnDATA
7F60-7F67*
7F68-7F6F*
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
Page 15-37
Isochronous Data
Name
7F60
OUT8DATA
7F61
OUT9DATA
7F62
OUT10DATA
7F63
OUT11DATA
7F64
OUT12DATA
7F65
OUT13DATA
7F66
OUT14DATA
7F67
OUT15DATA
7F68
Endpoint 8 IN Data
IN8DATA
7F69
Endpoint 9 IN Data
IN9DATA
7F6A
Endpoint 10 IN Data
IN10DATA
7F6B
Endpoint 11 IN Data
IN11DATA
7F6C
Endpoint 12 IN Data
IN12DATA
7F6D
Endpoint 13 IN Data
IN13DATA
7F6E
Endpoint 14 IN Data
IN14DATA
7F6F
Endpoint 15 IN Data
IN15DATA
Sixteen addressable data registers hold data from the eight isochronous IN endpoints and the
eight isochronous OUT endpoints. Reading a data register reads a FIFO byte (USB OUT data);
writing a Data Register loads a FIFO byte (USB IN data).
Page 15-38
OUTnBCH
7F70-7F7F*
b7
b6
b5
b4
b3
b2
b1
b0
BC9
BC8
INnBCL
7F70-7F7F*
b7
b6
b5
b4
b3
b2
b1
b0
BC7
BC6
BC5
BC4
BC3
BC2
BC1
BC0
Page 15-39
Isochronous Data
Name
7F70
OUT8BCH
7F71
OUT8BCL
7F72
OUT9BCH
7F73
OUT9BCL
7F74
OUT10BCH
7F75
OUT10BCL
7F76
OUT11BCH
7F77
OUT11BCL
7F78
OUT12BCH
7F79
OUT12BCL
7F7A
OUT13BCH
7F7B
OUT13BCL
7F7C
OUT14BCH
7F7D
OUT14BCL
7F7E
OUT15BCH
7F7F
OUT15BCL
The USB core uses the byte count registers to report isochronous data payload sizes for OUT
data transferred from the host to the USB core. Ten bits of byte count data allow payload size up to
1,023 bytes. A byte count of zero is valid, meaning that the host sent no isochronous data during
the previous frame. The default values of these registers are unknown.
Byte counts are valid only for OUT endpoints. The byte counts indicate the number of bytes
remaining in the endpoints OUT FIFO. Every time the 8051 reads a byte from the ISODATA Register, the byte count decrements by one.
To read USB OUT data, the 8051 first reads byte count registers OUTnBCL and OUTnBCH to
determine how many bytes to transfer out of the OUT FIFO. (The 8051 can also quickly test ISO
output endpoints for zero byte counts using the ZBCOUT Register.) Then, the CPU reads that
number of bytes from the ISODATA Register. Separate byte counts are maintained for each endpoint, so the CPU can read the FIFOs in a discontinuous manner. For example, if EP8 indicates a
byte count of 100, and EP9 indicates a byte count of 50, the CPU could read 50 bytes from EP8,
then read 10 bytes from EP9, and resume reading EP8.
There are no byte count registers for the IN endpoints. The USB core automatically tracks the
number of bytes loaded by the 8051.
If the 8051 does not load an IN isochronous endpoint FIFO during a 1-ms frame, and the host
requests data from that endpoint during the next frame (IN token), the USB core responds according to the setting of the ISOSEND0 Bit (USBPAIR.7). If ISOSEND0=1, the core returns a zero-
Page 15-40
length data packet in response to the host IN token. If ISOSEND=0, the core does not respond to
the IN token.
It is the responsibility of the 8051 programmer to ensure that the number of bytes written to the IN
FIFO does not exceed the maximum packet size as reported during enumeration.
CPUCS
7F92
b7
b6
b5
b4
b3
b2
b1
b0
RV3
RV2
RV1
RV0
24/48
CLKINV
CLKOE
8051RES
R/W
RV3
RV2
RV1
RV0
Bit 7-4:
RV[3..0]
Silicon Revision
These register bits define the silicon revision. Consult individual Cypress Semiconductor data
sheets for values.
Bit 3:
24/48
This read-only bit indicates that the 8051 clock rate is 24 or 48 MHz. This bit is set at power-on
according to a bit in the EEPROM connected to the EZ-USB FX I 2C-compatible bus. If no
EEPROM is connected, the EZ-USB FX defaults to a 24-MHz 8051 clock. Once running (after
boot), the 8051 cannot change the clock rate.
Bit 2:
CLKINV
This read-only bit indicates that the CLKOUT signal is inverted. This bit is set at power-on
according to a bit in the EEPROM connected to the EZ-USB FX I 2C-compatible bus. If no
EEPROM is connected, the EZ-USB FX defaults to a non-inverted 24-MHz 8051 clock.
When CLKINV=0, the clock has the polarity shown in all the timing diagrams in this manual.
When CLKINV=1, the clock is inverted.
Page 15-41
CLKOE
The CLKOUT signal may be disabled by floating the CLKOUT pin. The 8051 does this by
clearing CLKOE. This is a good idea if the CLKOUT pin is not used since it reduces EMI.
Bit 0:
8051RES
8051 reset
The USB host writes 1 to this bit to reset the 8051, and 0 to run the 8051. Only the USB
host can write this bit.
PORTACFG
7F93
b7
b6
b5
b4
b3
b2
b1
b0
RxD1OUT
RxD0OUT
FRD
FWR
CS
OE
T1OUT
T0OUT
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
PORTBCFG
7F94
b7
b6
b5
b4
b3
b2
b1
b0
T2OUT
INT6
INT5
INT4
TXD1
RXD1
T2EX
T2
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
PORTCCFG
7F95
b7
b6
b5
b4
b3
b2
b1
b0
RD
WR
T1
T0
INT1
INT0
TXD0
RXD0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-42
When PORTnCFG=1, the pin assumes the alternate function shown in Table 15-15 on the following page.
For more information, see Section 4.3, "Input/Output Port Registers".
These registers are used in conjunction with the IFCONFIG PORTACF2 Registers to define the pin
functions.
Table 15-15. I/O Pin Alternate Functions
I/O
Name
Alternate Functions
PA0
T0OUT
Timer 0 Output
PA1
T1OUT
Timer 1 Output
PA2
OE#
PA3
CS#
PA4
FWR#
PA5
FRD#
PA6
RXD0OUT
PA7
RXD1OUT
PB0
T2
PB1
T2EX
PB2
RxD1
PB3
TxD1
PB4
INT4
PB5
INT5#
PB6
INT6
PB7
T2OUT
PC0
RxD0
PC1
TxD0
PC2
INT0#
PC3
INT1#
PC4
T0
PC5
T1
PC6
WR#
PC7
RD#
Page 15-43
15.32.1 Outputs
The OUTn Registers provide the data that drives the port pin when OE=1 and the pin is configured
for port output. If the port pin is selected as an input (OE=0), the value stored in the corresponding
OUTn Bit is stored in an output latch but not used.
OUTA
Port A Outputs
7F96
b7
b6
b5
b4
b3
b2
b1
b0
OUTA7
OUTA6
OUTA5
OUTA4
OUTA3
OUTA2
OUTA1
OUTA0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OUTB
Port B Outputs
7F97
b7
b6
b5
b4
b3
b2
b1
b0
OUTB7
OUTB6
OUTB5
OUTB4
OUTB3
OUTB2
OUTB1
OUTB0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OUTC
Port C Outputs
7F98
b7
b6
b5
b4
b3
b2
b1
b0
OUTC7
OUTC6
OUTC5
OUTC4
OUTC3
OUTC2
OUTC1
OUTC0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-44
15.32.2 Pins
The PINSn Registers contain the current value of the port pins, whether they are selected as I/O
ports or as alternate functions.
PINSA
Port A Pins
7F99
b7
b6
b5
b4
b3
b2
b1
b0
PINA7
PINA6
PINA5
PINA4
PINA3
PINA2
PINA1
PINA0
PINSB
Port B Pins
7F9A
b7
b6
b5
b4
b3
b2
b1
b0
PINB7
PINB6
PINB5
PINB4
PINB3
PINB2
PINB1
PINB0
OUTC
Port C Pins
7F98
b7
b6
b5
b4
b3
b2
b1
b0
PINC7
PINC6
PINC5
PINC4
PINC3
PINC2
PINC1
PINC0
Page 15-45
OEA
7F9C
b7
b6
b5
b4
b3
b2
b1
b0
OEA7
OEA6
OEA5
OEA4
OEA3
OEA2
OEA1
OEA0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OEB
7F9D
b7
b6
b5
b4
b3
b2
b1
b0
OEB7
OEB6
OEB5
OEB4
OEB3
OEB2
OEB1
OEB0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OEC
7F9E
b7
b6
b5
b4
b3
b2
b1
b0
OEC7
OEC6
OEC5
OEC4
OEC3
OEC2
OEC1
OEC0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-46
7FA0
b7
b6
b5
b4
b3
b2
b1
b0
ISO15ERR
ISO14ERR
ISO13ERR
ISO12ERR
ISO11ERR
ISO10ERR
ISO9ERR
ISO8ERR
ISOCTL
Isochronous Control
7FA1
b7
b6
b5
b4
b3
b2
b1
b0
PPSTAT
MBZ
MBZ
ISODISAB
R/W
R/W
R/W
Bit 3:
PPSTAT
Ping-Pong Status
This bit indicates the isochronous buffer currently in use by the USB core. It is used only for
diagnostic purposes.
Bits 2,1:
MBZ
Must be zero
Bit 0:
ISODISAB
Page 15-47
ZBCOUT
7FA2
b7
b6
b5
b4
b3
b2
b1
b0
EP15
EP14
EP13
EP12
EP11
EP10
EP9
EP8
Bits 0-7:
EP(n)
The 8051 can check these bits as a fast way to check all of the OUT isochronous endpoints at
once for no data received during the previous frame. A 1 in any bit position means that a
zero byte Isochronous OUT packet was received for the indicated endpoint.
Read/write latency note: These registers need the equivalent of 2 instruction clock cycles of
time between performing the following instructions back-to-back: (1) write-write (2) write-read.
I2CS
7FA5
b7
b6
b5
b4
b3
b2
b1
b0
START
STOP
LASTRD
ID1
ID0
BERR
ACK
DONE
R/W
R/W
R/W
I2DAT
7FA6
I 2C-Compatible Data
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-48
The 8051 uses these registers to transfer data over the EZ-USB FX I 2C-compatible bus. For I 2Ccompatible peripherals that support it, the EZ-USB FX I 2C-compatible bus can run at 400 KHz. For
compatibility, the EZ-USB FX powers-up at the 100-KHz frequency.
In the EZ-USB FX family, an I 2C-compatible Interrupt Request occurs on INT3 whenever the
DONE Bit (I2CS.0) makes a zero-to-one transition. This interrupt signals the 8051 that the I 2Ccompatible controller is ready for another command. For more information on the I 2C-compatible
interrupt, see Section 12.14. "I2C-Compatible STOP Complete Interrupt."
Bit 7:
START
The 8051 sets the START Bit to 1 to prepare an I 2C-compatible bus transfer. If START=1, the
next 8051 load to I2DAT will generate the start condition followed by the serialized byte of data
in I2DAT. The 8051 loads byte data into I2DAT after setting the START Bit. The I 2C-compatible
controller clears the START Bit during the ACK interval.
Bit 6:
STOP
The 8051 sets STOP=1 to terminate an I 2C-compatible bus transfer. The I 2C-compatible controller clears the STOP Bit after completing the STOP condition. If the 8051 sets the STOP Bit
during a byte transfer, the STOP condition will be generated immediately following the ACK
phase of the byte transfer. If no byte transfer is occurring when the STOP Bit is set, the STOP
condition will be carried out immediately on the bus. Data should not be written to I2CS or
I2DAT until the STOP Bit returns low.
Bit 5:
LASTRD
To read data over the I 2C-compatible bus, an I 2C-compatible master floats the SDA line and
issues clock pulses on the SCL line. After every eight bits, the master drives SDA low for one
clock to indicate ACK. To signal the last byte of the read transfer, the master floats SDA at
ACK time to instruct the slave to stop sending. This is controlled by the 8051 by setting LastRD=1 before reading the last byte of a read transfer. The I 2C-compatible controller clears the
LastRD Bit at the end of the transfer (at ACK time).
Setting LastRD does not automatically generate a STOP condition. The 8051 should also set the
STOP Bit at the end of a read transfer.
Bit 4-3:
ID1,ID0
Boot EEPROM ID
These bits are set by the boot loader to indicate whether an 8-bit address or 16-bit address
EEPROM at slave address 000 or 001 was detected at power-on. Normally, they are used for
debug purposes only.
Page 15-49
BERR
Bus Error
This bit indicates an I 2C-compatible bus error. BERR=1 indicates that there was bus contention, which results when an outside device drives the bus LO when it shouldnt, or when
another bus master wins arbitration, taking control of the bus. BERR is cleared when 8051
reads or writes the IDATA Register.
Bit 1:
ACK
Acknowledge Bit
Every ninth SCL or a write transfer the slave indicates reception of the byte by asserting ACK.
The EZ-USB FX controller floats SDA during this time, samples the SDA line, and updates the
ACK Bit with the complement of the detected value. ACK=1 indicates acknowledge, and
ACK=0 indicates not-acknowledge. The USB core updates the ACK Bit at the same time it
sets DONE=1. The ACK Bit should be ignored for read transfers on the bus.
Bit 0:
I 2C-CompatibleTransfer DONE
DONE
The I 2C-compatible controller sets this bit whenever it completes a byte transfer, right after the
ACK stage. The controller also generates an I 2C-compatible Interrupt Request (8051 INT3)
when it sets the DONE Bit. The I 2C-compatible controller automatically clears the DONE Bit
and the I 2C-compatible Interrupt Request bit whenever the 8051 reads or writes the I2DAT
Register.
I2CMODE
7FA7
I 2C-Compatible Mode
b7
b6
b5
b4
b3
b2
b1
b0
STOPIE
400KHZ
R/W
R/W
Bit 1:
STOPIE
The I 2C-compatible STOP Bit Interrupt Request is activated when the STOP Bit makes a 1-0
transition. To enable this interrupt, set the STOPIE Bit in the I2CMODE Register. The 8051
determines the interrupt source by checking the DONE and STOP bits in the I2CS Register.
Bit 0:
400KHZ
I2C-compatible Speed
If this bit is set to 1, the I 2C-compatible bus operates at 400KHZ. If set to 0, the I 2C-compatible bus operates at 100KHZ. This bit can be set by an external EEPROM on power-up and
can be changed subsequently by the 8051.
Page 15-50
15.35 Interrupts
Read/write
latency note: These registers need the equivalent of 2 instruction clock cycles of
time between performing the following instructions back-to-back: (1) write-write (2) write-read.
IVEC
Interrupt Vector
7FA8
b7
b6
b5
b4
b3
b2
b1
b0
IV4
IV3
IV2
IV1
IV0
IN07IRQ
7FA9
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
IN7IR
IN6IR
IN5IR
IN4IR
IN3IR
IN2IR
IN1IR
IN0IR
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OUT07IRQ
7FAA
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
OUT7IR
OUT6IR
OUT5IR
OUT4IR
OUT3IR
OUT2IR
OUT1IR
OUT0IR
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-51
Do not clear an IRQ Bit by reading an IRQ Register, ORing its contents with a bit mask, and writing back the IRQ Register. This will clear ALL pending interrupts. Instead, simply write the bit mask
value (with a 1 in the bit position of the IRQ you want to clear) directly to the IRQ Register.
USBIRQ
7FAB
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
IBNIR
USESIR
SUSPIR
SUTOKIR
SOFIR
SUDAVIR
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bit 5:
IBNIR
The USB core sets this bit when any of the IN bulk endpoints responds to an IN token with a
NAK. This interrupt occurs when the host sends an IN token to a bulk IN endpoint which has
not been armed by the 8051 writing its byte count register. Individual enables and requests
(per endpoint) are controlled by the IBNIRQ and IBNIEN Registers (7FB0, 7FB1). Write a 1
to this bit to clear the interrupt request.
Bit 4:
URESIR
The USB core sets this bit to 1 when it detects a USB bus reset.
Because this bit can change state while the 8051 is in reset, it may be active when the 8051
comes out of reset, although it is reset to 0 by a power-on reset. Write a 1 to this bit to clear
the interrupt request. See Chapter 13. "EZ-USB FX Resets" for more information about this
bit.
Page 15-52
Bit 3:
SUSPIR
The USB core sets this bit to 1 when it detects USB SUSPEND signaling (no bus activity for
3 ms). Write a 1 to this bit to clear the interrupt request.
Because this bit can change state while the 8051 is in reset, it may be active when the 8051
comes out of reset, although it is reset to 0 by a power-on reset. See Chapter 14. "EZ-USB
FX Power Management" for more information about this bit.
Bit 2:
SUTOKIR
The USB core sets this bit to 1 when it receives a SETUP token. Write a 1 to this bit to clear
the interrupt request. See Chapter 9. "EZ-USB FX Endpoint Zero" for more information on the
handling of SETUP tokens.
Because this bit can change state while the 8051 is in reset, it may be active when the 8051
comes out of reset, although it is reset to 0 by a power-on reset.
Bit 1:
SOFIR
The USB core sets this bit to 1 when it receives a SOF packet. Write a 1 to this bit to clear
the interrupt request.
Because this bit can change state while the 8051 is in reset, it may be active when the 8051
comes out of reset, although it is reset to 0 by a power-on reset.
Bit 0:
SUDAVIR
The USB core sets this bit to 1 when it has transferred the eight data bytes from an endpoint
zero SETUP packet into internal registers (at SETUPDAT). Write a 1 to this bit to clear the
interrupt request.
Because this bit can change state while the 8051 is in reset, it may be active when the 8051
comes out of reset, although it is reset to 0 by a power-on reset.
Page 15-53
IN07EN
7FAC
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
IN7IEN
IN6IEN
IN5IEN
IN4IEN
IN3IEN
IN2IEN
IN1IEN
IN0IEN
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OUT07IEN
7FAD
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
OUT7IEN
OUT6IEN
OUT5IEN
OUT4IEN
OUT3IEN
OUT2IEN
OUT1IEN
OUT0IEN
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
The INT2 interrupt (EIE.0) and the 8051 global interrupt enable (EA) must be enabled for the endpoint interrupts to propagate to the 8051. Once the INT2 interrupt is active, it must be cleared by
software.
USBIEN
7FAE
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
IBNIE*
URESIE
SUSPIE
SUTOKIE
SOFIE
SUDAVIE
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-54
USBIEN bits gate the interrupt request to the 8051 for USB reset, suspend, SETUP token, start of
frame, and SETUP data available.
Bit 5:
IBNIE
The 8051 sets this bit to enable the IN-bulk-NAK interrupt. This interrupt occurs when the host
sends an IN token to a bulk IN endpoint which has not been armed by the 8051 writing its byte
count register. Individual enables and requests (per endpoint) are controlled by the IBNIRQ
and IBNIEN Registers (7FB0, 7FB1).
Bit 4:
URESIE
This bit is the interrupt mask for the URESIR Bit. When this bit is 1, the interrupt is enabled,
when it is 0, the interrupt is disabled.
Bit 3:
SUSPIE
This bit is the interrupt mask for the SUSPIR Bit. When this bit is 1, the interrupt is enabled,
when it is 0, the interrupt is disabled.
Bit 2:
SUTOKIE
This bit is the interrupt mask for the SUTOKIR Bit. When this bit is 1, the interrupt is enabled,
when it is 0, the interrupt is disabled.
Bit 1:
SOFIE
This bit is the interrupt mask for the SOFIE Bit. When this bit is 1, the interrupt is enabled,
when it is 0, the interrupt is disabled.
Bit 0:
SUDAVIE
This bit is the interrupt mask for the SUDAVIE Bit. When this bit is 1, the interrupt is enabled,
when it is 0, the interrupt is disabled.
USBBAV
7FAF
b7
b6
b5
b4
b3
b2
b1
b0
INT2SFC
BREAK
BPPULSE
BPEN
AVEN
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-55
INT2SFC
If INT2SFC=1, the IRQ2 flag can be quickly cleared by writing any value to the INT2CLR SFR
(see Section 4.12, "SFR Addressing").
Bit 3:
BREAK
Breakpoint enable
The BREAK Bit is set when the 8051 address bus matches the address held in the bit breakpoint address registers (7FB2, 7FB3). The BKPT pin reflects the state of this bit. The 8051
writes a 1 to the BREAK Bit to clear it. It is not necessary to clear the BREAK Bit if the pulse
mode bit (BPPULSE) is set.
Bit 2:
BPPULSE
The 8051 sets this bit to 1 to pulse the BREAK Bit (and BKPT pin) high for 8 CLKOUT cycles
when the 8051 address bus matches the address held in the breakpoint address registers.
When this bit is set to 0, the BREAK Bit (and BKPT pin) remains high until it is cleared by the
8051.
Bit 1:
BPEN
Breakpoint enable
If this bit is 1, a BREAK signal is generated whenever the 16-bit address lines match the
value in the Breakpoint Address Registers (BPADDRH/L). The behavior of the BREAK Bit and
associated BKPT pin signal is either latched or pulsed, depending on the state of the
BPPULSE Bit.
Bit 0:
AVEN
Auto-vector enable
If this bit is 1, the EZ-USB FX Auto-vector feature is enabled for USB (INT2) interrupts. If it is
0, the auto-vector feature is disabled. See Chapter 12. "EZ-USB FX Interrupts" for more information on the auto-vector feature. Note: a separate bit, AV4EN in the INT4SETUP (785E)
enables the INT4 autovector.
IBNIRQ
7FB0
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
EP6IR
EP5IR
EP4IR
EP3IR
EP2IR
EP1IR
EP0IR
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-56
IBNIRQ Register to determine which of the endpoints caused the interrupt. The 8051 clears an
IBNIRQ Bit by writing a 1 to it.
IBNIEN
7FB1
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
EP6IE
EP5IE
EP4IE
EP3IE
EP2IE
EP1IE
EP0IE
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
BPADDRH
7FB2
b7
b6
b5
b4
b3
b2
b1
b0
A15
A14
A13
A12
A11
A10
A9
A8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
BPADDRL
7FB3
b7
b6
b5
b4
b3
b2
b1
b0
A7
A6
A5
A4
A3
A2
A1
A0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-57
latency note: These registers need the equivalent of 2 instruction clock cycles of
time between performing the following instructions back-to-back: (1) write-write (2) write-read.
EP0CS
7FB4
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
OUTBSY
INBSY
HSNAK
EP0STALL
R/W
R/W
IN0BC
7FB5
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
BC6
BC5
BC4
BC3
BC2
BC1
BC0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OUT0BC
7FC5
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
BC6
BC5
BC4
BC3
BC2
BC1
BC0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bit 3:
OUTBSY
OUTBSY is a read-only bit that is automatically cleared when a SETUP token arrives. The
8051 sets the OUTBSY Bit by writing a byte count to EPOUTBC.
Page 15-58
If the CONTROL transfer uses an OUT data phase, the 8051 must load a dummy byte count
into OUT0BC to arm the OUT endpoint buffer. Until it does, the USB core will NAK the OUT
tokens.
Bit 2:
INBSY
IN Endpoint Busy
INBSY is a read-only bit that is automatically cleared when a SETUP token arrives. The 8051
sets the INBSY Bit by writing a byte count to IN0BC.
If the CONTROL transfer uses an IN data phase, the 8051 loads the requested data into the
IN0BUF buffer, and then loads the byte count into IN0BC to arm the data phase of the CONTROL transfer. Alternatively, the 8051 can arm the data transfer by loading an address into
the Setup Data Pointer Registers SUDPTRH/L. Until armed, the USB core will NAK the IN
tokens.
Bit 1:
HSNAK
Handshake NAK
HSNAK (Handshake NAK) is a read/write bit that is automatically set when a SETUP token
arrives. The 8051 clears HSNAK by writing a 1 to the register bit.
While HSNAK=1, the USB core NAKs the handshake (status) phase of the CONTROL transfer. When HSNAK=0, it ACKs the handshake phase. The 8051 can clear HSNAK at any time
during a CONTROL transfer.
Bit 0:
EP0STALL
EP0STALL is a read/write bit that is automatically cleared when a SETUP token arrives. The
8051 sets EP0STALL by writing a 1 to the register bit.
While EP0STALL=1, the USB core sends the STALL PID for any IN or OUT token. This can
occur in either the data or handshake phase of the CONTROL transfer.
To indicate an endpoint stall on endpoint zero, set both EP0STALL and HSNAK bits. Setting the
EP0STALL Bit alone causes endpoint zero to NAK forever because the host keeps the control
transfer pending.
Page 15-59
latency note: These registers need the equivalent of 2 instruction clock cycles of
time between performing the following instructions back-to-back: (1) write-write (2) write-read.
Endpoints 1-7 IN and OUT are used for bulk or interrupt data. Table 15-16 shows the addresses
for the control/status and byte count registers associated with these endpoints. The bi-directional
CONTROL endpoint zero registers are described in Section 15.36. "Endpoint 0 Control and Status
Registers."
Table 15-16. Control and Status Register Addresses for Endpoints 0-7
Address
7FB4
7FB5
7FB6
7FB7
7FB8
7FB9
7FBA
7FBB
7FBC
7FBD
7FBE
7FBF
7FC0
7FC1
7FC2
7FC3
7FC4
7FC5
7FC6
7FC7
7FC8
7FC9
7FCA
7FCB
7FCC
7FCD
7FCE
7FCF
7FD0
7FD1
7FD2
7FD3
Page 15-60
Function
Control and Status - Endpoint IN0
Byte Count - Endpoint IN0
Control and Status - Endpoint IN1
Byte Count - Endpoint IN1
Control and Status - Endpoint IN2
Byte Count - Endpoint IN2
Control and Status - Endpoint IN3
Byte Count - Endpoint IN3
Control and Status - Endpoint IN4
Byte Count - Endpoint IN4
Control and Status - Endpoint IN5
Byte Count - Endpoint IN5
Control and Status - Endpoint IN6
Byte Count - Endpoint IN6
Control and Status - Endpoint IN7
Byte Count - Endpoint IN7
Reserved
Byte Count - Endpoint OUT0
Control and Status - Endpoint OUT1
Byte Count - Endpoint OUT1
Control and Status - Endpoint OUT2
Byte Count - Endpoint OUT2
Control and Status - Endpoint OUT3
Byte Count - Endpoint OUT3
Control and Status - Endpoint OUT4
Byte Count - Endpoint OUT4
Control and Status - Endpoint OUT5
Byte Count - Endpoint OUT5
Control and Status - Endpoint OUT6
Byte Count - Endpoint OUT6
Control and Status - Endpoint OUT7
Byte Count - Endpoint OUT7
Name
EP0CS
IN0BC
IN1CS
IN1BC
IN2CS
IN2BC
IN3CS
IN3BC
IN4CS
IN4BC
IN5CS
IN5BC
IN6CS
IN6BC
IN7CS
IN7BC
OUT0BC
OUT1CS
OUT1BC
OUT2CS
OUT2BC
OU37CS
OUT3BC
OUT4CS
OUT4BC
OUT5CS
OUT5BC
OUT6CS
OUT6BC
OUT7CS
OUT7BC
INnCS
7FB6-7FC2*
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
INnBSY
INnSTL
R/W
R/W
Bit 1:
INnBSY
The BSY Bit indicates the status of the endpoints IN Buffer INnBUF. The USB core sets
BSY=0 when the endpoints IN buffer is empty and ready for loading by the 8051. The 8051
causes BSY=1 by loading the endpoints byte count register.
When BSY=1, the 8051 should not write data to an IN endpoint buffer, because the endpoint
FIFO could be in the act of transferring data to the host over the USB. BSY=0 when the USB
IN transfer is complete and endpoint RAM data is available for 8051 access. USB IN tokens
for the endpoint are NAKd while BSY=0 (the 8051 is still loading data into the endpoint buffer).
A 1-to-0 transition of BSY (indicating that the 8051 can access the buffer) generates an interrupt request for the IN endpoint. After the 8051 writes the data to be transferred to the IN endpoint buffer, it loads the endpoints byte count register with the number of bytes to transfer,
which automatically sets BSY=1. This enables the IN transfer of data to the host in response
to the next IN token. Again, the CPU should never load endpoint data while BSY=1.
The 8051 writes a 1 to an IN endpoint busy bit to disarm a previously armed endpoint. (This
sets BSY=0.) The 8051 program should do this only after a USB bus reset, or when the host
selects a new interface or alternate setting that uses the endpoint. This prevents stale data
from a previous setting from being accepted by the hosts first IN transfer that uses the new
setting.
Even though the register description shows bit 1 as R/W, the 8051 can only clear this bit by writing a 1 to it. The 8051 can not directly set this bit.
To disarm a paired IN endpoint, write a 1 to the busy bit for both endpoints in the pair.
Page 15-61
INnSTL
The 8051 sets this bit to 1 to stall an endpoint, and to 0 to clear a stall.
When the stall bit is 1, the USB core returns a STALL Handshake for all requests to the endpoint. This notifies the host that something unexpected has happened.
The 8051 sets an endpoints stall bit under two circumstances:
1. The host sends a Set_FeatureEndpoint Stall Request to the specific endpoint.
2. The 8051 encounters any show stopper error on the endpoint, and sets the stall bit to tell
the host to halt traffic to the endpoint.
The 8051 clears an endpoints stall bit under two circumstances:
1. The host sends a Clear_FeatureEndpoint Stall Request to the specific endpoint.
2. The 8051 receives some other indication from the host that the stall should be cleared
(this is referred to as host intervention in the USB Specification). This indication could
be a USB bus reset.
All stall bits are automatically cleared when the EZ-USB FX chip ReNumerates by pulsing
the DISCON Bit HI.
INnBC
7FB7-7FC3*
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-62
byte count register, the endpoint BSY Bit remains at 0, indicating that only one of the buffers is
full, and the other is still empty. The odd numbered byte count register is not used when endpoints are paired.
OUTnCS
7FC6-7FD2*
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
OUTnBSY
OUTnSTL
R/W
Bit 1:
OUTnBSY
The BSY Bit indicates the status of the endpoints OUT Buffer OUTnBUF. The USB core sets
BSY=0 when the host data is available in the OUT buffer. The 8051 sets BSY=1 by loading
the endpoints byte count register.
When BSY=1, endpoint RAM data is invalid--the endpoint buffer has been emptied by the
8051 and is waiting for new OUT data from the host, or it is the process of being loaded over
the USB. BSY=0 when the USB OUT transfer is complete and endpoint RAM data in OUTnBUF is available for the 8051 to read. USB OUT tokens for the endpoint are NAKd while
BSY=1 (the 8051 is still reading data from the OUT endpoint).
A 1-to-0 transition of BSY (indicating that the 8051 can access the buffer) generates an interrupt request for the OUT endpoint. After the 8051 reads the data from the OUT endpoint
buffer, it loads the endpoints byte count register with any value to re-arm the endpoint, which
automatically sets BSY=1. This enables the OUT transfer of data from the host in response to
the next OUT token. The CPU should never read endpoint data while BSY=1.
Bit 0:
OUTnSTL
The 8051 sets this bit to 1 to stall an endpoint, and to 0 to clear a stall.
When the stall bit is 1, the USB core returns a STALL Handshake for all requests to the endpoint. This notifies the host that something unexpected has happened.
The 8051 sets an endpoints stall bit under two circumstances:
1.The host sends a Set_FeatureEndpoint Stall Request to the specific endpoint.
2.The 8051 encounters any show stopper error on the endpoint, and sets the stall bit to tell the
host to halt traffic to the endpoint.
Page 15-63
OUTnBC
7FC7-7FD3*
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
D6
D5
D4
D3
D2
D1
D0
R/W
Page 15-64
latency note: These registers need the equivalent of 2 instruction clock cycles of
time between performing the following instructions back-to-back: (1) write-write (2) write-read.
SUDPTRH
7FD4
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
A15
A14
A13
A12
A11
A10
A9
A8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
SUDPTRL
7FD5
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
A7
A6
A5
A4
A3
A2
A1
A0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Any host request that uses the EZ-USB FX Setup Data Pointer to transfer IN data must indicate
the number of bytes to transfer in bytes 6 (wLenghthL) and 7 (wLengthH) of the SETUP packet.
These bytes are pre-assigned in the USB Specification to be length bytes in all standard device
requests such as Get_Descriptor. If vendor-specific requests are used to transfer large blocks of
data using the Setup Data Pointer, they must include this pre-defined length field in bytes 6-7 to tell
the USB core how many bytes to transfer using the Setup Data Pointer.
Page 15-65
The USB core transfers the lesser of (a) the bytes requested in the SETUP packet, and (b) the
bytes in the length field of the descriptor pointed to by the Setup Data Pointer.
USBCS
7FD6
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
WAKESRC
DISCON
DISCOE
RENUM
SIGRSUME
R/W
R/W
R/W
R/W
R/W
Bit 7:
WAKESRC
Wakeup source
This bit indicates that a high to low transaction was detected on the WAKEUP# pin. Writing a
1 to this bit resets it to 0.
Bit 3:
DISCON
The EZ-USB FX DISCON# pin reflects the complement of this bit. This bit is normally set to 0.
Bit 2:
DISCOE
DISCOE controls the output buffer on the DISCON# pin. When DISCOE=0, the pin floats, and
when DISCOE=1, it drives to the complement of the DISCON Bit (above).
DISCOE is used in conjunction with the RENUM Bit to perform ReNumeration, (Chapter 5.
"EZ-USB FX Enumeration & ReNumeration").
Bit 1:
RENUM
ReNumerate
This bit controls which entity, the USB core or the 8051, handles USB device requests. When
RENUM=0, the USB core handles all device requests. When RENUM=1, the 8051 handles all
device requests except Set_Address.
The 8051 sets RENUM=1 during a bus disconnect to transfer USB control to the 8051. The
USB core automatically sets RENUM=1 under two conditions:
1. Completion of a B6 boot load (Chapter 5. "EZ-USB FX Enumeration & ReNumeration".
2. When external memory is used (EA=1) and no boot I 2C-compatible EEPROM is used
(see Section 13.3.3, "External ROM").
Page 15-66
Bit 0:
SIGRSUME
The 8051 sets SIGRSUME=1 to drive the K state onto the USB bus. This should be done
only by a device that is capable of remote wakeup, and then only during the SUSPEND state.
To signal RESUME, the 8051 sets SIGRSUME=1, waits 10-15 ms, then sets SIGRSUME=0.
TOGCTL
7FD7
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
IO
EP2
EP1
EP0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bit 7:
Q=0 indicates DATA0 and Q=1 indicates DATA1, for the endpoint selected by the I/O and
EP[2..0] bits. The 8051 writes the endpoint select bits (IO and EP[2..0]), before reading this
value.
Bit 6:
After selecting the desired endpoint by writing the endpoint select bits (IO and EP[2..0]) the
8051 sets S=1 to set the data toggle to DATA1. The endpoint selection bits should not be
changed while this bit is written.
At this writing there is no known reason to set an endpoint data toggle to 1. This bit is provided for
generality and testing only.
Bit 5:
After selecting the desired endpoint by writing the endpoint select bits (IO and EP[2..0]) the
8051 sets R=1 to set the data toggle to DATA0. The endpoint selection bits should not be
changed while this bit is written. For advice on when to reset the data toggle, see Chapter 9.
"EZ-USB FX Endpoint Zero".
Bit 4:
IO
The 8051 sets this bit to select an endpoint direction prior to setting its R or S Bit. IO=0 selects
an OUT endpoint, IO=1 selects an IN endpoint.
Page 15-67
EP
Select endpoint
The 8051 sets these bits to select an endpoint prior to setting its R or S Bit. Valid values are 07 to correspond to bulk endpoints IN0-IN7 and OUT0-OUT7.
USBFRAMEL
7FD8
b7
b6
b5
b4
b3
b2
b1
b0
FC7
FC6
FC5
FC4
FC3
FC2
FC1
FC0
USBFRAMEH
7FD9
b7
b6
b5
b4
b3
b2
b1
b0
FC10
FC9
FC8
FNADDR
Function Address
7FDB
b7
b6
b5
b4
b3
b2
b1
b0
FA6
FA5
FA4
FA3
FA2
FA1
FA0
Page 15-68
USB device address because the USB Core automatically responds only to its assigned
address.
During ReNumeration the USB Core sets register to 0 to allow the EZ-USB FX chip to respond
to the default address 0.
USBPAIR
7FDD
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
ISOSEND0
PR6OUT
PR4OUT
PR2OUT
PR6IN
PR4IN
PR2IN
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Bit 7:
ISOSEND0
The ISOSEND0 Bit is used when the EZ-USB FX chip receives an isochronous IN token while
the IN FIFO is empty. If ISOSEND0=0 (the default value), the USB core does not respond to
the IN token. If ISOSEND0=1, the USB core sends a zero-length data packet in response to
the IN token. Which action to take depends on the overall system design. The ISOSEND0 Bit
applies to all of the isochronous IN endpoints, IN8BUF through IN15BUF.
Bit 5-3:
PRnOUT
Set the endpoint pairing bits (PRxOUT) to 1 to enable double-buffering of the bulk OUT endpoint buffers. With double buffering enabled, the 8051 can operate on one buffer while
another is being transferred over USB. The endpoint busy and interrupt request bits function
identically, so the 8051 code requires no code modification to support double buffering.
When an endpoint is paired, the 8051 uses only the even-numbered endpoint of the pair. The
8051 should not use the paired odd endpoints IRQ, IEN, VALID bits or the buffer associated
with the odd numbered endpoint.
Bit 2-0:
PRnIN
Set the endpoint pairing bits (PRxIN) to 1 to enable double-buffering of the bulk IN endpoint
buffers. With double buffering enabled, the 8051 can operate on one buffer while another is
being transferred over USB.
When an endpoint is paired, the 8051 should access only the even-numbered endpoint of the
pair. The 8051 should not use the IRQ, IEN, VALID bits or the buffer associated with the odd
numbered endpoint.
Page 15-69
IN07VAL
7FDE
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
IN7VAL
IN6VAL
IN5VAL
IN4VAL
IN3VAL
IN2VAL
IN1VAL
IN0VAL
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OUT07VAL
7FDF
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
OUT7VAL
OUT6VAL
OUT5VAL
OUT4VAL
OUT3VAL
OUT2VAL
OUT1VAL
OUT0VAL
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-70
INISOVAL
7FE0
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
IN15VAL
IN14VAL
IN13VAL
IN12VAL
IN11VAL
IN10VAL
IN9VAL
IN8VAL
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
OUTISOVAL
7FE1
Read/write latency applies
b7
b6
b5
b4
b3
b2
b1
b0
OUT9VAL
OUT8VAL
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
FASTXFR
7FE2
b7
b6
b5
b4
b3
b2
b1
b0
FISO
FBLK
RPOL
RMOD1
RMOD0
WPOL
WMOD1
WMOD0
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-71
FISO
The 8051 sets FISO=1 to enable fast isochronous transfers for all16 isochronous endpoint
FIFOs. When FISO=0, fast transfers are disabled for all 16 isochronous endpoints.
Bit 6:
FBLK
The 8051 sets FBLK=1 to enable fast bulk transfers using the Autopointer (see Section 15.40,
"SETUP Data") with BULK endpoints. When FBLK=0 fast transfers are disabled for BULK
endpoints.
Bit 5:
RPOL
The 8051 sets RPOL=0 for active-low FRD# pulses, and RPOL=1 for active high FRD#
pulses.
Bit 4-3:
RMOD
These bits select the phasing and width of the FRD# pulse.
Bit 2:
WPOL
The 8051 sets WPOL=0 for active-low FWR# pulses, and WPOL=1 for active high FWR#
pulses.
Bit 1-0:
WMOD
These bits select the phasing and width of the FWR# pulse.
Page 15-72
AUTOPTRH
7FE3
b7
b6
b5
b4
b3
b2
b1
b0
A15
A14
A13
A12
A11
A10
A9
A8
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
AUTOPTRL
7FE4
b7
b6
b5
b4
b3
b2
b1
b0
A7
A6
A5
A4
A3
A2
A1
A0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
AUTODATA
7FE5
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
15.39.1 AUTOPTRH/L
The 8051 loads a 16-bit address into the AUTOPTRH/L Registers. Subsequent reads or writes to
the AUTODATA Register increment the 16-bit value in these registers. The loaded address must
be in internal EZ-USB FX RAM. The 8051 can read these registers to determine the address of the
next byte to be accessed via the AUTODATA Register.
15.39.2 AUTODATA
8051 data read or written to the AUTODATA Register accesses the memory addressed by the
AUTOPTRH/L Registers, and increments the address after the read or write.
These registers allow FIFO access to the bulk endpoint buffers, as well as being useful for internal
data movement. Chapter 6. "EZ-USB FX Bulk Transfers" and Chapter 10. "EZ-USB FX Isochronous Transfers" explain how to use the Autopointer for fast transfers to and from the EZ-USB FX
endpoint buffers.
Page 15-73
SETUPBUF
7FE8-7FEF
b7
b6
b5
b4
b3
b2
b1
b0
D7
D6
D5
D4
D3
D2
D1
D0
OUTnADDR
7FF0-7FF7*
b7
b6
b5
b4
b3
b2
b1
b0
A9
A8
A7
A6
A5
A4
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
INnADDR
7FF8-7FFF*
b7
b6
b5
b4
b3
b2
b1
b0
A9
A8
A7
A6
A5
A4
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Page 15-74
7FF0
7FF1
7FF2
7FF3
7FF4
7FF5
7FF6
7FF7
7FF8
7FF9
7FFA
7FFB
7FFC
7FFD
7FFE
7FFF
EZ-USB FX Isochronous endpoints use a pool of 1,024 double-buffered FIFO bytes. The 1,024
FIFO bytes can be divided between any or all of the isochronous endpoints. The 8051 sets isochronous endpoint FIFO sizes by writing starting addresses to these registers, starting with address
0. Address bits A3-A0 are internally set to zero, so the minimum FIFO size is 16 bytes.
Page 15-75
Page 15-76
16.1 Introduction
The EZ-USB FX contains an 8051 core that is binary-compatible with the industry standard 8051
instruction set.
Crystal
Oscillator
8-bit CPU
Register
RAM
(256 bytes)
Serial Port1
Serial Port0
Timer2
Timer1
Timer0
Internal Bus
Bus Control
Interrupt
Control
I/O Ports*
* The EZ-USB family implements I/O ports differently than in the standard 8051
Figure 16-1. 8051 Features
This chapter provides an overview of the 8051 core features. The topics are:
Page 16-1
Performance Overview
Software Compatibility
8051/DS80C320 Differences.
Three timers
High-speed architecture:
-
4 clocks/instruction cycle
2.5X average improvement in instruction execution time over the standard 8051
Page 16-2
Some instructions require a different number of instruction cycles on the 8051 core than they do on
the standard 8051. In the standard 8051, all instructions except for MUL and DIV take one or two
instruction cycles to complete. In the 8051 core, instructions can take between one and five
instruction cycles to complete. The average speed improvement for the entire instruction set is
approximately 2.5X. Table 16-1 catalogs the speed improvements.
Table 16-1. 8051/Standard 8051 Speed Comparison
Number of Opcodes Speed Improvement
150
3.0X
51
1.5X
43
2.0X
2.4X
Total: 255
Average: 2.5X
8051 Timing
single byte single cycle instruction
ALE
PSEN#
AD0-AD7
PORT2
4
XTAL1
12
ALE
PSEN#
AD0-AD7
PORT2
single byte single cycle instruction
Page 16-3
8051
80C32
80C52
Dallas
DS80C320
Anchor
8051
12
-
12
4 KB ROM
12
-
12
8 KB ROM
4
-
4
8 K RAM
Internal RAM
Data Pointers
128 bytes
1
128 bytes
1
256 bytes
1
256 bytes
1
256 bytes
2
256 bytes
2
Serial Ports
16-bit Timers
1
2
1
2
1
3
1
3
2
3
2
3
13
13
no
no
no
no
yes
yes
Feature
Clocks per instruction cycle
Program / Data Memory
Page 16-4
16.6.2 Timer 2
The 8051 core does not implement Timer 2 downcounting mode or the downcount enable bit
(TMOD2, Bit 0). Also, the 8051 core does not implement Timer 2 output enable (T2OE) bit
(TMOD2, Bit 1). Therefore, the TMOD2 SFR is also not implemented in the 8051 core.
Also, the 8051 core Timer 2 overflow output is active for one clock cycle. In the DS80C320, the
Timer 2 overflow output is a square wave with a 50% duty cycle.
It is possible to float the T2OUT pin by setting OEB.7=0 and PORTBCFG.7=0. This selects the
PORTB (not T2OUT) signal, and turns off its output buffer.
Page 16-5
Page 16-6
17.1 Introduction
This chapter provides a technical overview and description of the 8051 core architecture.
17.1.1.1 Registers
Register memory is implemented inside the 8051 core. The 8051 accesses registers in two
regions using direct addressing, providing the fastest available 8051 data access. The two directly
addressable regions are 128 general purpose registers at addresses 00-7F, and 128 bytes of Special Function Registers (SFRs) at 80-FF. The SFR address space, which is not fully populated,
contains 8051 control and status registers, plus added EZ-USB FX control and status registers.
Page 17-1
7Fh
FFh
Direct RAM
30h
...
2Fh 7F
78
Bank
.
Select
Bit-Addressable
.
(PSW
Registers
bits 4,3)
...
11
10
01
00
20h 07
1Fh
Bank 3
18h
17h
Bank 2
10h
0Fh
Bank 1
08h
07h
Bank 0
00
FFh
Upper 128
bytes
(optional)
SFR space
80h
7Fh
80h
Lower 128
bytes
00
Direct addressing
only
00h
Direct or indirect addressing
MOV
A,22H
MOV
A,IOE
MOV
IOD,A
An additional 128 registers overlap the SFRs at addresses 80-FF. The 8051 keeps these separate from the SFRs by using a different addressing mode, 8-bit indirect, to access them. For
example, to read the register at location 90(hex):
MOV
R0,#90H
MOV
A,@R0
The 8051 uses two registers, R0 and R1, to hold the 8-bit index. This addressing mode may also
access register memory from 0-127, although it is faster and more efficient to use the direct
addressing available in this lower region.
Page 17-2
Since the 8051 stack is internally accessed using indirect addressing, it is a good idea to put the
stack in the upper 128 bytes of register memory, which is addressable using indirect addressing
only. This frees the lower 128 register bytes for use by the more efficient direct addressing.
Page 17-3
Page 17-4
Function
Accumulator
Rn
Register R7R0
direct
@Ri
rel
bit
#data
8-bit constant
#data 16
16-bit constant
addr 16
addr 11
Description
ADD A, Rn
Add register to A
Byte
Instr.
Cycles
Hex
Code
28-2F
Arithmetic
ADD A, direct
25
ADD A, @Ri
26-27
ADDC A, #data
Add immediate to A
24
ADDC A, Rn
38-3F
ADDC A, direct
35
ADDC A, @Ri
36-37
ADDC A, #data
34
SUBB A, Rn
98-9F
SUBB A, direct
95
SUBB A, @Ri
96-97
SUBB A, #data
94
INC A
increment A
04
INC Rn
Increment register
08-0F
INC direct
05
INC @ Ri
06-07
DEC A
Decrement A
14
DEC Rn
Decrement Register
18-1F
DEC direct
15
DEC @Ri
16-17
INC DPTR
A3
MUL AB
Multiply A by B
A4
DIV AB
Divide A by B
84
DA A
Decimal adjust A
D4
Logical
ANL, Rn
AND register to A
58-5F
ANL A, direct
55
ANL A, @Ri
56-57
ANL A, #data
AND immediate to A
54
ANL direct, A
52
53
ORL A, Rn
OR register to A
48-4F
ORL A, direct
OR direct byte to A
45
ORL A, @Ri
OR data memory to A
46-47
ORL A, #data
OR immediate to A
44
ORL direct, A
OR A to direct byte
42
Page 17-5
Description
Byte
Instr.
Cycles
Hex
Code
43
XORL A, Rn
Exclusive-OR register to A
68-6F
XORL A, direct
65
XORL A, @Ri
66-67
XORL A, #data
Exclusive-OR immediate to A
64
XORL direct, A
62
63
CLR A
Clear A
E4
CPL A
Complement A
F4
SWAP A
Swap nibbles of a
C4
RL A
Rotate A left
23
RLC A
33
RRA
Rotate A right
03
RRC A
13
Data Transfer
MOV A, Rn
Move register to A
E8-EF
MOV A, direct
E5
MOV A, @Ri
E6-E7
MOV A, #data
Move immediate to A
74
MOV Rn, A
Move A to register
F8-FF
A8-AF
78-7F
MOV direct, A
F5
MOV direct, Rn
88-8F
85
86-87
75
MOV @Ri, A
F6-F7
A6-A7
76-77
90
MOVC A, @A+DPTR
93
MOVC A, @A+PC
83
MOVX A, @Ri
2-9*
E2-E3
MOVX A, @DPTR
2-9*
E0
MOVX @Ri, A
2-9*
F2-F3
MOVX @DPTR, A
2-9*
F0
PUSH direct
C0
Page 17-6
Instr.
Cycles
Hex
Code
Mnemonic
Description
POP direct
D0
XCH A, Rn
C8-CF
XCH A, direct
C5
XCH A, @Ri
C6-C7
XCHD A, @Ri
D6-D7
* Number of cycles is user-selectable. See Section 17.1.5. "Stretch Memory Cycles (Wait States)".
Boolean
CLR C
Clear carry
C3
CLR bit
C2
SETB C
Set carry
D3
SETB bit
D2
CPL C
Complement carry
B3
CPL bit
B2
ANL C, bit
82
ANL C, /bit
B0
ORL C, bit
72
ORL C, /bit
A0
MOV C, bit
A2
MOV bit, C
92
ACALL addr 11
11-F1
LCALL addr 16
12
RET
22
Branching
RETI
32
AJMP addr 11
01-E1
LJMP addr 16
02
SJMP rel
80
JC rel
Jump on carry = 1
40
JNC rel
Jump on carry = 0
50
JB bit, rel
20
30
10
JMP @ A+DPTR
73
JZ rel
Jump on accumulator = 0
60
JNZ rel
Jump on accumulator /= 0
70
B5
B4
B8-BF
Page 17-7
Description
Byte
Instr.
Cycles
Hex
Code
B6-B7
D8-DF
D5
NOP
No operation
00
Miscellaneous
There is an additional reserved opcode (A5) that performs the same function as NOP. All mnemonics are
copyrighted. Intel Corporation 1980.
Page 17-8
CLK24
Instruction cycle
CPU cycle
n+1
C1
C2
C3
n+2
C4
C1
C2
C3
C4
C1
Page 17-9
MD1
MD0
Memory
Cycles
Read/Write
Strobe Width
(Clocks)
Strobe Width
@ 24MHz
Strobe Width
@ 48MHz
83.3 ns
41.65 ns
3 (default)
166.7 ns
83.35 ns
333.3 ns
166.66 ns
12
500 ns
250 ns
16
666.7 ns
333.35 ns
20
833.3 ns
416.65 ns
24
1000 ns
500 ns
28
1166.7 ns
583.35 ns
Page 17-10
DPL0
DPH0
DPL1
DPH1
DPS
SP
PSW
ACC
B
Stack Pointer
Program Status Word ()
Accumulator Register
B Register
Table 17-6 lists the functions of the bits in the PSW SFR. Detailed descriptions of the remaining
SFRs appear with the associated hardware descriptions in Chapter 4. "EZ-USB FX Input/Output"
of this manual.
Page 17-11
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Addr
SP
81h
DPL0
82h
DPH0
83h
(1)
84h
DPH1(1)
85h
DPL1
(1)
DPS
SEL
86h
PCON
SMOD0
GF1
GF0
STOP
IDLE
87h
TCON
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
88h
TMOD
GATE
C/T
M1
M0
GATE
C/T
M1
M0
89h
TL0
8Ah
TL1
8Bh
TH0
8Ch
TH1
8Dh
CKCON(1)
T2M
T1M
T0M
MD2
MD1
MD0
8Eh
SPC_FNC(1)
WRS
8Fh
EXIF(1)
IE5
IE4
I2CINT
USBINT
91h
92h
MPAGE(1)
SCON0
SM0_0
SM1_0
SM2_0
REN_0
TB8_0
RB8_0
TI_0
RI_0
SBUF0
IE
98h
99h
EA
ES1
ET2
ES0
ET1
EX1
ET0
EX0
A8h
IP
PS1
PT2
PS0
PT1
PX1
PT0
PX0
B8h
SCON1(1)
SM0_1
SM1_1
SM2_1
REN_1
TB8_1
RB8_1
TI_1
RI_1
C0h
C1h
SBUF1(1)
T2CON
TF2
EXF2
RCLK
TCLK
EXEN2
TR2
C/T2
CP/RL2
C8h
RCAP2L
CAh
RCAP2H
CBh
TL2
CCh
TH2
CDh
PSW
CY
AC
F0
RS1
RS0
OV
F1
D0h
EICON(1)
SMOD1
ERESI
RESI
INT6
D8h
ACC
EIE(1)
E0H
1
EWDI
EX5
EX4
EI2C
EUSB
B
EIP(1)
F0h
1
1
(1)
Page 17-12
E8h
PX6
PX5
PX4
PI2C
PUSB
F8h
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Addr
SP
81h
DPL0
82h
DPH0
83h
DPL1(1)
84h
DPH1(1)
85h
(1)
DPS
86h
PCON
87h
TCON
88h
TMOD
89h
TL0
8Ah
TL1
8Bh
TH0
8Ch
8Dh
8Eh
SPC_FNC(1)
8Fh
EXIF(1)
91h
MPAGE(1)
92h
SCON0
98h
SBUF0
99h
IE
A8h
TH1
(1)
CKCON
IP
B8h
(1)
C0h
SBUF1(1)
C1h
T2CON
C8h
RCAP2L
CAh
RCAP2H
CBh
TL2
CCh
TH2
CDh
SCON1
PSW
D0h
EICON(1)
D8h
ACC
E0H
EIE(1)
E8h
F0h
F8h
(1)
EIP
(1)
Page 17-13
Function
PSW.7
CY - Carry flag. This is the unsigned carry bit. The CY flag is set when an arithmetic operation
results in a carry from bit 7 to bit 8, and cleared otherwise. In other words, it acts as a virtual bit
8. The CY flag is cleared on multiplication and division.
PSW.6
AC - Auxiliary carry flag. Set to 1 when the last arithmetic operation resulted in a carry into (during addition) or borrow from (during subtraction) the high order nibble, otherwise cleared to 0 by
all arithmetic operations.
PSW.5
PSW.4
RS1 - Register bank select bit 1. used with RS0 to select a register bank in internal RAM.
PSW.3
PSW.2
OV - Overflow flag. This is the signed carry bit. The OV flag is set when a positive sum exceeds
7fh, or a negative sum (in twos compliment notation) exceeds 80h. On a multiply, if OV = 1, the
result of the multiply is greater than FFh. On a divide, OV = 1 on a divide by 0.
PSW.1
PSW.0
P - Parity flag. Set to 1 when the modulo-2 sum of the 8 bits in the accumulator is 1 (odd parity),
cleared to 0 on even parity.
Page 17-14
18.1 Introduction
This chapter provides technical data about the 8051 core hardware operation and timing. The topics are:
Timers/Counters
Serial Interface
Interrupts
8051 Reset
18.2 Timers/Counters
The 8051 core includes three timer/counters (Timer 0, Timer 1, and Timer 2). Each timer/counter
can operate as either a timer with a clock rate based on the CLKOUT pin or as an event counter
clocked by the T0 pin (Timer 0), T1 pin (Timer 1), or the T2 pin (Timer 2).
Each timer/counter consists of a 16-bit register that is accessible to software as two SFRs:
Page 18-1
Intel 8051
Dallas DS80C320
8051
Number of timers
not implemented
not implemented
T0OUT, T1OUT
(one CLKOUT pulse)
n/a
implemented
n/a
implemented
not implemented
Timer 2 overflow
available as output signal
n/a
implemented
T2OUT
(one CLKOUT pulse)
18.2.2.1 Mode 0
Mode 0 operation, illustrated in Figure 18-3, is the same for Timer 0 and Timer 1. In mode 0, the
timer is configured as a 13-bit counter that uses bits 0-4 of TL0 (or TL1) and all 8 bits of TH0 (or
TH1). The timer enable bit (TR0/TR1) in the TCON SFR starts the timer. The C/T Bit selects the
timer/counter clock source, CLKOUT or the T0/T1 pins.
The timer counts transitions from the selected source as long as the GATE Bit is 0, or the GATE
Bit is 1 and the corresponding interrupt pin (INT0# or INT1#) is 1.
When the 13-bit count increments from 1FFFh (all ones), the counter rolls over to all zeros, the
TF0 (or TF1) Bit is set in the TCON SFR, and the T0OUT (or T1OUT) pin goes high for one clock
cycle.
Page 18-2
The upper 3 bits of TL0 (or TL1) are indeterminate in mode 0 and must be masked when the software evaluates the register.
Divide by 12
CLKOUT
CLK
C/ T
Divide by 4
1
Mode 0
GATE
INT0# pin
(or INT1#)
INT
To Serial Port
(Timer 1 only)
18.2.2.2 Mode 1
Mode 1 operation is the same for Timer 0 and Timer 1. In mode 1, the timer is configured as a 16bit counter. As illustrated in Figure 18-3, all 8 bits of the LSB Register (TL0 or TL1) are used. The
counter rolls over to all zeros when the count increments from FFFFh. Otherwise, mode 1 operation is the same as mode 0.
Page 18-3
Function
TMOD.7
GATE - Timer 1 gate control. When GATE = 1, Timer 1 will clock only when INT1# = 1 and
TR1 (TCON.6) = 1. When GATE = 0, Timer 1 will clock only when TR1 = 1, regardless of the
state of INT1#.
TMOD.6
TMOD.5
TMOD.4
TMOD.3
GATE - Timer 0 gate control, When GATE = 1, Timer 0 will clock only when INT0 = 1 and
TR0 (TCON.4) = 1. When GATE = 0, Timer 0 will clock only when TR0 = 1, regardless of the
state of INT0.
TMOD.2
TMOD.1
TMOD.0
Page 18-4
TCON.2
TCON.1
TCON.0
Function
TF1 - Timer 1 overflow flag. Set to 1 when the Timer 1 count overflows and cleared when the
processor vectors to the interrupt service routine.
TR1 - Timer 1 run control. Set to 1 to enable counting on Timer 1.
TF0 - Timer 0 overflow flag. Set to 1 when the Timer 0 count overflows and cleared when the
processor vectors to the interrupt service routine.
TR0 - Timer 0 run control. Set to 1 to enable counting on Timer 0.
IE1 - Interrupt 1 edge detect. If external interrupt 1 is configured to be edge-sensitive (IT1 =
1), IE1 is set by hardware when a negative edge is detected on the INT1 pin and is automatically cleared when the CPU vectors to the corresponding interrupt service routine. In this
case, IE1 can also be cleared by software. If external interrupt 1 is configured to be levelsensitive (IT1 = 0), IE1 is set when the INT1# pin is 0 and cleared when the INT1# pin is 1. In
level-sensitive mode, software cannot write to IE1.
IT1 - Interrupt 1 type select. INT1 is detected on falling edge when IT1 = 1; INT1 is detected
as a low level when IT1 = 0.
IE0 - Interrupt 0 edge detect. If external interrupt 0 is configured to be edge-sensitive (IT0 =
1), IE0 is set by hardware when a negative edge is detected on the INT0 pin and is automatically cleared when the CPU vectors to the corresponding interrupt service routine. In this
case, IE0 can also be cleared by software. If external interrupt 0 is configured to be levelsensitive (IT0 = 0), IE0 is set when the INT0# pin is 0 and cleared when the INT0# pin is 1. In
level-sensitive mode, software cannot write to IE0.
IT0 - Interrupt 0 type select. INT0 is detected on falling edge when IT0 = 1; INT0 is detected
as a low level when IT0 = 0.
18.2.2.3 Mode 2
Mode 2 operation is the same for Timer 0 and Timer 1. In mode 2, the timer is configured as an 8bit counter, with automatic reload of the start value. The LSB Register (TL0 or TL1) is the counter
and the MSB Register (TH0 or TH1) stores the reload value.
As illustrated in Figure 18-4, mode 2 counter control is the same as for mode 0 and mode 1. However, in mode 2, when TLn increments from FFh, the value stored in THn is reloaded into TLn.
Page 18-5
Divide by 12
CLKOUT
Divide by 4
C/ T
0
RELOAD
1
CLK
GATE
TF0 (or TF1)
INT0# pin
(or INT1# pin)
INT
To Serial Port
(Timer 1 only)
18.2.2.4 Mode 3
In mode 3, Timer 0 operates as two 8-bit counters and Timer 1 stops counting and holds its value.
As shown in Figure 18-5, TL0 is configured as an 8-bit counter controlled by the normal Timer 0
control bits. TL0 can either count CLKOUT cycles (divided by 4 or by 12) or high-to-low transitions
on T0, as determined by the C/T Bit. The GATE function can be used to give counter enable control to the INT0# pin.
TH0 functions as an independent 8-bit counter. However, TH0 can only count CLKOUT cycles
(divided by 4 or by 12). The Timer 1 control and flag bits (TR1 and TF1) are used as the control
and flag bits for TH0.
When Timer 0 is in mode 3, Timer 1 has limited usage because Timer 0 uses the Timer 1 control
bit (TR1) and interrupt flag (TF1). Timer 1 can still be used for baud rate generation and the Timer
1 count values are still available in the TL1 and TH1 Registers.
Control of Timer 1 when Timer 0 is in mode 3 is through the Timer 1 mode bits. To turn Timer 1 on,
set Timer 1 to mode 0, 1, or 2. To turn Timer 1 off, set it to mode 3. The Timer 1 C/T Bit and T1M
Bit are still available to Timer 1. Therefore, Timer 1 can count CLKOUT/4, CLKOUT/12, or high-tolow transitions on the T1 pin. The Timer 1 GATE function is also available when Timer 0 is in mode
3.
Page 18-6
T0M
Divide by 12
CLKOUT
1
Divide by 4
C/ T
CLK
7
TL0
T0 pin
TR0
TF0
INT
TF1
INT
GATE
INT0# pin
TH0
TR1
Counter/Timer
Timer 2
Timer 1
Timer 0
When a CKCON Register Bit is set to 1, the associated counter increments at 4-CLKOUT intervals. When a CKCON Bit is cleared, the associated counter increments at 12-CLKOUT intervals.
The timer controls are independent of each other. The default setting for all three timers is 0 (12CLKOUT intervals). These bits have no effect in counter mode.
Page 18-7
Function
CKCON.7,6
Reserved
CKCON.5
T2M - Timer 2 clock select. When T2M = 0, Timer 2 uses CLKOUT/12 (for compatibility with 80C32); when T2M = 1, Timer 2 uses CLKOUT/4. This bit has no effect
when Timer 2 is configured for baud rate generation.
CKCON.4
T1M - Timer 1 clock select. When T1M = 0, Timer 1 uses CLKOUT/12 (for compatibility with 80C32); when T1M = 1, Timer 1 uses CLKOUT/4.
CKCON.3
T0M - Timer 0 clock select. When T0M = 0, Timer 0 uses CLKOUT/12 (for compatibility with 80C32); when T0M = 1, Timer 0 uses CLKOUT/4.
CKCON.2-0
MD2, MD1, MD0 - Control the number of cycles to be used for external MOVX
instructions.
18.2.4 Timer 2
Timer 2 runs only in 16-bit mode and offers several capabilities not available with Timers 0 and 1.
The modes available with Timer 2 are:
16-bit timer/counter
RCAP2L SFR CAh - Used to capture the TL2 value when Timer 2 is configured for capture mode, or as the LSB of the 16-bit reload value when Timer 2 is configured for autoreload mode.
RCAP2H SFR CBh - Used to capture the TH2 value when Timer 2 is configured for
capture mode, or as the MSB of the 16-bit reload value when Timer 2 is configured for
auto-reload mode.
Page 18-8
TCLK
CP/RL2
TR2
Mode
Off
X = Dont care.
Page 18-9
Function
T2CON.7
TF2 - Timer 2 overflow flag. Hardware will set TF2 when the Timer 2 overflows from FFFFh.
TF2 must be cleared to 0 by the software. TF2 will only be set to a 1 if RCLK and TCLK are
both cleared to 0. Writing a 1 to TF2 forces a Timer 2 interrupt if enabled.
T2CON.6
EXF2 - Timer 2 external flag. Hardware will set EXF2 when a reload or capture is caused by
a high-to-low transition on the T2EX pin, and EXEN2 is set. EXF2 must be cleared to 0 by
the software. Writing a 1 to EXF2 forces a Timer 2 interrupt if enabled.
T2CON.5
RCLK - Receive clock flag. Determines whether Timer 1 or Timer 2 is used for Serial Port 0
timing of received data in serial mode 1 or 3. RCLK =1 selects Timer 2 overflow as the
receive clock. RCLK =0 selects Timer 1 overflow as the receive clock.
T2CON.4
TCLK - Transmit clock flag. Determines whether Timer 1 or Timer 2 is used for Serial Port 0
timing of transmit data in serial mode 1 or 3. RCLK =1 selects Timer 2 overflow as the transmit clock. RCLK =0 selects Timer 1 overflow as the transmit clock.
T2CON.3
EXEN2 - Timer 2 external enable. EXEN2 = 1 enables capture or reload to occur as a result
of a high-to-low transition on the T2EX pin, if Timer 2 is not generating baud rates for the
serial port. EXEN2 = 0 causes Timer 2 to ignore all external events on the T2EX pin.
T2CON.2
TR2 - Timer 2 run control flag. TR2 = 1 starts Timer 2. TR2 = 0 stops Timer 2.
T2CON.1
C/T2 - Counter/timer select. C/T2 = 0 selects a timer function for Timer 2. C/T2 = 1 selects a
counter of falling transitions on the T2 pin. When used as a timer, Timer 2 runs at 4 clocks
per tick or 12 clocks per tick as programmed by CKCON.5, in all modes except baud rate
generator mode. When used in baud rate generator mode, Timer 2 runs at 2 clocks per tick,
independent of the state of CKCON.5.
T2CON.0
Page 18-10
Divide by 12
CLKOUT
T2M
0
1
Divide by 4
C/ T2
CLK 0
7 8
TL2
15
TH2
T2 pin
RCAP2H
RCAP2L
TR2
78
15
TF2
EXEN2
CAPTURE
EXF2
T2EX pin
INT
Page 18-11
Divide by 12
CLKOUT
T2M
0
1
Divide by 4
C/ T2
CLK
7 8
0
TL2
15
TH2
T2 pin
RCAP2L
TR2
0
RCAP2H
78
15
TF2
EXEN2
EXF2
T2EX pin
INT
Page 18-12
TIMER 1 OVERFLOW
CLKOUT
Divide
by 2
C/ T2
Divide
by 2
CLK
SMOD1
0
T2 pin
7 8
TR2
TL2
15
RCLK
TH2
1
RX
CLOCK
Divide
by 16
TCLK
RCAP2L
0
EXEN2
EXF2
T2EX pin
RCAP2H
7 8
15
TIMER 2 INTERRUPT
Divide
by 16
TX
CLOCK
Page 18-13
Baud Clock
Sync
CLKOUT/4 or CLKOUT/12
Async
Timer 1 or Timer 2
Async
CLKOUT/32 or CLKOUT/64
Async
Mode
Timer 1 or Timer 2
(1)
Data Bits
Start/Stop
None
None
1 start, 1 stop
None
1 start, 1 stop
0, 1, parity
1 start, 1 stop
0, 1, parity
18.3.2 Mode 0
Serial mode 0 provides synchronous, half-duplex serial communication. For Serial Port 0, serial
data output occurs on the RXD0OUT pin, serial data is received on the RXD0 pin, and the TXD0
pin provides the shift clock for both transmit and receive. For Serial Port 1, the corresponding pins
are RXD1OUT, RXD1, and TXD1.
The serial mode 0 baud rate is either CLKOUT/12 or CLKOUT/4, depending on the state of the
SM2_0 Bit (or SM2_1 for Serial Port 1). When SM2_0 = 0, the baud rate is CLKOUT/12, when
SM2_0 = 1, the baud rate is CLKOUT/4.
Mode 0 operation is identical to the standard 8051. Data transmission begins when an instruction
writes to the SBUF0 (or SBUF1) SFR. The UART shifts the data, LSB first, at the selected baud
rate, until the 8-bit value has been shifted out.
Mode 0 data reception begins when the REN_0 (or REN_1) Bit is set and the RI_0 (or RI_1) Bit is
cleared in the corresponding SCON SFR. The shift clock is activated and the UART shifts data in
on each rising edge of the shift clock until 8 bits have been received. One machine cycle after the
8th bit is shifted in, the RI_0 (or RI_1) Bit is set and reception stops until the software clears the RI
Bit.
Page 18-14
Figure 18-9 through Figure 18-12 illustrate Serial Port Mode 0 transmit and receive timing for both
low-speed (CLKOUT/12) and high-speed (CLKOUT/4) operation.
Table 18-14. SCON0 Register SFR 98h
Bit
Function
SCON0.7
SCON0.6
SCON0.5
SM2_0 - Multiprocessor communication enable. In modes 2 and 3, this bit enables the multiprocessor communication feature. If SM2_0 = 1 in mode 2 or 3, then RI_0 will not be activated
if the received 9th bit is 0.
If SM2_0=1 in mode 1, then RI_0 will only be activated if a valid stop is received. In mode 0,
SM2_0 establishes the baud rate: when SM2_0=0, the baud rate is CLKOUT/12; when
SM2_0=1, the baud rate is CLKOUT/4.
SCON0.4
SCON0.3
TB8_0 - Defines the state of the 9th data bit transmitted in modes 2 and 3.
SCON0.2
RB8_0 - In modes 2 and 3, RB8_0 indicates the state of the 9th bit received. In mode 1, RB8_0
indicates the state of the received stop bit. In mode 0, RB8_0 is not used.
SCON0.1
TI_0 - Transmit interrupt flag. indicates that the transmit data word has been shifted out. In
mode 0, TI_0 is set at the end of the 8th data bit. In all other modes, TI_0 is set when the stop
bit is placed on the TXD0 pin. TI_0 must be cleared by firmware.
SCON0.0
RI_0 - Receive interrupt flag. Indicates that serial data word has been received. In mode 0,
RI_0 is set at the end of the 8th data bit. In mode 1, RI_0 is set after the last sample of the
incoming stop bit, subject to the state of SM2_0. In modes 2 and 3, RI_0 is set at the end of the
last sample of RB8_0. RI_0 must be cleared by firmware.
Page 18-15
Function
SCON1.7
SCON1.6
SCON1.5
SM2_1 - Multiprocessor communication enable. In modes 2 and 3, this bit enables the
multiprocessor communication feature. If SM2_1 = 1 in mode 2 or 3, then RI_1 will not be
activated if the received 9th bit is 0.
If SM2_1=1 in mode 1, then RI_1 will only be activated if a valid stop is received. In mode
0, SM2_1 establishes the baud rate: when SM2_1=0, the baud rate is CLKOUT/12; when
SM2_1=1, the baud rate is CLKOUT/4.
SCON1.4
SCON1.3
TB8_1 - Defines the state of the 9th data bit transmitted in modes 2 and 3.
SCON1.2
RB8_1 - In modes 2 and 3, RB8_0 indicates the state of the 9th bit received. In mode 1,
RB8_1 indicates the state of the received stop bit. In mode 0, RB8_1 is not used.
SCON1.1
TI_1 - Transmit interrupt flag. indicates that the transmit data word has been shifted out. In
mode 0, TI_1 is set at the end of the 8th data bit. In all other modes, TI_1 is set when the
stop bit is placed on the TXD0 pin. TI_1 must be cleared by the software.
SCON1.0
RI_1 - Receive interrupt flag. Indicates that serial data word has been received. In mode 0,
RI_1 is set at the end of the 8th data bit. In mode 1, RI_1 is set after the last sample of the
incoming stop bit, subject to the state of SM2_1. In modes 2 and 3, RI_1 is set at the end
of the last sample of RB8_1. RI_1 must be cleared by the software.
Page 18-16
CLKOUT
PSEN
D0
RXD0
D1
D2
D3
D4
D5
D6
D7
RXD0OUT
TXD0
TI
RI
Figure 18-9. Serial Port Mode 0 Receive Timing - Low Speed Operation
CLKOUT
PSEN
RXD0
D0
D1
D2
D3
D4
D5
D6
D7
RXD0OUT
TXD0
TI
RI
Figure 18-10. Serial Port Mode 0 Receive Timing - High Speed Operation
Page 18-17
CLKOUT
PSEN
RXD0
RXD0OUT
D0
D1
D2
D3
D4
D5
D6
D7
TXD0
TI
RI
Figure 18-11. Serial Port Mode 0 Transmit Timing - Low Speed Operation
CLKOUT
PSEN
RXD0
RXD0OUT
D0
D1
D2
D3
D4
D5
D6
D7
TXD0
TI
RI
Figure 18-12. Serial Port Mode 0 Transmit Timing - High Speed Operation
Page 18-18
18.3.3 Mode 1
Mode 1 provides standard asynchronous, full-duplex communication, using a total of 10 bits: 1
start bit, 8 data bits, and 1 stop bit. For receive operations, the stop bit is stored in RB8_0 (or
RB8_1). Data bits are received and transmitted LSB first.
Baud Rate =
x Timer 1 Overflow
32
Baud Rate =
Timer 2 Overflow
16
To use Timer 1 as the baud rate generator, it is best to use Timer 1 mode 2 (8-bit counter with autoreload), although any counter mode can be used. The Timer 1 reload is stored in the TH1 Register,
which makes the complete formula for Timer 1:
Baud Rate =
2
32
SMODx
x
CLKOUT
12 x (256 - TH1)
The 12 in the denominator in the above equation can be changed to 4 by setting the T1M Bit in the
CKCON SFR. To derive the required TH1 value from a known baud rate (when TM1 = 0), use the
equation:
TH1 =
256 -
SMODx
2
x CLKOUT
384 x Baud Rate
Page 18-19
More accurate baud rates are achieved by using Timer 2 as the baud rate generator (next section).
Table 18-16. Timer 1 Reload Values for Common Serial Port Mode 1 Baud Rates
Nominal Rate
24 MHz
Divisor
Reload Value
Actual
Rate
Error
57600
FA
62500
8.5%
38400
10
F6
37500
-2.3%
28800
13
F3
28846
+0.16%
19200
20
EC
18750
-2.3%
9600
39
D9
9615
+0.16%
4800
78
B2
4807
+0.15%
2400
156
64
2403
+.13%
To use Timer 2 as the baud rate generator, configure Timer 2 in auto-reload mode and set the
TCLK and/or RCLK Bits in the T2CON SFR. TCLK selects Timer 2 as the baud rate generator for
the transmitter; RCLK selects Timer 2 as the baud rate generator for the receiver. The 16-bit
reload value for Timer 2 is stored in the RCAP2L and RCA2H SFRs, which makes the equation for
the Timer 2 baud rate:
Baud Rate =
CLKOUT
32 x (65536 - RCAP2H,RCAP2L)
where RCAP2H,RCAP2L is the content of RCAP2H and RCAP2L taken as a 16-bit unsigned
number.
The 32 in the denominator is the result of CLKOUT being divided by 2 and the Timer 2 overflow
being divided by 16. Setting TCLK or RCLK to 1 automatically causes CLKOUT to be divided by 2,
as shown in Figure 18-8, instead of the 4 or 12 as determined by the T2M Bit in the CKCON SFR.
To derive the required RCAP2H and RCAP2L values from a known baud rate, use the equation:
Page 18-20
RCAP2H,RCAP2L =
CLKOUT
65536 -
32 x Baud Rate
When either RCLK or TCLK is set, the TF2 flag is not set on a Timer 2 roll over, and the T2EX
reload trigger is disabled.
Table 18-17. Timer 2 Reload Values for Common Serial Port Mode 1 Baud Rates
Nominal Rate
C/T2
Divisor
Reload Val
Actual Rate
Error
57600
13
F3
57692.31
0.16%
38400
20
EC
37500
-2.34%
28800
26
E6
28846.15
0.16%
19200
39
D9
19230.77
0.16%
9600
78
B2
9615.385
0.16%
4800
156
64
4807.692
0.16%
2400
312
FEC8
2403.846
0.16%
Note: using rates that are off by 2.3% or more will not work in all systems.
Page 18-21
If the above conditions are met, the serial port then writes the received byte to the SBUF0 (or
SBUF1) Register, loads the stop bit into RB8_0 (or RB8_1), and sets the RI_0 (or RI_1) Bit. If the
above conditions are not met, the received data is lost, the SBUF Register and RB8 Bit are not
loaded, and the RI Bit is not set.
After the middle of the stop bit time, the serial port waits for another high-to-low transition on the
(RXD0 or RXD1) pin.
Mode 1 operation is identical to that of the standard 8051 when Timers 1 and 2 use CLKOUT/12
(the default).
Write to
SBUF0
TX CLK
SHIFT
TXD0
START
D0
D1
D2
D3
D4
D5
D6
D7
STOP
RXD0
RXD0OUT
TI_0
RI_0
Page 18-22
RX CLK
RXD0
START D0
D1
D2
D3
D4
D5
D6
D7
STOP
Bit detector
sampling
SHIFT
RXD0OUT
TXD0
TI_0
RI_0
18.3.5 Mode 2
Mode 2 provides asynchronous, full-duplex communication, using a total of 11 bits: 1 start bit, 8
data bits, a programmable 9th bit, and 1 stop bit. The data bits are transmitted and received LSB
first. For transmission, the 9th bit is determined by the value in TB8_0 (or TB8_1). To use the 9th
bit as a parity bit, move the value of the P Bit (SFR PSW.0) to TB8_0 (or TB8_1).
The mode 2 baud rate is either CLKOUT/32 or CLKOUT/64, as determined by the SMOD0 (or
SMOD1) Bit. The formula for the mode 2 baud rate is:
Baud Rate =
SMODx
x CLKOUT
64
Page 18-23
If the above conditions are met, the serial port then writes the received byte to the SBUF0 (or
SBUF1) Register, loads the stop bit into RB8_0 (or RB8_1), and sets the RI_0 (or RI_1) Bit. If the
above conditions are not met, the received data is lost, the SBUF Register and RB8 Bit are not
loaded, and the RI Bit is not set. After the middle of the stop bit time, the serial port waits for
another high-to-low transition on the RXD0 (or RXD1) pin.
Write to
SBUF0
TX CLK
SHIFT
TXD0
START D0
D1
D2
D3
D4
D5
D6
D7
TB8
STOP
RXD0
RXD0OUT
TI_0
RI_0
Page 18-24
RX CLK
RXD0
START D0
D1
D2
D3
D4
D5
D6
D7
RB8
STOP
Bit detector
sampling
SHIFT
RXD0OUT
TXD0
TI_0
RI_0
18.3.6 Mode 3
Mode 3 provides asynchronous, full-duplex communication, using a total of 11 bits: 1 start bit, 8
data bits, a programmable 9th bit, and 1 stop bit. The data bits are transmitted and received LSB
first.
The mode 3 transmit and operations are identical to mode 2. The mode 3 baud rate generation is
identical to mode 1. That is, mode 3 is a combination of mode 2 protocol and mode 1 baud rate.
Figure 18-17 illustrates the mode 3 transmit timing.
Mode 3 operation is identical to that of the standard 8051 when Timers 1 and 2 use CLKOUT/12
(the default).
Page 18-25
Write to
SBUF0
TX CLK
SHIFT
TXD0
START D0
D1
D2
D3
D4
D5
D6
D7
TB8
STOP
RXD0
RXD0OUT
TI_0
RI_0
RX CLK
RXD0
START D0
D1
D2
D3
D4
D5
D6
D7
RB8 STOP
Bit detector
sampling
SHIFT
RXD0OUT
TXD0
TI_0
RI_0
Page 18-26
The IE and IP SFRs provide interrupt enable and priority control for the standard interrupt unit, as
with the standard 8051. Additionally, these SFRs provide control bits for the Serial Port 1 interrupt.
These bits (ES1 and PS1) are available only when the extended interrupt unit is implemented
(ext_intr=1). Otherwise, they are read as 0.
Bits ES0, ES1, ET2, PS0, PS1, and PT2 are present, but not used, when the corresponding module is not implemented.
The EXIF, EICON, EIE and EIP Registers provide flags, enable control, and priority control for the
optional extended interrupt unit.
Page 18-27
Function
IE.7
EA - Global interrupt enable. Controls masking of all interrupts except USB wakeup
(resume). EA = 0 disables all interrupts except USB wakeup. When EA = 1, interrupts are
enabled or masked by their individual enable bits.
IE.6
ES1 - Enable Serial Port 1 interrupt. ES1 = 0 disables Serial port 1 interrupts (TI_1 and
RI_1). ES1 = 1 enables interrupts generated by the TI_1 or TI_1 flag.
IE.5
ET2 - Enable Timer 2 interrupt. ET2 = 0 disables Timer 2 interrupt (TF2). ET2=1 enables
interrupts generated by the TF2 or EXF2 flag.
IE.4
ES0 - Enable Serial Port 0 interrupt. ES0 = 0 disables Serial Port 0 interrupts (TI_0 and
RI_0). ES0=1 enables interrupts generated by the TI_0 or RI_0 flag.
IE.3
ET1 - Enable Timer 1 interrupt. ET1 = 0 disables Timer 1 interrupt (TF1). ET1=1 enables
interrupts generated by the TF1 flag.
IE.2
EX1 - Enable external interrupt 1. EX1 = 0 disables external interrupt 1 (INT1). EX1=1
enables interrupts generated by the INT1# pin.
IE.1
ET0 - Enable Timer 0 interrupt. ET0 = 0 disables Timer 0 interrupt (TF0). ET0=1 enables
interrupts generated by the TF0 flag.
IE.0
EX0 - Enable external interrupt 0. EX0 = 0 disables external interrupt 0 (INT0). EX0=1
enables interrupts generated by the INT0# pin.
Page 18-28
Function
IP.7
Reserved. Read as 1.
IP.6
PS1 - Serial Port 1 interrupt priority control. PS1=0 sets Serial Port 1 interrupt
(TI_1 or RI_1) to low priority. PS1=1 sets Serial port 1 interrupt to high priority.
IP.5
PT2 - Timer 2 interrupt priority control. PT2=0 sets Timer 2 interrupt (TF2) to low
priority. PT2=1 sets Timer 2 interrupt to high priority.
IP.4
PS0 - Serial Port 0 interrupt priority control. PS0=0 sets Serial Port 0 interrupt
(TI_0 or RI_0) to low priority. PS0=1 sets Serial Port 0 interrupt to high priority.
IP.3
PT2 - Timer 1 interrupt priority control. PT1 = 0 sets Timer 1 interrupt (TF1) to low
priority. PT1=1 sets Timer 1 interrupt to high priority.
IP.2
IP.1
PT0 - Timer 0 interrupt priority control. PT0 = 0 sets Timer 0 interrupt (TF0) to low
priority. PT0=1 sets Timer 0 interrupt to high priority.
IP.0
PX0 - External interrupt 0 priority control. PX0 = 0 sets external interrupt 0 (INT0)
to low priority. PX0=1 sets external interrupt 0 to high priority.
Function
EXIF.7
EXIF.6
IE4 - External interrupt 4 flag. IE4 indicates a rising edge was detected at the
INT4 pin. IE4 must be cleared by software. Setting IE4 in software generates
an interrupt, if enabled.
EXIF.5
EXIF.4
USBINT - External interrupt 2 flag. The INT2 interrupt is internally connected to the EZ-USB FX interrupt and renamed USBINT. USBINT = 1 indicates an USB interrupt. USBINT must be cleared by software. Setting
USBINT in software generates an interrupt, if enabled.
EXIF.3
Reserved. Read as 1.
EXIF.2-0
Reserved. Read as 0.
Function
EICON.7
SMOD1 - Serial Port 1 baud rate doubler enable. When SMOD1 = 1 the
baud rate for Serial Port is doubled.
EICON.6
Reserved. Read as 1.
EICON.5
EICON.4
EICON.3
INT6 - External interrupt 6. When INT6 = 1, the INT6 pin has detected a low
to high transition. INT6 will remain active until cleared by writing a 0 to this
bit. Setting this bit in software generates an INT6 interrupt in enabled.
EICON.2-0
Reserved. Read as 0.
Page 18-29
Function
Reserved. Read as 1.
EIE.4
EIE.3
EIE.2
EIE.1
EIE.0
Function
Reserved. Read as 1.
EIP.4
EIP.3
EIP.2
EIP.1
EIP.0
Page 18-30
The 8051 core always completes the instruction in progress before servicing an interrupt. If the
instruction in progress is RETI, or a write access to any of the IP, IE, EIP, or EIE SFRs, the 8051
core completes one additional instruction before servicing the interrupt.
Description
Natural Priority
Interrupt Vector
RESUME
33h
INT0
External interrupt 0
03h
TF0
Timer 0 interrupt
0Bh
INT1
External interrupt 1
13h
TF1
Timer 1 interrupt
1Bh
TI_0 or RI_0
23h
TF2 or EXF2
Timer 2 interrupt
2Bh
TI_1 or RI_1
3Bh
INT2
USB interrupt
INT3
I C interrupt
43h
4Bh
INT4
External interrupt 4
53h
INT5
External interrupt 5
11
5Bh
INT6
External interrupt 6
12
63H
Page 18-31
Flag
Enable
Priority
Control
RESUME
Resume interrupt
EICON.4
EICON.5
N/A
INT0
External interrupt 0
TCON.1
IE.0
IP.0
TF0
Timer 0 interrupt
TCON.5
IE.1
IP.1
INT1
External interrupt 1
TCON.3
IE.2
IP.2
Interrupt
TF1
Timer 1 interrupt
TCON.7
IE.3
IP.3
TI_0 or RI_0
IE.4
IP.4
TF2 or EXF2
Timer 2 interrupt
IE.5
IP.5
TI_1 or RI_1
SCON1.0 (RI_1),
SCON1.1 (TI_1)
IE.6
IP.6
USB (INT2)
USB interrupt
EXIF.4
EIE.0
EIP.0
I C (INT3)
I C interrupt
EXIT.5
EIE.1
EIP.1
INT4
External interrupt 4
EXIF.6
EIE.2
EIP.2
INT5
External interrupt 5
EXIF.7
EIE.3
EIP.3
INT6
External INT 6
EICON.3
EIE.4
EIP.4
Page 18-32
JNB TCON.1,$
JB
TCON.1,$
RETI
The CPU enters the ISR when the INT0# pin goes low, then waits for a pulse on INT0#. Each time
INT0# is pulsed, the CPU exits the ISR, executes one program instruction, then re-enters the ISR.
18.5 Reset
The 8051 RESET pin is internally connected to an EZ-USB FX register bit that is controllable
through the USB host. See Chapter 13. "EZ-USB FX Resets" for details.
Page 18-33
Function
PCON.7
SMOD0 - Serial Port 0 baud rate double enable. When SMOD0 = 1, the
baud rate for Serial Port 0 is doubled.
PCON.6-4
Reserved.
PCON.3
PCON.2
PCON.1
PCON.0
IDLE - Idle mode select. Setting the IDLE Bit places the 8051 in idle
mode.
If the EZ-USB FX WAKEUP# pin is tied low, setting PCON.0 high does not put the 8051 into IDLE
state.
Page 18-34
Register Summary
EZ-USB FX
Addr
Name
Description
D7
D6
D5
D4
D3
D2
D1
D0
Default
Access
Notes
FIFO A-IN
7800
AINDATA
D7
D6
D5
D4
D3
D2
D1
D0
xxxxxxxx
7801
AINBC
D6
D5
D4
D3
D2
D1
D0
00000000
7802
AINPF
LTGT
D6
D5
D4
D3
D2
D1
D0
00100000
RW
7803
AINPFPIN
LTGT
D6
D5
D4
D3
D2
D1
D0
00000000
RW
7804
R, r = read-only,
FIFO B-IN
Default: empty
7805
BINDATA
D7
D6
D5
D4
D3
D2
D1
D0
xxxxxxxx
7806
BINBC
D6
D5
D4
D3
D2
D1
D0
00000000
7807
BINPF
LTGT
D6
D5
D4
D3
D2
D1
D0
00100000
RW
7808
BINPFPIN
LTGT
D6
D5
D4
D3
D2
D1
D0
00000000
RW
7809
ABINCS
780B
ABINIE
780C
ABINIRQ
780D
W, w = write-only
Default: empty
INTOG
INSEL
AINPF
AINEF
AINFF
BINPF
BINEF
BINFF
AINPF
AINEF
AINFF
BINPF
BINEF
BINFF
00000000
RW
AINPF
AINEF
AINFF
BINPF
BINEF
BINFF
xxxxxxxx
RW
D7
D6
D5
D4
D3
D2
D1
D0
xxxxxxxx
D6
D5
D4
D3
D2
D1
D0
00000000
LTGT
D6
D5
D4
D3
D2
D1
D0
10100000
RW
LTGT
D6
D5
D4
D3
D2
D1
D0
11000000
RW
Default: full
D7
D6
D5
D4
D3
D2
D1
D0
xxxxxxxx
RW = Read or Write,
D6
D5
D4
D3
D2
D1
D0
00000000
LTGT
D6
D5
D4
D3
D2
D1
D0
10100000
RW
LTGT
D6
D5
D4
D3
D2
D1
D0
11000000
RW
Default: full
PF=Programmable Flag,
(reserved)
FIFO A-OUT
780E
AOUTDATA
780F
AOUTBC
7810
AOUTPF
7811
AOUTPFPIN
7812
FIFO B-OUT
7813
BOUTDATA
7814
BOUTBC
7815
BOUTPF
7816
BOUTPFPIN
7817
ABOUTCS
OUTTOG
OUTSEL
AOUTPF
AOUTEF
AOUTFF
BOUTPF
BOUTEF
BOUTFF
01010010
RW
7819
ABOUTIE
AOUTPF
AOUTEF
AOUTFF
BOUTPF
BOUTEF
BOUTFF
00000000
RW
781A
ABOUTIRQ
AOUTPF
AOUTEF
AOUTFF
BOUTPF
BOUTEF
BOUTFF
xxxxxxxx
RW
781B
(reserved)
FIFO A/B Global Control
RegSum - 1
EZ-USB FX
Addr
Name
Description
D7
D6
D5
D4
D3
D2
D1
D0
Default
Access
781C
ABSETUP
FIFO Setup
ASYNC
DBLIN
OUTDLY
DBLOUT
00000000
RW
781D
ABPOLAR
BOE
AOE
SLRD
SLWR
ASEL
BSEL
00000000
RW
781E
ABFLUSH
xxxxxxxx
781F
(reserved)
7820
(reserved)
7821
(reserved)
7822
(reserved)
7823
(reserved)
Notes
GPIF
7824
WFSELECT
Waveform Selector
7825
IDLE_CS
7826
IDLE_CTLOUT
7827
CTLOUTCFG
7828
SINGLEWR 0-3
RW
SINGLERD 0-3
0
FIFOWR 0-3
0
FIFORD 0-3
IDLEDRV
10000000
RW
CTL5
CTL4
CTL3
CTL2
CTL1
CTL0
11111111
RW
TRICTL
CTL5
CTL4
CTL3
CTL2
CTL1
CTL0
00000000
RW
A5
A4
A3
A2
A1
A0
00000000
RW
(reserved)
7829
782A
11100100
DONE
(reserved)
GPIFADRL
782B
GPIF Address L
(reserved)
782C
AINTC
FIFO A IN T.C.
FITC
00000001
RW
782D
AOUTTC
FITC
00000001
RW
782E
ATRIG
xxxxxxxx
RW
7830
BINTC
FIFO B IN T.C.
FITC
00000001
RW
7831
BOUTTC
FITC
00000001
RW
7832
BTRIG
xxxxxxxx
RW
7834
SGLDATH
7835
SGLDATLTRIG
782F
7833
7836
7837
D15
D14
D13
D12
D11
D10
D9
D8
xxxxxxxx
RW
D7
D6
D5
D4
D3
D2
D1
D0
xxxxxxxx
RW
D7
D6
D5
D4
D3
D2
D1
D0
xxxxxxxx
No GPIF Waveform
INTRDY
SAS
RDY5
RDY4
RDY3
RDY2
RDY1
RDY0
xxxxxxxx
(reserved)
7838
READY
7839
ABORT
783A
(reserved)
783B
GENIE
DMADN
GPWF
GPDONE
00000000
RW
783C
GENIRQ
DMADN
GPWF
GPDONE
00000xxx
RW
783D
(reserved)
783E
(reserved)
RegSum - 2
EZ-USB FX
Addr
Name
Description
783F
(reserved)
7840
(reserved)
D7
D6
D5
D4
D3
D2
D1
D0
Default
Access
Notes
IO Ports D,E
7841
OUTD
Output Port D
OUTD7
OUTD6
OUTD5
OUTD4
OUTD3
OUTD2
OUTD1
OUTD0
xxxxxxxx
7842
PINSD
PIND7
PIND6
PIND5
PIND4
PIND3
PIND2
PIND1
PIND0
xxxxxxxx
7843
OED
0ED7
0ED6
0ED5
0ED4
0ED3
0ED2
0ED1
0ED0
00000000
RW
7844
(reserved)
7845
OUTE
Output Port E
OUTE7
OUTE6
OUTE5
OUTE4
OUTE3
OUTE2
OUTE1
OUTE0
xxxxxxxx
7846
PINSE
PINE7
PINE6
PINE5
PINE4
PINE3
PINE2
PINE1
PINE0
xxxxxxxx
7847
OEE
OEE7
OEE6
OEE5
OEE4
OEE3
OEE2
OEE1
OEE0
00000000
RW
00000000
RW
52ONE
7848
(reserved)
7849
PORTSETUP
784A
IFCONFIG
784B
PORTACF2
784C
PORTCCF2
784D
T0CLK
SFRPORT
GSTATE
BUS16
IF1
IF0
SLRD
SLWR
00000000
RW
CTL5
CTL4
CTL3
CTL1
RDY3
RDY1
RDY0
00000000
RW
52ONE: Set to 1 for 52-pin part (drive internal RDY signals HI)
(reserved)
784E
(reserved)
DMA Control
784F
DMASRCH
DMA SourceH
A15
A14
A13
A12
A11
A10
A9
A8
00000000
RW
7850
DMASRCL
DMA Source L
A7
A6
A5
A4
A3
A2
A1
A0
00000000
RW
7851
DMADESTH
DMA Destination H
A15
A14
A13
A12
A11
A10
A9
A8
00000000
RW
7852
DMADESTL
DMA Destination L
A7
A6
A5
A4
A3
A2
A1
A0
00000000
RW
00000001
RW
7853
(reserved)
7854
DMALEN
7855
DMAGO
7856
D7
D6
D5
D4
D3
D2
D1
D0
DONE
DSTR2
DSTR1
DSTR0
RB
WB
00000100
RW
n/a
n/a
n/a
n/a
n/a
n/a
n/a
n/a
xxxxxxxx
N/A
(reserved)
7857
DMABURST
7858
DMAEXTFIFO
7859
(reserved)
785A
(reserved)
785B
(reserved)
785C
0=256, 1=1255=255
Note: DSTRn are stretch values for DMA FRD# and FWR# signals
(reserved)
Interrupt 4 Vector Control
785D
INT4IVEC
Interrupt 4 Vector
I4V3
I4V2
I4V1
I4V0
01000000
785E
INT4SETUP
Interrupt 4 Setup
INT4SFC
INTERNAL
AV4EN
00000000
RW
785F78FF
(reserved)
RegSum - 3
EZ-USB FX
Addr
Name
Description
7900
WFDESC(0)
797F
WFDESC(127)
79807B3F
D7
D6
D5
D4
D3
D2
D1
D0
Default
Access
xxxxxxxx
RW
Notes
(reserved)
7B40
OUT7BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7B80
IN7BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7BC0
OUT6BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7C00
IN6BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7C40
OUT5BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7C80
IN5BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7CC0
OUT4BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7D00
IN4BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7D40
OUT3BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7D80
IN3BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7DC0
OUT2BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7E00
IN2BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7E40
OUT1BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7E80
IN1BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7EC0
OUT0BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7F00
IN0BUF
(64 bytes)
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7F407F5F
(reserved)
Isochronous Data
7F60
OUT8DATA
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F61
OUT9DATA
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F62
OUT10DATA
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F63
OUT11DATA
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F64
OUT12DATA
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F65
OUT13DATA
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F66
OUT14DATA
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F67
OUT15DATA
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F68
IN8DATA
Endpoint 8 IN Data
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F69
IN9DATA
Endpoint 9 IN Data
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F6A
IN10DATA
Endpoint 10 IN Data
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F6B
IN11DATA
Endpoint 11 IN Data
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F6C
IN12DATA
Endpoint 12 IN Data
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RegSum - 4
EZ-USB FX
Addr
Name
Description
D7
D6
D5
D4
D3
D2
D1
D0
Default
Access
7F6D
IN13DATA
Endpoint 13 IN Data
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F6E
IN14DATA
Endpoint 14 IN Data
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F6F
IN15DATA
Endpoint 15 IN Data
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
Notes
OUT8BCH
d9
d8
xxxxxxxx
7F71
OUT8BCL
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F72
OUT9BCH
d9
d8
xxxxxxxx
7F73
OUT9BCL
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F74
OUT10BCH
d9
d8
xxxxxxxx
7F75
OUT10BCL
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F76
OUT11BCH
d9
d8
xxxxxxxx
7F77
OUT11BCL
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F78
OUT12BCH
d9
d8
xxxxxxxx
7F79
OUT12BCL
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F7A
OUT13BCH
d9
d8
xxxxxxxx
7F7B
OUT13BCL
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F7C
OUT14BCH
d9
d8
xxxxxxxx
7F7D
OUT14BCL
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F7E
OUT15BCH
d9
d8
xxxxxxxx
7F7F
OUT15BCL
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7F807F91
(reserved)
CPU Registers
7F92
CPUCS
rv3
rv2
rv1
rv0
24/48
CLKINV
CLKOE
8051RES
7F93
PORTACFG
Port A Configuration
RxD1out
RxD0out
FRD
FWR
CS
OE
T1out
T0out
RW
7F94
PORTBCFG
Port B Configuration
T2OUT
INT6
INT5
INT4
TxD1
RxD1
T2EX
T2
00000000
RW
7F95
PORTCCFG
Port C Configuration
RD
WR
T1
T0
INT1
INT0
TxD0
RxD0
00000000
RW
OUTA
Output Register A
OUTA7
OUTA6
OUTA5
OUTA4
OUTA3
OUTA2
OUTA1
OUTA0
00000000
RW
7F97
OUTB
Output Register B
OUTB7
OUTB6
OUTB5
OUTB4
OUTB3
OUTB2
OUTB1
OUTB0
00000000
RW
7F98
OUTC
Output Register C
OUTC7
OUTC6
OUTC5
OUTC4
OUTC3
OUTC2
OUTC1
OUTC0
00000000
RW
7F99
PINSA
Port Pins A
PINA7
PINA6
PINA5
PINA4
PINA3
PINA2
PINA1
PINA0
xxxxxxxx
7F9A
PINSB
Port Pins B
PINB7
PINB6
PINB5
PINB4
PINB3
PINB2
PINB1
PINB0
xxxxxxxx
7F9B
PINSC
Port Pins C
PINC7
PINC6
PINC5
PINC4
PINC3
PINC2
PINC1
PINC0
xxxxxxxx
7F9C
OEA
Output Enable A
OEA7
OEA6
OEA5
OEA4
OEA3
OEA2
OEA1
OEA0
00000000
RW
7F9D
OEB
Output Enable B
OEB7
OEB6
OEB5
OEB4
OEB3
OEB2
OEB1
OEB0
00000000
RW
7F9E
OEC
Output Enable C
OEC7
OEC6
OEC5
OEC4
OEC3
OEC2
OEC1
OEC0
00000000
RW
7F9F
1=output enabled
RW pins enabled
reserve
RegSum - 5
EZ-USB FX
Addr
Name
Description
D7
D6
D5
D4
D3
D2
D1
D0
Default
Access
Notes
ISOERR
ISO9ERR
ISO8ERR
xxxxxxxx
7FA1
ISOCTL
Isochronous Control
PPSTAT
MBZ
MBZ
ISODISAB
0000x000 rrrrrbbb
7FA2
ZBCOUT
EP15
EP14
EP13
EP12
EP11
EP10
EP9
EP8
7FA3
xxxxxxxx
CRC Error
(reserved)
7FA4
(reserved)
I2C Registers
7FA5
I2CS
START
STOP
LASTRD
ID1
ID0
BERR
ACK
DONE
7FA6
I2DAT
Data
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
7FA7
I2CMODE
STOPIE
400kHz
00000000
RW
000xx000 bbbrrrrr
Interrupts
7FA8
IVEC
Interrupt Vector
7FA9
IN07IRQ
IV4
IV3
IV2
IV1
IV0
00000000
IN7IR
IN6IR
IN5IR
IN4IR
IN3IR
IN2IR
IN1IR
IN0IR
00000000
RW
7FAA
OUT07IRQ
OUT7IR
OUT6IR
OUT5IR
OUT4IR
OUT3IR
OUT2IR
OUT1IR
OUT0IR
xxxxxxxx
RW
7FAB
USBIRQ
IBNIR
URESIR
SUSPIR
SUTOKIR
SOFIR
SUDAVIR
xxxxxxxx
RW
7FAC
IN07IEN
IN7IEN
IN6IEN
IN5IEN
IN4IEN
IN3IEN
IN2IEN
IN1IEN
IN0IEN
00000000
RW
7FAD
OUT07IEN
1=enabled, 0=disabled
OUT7IEN
OUT6IEN
OUT5IEN
OUT4IEN
OUT3IEN
OUT2IEN
OUT1IEN
OUT0IEN
00000000
RW
7FAE
USBIEN
1=enabled, 0=disabled
IBNIE
URESIE
SUSPIE
SUTOKIE
SOFIE
SUDAVIE
00000000
RW
7FAF
1=enabled, 0=disabled
USBBAV
INT2SFC
BREAK
BPPULSE
BPEN
AVEN
xxx0xx00
RW
7FB0
IBNIRQ
EP6IN
EP5IN
EP4IN
EP3IN
EP2IN
EP1IN
EP0IN
xxxxxxxx
RW
7FB1
IBNIE
EP6IN
EP5IN
EP4IN
EP3IN
EP2IN
EP1IN
EP0IN
00000000
RW
7FB2
BPADDRH
Breakpoint Address H
A15
A14
A13
A12
A11
A10
A9
A8
00000000
RW
7FB3
BPADDRL
Breakpoint Address L
A7
A6
A5
A4
A3
A2
A1
A0
00000000
RW
EP0CS
OUTBSY
INBSY
HSNAK
7FB5
IN0BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FB6
IN1CS
in1bsy
in1stl
7FB7
IN1BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FB8
IN2CS
in2bsy
in2stl
7FB9
IN2BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FBA
IN3CS
in3bsy
in3stl
7FBB
IN3BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FBC
IN4CS
in4bsy
in4stl
7FBD
IN4BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FBE
IN5CS
in5bsy
in5stl
7FBF
IN5BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
RW
00000000 rrrrrrbb
xxxxxxxx
RW
00000000 rrrrrrbb
xxxxxxxx
RW
00000000 rrrrrrbb
xxxxxxxx
RW
00000000 rrrrrrbb
xxxxxxxx
RW
00000000 rrrrrrbb
xxxxxxxx
RW
Read/write latency note: These registers need the equivalent of 2 instruction clock cycles of time between performing the following instructions back-to-back: (1) write-write (2) write-read.
RegSum - 6
EZ-USB FX
Addr
Name
Description
7FC0
IN6CS
7FC1
7FC2
7FC3
Default
Access
D7
D6
D5
D4
D3
D2
D1
D0
in6bsy
in6stl
IN6BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
IN7CS
in7bsy
in7stl
IN7BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
xxxxxxxx
RW
7FC4
Notes
00000000 rrrrrrbb
xxxxxxxx
RW
00000000 rrrrrrbb
(reserved)
7FC5
OUT0BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FC6
OUT1CS
out1bsy
out1stl
7FC7
OUT1BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FC8
OUT2CS
out2bsy
out2stl
7FC9
OUT2BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FCA
OUT3CS
out3bsy
out3stl
7FCB
OUT3BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FCC
OUT4CS
out4bsy
out4stl
7FCD
OU4TBC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FCE
OUT5CS
out5bsy
out5stl
7FCF
OUT5BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FD0
OUT6CS
out6bsy
out6stl
7FD1
OUT6BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
7FD2
OUT7CS
out7bsy
out7stl
7FD3
OUT7BC
Byte Count
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
RW
00000010 rrrrrrrb
xxxxxxxx
RW
00000010 rrrrrrrb
xxxxxxxx
RW
00000010 rrrrrrrb
xxxxxxxx
RW
00000010 rrrrrrrb
xxxxxxxx
RW
00000010 rrrrrrrb
xxxxxxxx
RW
00000010 rrrrrrrb
xxxxxxxx
RW
00000010 rrrrrrrb
SUDPTRH
A15
A14
A13
A12
A11
A10
A9
A8
xxxxxxxx
RW
7FD5
SUDPTRL
A7
A6
A5
A4
A3
A2
A1
A0
xxxxxxxx
RW
7FD6
USBCS
WakeSRC
DisCon
DiscOE
ReNum
7FD7
TOGCTL
Toggle Control
IO
EP2
EP1
EP0
7FD8
USBFRAMEL
Frame Number L
FC7
FC6
FC5
FC4
FC3
FC2
FC1
FC0
xxxxxxxx
7FD9
USBFRAMEH
Frame Number H
FC10
FC9
FC8
xxxxxxxx
FA6
FA5
FA4
FA3
FA2
FA1
FA0
xxxxxxxx
ISOsend0
PR6OUT
PR4OUT
PR2OUT
PR6IN
PR4IN
PR2IN
0x000000
RW
IN7VAL
IN6VAL
IN5VAL
IN4VAL
IN3VAL
IN2VAL
IN1VAL
01010111
RW
7FDA
7FDB
(reserved)
FNADDR
7FDC
Function Address
(reserved)
7FDD
USBPAIR
Endpoint Control
7FDE
IN07VAL
7FDF
OUT07VAL
OUT7VAL
OUT6VAL
OUT5VAL
OUT4VAL
OUT3VAL
OUT2VAL
OUT1VAL
01010101
RW
7FE0
INISOVAL
IN15VAL
IN14VAL
IN13VAL
IN12VAL
IN11VAL
IN10VAL
IN9VAL
IN8VAL
00000111
RW
7FE1
OUTISOVAL
OUT9VAL
OUT8VAL
00000111
RW
7FE2
FASTXFR
WMOD1
WMOD0
xxxxxxxx
RW
FBLK
RPOL
RMOD1
RMOD0
WPOL
Read/write latency note: These registers need the equivalent of 2 instruction clock cycles of time between performing the following instructions back-to-back: (1) write-write (2) write-read.
RegSum - 7
EZ-USB FX
Addr
Name
Description
D7
D6
D5
D4
D3
D2
D1
D0
Default
Access
7FE3
AUTOPTRH
Auto-Pointer H
A15
A14
A13
A12
A11
A10
A9
A8
xxxxxxxx
RW
7FE4
AUTOPTRL
Auto-Pointer L
A7
A6
A5
A4
A3
A2
A1
A0
xxxxxxxx
RW
7FE5
AUTODATA
D7
D6
D5
D4
D3
D2
D1
D0
xxxxxxxx
RW
d7
d6
d5
d4
d3
d2
d1
d0
xxxxxxxx
7FE6
Notes
(reserved)
7FE7
(reserved)
Setup Data
7FE8
SETUPDAT
OUT8ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FF1
OUT9ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FF2
OUT10ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FF3
OUT11ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FF4
OUT12ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FF5
OUT13ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FF6
OUT14ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FF7
OUT15ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FF8
IN8ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FF9
IN9ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FFA
IN19ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FFB
IN11ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FFC
IN12ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FFD
IN13ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FFE
IN14ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
7FFF
IN15ADDR
A9
A8
A7
A6
A5
A4
xxxxxxxx
RW
RegSum - 8
EZ-USB FX
20
AINPF
21
BINPF
22
AOUTPF
23
BOUTPF
24
AINEF
25
BINEF
26
AOUTEF
27
BOUTEF
28
AINFF
29
BINFF
2A
AOUTFF
2B
BOUTFF
2C
GPIFDONE
2D
GPIFWF
2E
DMADONE
IBN
RegSum - 9
RegSum - 10