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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.61/] [tools/] [fx2/] [src/] [hw_nexys3.c] - Blame information for rev 26

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 17 wfjm
/* $Id: hw_nexys3.c 447 2011-12-31 19:41:32Z mueller $ */
2
/*
3
 * Copyright 2011- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4
 * Code was forked from ixo-jtag.svn.sourceforge.net on 2011-07-17
5
 *
6
 * - original copyright and licence disclaimer --------------------------------
7
 * - Copyright (C) 2007 Kolja Waschk, ixo.de
8
 * - This code is part of usbjtag. usbjtag is free software;
9
 * - This code was copied from hw_basic.c and adapted for the Digilent Nexys(2)
10
 * - boards by Sune Mai (Oct 2008) with minor cleanups by Hauke Daempfling
11
 * - (May 2010). See http://www.fpga4fun.com/forum/viewtopic.php?t=483&start=50
12
 * ----------------------------------------------------------------------------
13
 *
14
 * This program is free software; you may redistribute and/or modify it under
15
 * the terms of the GNU General Public License as published by the Free
16
 * Software Foundation, either version 2, or at your option any later version.
17
 *
18
 * This program is distributed in the hope that it will be useful, but
19
 * WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
20
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
21
 * for complete details.
22
 *
23
 * ----------------------------------------------------------------------------
24
 * Hardware-dependent code for usb_jtag
25
 *
26
 * Revision History:
27
 *
28
 * Date         Rev Version  Comment
29
 * 2011-12-30   447   1.0.1  move JTAG pin OE intoProgIO_Set_State()
30
 * 2011-12-29   446   1.0    Initial version (adapt&cleanup from hw_nexys2.c)
31
 *
32
 *-----------------------------------------------------------------------------
33
 */
34
 
35
#include <fx2regs.h>
36
#include "hardware.h"
37
#include "delay.h"
38
 
39
//-----------------------------------------------------------------------------
40
 
41
/* JTAG TCK, AS/PS DCLK */
42
 
43
sbit at 0xB4          TCK; /* Port D.4 */
44
#define bmTCKOE       bmBIT4
45
#define SetTCK(x)     do{TCK=(x);}while(0)
46
 
47
/* JTAG TDI, AS ASDI, PS DATA0 */
48
 
49
sbit at 0xB2          TDI; /* Port D.2 */
50
#define bmTDIOE       bmBIT2
51
#define SetTDI(x)     do{TDI=(x);}while(0)
52
 
53
/* JTAG TMS, AS/PS nCONFIG */
54
 
55
sbit at 0xB3          TMS; /* Port D.3 */
56
#define bmTMSOE       bmBIT3
57
#define SetTMS(x)     do{TMS=(x);}while(0)
58
 
59
/* JTAG TDO, AS/PS CONF_DONE */
60
 
61
sbit at 0xB0          TDO; /* Port D.0 */
62
#define bmTDOOE       bmBIT0 
63
#define GetTDO(x)     TDO
64
 
65
//-----------------------------------------------------------------------------
66
 
67
#define bmPROGOUTOE (bmTCKOE|bmTDIOE|bmTMSOE)
68
#define bmPROGINOE  (bmTDOOE)
69
 
70
//-----------------------------------------------------------------------------
71
 
72
void ProgIO_Poll(void)    {}
73
void ProgIO_Enable(void)  {}
74
// These aren't called anywhere in usbjtag.c so far, might come...
75
void ProgIO_Disable(void) {}
76
void ProgIO_Deinit(void)  {}
77
 
78
 
79
void ProgIO_Init(void)
80
{
81
  /* The following code depends on your actual circuit design.
82
     Make required changes _before_ you try the code! */
83
 
84
  // Note: JTAG signal output enables are in ProgIO_Set_State() below.
85
 
86
  mdelay(500);                              // wait for supply to come up
87
 
88
}
89
 
90
void ProgIO_Set_State(unsigned char d)
91
{
92
  /* Set state of output pins:
93
   *
94
   * d.0 => TCK
95
   * d.1 => TMS
96
   * d.4 => TDI
97
   */
98
 
99
  // JTAG signal output enables done at first request:
100
  //   this allows to use the JTAG connector with another JTAG cable
101
  //   alternatively.
102
  OED=(OED&~bmPROGINOE) | bmPROGOUTOE; // Output enable
103
 
104
  SetTCK((d & bmBIT0) ? 1 : 0);
105
  SetTMS((d & bmBIT1) ? 1 : 0);
106
  SetTDI((d & bmBIT4) ? 1 : 0);
107
}
108
 
109
//-----------------------------------------------------------------------------
110
// dummied AS/PS code
111
#define GetASDO(x)  1
112
 
113
unsigned char ProgIO_Set_Get_State(unsigned char d)
114
{
115
  /* Set state of output pins (s.a.)
116
   * then read state of input pins:
117
   *
118
   * TDO => d.0
119
   * DATAOUT => d.1 (only #ifdef HAVE_AS_MODE)
120
   */
121
 
122
  ProgIO_Set_State(d);
123
  return (GetASDO()<<1)|GetTDO();
124
}
125
 
126
//-----------------------------------------------------------------------------
127
 
128
void ProgIO_ShiftOut(unsigned char c)
129
{
130
  /* Shift out byte C:
131
   *
132
   * 8x {
133
   *   Output least significant bit on TDI
134
   *   Raise TCK
135
   *   Shift c right
136
   *   Lower TCK
137
   * }
138
   */
139
 
140
  (void)c; /* argument passed in DPL */
141
 
142
  _asm
143
        MOV  A,DPL
144
        ;; Bit0
145
        RRC  A
146
        MOV  _TDI,C
147
        SETB _TCK
148
        ;; Bit1
149
        RRC  A
150
        CLR  _TCK
151
        MOV  _TDI,C
152
        SETB _TCK
153
        ;; Bit2
154
        RRC  A
155
        CLR  _TCK
156
        MOV  _TDI,C
157
        SETB _TCK
158
        ;; Bit3
159
        RRC  A
160
        CLR  _TCK
161
        MOV  _TDI,C
162
        SETB _TCK
163
        ;; Bit4
164
        RRC  A
165
        CLR  _TCK
166
        MOV  _TDI,C
167
        SETB _TCK
168
        ;; Bit5
169
        RRC  A
170
        CLR  _TCK
171
        MOV  _TDI,C
172
        SETB _TCK
173
        ;; Bit6
174
        RRC  A
175
        CLR  _TCK
176
        MOV  _TDI,C
177
        SETB _TCK
178
        ;; Bit7
179
        RRC  A
180
        CLR  _TCK
181
        MOV  _TDI,C
182
        SETB _TCK
183
        NOP
184
        CLR  _TCK
185
        ret
186
  _endasm;
187
}
188
 
189
/*
190
;; For ShiftInOut, the timing is a little more
191
;; critical because we have to read _TDO/shift/set _TDI
192
;; when _TCK is low. But 20% duty cycle at 48/4/5 MHz
193
;; is just like 50% at 6 Mhz, and that's still acceptable
194
*/
195
 
196
unsigned char ProgIO_ShiftInOut(unsigned char c)
197
{
198
  /* Shift out byte C, shift in from TDO:
199
   *
200
   * 8x {
201
   *   Read carry from TDO
202
   *   Output least significant bit on TDI
203
   *   Raise TCK
204
   *   Shift c right, append carry (TDO) at left
205
   *   Lower TCK
206
   * }
207
   * Return c.
208
   */
209
 
210
   (void)c; /* argument passed in DPL */
211
 
212
  _asm
213
        MOV  A,DPL
214
 
215
        ;; Bit0
216
        MOV  C,_TDO
217
        RRC  A
218
        MOV  _TDI,C
219
        SETB _TCK
220
        CLR  _TCK
221
        ;; Bit1
222
        MOV  C,_TDO
223
        RRC  A
224
        MOV  _TDI,C
225
        SETB _TCK
226
        CLR  _TCK
227
        ;; Bit2
228
        MOV  C,_TDO
229
        RRC  A
230
        MOV  _TDI,C
231
        SETB _TCK
232
        CLR  _TCK
233
        ;; Bit3
234
        MOV  C,_TDO
235
        RRC  A
236
        MOV  _TDI,C
237
        SETB _TCK
238
        CLR  _TCK
239
        ;; Bit4
240
        MOV  C,_TDO
241
        RRC  A
242
        MOV  _TDI,C
243
        SETB _TCK
244
        CLR  _TCK
245
        ;; Bit5
246
        MOV  C,_TDO
247
        RRC  A
248
        MOV  _TDI,C
249
        SETB _TCK
250
        CLR  _TCK
251
        ;; Bit6
252
        MOV  C,_TDO
253
        RRC  A
254
        MOV  _TDI,C
255
        SETB _TCK
256
        CLR  _TCK
257
        ;; Bit7
258
        MOV  C,_TDO
259
        RRC  A
260
        MOV  _TDI,C
261
        SETB _TCK
262
        NOP
263
        CLR  _TCK
264
 
265
        MOV  DPL,A
266
        ret
267
  _endasm;
268
 
269
  /* return value in DPL */
270
 
271
  return c;
272
}
273
 
274
 

powered by: WebSVN 2.1.0

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