comparison gsm-fw/bsp/abb+spi/spi_drv.h @ 148:63750f70796d

gsm-fw/bsp/abb+spi: initial import from the Leonardo TCS211 version
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sat, 16 Nov 2013 19:03:37 +0000
parents
children 971e84124a6f
comparison
equal deleted inserted replaced
147:4ac657b95f52 148:63750f70796d
1 /**********************************************************************************/
2 /* TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION */
3 /* */
4 /* Property of Texas Instruments -- For Unrestricted Internal Use Only */
5 /* Unauthorized reproduction and/or distribution is strictly prohibited. This */
6 /* product is protected under copyright law and trade secret law as an */
7 /* unpublished work. Created 1987, (C) Copyright 1997 Texas Instruments. All */
8 /* rights reserved. */
9 /* */
10 /* */
11 /* Filename : spi_drv.h */
12 /* */
13 /* Description : SPI registers and bits definitions. */
14 /* Functions and macros to drive the SPI module. */
15 /* The Serial Port Interface is a bidirectional 3 lines */
16 /* interface dedicated to the transfer of data to and */
17 /* from up to 5 external devices offering a 3 lines */
18 /* serial interface. */
19 /* In this project, it is only used to connect the TI */
20 /* Analog BaseBand (ABB). */
21 /* It is assumed that the ABB is connected as the SPI */
22 /* device 0. */
23 /* */
24 /* This interface is specified to be compatible with */
25 /* the UMA1018M Philips, the FUJITSU MB15F02, the */
26 /* SIEMENS PMB2306T synthesizers and the TI ABB. */
27 /* */
28 /* This serial port is based on a looped shift-register */
29 /* thus allowing both transmit (PISO) and receive (SIPO) */
30 /* modes. */
31 /* */
32 /* */
33 /* Author : Pascal PUEL */
34 /* */
35 /* Version number : 1.28 */
36 /* */
37 /* Date and time : 07/01/03 */
38 /* */
39 /* Previous delta : Rework */
40 /* */
41 /**********************************************************************************/
42
43 #ifndef __SPI_DRV_H__
44 #define __SPI_DRV_H__
45
46 #include "l1sw.cfg"
47 #include "chipset.cfg"
48
49 #include "memif/mem.h"
50 #if (OP_L1_STANDALONE == 0)
51 #include "main/sys_types.h"
52 #else
53 #include "sys_types.h"
54 #endif
55
56 // SPI module registers definition
57 #define SPI_REG_SET1 (MEM_SPI + 0x00)
58 #define SPI_REG_SET2 (MEM_SPI + 0x02)
59 #define SPI_REG_CTRL (MEM_SPI + 0x04)
60 #define SPI_REG_STATUS (MEM_SPI + 0x06)
61 #define SPI_REG_TX_LSB (MEM_SPI + 0x08)
62 #define SPI_REG_TX_MSB (MEM_SPI + 0x0A)
63 #define SPI_REG_RX_LSB (MEM_SPI + 0x0C)
64 #define SPI_REG_RX_MSB (MEM_SPI + 0x0E)
65
66
67 // SPI module bits definition of register SPI_REG_SET1
68 #define SPI_CLK_OFF 0x0000 // default value
69 #define SPI_CLK_ON 0x0001
70 #define SPI_CLOCK_DIV_1 0x0000 // default value
71 #define SPI_CLOCK_DIV_2 0x0002
72 #define SPI_CLOCK_DIV_4 0x0004
73 #define SPI_CLOCK_DIV_8 0x0006
74 #define SPI_CLOCK_DIV_16 0x0008
75 #if (CHIPSET == 12)
76 #define SPI_CLOCK_DIV_32 0x000A
77 #define SPI_CLOCK_DIV_64 0x000C
78 #define SPI_CLOCK_DIV_128 0x000E
79 #endif
80 #define SPI_IT_MASK_0 0x0010 // default value
81 #define SPI_IT_DEMASK_0 0x0000
82 #define SPI_IT_MASK_1 0x0020 // default value
83 #define SPI_IT_DEMASK_1 0x0000
84
85
86 // SPI module bits definition of register SPI_REG_SET2
87 #define SPI_CLK_EDG_FALL 0x0000 // default value for device 0
88 #define SPI_CLK_EDG_RISE 0x0001
89 #define SPI_CLK_EDG_FALL_1 0x0000 // default value for device 1
90 #define SPI_CLK_EDG_RISE_1 0x0002
91 #define SPI_CLK_EDG_FALL_2 0x0000 // default value for device 2
92 #define SPI_CLK_EDG_RISE_2 0x0004
93 #define SPI_CLK_EDG_FALL_3 0x0000 // default value for device 3
94 #define SPI_CLK_EDG_RISE_3 0x0008
95 #define SPI_CLK_EDG_FALL_4 0x0000 // default value for device 4
96 #define SPI_CLK_EDG_RISE_4 0x0010
97 #define SPI_NTSPEN_NEG_LEV 0x0000 // default value for device 0
98 #define SPI_NTSPEN_POS_LEV 0x0020
99 #define SPI_NTSPEN_NEG_LEV_1 0x0000 // default value for device 1
100 #define SPI_NTSPEN_POS_LEV_1 0x0040
101 #define SPI_NTSPEN_NEG_LEV_2 0x0000 // default value for device 2
102 #define SPI_NTSPEN_POS_LEV_2 0x0080
103 #define SPI_NTSPEN_NEG_LEV_3 0x0000 // default value for device 3
104 #define SPI_NTSPEN_POS_LEV_3 0x0100
105 #define SPI_NTSPEN_NEG_LEV_4 0x0000 // default value for device 4
106 #define SPI_NTSPEN_POS_LEV_4 0x0200
107 #define SPI_NTSPEN_LEV_TRIG 0x0000 // default value for device 0
108 #define SPI_NTSPEN_EDG_TRIG 0x0400
109 #define SPI_NTSPEN_LEV_TRIG_1 0x0000 // default value for device 1
110 #define SPI_NTSPEN_EDG_TRIG_1 0x0800
111 #define SPI_NTSPEN_LEV_TRIG_2 0x0000 // default value for device 2
112 #define SPI_NTSPEN_EDG_TRIG_2 0x1000
113 #define SPI_NTSPEN_LEV_TRIG_3 0x0000 // default value for device 3
114 #define SPI_NTSPEN_EDG_TRIG_3 0x2000
115 #define SPI_NTSPEN_LEV_TRIG_4 0x0000 // default value for device 4
116 #define SPI_NTSPEN_EDG_TRIG_4 0x4000
117
118
119 // SPI module bits definition of register SPI_REG_CTRL
120 #define SPI_RDWR_DEACTIV 0x0000 // default value
121 #define SPI_RDWR_ACTIV 0x0001
122 #define SPI_WR_DEACTIV 0x0000 // default value
123 #define SPI_WR_ACTIV 0x0002
124 #define SPI_WNB_0 0x0000 // default value
125 #define SPI_WNB_1 0x0004
126 #define SPI_WNB_2 0x0008
127 #define SPI_WNB_3 0x000c
128 #define SPI_WNB_4 0x0010
129 #define SPI_WNB_5 0x0014
130 #define SPI_WNB_6 0x0018
131 #define SPI_WNB_7 0x001c
132 #define SPI_WNB_8 0x0020
133 #define SPI_WNB_9 0x0024
134 #define SPI_WNB_10 0x0028
135 #define SPI_WNB_11 0x002c
136 #define SPI_WNB_12 0x0030
137 #define SPI_WNB_13 0x0034
138 #define SPI_WNB_14 0x0038
139 #define SPI_WNB_15 0x003c
140 #define SPI_WNB_16 0x0040
141 #define SPI_WNB_17 0x0044
142 #define SPI_WNB_18 0x0048
143 #define SPI_WNB_19 0x004c
144 #define SPI_WNB_20 0x0050
145 #define SPI_WNB_21 0x0054
146 #define SPI_WNB_22 0x0058
147 #define SPI_WNB_23 0x005c
148 #define SPI_WNB_24 0x0060
149 #define SPI_WNB_25 0x0064
150 #define SPI_WNB_26 0x0068
151 #define SPI_WNB_27 0x006c
152 #define SPI_WNB_28 0x0070
153 #define SPI_WNB_29 0x0074
154 #define SPI_WNB_30 0x0078
155 #define SPI_WNB_31 0x007c
156
157
158 // SPI possible device IDs
159 #define SPI_DEV0 0x0000
160 #define SPI_DEV1 0x0080
161 #define SPI_DEV2 0x0100
162 #define SPI_DEV3 0x0180
163 #define SPI_DEV4 0x0200
164
165 // ABB should be mapped as device 0
166 #define ABB SPI_DEV0
167
168
169 // SPI module bits definition of register SPI_REG_STATUS
170 #define RE_ST 0x0001 // bit 0
171 #define WE_ST 0x0002 // bit 1
172
173
174 /* The ARM emulator requires the spi clock always ON to be able to access */
175 /* spi registers through a window.*/
176 /* But it's better to stop the SPI clock in the GSM application to reduce the power consumption. */
177 /* Validate the next line to reduce power consumption */
178 //#define SPI_CLK_LOW_POWER
179
180
181
182 // STRUCTURES
183 typedef struct
184 {
185 SYS_UWORD16 PrescVal;
186 SYS_UWORD16 DataTrLength;
187 SYS_UWORD16 DevAddLength;
188 SYS_UWORD16 DevId;
189 SYS_UWORD16 ClkEdge;
190 SYS_UWORD16 TspEnLevel;
191 SYS_UWORD16 TspEnForm;
192 }T_SPI_DEV; // T_SPI_DEV is used to define an SPI device
193
194
195 // MACROS
196 #define SPI_WRITE_TX_LSB(TxLsb) { \
197 * (volatile SYS_UWORD16 *) SPI_REG_TX_LSB = TxLsb; }
198
199 #define SPI_WRITE_TX_MSB(TxMsb) { \
200 * (volatile SYS_UWORD16 *) SPI_REG_TX_MSB = TxMsb; }
201
202 #define SPI_START_WRITE {* (volatile SYS_UWORD16 *) SPI_REG_CTRL |= SPI_WR_ACTIV; }
203
204 #define SPI_START_READ {* (volatile SYS_UWORD16 *) SPI_REG_CTRL |= SPI_RDWR_ACTIV; }
205
206 #define SPI_CLK_DISABLE { \
207 * (volatile SYS_UWORD16 *) SPI_REG_SET1 &= ~SPI_CLK_ON; }
208
209 #define SPI_CLK_ENABLE { \
210 * (volatile SYS_UWORD16 *) SPI_REG_SET1 |= SPI_CLK_ON; }
211
212 #define SPI_MaskIT_WR { \
213 * (volatile SYS_UWORD16 *) SPI_REG_SET1 |= SPI_IT_MASK_0; }
214
215 #define SPI_MaskIT_RD { \
216 * (volatile SYS_UWORD16 *) SPI_REG_SET1 |= SPI_IT_MASK_1; }
217
218 #define SPI_Mask_All_IT { \
219 * (volatile SYS_UWORD16 *) SPI_REG_SET1 |= (SPI_IT_MASK_0 | SPI_IT_MASK_1); }
220
221 #define SPI_UnmaskIT_WR { \
222 * (volatile SYS_UWORD16 *) SPI_REG_SET1 &= ~SPI_IT_MASK_0; }
223
224 #define SPI_UnmaskIT_RD { \
225 * (volatile SYS_UWORD16 *) SPI_REG_SET1 &= ~SPI_IT_MASK_1; }
226
227 #define SPI_Unmask_All_IT { \
228 * (volatile SYS_UWORD16 *) SPI_REG_SET1 &= ~(SPI_IT_MASK_0 | SPI_IT_MASK_1); }
229
230 #define SPI_Ready_for_WR { \
231 * (volatile SYS_UWORD16 *) SPI_REG_SET1 |= (SPI_CLK_ON | SPI_IT_MASK_0); }
232
233 #define SPI_Ready_for_RD { \
234 * (volatile SYS_UWORD16 *) SPI_REG_SET1 |= (SPI_CLK_ON | SPI_IT_MASK_1); }
235
236 #define SPI_Ready_for_RDWR { \
237 * (volatile SYS_UWORD16 *) SPI_REG_SET1 |= (SPI_CLK_ON | SPI_IT_MASK_0 | SPI_IT_MASK_1); }
238
239
240
241 // INLINE FUNCTIONS
242 /*-----------------------------------------------------------------------*/
243 /* SPI_ReadRX_LSB() */
244 /* */
245 /* This function returns the value of SPI_REG_RX_LSB register */
246 /* */
247 /*-----------------------------------------------------------------------*/
248 static inline SYS_UWORD16 SPI_ReadRX_LSB(void)
249 {
250 return * (volatile SYS_UWORD16 *) SPI_REG_RX_LSB;
251 }
252
253
254 /*-----------------------------------------------------------------------*/
255 /* SPI_ReadRX_MSB() */
256 /* */
257 /* This function returns the value of SPI_REG_RX_MSB register */
258 /* */
259 /*-----------------------------------------------------------------------*/
260 static inline SYS_UWORD16 SPI_ReadRX_MSB(void)
261 {
262 return * (volatile SYS_UWORD16 *) SPI_REG_RX_MSB;
263 }
264
265
266
267 /*-----------------------------------------------------------------------*/
268 /* SPI_ReadStatus() */
269 /* */
270 /* This function returns the value of SPI_REG_STATUS register */
271 /* */
272 /*-----------------------------------------------------------------------*/
273 static inline SYS_UWORD16 SPI_ReadStatus(void)
274 {
275 return * (volatile SYS_UWORD16 *) SPI_REG_STATUS;
276 }
277
278
279
280 // PROTOTYPES
281 void SPI_InitDev(T_SPI_DEV *Device);
282
283 #endif // __SPI_DRV_H__