📄 gpif.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 + -