source: PlatformSupport/TemplateProjects/w3/Lite/w3_example.c

Last change on this file was 1833, checked in by chunter, 12 years ago

added template project hardware files

File size: 3.9 KB
Line 
1//Xilinx SDK includes
2#include "xparameters.h"
3#include "stdio.h"
4#include "xsysmon.h"
5#include "xtmrctr.h"
6#include "xio.h"
7
8//WARP includes
9#include "w3_userio.h"
10#include "w3_ad_controller.h"
11#include "w3_clock_controller.h"
12#include "w3_iic_eeprom.h"
13#include "radio_controller.h"
14
15//Define standard macros for pcore base addresses and device IDs
16// XPAR_ names will change with instance names in hardware
17#define USERIO_BASEADDR     XPAR_W3_USERIO_0_BASEADDR
18#define RC_BASEADDR         XPAR_RADIO_CONTROLLER_0_BASEADDR
19#define AD_BASEADDR         XPAR_W3_AD_CONTROLLER_0_BASEADDR
20#define CLK_BASEADDR        XPAR_W3_CLOCK_CONTROLLER_0_BASEADDR
21#define EEPROM_BASEADDR     XPAR_W3_IIC_EEPROM_0_BASEADDR
22#define DRAM_BASEADDR       XPAR_DDR3_2GB_SODIMM_MPMC_BASEADDR
23#define TIMER_FREQ          XPAR_XPS_TIMER_0_CLOCK_FREQ_HZ
24#define TMRCTR_DEVICE_ID    XPAR_TMRCTR_0_DEVICE_ID
25
26
27//Global variable definitions
28XTmrCtr TimerCounter; /* The instance of the Tmrctr Device */
29
30int w3_node_init();
31void userio_example();
32void usleep(u32 duration);
33
34int main() {
35    int status;
36
37    xil_printf("                \f");
38    xil_printf("WARP v3 Template Project - Lite\n");
39
40    status = w3_node_init();
41    if(status != 0) {
42        xil_printf("Error in w3_node_init()! Exiting\n");
43        return -1;
44    }
45
46    xil_printf("Board serial number: W3-a-%05d\n\n", w3_eeprom_readSerialNum(EEPROM_BASEADDR));
47
48    xil_printf("Running User I/O Example\n");
49    userio_example();
50
51    return 0;
52}
53
54void userio_example() {
55    int i;
56    xil_printf("\tCurrent Count: 0x  ");
57    for(i=0; i<256; i++) {
58        userio_write_hexdisp_left(USERIO_BASEADDR, i>>4);
59        userio_write_hexdisp_right(USERIO_BASEADDR, i%16);
60        userio_write_leds_green(USERIO_BASEADDR, i>>4);
61        userio_write_leds_red(USERIO_BASEADDR, i%16);
62
63        xil_printf("\b\b%02x", i);
64
65        usleep(250000);
66    }
67    xil_printf("\n");
68    return;
69
70}
71
72int w3_node_init() {
73
74    int status;
75    XTmrCtr *TmrCtrInstancePtr = &TimerCounter;
76    int ret = XST_SUCCESS;
77
78    microblaze_enable_exceptions();
79
80    //Initialize the AD9512 clock buffers (RF reference and sampling clocks)
81    status = clk_init(CLK_BASEADDR, 2);
82    if(status != XST_SUCCESS) {
83        xil_printf("w3_node_init: Error in clk_init (%d)\n", status);
84        ret = XST_FAILURE;
85    }
86
87    //Initialize the AD9963 ADCs/DACs
88    ad_init(AD_BASEADDR, 2);
89    if(status != XST_SUCCESS) {
90        xil_printf("w3_node_init: Error in ad_init (%d)\n", status);
91        ret = XST_FAILURE;
92    }
93
94    //Initialize the radio_controller core and MAX2829 transceivers
95    status = radio_controller_init(RC_BASEADDR, (RC_RFA | RC_RFB), 1, 1);
96    if(status != XST_SUCCESS) {
97        xil_printf("w3_node_init: Error in radioController_initialize (%d)\n", status);
98        ret = XST_FAILURE;
99    }
100
101    //Initialize the EEPROM read/write core
102    iic_eeprom_init(EEPROM_BASEADDR, 0x64);
103    if(status != XST_SUCCESS) {
104        xil_printf("w3_node_init: Error in IIC_EEPROM_init (%d)\n", status);
105        ret = XST_FAILURE;
106    }
107
108    /*
109     * Initialize the timer counter so that it's ready to use,
110     * specify the device ID that is generated in xparameters.h
111     */
112    status = XTmrCtr_Initialize(TmrCtrInstancePtr, TMRCTR_DEVICE_ID);
113    if (status != XST_SUCCESS) {
114        xil_printf("w3_node_init: Error in XtmrCtr_Initialize (%d)\n", status);
115        ret = XST_FAILURE;
116    }
117
118    /*
119     * Perform a self-test to ensure that the hardware was built
120     * correctly, use the 1st timer in the device (0)
121     */
122    status = XTmrCtr_SelfTest(TmrCtrInstancePtr, 0);
123    if (status != XST_SUCCESS) {
124        ret = XST_FAILURE;
125    }
126
127    // Set timer 0 to into a "count down" mode
128    XTmrCtr_SetOptions(TmrCtrInstancePtr, 0, (XTC_DOWN_COUNT_OPTION));
129
130    return ret;
131}
132
133void usleep(u32 duration){
134    XTmrCtr *TmrCtrInstancePtr = &TimerCounter;
135    XTmrCtr_SetResetValue(TmrCtrInstancePtr,0,duration*(TIMER_FREQ/1000000));
136
137    XTmrCtr_Start(TmrCtrInstancePtr,0);
138
139    volatile u8 isExpired = 0;
140    while(isExpired!=1){
141        isExpired = XTmrCtr_IsExpired(TmrCtrInstancePtr,0);
142    }
143    XTmrCtr_Reset(TmrCtrInstancePtr,0);
144    return;
145}
146
Note: See TracBrowser for help on using the repository browser.