X-Git-Url: http://sigrok.org/gitweb/?p=sigrok-firmware-fx2lafw.git;a=blobdiff_plain;f=fx2lib%2Finclude%2Fgpif.h;fp=fx2lib%2Finclude%2Fgpif.h;h=b6f40b8b9ff3dd08a817dba4234f33d803186fd3;hp=0000000000000000000000000000000000000000;hb=3608c1063d17c56c038434eba5a6b11f26e530b5;hpb=8b13135e5fd175911ad9d8283b17fc97fe0c7709 diff --git a/fx2lib/include/gpif.h b/fx2lib/include/gpif.h new file mode 100644 index 00000000..b6f40b8b --- /dev/null +++ b/fx2lib/include/gpif.h @@ -0,0 +1,110 @@ +// 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* data, WORD len); + +void gpif_fifo_read ( GPIF_EP_NUM ep_num ); + +void gpif_fifo_write( GPIF_EP_NUM ep_num ); + +#endif