Lines Matching refs:obj

72 #define _CYHAL_ADCMIC_NUM_CHANNELS(obj) (sizeof(obj->channel_config) / sizeof(obj->channel_config[0…  argument
134 static void _cyhal_adcmic_find_next_channel(cyhal_adc_t* obj, uint8_t* current_idx, int32_t **buffe… in _cyhal_adcmic_find_next_channel() argument
139 if(NULL != obj->channel_config[*current_idx]) in _cyhal_adcmic_find_next_channel()
141 if(obj->channel_config[*current_idx]->enabled) in _cyhal_adcmic_find_next_channel()
149 *current_idx = (*current_idx + 1) % _CYHAL_ADCMIC_NUM_CHANNELS(obj); in _cyhal_adcmic_find_next_channel()
168 cyhal_adc_t* obj = _cyhal_adcmic_config_structs[block]; in _cyhal_adcmic_irq_handler() local
169 Cy_ADCMic_ClearInterrupt(obj->base, CY_ADCMIC_INTR_DC); in _cyhal_adcmic_irq_handler()
170 obj->conversion_complete = true; in _cyhal_adcmic_irq_handler()
172 if(obj->async_scans_remaining > 0) in _cyhal_adcmic_irq_handler()
174 int16_t dc_data = Cy_ADCMic_GetDcResult(obj->base); in _cyhal_adcmic_irq_handler()
175 if (obj->async_transfer_in_uv) in _cyhal_adcmic_irq_handler()
177 *(obj->async_buff_next) = Cy_ADCMic_CountsTo_uVolts(dc_data, &obj->pdl_context); in _cyhal_adcmic_irq_handler()
181 *(obj->async_buff_next) = (int32_t)_cyhal_adc_cnt_to_u16(obj, dc_data); in _cyhal_adcmic_irq_handler()
183 obj->async_buff_next++; in _cyhal_adcmic_irq_handler()
184 uint8_t old_channel = obj->current_channel_index; in _cyhal_adcmic_irq_handler()
185 … _cyhal_adcmic_find_next_channel(obj, &(obj->current_channel_index), &(obj->async_buff_next)); in _cyhal_adcmic_irq_handler()
188 if(obj->current_channel_index <= old_channel) in _cyhal_adcmic_irq_handler()
190 --(obj->async_scans_remaining); in _cyhal_adcmic_irq_handler()
191 if(obj->async_scans_remaining == 0) in _cyhal_adcmic_irq_handler()
194 obj->async_buff_next = NULL; in _cyhal_adcmic_irq_handler()
195 Cy_ADCMic_DisableInterrupt(obj->base, CY_ADCMIC_INTR_DC); in _cyhal_adcmic_irq_handler()
196 Cy_ADCMic_DisableTimer(obj->base); in _cyhal_adcmic_irq_handler()
197 … if(0 != (CYHAL_ADC_ASYNC_READ_COMPLETE & ((cyhal_adc_event_t)obj->user_enabled_events))) in _cyhal_adcmic_irq_handler()
199 … cyhal_adc_event_callback_t callback = (cyhal_adc_event_callback_t)obj->callback_data.callback; in _cyhal_adcmic_irq_handler()
202 callback(obj->callback_data.callback_arg, CYHAL_ADC_ASYNC_READ_COMPLETE); in _cyhal_adcmic_irq_handler()
210 Cy_ADCMic_DisableTimer(obj->base); in _cyhal_adcmic_irq_handler()
243 cy_rslt_t _cyhal_adc_config_hw(cyhal_adc_t *obj, const cyhal_adc_configurator_t* cfg, cyhal_gpio_t … in _cyhal_adc_config_hw() argument
245 CY_ASSERT(NULL != obj); in _cyhal_adc_config_hw()
248 memset(obj, 0, sizeof(cyhal_adc_t)); in _cyhal_adc_config_hw()
249 obj->resource.type = CYHAL_RSC_INVALID; in _cyhal_adc_config_hw()
251 obj->owned_by_configurator = owned_by_configurator; in _cyhal_adc_config_hw()
263 obj->resource = inst; in _cyhal_adc_config_hw()
269 if (obj->resource.type == CYHAL_RSC_INVALID) in _cyhal_adc_config_hw()
276 obj->resource = *cfg->resource; in _cyhal_adc_config_hw()
286 obj->base = _cyhal_adcmic_base[obj->resource.block_num]; in _cyhal_adc_config_hw()
287 pclk = _cyhal_adcmic_clock[obj->resource.block_num]; in _cyhal_adc_config_hw()
290 obj->clock = *cfg->clock; in _cyhal_adc_config_hw()
291 obj->dedicated_clock = false; in _cyhal_adc_config_hw()
294 …(result = _cyhal_utils_allocate_clock(&(obj->clock), &(obj->resource), CYHAL_CLOCK_BLOCK_PERIPHERA… in _cyhal_adc_config_hw()
296 obj->dedicated_clock = true; in _cyhal_adc_config_hw()
297 …result = cyhal_clock_set_enabled(&(obj->clock), true /* enabled */, false /* don't wait for lock. … in _cyhal_adc_config_hw()
301 if (CY_RSLT_SUCCESS == result && obj->clock.block != CYHAL_CLOCK_BLOCK_HF) in _cyhal_adc_config_hw()
303 if (CY_SYSCLK_SUCCESS != _cyhal_utils_peri_pclk_assign_divider(pclk, &(obj->clock))) in _cyhal_adc_config_hw()
309 if(obj->dedicated_clock) in _cyhal_adc_config_hw()
311 …if(CY_RSLT_SUCCESS != _cyhal_utils_set_clock_frequency(&(obj->clock), _CYHAL_ADCMIC_TARGET_CLOCK_H… in _cyhal_adc_config_hw()
320 result = (cy_rslt_t)Cy_ADCMic_Init(obj->base, cfg->config, CY_ADCMIC_DC); in _cyhal_adc_config_hw()
325 Cy_ADCMic_Enable(obj->base); in _cyhal_adc_config_hw()
326 _cyhal_adcmic_config_structs[obj->resource.block_num] = obj; in _cyhal_adc_config_hw()
327 …cy_stc_sysint_t irqCfg = { _cyhal_adcmic_irq_n[obj->resource.block_num], CYHAL_ISR_PRIORITY_DEFAUL… in _cyhal_adc_config_hw()
329 NVIC_EnableIRQ(_cyhal_adcmic_irq_n[obj->resource.block_num]); in _cyhal_adc_config_hw()
334 cyhal_adc_free(obj); in _cyhal_adc_config_hw()
339 cy_rslt_t cyhal_adc_init(cyhal_adc_t *obj, cyhal_gpio_t pin, const cyhal_clock_t *clk) in cyhal_adc_init() argument
344 dcConfig.context = &obj->pdl_context; in cyhal_adc_init()
357 cy_rslt_t result = _cyhal_adc_config_hw(obj, &config, pin, false); in cyhal_adc_init()
395 void cyhal_adc_free(cyhal_adc_t *obj) in cyhal_adc_free() argument
397 CY_ASSERT(NULL != obj); in cyhal_adc_free()
398 if (CYHAL_RSC_INVALID != obj->resource.type) in cyhal_adc_free()
400 _cyhal_system_irq_t irqn = _cyhal_adcmic_irq_n[obj->resource.block_num]; in cyhal_adc_free()
402 _cyhal_adcmic_config_structs[obj->resource.block_num] = NULL; in cyhal_adc_free()
404 if(obj->dedicated_clock) in cyhal_adc_free()
406 …_cyhal_utils_peri_pclk_disable_divider(_cyhal_adcmic_clock[obj->resource.block_num], &(obj->clock)… in cyhal_adc_free()
407 cyhal_clock_free(&obj->clock); in cyhal_adc_free()
410 if (NULL != obj->base) in cyhal_adc_free()
412 Cy_ADCMic_Disable(obj->base); in cyhal_adc_free()
413 obj->base = NULL; in cyhal_adc_free()
416 if(false == obj->owned_by_configurator) in cyhal_adc_free()
418 cyhal_hwmgr_free(&obj->resource); in cyhal_adc_free()
423 cy_rslt_t cyhal_adc_configure(cyhal_adc_t *obj, const cyhal_adc_config_t *config) in cyhal_adc_configure() argument
426 CY_UNUSED_PARAMETER(obj); in cyhal_adc_configure()
444 cy_rslt_t cyhal_adc_set_power(cyhal_adc_t *obj, cyhal_power_level_t power) in cyhal_adc_set_power() argument
449 Cy_ADCMic_Disable(obj->base); in cyhal_adc_set_power()
453 Cy_ADCMic_Enable(obj->base); in cyhal_adc_set_power()
458 cy_rslt_t cyhal_adc_set_sample_rate(cyhal_adc_t* obj, uint32_t desired_sample_rate_hz, uint32_t* ac… in cyhal_adc_set_sample_rate() argument
461 CY_UNUSED_PARAMETER(obj); in cyhal_adc_set_sample_rate()
466 cy_rslt_t cyhal_adc_channel_init_diff(cyhal_adc_channel_t *obj, cyhal_adc_t* adc, cyhal_gpio_t vplu… in cyhal_adc_channel_init_diff() argument
468 CY_ASSERT(obj != NULL); in cyhal_adc_channel_init_diff()
473 memset(obj, 0, sizeof(cyhal_adc_channel_t)); in cyhal_adc_channel_init_diff()
474 obj->vplus = NC; in cyhal_adc_channel_init_diff()
498 obj->channel_sel = _cyhal_adcmic_convert_channel_sel(bit_index); in cyhal_adc_channel_init_diff()
505 obj->vplus = vplus; in cyhal_adc_channel_init_diff()
507 … for(chosen_channel = 0; chosen_channel < _CYHAL_ADCMIC_NUM_CHANNELS(obj->adc); ++chosen_channel) in cyhal_adc_channel_init_diff()
514 if (chosen_channel >= _CYHAL_ADCMIC_NUM_CHANNELS(obj->adc)) in cyhal_adc_channel_init_diff()
523 obj->adc = adc; in cyhal_adc_channel_init_diff()
524 obj->channel_idx = chosen_channel; in cyhal_adc_channel_init_diff()
525 obj->adc->channel_config[chosen_channel] = obj; in cyhal_adc_channel_init_diff()
530 result = cyhal_adc_channel_configure(obj, cfg); in cyhal_adc_channel_init_diff()
535 cyhal_adc_channel_free(obj); in cyhal_adc_channel_init_diff()
541 cy_rslt_t cyhal_adc_channel_configure(cyhal_adc_channel_t *obj, const cyhal_adc_channel_config_t *c… in cyhal_adc_channel_configure() argument
543 CY_ASSERT(NULL != obj); in cyhal_adc_channel_configure()
552 obj->enabled = config->enabled; in cyhal_adc_channel_configure()
558 void cyhal_adc_channel_free(cyhal_adc_channel_t *obj) in cyhal_adc_channel_free() argument
560 CY_ASSERT(NULL != obj); in cyhal_adc_channel_free()
564 if(((obj->adc != NULL) && (false == obj->adc->owned_by_configurator)) || (obj->adc == NULL)) in cyhal_adc_channel_free()
566 _cyhal_utils_release_if_used(&(obj->vplus)); in cyhal_adc_channel_free()
569 if(obj->adc != NULL) in cyhal_adc_channel_free()
572 obj->adc->channel_config[obj->channel_idx] = NULL; in cyhal_adc_channel_free()
573 obj->adc = NULL; in cyhal_adc_channel_free()
577 static int16_t _cyhal_adc_read_raw(const cyhal_adc_channel_t *obj) in _cyhal_adc_read_raw() argument
579 Cy_ADCMic_SelectDcChannel(obj->adc->base, obj->channel_sel); in _cyhal_adc_read_raw()
584 Cy_ADCMic_ClearInterrupt(obj->adc->base, CY_ADCMIC_INTR_DC); in _cyhal_adc_read_raw()
585 Cy_ADCMic_EnableInterrupt(obj->adc->base, CY_ADCMIC_INTR_DC); in _cyhal_adc_read_raw()
586 obj->adc->conversion_complete = false; in _cyhal_adc_read_raw()
587 Cy_ADCMic_EnableTimer(obj->adc->base); in _cyhal_adc_read_raw()
589 while(!obj->adc->conversion_complete && retry > 0) in _cyhal_adc_read_raw()
594 Cy_ADCMic_DisableInterrupt(obj->adc->base, CY_ADCMIC_INTR_DC); in _cyhal_adc_read_raw()
596 return Cy_ADCMic_GetDcResult(obj->adc->base); in _cyhal_adc_read_raw()
599 uint16_t cyhal_adc_read_u16(const cyhal_adc_channel_t *obj) in cyhal_adc_read_u16() argument
601 CY_ASSERT(NULL != obj); in cyhal_adc_read_u16()
602 return _cyhal_adc_cnt_to_u16(obj->adc, _cyhal_adc_read_raw(obj)); in cyhal_adc_read_u16()
605 int32_t cyhal_adc_read(const cyhal_adc_channel_t *obj) in cyhal_adc_read() argument
607 CY_ASSERT(NULL != obj); in cyhal_adc_read()
608 return (int32_t)(cyhal_adc_read_u16(obj)); in cyhal_adc_read()
611 int32_t cyhal_adc_read_uv(const cyhal_adc_channel_t *obj) in cyhal_adc_read_uv() argument
613 CY_ASSERT(NULL != obj); in cyhal_adc_read_uv()
614 return Cy_ADCMic_CountsTo_uVolts(_cyhal_adc_read_raw(obj), &obj->adc->pdl_context); in cyhal_adc_read_uv()
617 static void _cyhal_adcmic_start_async_read(cyhal_adc_t* obj, size_t num_scan, int32_t* result_list) in _cyhal_adcmic_start_async_read() argument
619 CY_ASSERT(NULL == obj->async_buff_next); /* Transfer already in progress */ in _cyhal_adcmic_start_async_read()
621 obj->current_channel_index = 0; in _cyhal_adcmic_start_async_read()
622 obj->async_scans_remaining = num_scan; in _cyhal_adcmic_start_async_read()
623 obj->async_buff_next = result_list; in _cyhal_adcmic_start_async_read()
624 _cyhal_adcmic_find_next_channel(obj, &(obj->current_channel_index), &(obj->async_buff_next)); in _cyhal_adcmic_start_async_read()
625 if(NULL == obj->channel_config[obj->current_channel_index] in _cyhal_adcmic_start_async_read()
626 || (false == obj->channel_config[obj->current_channel_index]->enabled)) in _cyhal_adcmic_start_async_read()
629 obj->async_buff_next = NULL; in _cyhal_adcmic_start_async_read()
630 obj->async_scans_remaining = 0u; in _cyhal_adcmic_start_async_read()
634 …Cy_ADCMic_SelectDcChannel(obj->base, obj->channel_config[obj->current_channel_index]->channel_sel); in _cyhal_adcmic_start_async_read()
635 Cy_ADCMic_ClearInterrupt(obj->base, CY_ADCMIC_INTR_DC); in _cyhal_adcmic_start_async_read()
636 Cy_ADCMic_EnableInterrupt(obj->base, CY_ADCMIC_INTR_DC); in _cyhal_adcmic_start_async_read()
637 Cy_ADCMic_EnableTimer(obj->base); in _cyhal_adcmic_start_async_read()
642 cy_rslt_t cyhal_adc_read_async(cyhal_adc_t* obj, size_t num_scan, int32_t* result_list) in cyhal_adc_read_async() argument
644 CY_ASSERT(NULL != obj); in cyhal_adc_read_async()
645 obj->async_transfer_in_uv = false; in cyhal_adc_read_async()
646 _cyhal_adcmic_start_async_read(obj, num_scan, result_list); in cyhal_adc_read_async()
650 cy_rslt_t cyhal_adc_read_async_uv(cyhal_adc_t* obj, size_t num_scan, int32_t* result_list) in cyhal_adc_read_async_uv() argument
652 CY_ASSERT(NULL != obj); in cyhal_adc_read_async_uv()
653 obj->async_transfer_in_uv = true; in cyhal_adc_read_async_uv()
654 _cyhal_adcmic_start_async_read(obj, num_scan, result_list); in cyhal_adc_read_async_uv()
658 cy_rslt_t cyhal_adc_set_async_mode(cyhal_adc_t *obj, cyhal_async_mode_t mode, uint8_t dma_priority) in cyhal_adc_set_async_mode() argument
660 CY_UNUSED_PARAMETER(obj); in cyhal_adc_set_async_mode()
662 CY_ASSERT(NULL != obj); in cyhal_adc_set_async_mode()
663 CY_ASSERT(NULL == obj->async_buff_next); /* Can't swap mode while a transfer is running */ in cyhal_adc_set_async_mode()
676 void cyhal_adc_register_callback(cyhal_adc_t *obj, cyhal_adc_event_callback_t callback, void *callb… in cyhal_adc_register_callback() argument
678 CY_ASSERT(NULL != obj); in cyhal_adc_register_callback()
681 obj->callback_data.callback = (cy_israddress) callback; in cyhal_adc_register_callback()
682 obj->callback_data.callback_arg = callback_arg; in cyhal_adc_register_callback()
686 void cyhal_adc_enable_event(cyhal_adc_t *obj, cyhal_adc_event_t event, uint8_t intr_priority, bool … in cyhal_adc_enable_event() argument
693 obj->user_enabled_events |= event; in cyhal_adc_enable_event()
697 obj->user_enabled_events &= ~event; in cyhal_adc_enable_event()
700 _cyhal_system_irq_t irqn = _cyhal_adcmic_irq_n[obj->resource.block_num]; in cyhal_adc_enable_event()
704 cy_rslt_t cyhal_adc_connect_digital(cyhal_adc_t *obj, cyhal_source_t source, cyhal_adc_input_t inpu… in cyhal_adc_connect_digital() argument
707 CY_UNUSED_PARAMETER(obj); in cyhal_adc_connect_digital()
713 cy_rslt_t cyhal_adc_enable_output(cyhal_adc_t *obj, cyhal_adc_output_t output, cyhal_source_t *sour… in cyhal_adc_enable_output() argument
716 CY_UNUSED_PARAMETER(obj); in cyhal_adc_enable_output()
722 cy_rslt_t cyhal_adc_disconnect_digital(cyhal_adc_t *obj, cyhal_source_t source, cyhal_adc_input_t … in cyhal_adc_disconnect_digital() argument
725 CY_UNUSED_PARAMETER(obj); in cyhal_adc_disconnect_digital()
731 cy_rslt_t cyhal_adc_disable_output(cyhal_adc_t *obj, cyhal_adc_output_t output) in cyhal_adc_disable_output() argument
734 CY_UNUSED_PARAMETER(obj); in cyhal_adc_disable_output()