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

📄 gpifpio0.c

📁 cypress的usb接ata源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
//                                                                                         
// This program configures the General Purpose Interface (GPIF) for Fx2.                   
// Parts of this program are automatically generated using the GPIF Tool.                  
// Please do not modify sections of text which are marked as "DO NOT EDIT ...".            
// You can modify the comments section of this GPIF program file using the dropdown menus  
// and pop-up dialogs. These controls are available as hot spots in the text. Modifying the
// comments section will generate program code which will implement your GPIF program.     
//                                                                                         
// DO NOT EDIT ...                                                                         
// GPIF Initialization                                                                     
// Interface Timing      Async                                                             
// Internal Ready Init   IntRdy=1                                                          
// CTL Out Tristate-able Tristate                                                          
// SingleWrite WF Select     2                                                             
// SingleRead WF Select      3                                                             
// FifoWrite WF Select       0                                                             
// FifoRead WF Select        1                                                             
// Data Bus Idle Drive   Tristate                                                          
// END DO NOT EDIT                                                                         
                                                                                           
// DO NOT EDIT ...                                                                         
// GPIF Wave Names                                                                         
// Wave 0   = PIO0WR                                                                       
// Wave 1   = PIO0RD                                                                       
// Wave 2   = UNUSED                                                                       
// Wave 3   = UNUSED                                                                       
                                                                                           
// GPIF Ctrl Outputs   Level                                                               
// CTL 0    = DIOW     CMOS                                                                
// CTL 1    = DIOR     CMOS                                                                
// CTL 2    = DMACK    CMOS                                                                
// CTL 3    = CTL 3    CMOS                                                                
// CTL 4    = CTL 4    CMOS                                                                
// CTL 5    = CTL 5    CMOS                                                                
                                                                                           
// GPIF Rdy Inputs                                                                         
// RDY0     = IORDY                                                                        
// RDY1     = RESERVED                                                                     
// RDY2     = DMARQ                                                                        
// RDY3     = FLAGD                                                                        
// RDY4     = RDY4                                                                         
// RDY5     = RDY5                                                                         
// FIFOFlag = FIFOFlag                                                                     
// IntReady = IntReady                                                                     
// END DO NOT EDIT                                                                         
// DO NOT EDIT ...                                                                         
//                                                                                         
// GPIF Waveform 0: PIO0WR                                                                 
//                                                                                         
// Interval     0         1         2         3         4         5         6     Idle (7) 
//          _________ _________ _________ _________ _________ _________ _________ _________
//                                                                                         
// AddrMode Same Val  Same Val  Same Val  Same Val  Same Val  Same Val  Same Val           
// DataMode Activate  Activate  NO Data   NO Data   NO Data   NO Data   NO Data            
// NextData SameData  SameData  NextData  SameData  SameData  SameData  SameData           
// Int Trig No Int    No Int    No Int    No Int    No Int    No Int    No Int             
// IF/Wait  Wait 10   Wait 1    Wait 10   IF        Wait 256  Wait 256  Wait 256           
//   Term A                               FIFOFlag                                         
//   LFunc                                OR                                               
//   Term B                               FIFOFlag                                         
// Branch1                                ThenIdle                                         
// Branch0                                ElseIdle                                         
// DIOW         0         1         1         1         z         z         z         z    
// DIOR         1         1         1         1         z         z         z         z    
// DMACK        1         1         1         1         z         z         z         z    
// CTL 3        1         1         1         1         z         z         z         z    
// CTL 4                                                                                   
// CTL 5                                                                                   
//                                                                                         
// END DO NOT EDIT                                                                         
// DO NOT EDIT ...                                                                         
//                                                                                         
// GPIF Waveform 1: PIO0RD                                                                 
//                                                                                         
// Interval     0         1         2         3         4         5         6     Idle (7) 
//          _________ _________ _________ _________ _________ _________ _________ _________
//                                                                                         
// AddrMode Same Val  Same Val  Same Val  Same Val  Same Val  Same Val  Same Val           
// DataMode NO Data   Activate  NO Data   NO Data   NO Data   NO Data   NO Data            
// NextData SameData  NextData  SameData  SameData  SameData  SameData  SameData           
// Int Trig No Int    No Int    No Int    No Int    No Int    No Int    No Int             
// IF/Wait  Wait 8    Wait 10   IF        Wait 256  Wait 256  Wait 256  Wait 256           
//   Term A                     FIFOFlag                                                   
//   LFunc                      AND                                                        
//   Term B                     FIFOFlag                                                   
// Branch1                      ThenIdle                                                   
// Branch0                      ElseIdle                                                   
// DIOW         1         1         1         z         z         z         z         z    
// DIOR         0         1         1         z         z         z         z         z    
// DMACK        1         1         1         z         z         z         z         z    
// CTL 3        1         1         1         z         z         z         z         z    
// CTL 4                                                                                   
// CTL 5                                                                                   
//                                                                                         
// END DO NOT EDIT                                                                         
// DO NOT EDIT ...                                                                         
//                                                                                         
// GPIF Waveform 2: UNUSED                                                                 
//                                                                                         
// Interval     0         1         2         3         4         5         6     Idle (7) 
//          _________ _________ _________ _________ _________ _________ _________ _________
//                                                                                         
// AddrMode Same Val  Same Val  Same Val  Same Val  Same Val  Same Val  Same Val           
// DataMode NO Data   Activate  NO Data   NO Data   NO Data   NO Data   NO Data            
// NextData SameData  NextData  SameData  SameData  SameData  SameData  SameData           
// Int Trig No Int    No Int    No Int    No Int    No Int    No Int    No Int             
// IF/Wait  Wait 1    Wait 10   Wait 6    IF        Wait 256  Wait 256  Wait 256           
//   Term A                               FIFOFlag                                         
//   LFunc                                AND                                              
//   Term B                               FIFOFlag                                         
// Branch1                                ThenIdle                                         
// Branch0                                ElseIdle                                         
// DIOW         1         0         1         1         z         z         z         z    
// DIOR         1         1         1         1         z         z         z         z    
// DMACK        1         1         1         1         z         z         z         z    
// CTL 3        z         z         z         z         z         z         z         z    
// CTL 4                                                                                   
// CTL 5                                                                                   
//                                                                                         
// END DO NOT EDIT                                                                         
// DO NOT EDIT ...                                                                         
//                                                                                         
// GPIF Waveform 3: UNUSED                                                                 
//                                                                                         
// Interval     0         1         2         3         4         5         6     Idle (7) 
//          _________ _________ _________ _________ _________ _________ _________ _________
//                                                                                         
// AddrMode Same Val  Same Val  Same Val  Same Val  Same Val  Same Val  Same Val           
// DataMode NO Data   NO Data   Activate  NO Data   NO Data   NO Data   NO Data            
// NextData SameData  SameData  SameData  SameData  SameData  SameData  SameData           
// Int Trig No Int    No Int    No Int    No Int    No Int    No Int    No Int             
// IF/Wait  Wait 1    Wait 10   Wait 6    IF        Wait 256  Wait 256  Wait 256           
//   Term A                               FIFOFlag                                         
//   LFunc                                AND                                              
//   Term B                               FIFOFlag                                         
// Branch1                                ThenIdle                                         
// Branch0                                ElseIdle                                         
// DIOW         1         1         1         1         z         z         z         z    
// DIOR         1         0         1         1         z         z         z         z    
// DMACK        1         1         1         1         z         z         z         z    
// CTL 3        z         1         z         z         z         z         z         z    
// CTL 4                                                                                   
// CTL 5                                                                                   
//                                                                                         
// END DO NOT EDIT                                                                         
                                                                                           
// GPIF Program Code                                                                       
                                                                                           
// DO NOT EDIT ...                                                                         
#include "fx2.h"                                                                           
#include "fx2regs.h"                                                                       
// END DO NOT EDIT                                                                         
                                                                                           
// DO NOT EDIT ...                                                                         
const char xdata WaveData[128] =                                                           
{                                                                                          
// Wave 0                                                                                  
/* LenBr */ 0x0A,     0x01,     0x0A,     0x3F,     0x00,     0x00,     0x00,     0x00,    
/* Opcode*/ 0x02,     0x02,     0x04,     0x01,     0x00,     0x00,     0x00,     0x00,    
/* Output*/ 0xFE,     0xFF,     0xFF,     0xFF,     0x00,     0x00,     0x00,     0x00,    
/* LFun  */ 0x00,     0x00,     0x00,     0x76,     0x00,     0x00,     0x00,     0x00,    
// Wave 1                                                                                  
/* LenBr */ 0x08,     0x0A,     0x3F,     0x00,     0x00,     0x00,     0x00,     0x00,    
/* Opcode*/ 0x00,     0x06,     0x01,     0x00,     0x00,     0x00,     0x00,     0x00,    
/* Output*/ 0xFD,     0xFF,     0xFF,     0x00,     0x00,     0x00,     0x00,     0x00,    
/* LFun  */ 0x00,     0x00,     0x36,     0x00,     0x00,     0x00,     0x00,     0x00,    
// Wave 2  UDMA Write
/* LenBr */ 0x08,     0x01,     0x05,     0x1C,     0x03,     0x01,     0x02,     0x01,    
/* Opcode*/ 0x01,     0x00,     0x02,     0x03,     0x02,     0x02,     0x26,     0x00,    
/* Output*/ 0xFF,     0xFB,     0xFA,     0xFA,     0xF8,     0xF9,     0xC3,     0xFF,    
/* LFun  */ 0x09,     0x09,     0xA8,     0x09,     0x00,     0x00,     0x36,     0x3F,     
// Wave 3 UDMA Read
/* LenBr */ 0x08,     0x01,     0x13,     0x05,     0x01,     0x02,     0x01,     0x01,    
/* Opcode*/ 0x01,     0x00,     0x01,     0x00,     0x00,     0x26,     0x26,     0x00,    
/* Output*/ 0xFF,     0xFB,     0xF8,     0xFB,     0xFB,     0xFB,     0xFF,     0xFF,    
/* LFun  */ 0x09,     0x09,     0x09,     0x09,     0x00,     0x2D,     0x36,     0x3F,    
};                                                                                         
// END DO NOT EDIT                                                                         
                                                                                           
// DO NOT EDIT ...                                                                         
const char xdata InitData[7] =                                                             
{                                                                                          
/* Regs  */ 0x80,0x80,0x00,0x00,0x06,0xB1,0x11            
};                                                                                         
// END DO NOT EDIT                                                                         
                                                                                           

void GpifInit( void )
{
  BYTE xdata *Source;
  BYTE xdata *Dest;
  BYTE x;

//  GPIFABORT = 0;                      // abort any pending operation
//GPIFREADY = InitData[0];              // name changed to GPIFREADYCFG in Fx2
  GPIFCTLCFG = InitData[1];
  GPIFIDLECS = InitData[2];
  GPIFIDLECTL = InitData[3];
  IFCONFIG = (IFCONFIG & 0xF8) | 0x06;  // Set IFCFG to 0x06 - GSTATE & GPIF 
//IFCONFIG = InitData[4];               // Bus 16 - No longer present in Fx2
  GPIFWFSELECT = InitData[5];

  Source = &WaveData[127];              // Transfer the GPIF Tool generated data
  Dest = 0xE47F;


  for (x = 0; x < 128; x++)
  {
    *Dest-- = *Source--;
  }

//	INT4SETUP = INT4SFC | INT4_INTERNAL; // setup INT4 as internal source
//	GENIE = 0x01;                 // Enable GPIF interrupt 
//	EIEX4 = 0x01;
}
// END DO NOT EDIT                                                                         

// TO DO: You may add additional code below.
//

#define TMOUT 0x0020    // Default Timeout TODO: Set this appropriately

void OtherInit( void )
{

// interface initialization
  CPUCS = 0x02;   // don't drive CLKOUT (CLKOE=1=>Not Driving CLKOUT) 
  IFCONFIG = 0xC6;// use internal FCLK -> FCLKSRC=1 1100 0010
			      // at 48MHz -> 3048MHZ=1
			      // don't enable FCLK output -> FCLKOE=0
			      // don't invert FCLK output polarity -> FCLPOL=0
			      // sync to FCLK -> ASYNC=0
			      // output GPIF states -> GSTATE=1
			      // use GPIF as master -> IFCFG[1..0]=10
  GPIFREADYCFG |= 0xC0;   // INTRDY=1, SAS=1 (sync), RDY5CFG=0 (Fx2 only)
  GPIFABORT= 0x00;

  PORTCCFG = 0xFF;         // use Port C as alternate function GPIFADR[7:0]		
  PORTECFG |= 0x80;        // use PE7 as alternate function GPIFADR8

  EP2FIFOCFG = 0x05;	// use 16-bit databus -> WORDWIDE=1
  EP4FIFOCFG = 0x05;	// commit zero length pkt via ext.
                        // ... PKTEND pin only -> ZEROLENIN=1
  EP6FIFOCFG = 0x05;	// 8051 decides if to commit data to
                        // ... OUT FIFO -> AUTOOUT=0
  EP8FIFOCFG = 0x05;	// 8051 dispatches an IN pkt by writing
                        // ... byte count -> AUTOIN=0
			      // normal active flags -> INFM1=0
			      // normal active flags -> OEP1=0

  EP1OUTCFG = 0xA0;	// ep1out is valid BULK OUT 64
  EP1INCFG = 0xA0;	// ep1in is valid BULK IN 64

  // default: all endpoints have their VALID bit set
  // default: TYPE1 = 1 and TYPE0 = 0 --> BULK  
  // default: EP2 and EP4 DIR bits are 0 (OUT direction)
  // default: EP6 and EP8 DIR bits are 1 (IN direction)
  // default: EP2, EP4, EP6, and EP8 are double buffered

  // we are just using the default values, yes this is not necessary...
  EP2CFG = 0xA2;     // ep2 is valid BULK OUT 512 double buffered
  EP4CFG = 0xA0;	   // ep4 is valid BULK OUT 512 double buffered
  EP6CFG = 0xE2;	   // ep6 is valid BULK IN 512 double buffered
  EP8CFG = 0xE0;	   // ep8 is valid BULK IN 512 double buffered

  // The PF is highly configurable...
  EP2FIFOPFH = 0x00;	   // PF=0 when BC > PF -> Decis=0 (1 byte in FIFO)
  EP2FIFOPFL = 0x00;	   // PF and BC refer to the current pkt -> PKTSTAT=0

  EP4FIFOPFH = 0x00;	   // PF=0 when BC > PF -> Decis=0 (1 byte in FIFO)
  EP4FIFOPFL = 0x00;	   // PF and BC refer to the current pkt -> PKTSTAT=0

  EP6FIFOPFH = 0x40;	   // PF=0 when BC <= PF -> Decis=0 (1 byte in FIFO)		
  EP6FIFOPFL = 0x3F;	   // PF and BC refer to the current pkt -> PKTSTAT=1

  EP8FIFOPFH = 0x40;    // PF=0 when BC <= PF -> Decis=0 (1 byte in FIFO)
  EP8FIFOPFL = 0x3F;	   // PF and BC refer to the current pkt -> PKTSTAT=1

  EP2AUTOINLENH = 0x00; // EPxPKTLENH/L is for IN's only...
  EP2AUTOINLENL = 0x00;

  EP4AUTOINLENH = 0x00;

⌨️ 快捷键说明

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