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

📄 gpif.c

📁 部分USB学习资料
💻 C
字号:
/********************************************************************/
/*  This file is created by liurong,and be used for GPIF            */
/********************************************************************/
#include "ezusb.h"
#include "ezregs.h"
#include "Fx.h"
                                                                                                                                             
const char xdata WaveData[128] =
{
// Wave 0                                                                                  
/* LenBr */ 0x01,     0x01,     0x32,     0x32,     0x32,     0x01,     0x01,     0x47,    
/* Opcode*/ 0x02,     0x02,     0x02,     0x02,     0x02,     0x02,     0x02,     0x00,    
/* Output*/ 0xFF,     0xFF,     0xF9,     0xF9,     0xF9,     0xFF,     0xFF,     0xFF,    
/* LFun  */ 0x00,     0x09,     0x12,     0x1B,     0x24,     0x2D,     0x36,     0x3F,    
// Wave 1                                                                                  
/* LenBr */ 0x48,     0x06,     0x03,     0x03,     0x01,     0x01,     0x01,     0x47,    
/* Opcode*/ 0x03,     0x02,     0x02,     0x02,     0x02,     0x02,     0x02,     0x00,    
/* Output*/ 0xFF,     0xFF,     0xFA,     0xFA,     0xFF,     0xFF,     0xFF,     0xFF,    
/* LFun  */ 0x80,     0x09,     0x12,     0x1B,     0x24,     0x2D,     0x36,     0x3F,    
// Wave 2                                                                                  
/* LenBr */ 0x01,     0x01,     0x01,     0x01,     0x01,     0x01,     0x01,     0x47,    
/* Opcode*/ 0x00,     0x00,     0x00,     0x00,     0x00,     0x00,     0x00,     0x00,    
/* Output*/ 0xFF,     0xFF,     0xFF,     0xFF,     0xFF,     0xFF,     0xFF,     0xFF,    
/* LFun  */ 0x00,     0x09,     0x12,     0x1B,     0x24,     0x2D,     0x36,     0x3F,    
// Wave 3                                                                                  
/* LenBr */ 0x01,     0x01,     0x01,     0x01,     0x01,     0x01,     0x01,     0x47,    
/* Opcode*/ 0x00,     0x00,     0x00,     0x00,     0x00,     0x00,     0x00,     0x00,    
/* Output*/ 0xFF,     0xFF,     0xFF,     0xFF,     0xFF,     0xFF,     0xFF,     0xFF,    
/* LFun  */ 0x09,     0x09,     0x12,     0x1B,     0x24,     0x2D,     0x36,     0x3F     
};



const char xdata InitData[7] =
{
/* Regs  */ 0xC0,0x00,0x01,0xFF,0x06,0x1B,0x11
};

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

void GpifInit(void)
{
	unsigned char xdata *Source;
	unsigned char xdata *Dest;
	unsigned int x;

	ABORT = 0;				// abort any pending operation
	READY = InitData[0];
	CTLOUTCFG = InitData[1];
	IDLE_CS = InitData[2];
	IDLE_CTLOUT = InitData[3];
	IFCONFIG = InitData[4];
	WFSELECT = InitData[5];
	ABSETUP |= InitData[6];

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

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

	INT4SETUP = INT4SFC | INT4_INTERNAL; // setup INT4 as internal source
	EIEX4 = 0x01;
	PORTSETUP |= 0x01;
}

// write byte to PERIPHERAL, using GPIF
bit Peripheral_SingleWordWrite( BYTE gaddr, WORD gdata )
{
  unsigned char transaction_err = 0x00;

  GPIFADRL = gaddr;                  // setup GPIF address ADR0-ADR5
  SGLDATH = gdata >> 8;              
  SGLDATLTRIG = gdata;               // initiate GPIF write transaction

  while( !( IDLE_CS & 0x80 ) )       // poll IDLE_CS.7 Done bit
  {                                  
    if( ++transaction_err > TMOUT )  // trap GPIF transaction for TMOUT
    {                                
      ABORT = 0x01;
      return( 0 );                   // error has occurred
    }
  }

  return( 1 );
}

// read word from PERIPHERAL, using GPIF
bit Peripheral_SingleWordRead( BYTE gaddr, WORD xdata *gdata )
{
  unsigned char g_data = 0x00;
  unsigned char transaction_err = 0x00;

  GPIFADRL = gaddr;                  // setup GPIF address ADR0-ADR5
  g_data = SGLDATLTRIG;               // initiate GPIF read transaction

  while( !( IDLE_CS & 0x80 ) )       // poll IDLE_CS.7 Done bit
  {                                  
    if( ++transaction_err > TMOUT )  // trap GPIF transaction for TMOUT
    {                                
      ABORT = 0x01;
      return( 0 );                   // error has occurred
    }
  }

  *gdata = ( ( WORD )SGLDATH << 8 ) | ( WORD )SGLDATLNTRIG;

  return( 1 );
}

⌨️ 快捷键说明

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