Initial check in

This commit is contained in:
2026-01-03 19:05:48 +01:00
commit 1254878a31
253 changed files with 30484 additions and 0 deletions
+413
View File
@@ -0,0 +1,413 @@
#ifndef FX2_H
#define FX2_H
// ----------------------------------------------------------------------------
// Constants
// ----------------------------------------------------------------------------
#define TRUE 1
#define FALSE 0
#define true 1
#define false 0
typedef unsigned char bool;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
#define DSCR_DEVICE 1 // Descriptor type: Device
#define DSCR_CONFIG 2 // Descriptor type: Configuration
#define DSCR_STRING 3 // Descriptor type: String
#define DSCR_INTRFC 4 // Descriptor type: Interface
#define DSCR_ENDPNT 5 // Descriptor type: Endpoint
#define DSCR_DEVQUAL 6 // Descriptor type: Device Qualifier
#define DSCR_OTHERSPEED 7 // Descriptor type: Other Speed Configuration
#define bmBIT0 0x01
#define bmBIT1 0x02
#define bmBIT2 0x04
#define bmBIT3 0x08
#define bmBIT4 0x10
#define bmBIT5 0x20
#define bmBIT6 0x40
#define bmBIT7 0x80
#define bmBUSPWR bmBIT7
#define bmSELFPWR bmBIT6
#define bmRWU bmBIT5
#define bmEPOUT bmBIT7
#define bmEPIN 0
#define EP_VALID 0x80
#define EP_INVALID 0x00
#define EP_IN 0x40
#define EP_OUT 0x00
#define EP_INT 0x30
#define EP_BULK 0x20
#define EP_ISO 0x10
#define EP_1024 0x08
#define EP_512 0x00
#define EP_64 0x00
#define EP_3x 0x03
#define EP_2x 0x02
#define EP_4x 0x00
#define IRQ_EP0IN bmBIT0
#define IRQ_EP0OUT bmBIT1
#define IRQ_EP1IN bmBIT2
#define IRQ_EP1OUT bmBIT3
#define IRQ_EP2 bmBIT4
#define IRQ_EP4 bmBIT5
#define IRQ_EP6 bmBIT6
#define IRQ_EP8 bmBIT7
#define SUD_SIZE 8 // Setup data size
#define VECT_INT0 0
#define VECT_TMR0 1
#define VECT_INT1 2
#define VECT_TMR1 3
#define VECT_COM0 4
#define VECT_TMR2 5
#define VECT_WKUP 6
#define VECT_COM1 7
#define VECT_USB 8
#define VECT_I2C 9
#define VECT_INT4 10
#define VECT_INT5 11
#define VECT_INT6 12
// ----------------------------------------------------------------------------
// USB interrupt INT2IVEC values
// ----------------------------------------------------------------------------
#define INT2_SUDAV 0x00
#define INT2_SOF 0x04
#define INT2_SUTOK 0x08
#define INT2_SUSPEND 0x0C
#define INT2_RESET 0x10
#define INT2_HISPEED 0x14
#define INT2_EP0ACK 0x18
#define INT2_EP0IN 0x20
#define INT2_EP0OUT 0x24
#define INT2_EP1IN 0x28
#define INT2_EP1OUT 0x2C
#define INT2_EP2 0x30
#define INT2_EP4 0x34
#define INT2_EP6 0x38
#define INT2_EP8 0x3C
#define INT2_IBN 0x40
#define INT2_EP0PING 0x48
#define INT2_EP1PING 0x4C
#define INT2_EP2PING 0x50
#define INT2_EP4PING 0x54
#define INT2_EP6PING 0x58
#define INT2_EP8PING 0x5C
#define INT2_ERRLIMIT 0x60
#define INT2_EP2ISOERR 0x70
#define INT2_EP4ISOERR 0x74
#define INT2_EP6ISOERR 0x78
#define INT2_EP8ISOERR 0x7C
// ----------------------------------------------------------------------------
// GPIF/FIFO interrupt INT4IVEC values
// ----------------------------------------------------------------------------
#define INT4_EP2PF 0x80
#define INT4_EP4PF 0x84
#define INT4_EP6PF 0x88
#define INT4_EP8PF 0x8C
#define INT4_EP2EF 0x90
#define INT4_EP4EF 0x94
#define INT4_EP6EF 0x98
#define INT4_EP8EF 0x9C
#define INT4_EP2FF 0xA0
#define INT4_EP4FF 0xA4
#define INT4_EP6FF 0xA8
#define INT4_EP8FF 0xAC
#define INT4_GPIF_DONE 0xB0
#define INT4_GPIF_WF 0xB4
// ----------------------------------------------------------------------------
// HID constants
// ----------------------------------------------------------------------------
#define SETUP_MASK 0x60 // Used to mask off request type
#define SETUP_REQ_STANDARD 0x00 // Standard request
#define SETUP_REQ_CLASS 0x20 // Class request
#define SETUP_REQ_VENDOR 0x40 // Vendor request
#define SETUP_REQ_RESERVED 0x60 // Reserved or illegal request
// ----------------------------------------------------------------------------
// Setup commands
// ----------------------------------------------------------------------------
#define SC_GET_STATUS 0x00
#define SC_CLEAR_FEATURE 0x01
#define SC_RESERVED 0x02
#define SC_SET_FEATURE 0x03
#define SC_SET_ADDRESS 0x05
#define SC_GET_DESCRIPTOR 0x06
#define SC_SET_DESCRIPTOR 0x07
#define SC_GET_CONFIGURATION 0x08
#define SC_SET_CONFIGURATION 0x09
#define SC_GET_INTERFACE 0x0a
#define SC_SET_INTERFACE 0x0b
#define SC_SYNC_FRAME 0x0c
#define SC_ANCHOR_LOAD 0xa0
#define GD_DEVICE 0x01
#define GD_CONFIGURATION 0x02
#define GD_STRING 0x03
#define GD_INTERFACE 0x04
#define GD_ENDPOINT 0x05
#define GD_DEVICE_QUALIFIER 0x06
#define GD_OTHER_SPEED_CONFIG 0x07
#define GD_INTERFACE_POWER 0x08
#define GD_HID 0x21
#define GD_REPORT 0x22
#define GS_DEVICE 0x80 // Get Status: Device
#define GS_INTERFACE 0x81 // Get Status: Interface
#define GS_ENDPOINT 0x82 // Get Status: Endpoint
#define FT_DEVICE 0x00 // Feature: Device
#define FT_ENDPOINT 0x02 // Feature: Endpoint
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// Data types
//
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ----------------------------------------------------------------------------
// Descriptor header
// ----------------------------------------------------------------------------
typedef struct
{
BYTE length;
BYTE type;
} DSCR;
// ----------------------------------------------------------------------------
// Device descriptor [type=1]
// ----------------------------------------------------------------------------
typedef struct
{
BYTE length; // descriptor length ( = sizeof(DEVICE_DSCR) )
BYTE type; // descriptor type ( Device = 1)
BYTE spec_ver_minor; // specification version (BCD) minor
BYTE spec_ver_major; // specification version (BCD) major
BYTE dev_class; // device class
BYTE dev_subclass; // device subclass
BYTE dev_protocol; // device protocol
BYTE max_packet; // maximum packet size
WORD id_vendor; // vendor ID
WORD id_product; // product ID
WORD id_version; // product version ID
BYTE str_manufacturer; // manufacturer string index
BYTE str_product; // product string index
BYTE str_serial; // serial number string index
BYTE configs; // number of configurations
} DEVICE_DSCR;
// ----------------------------------------------------------------------------
// Device qualifier descriptor [type=6]
// ----------------------------------------------------------------------------
typedef struct
{
BYTE length; // descriptor length ( = sizeof(DEVICEQUAL_DSCR) )
BYTE type; // descriptor type ( Device Qualifier = 6)
BYTE spec_ver_minor; // specification version (BCD) minor
BYTE spec_ver_major; // specification version (BCD) major
BYTE dev_class; // device class
BYTE dev_subclass; // device subclass
BYTE dev_protocol; // device protocol
BYTE max_packet; // maximum packet size
BYTE configs; // number of configurations
BYTE reserved;
} DEVICEQUAL_DSCR;
// ----------------------------------------------------------------------------
// Configuration descriptor [type=2]
// ----------------------------------------------------------------------------
typedef struct
{
BYTE length; // descriptor length ( = sizeof(CONFIG_DSCR) )
BYTE type; // descriptor type ( Configuration = 2)
WORD config_length; // configuration + endpoints length
BYTE interfaces; // number of interfaces
BYTE index; // configuration number
BYTE str_config; // configuration string index
BYTE attrib; // attributes (buspwr,selfpwr,rwu)
BYTE power; // power requirement (div 2 mA)
} CONFIG_DSCR;
// ----------------------------------------------------------------------------
// Interface descriptor [type=4]
// ----------------------------------------------------------------------------
typedef struct
{
BYTE length; // descriptor length ( = sizeof(INTERFACE_DSCR) )
BYTE type; // descriptor type ( Interface = 4)
BYTE index; // zero-based index of this interface
BYTE alt_setting; // alternate setting
BYTE ep_count; // number of endpoints
BYTE if_class; // interface class
BYTE if_subclass; // interface subclass
BYTE if_protocol; // interface protocol
BYTE str_interface; // interface string index
} INTERFACE_DSCR;
// ----------------------------------------------------------------------------
// Endpoint descriptor [type=5]
// ----------------------------------------------------------------------------
typedef struct
{
BYTE length; // descriptor length ( = sizeof(ENDPOINT_DSCR) )
BYTE type; // descriptor type ( Endpoint = 5)
BYTE ep_address; // endpoint address
BYTE ep_type; // endpoint type
BYTE mp_low; // maximum packet size (LOW)
BYTE mp_high; // maximum packet size (HIGH)
BYTE interval; // interrupt polling interval
} ENDPOINT_DSCR;
// ----------------------------------------------------------------------------
// String descriptor [type=3]
// ----------------------------------------------------------------------------
typedef struct
{
BYTE length; // descriptor length ( = sizeof(STRING_DSCR) )
BYTE type; // descriptor type ( String = 3)
} STRING_DSCR;
// ----------------------------------------------------------------------------
// Setup Data Valid structure
// ----------------------------------------------------------------------------
typedef struct SUDAV
{
BYTE RequestType;
BYTE Request;
union
{
WORD Word;
struct
{
BYTE Hi;
BYTE Lo;
} Byte;
} Value;
union
{
WORD Word;
struct
{
BYTE Hi;
BYTE Lo;
} Byte;
} Index;
} SUDAV;
typedef SUDAV xdata* PSUDAV;
// ----------------------------------------------------------------------------
// Macros
// ----------------------------------------------------------------------------
#define min(a,b) (((a)<(b))?(a):(b))
#define max(a,b) (((a)>(b))?(a):(b))
#define MSB(word) (BYTE)(((WORD)(word) >> 8) & 0xff)
#define LSB(word) (BYTE)(((WORD)(word) >> 0) & 0xff)
#define SWAP(word) ((BYTE*)&word)[0] ^= ((BYTE*)&word)[1]; \
((BYTE*)&word)[1] ^= ((BYTE*)&word)[0]; \
((BYTE*)&word)[0] ^= ((BYTE*)&word)[1]
#define I2C_IRQ_ENABLE() (EI2C = 1)
#define I2C_IRQ_DISABLE() (EI2C = 0)
#define I2C_IRQ_CLEAR() (EXIF &= ~0x20)
#define I2C_IRQ_FIRE() (EXIF |= 0x20)
#define USB_IRQ_ENABLE() EUSB = 1
#define USB_IRQ_DISABLE() EUSB = 0
#define USB_IRQ_CLEAR() EXIF &= ~0x10
#define USB_IRQ_CLEAR_EP0IN() EPIRQ = IRQ_EP0IN
#define USB_IRQ_CLEAR_EP0OUT() EPIRQ = IRQ_EP0OUT
#define USB_IRQ_CLEAR_EP1IN() EPIRQ = IRQ_EP1IN
#define USB_IRQ_CLEAR_EP1OUT() EPIRQ = IRQ_EP1OUT
#define USB_IRQ_CLEAR_EP2() EPIRQ = IRQ_EP2
#define USB_IRQ_CLEAR_EP4() EPIRQ = IRQ_EP4
#define USB_IRQ_CLEAR_EP6() EPIRQ = IRQ_EP6
#define USB_IRQ_CLEAR_EP8() EPIRQ = IRQ_EP8
#define FX2_TOG_CLEAR( a) TOGCTL = a & 0x1F; TOGCTL = (a | 0x20) & 0x3F
#define RSM_IRQ_ENABLE() (EICON |= 0x20)
#define RSM_IRQ_DISABLE() (EICON &= ~0x20)
#define RSM_IRQ_CLEAR() (EICON &= ~0x10)
#define FX2_STALL_EP0() EP0CS |= bmEPSTALL
#define FX2_STALL_EP1IN() EP1INCS |= bmEPSTALL
#define FX2_STALL_EP1OUT() EP1OUTCS |= bmEPSTALL
#define FX2_STALL_EP2() EP2CS |= bmEPSTALL
#define FX2_STALL_EP4() EP4CS |= bmEPSTALL
#define FX2_STALL_EP6() EP6CS |= bmEPSTALL
#define FX2_STALL_EP8() EP8CS |= bmEPSTALL
extern const DEVICE_DSCR code DscrDevice;
extern const DEVICEQUAL_DSCR code DscrDeviceQual;
extern const CONFIG_DSCR code DscrHsConfig;
extern const CONFIG_DSCR code DscrFsConfig;
extern const STRING_DSCR code DscrString;
extern void FX2_Disconnect(bool renum);
extern void FX2_Delay(WORD ms);
extern bool FX2_Init();
extern void FX2_Suspend();
extern void FX2_Resume();
#endif
+14
View File
@@ -0,0 +1,14 @@
#ifndef FX2_EEPROM_H
#define FX2_EEPROM_H
#include <fx2.h>
extern BYTE FX2_EEPROM_Read( WORD page, BYTE offset, BYTE length, BYTE xdata *dat);
extern BYTE FX2_EEPROM_Write( WORD page, BYTE offset, BYTE length, BYTE xdata *dat);
extern BYTE FX2_EEPROM_ReadPage( WORD page, BYTE length, BYTE xdata *dat);
extern BYTE FX2_EEPROM_WritePage( WORD page, BYTE length, BYTE xdata *dat);
extern BYTE FX2_EEPROM_ReadPage0( BYTE addr, BYTE length, BYTE xdata *dat);
extern BYTE FX2_EEPROM_WritePage0( BYTE addr, BYTE length, BYTE xdata *dat);
#endif
+19
View File
@@ -0,0 +1,19 @@
#ifndef FX2_GLOBALS_H
#define FX2_GLOBALS_H
#include <fx2.h>
extern xdata bool Sleep;
extern xdata bool GotSUD;
extern xdata bool Rwuen;
extern xdata bool SelfPower;
extern bool (*fx2_ep0_hook)();
extern bool (*fx2_ep1_hook)();
extern bool (*fx2_ep2_hook)();
extern bool (*fx2_ep4_hook)();
extern bool (*fx2_ep6_hook)();
extern bool (*fx2_ep8_hook)();
#endif
+7
View File
@@ -0,0 +1,7 @@
#ifndef FX2_GPIF_H
#define FX2_GPIF_H
extern void fx2_gpif_init();
extern void fx2_gpif_flowstate( int sel);
#endif
+68
View File
@@ -0,0 +1,68 @@
#ifndef FX2_IIC_H
#define FX2_IIC_H
#include <fx2.h>
// I2C error codes
// -----------------------------------------------------------------------------
#define I2C_OK 0x00
#define I2C_ERROR 0x80
#define I2C_ABORT 0xFF
#define SMB_ERROR 0xC0
// I2C state machine states
// -----------------------------------------------------------------------------
#define I2C_IDLE 0x00
#define I2C_SENDING 0x01
#define I2C_RECEIVING 0x02
#define I2C_PRIME 0x03
#define I2C_BERROR 0x04
#define I2C_NACK 0x05
#define I2C_STOP 0x06
#define I2C_WAITSTOP 0x07
// I2C state machine states for read operation with repeated start condition
// -----------------------------------------------------------------------------
#define I2C_SUBADDR_HI 0x10 // sending HI(subaddr)
#define I2C_SUBADDR_LO 0x11 // sending LO(subaddr)
#define I2C_RESTART 0x12 //
// SMBus state machine states
// -----------------------------------------------------------------------------
#define SMB_SENDING 0x40
#define SMB_RECEIVING 0x41
#define SMB_PRIME 0x43
#define SMB_BERROR 0x44
#define SMB_NACK 0x45
#define SMB_STOP 0x46
#define SMB_WAITSTOP 0x47
#define SMB_PEC 0x48
#define SMB_CMD_READWORD 0x50
#define SMB_READWORD 0x51
extern void fx2_i2c_init();
extern BYTE fx2_i2c_wait( BYTE addr);
extern BYTE fx2_i2c_read( BYTE addr,
BYTE length,
BYTE xdata *dat);
extern BYTE fx2_i2c_write( BYTE addr,
BYTE length,
BYTE xdata *dat);
extern BYTE fx2_i2c_read_rsw( BYTE addr,
WORD subaddr,
BYTE length,
BYTE xdata *dat);
extern BYTE fx2_sm_readword( BYTE addr,
BYTE command,
BYTE xdata *dat);
#endif
+518
View File
@@ -0,0 +1,518 @@
#ifndef FX2_REGS_H
#define FX2_REGS_H
#ifdef ALLOCATE_EXTERN
#define XBYTE( name, addr) xdata volatile unsigned char name _at_ addr
#else
#define XBYTE( name, addr) extern xdata volatile unsigned char name
#endif
// ============================================================================
// General configuration
// ============================================================================
XBYTE( CPUCS , 0xE600); // Control & Status
XBYTE( IFCONFIG , 0xE601); // Interface Configuration
XBYTE( PINFLAGSAB , 0xE602); // FIFO FLAGA and FLAGB Assignments
XBYTE( PINFLAGSCD , 0xE603); // FIFO FLAGC and FLAGD Assignments
XBYTE( FIFORESET , 0xE604); // Restore FIFOS to default state
XBYTE( BREAKPT , 0xE605); // Breakpoint
XBYTE( BPADDRH , 0xE606); // Breakpoint Address H
XBYTE( BPADDRL , 0xE607); // Breakpoint Address L
XBYTE( UART230 , 0xE608); // 230 Kbaud clock for T0,T1,T2
XBYTE( FIFOPINPOLAR , 0xE609); // FIFO polarities
XBYTE( REVID , 0xE60A); // Chip Revision
XBYTE( REVCTL , 0xE60B); // Chip Revision Control
// ============================================================================
// Endpoint configuration registers
// ============================================================================
XBYTE( EP1OUTCFG , 0xE610); // Endpoint 1-OUT Configuration
XBYTE( EP1INCFG , 0xE611); // Endpoint 1-IN Configuration
XBYTE( EP2CFG , 0xE612); // Endpoint 2 Configuration
XBYTE( EP4CFG , 0xE613); // Endpoint 4 Configuration
XBYTE( EP6CFG , 0xE614); // Endpoint 6 Configuration
XBYTE( EP8CFG , 0xE615); // Endpoint 8 Configuration
XBYTE( EP2FIFOCFG , 0xE618); // Endpoint 2 FIFO configuration
XBYTE( EP4FIFOCFG , 0xE619); // Endpoint 4 FIFO configuration
XBYTE( EP6FIFOCFG , 0xE61A); // Endpoint 6 FIFO configuration
XBYTE( EP8FIFOCFG , 0xE61B); // Endpoint 8 FIFO configuration
XBYTE( EP2AUTOINLENH , 0xE620); // Endpoint 2 Packet Length H (IN only)
XBYTE( EP2AUTOINLENL , 0xE621); // Endpoint 2 Packet Length L (IN only)
XBYTE( EP4AUTOINLENH , 0xE622); // Endpoint 4 Packet Length H (IN only)
XBYTE( EP4AUTOINLENL , 0xE623); // Endpoint 4 Packet Length L (IN only)
XBYTE( EP6AUTOINLENH , 0xE624); // Endpoint 6 Packet Length H (IN only)
XBYTE( EP6AUTOINLENL , 0xE625); // Endpoint 6 Packet Length L (IN only)
XBYTE( EP8AUTOINLENH , 0xE626); // Endpoint 8 Packet Length H (IN only)
XBYTE( EP8AUTOINLENL , 0xE627); // Endpoint 8 Packet Length L (IN only)
XBYTE( EP2FIFOPFH , 0xE630); // EP2 Programmable Flag trigger H
XBYTE( EP2FIFOPFL , 0xE631); // EP2 Programmable Flag trigger L
XBYTE( EP4FIFOPFH , 0xE632); // EP4 Programmable Flag trigger H
XBYTE( EP4FIFOPFL , 0xE633); // EP4 Programmable Flag trigger L
XBYTE( EP6FIFOPFH , 0xE634); // EP6 Programmable Flag trigger H
XBYTE( EP6FIFOPFL , 0xE635); // EP6 Programmable Flag trigger L
XBYTE( EP8FIFOPFH , 0xE636); // EP8 Programmable Flag trigger H
XBYTE( EP8FIFOPFL , 0xE637); // EP8 Programmable Flag trigger L
XBYTE( EP2ISOINPKTS , 0xE640); // EP2 (if ISO) IN Packets per frame (1-3)
XBYTE( EP4ISOINPKTS , 0xE641); // EP4 (if ISO) IN Packets per frame (1-3)
XBYTE( EP6ISOINPKTS , 0xE642); // EP6 (if ISO) IN Packets per frame (1-3)
XBYTE( EP8ISOINPKTS , 0xE643); // EP8 (if ISO) IN Packets per frame (1-3)
XBYTE( INPKTEND , 0xE648); // Force IN Packet End
XBYTE( OUTPKTEND , 0xE649); // Force OUT Packet End
// ============================================================================
// Interrupts
// ============================================================================
XBYTE( EP2FIFOIE , 0xE650); // Endpoint 2 Flag Interrupt Enable
XBYTE( EP2FIFOIRQ , 0xE651); // Endpoint 2 Flag Interrupt Request
XBYTE( EP4FIFOIE , 0xE652); // Endpoint 4 Flag Interrupt Enable
XBYTE( EP4FIFOIRQ , 0xE653); // Endpoint 4 Flag Interrupt Request
XBYTE( EP6FIFOIE , 0xE654); // Endpoint 6 Flag Interrupt Enable
XBYTE( EP6FIFOIRQ , 0xE655); // Endpoint 6 Flag Interrupt Request
XBYTE( EP8FIFOIE , 0xE656); // Endpoint 8 Flag Interrupt Enable
XBYTE( EP8FIFOIRQ , 0xE657); // Endpoint 8 Flag Interrupt Request
XBYTE( IBNIE , 0xE658); // IN-BULK-NAK Interrupt Enable
XBYTE( IBNIRQ , 0xE659); // IN-BULK-NAK interrupt Request
XBYTE( NAKIE , 0xE65A); // Endpoint Ping NAK interrupt Enable
XBYTE( NAKIRQ , 0xE65B); // Endpoint Ping NAK interrupt Request
XBYTE( USBIE , 0xE65C); // USB Int Enables
XBYTE( USBIRQ , 0xE65D); // USB Interrupt Requests
XBYTE( EPIE , 0xE65E); // Endpoint Interrupt Enables
XBYTE( EPIRQ , 0xE65F); // Endpoint Interrupt Requests
XBYTE( GPIFIE , 0xE660); // GPIF Interrupt Enable
XBYTE( GPIFIRQ , 0xE661); // GPIF Interrupt Request
XBYTE( USBERRIE , 0xE662); // USB Error Interrupt Enables
XBYTE( USBERRIRQ , 0xE663); // USB Error Interrupt Requests
XBYTE( ERRCNTLIM , 0xE664); // USB Error counter and limit
XBYTE( CLRERRCNT , 0xE665); // Clear Error Counter EC[3..0]
XBYTE( INT2IVEC , 0xE666); // Interupt 2 (USB) Autovector
XBYTE( INT4IVEC , 0xE667); // Interupt 4 (FIFOS & GPIF) Autovector
XBYTE( INTSETUP , 0xE668); // Interrupt 2&4 Setup
// ============================================================================
// Input/Output
// ============================================================================
XBYTE( PORTACFG , 0xE670); // I/O Port A Alternate Configuration
XBYTE( PORTCCFG , 0xE671); // I/O Port C Alternate Configuration
XBYTE( PORTECFG , 0xE672); // I/O Port E Alternate Configuration
XBYTE( I2CS , 0xE678); // I2C Control & Status
XBYTE( I2DAT , 0xE679); // I2C Data
XBYTE( I2CTL , 0xE67A); // I2C Control
XBYTE( XAUTODAT1 , 0xE67B); // Autopointer1 MOVX access
XBYTE( XAUTODAT2 , 0xE67C); // Autopointer2 MOVX access
// ============================================================================
// USB Control
// ============================================================================
XBYTE( USBCS , 0xE680); // USB Control & Status
XBYTE( SUSPEND , 0xE681); // Put chip into suspend
XBYTE( WAKEUPCS , 0xE682); // Wakeup source and polarity
XBYTE( TOGCTL , 0xE683); // Toggle Control
XBYTE( USBFRAMEH , 0xE684); // USB Frame count H
XBYTE( USBFRAMEL , 0xE685); // USB Frame count L
XBYTE( MICROFRAME , 0xE686); // Microframe count, 0-7
XBYTE( FNADDR , 0xE687); // USB Function address
// ============================================================================
// Endpoints
// ============================================================================
XBYTE( EP0BCH , 0xE68A); // Endpoint 0 Byte Count H
XBYTE( EP0BCL , 0xE68B); // Endpoint 0 Byte Count L
XBYTE( EP1OUTBC , 0xE68D); // Endpoint 1 OUT Byte Count
XBYTE( EP1INBC , 0xE68F); // Endpoint 1 IN Byte Count
XBYTE( EP2BCH , 0xE690); // Endpoint 2 Byte Count H
XBYTE( EP2BCL , 0xE691); // Endpoint 2 Byte Count L
XBYTE( EP4BCH , 0xE694); // Endpoint 4 Byte Count H
XBYTE( EP4BCL , 0xE695); // Endpoint 4 Byte Count L
XBYTE( EP6BCH , 0xE698); // Endpoint 6 Byte Count H
XBYTE( EP6BCL , 0xE699); // Endpoint 6 Byte Count L
XBYTE( EP8BCH , 0xE69C); // Endpoint 8 Byte Count H
XBYTE( EP8BCL , 0xE69D); // Endpoint 8 Byte Count L
XBYTE( EP0CS , 0xE6A0); // Endpoint Control and Status
XBYTE( EP1OUTCS , 0xE6A1); // Endpoint 1 OUT Control and Status
XBYTE( EP1INCS , 0xE6A2); // Endpoint 1 IN Control and Status
XBYTE( EP2CS , 0xE6A3); // Endpoint 2 Control and Status
XBYTE( EP4CS , 0xE6A4); // Endpoint 4 Control and Status
XBYTE( EP6CS , 0xE6A5); // Endpoint 6 Control and Status
XBYTE( EP8CS , 0xE6A6); // Endpoint 8 Control and Status
XBYTE( EP2FIFOFLGS , 0xE6A7); // Endpoint 2 Flags
XBYTE( EP4FIFOFLGS , 0xE6A8); // Endpoint 4 Flags
XBYTE( EP6FIFOFLGS , 0xE6A9); // Endpoint 6 Flags
XBYTE( EP8FIFOFLGS , 0xE6AA); // Endpoint 8 Flags
XBYTE( EP2FIFOBCH , 0xE6AB); // EP2 FIFO total byte count H
XBYTE( EP2FIFOBCL , 0xE6AC); // EP2 FIFO total byte count L
XBYTE( EP4FIFOBCH , 0xE6AD); // EP4 FIFO total byte count H
XBYTE( EP4FIFOBCL , 0xE6AE); // EP4 FIFO total byte count L
XBYTE( EP6FIFOBCH , 0xE6AF); // EP6 FIFO total byte count H
XBYTE( EP6FIFOBCL , 0xE6B0); // EP6 FIFO total byte count L
XBYTE( EP8FIFOBCH , 0xE6B1); // EP8 FIFO total byte count H
XBYTE( EP8FIFOBCL , 0xE6B2); // EP8 FIFO total byte count L
XBYTE( SUDPTRH , 0xE6B3); // Setup Data Pointer high address byte
XBYTE( SUDPTRL , 0xE6B4); // Setup Data Pointer low address byte
XBYTE( SUDPTRCTL , 0xE6B5); // Setup Data Pointer Auto Mode
XBYTE( SETUPDAT[8] , 0xE6B8); // 8 bytes of SETUP data
// ============================================================================
// GPIF
// ============================================================================
XBYTE( GPIFWFSELECT , 0xE6C0); // Waveform Selector
XBYTE( GPIFIDLECS , 0xE6C1); // GPIF Done, GPIF IDLE drive mode
XBYTE( GPIFIDLECTL , 0xE6C2); // Inactive Bus, CTL states
XBYTE( GPIFCTLCFG , 0xE6C3); // CTL OUT pin drive
XBYTE( GPIFADRH , 0xE6C4); // GPIF Address H
XBYTE( GPIFADRL , 0xE6C5); // GPIF Address L
XBYTE( GPIFTCB3 , 0xE6CE); // GPIF Transaction Count Byte 3
XBYTE( GPIFTCB2 , 0xE6CF); // GPIF Transaction Count Byte 2
XBYTE( GPIFTCB1 , 0xE6D0); // GPIF Transaction Count Byte 1
XBYTE( GPIFTCB0 , 0xE6D1); // GPIF Transaction Count Byte 0
#define EP2GPIFTCH GPIFTCB1 // these are here for backwards compatibility
#define EP2GPIFTCL GPIFTCB0 //
#define EP4GPIFTCH GPIFTCB1 // these are here for backwards compatibility
#define EP4GPIFTCL GPIFTCB0 //
#define EP6GPIFTCH GPIFTCB1 // these are here for backwards compatibility
#define EP6GPIFTCL GPIFTCB0 //
#define EP8GPIFTCH GPIFTCB1 // these are here for backwards compatibility
#define EP8GPIFTCL GPIFTCB0 //
XBYTE( EP2GPIFFLGSEL , 0xE6D2); // EP2 GPIF Flag select
XBYTE( EP2GPIFPFSTOP , 0xE6D3); // Stop GPIF EP2 transaction on prog. flag
XBYTE( EP2GPIFTRIG , 0xE6D4); // EP2 FIFO Trigger
XBYTE( EP4GPIFFLGSEL , 0xE6DA); // EP4 GPIF Flag select
XBYTE( EP4GPIFPFSTOP , 0xE6DB); // Stop GPIF EP4 transaction on prog. flag
XBYTE( EP4GPIFTRIG , 0xE6DC); // EP4 FIFO Trigger
XBYTE( EP6GPIFFLGSEL , 0xE6E2); // EP6 GPIF Flag select
XBYTE( EP6GPIFPFSTOP , 0xE6E3); // Stop GPIF EP6 transaction on prog. flag
XBYTE( EP6GPIFTRIG , 0xE6E4); // EP6 FIFO Trigger
XBYTE( EP8GPIFFLGSEL , 0xE6EA); // EP8 GPIF Flag select
XBYTE( EP8GPIFPFSTOP , 0xE6EB); // Stop GPIF EP8 transaction on prog. flag
XBYTE( EP8GPIFTRIG , 0xE6EC); // EP8 FIFO Trigger
XBYTE( XGPIFSGLDATH , 0xE6F0); // GPIF Data H (16-bit mode only)
XBYTE( XGPIFSGLDATLX , 0xE6F1); // Read/Write GPIF Data L & trigger transac
XBYTE( XGPIFSGLDATLNOX , 0xE6F2); // Read GPIF Data L, no transac trigger
XBYTE( GPIFREADYCFG , 0xE6F3); // Internal RDY,Sync/Async, RDY5CFG
XBYTE( GPIFREADYSTAT , 0xE6F4); // RDY pin states
XBYTE( GPIFABORT , 0xE6F5); // Abort GPIF cycles
// ============================================================================
// UDMA
// ============================================================================
XBYTE( FLOWSTATE , 0xE6C6); // Defines GPIF flow state
XBYTE( FLOWLOGIC , 0xE6C7); // Defines flow/hold decision criteria
XBYTE( FLOWEQ0CTL , 0xE6C8); // CTL states during active flow state
XBYTE( FLOWEQ1CTL , 0xE6C9); // CTL states during hold flow state
XBYTE( FLOWHOLDOFF , 0xE6CA);
XBYTE( FLOWSTB , 0xE6CB); // CTL/RDY Signal to use as master data strobe
XBYTE( FLOWSTBEDGE , 0xE6CC); // Defines active master strobe edge
XBYTE( FLOWSTBHPERIOD , 0xE6CD); // Half Period of output master strobe
XBYTE( GPIFHOLDAMOUNT , 0xE60C); // Data delay shift
XBYTE( UDMACRCH , 0xE67D); // CRC Upper byte
XBYTE( UDMACRCL , 0xE67E); // CRC Lower byte
XBYTE( UDMACRCQUAL , 0xE67F); // UDMA In only, host terminated use only
// ============================================================================
// Endpoint Buffers
// ============================================================================
XBYTE( EP0BUF [64] , 0xE740); // EP0 IN-OUT buffer
XBYTE( EP1OUTBUF [64] , 0xE780); // EP1-OUT buffer
XBYTE( EP1INBUF [64] , 0xE7C0); // EP1-IN buffer
XBYTE( EP2FIFOBUF [1024] , 0xF000); // 512/1024-byte EP2 buffer (IN or OUT)
XBYTE( EP4FIFOBUF [1024] , 0xF400); // 512 byte EP4 buffer (IN or OUT)
XBYTE( EP6FIFOBUF [1024] , 0xF800); // 512/1024-byte EP6 buffer (IN or OUT)
XBYTE( EP8FIFOBUF [1024] , 0xFC00); // 512 byte EP8 buffer (IN or OUT)
// ============================================================================
// Error Correction Code (ECC) Registers (FX2LP/FX1 only)
// ============================================================================
XBYTE( ECCCFG , 0xE628); // ECC Configuration
XBYTE( ECCRESET , 0xE629); // ECC Reset
XBYTE( ECC1B0 , 0xE62A); // ECC1 Byte 0
XBYTE( ECC1B1 , 0xE62B); // ECC1 Byte 1
XBYTE( ECC1B2 , 0xE62C); // ECC1 Byte 2
XBYTE( ECC2B0 , 0xE62D); // ECC2 Byte 0
XBYTE( ECC2B1 , 0xE62E); // ECC2 Byte 1
XBYTE( ECC2B2 , 0xE62F); // ECC2 Byte 2
// ============================================================================
// Feature Registers (FX2LP/FX1 only)
// ============================================================================
XBYTE( GPCR2 , 0xE50D); // Chip Features
// ============================================================================
// Special Function Registers (sfr)
// ============================================================================
#include <fx2_regs_sfr8x.h>
#include <fx2_regs_sfr9x.h>
#include <fx2_regs_sfrAx.h>
#include <fx2_regs_sfrBx.h>
#include <fx2_regs_sfrCx.h>
#include <fx2_regs_sfrDx.h>
#include <fx2_regs_sfrEx.h>
#include <fx2_regs_sfrFx.h>
// ============================================================================
// Bit masks
// ============================================================================
// ----------------------------------------------------------------------------
// CPU Control & Status Register (CPUCS)
// ----------------------------------------------------------------------------
#define bmPRTCSTB bmBIT5
#define bmCLKSPD (bmBIT4 | bmBIT3)
#define bmCLKSPD1 bmBIT4
#define bmCLKSPD0 bmBIT3
#define bmCLKINV bmBIT2
#define bmCLKOE bmBIT1
#define bm8051RES bmBIT0
// ----------------------------------------------------------------------------
// Port A (PORTACFG)
// ----------------------------------------------------------------------------
#define bmFLAGD bmBIT7
#define bmINT1 bmBIT1
#define bmINT0 bmBIT0
// ----------------------------------------------------------------------------
// Port C (PORTCCFG)
// ----------------------------------------------------------------------------
#define bmGPIFA7 bmBIT7
#define bmGPIFA6 bmBIT6
#define bmGPIFA5 bmBIT5
#define bmGPIFA4 bmBIT4
#define bmGPIFA3 bmBIT3
#define bmGPIFA2 bmBIT2
#define bmGPIFA1 bmBIT1
#define bmGPIFA0 bmBIT0
// ----------------------------------------------------------------------------
// Port E (PORTECFG)
// ----------------------------------------------------------------------------
#define bmGPIFA8 bmBIT7
#define bmT2EX bmBIT6
#define bmINT6 bmBIT5
#define bmRXD1OUT bmBIT4
#define bmRXD0OUT bmBIT3
#define bmT2OUT bmBIT2
#define bmT1OUT bmBIT1
#define bmT0OUT bmBIT0
// ----------------------------------------------------------------------------
// I2C Control & Status Register (I2CS)
// ----------------------------------------------------------------------------
#define bmSTART bmBIT7
#define bmSTOP bmBIT6
#define bmLASTRD bmBIT5
#define bmID (bmBIT4 | bmBIT3)
#define bmBERR bmBIT2
#define bmACK bmBIT1
#define bmDONE bmBIT0
// ----------------------------------------------------------------------------
// I2C Control Register (I2CTL)
// ----------------------------------------------------------------------------
#define bmSTOPIE bmBIT1
#define bm400KHZ bmBIT0
// ----------------------------------------------------------------------------
// Interrupt 2 (USB) Autovector Register (INT2IVEC)
// ----------------------------------------------------------------------------
#define bmIV4 bmBIT6
#define bmIV3 bmBIT5
#define bmIV2 bmBIT4
#define bmIV1 bmBIT3
#define bmIV0 bmBIT2
// ----------------------------------------------------------------------------
// USB Interrupt Request & Enable Registers (USBIE/USBIRQ)
// ----------------------------------------------------------------------------
#define bmEP0ACK bmBIT6
#define bmHSGRANT bmBIT5
#define bmURES bmBIT4
#define bmSUSP bmBIT3
#define bmSUTOK bmBIT2
#define bmSOF bmBIT1
#define bmSUDAV bmBIT0
// ----------------------------------------------------------------------------
// USB Interrupt Request & Enable Registers (EPIE/EPIRQ)
// ----------------------------------------------------------------------------
#define bmEP8 bmBIT7
#define bmEP6 bmBIT6
#define bmEP4 bmBIT5
#define bmEP2 bmBIT4
#define bmEP1OUT bmBIT3
#define bmEP1IN bmBIT2
#define bmEP0OUT bmBIT1
#define bmEP0IN bmBIT0
// ----------------------------------------------------------------------------
// GPIF Interrupt Request & Enable Registers (GPIFIE/GPIFIRQ)
// ----------------------------------------------------------------------------
#define bmGPIFWF bmBIT1
#define bmGPIFDONE bmBIT0
// ----------------------------------------------------------------------------
// Breakpoint register (BREAKPT)
// ----------------------------------------------------------------------------
#define bmBREAK bmBIT3
#define bmBPPULSE bmBIT2
#define bmBPEN bmBIT1
// ----------------------------------------------------------------------------
// Interrupt 2 & 4 Setup (INTSETUP)
// ----------------------------------------------------------------------------
#define bmAV2EN bmBIT3
#define INT4IN bmBIT1
#define bmAV4EN bmBIT0
// ----------------------------------------------------------------------------
// USB Control & Status Register (USBCS)
// ----------------------------------------------------------------------------
#define bmHSM bmBIT7
#define bmDISCON bmBIT3
#define bmNOSYNSOF bmBIT2
#define bmRENUM bmBIT1
#define bmSIGRESUME bmBIT0
// ----------------------------------------------------------------------------
// Wakeup Control and Status Register (WAKEUPCS)
// ----------------------------------------------------------------------------
#define bmWU2 bmBIT7
#define bmWU bmBIT6
#define bmWU2POL bmBIT5
#define bmWUPOL bmBIT4
#define bmDPEN bmBIT2
#define bmWU2EN bmBIT1
#define bmWUEN bmBIT0
// ----------------------------------------------------------------------------
// End Point 0 Control & Status Register (EP0CS)
// ----------------------------------------------------------------------------
#define bmHSNAK bmBIT7
// ----------------------------------------------------------------------------
// End Point 0-1 Control & Status Registers (EP0CS/EP1OUTCS/EP1INCS)
// ----------------------------------------------------------------------------
#define bmEPBUSY bmBIT1
#define bmEPSTALL bmBIT0
// ----------------------------------------------------------------------------
// End Point 2-8 Control & Status Registers (EP2CS/EP4CS/EP6CS/EP8CS)
// ----------------------------------------------------------------------------
#define bmNPAK (bmBIT6 | bmBIT5 | bmBIT4)
#define bmEPFULL bmBIT3
#define bmEPEMPTY bmBIT2
/* Endpoint Status (EP2468STAT) SFR bits */
#define bmEP8FULL bmBIT7
#define bmEP8EMPTY bmBIT6
#define bmEP6FULL bmBIT5
#define bmEP6EMPTY bmBIT4
#define bmEP4FULL bmBIT3
#define bmEP4EMPTY bmBIT2
#define bmEP2FULL bmBIT1
#define bmEP2EMPTY bmBIT0
// ----------------------------------------------------------------------------
// SETUP Data Pointer Auto Mode (SUDPTRCTL)
// ----------------------------------------------------------------------------
#define bmSDPAUTO bmBIT0
// ----------------------------------------------------------------------------
// Endpoint Data Toggle Control (TOGCTL)
// ----------------------------------------------------------------------------
#define bmQUERYTOGGLE bmBIT7
#define bmSETTOGGLE bmBIT6
#define bmRESETTOGGLE bmBIT5
#define bmTOGCTLEPMASK bmBIT3 | bmBIT2 | bmBIT1 | bmBIT0
// ----------------------------------------------------------------------------
// IBN (In Bulk Nak) enable and request bits (IBNIE/IBNIRQ)
// ----------------------------------------------------------------------------
#define bmEP8IBN bmBIT5
#define bmEP6IBN bmBIT4
#define bmEP4IBN bmBIT3
#define bmEP2IBN bmBIT2
#define bmEP1IBN bmBIT1
#define bmEP0IBN bmBIT0
// ----------------------------------------------------------------------------
// PING-NAK enable and request bits (NAKIE/NAKIRQ)
// ----------------------------------------------------------------------------
#define bmEP8PING bmBIT7
#define bmEP6PING bmBIT6
#define bmEP4PING bmBIT5
#define bmEP2PING bmBIT4
#define bmEP1PING bmBIT3
#define bmEP0PING bmBIT2
#define bmIBN bmBIT0
// ----------------------------------------------------------------------------
// Interface Configuration bits (IFCONFIG)
// ----------------------------------------------------------------------------
#define bmIFCLKSRC bmBIT7
#define bm3048MHZ bmBIT6
#define bmIFCLKOE bmBIT5
#define bmIFCLKPOL bmBIT4
#define bmASYNC bmBIT3
#define bmGSTATE bmBIT2
#define bmIFCFG1 bmBIT1
#define bmIFCFG0 bmBIT0
#define bmIFCFGMASK (bmIFCFG0 | bmIFCFG1)
#define bmIFGPIF bmIFCFG1
// ----------------------------------------------------------------------------
// EP 2468 FIFO Configuration bits (EP2FIFOCFG,EP4FIFOCFG,EP6FIFOCFG,EP8FIFOCFG)
// ----------------------------------------------------------------------------
#define bmINFM bmBIT6
#define bmOEP bmBIT5
#define bmAUTOOUT bmBIT4
#define bmAUTOIN bmBIT3
#define bmZEROLENIN bmBIT2
#define bmWORDWIDE bmBIT0
// ----------------------------------------------------------------------------
// Chip Revision Control Bits (REVCTL) - used to ebable/disable revision
// specific features.
// ----------------------------------------------------------------------------
#define bmNOAUTOARM bmBIT1
#define bmSKIPCOMMIT bmBIT0
// ----------------------------------------------------------------------------
// FIFO polarity (FIFOPINPOLAR)
// ----------------------------------------------------------------------------
#define bmPKTEND bmBIT5
#define bmSLOE bmBIT4
#define bmSLRD bmBIT3
#define bmSLWR bmBIT2
#define bmEF bmBIT1
#define bmFF bmBIT0
// ----------------------------------------------------------------------------
// FIFO Reset bits (FIFORESET)
// ----------------------------------------------------------------------------
#define bmNAKALL bmBIT7
// ----------------------------------------------------------------------------
// Chip Feature Register (GPCR2)
// ----------------------------------------------------------------------------
#define bmFULLSPEEDONLY bmBIT4
#endif
+106
View File
@@ -0,0 +1,106 @@
// ============================================================================
// FX2LP SFR Registers at 0x80 - 0x8F
// ----------------------------------------------------------------------------
// 0x80 - IOA
// 0x81 - SP
// 0x82 - DPL0
// 0x83 - DPH0
// 0x84 - DPL1
// 0x85 - DPH1
// 0x86 - DPS
// 0x87 - PCON
// 0x88 - TCON
// 0x89 - TMOD
// 0x8A - TL0
// 0x8B - TL1
// 0x8C - TH0
// 0x8D - TH1
// 0x8E - CKCON
// 0x8F - (SFUNC) ????
//
// TODO: check documentation!!!
// ============================================================================
#ifndef FX2REGS_SFR8X_H
#define FX2REGS_SFR8X_H
sfr IOA = 0x80;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr DPL1 = 0x84;
sfr DPH1 = 0x85;
sfr DPS = 0x86;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr CKCON = 0x8E;
sfr SFUNC = 0x8F;
sfr16 DP0 = 0x82;
sfr16 DP1 = 0x84;
// ------------------------------------
// PortA (0x80)
// ------------------------------------
sbit PA0 = 0x80 + 0;
sbit PA1 = 0x80 + 1;
sbit PA2 = 0x80 + 2;
sbit PA3 = 0x80 + 3;
sbit PA4 = 0x80 + 4;
sbit PA5 = 0x80 + 5;
sbit PA6 = 0x80 + 6;
sbit PA7 = 0x80 + 7;
// ------------------------------------
// TCON (0x88)
// ------------------------------------
sbit IT0 = 0x88 +0;
sbit IE0 = 0x88 +1;
sbit IT1 = 0x88 +2;
sbit IE1 = 0x88 +3;
sbit TR0 = 0x88 +4;
sbit TF0 = 0x88 +5;
sbit TR1 = 0x88 +6;
sbit TF1 = 0x88 +7;
// ------------------------------------
// PCON bits (0x87)
// ------------------------------------
#define bmIDLE 0x01
//#define bmSTOP 0x02 // ??
//#define bmGF0 0x04 // ??
//#define bmGF1 0x08 // ??
#define bmSMOD0 0x80
// ------------------------------------
// TMOD bits (0x89)
// ------------------------------------
#define bmM00 0x01
#define bmM10 0x02
#define bmCT0 0x04
#define bmGATE0 0x08
#define bmM01 0x10
#define bmM11 0x20
#define bmCT1 0x40
#define bmGATE1 0x80
// ------------------------------------
// CKCON bits (0x8E)
// ------------------------------------
#define bmMD0 0x01
#define bmMD1 0x02
#define bmMD2 0x04
#define bmT0M 0x08
#define bmT1M 0x10
#define bmT2M 0x20
// ------------------------------------
// SFUNC bits
// ------------------------------------
//sbit WRS = 0x8F +0;
#endif
+67
View File
@@ -0,0 +1,67 @@
// ============================================================================
// FX2LP SFR Registers at 0x90 - 0x9F
// ----------------------------------------------------------------------------
// 0x90 - IOB
// 0x91 - EXIF
// 0x92 - MPAGE
// 0x93 -
// 0x94 -
// 0x95 -
// 0x96 -
// 0x97 -
// 0x98 - SCON0
// 0x99 - SBUF0
// 0x9A - AUTOPTRH1
// 0x9B - AUTOPTRL1
// 0x9C -
// 0x9D - AUTOPTRH2
// 0x9E - AUTOPTRL2
// 0x9F -
// ============================================================================
#ifndef FX2REGS_SFR9X_H
#define FX2REGS_SFR9X_H
sfr IOB = 0x90;
sfr EXIF = 0x91;
sfr MPAGE = 0x92;
sfr SCON0 = 0x98;
sfr SBUF0 = 0x99;
sfr AUTOPTRH1 = 0x9A;
sfr AUTOPTRL1 = 0x9B;
sfr AUTOPTRH2 = 0x9D;
sfr AUTOPTRL2 = 0x9E;
// ------------------------------------
// PortB (0x90)
// ------------------------------------
sbit PB0 = 0x90 +0;
sbit PB1 = 0x90 +1;
sbit PB2 = 0x90 +2;
sbit PB3 = 0x90 +3;
sbit PB4 = 0x90 +4;
sbit PB5 = 0x90 +5;
sbit PB6 = 0x90 +6;
sbit PB7 = 0x90 +7;
// ------------------------------------
// SCON0 (0x98)
// ------------------------------------
sbit RI = 0x98 +0;
sbit TI = 0x98 +1;
sbit RB8 = 0x98 +2;
sbit TB8 = 0x98 +3;
sbit REN = 0x98 +4;
sbit SM2 = 0x98 +5;
sbit SM1 = 0x98 +6;
sbit SM0 = 0x98 +7;
// ------------------------------------
// EXIF (0x91)
// ------------------------------------
#define bmUSBINT 0x10
#define bmI2CINT 0x20
#define bmIE4 0x40
#define bmIE5 0x80
#endif
+102
View File
@@ -0,0 +1,102 @@
// ============================================================================
// FX2LP SFR Registers at 0xA0 - 0xAF
// ----------------------------------------------------------------------------
// 0xA0 - IOC
// 0xA1 - INT2CLR
// 0xA2 - INT4CLR
// 0xA3 -
// 0xA4 -
// 0xA5 -
// 0xA6 -
// 0xA7 -
// 0xA8 - IE
// 0xA9 -
// 0xAA - EP2468STAT
// 0xAB - EP24FIFOFLGS
// 0xAC - EP68FIFOFLGS
// 0xAD -
// 0xAE -
// 0xAF - AUTOPTRSETUP
// ============================================================================
#ifndef FX2REGS_SFRAX_H
#define FX2REGS_SFRAX_H
sfr IOC = 0xA0;
sfr INT2CLR = 0xA1;
sfr INT4CLR = 0xA2;
sfr IE = 0xA8;
sfr EP2468STAT = 0xAA;
sfr EP24FIFOFLGS= 0xAB;
sfr EP68FIFOFLGS= 0xAC;
sfr AUTOPTRSETUP= 0xAF;
// ------------------------------------
// IOC (0xA0)
// ------------------------------------
sbit PC0 = 0xA0 +0;
sbit PC1 = 0xA0 +1;
sbit PC2 = 0xA0 +2;
sbit PC3 = 0xA0 +3;
sbit PC4 = 0xA0 +4;
sbit PC5 = 0xA0 +5;
sbit PC6 = 0xA0 +6;
sbit PC7 = 0xA0 +7;
// ------------------------------------
// IE (0xA8)
// ------------------------------------
sbit EX0 = 0xA8 +0;
sbit ET0 = 0xA8 +1;
sbit EX1 = 0xA8 +2;
sbit ET1 = 0xA8 +3;
sbit ES0 = 0xA8 +4;
sbit ET2 = 0xA8 +5;
sbit ES1 = 0xA8 +6;
sbit EA = 0xA8 +7;
// ------------------------------------
// EP2468STAT (0xAA)
// ------------------------------------
#define bmEP2E 0x01
#define bmEP2F 0x02
#define bmEP4E 0x04
#define bmEP4F 0x08
#define bmEP6E 0x10
#define bmEP6F 0x20
#define bmEP8E 0x40
#define bmEP8F 0x80
// ------------------------------------
// EP24FIFOFLGS (0XAB)
// ------------------------------------
#define bmEP2FF 0x01
#define bmEP2EF 0x02
#define bmEP2PF 0x04
#define bmEP4FF 0x10
#define bmEP4EF 0x20
#define bmEP4PF 0x40
// ------------------------------------
// EP68FIFOFLGS (0XAC)
// ------------------------------------
#define bmEP6FF 0x01
#define bmEP6EF 0x02
#define bmEP6PF 0x04
#define bmEP8FF 0x10
#define bmEP8EF 0x20
#define bmEP8PF 0x40
// ------------------------------------
// AUTOPTRSETUP (0xAF)
// ------------------------------------
#define bmAPTREN 0x01
#define bmAPTR1INC 0x02
#define bmAPTR2INC 0x04
#endif
+64
View File
@@ -0,0 +1,64 @@
// ============================================================================
// FX2LP SFR Registers at 0xB0 - 0xBF
// ----------------------------------------------------------------------------
// 0xB0 - IOD
// 0xB1 - IOE
// 0xB2 - OEA
// 0xB3 - OEB
// 0xB4 - OEC
// 0xB5 - OED
// 0xB6 - OEE
// 0xB7 -
// 0xB8 - IP
// 0xB9 -
// 0xBA - EP01STAT
// 0xBB - GPIFTRIG
// 0xBC -
// 0xBD - GPIFSGL_DATH
// 0xBE - GPIFSGL_DATLX
// 0xBF - GPIFSGL_DATLNOX
// ============================================================================
#ifndef FX2REGS_SFRBX_H
#define FX2REGS_SFRBX_H
sfr IOD = 0xB0;
sfr IOE = 0xB1;
sfr OEA = 0xB2;
sfr OEB = 0xB3;
sfr OEC = 0xB4;
sfr OED = 0xB5;
sfr OEE = 0xB6;
sfr IP = 0xB8;
sfr EP01STAT = 0xBA;
sfr GPIFTRIG = 0xBB;
sfr GPIFSGLDATH = 0xBD;
sfr GPIFSGLDATLX = 0xBE;
sfr GPIFSGLDATLNOX = 0xBF;
// ------------------------------------
// PortD (0xB0)
// ------------------------------------
sbit PD0 = 0xB0 +0;
sbit PD1 = 0xB0 +1;
sbit PD2 = 0xB0 +2;
sbit PD3 = 0xB0 +3;
sbit PD4 = 0xB0 +4;
sbit PD5 = 0xB0 +5;
sbit PD6 = 0xB0 +6;
sbit PD7 = 0xB0 +7;
// ------------------------------------
// IP bits
// ------------------------------------
sbit PX0 = 0xB8 +0;
sbit PT0 = 0xB8 +1;
sbit PX1 = 0xB8 +2;
sbit PT1 = 0xB8 +3;
sbit PS0 = 0xB8 +4;
sbit PT2 = 0xB8 +5;
sbit PS1 = 0xB8 +6;
#endif
+59
View File
@@ -0,0 +1,59 @@
// ============================================================================
// FX2LP SFR Registers at 0xC0 - 0xCF
// ----------------------------------------------------------------------------
// 0xC0 - SCON1
// 0xC1 - SBUF1
// 0xC2 -
// 0xC3 -
// 0xC4 -
// 0xC5 -
// 0xC6 -
// 0xC7 -
// 0xC8 - T2CON
// 0xC9 -
// 0xCA - RCAP2L
// 0xCB - RCAP2H
// 0xCC - TL2
// 0xCD - TH2
// 0xCE -
// 0xCF -
// ============================================================================
#ifndef FX2REGS_SFRCX_H
#define FX2REGS_SFRCX_H
sfr SCON1 = 0xC0;
sfr SBUF1 = 0xC1;
sfr T2CON = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
// ------------------------------------
// SCON1 (0xC0)
// ------------------------------------
sbit RI1 = 0xC0 +0;
sbit TI1 = 0xC0 +1;
sbit RB81 = 0xC0 +2;
sbit TB81 = 0xC0 +3;
sbit REN1 = 0xC0 +4;
sbit SM21 = 0xC0 +5;
sbit SM11 = 0xC0 +6;
sbit SM01 = 0xC0 +7;
// ------------------------------------
// T2CON (0xC8)
// ------------------------------------
sbit CP_RL2 = 0xC8 +0;
sbit C_T2 = 0xC8 +1;
sbit TR2 = 0xC8 +2;
sbit EXEN2 = 0xC8 +3;
sbit TCLK = 0xC8 +4;
sbit RCLK = 0xC8 +5;
sbit EXF2 = 0xC8 +6;
sbit TF2 = 0xC8 +7;
#endif
+49
View File
@@ -0,0 +1,49 @@
// ============================================================================
// FX2LP SFR Registers at 0xD0 - 0xDF
// ----------------------------------------------------------------------------
// 0xD0 - PSW
// 0xD1 -
// 0xD2 -
// 0xD3 -
// 0xD4 -
// 0xD5 -
// 0xD6 -
// 0xD7 -
// 0xD8 - EICON
// 0xD9 -
// 0xDA -
// 0xDB -
// 0xDC -
// 0xDD -
// 0xDE -
// 0xDF -
// ============================================================================
#ifndef FX2REGS_SFRDX_H
#define FX2REGS_SFRDX_H
sfr PSW = 0xD0;
sfr EICON = 0xD8;
// ------------------------------------
// PSW bits
// ------------------------------------
sbit P = 0xD0 +0;
sbit FL = 0xD0 +1;
sbit OV = 0xD0 +2;
sbit RS0 = 0xD0 +3;
sbit RS1 = 0xD0 +4;
sbit F0 = 0xD0 +5;
sbit AC = 0xD0 +6;
sbit CY = 0xD0 +7;
// ------------------------------------
// EICON bits
// ------------------------------------
sbit INT6 = 0xD8 +3;
sbit RESI = 0xD8 +4;
sbit ERESI = 0xD8 +5;
sbit SMOD1 = 0xD8 +7;
#endif
+37
View File
@@ -0,0 +1,37 @@
// ============================================================================
// FX2LP SFR Registers at 0xE0 - 0xEF
// ----------------------------------------------------------------------------
// 0xE0 - ACC
// 0xE1 -
// 0xE2 -
// 0xE3 -
// 0xE4 -
// 0xE5 -
// 0xE6 -
// 0xE7 -
// 0xE8 - EIE
// 0xE9 -
// 0xEA -
// 0xEB -
// 0xEC -
// 0xED -
// 0xEE -
// 0xEF -
// ============================================================================
#ifndef FX2REGS_SFREX_H
#define FX2REGS_SFREX_H
sfr ACC = 0xE0;
sfr EIE = 0xE8;
// ------------------------------------
// EIE bits
// ------------------------------------
sbit EUSB = 0xE8 +0;
sbit EI2C = 0xE8 +1;
sbit EIEX4 = 0xE8 +2;
sbit EIEX5 = 0xE8 +3;
sbit EIEX6 = 0xE8 +4;
#endif
+37
View File
@@ -0,0 +1,37 @@
// ============================================================================
// FX2LP SFR Registers at 0xF0 - 0xFF
// ----------------------------------------------------------------------------
// 0xF0 - B
// 0xF1 -
// 0xF2 -
// 0xF3 -
// 0xF4 -
// 0xF5 -
// 0xF6 -
// 0xF7 -
// 0xF8 - EIP
// 0xF9 -
// 0xFA -
// 0xFB -
// 0xFC -
// 0xFD -
// 0xFE -
// 0xFF -
// ============================================================================
#ifndef FX2REGS_SFRFX_H
#define FX2REGS_SFRFX_H
sfr B = 0xF0;
sfr EIP = 0xF8;
// ------------------------------------
// EIP bits
// ------------------------------------
sbit PUSB = 0xF8 +0;
sbit PI2C = 0xF8 +1;
sbit EIPX4 = 0xF8 +2;
sbit EIPX5 = 0xF8 +3;
sbit EIPX6 = 0xF8 +4;
#endif
+240
View File
@@ -0,0 +1,240 @@
//-----------------------------------------------------------------------------
// File: fx2sdly.h
// Contents: EZ-USB FX2 Synchronization Delay (SYNCDELAY) Macro
//
// Enter with _IFREQ = IFCLK in kHz
// Enter with _CFREQ = CLKOUT in kHz
//
// Copyright (c) 2001 Cypress Semiconductor, All rights reserved
//-----------------------------------------------------------------------------
#include "intrins.h"
// Registers which require a synchronization delay, see section 15.14
// FIFORESET FIFOPINPOLAR
// INPKTEND OUTPKTEND
// EPxBCH:L REVCTL
// GPIFTCB3 GPIFTCB2
// GPIFTCB1 GPIFTCB0
// EPxFIFOPFH:L EPxAUTOINLENH:L
// EPxFIFOCFG EPxGPIFFLGSEL
// PINFLAGSxx EPxFIFOIRQ
// EPxFIFOIE GPIFIRQ
// GPIFIE GPIFADRH:L
// UDMACRCH:L EPxGPIFTRIG
// GPIFTRIG
// Note: The pre-REVE EPxGPIFTCH/L register are affected, as well...
// ...these have been replaced by GPIFTC[B3:B0] registers
// _IFREQ can be in the range of: 5000 to 48000
#ifndef _IFREQ
#define _IFREQ 48000 // IFCLK frequency in kHz
#endif
// CFREQ can be any one of: 48000, 24000, or 12000
#ifndef _CFREQ
#define _CFREQ 48000 // CLKOUT frequency in kHz
#endif
#if( _IFREQ < 5000 )
#error "_IFREQ too small! Valid Range: 5000 to 48000..."
#endif
#if( _IFREQ > 48000 )
#error "_IFREQ too large! Valid Range: 5000 to 48000..."
#endif
#if( _CFREQ != 48000 )
#if( _CFREQ != 24000 )
#if( _CFREQ != 12000 )
#error "_CFREQ invalid! Valid values: 48000, 24000, 12000..."
#endif
#endif
#endif
// Synchronization Delay formula: see TRM section 15-14
#define _SCYCL ( 3*(_CFREQ) + 5*(_IFREQ) - 1 ) / ( 2*(_IFREQ) )
#if( _SCYCL == 1 )
#define SYNCDELAY _nop_( )
#endif
#if( _SCYCL == 2 )
#define SYNCDELAY _nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 3 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 4 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 5 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 6 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 7 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 8 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 9 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 10 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 11 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 12 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 13 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 14 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 15 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
#if( _SCYCL == 16 )
#define SYNCDELAY _nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( ); \
_nop_( )
#endif
+45
View File
@@ -0,0 +1,45 @@
#ifndef __FX2_USART_H__
#define __FX2_USART_H__
typedef enum _usart_cfg
{
// -----------------------------------------------------
// 11 bit total length configuraations
// -----------------------------------------------------
uc8n2, // 8 data bit no parity 2 stop bit
uc8e1, // 8 data bit even parity 1 stop bit
uc8o1, // 8 data bit odd parity 1 stop bit
// -----------------------------------------------------
// 10 bit total length configuraations
// -----------------------------------------------------
uc8n1, // 8 data bit no parity 1 stop
} usart_cfg;
// USART error codes
// -----------------------------------------------------------------------------
#define USART_OK 0x00
#define USART_ERROR 0x80
#define USART_ABORT 0xFF
// I2C state machine states
// -----------------------------------------------------------------------------
#define USART_IDLE 0x00
#define USART_SENDING 0x01
#define USART_RECEIVING 0x02
//#define I2C_PRIME 0x03
//#define I2C_BERROR 0x04
//#define I2C_NACK 0x05
//#define I2C_STOP 0x06
//#define I2C_WAITSTOP 0x07
void fx2_usart_init( unsigned int baud, usart_cfg cfg);
BYTE fx2_usart_send( BYTE length, BYTE xdata *dat, BYTE xdata *pause);
#endif