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