#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xttcps.h"
#include "xparameters.h"

typedef struct {
	u32 outputFreq;
	XInterval interval;
	u8 prescaler;
	u32 option;

} ttc_setup;


XTtcPs_Config *ttc_config;
XTtcPs ttc;

void ttc_init(){
	int status;


	ttc_config = XTtcPs_LookupConfig(XPAR_PS7_TTC_0_DEVICE_ID);
	status = XTtcPs_CfgInitialize(&ttc,ttc_config, ttc_config->BaseAddress);

	if(status == XST_SUCCESS)
		xil_printf("TTC Init Successful\n");
	else
		xil_printf("TTC Init Failed\n");

	status = XTtcPs_SelfTest(&ttc);

	if(status == XST_SUCCESS)
		xil_printf("Self Test Successful\n");
	else
		xil_printf("Self Test Failed\n");


}


int main()
{
    int startClkTick = 0, endClkTick = 0;
	ttc_setup data = {1,0,0,0};

    init_platform();
    ttc_init();
    XTtcPs_Stop(&ttc);
    data.option = data.option | XTTCPS_OPTION_DECREMENT | XTTCPS_OPTION_INTERVAL_MODE;
    XTtcPs_SetOptions(&ttc, data.option);
    XTtcPs_CalcIntervalFromFreq(&ttc, data.outputFreq, &(data.interval), &(data.prescaler));
    XTtcPs_SetPrescaler(&ttc, data.prescaler);
    XTtcPs_SetInterval(&ttc, data.interval);



    /*  ///checking Up and down mode of the counter
    XTtcPs_Start(&ttc);
    usleep(700000);
    count = XTtcPs_GetCounterValue(&ttc);
    xil_printf(" Count Value : %0d\n", count);
    while(XTtcPs_GetCounterValue(&ttc));
	XTtcPs_Stop(&ttc);
	*/
    /*/// Generating Delay at regular interval
    while(1){
    	XTtcPs_Start(&ttc);
    	while(XTtcPs_GetCounterValue(&ttc));
    	XTtcPs_Stop(&ttc);
    	xil_printf("1 Sec Delay\n");
    	XTtcPs_ResetCounterValue(&ttc);
    }

    */
    
    cleanup_platform();
    return 0;
}