/* * API to initialize the INTERRUPT APP */ INTERRUPT_STATUS_t INTERRUPT_Init(const INTERRUPT_t *const handler) { XMC_ASSERT("INTERRUPT_Init:HandlePtr NULL", (handler != NULL)); #if(UC_FAMILY == XMC4) NVIC_SetPriority(handler->node, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), handler->priority, handler->subpriority)); if (handler->enable_at_init == true) { INTERRUPT_Enable(handler); } #endif #if(UC_FAMILY == XMC1) NVIC_SetPriority(handler->node, handler->priority); #if (UC_SERIES == XMC14) XMC_SCU_SetInterruptControl((uint8_t)handler->node, (XMC_SCU_IRQCTRL_t)((handler->node << 8) | handler->irqctrl)); #endif /* Enable the interrupt if enable_at_init is enabled */ if (handler->enable_at_init == true) { INTERRUPT_Enable(handler); } #endif return (INTERRUPT_STATUS_SUCCESS); }
/* * API to initialize the PIN_INTERRUPT APP ERU Event Trigger Logic, Output Gating Unit Hardware initialization * and NVIC node configuration. */ PIN_INTERRUPT_STATUS_t PIN_INTERRUPT_Init(const PIN_INTERRUPT_t *const handle) { XMC_ASSERT("PIN_INTERRUPT_Init: PIN_INTERRUPT APP handle function pointer uninitialized", (handle != NULL)); /* Initializes input pin characteristics */ XMC_GPIO_Init(handle->port, handle->pin, &handle->gpio_config); /* ERU Event Trigger Logic Hardware initialization based on UI */ XMC_ERU_ETL_Init(handle->eru, handle->etl, &handle->etl_config); /* OGU is configured to generate event on configured trigger edge */ XMC_ERU_OGU_SetServiceRequestMode(handle->eru, handle->ogu, XMC_ERU_OGU_SERVICE_REQUEST_ON_TRIGGER); #if (UC_FAMILY == XMC1) /* Configure NVIC node and priority */ NVIC_SetPriority((IRQn_Type)handle->IRQn, handle->irq_priority); #else /* Configure NVIC node, priority and subpriority */ NVIC_SetPriority((IRQn_Type)handle->IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), handle->irq_priority, handle->irq_subpriority)); #endif #if (UC_SERIES == XMC14) XMC_SCU_SetInterruptControl((IRQn_Type)handle->IRQn, (XMC_SCU_IRQCTRL_t)handle->irqctrl); #endif if (true == handle->enable_at_init) { /* Clear pending interrupt before enabling it */ NVIC_ClearPendingIRQ((IRQn_Type)handle->IRQn); /* Enable NVIC node */ NVIC_EnableIRQ((IRQn_Type)handle->IRQn); } return (PIN_INTERRUPT_STATUS_SUCCESS); }
/* Initialization routine to call ADC LLD API's */ ADC_MEASUREMENT_STATUS_t ADC_MEASUREMENT_Init(ADC_MEASUREMENT_t *const handle_ptr) { const ADC_MEASUREMENT_CHANNEL_t *indexed; uint8_t j; ADC_MEASUREMENT_STATUS_t status; XMC_ASSERT("ADC_MEASUREMENT_Init:Invalid handle_ptr", (handle_ptr != NULL)) if (ADC_MEASUREMENT_STATUS_UNINITIALIZED == handle_ptr->init_state) { /* Call the function to initialise Clock and ADC global functional units*/ status = (ADC_MEASUREMENT_STATUS_t) GLOBAL_ADC_Init(handle_ptr->global_handle); /*Initialize the Global Conversion class 0*/ XMC_VADC_GLOBAL_InputClassInit(handle_ptr->global_handle->module_ptr,*handle_ptr->iclass_config_handle, XMC_VADC_GROUP_CONV_STD,ADC_MEASUREMENT_ICLASS_NUM); #if (UC_SERIES == XMC11) /*Initialize the Global Conversion class 1*/ XMC_VADC_GLOBAL_InputClassInit(handle_ptr->global_handle->module_ptr,*handle_ptr->iclass_config_handle, XMC_VADC_GROUP_CONV_STD,ADC_MEASUREMENT_ICLASS_NUM_XMC11); #endif /* Initialize the Background Scan hardware */ XMC_VADC_GLOBAL_BackgroundInit(handle_ptr->global_handle->module_ptr, handle_ptr->backgnd_config_handle); #if (XMC_VADC_GROUP_AVAILABLE == 0U) /* Initialize the global result register */ XMC_VADC_GLOBAL_ResultInit(handle_ptr->global_handle->module_ptr,handle_ptr->array->res_handle); #endif for (j = (uint8_t)0; j < (uint8_t)ADC_MEASUREMENT_MAXCHANNELS; j++) { indexed = handle_ptr->array->channel_array[j]; #if (XMC_VADC_GROUP_AVAILABLE == 1U) /* Initialize for configured channels*/ XMC_VADC_GROUP_ChannelInit(indexed->group_handle,(uint32_t)indexed->ch_num, indexed->ch_handle); /* Initialize for configured result registers */ XMC_VADC_GROUP_ResultInit(indexed->group_handle, (uint32_t)indexed->ch_handle->result_reg_number, indexed->res_handle); #endif /* Add all channels into the Background Request Source Channel Select Register */ XMC_VADC_GLOBAL_BackgroundAddChannelToSequence(handle_ptr->global_handle->module_ptr, (uint32_t)indexed->group_index, (uint32_t)indexed->ch_num); #ifdef ADC_MEASUREMENT_ANALOG_IO_USED /* ANALOG_IO initialization for the channel*/ if(indexed->analog_io_config != NULL) { status |= (ADC_MEASUREMENT_STATUS_t) ANALOG_IO_Init(indexed->analog_io_config); } #endif } #if(UC_SERIES != XMC11) if ((handle_ptr->backgnd_config_handle->req_src_interrupt) && (handle_ptr->req_src_intr_handle != NULL )) { #if (UC_FAMILY == XMC1) NVIC_SetPriority((IRQn_Type)handle_ptr->req_src_intr_handle->node_id, handle_ptr->req_src_intr_handle->priority); #else NVIC_SetPriority((IRQn_Type)handle_ptr->req_src_intr_handle->node_id, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), handle_ptr->req_src_intr_handle->priority, handle_ptr->req_src_intr_handle->sub_priority)); #endif /* Connect background Request Source Event to NVIC node */ XMC_VADC_GLOBAL_BackgroundSetReqSrcEventInterruptNode(handle_ptr->global_handle->module_ptr, (XMC_VADC_SR_t) handle_ptr->srv_req_node); /* Enable Background Scan Request source IRQ */ NVIC_EnableIRQ((IRQn_Type)handle_ptr->req_src_intr_handle->node_id); #ifdef ADC_MEASUREMENT_NON_DEFAULT_IRQ_SOURCE_SELECTED XMC_SCU_SetInterruptControl(handle_ptr->req_src_intr_handle->node_id, ((handle_ptr->req_src_intr_handle->node_id << 8) | handle_ptr->req_src_intr_handle->irqctrl)); #endif } #else /* Selected device is XMC11*/ XMC_VADC_GLOBAL_SetResultEventInterruptNode(handle_ptr->global_handle->module_ptr, handle_ptr->srv_req_node ); #ifdef ADC_MEASUREMENT_CPU_1X /* End of single measurement is enabled*/ NVIC_SetPriority((IRQn_Type)handle_ptr->result_intr_handle->node_id, handle_ptr->result_intr_handle->priority); /* Enable Background Scan Request source IRQ */ NVIC_EnableIRQ((IRQn_Type)handle_ptr->result_intr_handle->node_id); #endif #endif /* Mux Configuration is done*/ if (handle_ptr->mux_config != NULL) { (handle_ptr->mux_config)(); } if (handle_ptr->start_conversion != (bool)false) { /* Start conversion manually using load event trigger*/ XMC_VADC_GLOBAL_BackgroundTriggerConversion(handle_ptr->global_handle->module_ptr); } handle_ptr->init_state = status; } return (handle_ptr->init_state); }