source: PlatformSupport/CustomPeripherals/pcores/radio_controller_v3_00_b/src/radio_controller.h

Last change on this file was 1766, checked in by murphpo, 12 years ago
File size: 13.5 KB
Line 
1/*****************************************************************************
2* Filename:          C:\work\svn_work\mango-dev\MyProcessorIPLib/drivers/radio_controller_v3_00_a/src/radio_controller.h
3* Version:           3.00.a
4* Description:       radio_controller Driver Header File
5* Date:              Wed Jul 04 20:56:03 2012 (by Create and Import Peripheral Wizard)
6*****************************************************************************/
7
8#ifndef RADIO_CONTROLLER_H
9#define RADIO_CONTROLLER_H
10
11/***************************** Include Files *******************************/
12
13#include "xbasic_types.h"
14#include "xstatus.h"
15#include "xil_io.h"
16
17int radio_controller_init(u32 ba, u32 rfSel, u8 clkDiv_SPI, u8 clkDiv_TxDelays);
18int radio_controller_TxEnable(u32 ba, u32 rfSel);
19int radio_controller_RxEnable(u32 ba, u32 rfSel);
20int radio_controller_TxRxDisable(u32 ba, u32 rfSel);
21int radio_controller_setCenterFrequency(u32 ba, u32 rfSel, u8 bandSel, u8 chanNum);
22u16 radio_controller_SPI_read(u32 ba, u32 rfSel, u8 regAddr);
23int radio_controller_SPI_setRegBits(u32 ba, u32 rfSel, u8 regAddr, u16 regDataMask, u16 regData);
24int radio_controller_setRadioParam(u32 ba, u32 rfSel, u32 paramID, u32 paramVal);
25int radio_controller_setTxGainSource(u32 ba, u32 rfSel, u8 gainSrc);
26int radio_controller_setRxGainSource(u32 ba, u32 rfSel, u8 gainSrc);
27int radio_controller_apply_TxDCO_calibration(u32 ad_ba, u32 iic_ba, u32 rfSel);
28int radio_controller_setCtrlSource(u32 ba, u32 rfSel, u32 ctrlSrcMask, u8 ctrlSrc);
29int radio_controller_setRxHP(u32 ba, u32 rfSel, u8 mode);
30int radio_controller_setTxGainTarget(u32 ba, u32 rfSel, u8 gainTarget);
31void rc_usleep(int d);
32
33/************************** Constant Definitions ***************************/
34
35#define RC_USER_SLV_SPACE_OFFSET (0x00000000)
36#define RC_SLV_REG0_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000000)
37#define RC_SLV_REG1_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000004)
38#define RC_SLV_REG2_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000008)
39#define RC_SLV_REG3_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x0000000C)
40#define RC_SLV_REG4_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000010)
41#define RC_SLV_REG5_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000014)
42#define RC_SLV_REG6_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000018)
43#define RC_SLV_REG7_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x0000001C)
44#define RC_SLV_REG8_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000020)
45#define RC_SLV_REG9_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000024)
46#define RC_SLV_REG10_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000028)
47#define RC_SLV_REG11_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x0000002C)
48#define RC_SLV_REG12_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000030)
49#define RC_SLV_REG13_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000034)
50#define RC_SLV_REG14_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000038)
51#define RC_SLV_REG15_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x0000003C)
52#define RC_SLV_REG16_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000040)
53#define RC_SLV_REG17_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000044)
54#define RC_SLV_REG18_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000048)
55#define RC_SLV_REG19_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x0000004C)
56#define RC_SLV_REG20_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000050)
57#define RC_SLV_REG21_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000054)
58#define RC_SLV_REG22_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000058)
59#define RC_SLV_REG23_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x0000005C)
60#define RC_SLV_REG24_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000060)
61#define RC_SLV_REG25_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000064)
62#define RC_SLV_REG26_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000068)
63#define RC_SLV_REG27_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x0000006C)
64#define RC_SLV_REG28_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000070)
65#define RC_SLV_REG29_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000074)
66#define RC_SLV_REG30_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000078)
67#define RC_SLV_REG31_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x0000007C)
68#define RC_SLV_REG32_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000080)
69#define RC_SLV_REG33_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000084)
70#define RC_SLV_REG34_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000088)
71#define RC_SLV_REG35_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x0000008C)
72#define RC_SLV_REG36_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000090)
73#define RC_SLV_REG37_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000094)
74#define RC_SLV_REG38_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x00000098)
75#define RC_SLV_REG39_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x0000009C)
76#define RC_SLV_REG40_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000A0)
77#define RC_SLV_REG41_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000A4)
78#define RC_SLV_REG42_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000A8)
79#define RC_SLV_REG43_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000AC)
80#define RC_SLV_REG44_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000B0)
81#define RC_SLV_REG45_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000B4)
82#define RC_SLV_REG46_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000B8)
83#define RC_SLV_REG47_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000BC)
84#define RC_SLV_REG48_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000C0)
85#define RC_SLV_REG49_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000C4)
86#define RC_SLV_REG50_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000C8)
87#define RC_SLV_REG51_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000CC)
88#define RC_SLV_REG52_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000D0)
89#define RC_SLV_REG53_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000D4)
90#define RC_SLV_REG54_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000D8)
91#define RC_SLV_REG55_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000DC)
92#define RC_SLV_REG56_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000E0)
93#define RC_SLV_REG57_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000E4)
94#define RC_SLV_REG58_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000E8)
95#define RC_SLV_REG59_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000EC)
96#define RC_SLV_REG60_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000F0)
97#define RC_SLV_REG61_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000F4)
98#define RC_SLV_REG62_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000F8)
99#define RC_SLV_REG63_OFFSET (RC_USER_SLV_SPACE_OFFSET + 0x000000FC)
100
101
102/***** Register Masks ********
103 * See comments in user_logic.v for full address map
104*******************************/
105
106//Control source bits: 0=use registers, 1=use hardware ports (usr_* in HDL)
107
108//Per-RF chain masks, shared by registers 0, 2, 3, 11 below
109#define RC_CTRLREGMASK_RFA              0x000000FF
110#define RC_CTRLREGMASK_RFB              0x0000FF00
111#define RC_CTRLREGMASK_RFC              0x00FF0000
112#define RC_CTRLREGMASK_RFD              0xFF000000
113
114//register 0 masks
115#define RC_REG0_TXEN            0x80808080
116#define RC_REG0_RXEN            0x40404040
117#define RC_REG0_RXHP            0x20202020
118#define RC_REG0_SHDN            0x10101010
119
120#define RC_REG0_TXEN_CTRLSRC    0x08080808
121#define RC_REG0_RXEN_CTRLSRC    0x04040404
122#define RC_REG0_RXHP_CTRLSRC    0x02020202
123#define RC_REG0_SHDN_CTRLSRC    0x01010101
124
125#define RC_REG0_ALL_CTRLSRC     0x0F0F0F0F
126
127//register 1 masks
128#define RC_REG1_DLY_PAEN        0x00FF0000
129#define RC_REG1_DLY_TXEN        0x0000FF00
130#define RX_REG1_DLY_PHY         0x000000FF
131
132//register 2 masks
133#define RC_REG2_TXGAIN          0x3F3F3F3F
134#define RC_REG2_TXGAIN_CTRLSRC  0x80808080
135
136//register 3 masks
137#define RC_REG3_RXGAIN_BB       0x1F1F1F1F
138#define RC_REG3_RXGAIN_RF       0x60606060
139#define RC_REG3_RXGAIN_CTRLSRC  0x80808080
140
141//register 4 masks
142#define RC_REG4_CLKDIV_SPI      0x00000070
143#define RC_REG4_CLKDIV_SPI_SHIFT    4
144
145#define RC_REG4_CLKDIV_TXDLY    0x00000003
146#define RC_REG4_CLKDIV_TXDLY_SHIFT  0
147
148//register 5 masks
149#define RC_REG5_RFSEL_RFD       0x80000000
150#define RC_REG5_RFSEL_RFC       0x40000000
151#define RC_REG5_RFSEL_RFB       0x20000000
152#define RC_REG5_RFSEL_RFA       0x10000000
153#define RC_REG5_RFSEL_ALL       (RC_REG5_RFSEL_RFA | RC_REG5_RFSEL_RFB | RC_REG5_RFSEL_RFC | RC_REG5_RFSEL_RFD)
154
155#define RC_REG5_REGADDR         0x000F0000
156#define RF_REG5_REGADDR_SHIFT   16
157#define RC_REG5_REGDATA         0x00003FFF
158
159//easier macros for user code
160#define RC_RFA      RC_REG5_RFSEL_RFA
161#define RC_RFB      RC_REG5_RFSEL_RFB
162#define RC_RFC      RC_REG5_RFSEL_RFC
163#define RC_RFD      RC_REG5_RFSEL_RFD
164#define RC_ANY_RF   RC_REG5_RFSEL_ALL
165
166#define RC_TXEN_CTRLSRC RC_REG0_TXEN_CTRLSRC
167#define RC_RXEN_CTRLSRC RC_REG0_RXEN_CTRLSRC
168#define RC_RXHP_CTRLSRC RC_REG0_RXHP_CTRLSRC
169#define RC_SHDN_CTRLSRC RC_REG0_SHDN_CTRLSRC
170
171
172//registers 6-10 are reserved (implemented as 32-bit RW, not tied to external ports)
173
174//register 11 masks
175#define RC_REG11_TXEN           0x80808080
176#define RC_REG11_RXEN           0x40404040
177#define RC_REG11_RXHP           0x20202020
178#define RC_REG11_SHDN           0x10101010
179#define RC_REG11_LD             0x08080808
180#define RC_REG11_SPI_ACTIVE     0x04040404
181#define RC_REG11_24PA_ACTIVE    0x02020202
182#define RC_REG11_5PA_ACTIVE     0x01010101
183
184
185//registers 12-24 are mirror regs for RFA
186//registers 25-37 are mirror regs for RFB
187//registers 38-50 are mirror regs for RFC
188//registers 51-63 are mirror regs for RFD
189#define RC_SPI_MIRRORREGS_RFA_BASEADDR      RC_SLV_REG12_OFFSET
190#define RC_SPI_MIRRORREGS_RFB_BASEADDR      RC_SLV_REG25_OFFSET
191#define RC_SPI_MIRRORREGS_RFC_BASEADDR      RC_SLV_REG38_OFFSET
192#define RC_SPI_MIRRORREGS_RFD_BASEADDR      RC_SLV_REG51_OFFSET
193
194#define RC_EEPROM_TXDCO_ADDR_RFA_I          16364   
195#define RC_EEPROM_TXDCO_ADDR_RFA_Q          16366   
196#define RC_EEPROM_TXDCO_ADDR_RFB_I          16368   
197#define RC_EEPROM_TXDCO_ADDR_RFB_Q          16370   
198
199/********** Macros **********/
200#define radio_controller_setCtrlSrc(ba, rfSel, x)   (Xil_Out32(ba+RC_SLV_REG0_OFFSET, \
201                                                    (Xil_In32(ba+RC_SLV_REG0_OFFSET) & ~(RC_REG0_RXEN & rfSel)) | \
202                                                    (RC_REG0_TXEN & rfSel) | (RC_REG0_SHDN & rfSel)))
203
204
205#define radio_controller_setClkDiv_SPI(ba, x)       (Xil_Out32(ba+RC_SLV_REG4_OFFSET, \
206                                                     ((Xil_In32(ba+RC_SLV_REG4_OFFSET)&(~RC_REG4_CLKDIV_SPI)) | \
207                                                     ((x<<RC_REG4_CLKDIV_SPI_SHIFT) & RC_REG4_CLKDIV_SPI))))
208
209#define radio_controller_setClkDiv_TxDelays(ba, x)      (Xil_Out32(ba+RC_SLV_REG4_OFFSET, \
210                                                     ((Xil_In32(ba+RC_SLV_REG4_OFFSET)&(~RC_REG4_CLKDIV_TXDLY)) | \
211                                                     ((x<<RC_REG4_CLKDIV_TXDLY_SHIFT) & RC_REG4_CLKDIV_TXDLY))))
212
213//TxEn, RxEn and SHDN are mutually exclusive in normal operation, so asserting one here forces the others off for the selected RF paths
214// TxEn/RxEn are active high, SHDN is active low
215// TxEn: reg0 <= (current reg0 with selected RxEn deasserted) + (selected TxEn asserted) + (selected SHDN deasserted)
216#define radio_controller_setMode_Tx(ba, rfSel)      (Xil_Out32(ba+RC_SLV_REG0_OFFSET, \
217                                                    (Xil_In32(ba+RC_SLV_REG0_OFFSET) & ~(RC_REG0_RXEN & rfSel)) | \
218                                                    (RC_REG0_TXEN & rfSel) | (RC_REG0_SHDN & rfSel)))
219
220// RxEn: reg0 <= (current reg0 with selected TxEn deasserted) + (selected TxEn asserted) + (selected SHDN deasserted)
221#define radio_controller_setMode_Rx(ba, rfSel)      (Xil_Out32(ba+RC_SLV_REG0_OFFSET, \
222                                                    (Xil_In32(ba+RC_SLV_REG0_OFFSET) & ~(RC_REG0_TXEN & rfSel)) | \
223                                                    (RC_REG0_RXEN & rfSel) | (RC_REG0_SHDN & rfSel)))
224
225// Shutdown: reg0 <= (current reg0 with selected Tx, Rx deasserted) + (selected SHDN asserted)
226#define radio_controller_setMode_shutdown(ba, rfSel)    (Xil_Out32(ba+RC_SLV_REG0_OFFSET, \
227                                                    (Xil_In32(ba+RC_SLV_REG0_OFFSET) & ~((RC_REG0_TXEN | RC_REG0_RXEN | RC_REG0_SHDN) & rfSel))))
228
229// Standby: reg0 <= (current reg0 with selected Tx, Rx, SHDN deasserted)
230#define radio_controller_setMode_standby(ba, rfSel) (Xil_Out32(ba+RC_SLV_REG0_OFFSET, \
231                                                    (Xil_In32(ba+RC_SLV_REG0_OFFSET) & ~((RC_REG0_TXEN | RC_REG0_RXEN) & rfSel)) | \
232                                                    (RC_REG0_SHDN & rfSel)))
233
234// Reset: reg0 <= (current reg0 with selected Tx, Rx, SHDN asserted)
235#define radio_controller_setMode_reset(ba, rfSel)   (Xil_Out32(ba+RC_SLV_REG0_OFFSET, \
236                                                    (Xil_In32(ba+RC_SLV_REG0_OFFSET) & ~(RC_REG0_SHDN & rfSel)) | \
237                                                    ((RC_REG0_TXEN | RC_REG0_RXEN) & rfSel)))
238                                                   
239#define radio_controller_SPI_write(ba, rfsel, regaddr, regdata) (Xil_Out32(ba+RC_SLV_REG5_OFFSET, \
240                                                                (rfsel & RC_REG5_RFSEL_ALL) | \
241                                                                (regdata & RC_REG5_REGDATA) | \
242                                                                ((regaddr << RF_REG5_REGADDR_SHIFT) & RC_REG5_REGADDR)))
243
244                                                           
245#define radio_controller_setTxDelays(ba, dly_GainRamp, dly_PA, dly_TX, dly_PHY) Xil_Out32(ba+RC_SLV_REG1_OFFSET, ((Xil_In32(ba+RC_SLV_REG1_OFFSET) & 0xFF000000) | \
246                                                                                ((dly_GainRamp&0xFF)<<24) | ((dly_PA&0xFF)<<16) | ((dly_TX&0xFF)<<8) | (dly_PHY&0xFF)))
247
248#define radio_controller_setTxGainTiming(ba, gainStep, timeStep)        Xil_Out32(ba+RC_SLV_REG4_OFFSET, (Xil_In32(ba+RC_SLV_REG4_OFFSET) & (~(0x0000FF00))) | \
249                                                                        ((gainStep&0xF)<<8) | ((timeStep&0xF)<<12))
250                                                                               
251#define RC_24GHZ 0
252#define RC_5GHZ  1
253
254#define RC_GAINSRC_SPI  1
255#define RC_GAINSRC_REG  2
256#define RC_GAINSRC_HW   3
257
258#define RC_CTRLSRC_HW   1
259#define RC_CTRLSRC_REG  2
260
261#define RC_RXHP_OFF     0
262#define RC_RXHP_ON      1
263           
264#define RC_INCLUDED_PARAMS_GAIN_CTRL    1
265#define RC_INCLUDED_PARAMS_FILTS        1
266#define RC_INCLUDED_PARAMS_MISC         1
267#define RC_INCLUDED_PARAMS_CALIBRATION  1
268
269#define RC_PARAMID_TXGAINS_SPI_CTRL_EN      1
270#define RC_PARAMID_RXGAINS_SPI_CTRL_EN      2
271#define RC_PARAMID_RXGAIN_RF                3
272#define RC_PARAMID_RXGAIN_BB                4
273#define RC_PARAMID_TXGAIN_RF                5
274#define RC_PARAMID_TXGAIN_BB                6
275#define RC_PARAMID_RSSI_HIGH_BW_EN          7
276#define RC_PARAMID_TXLINEARITY_PADRIVER     8
277#define RC_PARAMID_TXLINEARITY_VGA          9
278#define RC_PARAMID_TXLINEARITY_UPCONV       10
279#define RC_PARAMID_TXLPF_BW                 12
280#define RC_PARAMID_RXLPF_BW                 13
281#define RC_PARAMID_RXLPF_BW_FINE            14
282#define RC_PARAMID_RXHPF_HIGH_CUTOFF_EN     15
283
284#define RC_INVALID_PARAM    -2
285#define RC_INVALID_PARAMID  -3
286#define RC_INVALID_RFSEL    -4
287#endif /** RADIO_CONTROLLER_H */
Note: See TracBrowser for help on using the repository browser.