OpenCores
URL https://opencores.org/ocsvn/usb_fpga_2_14/usb_fpga_2_14/trunk

Subversion Repositories usb_fpga_2_14

[/] [usb_fpga_2_14/] [trunk/] [fx3/] [ztex-default.c] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 ZTEX
/*%
2
   ZTEX Firmware Kit for EZ-USB FX3 Microcontrollers
3
   Copyright (C) 2009-2017 ZTEX GmbH.
4
   http://www.ztex.de
5
 
6
   This Source Code Form is subject to the terms of the Mozilla Public
7
   License, v. 2.0. If a copy of the MPL was not distributed with this file,
8
   You can obtain one at http://mozilla.org/MPL/2.0/.
9
 
10
   Alternatively, the contents of this file may be used under the terms
11
   of the GNU General Public License Version 3, as described below:
12
 
13
   This program is free software; you can redistribute it and/or modify
14
   it under the terms of the GNU General Public License version 3 as
15
   published by the Free Software Foundation.
16
 
17
   This program is distributed in the hope that it will be useful, but
18
   WITHOUT ANY WARRANTY; without even the implied warranty of
19
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
   General Public License for more details.
21
 
22
   You should have received a copy of the GNU General Public License
23
   along with this program; if not, see http://www.gnu.org/licenses/.
24
%*/
25
/*
26
    Template for default firmware.
27
*/
28
 
29
#undef GPIO_SIMPLE_BITMAP0
30
#define GPIO_SIMPLE_BITMAP0 ( ( 1 << GPIO_GPIO0 ) | ( 1 << GPIO_GPIO1 ) | ( 1 << GPIO_RESET ) | ( 1 << GPIO_CLK ) | ( 1 << GPIO_DATA ) | ( 1 << GPIO_STOP ) )
31
#undef GPIO_SIMPLE_BITMAP1
32
#define GPIO_SIMPLE_BITMAP1 ( ( 1 << (GPIO_GPIO2-32) ) | ( 1 << (GPIO_GPIO3-32) ) )
33
 
34
CyU3PDmaChannel dma_out_handle, dma_in_handle, dma_fpga_conf_handle;
35
CyBool_t communication_started = CyFalse;
36
 
37
// undocumented: PIB_SOCKET_0 .. SOCKET_3 must be connected to GPIF threads 0..3, but other sockets can be connected to any thread
38
#define EZUSB_IO_IN_SOCKET CY_U3P_PIB_SOCKET_1
39
#define EZUSB_IO_OUT_SOCKET CY_U3P_PIB_SOCKET_0
40
#define EZUSB_IO_FPGA_CONF_SOCKET CY_U3P_PIB_SOCKET_5
41
 
42
/*
43
re-using input channel for FPGA configuration fails in super speed mode due to a bug in Cypress SDK, see
44
http://www.cypress.com/forum/usb-30-super-speed/dma-channel-gpif-reset-problem-super-speed-mode
45
 
46
#define ZTEX_FPGA_CONF_FAST_EP OUT_ENDPOINT
47
#define ZTEX_FPGA_CONF_FAST_IFACE 0
48
#define ZTEX_FPGA_CONF_FAST_SOCKET EZUSB_IO_IN_SOCKET
49
*/
50
 
51
// workaround: create a own channel for FPGA configuration
52
#ifndef ZTEX_FPGA_CONF_FAST_IFACE
53
#define ZTEX_FPGA_CONF_FAST_IFACE 1
54
#define ZTEX_FPGA_CONF_FAST_SOCKET CY_U3P_PIB_SOCKET_5
55
#endif
56
 
57
/* endpount / dma macros
58
    OUT_ENDPOINT : host --> EZUSB --> FPGA
59
      * interface 0
60
      * bulk size: 16*1024
61
      * buffer size: 16K
62
      * buffer count: 4
63
      * PIB socket: 1
64
    IN_ENDPOINT : FPGA --> EZUSB --> host
65
      * interface 0
66
      * bulk size: 16*1024
67
      * buffer size: 16K
68
      * buffer count: 4
69
      * PIB socket: 0
70
    ZTEX_FPGA_CONF_FAST_EP : FPGA configuration
71
      * interface 1
72
      * bulk size: 1*1024
73
      * buffer size: 1K
74
      * buffer count: 2
75
      * PIB socket: 5
76
*/
77
 
78
#define EP_SETUP_DEFAULT \
79
    INTERFACE(0, \
80
        EP_BULK(OUT_ENDPOINT, OUT, 16, \
81
            DMA(dma_in_handle, CY_U3P_DMA_TYPE_AUTO, 16, 4, EZUSB_IO_IN_SOCKET, \
82
                CB(0,0) \
83
            ) \
84
        ) \
85
        EP_BULK(IN_ENDPOINT, IN, 16, \
86
            DMA(dma_out_handle, CY_U3P_DMA_TYPE_AUTO, 16, 4, EZUSB_IO_OUT_SOCKET, ) \
87
        ) \
88
    )
89
 
90
#undef EP_SETUP
91
#ifdef ZTEX_FPGA_CONF_FAST_EP 
92
#define EP_SETUP  EP_SETUP_DEFAULT \
93
    INTERFACE(1, \
94
        EP_BULK(ZTEX_FPGA_CONF_FAST_EP, OUT, 1, \
95
            DMA(dma_fpga_conf_handle, CY_U3P_DMA_TYPE_AUTO, 1, 2 , ZTEX_FPGA_CONF_FAST_SOCKET, \
96
                CB(0,0) \
97
            ) \
98
        ) \
99
    )
100
#else     
101
#define EP_SETUP  EP_SETUP_DEFAULT
102
#endif 
103
 
104
#include "ztex-lsi.c"
105
#include "ztex.c"       
106
#include "ztex-ezusb-io1.c"
107
 
108
void run () {
109
    uint16_t snd_errors, rcv_errors;
110
    uint16_t last_snd_errors = 0;
111
    uint16_t last_rcv_errors = 0;
112
 
113
    ztex_log ( "Info: Starting default Firmware" );
114
 
115
    while (1) {
116
        snd_errors = ZTEX_USB3_SND_ERROR_COUNT;
117
        rcv_errors = ZTEX_USB3_RCV_ERROR_COUNT;
118
        if ( (snd_errors != last_snd_errors) || (rcv_errors != last_rcv_errors) ) {
119
            ZTEX_LOG("snd errors: %d,  rcv errors: %d", snd_errors, rcv_errors);
120
            last_snd_errors = snd_errors;
121
            last_rcv_errors = rcv_errors;
122
        }
123
/*      if ( CyU3PDmaChannelIsValid(&dma_in_handle) ) {
124
            uint32_t p,c;
125
            CyU3PDmaState_t s;
126
            CyU3PDmaChannelGetStatus(&dma_in_handle, &s, &p,&c);
127
            ZTEX_LOG("Info: Input DMA status status=%d, prod=%d, cons=%d",s,p,c);
128
        } */
129
        CyU3PThreadSleep (500);
130
    }
131
 
132
}
133
 
134
void usb_start() {
135
    // start communication if cable is connected and FPGA is running
136
    if ( ZTEX_FPGA_CONFIGURED ) {
137
        ztex_log ( "Info: Starting communication" );
138
        communication_started = CyTrue;
139
 
140
        // start lsi, reset is active
141
        ztex_lsi_start();
142
 
143
        // load GPIF
144
        ztex_ezusb_io1_start( EZUSB_IO_IN_SOCKET, EZUSB_IO_OUT_SOCKET );
145
 
146
        // start transfers
147
        ZTEX_REC(CyU3PDmaChannelSetXfer (&dma_in_handle, 0));
148
        ZTEX_REC(CyU3PDmaChannelSetXfer (&dma_out_handle, 0));
149
 
150
        ztex_gpio_set(GPIO_RESET, CyFalse);
151
        ztex_gpio_set(ZTEX_GPIO_LED, CyTrue);
152
    }
153
}
154
 
155
void usb_stop() {
156
/*    if ( CyU3PDmaChannelIsValid(&dma_in_handle) ) {
157
        uint32_t p,c;
158
        CyU3PDmaState_t s;
159
        CyU3PDmaChannelGetStatus(&dma_in_handle, &s, &p,&c);
160
        ZTEX_LOG("Info: Input DMA status status=%d, prod=%d, cons=%d",s,p,c);
161
    }  */
162
    if ( communication_started ) {
163
        ztex_log ( "Info: Stopping communication" );
164
        communication_started = CyFalse;
165
 
166
        ztex_ezusb_io1_stop();
167
 
168
        ztex_lsi_stop();
169
 
170
        ztex_gpio_set(ZTEX_GPIO_LED, CyFalse);
171
    }
172
}
173
 
174
/*
175
 * Main function
176
 */
177
int main (void)
178
{
179
    ztex_pib_clock.clkDiv = 4;          // normal setting: 104 MHz @ 26 MHz external clock
180
//    ztex_pib_clock.clkDiv = 6;                // conservative setting: 69.33MHz @ 26 MHz external clock
181
 
182
    ztex_app_thread_run = run;
183
    ztex_usb_start = usb_start;
184
    ztex_usb_stop = usb_stop;
185
 
186
    ztex_interface_string[0] = "ZTEX Default Interface";
187
    ztex_interface_string[1] = "FPGA configuration interface";
188
 
189
    ztex_main();        // starts the OS and never returns
190
    return 0;            // makes the compiler happy
191
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.