27 #ifndef _ADF7030_1__TIMER_C_ 29 #define _ADF7030_1__TIMER_C_ 37 #include <services/tmr/adi_tmr.h> 38 #include <services/gpio/adi_gpio.h> 41 #include <devices/rf/adf703x/adf7030-1__timer.h> 54 #pragma diag_suppress=Pm073,Pm143 59 #define ADF7030_1_TIMER_TICK 2 60 #define ADF7030_1_TIMER_FAST 0 62 #define SYS_CLK_FREQ 26000000 63 #define ADF7030_1_TIMER_1MS_VAL (SYS_CLK_FREQ / 1000) 64 #define ADF7030_1_TIMER_1US_VAL (ADF7030_1_TIMER_1MS_VAL / 1000) 67 static uint8_t aDeviceMemory0[ADI_TMR_MEMORY_SIZE];
68 static uint8_t aDeviceMemory2[ADI_TMR_MEMORY_SIZE];
71 static ADI_TMR_HANDLE hTMR0Device;
72 static ADI_TMR_HANDLE hTMR2Device;
78 volatile bool_t bWait_uS_Flag;
81 uint32_t adf7030_1__TIMER_Init
87 if(adi_tmr_Open(ADF7030_1_TIMER_TICK,
90 &hTMR2Device) != ADI_TMR_SUCCESS)
96 if(adi_tmr_SetPrescaler(hTMR2Device, ADI_GPT_PRESCALER_1) != ADI_TMR_SUCCESS)
102 if(adi_tmr_SetClockSource(hTMR2Device, ADI_TMR_CLOCK_PCLK) != ADI_TMR_SUCCESS)
108 if(adi_tmr_SetRunMode(hTMR2Device, ADI_TMR_PERIODIC_MODE) != ADI_TMR_SUCCESS)
114 if(adi_tmr_SetCountMode(hTMR2Device, ADI_TMR_COUNT_DOWN) != ADI_TMR_SUCCESS)
120 if(adi_tmr_EnableReloading(hTMR2Device,
true) != ADI_TMR_SUCCESS)
126 if(adi_tmr_SetLoadValue(hTMR2Device, ADF7030_1_TIMER_1MS_VAL / ERROR_COMPENSATION_DIV) != ADI_TMR_SUCCESS)
132 if(adi_tmr_RegisterCallback(hTMR2Device, GPTimer2Callback, hTMR2Device) != ADI_TMR_SUCCESS)
138 if(adi_tmr_SetEventToCapture(hTMR2Device, ADI_TMR2_CAPTURE_EVENT_EXT_INT_0) != ADI_TMR_SUCCESS)
144 if(adi_tmr_EnableEventCapture(hTMR2Device,
true) != ADI_TMR_SUCCESS)
150 adf7030_1_time.ms = 0;
151 adf7030_1_time.ticks = 0;
154 if(adi_tmr_Enable(hTMR2Device,
true) != ADI_TMR_SUCCESS)
160 if(adi_tmr_Open(ADF7030_1_TIMER_FAST,
163 &hTMR0Device) != ADI_TMR_SUCCESS)
169 if(adi_tmr_SetPrescaler(hTMR0Device, ADI_GPT_PRESCALER_1) != ADI_TMR_SUCCESS)
175 if(adi_tmr_SetClockSource(hTMR0Device, ADI_TMR_CLOCK_PCLK) != ADI_TMR_SUCCESS)
181 if(adi_tmr_SetRunMode(hTMR0Device, ADI_TMR_PERIODIC_MODE) != ADI_TMR_SUCCESS)
187 if(adi_tmr_SetCountMode(hTMR0Device, ADI_TMR_COUNT_DOWN) != ADI_TMR_SUCCESS)
193 if(adi_tmr_EnableReloading(hTMR0Device,
false) != ADI_TMR_SUCCESS)
202 uint32_t adf7030_1__TIMER_UnInit
207 if(adi_tmr_EnableEventCapture(hTMR2Device,
false) != ADI_TMR_SUCCESS)
212 if(adi_tmr_Enable(hTMR2Device,
false) != ADI_TMR_SUCCESS)
217 if(adi_tmr_Close(hTMR2Device) != ADI_TMR_SUCCESS)
222 if(adi_tmr_Enable(hTMR0Device,
false) != ADI_TMR_SUCCESS)
227 if(adi_tmr_Close(hTMR0Device) != ADI_TMR_SUCCESS)
237 uint32_t adf7030_1__TIMER_ClrTime
250 uint32_t adf7030_1__TIMER_GetTime
255 pTime->ms = adf7030_1_time.ms;
256 if(adi_GPT_GetCurrentValue(hTMR2Device, &pTime->ticks) != ADI_TMR_SUCCESS)
265 uint32_t adf7030_1__TIMER_Start_uS
267 const uint16_t u_sec,
268 ADI_CALLBACK
const pfCallback
271 if(u_sec > TOTAL_TMR_ERROR)
275 uint32_t Val_uS = ADF7030_1_TIMER_1US_VAL * (u_sec - TOTAL_TMR_ERROR);
278 if(Val_uS >> 16) Val_uS = 65520;
281 if(adi_tmr_SetLoadValue(hTMR0Device, ((uint16_t)Val_uS) / ERROR_COMPENSATION_DIV) != ADI_TMR_SUCCESS)
287 if(adi_tmr_RegisterCallback(hTMR0Device, pfCallback, hTMR0Device) != ADI_TMR_SUCCESS)
292 bWait_uS_Flag =
true;
294 adi_gpio_SetHigh(ADI_GPIO_PORT0, ADI_GPIO_PIN_12);
297 if(adi_tmr_Enable(hTMR0Device,
true) != ADI_TMR_SUCCESS)
304 adi_gpio_SetHigh(ADI_GPIO_PORT0, ADI_GPIO_PIN_12);
308 bWait_uS_Flag =
false;
309 adf7030_1__TIMER_GetTime(&adf7030_1_time_capture);
311 adi_gpio_SetLow(ADI_GPIO_PORT0, ADI_GPIO_PIN_12);
317 uint32_t adf7030_1__TIMER_Stop_uS
323 if(adi_tmr_Enable(hTMR0Device,
false) != ADI_TMR_SUCCESS)
329 if(adi_tmr_RegisterCallback(hTMR0Device, NULL, hTMR0Device) != ADI_TMR_SUCCESS)
334 bWait_uS_Flag =
false;
339 uint32_t adf7030_1__TIMER_Wait_uS
341 const uint16_t u_sec,
342 ADI_CALLBACK
const pfCallback
345 if(adf7030_1__TIMER_Start_uS(u_sec, pfCallback) != SUCCESS)
350 while(bWait_uS_Flag ==
true);
352 if(adf7030_1__TIMER_Stop_uS() != SUCCESS)
365 const uint16_t delay_us
369 #define INSTRUCTIONS_PER_LOOP 8 374 const uint32_t cycles_per_loop = INSTRUCTIONS_PER_LOOP;
375 const uint32_t usec_div = ADF7030_1_TIMER_1US_VAL;
376 const uint32_t loops = (delay_us * usec_div) / cycles_per_loop;
378 for (uint32_t i = 0; i < loops; i++) {
393 void GPTimer0Callback
402 case ADI_TMR_EVENT_TIMEOUT:
403 bWait_uS_Flag =
false;
404 adf7030_1__TIMER_GetTime(&adf7030_1_time_capture);
409 adi_gpio_SetLow(ADI_GPIO_PORT0, ADI_GPIO_PIN_12);
414 void GPTimer2Callback
421 adi_gpio_SetHigh(ADI_GPIO_PORT2, ADI_GPIO_PIN_0);
424 case ADI_TMR_EVENT_TIMEOUT:
425 adf7030_1_time.ms += 1;
426 adf7030_1_time.ticks = 0;
428 case ADI_TMR_EVENT_CAPTURED:
429 adf7030_1_time_capture.ms = adf7030_1_time.ms;
430 adi_tmr_GetCapturedValue(pCBParam, &adf7030_1_time_capture.ticks);
435 adi_gpio_SetLow(ADI_GPIO_PORT2, ADI_GPIO_PIN_0);
uint32_t adf7030_1__TIMER_Active_Delay_uS(const uint16_t delay_us)
Active wait using NOPs This function loops using NOPs to give short delays.