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

Subversion Repositories gpib_controller

[/] [gpib_controller/] [trunk/] [prototype_1/] [PC_software/] [gpib_src/] [GpibHwAdapter.h] - Blame information for rev 12

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 Andrewski
/*
2 12 Andrewski
*This file is part of fpga_gpib_controller.
3
*
4
* Fpga_gpib_controller is free software: you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation, either version 3 of the License, or
7
* (at your option) any later version.
8
*
9
* Fpga_gpib_controller is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with Fpga_gpib_controller.  If not, see <http://www.gnu.org/licenses/>.
16
*/
17
/*
18 3 Andrewski
 * GpibHwAdapter.h
19
 *
20
 *  Created on: 2012-01-29
21
 *      Author: Andrzej Paluch
22
 */
23
 
24
#ifndef __GPIB_HW_ADAPTER_H__
25
#define __GPIB_HW_ADAPTER_H__
26
 
27
#include "GpibTypes.h"
28
#include "GpibRegAccess.h"
29
 
30
/** Register addresses */
31
#define REG_ADDR_SETTING_0         0
32
#define REG_ADDR_SETTING_1         1
33
#define REG_ADDR_SEC_ADDR_0        2
34
#define REG_ADDR_SEC_ADDR_1        3
35
#define REG_ADDR_BUS_STATUS        4
36
#define REG_ADDR_EVENT             5
37
#define REG_ADDR_GPIB_STATUS       6
38
#define REG_ADDR_CONTROL           7
39
#define REG_ADDR_READER_CONTROL_0  8
40
#define REG_ADDR_READER_CONTROL_1  9
41
#define REG_ADDR_WRITER_CONTROL_0 10
42
#define REG_ADDR_WRITER_CONTROL_1 11
43
#define REG_ADDR_READER_FIFO      12
44
#define REG_ADDR_WRITER_FIFO      13
45
 
46
/* Setting 0 register masks. */
47
#define MASK_SETTING0_ton         0x8000
48
#define MASK_SETTING0_lon         0x4000
49
#define MASK_SETTING0_eosMark     6,0xFF
50
#define MASK_SETTING0_eosUsed     0x0020
51
#define MASK_SETTING0_fixedPpLine 2,0x7
52
#define MASK_SETTING0_lpeUsed     0x0002
53
#define MASK_SETTING0_isLeTe      0x0001
54
 
55
/* Setting 1 register masks. */
56
#define MASK_SETTING1_T1   5,0xFF
57
#define MASK_SETTING1_addr 0,0x1F
58
 
59
/* Secondary address register masks. */
60
// nothing to define
61
 
62
/* Bus status register masks. */
63
#define MASK_BUS_STATUS_REN  0x8000
64
#define MASK_BUS_STATUS_IFC  0x4000
65
#define MASK_BUS_STATUS_SRQ  0x2000
66
#define MASK_BUS_STATUS_EOI  0x1000
67
#define MASK_BUS_STATUS_NDAC 0x0800
68
#define MASK_BUS_STATUS_NRFD 0x0400
69
#define MASK_BUS_STATUS_DAV  0x0200
70
#define MASK_BUS_STATUS_ATN  0x0100
71
#define MASK_BUS_STATUS_DIO  0,0xFF
72
 
73
/* Event register masks. */
74
#define MASK_EVENT_IFC          0x8000
75
#define MASK_EVENT_ATN          0x4000
76
#define MASK_EVENT_REN          0x2000
77
#define MASK_EVENT_stb_received 0x1000
78
#define MASK_EVENT_ppr          0x0800
79
#define MASK_EVENT_srq          0x0400
80
#define MASK_EVENT_cwrd         0x0200
81
#define MASK_EVENT_cwrc         0x0100
82
#define MASK_EVENT_spa          0x0080
83
#define MASK_EVENT_atl          0x0040
84
#define MASK_EVENT_att          0x0020
85
#define MASK_EVENT_trg          0x0010
86
#define MASK_EVENT_clr          0x0008
87
#define MASK_EVENT_out_buf_full 0x0004
88
#define MASK_EVENT_in_buf_full  0x0002
89
#define MASK_EVENT_isLocal      0x0001
90
 
91
/* GPIB status register masks. */
92
#define MASK_GPIB_STATUS_isLocal        0x1000
93
#define MASK_GPIB_STATUS_spa            0x0800
94
#define MASK_GPIB_STATUS_cwrd           0x0400
95
#define MASK_GPIB_STATUS_cwrc           0x0200
96
#define MASK_GPIB_STATUS_lac            0x0100
97
#define MASK_GPIB_STATUS_atl            0x0080
98
#define MASK_GPIB_STATUS_tac            0x0040
99
#define MASK_GPIB_STATUS_att            0x0020
100
#define MASK_GPIB_STATUS_currentSecAddr 0,0x1F
101
 
102
/* Control register masks. */
103
#define MASK_CONTROL_rec_stb 0x2000
104
#define MASK_CONTROL_rpp     0x1000
105
#define MASK_CONTROL_tca     0x0800
106
#define MASK_CONTROL_tcs     0x0400
107
#define MASK_CONTROL_gts     0x0200
108
#define MASK_CONTROL_sre     0x0100
109
#define MASK_CONTROL_sic     0x0080
110
#define MASK_CONTROL_rsc     0x0040
111
#define MASK_CONTROL_lpe     0x0020
112
#define MASK_CONTROL_ist     0x0010
113
#define MASK_CONTROL_rsv     0x0008
114
#define MASK_CONTROL_rtl     0x0004
115
#define MASK_CONTROL_lun     0x0002
116
#define MASK_CONTROL_ltn     0x0001
117
 
118
/* Reader control 0 register masks. */
119
#define MASK_READER_CONTROL_0_dataSecAddr   4,0x1F
120
#define MASK_READER_CONTROL_0_resetBuffer   0x0008
121
#define MASK_READER_CONTROL_0_endOfStream   0x0004
122
#define MASK_READER_CONTROL_0_dataAvailable 0x0002
123
#define MASK_READER_CONTROL_0_bufInterrupt  0x0001
124
 
125
/* Reader control 1 register masks. */
126
#define MASK_READER_CONTROL_1_bytesInFifo 0,0xFFF
127
 
128
/* Writer control 0 register masks. */
129
#define MASK_WRITER_CONTROL_0_statusByte    9,0x7F
130
#define MASK_WRITER_CONTROL_0_dataSecAddr   4,0x1F
131
#define MASK_WRITER_CONTROL_0_resetBuffer   0x0008
132
#define MASK_WRITER_CONTROL_0_endOfStream   0x0004
133
#define MASK_WRITER_CONTROL_0_dataAvailable 0x0002
134
#define MASK_WRITER_CONTROL_0_bufInterrupt  0x0001
135
 
136
/* Writer control 1 register masks. */
137
#define MASK_WRITER_CONTROL_1_bytesInFifo 0,0xFFF
138
 
139
 
140
/** Encapsulates GPIB hardware adapter issues. */
141
struct GpibHwAdapter
142
{
143
        struct GpibRegAccess *regAccess;
144
        AddrType baseAddr;
145
};
146
 
147
///////////// do not use //////////////////////////
148
#define __GpibHwAdapter_getValue(reg, bitNum, valueMask)\
149
        ((reg >> bitNum) & valueMask)
150
 
151
#define __GpibHwAdapter_setValue(pReg, bitNum, valueMask, value)\
152
        *pReg &= ( ~(valueMask << bitNum) ) & 0xFFFF;\
153
        *pReg |= ((value) << bitNum) & (valueMask << bitNum);
154
///////////// end of - do not use //////////////////
155
 
156
/** Initializes GpibHwAdapter */
157
bool GpibHwAdapter_init(struct GpibHwAdapter *ghwa, struct GpibRegAccess *regAccess,
158
                AddrType baseAddr);
159
 
160
/** Releases GpibHwAdapter. */
161
void GpibHwAdapter_release(struct GpibHwAdapter *ghwa);
162
 
163
/** Gets register value. */
164
#define GpibHwAdapter_getReg(ghwa, regAddr, pvalue)\
165
        GpibRegAccess_readReg((ghwa)->regAccess,\
166
                (ghwa)->baseAddr + regAddr, pvalue)
167
 
168
/** Sets register value. */
169
#define GpibHwAdapter_setReg(ghwa, regAddr, value)\
170
        GpibRegAccess_writeReg((ghwa)->regAccess,\
171
                (ghwa)->baseAddr + regAddr, value)
172
 
173
/** Reads data fifo. */
174
#define GpibHwAdapter_readFifo(ghwa, buf, bufLen)\
175
        GpibRegAccess_repeatedlyRead((ghwa)->regAccess,\
176
                (ghwa)->baseAddr + REG_ADDR_READER_FIFO, buf, bufLen)
177
 
178
/** Writes to data fifo. */
179
#define GpibHwAdapter_writeFifo(ghwa, buf, bufLen)\
180
        GpibRegAccess_repeatedlyWrite((ghwa)->regAccess,\
181
                (ghwa)->baseAddr + REG_ADDR_WRITER_FIFO, buf, bufLen)
182
 
183
/** Gets register value's bit. */
184
#define GpibHwAdapter_getBitValue(reg, mask) ((reg & mask) != 0)
185
 
186
/** Sets register value's bit. */
187
#define GpibHwAdapter_setBitValue(pReg, mask, newValue)\
188
        if(newValue == 0) {\
189
                *pReg &= ( ~(mask) ) & 0xFFFF;\
190
        } else {\
191
                *pReg |= mask;\
192
        }
193
 
194
/** Gets register value's field. */
195
#define GpibHwAdapter_getFieldValue(reg, bitNumAndMask)\
196
        __GpibHwAdapter_getValue(reg, bitNumAndMask)
197
 
198
/** Sets register value's field. */
199
#define GpibHwAdapter_setFieldValue(pReg, bitNumAndMask, newValue)\
200
        __GpibHwAdapter_setValue(pReg, bitNumAndMask, newValue)
201
 
202
 
203
#endif /* __GPIB_HW_ADAPTER_H__ */

powered by: WebSVN 2.1.0

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