source: PlatformSupport/CustomPeripherals/pcores/w3_clock_controller_axi_v4_00_a/src/w3_clock_controller.h

Last change on this file was 4305, checked in by murphpo, 9 years ago

Updated driver for new clock config core:

-clk_init() sets sensible defaults without overriding any config set by picoblaze
-updated clock module status readback/macros to detect module type and switch settings

File size: 5.0 KB
Line 
1#ifndef WARP_CLOCK_CONTROLLER_H
2#define WARP_CLOCK_CONTROLLER_H
3
4#include "xbasic_types.h"
5#include "xstatus.h"
6#include "xil_io.h"
7
8#define WARP_CLOCK_CONTROLLER_USER_SLV_SPACE_OFFSET (0x00000000)
9
10#define WARP_CLOCK_CONTROLLER_SLV_REG0_OFFSET (WARP_CLOCK_CONTROLLER_USER_SLV_SPACE_OFFSET + 0x00000000)
11#define WARP_CLOCK_CONTROLLER_SLV_REG1_OFFSET (WARP_CLOCK_CONTROLLER_USER_SLV_SPACE_OFFSET + 0x00000004)
12#define WARP_CLOCK_CONTROLLER_SLV_REG2_OFFSET (WARP_CLOCK_CONTROLLER_USER_SLV_SPACE_OFFSET + 0x00000008)
13#define WARP_CLOCK_CONTROLLER_SLV_REG3_OFFSET (WARP_CLOCK_CONTROLLER_USER_SLV_SPACE_OFFSET + 0x0000000C)
14#define WARP_CLOCK_CONTROLLER_SLV_REG4_OFFSET (WARP_CLOCK_CONTROLLER_USER_SLV_SPACE_OFFSET + 0x00000010)
15#define WARP_CLOCK_CONTROLLER_SLV_REG5_OFFSET (WARP_CLOCK_CONTROLLER_USER_SLV_SPACE_OFFSET + 0x00000014)
16#define WARP_CLOCK_CONTROLLER_SLV_REG6_OFFSET (WARP_CLOCK_CONTROLLER_USER_SLV_SPACE_OFFSET + 0x00000018)
17#define WARP_CLOCK_CONTROLLER_SLV_REG7_OFFSET (WARP_CLOCK_CONTROLLER_USER_SLV_SPACE_OFFSET + 0x0000001C)
18
19/* Address map:
20    HDL is coded [MSB:LSB] = [31:0]
21    regX[31]  maps to 0x80000000 in C driver
22    regX[0] maps to 0x00000001 in C driver
23
240: Config:
25    [ 2: 0] Clock divider bit sel (00=0.5*busclk, 01=0.25*busclk, ...) 0x00000003
26    [    3] Reserved
27    [    4] samp buf reset (active low)     0x00000010
28    [    5] rf ref buf reset (active low)   0x00000020
29    [15: 6] Reserved                        0x0000FFC0
30    [31:16] Clock module status             0xFFFF0000
31
321: SPI Tx
33    [ 7: 0] Tx data byte
34    [14: 8] 7-bit register address (0x00 to 0xFF all valid)
35    [20:15] 6'b0 (always zero)
36    [22:21] Num bytes to Tx/Rx; must be 2'b0 for 1-byte Tx/Rx
37    [   23] RW# 1=Read, 0=Write
38    [   24] samp clock buffer chip select mask
39    [   25] rf ref clk buffer chip select mask
40    [   26] clock module clk buffer chip select mask
41    [31:27] Reserved
42
432: SPI Rx: {samp_rxByte, rfref_rxByte, 16'b0}
44    [ 7: 0] SPI Rx byte for samp buf     0x0000FF
45    [15: 8] SPI Rx byte for rf ref buf   0x00FF00
46    [23:16] SPI Rx byte for clock module 0xFF0000
47    [31:24] Reserved                     0xFF000000
48   
493: RW: User reset outputs
50    [0] usr_reset0
51    [1] usr_reset1
52    [2] usr_reset2
53    [3] usr_reset3
54    [31:4] reserved
55
564: RO: User status inputs
57    [31: 0] usr_status input
58
595-15: Reserved
60*/
61
62#define CLKCTRL_REG_CONFIG                  WARP_CLOCK_CONTROLLER_SLV_REG0_OFFSET
63#define CLKCTRL_REG_SPITX                   WARP_CLOCK_CONTROLLER_SLV_REG1_OFFSET
64#define CLKCTRL_REG_SPIRX                   WARP_CLOCK_CONTROLLER_SLV_REG2_OFFSET
65#define CLKCTRL_REG_USR_RESETS              WARP_CLOCK_CONTROLLER_SLV_REG3_OFFSET
66#define CLKCTRL_REG_STATUS                  WARP_CLOCK_CONTROLLER_SLV_REG4_OFFSET
67
68#define CLKCTRL_REG_CONFIG_MASK_CLKDIV      0x03
69#define CLKCTRL_REG_CONFIG_MASK_SAMP_FUNC   0x10
70#define CLKCTRL_REG_CONFIG_MASK_RFREF_FUNC  0x20
71
72#define CLKCTRL_REG_SPITX_SAMP_CS           0x01000000
73#define CLKCTRL_REG_SPITX_RFREF_CS          0x02000000
74#define CLKCTRL_REG_SPITX_CMPLL_CS          0x04000000
75#define CLKCTRL_REG_SPITX_RNW               0x00800000
76
77#define CLK_SAMP_CS                         CLKCTRL_REG_SPITX_SAMP_CS
78#define CLK_RFREF_CS                        CLKCTRL_REG_SPITX_RFREF_CS
79#define CMPLL_CS                            CLKCTRL_REG_SPITX_CMPLL_CS
80
81#define CLK_SAMP_OUTSEL_FMC                 0x01
82#define CLK_SAMP_OUTSEL_CLKMODHDR           0x02
83#define CLK_SAMP_OUTSEL_FPGA                0x04
84#define CLK_SAMP_OUTSEL_AD_RFA              0x08
85#define CLK_SAMP_OUTSEL_AD_RFB              0x10
86
87#define CLK_RFREF_OUTSEL_FMC                0x20
88#define CLK_RFREF_OUTSEL_CLKMODHDR          0x40
89#define CLK_RFREF_OUTSEL_RFAB               0x80
90
91#define CLK_OUTPUT_ON                       1
92#define CLK_OUTPUT_OFF                      2
93
94#define CLK_INSEL_ONBOARD                   1
95#define CLK_INSEL_CLKMOD                    2
96
97//CM switch interpretation
98// Clock modules pull switch signals to GND when switch is asserted
99// FPGA pulls up sw[2:0] to [111]
100// CM-PLL pulls sw[2] to GND, sw[1:0] set by LSB of DIP switch ("up" = 0)
101//  CM-PLL:  sw[2:0] = [2,1,0] => CFG_[A,B,C]
102// CM-MMCX floats sw[2] (IOB pulls up), sw[1:0] set by SIP switch ("down" = 0)
103//  CM-MMCX: sw[2:0] = [6,5,4] => CFG_[A,B,C]
104
105#define CM_STATUS_SW                        0x7
106
107#define CM_STATUS_DET_NOCM                  0x7
108
109#define CM_STATUS_DET_CMMMCX_CFG_A          0x6
110#define CM_STATUS_DET_CMMMCX_CFG_B          0x5
111#define CM_STATUS_DET_CMMMCX_CFG_C          0x4
112
113#define CM_STATUS_DET_CMPLL_BYPASS          0x3
114#define CM_STATUS_DET_CMPLL_CFG_A           0x2
115#define CM_STATUS_DET_CMPLL_CFG_B           0x1
116#define CM_STATUS_DET_CMPLL_CFG_C           0x0
117
118#define CM_STATUS_CMPLL_LOCKED              0x8
119
120u32  clk_spi_read(u32 baseaddr,  u32 csMask, u8 regAddr);
121void clk_spi_write(u32 baseaddr, u32 csMask, u8 regAddr, u8 txByte);
122
123int  clk_init(u32 baseaddr, u8 clkDiv);
124
125int  clk_config_outputs(u32 baseaddr, u8 clkOutMode, u32 clkOutSel);
126int  clk_config_dividers(u32 baseaddr, u8 clkDiv, u32 clkOutSel);
127int  clk_config_input_rf_ref(u32 baseaddr, u8 clkInSel);
128inline u32  clk_config_read_clkmod_status(u32 baseaddr);
129
130#endif /** WARP_CLOCK_CONTROLLER_H */
Note: See TracBrowser for help on using the repository browser.