111 lines
3.2 KiB
C
111 lines
3.2 KiB
C
|
// Copyright (C) 2009 Ubixum, Inc.
|
||
|
//
|
||
|
// This library is free software; you can redistribute it and/or
|
||
|
// modify it under the terms of the GNU Lesser General Public
|
||
|
// License as published by the Free Software Foundation; either
|
||
|
// version 2.1 of the License, or (at your option) any later version.
|
||
|
//
|
||
|
// This library is distributed in the hope that it will be useful,
|
||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
// Lesser General Public License for more details.
|
||
|
//
|
||
|
// You should have received a copy of the GNU Lesser General Public
|
||
|
// License along with this library; if not, write to the Free Software
|
||
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||
|
|
||
|
/*! \file
|
||
|
*
|
||
|
* These functions do the same thing that the Cypress gpif designer expored c file does.
|
||
|
* Instead of including their file directly in your project, you include just the
|
||
|
* generated waveform data. The gpif2dat script in the utils folder will export your
|
||
|
* waveform data to a file that can be included in your project.
|
||
|
* */
|
||
|
|
||
|
#ifndef GPIF_H
|
||
|
#define GPIF_H
|
||
|
|
||
|
#include "fx2types.h"
|
||
|
|
||
|
#define GPIFDONE (GPIFTRIG&0x80)
|
||
|
#define GPIFTC16 (MAKEWORD(GPIFTCB1,GPIFTCB0))
|
||
|
#define GPIFTC32 (MAKEDWORD(MAKEWORD(GPIFTCB3,GPIFTCB2),MAKEWORD(GPIFTCB1,GPIFTCB0)))
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Gpif designer generates a c file with waveform data.
|
||
|
* Copy the WaveData[128] array
|
||
|
* and the InitData[7] to your code somewhere
|
||
|
* Then this function is pretty much the reset of the generated
|
||
|
* code but ported to sdcc.
|
||
|
*
|
||
|
* uses syncdelay of 4 which might not be long enough if peripheral
|
||
|
* runs slower than 30mhz. May not affect anything.
|
||
|
*
|
||
|
* IFCONFIG is set with IFCFG[1:0] = 10 for GPIF master but you still
|
||
|
* have to set the ifclk, polarity, and the rest of the bits
|
||
|
**/
|
||
|
|
||
|
void gpif_init(BYTE * waveform, BYTE * initdata);
|
||
|
|
||
|
/**
|
||
|
* Uses the correct bytes from your flowstates array.
|
||
|
* This may or may not be needed depending on whether
|
||
|
* your waveform data uses flowstates. If you don't
|
||
|
* know if you need them or not, you probably don't.
|
||
|
*
|
||
|
* flowstates should have 36 elements.
|
||
|
* bank should be 0-3
|
||
|
**/
|
||
|
void gpif_setflowstate(BYTE * flowstates, BYTE bank);
|
||
|
|
||
|
|
||
|
|
||
|
//! These defines/functions pretty much out of the TRM 10.4
|
||
|
#define GPIFTRGWR 0
|
||
|
#define GPIFTRGRD 4
|
||
|
typedef enum {
|
||
|
GPIF_EP2 = 0,
|
||
|
GPIF_EP4 = 1,
|
||
|
GPIF_EP6 = 2,
|
||
|
GPIF_EP8 = 3
|
||
|
} GPIF_EP_NUM;
|
||
|
|
||
|
/**
|
||
|
* \brief Simple function to help set the transaction count for gpif
|
||
|
* transactions.
|
||
|
* \param tc 32 bit Transaction Count
|
||
|
**/
|
||
|
void gpif_set_tc32(DWORD tc);
|
||
|
/**
|
||
|
* \brief Simple function to set transaction count for gpif transactions.
|
||
|
* \param tc 16 bit Transaction Count
|
||
|
**/
|
||
|
void gpif_set_tc16(WORD tc);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Use the gpif to read a single word at a time.
|
||
|
* Read len words and store in res
|
||
|
*
|
||
|
* At least one EPxFIFOCFG has to have wordwide=1 or this
|
||
|
* functions won't transfer both bytes.
|
||
|
**/
|
||
|
|
||
|
void gpif_single_read16(WORD * res, WORD len);
|
||
|
|
||
|
/**
|
||
|
* Use the gpif to write a single word at a time.
|
||
|
* Write len words from data
|
||
|
*
|
||
|
* At leat one EPxFIFOCFG has to have wordwide=1 or this
|
||
|
* function won't transfer both bytes.
|
||
|
**/
|
||
|
void gpif_single_write16(WORD * dat, WORD len);
|
||
|
|
||
|
void gpif_fifo_read(GPIF_EP_NUM ep_num);
|
||
|
|
||
|
void gpif_fifo_write(GPIF_EP_NUM ep_num);
|
||
|
|
||
|
#endif
|