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

Subversion Repositories pss

[/] [pss/] [trunk/] [pss/] [SW/] [terminal/] [pss.tcl] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 AlexAntono
set sync_byte       \x55
2
set escape_byte     \x5a
3
set idcode_cmd      \x00
4
set rst_cmd         \x80
5
set wr_cmd          \x81
6
set rd_cmd          \x82
7
set wr_cmd_noinc    \x83
8
set rd_cmd_noinc    \x84
9
 
10
set reg_cpu_control_addr    0x40000000
11
set reg_cpu_pc_addr         0x40000004
12
set reg_cpu_a31_addr        0x40000008
13
set reg_dbg_a31_addr        0x4000000C
14
 
15
set reg_intc_control_addr   0x40000010
16
set reg_intc_mask_addr      0x40000014
17
set reg_intc_req_addr       0x40000018
18
set reg_memsize_kb_addr     0x4000001C
19
 
20
set reg_dma_control_addr    0x40000020
21
set reg_dma_sourceaddr_addr 0x40000024
22
set reg_dma_destaddr_addr   0x40000028
23
set reg_dma_size_addr       0x4000002C
24
 
25
set reg_sgi_addr            0x40000030
26
set reg_bus_error_addr_addr 0x40000038
27
set reg_bus_error_pc_addr   0x4000003C
28
 
29
set reg_trap_control_addr   0x40000040
30
set reg_trap_addr_addr      0x40000044
31
 
32
proc pss_connect {com_num baudrate} {
33
    global com
34
    set parity n
35
    set databits 8
36
    set stopbits 1
37
 
38
    set com [open $com_num: r+]
39
    fconfigure $com -mode $baudrate,$parity,$databits,$stopbits \
40
        -blocking 1 -translation binary -buffering none -buffersize 16 -timeout 1000
41
}
42
 
43
 
44
proc pss_con {com_num baudrate} {
45
    pss_connect $com_num $baudrate
46
}
47
 
48
 
49
proc pss_disconnect {} {
50
    global com
51
 
52
    close $com
53
    puts "Connection dropped"
54
}
55
 
56
 
57
proc pss_discon {} {
58
    pss_disconnect
59
}
60
 
61
 
62
proc pss_check {} {
63
    global com
64
    global sync_byte
65
    global idcode_cmd
66
 
67
    puts -nonewline $com $sync_byte
68
    puts -nonewline $com $idcode_cmd
69
    after 100
70
    set resp [read -nonewline $com]
71
 
72
    binary scan $resp H* resp_char
73
 
74
    if {$resp == $sync_byte} {puts "Connection established, response: $resp_char"} \
75
    else {puts "Conection failed, response: $resp_char"}
76
}
77
 
78
 
79
proc pss_cc {com_num baudrate} {
80
    pss_connect $com_num $baudrate
81
    pss_check
82
}
83
 
84
proc pss_sendbyte {databyte} {
85
    global com
86
    global sync_byte
87
    global escape_byte
88
 
89
    if {$databyte == $sync_byte || $databyte == $escape_byte} {puts -nonewline $com $escape_byte}
90
    puts -nonewline $com $databyte
91
}
92
 
93
proc pss_sendword {dataword} {
94
    set byte0 [format %c [expr [expr {$dataword & 0x000000ff}] >> 0]]
95
    set byte1 [format %c [expr [expr {$dataword & 0x0000ff00}] >> 8]]
96
    set byte2 [format %c [expr [expr {$dataword & 0x00ff0000}] >> 16]]
97
    set byte3 [format %c [expr [expr {$dataword & 0xff000000}] >> 24]]
98
    pss_sendbyte $byte0
99
    pss_sendbyte $byte1
100
    pss_sendbyte $byte2
101
    pss_sendbyte $byte3
102
}
103
 
104
 
105
proc pss_wr {address datawords} {
106
    global com
107
    global sync_byte
108
    global wr_cmd
109
 
110
    # header
111
    puts -nonewline $com $sync_byte
112
    puts -nonewline $com $wr_cmd
113
 
114
    # address
115
    pss_sendword $address
116
 
117
    #length
118
    set trlength [expr [llength $datawords] << 2]
119
    pss_sendword $trlength
120
 
121
    # data
122
    foreach dataword $datawords {
123
        pss_sendword $dataword
124
    }
125
}
126
 
127
 
128
proc pss_rd {address length} {
129
    global com
130
    global sync_byte
131
    global rd_cmd
132
 
133
    # clean input buffers
134
    read $com
135
 
136
    # header
137
    puts -nonewline $com $sync_byte
138
    puts -nonewline $com $rd_cmd
139
 
140
    # address
141
    pss_sendword $address
142
 
143
    #length
144
    pss_sendword $length
145
 
146
    set finaddr [expr $length + $address]
147
 
148
    set resp ""
149
    # data
150
    for {set curaddr $address} {$curaddr < $finaddr} {incr curaddr 4} {
151
        set str ""
152
        set resp0 [read $com 1]
153
        set resp1 [read $com 1]
154
        set resp2 [read $com 1]
155
        set resp3 [read $com 1]
156
        binary scan $resp0 H2 resp_show0
157
        binary scan $resp1 H2 resp_show1
158
        binary scan $resp2 H2 resp_show2
159
        binary scan $resp3 H2 resp_show3
160
        append str "0x"
161
        append str $resp_show3
162
        append str $resp_show2
163
        append str $resp_show1
164
        append str $resp_show0
165
        lappend resp $str
166
    }
167
 
168
    return $resp
169
}
170
 
171
 
172
proc pss_wrfile_le {address filename} {
173
    global com
174
    global sync_byte
175
    global wr_cmd
176
 
177
    set datafile [open $filename]
178
    fconfigure $datafile -translation binary -encoding binary
179
 
180
    # header
181
    puts -nonewline $com $sync_byte
182
    puts -nonewline $com $wr_cmd
183
 
184
    # address
185
    pss_sendword $address
186
 
187
    #length
188
    set length [file size $filename]
189
    pss_sendword $length
190
 
191
    while {true} {
192
 
193
        set dbuf0 [read $datafile 1]
194
        set dbuf1 [read $datafile 1]
195
        set dbuf2 [read $datafile 1]
196
        set dbuf3 [read $datafile 1]
197
        if {[eof $datafile]} {break}
198
 
199
        pss_sendbyte $dbuf0
200
        pss_sendbyte $dbuf1
201
        pss_sendbyte $dbuf2
202
        pss_sendbyte $dbuf3
203
 
204
        incr address 4
205
    }
206
 
207
    close $datafile
208
}
209
 
210
 
211
proc pss_wrfile_be {address filename} {
212
    global com
213
    global sync_byte
214
    global wr_cmd
215
 
216
    set datafile [open $filename]
217
    fconfigure $datafile -translation binary -encoding binary
218
 
219
    # header
220
    puts -nonewline $com $sync_byte
221
    puts -nonewline $com $wr_cmd
222
 
223
    # address
224
    pss_sendword $address
225
 
226
    #length
227
    set length [file size $filename]
228
    pss_sendword $length
229
 
230
    while {true} {
231
 
232
        set dbuf0 [read $datafile 1]
233
        set dbuf1 [read $datafile 1]
234
        set dbuf2 [read $datafile 1]
235
        set dbuf3 [read $datafile 1]
236
        if {[eof $datafile]} {break}
237
 
238
        pss_sendbyte $dbuf3
239
        pss_sendbyte $dbuf2
240
        pss_sendbyte $dbuf1
241
        pss_sendbyte $dbuf0
242
 
243
        incr address 4
244
    }
245
 
246
    close $datafile
247
}
248
 
249
 
250
proc pss_reset {} {
251
    global reg_cpu_control_addr
252
 
253
    pss_wr $reg_cpu_control_addr 0x00000001
254
    puts "CPU put in reset state"
255
}
256
 
257
 
258
proc pss_start {} {
259
    global reg_cpu_control_addr
260
 
261
    pss_wr $reg_cpu_control_addr 0x00000000
262
    puts "CPU started"
263
}
264
 
265
 
266
proc pss_restart {} {
267
    pss_reset
268
    pss_start
269
}
270
 
271
 
272
proc pss_loadbin {filename} {
273
    pss_reset
274
    pss_wrfile_be 0x00000000 $filename
275
    pss_start
276
}
277
 
278
 
279
proc pss_dma_wr {address datawords} {
280
    global reg_dma_sourceaddr_addr
281
    global reg_dma_destaddr_addr
282
    global reg_dma_size_addr
283
    global reg_dma_control_addr
284
 
285
    pss_reset
286
    pss_wr 0x00000000 $datawords
287
    pss_wr $reg_dma_sourceaddr_addr 0x00000000
288
    pss_wr $reg_dma_destaddr_addr $address
289
    set trlength [expr [llength $datawords] << 2]
290
    pss_wr $reg_dma_size_addr $trlength
291
    pss_wr $reg_dma_control_addr 0x00000006
292
}
293
 
294
 
295
proc pss_sgi {} {
296
    global reg_sgi_addr
297
 
298
    pss_wr $reg_sgi_addr 0x00000000
299
}
300
 
301
 
302 8 AlexAntono
pss_cc com3 115200
303
pss_loadbin "<path-to-svn>/pss/trunk/pss/SW/onboard/Heartbeatdelay/heartbeatdelay.bin"
304 7 AlexAntono
pss_discon

powered by: WebSVN 2.1.0

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