//Xilinx SDK includes #include "xparameters.h" #include "stdio.h" #include "xsysmon.h" #include "xtmrctr.h" #include "xio.h" //WARP includes #include "w3_userio.h" #include "w3_ad_controller.h" #include "w3_clock_controller.h" #include "w3_iic_eeprom.h" #include "radio_controller.h" //Define standard macros for pcore base addresses and device IDs // XPAR_ names will change with instance names in hardware #define USERIO_BASEADDR XPAR_W3_USERIO_0_BASEADDR #define RC_BASEADDR XPAR_RADIO_CONTROLLER_0_BASEADDR #define AD_BASEADDR XPAR_W3_AD_CONTROLLER_0_BASEADDR #define CLK_BASEADDR XPAR_W3_CLOCK_CONTROLLER_0_BASEADDR #define EEPROM_BASEADDR XPAR_W3_IIC_EEPROM_0_BASEADDR #define DRAM_BASEADDR XPAR_DDR3_2GB_SODIMM_MPMC_BASEADDR #define TIMER_FREQ XPAR_XPS_TIMER_0_CLOCK_FREQ_HZ #define TMRCTR_DEVICE_ID XPAR_TMRCTR_0_DEVICE_ID //Global variable definitions XTmrCtr TimerCounter; /* The instance of the Tmrctr Device */ int w3_node_init(); void userio_example(); void usleep(u32 duration); int main() { int status; xil_printf(" \f"); xil_printf("WARP v3 Template Project - Lite\n"); status = w3_node_init(); if(status != 0) { xil_printf("Error in w3_node_init()! Exiting\n"); return -1; } xil_printf("Board serial number: W3-a-%05d\n\n", w3_eeprom_readSerialNum(EEPROM_BASEADDR)); xil_printf("Running User I/O Example\n"); userio_example(); return 0; } void userio_example() { int i; xil_printf("\tCurrent Count: 0x "); for(i=0; i<256; i++) { userio_write_hexdisp_left(USERIO_BASEADDR, i>>4); userio_write_hexdisp_right(USERIO_BASEADDR, i%16); userio_write_leds_green(USERIO_BASEADDR, i>>4); userio_write_leds_red(USERIO_BASEADDR, i%16); xil_printf("\b\b%02x", i); usleep(250000); } xil_printf("\n"); return; } int w3_node_init() { int status; XTmrCtr *TmrCtrInstancePtr = &TimerCounter; int ret = XST_SUCCESS; microblaze_enable_exceptions(); //Initialize the AD9512 clock buffers (RF reference and sampling clocks) status = clk_init(CLK_BASEADDR, 2); if(status != XST_SUCCESS) { xil_printf("w3_node_init: Error in clk_init (%d)\n", status); ret = XST_FAILURE; } //Initialize the AD9963 ADCs/DACs ad_init(AD_BASEADDR, 2); if(status != XST_SUCCESS) { xil_printf("w3_node_init: Error in ad_init (%d)\n", status); ret = XST_FAILURE; } //Initialize the radio_controller core and MAX2829 transceivers status = radio_controller_init(RC_BASEADDR, (RC_RFA | RC_RFB), 1, 1); if(status != XST_SUCCESS) { xil_printf("w3_node_init: Error in radioController_initialize (%d)\n", status); ret = XST_FAILURE; } //Initialize the EEPROM read/write core iic_eeprom_init(EEPROM_BASEADDR, 0x64); if(status != XST_SUCCESS) { xil_printf("w3_node_init: Error in IIC_EEPROM_init (%d)\n", status); ret = XST_FAILURE; } /* * Initialize the timer counter so that it's ready to use, * specify the device ID that is generated in xparameters.h */ status = XTmrCtr_Initialize(TmrCtrInstancePtr, TMRCTR_DEVICE_ID); if (status != XST_SUCCESS) { xil_printf("w3_node_init: Error in XtmrCtr_Initialize (%d)\n", status); ret = XST_FAILURE; } /* * Perform a self-test to ensure that the hardware was built * correctly, use the 1st timer in the device (0) */ status = XTmrCtr_SelfTest(TmrCtrInstancePtr, 0); if (status != XST_SUCCESS) { ret = XST_FAILURE; } // Set timer 0 to into a "count down" mode XTmrCtr_SetOptions(TmrCtrInstancePtr, 0, (XTC_DOWN_COUNT_OPTION)); return ret; } void usleep(u32 duration){ XTmrCtr *TmrCtrInstancePtr = &TimerCounter; XTmrCtr_SetResetValue(TmrCtrInstancePtr,0,duration*(TIMER_FREQ/1000000)); XTmrCtr_Start(TmrCtrInstancePtr,0); volatile u8 isExpired = 0; while(isExpired!=1){ isExpired = XTmrCtr_IsExpired(TmrCtrInstancePtr,0); } XTmrCtr_Reset(TmrCtrInstancePtr,0); return; }