1. With the IFCLK output inverted, this provides enough set-up and hold time for the data.
2. 注意到當16 BITS 資料傳輸時, 第一/二資料順序次序.
void GPIF_SingleWordWrite( WORD gdata )
{
while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit
{
;
}
// using registers in XDATA space
XGPIFSGLDATH = gdata;
XGPIFSGLDATLX = gdata >> 8; // trigger GPIF Single
}
3. 讀取的操作比較特別,方式是透過對XGPIFSGLDATLX進行讀取後,polling GPIFTRIG.7 Done bit, 然後再將資料搬出
void GPIF_SingleWordRead( WORD xdata *gdata )
{
static BYTE g_data = 0x00; // dummy variable
while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit
{
;
}
// using register in XDATA space
g_data = XGPIFSGLDATLX; // dummy read to trigger GPIF
// Single Word Read transaction
while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit
{
;
}
// using register(s) in XDATA space, retrieve word just read from ext. FIFO
*gdata = ( ( WORD )XGPIFSGLDATLNOX << 8 ) | ( WORD )XGPIFSGLDATH;
}